Skip to content

Commit b5b97e2

Browse files
os-zhuangclaude
andauthored
fix(types,layout): nav item type 'component' joins NavigationItemType and its zod enum (#2918) (#3039)
The renderers have carried a full `type: 'component'` implementation (componentRef → /component/<ns>/<name>, params → querystring, metadata:* special-cases), and @objectstack/spec has ComponentNavItem — but the local vocabulary never gained the member. NavigationItemTypeSchema rejected `type: 'component'` at validation time, so authors could not declare one: the feature was dead on arrival rather than dead code. - NavigationItemType + NavigationItemTypeSchema gain 'component'; NavigationItem gains componentRef/params (declared in zod too, so parse no longer strips them), mirroring spec's ComponentNavItem. - The `(item as any)` casts in the two renderer sites become typed. - NavigationDesigner's exhaustive Record gains a component entry, with appDesigner.navTypeComponent in the designer fallback + 10 locales. - layout gains "type-check" (src + tests via tsconfig.test.json, with the #2915 paths override); its DEBT entry is deleted — coverage is now 42/45. Proof: navigation-model.test.ts validates a component item end-to-end, resolveHref.test.ts covers the /component and metadata:* routing, and AppSchemaRenderer.test.tsx renders one through the real sidebar. Co-authored-by: Jack Zhuang <277994282+os-zhuang@users.noreply.github.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
1 parent 9a04d25 commit b5b97e2

24 files changed

Lines changed: 196 additions & 8 deletions
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
---
2+
"@object-ui/types": minor
3+
"@object-ui/layout": patch
4+
"@object-ui/plugin-designer": patch
5+
"@object-ui/i18n": patch
6+
---
7+
8+
fix(types,layout): nav item type `component` joins `NavigationItemType` and its zod enum — objectui#2918
9+
10+
The renderers have carried a full `type: 'component'` implementation (Phase 3b:
11+
`componentRef` colon-split to `/component/<ns>/<name>`, `params` serialised as
12+
querystring, `metadata:*` special-cases) — but the vocabulary never gained the
13+
member, and `@objectstack/spec` has had `ComponentNavItem` all along. The zod
14+
enum was the part that bit: `NavigationItemTypeSchema` rejected
15+
`type: 'component'` at validation time, so authors could not declare one and
16+
the renderer half was unreachable — dead on arrival rather than dead code.
17+
18+
- `NavigationItemType` and `NavigationItemTypeSchema` gain `'component'`;
19+
`NavigationItem` gains the fields the renderer consumes, `componentRef` and
20+
`params` (also used by `type: 'page'`), mirroring spec's `ComponentNavItem`
21+
declared in zod too, so parse no longer strips them.
22+
- The `(item as any).componentRef` / `params` casts in `NavigationRenderer`
23+
and `AppSchemaRenderer` become typed access.
24+
- `NavigationDesigner`'s exhaustive type-meta map gains a `component` badge
25+
(new `appDesigner.navTypeComponent` key in all 10 locales).
26+
- `@object-ui/layout` gains `type-check` (src + tests) with the #2915 `paths`
27+
override; its DEBT entry in `check-type-check-coverage.mjs` is deleted.

packages/i18n/src/locales/ar.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1071,6 +1071,7 @@ const ar = {
10711071
navTypeGroup: "مجموعة",
10721072
navTypeSeparator: "فاصل",
10731073
navTypeAction: "إجراء",
1074+
navTypeComponent: "مكوّن",
10741075
navEditIcon: "تعديل الأيقونة",
10751076
navToggleVisible: "تبديل الرؤية",
10761077
navHidden: "مخفي",

packages/i18n/src/locales/de.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1071,6 +1071,7 @@ const de = {
10711071
navTypeGroup: "Gruppe",
10721072
navTypeSeparator: "Trenner",
10731073
navTypeAction: "Aktion",
1074+
navTypeComponent: "Komponente",
10741075
navEditIcon: "Symbol bearbeiten",
10751076
navToggleVisible: "Sichtbarkeit umschalten",
10761077
navHidden: "Ausgeblendet",

packages/i18n/src/locales/en.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1227,6 +1227,7 @@ const en = {
12271227
navTypeGroup: 'Group',
12281228
navTypeSeparator: 'Separator',
12291229
navTypeAction: 'Action',
1230+
navTypeComponent: 'Component',
12301231
navEditIcon: 'Edit icon',
12311232
navToggleVisible: 'Toggle visibility',
12321233
navHidden: 'Hidden',

packages/i18n/src/locales/es.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1071,6 +1071,7 @@ const es = {
10711071
navTypeGroup: "Grupo",
10721072
navTypeSeparator: "Separador",
10731073
navTypeAction: "Acción",
1074+
navTypeComponent: "Componente",
10741075
navEditIcon: "Editar icono",
10751076
navToggleVisible: "Alternar visibilidad",
10761077
navHidden: "Oculto",

packages/i18n/src/locales/fr.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1071,6 +1071,7 @@ const fr = {
10711071
navTypeGroup: "Groupe",
10721072
navTypeSeparator: "Séparateur",
10731073
navTypeAction: "Action",
1074+
navTypeComponent: "Composant",
10741075
navEditIcon: "Modifier l'icône",
10751076
navToggleVisible: "Basculer la visibilité",
10761077
navHidden: "Masqué",

packages/i18n/src/locales/ja.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1071,6 +1071,7 @@ const ja = {
10711071
navTypeGroup: "グループ",
10721072
navTypeSeparator: "区切り",
10731073
navTypeAction: "アクション",
1074+
navTypeComponent: "コンポーネント",
10741075
navEditIcon: "アイコンを編集",
10751076
navToggleVisible: "表示を切り替え",
10761077
navHidden: "非表示",

packages/i18n/src/locales/ko.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1071,6 +1071,7 @@ const ko = {
10711071
navTypeGroup: "그룹",
10721072
navTypeSeparator: "구분선",
10731073
navTypeAction: "작업",
1074+
navTypeComponent: "컴포넌트",
10741075
navEditIcon: "아이콘 편집",
10751076
navToggleVisible: "가시성 토글",
10761077
navHidden: "숨김",

packages/i18n/src/locales/pt.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1071,6 +1071,7 @@ const pt = {
10711071
navTypeGroup: "Grupo",
10721072
navTypeSeparator: "Separador",
10731073
navTypeAction: "Ação",
1074+
navTypeComponent: "Componente",
10741075
navEditIcon: "Editar ícone",
10751076
navToggleVisible: "Alternar visibilidade",
10761077
navHidden: "Oculto",

packages/i18n/src/locales/ru.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1071,6 +1071,7 @@ const ru = {
10711071
navTypeGroup: "Группа",
10721072
navTypeSeparator: "Разделитель",
10731073
navTypeAction: "Действие",
1074+
navTypeComponent: "Компонент",
10741075
navEditIcon: "Редактировать значок",
10751076
navToggleVisible: "Переключить видимость",
10761077
navHidden: "Скрыто",

0 commit comments

Comments
 (0)