@ankhorage/zora 1.3.0 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +208 -0
- package/dist/components/app-bar/meta.d.ts +9 -0
- package/dist/components/app-bar/meta.d.ts.map +1 -0
- package/dist/components/app-bar/meta.js +9 -0
- package/dist/components/app-bar/meta.js.map +1 -0
- package/dist/components/avatar/meta.d.ts +9 -0
- package/dist/components/avatar/meta.d.ts.map +1 -0
- package/dist/components/avatar/meta.js +9 -0
- package/dist/components/avatar/meta.js.map +1 -0
- package/dist/components/avatar-group/meta.d.ts +9 -0
- package/dist/components/avatar-group/meta.d.ts.map +1 -0
- package/dist/components/avatar-group/meta.js +9 -0
- package/dist/components/avatar-group/meta.js.map +1 -0
- package/dist/components/badge/meta.d.ts +9 -0
- package/dist/components/badge/meta.d.ts.map +1 -0
- package/dist/components/badge/meta.js +9 -0
- package/dist/components/badge/meta.js.map +1 -0
- package/dist/components/button/meta.d.ts +45 -0
- package/dist/components/button/meta.d.ts.map +1 -0
- package/dist/components/button/meta.js +45 -0
- package/dist/components/button/meta.js.map +1 -0
- package/dist/components/card/meta.d.ts +44 -0
- package/dist/components/card/meta.d.ts.map +1 -0
- package/dist/components/card/meta.js +45 -0
- package/dist/components/card/meta.js.map +1 -0
- package/dist/components/checkbox/meta.d.ts +17 -0
- package/dist/components/checkbox/meta.d.ts.map +1 -0
- package/dist/components/checkbox/meta.js +17 -0
- package/dist/components/checkbox/meta.js.map +1 -0
- package/dist/components/chip/meta.d.ts +9 -0
- package/dist/components/chip/meta.d.ts.map +1 -0
- package/dist/components/chip/meta.js +9 -0
- package/dist/components/chip/meta.js.map +1 -0
- package/dist/components/chip-group/meta.d.ts +9 -0
- package/dist/components/chip-group/meta.d.ts.map +1 -0
- package/dist/components/chip-group/meta.js +9 -0
- package/dist/components/chip-group/meta.js.map +1 -0
- package/dist/components/drawer/meta.d.ts +9 -0
- package/dist/components/drawer/meta.d.ts.map +1 -0
- package/dist/components/drawer/meta.js +9 -0
- package/dist/components/drawer/meta.js.map +1 -0
- package/dist/components/form/index.d.ts +1 -1
- package/dist/components/form/index.d.ts.map +1 -1
- package/dist/components/form/index.js.map +1 -1
- package/dist/components/form/meta.d.ts +79 -0
- package/dist/components/form/meta.d.ts.map +1 -0
- package/dist/components/form/meta.js +79 -0
- package/dist/components/form/meta.js.map +1 -0
- package/dist/components/form/types.d.ts +2 -1
- package/dist/components/form/types.d.ts.map +1 -1
- package/dist/components/form/types.js.map +1 -1
- package/dist/components/heading/meta.d.ts +69 -0
- package/dist/components/heading/meta.d.ts.map +1 -0
- package/dist/components/heading/meta.js +66 -0
- package/dist/components/heading/meta.js.map +1 -0
- package/dist/components/icon/meta.d.ts +9 -0
- package/dist/components/icon/meta.d.ts.map +1 -0
- package/dist/components/icon/meta.js +9 -0
- package/dist/components/icon/meta.js.map +1 -0
- package/dist/components/icon-button/meta.d.ts +9 -0
- package/dist/components/icon-button/meta.d.ts.map +1 -0
- package/dist/components/icon-button/meta.js +9 -0
- package/dist/components/icon-button/meta.js.map +1 -0
- package/dist/components/image/meta.d.ts +9 -0
- package/dist/components/image/meta.d.ts.map +1 -0
- package/dist/components/image/meta.js +9 -0
- package/dist/components/image/meta.js.map +1 -0
- package/dist/components/input/meta.d.ts +45 -0
- package/dist/components/input/meta.d.ts.map +1 -0
- package/dist/components/input/meta.js +45 -0
- package/dist/components/input/meta.js.map +1 -0
- package/dist/components/media-card/meta.d.ts +9 -0
- package/dist/components/media-card/meta.d.ts.map +1 -0
- package/dist/components/media-card/meta.js +9 -0
- package/dist/components/media-card/meta.js.map +1 -0
- package/dist/components/metric-card/meta.d.ts +9 -0
- package/dist/components/metric-card/meta.d.ts.map +1 -0
- package/dist/components/metric-card/meta.js +9 -0
- package/dist/components/metric-card/meta.js.map +1 -0
- package/dist/components/modal/meta.d.ts +9 -0
- package/dist/components/modal/meta.d.ts.map +1 -0
- package/dist/components/modal/meta.js +9 -0
- package/dist/components/modal/meta.js.map +1 -0
- package/dist/components/navigation-item/meta.d.ts +9 -0
- package/dist/components/navigation-item/meta.d.ts.map +1 -0
- package/dist/components/navigation-item/meta.js +9 -0
- package/dist/components/navigation-item/meta.js.map +1 -0
- package/dist/components/navigation-list/meta.d.ts +9 -0
- package/dist/components/navigation-list/meta.d.ts.map +1 -0
- package/dist/components/navigation-list/meta.js +9 -0
- package/dist/components/navigation-list/meta.js.map +1 -0
- package/dist/components/progress/meta.d.ts +9 -0
- package/dist/components/progress/meta.d.ts.map +1 -0
- package/dist/components/progress/meta.js +9 -0
- package/dist/components/progress/meta.js.map +1 -0
- package/dist/components/radio/meta.d.ts +17 -0
- package/dist/components/radio/meta.d.ts.map +1 -0
- package/dist/components/radio/meta.js +17 -0
- package/dist/components/radio/meta.js.map +1 -0
- package/dist/components/rating/meta.d.ts +9 -0
- package/dist/components/rating/meta.d.ts.map +1 -0
- package/dist/components/rating/meta.js +9 -0
- package/dist/components/rating/meta.js.map +1 -0
- package/dist/components/search-bar/meta.d.ts +9 -0
- package/dist/components/search-bar/meta.d.ts.map +1 -0
- package/dist/components/search-bar/meta.js +9 -0
- package/dist/components/search-bar/meta.js.map +1 -0
- package/dist/components/select/meta.d.ts +9 -0
- package/dist/components/select/meta.d.ts.map +1 -0
- package/dist/components/select/meta.js +9 -0
- package/dist/components/select/meta.js.map +1 -0
- package/dist/components/tabs/meta.d.ts +9 -0
- package/dist/components/tabs/meta.d.ts.map +1 -0
- package/dist/components/tabs/meta.js +9 -0
- package/dist/components/tabs/meta.js.map +1 -0
- package/dist/components/text/meta.d.ts +71 -0
- package/dist/components/text/meta.d.ts.map +1 -0
- package/dist/components/text/meta.js +68 -0
- package/dist/components/text/meta.js.map +1 -0
- package/dist/components/textarea/meta.d.ts +45 -0
- package/dist/components/textarea/meta.d.ts.map +1 -0
- package/dist/components/textarea/meta.js +45 -0
- package/dist/components/textarea/meta.js.map +1 -0
- package/dist/components/toolbar/meta.d.ts +17 -0
- package/dist/components/toolbar/meta.d.ts.map +1 -0
- package/dist/components/toolbar/meta.js +17 -0
- package/dist/components/toolbar/meta.js.map +1 -0
- package/dist/foundation/meta.d.ts +93 -0
- package/dist/foundation/meta.d.ts.map +1 -0
- package/dist/foundation/meta.js +84 -0
- package/dist/foundation/meta.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/layout/app-shell/meta.d.ts +9 -0
- package/dist/layout/app-shell/meta.d.ts.map +1 -0
- package/dist/layout/app-shell/meta.js +9 -0
- package/dist/layout/app-shell/meta.js.map +1 -0
- package/dist/layout/auth-layout/meta.d.ts +33 -0
- package/dist/layout/auth-layout/meta.d.ts.map +1 -0
- package/dist/layout/auth-layout/meta.js +34 -0
- package/dist/layout/auth-layout/meta.js.map +1 -0
- package/dist/layout/page/meta.d.ts +19 -0
- package/dist/layout/page/meta.d.ts.map +1 -0
- package/dist/layout/page/meta.js +20 -0
- package/dist/layout/page/meta.js.map +1 -0
- package/dist/layout/page-header/meta.d.ts +38 -0
- package/dist/layout/page-header/meta.d.ts.map +1 -0
- package/dist/layout/page-header/meta.js +38 -0
- package/dist/layout/page-header/meta.js.map +1 -0
- package/dist/layout/page-section/meta.d.ts +28 -0
- package/dist/layout/page-section/meta.d.ts.map +1 -0
- package/dist/layout/page-section/meta.js +29 -0
- package/dist/layout/page-section/meta.js.map +1 -0
- package/dist/layout/settings-layout/meta.d.ts +9 -0
- package/dist/layout/settings-layout/meta.d.ts.map +1 -0
- package/dist/layout/settings-layout/meta.js +9 -0
- package/dist/layout/settings-layout/meta.js.map +1 -0
- package/dist/layout/sidebar-layout/meta.d.ts +9 -0
- package/dist/layout/sidebar-layout/meta.d.ts.map +1 -0
- package/dist/layout/sidebar-layout/meta.js +9 -0
- package/dist/layout/sidebar-layout/meta.js.map +1 -0
- package/dist/layout/topbar-layout/meta.d.ts +9 -0
- package/dist/layout/topbar-layout/meta.d.ts.map +1 -0
- package/dist/layout/topbar-layout/meta.js +9 -0
- package/dist/layout/topbar-layout/meta.js.map +1 -0
- package/dist/metadata/allowedChildren.d.ts +4 -0
- package/dist/metadata/allowedChildren.d.ts.map +1 -0
- package/dist/metadata/allowedChildren.js +26 -0
- package/dist/metadata/allowedChildren.js.map +1 -0
- package/dist/metadata/componentMeta.d.ts +3 -0
- package/dist/metadata/componentMeta.d.ts.map +1 -0
- package/dist/metadata/componentMeta.js +143 -0
- package/dist/metadata/componentMeta.js.map +1 -0
- package/dist/metadata/index.d.ts +3 -0
- package/dist/metadata/index.d.ts.map +1 -0
- package/dist/metadata/index.js +2 -0
- package/dist/metadata/index.js.map +1 -0
- package/dist/metadata/types.d.ts +49 -0
- package/dist/metadata/types.d.ts.map +1 -0
- package/dist/metadata/types.js +2 -0
- package/dist/metadata/types.js.map +1 -0
- package/dist/patterns/auth/meta.d.ts +33 -0
- package/dist/patterns/auth/meta.d.ts.map +1 -0
- package/dist/patterns/auth/meta.js +34 -0
- package/dist/patterns/auth/meta.js.map +1 -0
- package/dist/patterns/collection-editor/meta.d.ts +9 -0
- package/dist/patterns/collection-editor/meta.d.ts.map +1 -0
- package/dist/patterns/collection-editor/meta.js +9 -0
- package/dist/patterns/collection-editor/meta.js.map +1 -0
- package/dist/patterns/confirm-dialog/meta.d.ts +9 -0
- package/dist/patterns/confirm-dialog/meta.d.ts.map +1 -0
- package/dist/patterns/confirm-dialog/meta.js +9 -0
- package/dist/patterns/confirm-dialog/meta.js.map +1 -0
- package/dist/patterns/disclosure-section/meta.d.ts +9 -0
- package/dist/patterns/disclosure-section/meta.d.ts.map +1 -0
- package/dist/patterns/disclosure-section/meta.js +9 -0
- package/dist/patterns/disclosure-section/meta.js.map +1 -0
- package/dist/patterns/empty-state/meta.d.ts +33 -0
- package/dist/patterns/empty-state/meta.d.ts.map +1 -0
- package/dist/patterns/empty-state/meta.js +33 -0
- package/dist/patterns/empty-state/meta.js.map +1 -0
- package/dist/patterns/filter-bar/meta.d.ts +9 -0
- package/dist/patterns/filter-bar/meta.d.ts.map +1 -0
- package/dist/patterns/filter-bar/meta.js +9 -0
- package/dist/patterns/filter-bar/meta.js.map +1 -0
- package/dist/patterns/hero/Hero.d.ts +4 -0
- package/dist/patterns/hero/Hero.d.ts.map +1 -0
- package/dist/patterns/hero/Hero.js +59 -0
- package/dist/patterns/hero/Hero.js.map +1 -0
- package/dist/patterns/hero/index.d.ts +3 -0
- package/dist/patterns/hero/index.d.ts.map +1 -0
- package/dist/patterns/hero/index.js +2 -0
- package/dist/patterns/hero/index.js.map +1 -0
- package/dist/patterns/hero/meta.d.ts +101 -0
- package/dist/patterns/hero/meta.d.ts.map +1 -0
- package/dist/patterns/hero/meta.js +94 -0
- package/dist/patterns/hero/meta.js.map +1 -0
- package/dist/patterns/hero/types.d.ts +27 -0
- package/dist/patterns/hero/types.d.ts.map +1 -0
- package/dist/patterns/hero/types.js +2 -0
- package/dist/patterns/hero/types.js.map +1 -0
- package/dist/patterns/image-preview/meta.d.ts +9 -0
- package/dist/patterns/image-preview/meta.d.ts.map +1 -0
- package/dist/patterns/image-preview/meta.js +9 -0
- package/dist/patterns/image-preview/meta.js.map +1 -0
- package/dist/patterns/image-upload-field/meta.d.ts +9 -0
- package/dist/patterns/image-upload-field/meta.d.ts.map +1 -0
- package/dist/patterns/image-upload-field/meta.js +9 -0
- package/dist/patterns/image-upload-field/meta.js.map +1 -0
- package/dist/patterns/inspector-field/meta.d.ts +9 -0
- package/dist/patterns/inspector-field/meta.d.ts.map +1 -0
- package/dist/patterns/inspector-field/meta.js +9 -0
- package/dist/patterns/inspector-field/meta.js.map +1 -0
- package/dist/patterns/list/meta.d.ts +25 -0
- package/dist/patterns/list/meta.d.ts.map +1 -0
- package/dist/patterns/list/meta.js +26 -0
- package/dist/patterns/list/meta.js.map +1 -0
- package/dist/patterns/notice/meta.d.ts +34 -0
- package/dist/patterns/notice/meta.d.ts.map +1 -0
- package/dist/patterns/notice/meta.js +35 -0
- package/dist/patterns/notice/meta.js.map +1 -0
- package/dist/patterns/panel/meta.d.ts +44 -0
- package/dist/patterns/panel/meta.d.ts.map +1 -0
- package/dist/patterns/panel/meta.js +45 -0
- package/dist/patterns/panel/meta.js.map +1 -0
- package/dist/patterns/responsive-panel/meta.d.ts +9 -0
- package/dist/patterns/responsive-panel/meta.d.ts.map +1 -0
- package/dist/patterns/responsive-panel/meta.js +9 -0
- package/dist/patterns/responsive-panel/meta.js.map +1 -0
- package/dist/patterns/section-header/meta.d.ts +33 -0
- package/dist/patterns/section-header/meta.d.ts.map +1 -0
- package/dist/patterns/section-header/meta.js +33 -0
- package/dist/patterns/section-header/meta.js.map +1 -0
- package/dist/patterns/selection/meta.d.ts +17 -0
- package/dist/patterns/selection/meta.d.ts.map +1 -0
- package/dist/patterns/selection/meta.js +18 -0
- package/dist/patterns/selection/meta.js.map +1 -0
- package/dist/patterns/settings-row/meta.d.ts +39 -0
- package/dist/patterns/settings-row/meta.d.ts.map +1 -0
- package/dist/patterns/settings-row/meta.js +39 -0
- package/dist/patterns/settings-row/meta.js.map +1 -0
- package/dist/patterns/switch-field/meta.d.ts +9 -0
- package/dist/patterns/switch-field/meta.d.ts.map +1 -0
- package/dist/patterns/switch-field/meta.js +9 -0
- package/dist/patterns/switch-field/meta.js.map +1 -0
- package/dist/patterns/theme-composer/meta.d.ts +9 -0
- package/dist/patterns/theme-composer/meta.d.ts.map +1 -0
- package/dist/patterns/theme-composer/meta.js +9 -0
- package/dist/patterns/theme-composer/meta.js.map +1 -0
- package/dist/patterns/tile-grid/meta.d.ts +17 -0
- package/dist/patterns/tile-grid/meta.d.ts.map +1 -0
- package/dist/patterns/tile-grid/meta.js +18 -0
- package/dist/patterns/tile-grid/meta.js.map +1 -0
- package/dist/patterns/timeline/meta.d.ts +9 -0
- package/dist/patterns/timeline/meta.d.ts.map +1 -0
- package/dist/patterns/timeline/meta.js +9 -0
- package/dist/patterns/timeline/meta.js.map +1 -0
- package/dist/patterns/tree-view/meta.d.ts +17 -0
- package/dist/patterns/tree-view/meta.d.ts.map +1 -0
- package/dist/patterns/tree-view/meta.js +18 -0
- package/dist/patterns/tree-view/meta.js.map +1 -0
- package/dist/patterns/zora-drawer-content/meta.d.ts +9 -0
- package/dist/patterns/zora-drawer-content/meta.d.ts.map +1 -0
- package/dist/patterns/zora-drawer-content/meta.js +9 -0
- package/dist/patterns/zora-drawer-content/meta.js.map +1 -0
- package/dist/patterns/zora-tab-bar/meta.d.ts +9 -0
- package/dist/patterns/zora-tab-bar/meta.d.ts.map +1 -0
- package/dist/patterns/zora-tab-bar/meta.js +9 -0
- package/dist/patterns/zora-tab-bar/meta.js.map +1 -0
- package/package.json +1 -1
- package/src/components/app-bar/meta.ts +10 -0
- package/src/components/avatar/meta.ts +10 -0
- package/src/components/avatar-group/meta.ts +10 -0
- package/src/components/badge/meta.ts +10 -0
- package/src/components/button/meta.ts +46 -0
- package/src/components/card/meta.ts +46 -0
- package/src/components/checkbox/meta.ts +19 -0
- package/src/components/chip/meta.ts +10 -0
- package/src/components/chip-group/meta.ts +10 -0
- package/src/components/drawer/meta.ts +10 -0
- package/src/components/form/index.ts +0 -1
- package/src/components/form/meta.ts +83 -0
- package/src/components/form/types.ts +1 -1
- package/src/components/heading/meta.ts +67 -0
- package/src/components/icon/meta.ts +10 -0
- package/src/components/icon-button/meta.ts +10 -0
- package/src/components/image/meta.ts +10 -0
- package/src/components/input/meta.ts +46 -0
- package/src/components/media-card/meta.ts +10 -0
- package/src/components/metric-card/meta.ts +10 -0
- package/src/components/modal/meta.ts +10 -0
- package/src/components/navigation-item/meta.ts +10 -0
- package/src/components/navigation-list/meta.ts +10 -0
- package/src/components/progress/meta.ts +10 -0
- package/src/components/radio/meta.ts +19 -0
- package/src/components/rating/meta.ts +10 -0
- package/src/components/search-bar/meta.ts +10 -0
- package/src/components/select/meta.ts +10 -0
- package/src/components/tabs/meta.ts +10 -0
- package/src/components/text/meta.ts +69 -0
- package/src/components/textarea/meta.ts +46 -0
- package/src/components/toolbar/meta.ts +19 -0
- package/src/foundation/meta.ts +85 -0
- package/src/index.ts +15 -1
- package/src/layout/app-shell/meta.ts +10 -0
- package/src/layout/auth-layout/meta.ts +35 -0
- package/src/layout/page/meta.ts +21 -0
- package/src/layout/page-header/meta.ts +39 -0
- package/src/layout/page-section/meta.ts +30 -0
- package/src/layout/settings-layout/meta.ts +10 -0
- package/src/layout/sidebar-layout/meta.ts +10 -0
- package/src/layout/topbar-layout/meta.ts +10 -0
- package/src/metadata/allowedChildren.ts +27 -0
- package/src/metadata/componentMeta.test.ts +205 -0
- package/src/metadata/componentMeta.ts +149 -0
- package/src/metadata/index.ts +13 -0
- package/src/metadata/types.ts +74 -0
- package/src/patterns/auth/meta.ts +39 -0
- package/src/patterns/collection-editor/meta.ts +10 -0
- package/src/patterns/confirm-dialog/meta.ts +10 -0
- package/src/patterns/disclosure-section/meta.ts +10 -0
- package/src/patterns/empty-state/meta.ts +34 -0
- package/src/patterns/filter-bar/meta.ts +10 -0
- package/src/patterns/hero/Hero.tsx +112 -0
- package/src/patterns/hero/index.ts +2 -0
- package/src/patterns/hero/meta.ts +95 -0
- package/src/patterns/hero/types.ts +30 -0
- package/src/patterns/image-preview/meta.ts +10 -0
- package/src/patterns/image-upload-field/meta.ts +10 -0
- package/src/patterns/inspector-field/meta.ts +10 -0
- package/src/patterns/list/meta.ts +30 -0
- package/src/patterns/notice/meta.ts +36 -0
- package/src/patterns/panel/meta.ts +46 -0
- package/src/patterns/responsive-panel/meta.ts +10 -0
- package/src/patterns/section-header/meta.ts +34 -0
- package/src/patterns/selection/meta.ts +21 -0
- package/src/patterns/settings-row/meta.ts +40 -0
- package/src/patterns/switch-field/meta.ts +10 -0
- package/src/patterns/theme-composer/meta.ts +10 -0
- package/src/patterns/tile-grid/meta.ts +21 -0
- package/src/patterns/timeline/meta.ts +10 -0
- package/src/patterns/tree-view/meta.ts +21 -0
- package/src/patterns/zora-drawer-content/meta.ts +10 -0
- package/src/patterns/zora-tab-bar/meta.ts +10 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { ZoraComponentMeta } from '../../metadata';
|
|
2
|
+
|
|
3
|
+
export const textMeta = {
|
|
4
|
+
name: 'Text',
|
|
5
|
+
category: 'component',
|
|
6
|
+
directManifestNode: true,
|
|
7
|
+
allowedChildren: [],
|
|
8
|
+
blueprint: {
|
|
9
|
+
label: 'Text',
|
|
10
|
+
defaultProps: {
|
|
11
|
+
text: 'Text',
|
|
12
|
+
tone: 'default',
|
|
13
|
+
variant: 'body',
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
i18n: {
|
|
17
|
+
fields: [{ keyProp: 'i18nKey', defaultTextProp: 'text' }],
|
|
18
|
+
},
|
|
19
|
+
props: {
|
|
20
|
+
text: {
|
|
21
|
+
type: 'string',
|
|
22
|
+
category: 'Content',
|
|
23
|
+
label: 'Text',
|
|
24
|
+
default: 'Text',
|
|
25
|
+
},
|
|
26
|
+
i18nKey: {
|
|
27
|
+
type: 'string',
|
|
28
|
+
category: 'Content',
|
|
29
|
+
label: 'i18n key',
|
|
30
|
+
},
|
|
31
|
+
variant: {
|
|
32
|
+
type: 'enum',
|
|
33
|
+
category: 'Typography',
|
|
34
|
+
label: 'Variant',
|
|
35
|
+
enum: ['body', 'lead', 'bodySmall', 'caption', 'label', 'eyebrow', 'code'],
|
|
36
|
+
default: 'body',
|
|
37
|
+
},
|
|
38
|
+
tone: {
|
|
39
|
+
type: 'enum',
|
|
40
|
+
category: 'Style',
|
|
41
|
+
label: 'Tone',
|
|
42
|
+
enum: ['default', 'muted', 'subtle', 'inverse', 'primary', 'danger', 'success', 'warning'],
|
|
43
|
+
default: 'default',
|
|
44
|
+
},
|
|
45
|
+
align: {
|
|
46
|
+
type: 'enum',
|
|
47
|
+
category: 'Layout',
|
|
48
|
+
label: 'Align',
|
|
49
|
+
enum: ['auto', 'left', 'right', 'center', 'justify'],
|
|
50
|
+
},
|
|
51
|
+
weight: {
|
|
52
|
+
type: 'enum',
|
|
53
|
+
category: 'Typography',
|
|
54
|
+
label: 'Weight',
|
|
55
|
+
enum: ['regular', 'medium', 'semiBold', 'bold'],
|
|
56
|
+
},
|
|
57
|
+
italic: {
|
|
58
|
+
type: 'boolean',
|
|
59
|
+
category: 'Typography',
|
|
60
|
+
label: 'Italic',
|
|
61
|
+
default: false,
|
|
62
|
+
},
|
|
63
|
+
numberOfLines: {
|
|
64
|
+
type: 'number',
|
|
65
|
+
category: 'Layout',
|
|
66
|
+
label: 'Line clamp',
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
} as const satisfies ZoraComponentMeta;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { ZoraComponentMeta } from '../../metadata';
|
|
2
|
+
|
|
3
|
+
export const textareaMeta = {
|
|
4
|
+
name: 'Textarea',
|
|
5
|
+
category: 'component',
|
|
6
|
+
directManifestNode: true,
|
|
7
|
+
allowedChildren: [],
|
|
8
|
+
blueprint: {
|
|
9
|
+
label: 'Textarea',
|
|
10
|
+
defaultProps: {
|
|
11
|
+
placeholder: 'Enter text…',
|
|
12
|
+
value: '',
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
props: {
|
|
16
|
+
placeholder: {
|
|
17
|
+
type: 'string',
|
|
18
|
+
category: 'Content',
|
|
19
|
+
label: 'Placeholder',
|
|
20
|
+
},
|
|
21
|
+
value: {
|
|
22
|
+
type: 'string',
|
|
23
|
+
category: 'Content',
|
|
24
|
+
label: 'Value',
|
|
25
|
+
default: '',
|
|
26
|
+
},
|
|
27
|
+
size: {
|
|
28
|
+
type: 'enum',
|
|
29
|
+
category: 'Style',
|
|
30
|
+
label: 'Size',
|
|
31
|
+
enum: ['s', 'm', 'l'],
|
|
32
|
+
},
|
|
33
|
+
disabled: {
|
|
34
|
+
type: 'boolean',
|
|
35
|
+
category: 'State',
|
|
36
|
+
label: 'Disabled',
|
|
37
|
+
default: false,
|
|
38
|
+
},
|
|
39
|
+
readOnly: {
|
|
40
|
+
type: 'boolean',
|
|
41
|
+
category: 'State',
|
|
42
|
+
label: 'Read-only',
|
|
43
|
+
default: false,
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
} as const satisfies ZoraComponentMeta;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ZoraComponentMeta } from '../../metadata';
|
|
2
|
+
|
|
3
|
+
export const toolbarMeta = {
|
|
4
|
+
name: 'Toolbar',
|
|
5
|
+
category: 'component',
|
|
6
|
+
directManifestNode: false,
|
|
7
|
+
allowedChildren: [],
|
|
8
|
+
note: 'Action bar component; not represented as a manifest node in v1.',
|
|
9
|
+
props: {},
|
|
10
|
+
} as const satisfies ZoraComponentMeta;
|
|
11
|
+
|
|
12
|
+
export const toolbarActionMeta = {
|
|
13
|
+
name: 'ToolbarAction',
|
|
14
|
+
category: 'component',
|
|
15
|
+
directManifestNode: false,
|
|
16
|
+
allowedChildren: [],
|
|
17
|
+
note: 'Action bar item; not represented as a manifest node in v1.',
|
|
18
|
+
props: {},
|
|
19
|
+
} as const satisfies ZoraComponentMeta;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { ZoraComponentMetaRegistry } from '../metadata';
|
|
2
|
+
import { CONTAINER_ALLOWED_CHILDREN } from '../metadata/allowedChildren';
|
|
3
|
+
|
|
4
|
+
export const foundationMetas = {
|
|
5
|
+
Box: {
|
|
6
|
+
name: 'Box',
|
|
7
|
+
category: 'foundation',
|
|
8
|
+
directManifestNode: true,
|
|
9
|
+
allowedChildren: [...CONTAINER_ALLOWED_CHILDREN],
|
|
10
|
+
blueprint: { label: 'Box' },
|
|
11
|
+
props: {},
|
|
12
|
+
},
|
|
13
|
+
Center: {
|
|
14
|
+
name: 'Center',
|
|
15
|
+
category: 'foundation',
|
|
16
|
+
directManifestNode: false,
|
|
17
|
+
allowedChildren: [],
|
|
18
|
+
note: 'Layout helper component; not represented as a manifest node in v1.',
|
|
19
|
+
props: {},
|
|
20
|
+
},
|
|
21
|
+
Container: {
|
|
22
|
+
name: 'Container',
|
|
23
|
+
category: 'foundation',
|
|
24
|
+
directManifestNode: true,
|
|
25
|
+
allowedChildren: [...CONTAINER_ALLOWED_CHILDREN],
|
|
26
|
+
blueprint: { label: 'Container' },
|
|
27
|
+
props: {},
|
|
28
|
+
},
|
|
29
|
+
Divider: {
|
|
30
|
+
name: 'Divider',
|
|
31
|
+
category: 'foundation',
|
|
32
|
+
directManifestNode: true,
|
|
33
|
+
allowedChildren: [],
|
|
34
|
+
blueprint: { label: 'Divider' },
|
|
35
|
+
props: {},
|
|
36
|
+
},
|
|
37
|
+
Grid: {
|
|
38
|
+
name: 'Grid',
|
|
39
|
+
category: 'foundation',
|
|
40
|
+
directManifestNode: true,
|
|
41
|
+
allowedChildren: [...CONTAINER_ALLOWED_CHILDREN],
|
|
42
|
+
blueprint: { label: 'Grid' },
|
|
43
|
+
props: {},
|
|
44
|
+
},
|
|
45
|
+
Inline: {
|
|
46
|
+
name: 'Inline',
|
|
47
|
+
category: 'foundation',
|
|
48
|
+
directManifestNode: false,
|
|
49
|
+
allowedChildren: [],
|
|
50
|
+
note: 'Layout helper component; not represented as a manifest node in v1.',
|
|
51
|
+
props: {},
|
|
52
|
+
},
|
|
53
|
+
Show: {
|
|
54
|
+
name: 'Show',
|
|
55
|
+
category: 'foundation',
|
|
56
|
+
directManifestNode: false,
|
|
57
|
+
allowedChildren: [],
|
|
58
|
+
note: 'Responsive utility component; not represented as a manifest node in v1.',
|
|
59
|
+
props: {},
|
|
60
|
+
},
|
|
61
|
+
Spacer: {
|
|
62
|
+
name: 'Spacer',
|
|
63
|
+
category: 'foundation',
|
|
64
|
+
directManifestNode: false,
|
|
65
|
+
allowedChildren: [],
|
|
66
|
+
note: 'Spacing utility component; not represented as a manifest node in v1.',
|
|
67
|
+
props: {},
|
|
68
|
+
},
|
|
69
|
+
Stack: {
|
|
70
|
+
name: 'Stack',
|
|
71
|
+
category: 'foundation',
|
|
72
|
+
directManifestNode: true,
|
|
73
|
+
allowedChildren: [...CONTAINER_ALLOWED_CHILDREN],
|
|
74
|
+
blueprint: { label: 'Stack' },
|
|
75
|
+
props: {},
|
|
76
|
+
},
|
|
77
|
+
Surface: {
|
|
78
|
+
name: 'Surface',
|
|
79
|
+
category: 'foundation',
|
|
80
|
+
directManifestNode: false,
|
|
81
|
+
allowedChildren: [],
|
|
82
|
+
note: 'Low-level surface wrapper; not represented as a manifest node in v1.',
|
|
83
|
+
props: {},
|
|
84
|
+
},
|
|
85
|
+
} as const satisfies ZoraComponentMetaRegistry;
|
package/src/index.ts
CHANGED
|
@@ -27,7 +27,6 @@ export type {
|
|
|
27
27
|
FormFieldInputType,
|
|
28
28
|
FormFieldProps,
|
|
29
29
|
FormFieldValue,
|
|
30
|
-
FormFieldWrapperProps,
|
|
31
30
|
FormProps,
|
|
32
31
|
FormValidationErrors,
|
|
33
32
|
FormValidationResult,
|
|
@@ -137,6 +136,19 @@ export type { SidebarLayoutProps } from './layout/sidebar-layout';
|
|
|
137
136
|
export { SidebarLayout } from './layout/sidebar-layout';
|
|
138
137
|
export type { TopbarLayoutProps } from './layout/topbar-layout';
|
|
139
138
|
export { TopbarLayout } from './layout/topbar-layout';
|
|
139
|
+
export type {
|
|
140
|
+
ZoraComponentBlueprint,
|
|
141
|
+
ZoraComponentCategory,
|
|
142
|
+
ZoraComponentI18nMeta,
|
|
143
|
+
ZoraComponentMeta,
|
|
144
|
+
ZoraComponentMetaRegistry,
|
|
145
|
+
ZoraComponentPropArrayItemSchema,
|
|
146
|
+
ZoraComponentPropSchema,
|
|
147
|
+
ZoraComponentPropType,
|
|
148
|
+
ZoraComponentPropValue,
|
|
149
|
+
ZoraComponentSlotMeta,
|
|
150
|
+
} from './metadata';
|
|
151
|
+
export { ZORA_COMPONENT_META } from './metadata';
|
|
140
152
|
export type {
|
|
141
153
|
AuthFormBaseProps,
|
|
142
154
|
AuthIdentifierKind,
|
|
@@ -164,6 +176,8 @@ export type { EmptyStateAction, EmptyStateProps } from './patterns/empty-state';
|
|
|
164
176
|
export { EmptyState } from './patterns/empty-state';
|
|
165
177
|
export type { FilterBarProps } from './patterns/filter-bar';
|
|
166
178
|
export { FilterBar } from './patterns/filter-bar';
|
|
179
|
+
export type { HeroAction, HeroAlign, HeroLayout, HeroProps, HeroTone } from './patterns/hero';
|
|
180
|
+
export { Hero } from './patterns/hero';
|
|
167
181
|
export type {
|
|
168
182
|
ImagePreviewProps,
|
|
169
183
|
ZoraImageAsset,
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ZoraComponentMeta } from '../../metadata';
|
|
2
|
+
|
|
3
|
+
export const appShellMeta = {
|
|
4
|
+
name: 'AppShell',
|
|
5
|
+
category: 'layout',
|
|
6
|
+
directManifestNode: false,
|
|
7
|
+
allowedChildren: [],
|
|
8
|
+
note: 'Application shell layout; not represented as a manifest node in v1.',
|
|
9
|
+
props: {},
|
|
10
|
+
} as const satisfies ZoraComponentMeta;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { ZoraComponentMeta } from '../../metadata';
|
|
2
|
+
import { PAGE_SECTION_ALLOWED_CHILDREN } from '../../metadata/allowedChildren';
|
|
3
|
+
|
|
4
|
+
export const authLayoutMeta = {
|
|
5
|
+
name: 'AuthLayout',
|
|
6
|
+
category: 'layout',
|
|
7
|
+
directManifestNode: true,
|
|
8
|
+
allowedChildren: [...PAGE_SECTION_ALLOWED_CHILDREN],
|
|
9
|
+
blueprint: {
|
|
10
|
+
label: 'Auth layout',
|
|
11
|
+
defaultProps: {
|
|
12
|
+
title: 'Welcome',
|
|
13
|
+
description: 'Sign in to continue.',
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
props: {
|
|
17
|
+
title: {
|
|
18
|
+
type: 'string',
|
|
19
|
+
category: 'Content',
|
|
20
|
+
label: 'Title',
|
|
21
|
+
default: 'Welcome',
|
|
22
|
+
},
|
|
23
|
+
description: {
|
|
24
|
+
type: 'string',
|
|
25
|
+
category: 'Content',
|
|
26
|
+
label: 'Description',
|
|
27
|
+
default: 'Sign in to continue.',
|
|
28
|
+
},
|
|
29
|
+
eyebrow: {
|
|
30
|
+
type: 'string',
|
|
31
|
+
category: 'Content',
|
|
32
|
+
label: 'Eyebrow',
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
} as const satisfies ZoraComponentMeta;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ZoraComponentMeta } from '../../metadata';
|
|
2
|
+
import { PAGE_ALLOWED_CHILDREN } from '../../metadata/allowedChildren';
|
|
3
|
+
|
|
4
|
+
export const pageMeta = {
|
|
5
|
+
name: 'Page',
|
|
6
|
+
category: 'layout',
|
|
7
|
+
directManifestNode: true,
|
|
8
|
+
allowedChildren: [...PAGE_ALLOWED_CHILDREN],
|
|
9
|
+
blueprint: {
|
|
10
|
+
label: 'Page',
|
|
11
|
+
},
|
|
12
|
+
props: {
|
|
13
|
+
width: {
|
|
14
|
+
type: 'enum',
|
|
15
|
+
category: 'Layout',
|
|
16
|
+
label: 'Width',
|
|
17
|
+
enum: ['narrow', 'default', 'wide'],
|
|
18
|
+
default: 'default',
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
} as const satisfies ZoraComponentMeta;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ZoraComponentMeta } from '../../metadata';
|
|
2
|
+
|
|
3
|
+
export const pageHeaderMeta = {
|
|
4
|
+
name: 'PageHeader',
|
|
5
|
+
category: 'layout',
|
|
6
|
+
directManifestNode: true,
|
|
7
|
+
allowedChildren: [],
|
|
8
|
+
blueprint: {
|
|
9
|
+
label: 'Page header',
|
|
10
|
+
defaultProps: {
|
|
11
|
+
title: 'Page title',
|
|
12
|
+
description: 'Short description.',
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
props: {
|
|
16
|
+
title: {
|
|
17
|
+
type: 'string',
|
|
18
|
+
category: 'Content',
|
|
19
|
+
label: 'Title',
|
|
20
|
+
default: 'Page title',
|
|
21
|
+
},
|
|
22
|
+
description: {
|
|
23
|
+
type: 'string',
|
|
24
|
+
category: 'Content',
|
|
25
|
+
label: 'Description',
|
|
26
|
+
default: 'Short description.',
|
|
27
|
+
},
|
|
28
|
+
eyebrow: {
|
|
29
|
+
type: 'string',
|
|
30
|
+
category: 'Content',
|
|
31
|
+
label: 'Eyebrow',
|
|
32
|
+
},
|
|
33
|
+
meta: {
|
|
34
|
+
type: 'string',
|
|
35
|
+
category: 'Content',
|
|
36
|
+
label: 'Meta',
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
} as const satisfies ZoraComponentMeta;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ZoraComponentMeta } from '../../metadata';
|
|
2
|
+
import { PAGE_SECTION_ALLOWED_CHILDREN } from '../../metadata/allowedChildren';
|
|
3
|
+
|
|
4
|
+
export const pageSectionMeta = {
|
|
5
|
+
name: 'PageSection',
|
|
6
|
+
category: 'layout',
|
|
7
|
+
directManifestNode: true,
|
|
8
|
+
allowedChildren: [...PAGE_SECTION_ALLOWED_CHILDREN],
|
|
9
|
+
blueprint: {
|
|
10
|
+
label: 'Page section',
|
|
11
|
+
defaultProps: {
|
|
12
|
+
title: 'Section',
|
|
13
|
+
description: 'Section description.',
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
props: {
|
|
17
|
+
title: {
|
|
18
|
+
type: 'string',
|
|
19
|
+
category: 'Content',
|
|
20
|
+
label: 'Title',
|
|
21
|
+
default: 'Section',
|
|
22
|
+
},
|
|
23
|
+
description: {
|
|
24
|
+
type: 'string',
|
|
25
|
+
category: 'Content',
|
|
26
|
+
label: 'Description',
|
|
27
|
+
default: 'Section description.',
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
} as const satisfies ZoraComponentMeta;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ZoraComponentMeta } from '../../metadata';
|
|
2
|
+
|
|
3
|
+
export const settingsLayoutMeta = {
|
|
4
|
+
name: 'SettingsLayout',
|
|
5
|
+
category: 'layout',
|
|
6
|
+
directManifestNode: false,
|
|
7
|
+
allowedChildren: [],
|
|
8
|
+
note: 'Application layout; not represented as a manifest node in v1.',
|
|
9
|
+
props: {},
|
|
10
|
+
} as const satisfies ZoraComponentMeta;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ZoraComponentMeta } from '../../metadata';
|
|
2
|
+
|
|
3
|
+
export const sidebarLayoutMeta = {
|
|
4
|
+
name: 'SidebarLayout',
|
|
5
|
+
category: 'layout',
|
|
6
|
+
directManifestNode: false,
|
|
7
|
+
allowedChildren: [],
|
|
8
|
+
note: 'Application layout; not represented as a manifest node in v1.',
|
|
9
|
+
props: {},
|
|
10
|
+
} as const satisfies ZoraComponentMeta;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ZoraComponentMeta } from '../../metadata';
|
|
2
|
+
|
|
3
|
+
export const topbarLayoutMeta = {
|
|
4
|
+
name: 'TopbarLayout',
|
|
5
|
+
category: 'layout',
|
|
6
|
+
directManifestNode: false,
|
|
7
|
+
allowedChildren: [],
|
|
8
|
+
note: 'Application layout; not represented as a manifest node in v1.',
|
|
9
|
+
props: {},
|
|
10
|
+
} as const satisfies ZoraComponentMeta;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export const CONTAINER_ALLOWED_CHILDREN = [
|
|
2
|
+
'Box',
|
|
3
|
+
'Stack',
|
|
4
|
+
'Grid',
|
|
5
|
+
'Container',
|
|
6
|
+
'Divider',
|
|
7
|
+
'Text',
|
|
8
|
+
'Heading',
|
|
9
|
+
'Button',
|
|
10
|
+
'Input',
|
|
11
|
+
'Textarea',
|
|
12
|
+
'FormField',
|
|
13
|
+
'Card',
|
|
14
|
+
'Panel',
|
|
15
|
+
'Notice',
|
|
16
|
+
'EmptyState',
|
|
17
|
+
'SectionHeader',
|
|
18
|
+
'SettingsRow',
|
|
19
|
+
] as const;
|
|
20
|
+
|
|
21
|
+
export const PAGE_SECTION_ALLOWED_CHILDREN = [...CONTAINER_ALLOWED_CHILDREN] as const;
|
|
22
|
+
|
|
23
|
+
export const PAGE_ALLOWED_CHILDREN = [
|
|
24
|
+
'PageHeader',
|
|
25
|
+
'PageSection',
|
|
26
|
+
...CONTAINER_ALLOWED_CHILDREN,
|
|
27
|
+
] as const;
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
|
|
4
|
+
import { describe, expect, test } from 'bun:test';
|
|
5
|
+
|
|
6
|
+
import { ZORA_COMPONENT_META } from './componentMeta';
|
|
7
|
+
|
|
8
|
+
const ROOT = process.cwd();
|
|
9
|
+
const SRC_ROOT = join(ROOT, 'src');
|
|
10
|
+
|
|
11
|
+
const INDEX_PATH = join(SRC_ROOT, 'index.ts');
|
|
12
|
+
const THEME_INDEX_PATH = join(SRC_ROOT, 'theme', 'index.ts');
|
|
13
|
+
|
|
14
|
+
function parseReexportBlocks(source: string): { names: string[]; from: string; isType: boolean }[] {
|
|
15
|
+
const pattern = /\bexport\s+(type\s+)?\{([\s\S]*?)\}\s*from\s*['"]([^'"]+)['"]/g;
|
|
16
|
+
const blocks: { names: string[]; from: string; isType: boolean }[] = [];
|
|
17
|
+
|
|
18
|
+
for (const match of source.matchAll(pattern)) {
|
|
19
|
+
const isType = match[1] !== undefined;
|
|
20
|
+
const rawNames = match[2] ?? '';
|
|
21
|
+
const from = match[3] ?? '';
|
|
22
|
+
|
|
23
|
+
const names = rawNames
|
|
24
|
+
.split(',')
|
|
25
|
+
.map((item) => item.trim())
|
|
26
|
+
.filter(Boolean)
|
|
27
|
+
.map((item) =>
|
|
28
|
+
item
|
|
29
|
+
.replace(/^type\s+/, '')
|
|
30
|
+
.split(/\s+as\s+/)[0]
|
|
31
|
+
?.trim(),
|
|
32
|
+
)
|
|
33
|
+
.filter((item): item is string => Boolean(item));
|
|
34
|
+
|
|
35
|
+
blocks.push({ names, from, isType });
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return blocks;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function readSource(filePath: string): string {
|
|
42
|
+
return readFileSync(filePath, 'utf8');
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function isComponentExportName(name: string): boolean {
|
|
46
|
+
return /^[A-Z][A-Za-z0-9]*$/.test(name);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function isJsonSerializable(value: unknown): boolean {
|
|
50
|
+
if (value === null) return true;
|
|
51
|
+
if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean')
|
|
52
|
+
return true;
|
|
53
|
+
if (Array.isArray(value)) return value.every((item) => isJsonSerializable(item));
|
|
54
|
+
if (typeof value !== 'object') return false;
|
|
55
|
+
|
|
56
|
+
const record = value as Record<string, unknown>;
|
|
57
|
+
return Object.values(record).every((item) => isJsonSerializable(item));
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
describe('ZORA_COMPONENT_META public API', () => {
|
|
61
|
+
test('src/index.ts re-exports ZORA_COMPONENT_META', () => {
|
|
62
|
+
const indexSource = readSource(INDEX_PATH);
|
|
63
|
+
expect(indexSource).toContain('ZORA_COMPONENT_META');
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
describe('ZORA_COMPONENT_META registry coverage', () => {
|
|
68
|
+
test('covers every public UI React component export (foundation/components/patterns/layout)', () => {
|
|
69
|
+
// Avoid importing the full src/index.ts barrel here; Bun has been observed to crash when executing
|
|
70
|
+
// module graphs that touch react-native. We do drift checks via static source parsing instead.
|
|
71
|
+
const indexSource = readSource(INDEX_PATH);
|
|
72
|
+
const blocks = parseReexportBlocks(indexSource).filter((block) => !block.isType);
|
|
73
|
+
|
|
74
|
+
const uiComponentNames = new Set(
|
|
75
|
+
blocks
|
|
76
|
+
.filter((block) => {
|
|
77
|
+
return (
|
|
78
|
+
block.from.startsWith('./foundation') ||
|
|
79
|
+
block.from.startsWith('./components') ||
|
|
80
|
+
block.from.startsWith('./patterns') ||
|
|
81
|
+
block.from.startsWith('./layout')
|
|
82
|
+
);
|
|
83
|
+
})
|
|
84
|
+
.flatMap((block) => block.names)
|
|
85
|
+
.filter(isComponentExportName),
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
const registryKeys = new Set(Object.keys(ZORA_COMPONENT_META));
|
|
89
|
+
expect([...uiComponentNames].sort()).toEqual([...registryKeys].sort());
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
test('does not treat providers/scopes as UI component registry entries', () => {
|
|
93
|
+
const indexSource = readSource(INDEX_PATH);
|
|
94
|
+
expect(indexSource).toContain("export * from './theme';");
|
|
95
|
+
|
|
96
|
+
const themeSource = readSource(THEME_INDEX_PATH);
|
|
97
|
+
const themeBlocks = parseReexportBlocks(themeSource).filter((block) => !block.isType);
|
|
98
|
+
const themeValueExports = new Set(
|
|
99
|
+
themeBlocks.flatMap((block) => block.names).filter(isComponentExportName),
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
const providerExports = new Set(['ZoraProvider', 'ZoraThemeScope']);
|
|
103
|
+
|
|
104
|
+
for (const providerExport of providerExports) {
|
|
105
|
+
expect(themeValueExports.has(providerExport)).toBe(true);
|
|
106
|
+
expect(Object.prototype.hasOwnProperty.call(ZORA_COMPONENT_META, providerExport)).toBe(false);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
describe('ZORA_COMPONENT_META invariants', () => {
|
|
112
|
+
test('every key matches meta.name', () => {
|
|
113
|
+
for (const [key, meta] of Object.entries(ZORA_COMPONENT_META)) {
|
|
114
|
+
expect(meta.name).toBe(key);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
test('allowedChildren always points to a known direct manifest node', () => {
|
|
119
|
+
for (const [key, meta] of Object.entries(ZORA_COMPONENT_META)) {
|
|
120
|
+
for (const child of meta.allowedChildren) {
|
|
121
|
+
const childMeta = ZORA_COMPONENT_META[child];
|
|
122
|
+
expect(childMeta, `${key} allowedChildren includes unknown key '${child}'`).toBeDefined();
|
|
123
|
+
expect(
|
|
124
|
+
childMeta.directManifestNode,
|
|
125
|
+
`${key} allowedChildren includes non-directManifestNode key '${child}'`,
|
|
126
|
+
).toBe(true);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
test('direct manifest node leaf/container rules', () => {
|
|
132
|
+
const expectedLeafNodes = new Set([
|
|
133
|
+
'PageHeader',
|
|
134
|
+
'SectionHeader',
|
|
135
|
+
'SettingsRow',
|
|
136
|
+
'EmptyState',
|
|
137
|
+
'Hero',
|
|
138
|
+
'Button',
|
|
139
|
+
'Input',
|
|
140
|
+
'Textarea',
|
|
141
|
+
'Text',
|
|
142
|
+
'Heading',
|
|
143
|
+
'Divider',
|
|
144
|
+
]);
|
|
145
|
+
|
|
146
|
+
const expectedContainerNodes = new Set([
|
|
147
|
+
'FormField',
|
|
148
|
+
'Page',
|
|
149
|
+
'PageSection',
|
|
150
|
+
'AuthLayout',
|
|
151
|
+
'Card',
|
|
152
|
+
'Panel',
|
|
153
|
+
'Notice',
|
|
154
|
+
'Box',
|
|
155
|
+
'Stack',
|
|
156
|
+
'Grid',
|
|
157
|
+
'Container',
|
|
158
|
+
]);
|
|
159
|
+
|
|
160
|
+
for (const [key, meta] of Object.entries(ZORA_COMPONENT_META)) {
|
|
161
|
+
if (!meta.directManifestNode) continue;
|
|
162
|
+
|
|
163
|
+
if (expectedLeafNodes.has(key)) {
|
|
164
|
+
expect(meta.allowedChildren.length, `${key} should be a leaf manifest node`).toBe(0);
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
if (expectedContainerNodes.has(key)) {
|
|
169
|
+
expect(
|
|
170
|
+
meta.allowedChildren.length,
|
|
171
|
+
`${key} should be a container manifest node`,
|
|
172
|
+
).toBeGreaterThan(0);
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
throw new Error(
|
|
177
|
+
`Direct manifest node '${key}' must be categorized as leaf or container in the test.`,
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
test('non-direct manifest nodes include an explicit note', () => {
|
|
183
|
+
for (const [key, meta] of Object.entries(ZORA_COMPONENT_META)) {
|
|
184
|
+
if (meta.directManifestNode) continue;
|
|
185
|
+
|
|
186
|
+
expect(
|
|
187
|
+
typeof meta.note === 'string' && meta.note.trim().length > 0,
|
|
188
|
+
`${key} must include a note when directManifestNode is false`,
|
|
189
|
+
).toBe(true);
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
test('registry and blueprints are JSON serializable', () => {
|
|
194
|
+
expect(() => JSON.stringify(ZORA_COMPONENT_META)).not.toThrow();
|
|
195
|
+
|
|
196
|
+
for (const [key, meta] of Object.entries(ZORA_COMPONENT_META)) {
|
|
197
|
+
if (!meta.blueprint?.defaultProps) continue;
|
|
198
|
+
|
|
199
|
+
expect(
|
|
200
|
+
isJsonSerializable(meta.blueprint.defaultProps),
|
|
201
|
+
`${key} blueprint.defaultProps contains a non-serializable value`,
|
|
202
|
+
).toBe(true);
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
});
|