Releases: objectstack-ai/objectui
Release list
@object-ui/types@14.0.0
Minor Changes
-
86c69c3: ADR-0089: read the canonical
visibleWhenconditional-visibility predicate in the form + page renderers.@objectstack/specnow unifies conditional visibility under a single canonical key,visibleWhen, and folds the deprecatedvisibleOn(view form) /visibility(page component) aliases into it at parse. This updates ObjectUI to read the canonical key:- Page renderer (
SchemaRenderer) — evaluatesvisibleWhenfirst (show-when-truthy), then the deprecatedvisibleOn/visibilityas a defensive read for raw / un-normalized metadata.visibleWhenis stripped from DOM props. - Spec→node bridges — the page bridge maps a component's
visibleWhen ?? visibilityonto the node's canonicalvisibleWhen; the form-view bridge maps a field'svisibleWhen ?? visibleOnonto the ObjectForm view-level predicate slot. - Form renderers — the
@object-ui/reactFormRendererprefersvisibleWhenover thevisibleOnalias. (ObjectForm/form.tsxalready evaluatedvisibleWhen.) - Types — the component base schema (
BaseSchema/base.zod) gains the canonicalvisibleWhen;visibleOnis marked@deprecated.
Fully back-compat: existing
visibleOn/visibilitymetadata keeps working through the alias reads. - Page renderer (
-
6a74160: Sharing-rule form: pick, don't type. Three new widget-hint field components make
the generic object form render pickers where an admin previously had to type
machine data (driven by the frameworkwidgethints onsys_sharing_rule;
generalizes thecapability-multiselectpattern). All degrade to the underlying
typerenderer when a widget is unregistered.object-ref— choose a registered object by name (searchableCombobox),
backed by the newDataSource.getObjects()(ObjectStackAdapterlists code-
and DB-defined objects via/api/v1/meta/object), falling back to a
sys_metadataquery. Stores the object'sname.filter-condition— a visual criteria builder (FilterBuilder) scoped to
the fields of the object chosen in a sibling field (viagetObjectSchema),
round-tripping the stored MongoDB-style FilterCondition JSON. Criteria the
builder can't represent (or invalid JSON) fall back to a raw-JSON editor, with
an always-available "Edit as JSON" toggle — nothing is hidden or lost.recipient-picker— a record picker whose target object follows a sibling
recipient_type(user→sys_user,team→sys_team,business_unit/
unit_and_subordinates→sys_business_unit,position→sys_position), storing the
value the evaluator matches on (a record id, or the position name). Resets
the stored id when the type changes.
Wiring: the three keys join
DATA_SOURCE_FIELD_TYPES(form.tsx) so the form
threadsdataSource+dependentValuesto them, andINLINE_EXCLUDED_FIELD_TYPES
(they're authored in the record form, not a grid cell).DataSource.getObjects()
is optional on the interface; the ObjectStack adapter implements it.
@object-ui/tenant@14.0.0
@object-ui/sdui-parser@14.0.0
@object-ui/sdui-parser@14.0.0
@object-ui/runner@14.0.0
Patch Changes
- Updated dependencies [443360a]
- Updated dependencies [86c69c3]
- Updated dependencies [05e56ca]
- Updated dependencies [a44e7b6]
- Updated dependencies [6a74160]
- @object-ui/core@14.0.0
- @object-ui/react@14.0.0
- @object-ui/types@14.0.0
- @object-ui/components@14.0.0
- @object-ui/plugin-charts@14.0.0
- @object-ui/plugin-kanban@14.0.0
@object-ui/react@14.0.0
Minor Changes
-
86c69c3: ADR-0089: read the canonical
visibleWhenconditional-visibility predicate in the form + page renderers.@objectstack/specnow unifies conditional visibility under a single canonical key,visibleWhen, and folds the deprecatedvisibleOn(view form) /visibility(page component) aliases into it at parse. This updates ObjectUI to read the canonical key:- Page renderer (
SchemaRenderer) — evaluatesvisibleWhenfirst (show-when-truthy), then the deprecatedvisibleOn/visibilityas a defensive read for raw / un-normalized metadata.visibleWhenis stripped from DOM props. - Spec→node bridges — the page bridge maps a component's
visibleWhen ?? visibilityonto the node's canonicalvisibleWhen; the form-view bridge maps a field'svisibleWhen ?? visibleOnonto the ObjectForm view-level predicate slot. - Form renderers — the
@object-ui/reactFormRendererprefersvisibleWhenover thevisibleOnalias. (ObjectForm/form.tsxalready evaluatedvisibleWhen.) - Types — the component base schema (
BaseSchema/base.zod) gains the canonicalvisibleWhen;visibleOnis marked@deprecated.
Fully back-compat: existing
visibleOn/visibilitymetadata keeps working through the alias reads. - Page renderer (
Patch Changes
@object-ui/react-runtime@14.0.0
@object-ui/react-runtime@14.0.0
@object-ui/providers@14.0.0
@object-ui/plugin-view@14.0.0
Patch Changes
-
05e56ca: 导出/导入模板的下载文件名与内容本地化。
导出文件名:CSV/Excel/JSON 导出下载不再是
<对象名>.<扩展名>(如contracts.csv),改为「对象显示名-视图名-时间戳.扩展名」(如任务-In Progress-20260714-153045.xlsx);exportOptions.fileNamePrefix配置仍优先(且作为完整前缀,不再追加视图名)。视图名与对象名重复时自动省略;@object-ui/core新增buildExportFileName(ext, { prefix, label, objectName, viewLabel }, now?)与sanitizeFileNameBase(raw),ObjectGrid 与 ListView 的所有导出路径(服务端流式与前端兜底)统一走它。app-shell/plugin-view 的 ObjectView 现将当前视图的显示标签写进传给 ListView 的 schema(label),使导出文件名能区分同一对象的不同保存视图。导入模板:「下载模板」修复两处英文漏出——示例行的 select/多选取值改为优先取选项显示标签(如
准备中)而非 ASCII slug(prepare,服务端导入两者都接受);模板文件名本地化为{{object}}-导入模板.csv(新增 i18n keygrid.import.templateFileName,英文回退{{object}}-import-template.csv)。 -
Updated dependencies [443360a]
-
Updated dependencies [c70bca7]
-
Updated dependencies [86c69c3]
-
Updated dependencies [05e56ca]
-
Updated dependencies [a44e7b6]
-
Updated dependencies [5971cc4]
-
Updated dependencies [6a74160]
- @object-ui/core@14.0.0
- @object-ui/i18n@14.0.0
- @object-ui/react@14.0.0
- @object-ui/types@14.0.0
- @object-ui/plugin-grid@14.0.0
- @object-ui/components@14.0.0
- @object-ui/plugin-form@14.0.0
@object-ui/plugin-tree@14.0.0
Patch Changes
-
5971cc4: i18n: translate the Profile page, honor inline i18n label objects under bare
base-language codes, and localize managed-by badges / record quick actions.pickLocalizednow upgrades a bare base language (zh) to any
region-qualified key sharing the base (zh-CN) — runtime language is
normalized to the base code while metadata authors write full BCP-47 tags,
so inline{ en, 'zh-CN', ... }label objects previously fell back to
English.- ProfilePage (
account:profile_card//system/profile): every hardcoded
string — page title/subtitle, avatar Upload/Replace/Remove, Personal
Information card, Change/Set Password card — now goes through
useObjectTranslation()withprofile.*keys (new namespace in all ten
locale bundles); the lazy-load fallback reusescommon.loading. ManagedByBadgechips/tooltips (Config/System/Append-only/Identity) now
resolve through newmanagedByBadge.*keys with{{provider}}
interpolation.record:quick_actionsresolves action labels via the
objects.{object}._actions.{action}.labelconvention pluspickLocalized,
so object action buttons (Change Password, Enable 2FA, …) localize.record:details/record:related_list/record:alert/ObjectTree
pass inline label objects throughpickLocalized.- Locale bundles: added
managedByBadgenamespace to all ten locales and
backfilledlist.inlineEditShort/inlineEditLabel/
recordEditingTitlefor ja/es/ko/de/fr/pt/ru/ar.
-
Updated dependencies [443360a]
-
Updated dependencies [86c69c3]
-
Updated dependencies [05e56ca]
-
Updated dependencies [a44e7b6]
-
Updated dependencies [6a74160]
- @object-ui/core@14.0.0
- @object-ui/react@14.0.0
- @object-ui/types@14.0.0
- @object-ui/components@14.0.0