@ankhorage/zora 4.3.0 → 4.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.
Files changed (49) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/components/card/meta.d.ts +1 -1
  3. package/dist/components/radio/RadioGroup.d.ts.map +1 -1
  4. package/dist/components/radio/RadioGroup.js +27 -7
  5. package/dist/components/radio/RadioGroup.js.map +1 -1
  6. package/dist/components/radio/meta.d.ts +203 -4
  7. package/dist/components/radio/meta.d.ts.map +1 -1
  8. package/dist/components/radio/meta.js +168 -4
  9. package/dist/components/radio/meta.js.map +1 -1
  10. package/dist/components/radio/resolveRadioGroupThemeRecipe.d.ts +20 -0
  11. package/dist/components/radio/resolveRadioGroupThemeRecipe.d.ts.map +1 -0
  12. package/dist/components/radio/resolveRadioGroupThemeRecipe.js +34 -0
  13. package/dist/components/radio/resolveRadioGroupThemeRecipe.js.map +1 -0
  14. package/dist/components/radio/themeRecipeMeta.d.ts +26 -0
  15. package/dist/components/radio/themeRecipeMeta.d.ts.map +1 -0
  16. package/dist/components/radio/themeRecipeMeta.js +27 -0
  17. package/dist/components/radio/themeRecipeMeta.js.map +1 -0
  18. package/dist/components/radio/types.d.ts +1 -0
  19. package/dist/components/radio/types.d.ts.map +1 -1
  20. package/dist/components/radio/types.js.map +1 -1
  21. package/dist/foundation/meta.d.ts +4 -4
  22. package/dist/layout/screen/meta.d.ts +1 -1
  23. package/dist/layout/screen-section/meta.d.ts +1 -1
  24. package/dist/metadata/allowedChildren.d.ts +3 -3
  25. package/dist/metadata/allowedChildren.d.ts.map +1 -1
  26. package/dist/metadata/allowedChildren.js +1 -0
  27. package/dist/metadata/allowedChildren.js.map +1 -1
  28. package/dist/metadata/bindableComponentMeta.d.ts +2 -2
  29. package/dist/metadata/themeRecipeMeta.d.ts.map +1 -1
  30. package/dist/metadata/themeRecipeMeta.js +2 -0
  31. package/dist/metadata/themeRecipeMeta.js.map +1 -1
  32. package/dist/patterns/message-bubble/meta.d.ts +1 -1
  33. package/dist/patterns/notice/meta.d.ts +1 -1
  34. package/dist/patterns/panel/meta.d.ts +1 -1
  35. package/dist/patterns/post-card/meta.d.ts +1 -1
  36. package/dist/patterns/reader/meta.d.ts +2 -2
  37. package/dist/patterns/scanner/meta.d.ts +2 -2
  38. package/package.json +1 -1
  39. package/src/components/radio/RadioGroup.test.ts +31 -0
  40. package/src/components/radio/RadioGroup.tsx +45 -8
  41. package/src/components/radio/meta.ts +170 -4
  42. package/src/components/radio/resolveRadioGroupThemeRecipe.ts +45 -0
  43. package/src/components/radio/themeRecipeMeta.ts +28 -0
  44. package/src/components/radio/types.ts +1 -0
  45. package/src/metadata/allowedChildren.ts +1 -0
  46. package/src/metadata/componentMeta.test.ts +21 -0
  47. package/src/metadata/radioGroupReachability.test.ts +20 -0
  48. package/src/metadata/themeRecipeMeta.test.ts +4 -0
  49. package/src/metadata/themeRecipeMeta.ts +2 -0
@@ -0,0 +1,26 @@
1
+ export declare const radioGroupThemeRecipeMeta: {
2
+ readonly name: "RadioGroup";
3
+ readonly kind: "component";
4
+ readonly description: "Maps shared selection-control presentation choices into RadioGroup defaults.";
5
+ readonly fields: {
6
+ readonly gap: {
7
+ readonly type: "choice";
8
+ readonly label: "Gap";
9
+ readonly options: readonly ["xs", "s", "m", "l"];
10
+ readonly default: "s";
11
+ };
12
+ readonly color: {
13
+ readonly type: "choice";
14
+ readonly label: "Color";
15
+ readonly options: readonly ["primary", "secondary", "tertiary", "quaternary", "neutral", "success", "warning", "error", "info", "danger"];
16
+ readonly default: "primary";
17
+ };
18
+ readonly size: {
19
+ readonly type: "choice";
20
+ readonly label: "Size";
21
+ readonly options: readonly ["s", "m", "l"];
22
+ readonly default: "m";
23
+ };
24
+ };
25
+ };
26
+ //# sourceMappingURL=themeRecipeMeta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themeRecipeMeta.d.ts","sourceRoot":"","sources":["../../../src/components/radio/themeRecipeMeta.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;CAwBE,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { ZORA_COLORS } from '../../internal/colorModel';
2
+ export const radioGroupThemeRecipeMeta = {
3
+ name: 'RadioGroup',
4
+ kind: 'component',
5
+ description: 'Maps shared selection-control presentation choices into RadioGroup defaults.',
6
+ fields: {
7
+ gap: {
8
+ type: 'choice',
9
+ label: 'Gap',
10
+ options: ['xs', 's', 'm', 'l'],
11
+ default: 's',
12
+ },
13
+ color: {
14
+ type: 'choice',
15
+ label: 'Color',
16
+ options: ZORA_COLORS,
17
+ default: 'primary',
18
+ },
19
+ size: {
20
+ type: 'choice',
21
+ label: 'Size',
22
+ options: ['s', 'm', 'l'],
23
+ default: 'm',
24
+ },
25
+ },
26
+ };
27
+ //# sourceMappingURL=themeRecipeMeta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themeRecipeMeta.js","sourceRoot":"","sources":["../../../src/components/radio/themeRecipeMeta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGxD,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,IAAI,EAAE,YAAY;IAClB,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,8EAA8E;IAC3F,MAAM,EAAE;QACN,GAAG,EAAE;YACH,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;YAC9B,OAAO,EAAE,GAAG;SACb;QACD,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,WAAW;YACpB,OAAO,EAAE,SAAS;SACnB;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;YACxB,OAAO,EAAE,GAAG;SACb;KACF;CACqC,CAAC","sourcesContent":["import { ZORA_COLORS } from '../../internal/colorModel';\nimport type { ZoraThemeRecipeMeta } from '../../metadata/themeRecipeTypes';\n\nexport const radioGroupThemeRecipeMeta = {\n name: 'RadioGroup',\n kind: 'component',\n description: 'Maps shared selection-control presentation choices into RadioGroup defaults.',\n fields: {\n gap: {\n type: 'choice',\n label: 'Gap',\n options: ['xs', 's', 'm', 'l'],\n default: 's',\n },\n color: {\n type: 'choice',\n label: 'Color',\n options: ZORA_COLORS,\n default: 'primary',\n },\n size: {\n type: 'choice',\n label: 'Size',\n options: ['s', 'm', 'l'],\n default: 'm',\n },\n },\n} as const satisfies ZoraThemeRecipeMeta;\n"]}
@@ -16,5 +16,6 @@ export interface RadioGroupProps<TValue extends string> extends ZoraBaseProps, P
16
16
  options: readonly RadioGroupOption<TValue>[];
17
17
  orientation?: 'horizontal' | 'vertical';
18
18
  gap?: 'xs' | 's' | 'm' | 'l';
19
+ presentation?: 'inline' | 'card';
19
20
  }
20
21
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/radio/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,IAAI,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D,MAAM,WAAW,UAAW,SAAQ,aAAa,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;CAAG;AAEjG,MAAM,WAAW,gBAAgB,CAAC,MAAM,SAAS,MAAM;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe,CAAC,MAAM,SAAS,MAAM,CACpD,SACE,aAAa,EACb,IAAI,CACF,IAAI,CAAC,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC,EAC3C,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CACvD;IACH,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,OAAO,EAAE,SAAS,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;IAC7C,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACxC,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;CAC9B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/radio/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,IAAI,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D,MAAM,WAAW,UAAW,SAAQ,aAAa,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;CAAG;AAEjG,MAAM,WAAW,gBAAgB,CAAC,MAAM,SAAS,MAAM;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe,CAAC,MAAM,SAAS,MAAM,CACpD,SACE,aAAa,EACb,IAAI,CACF,IAAI,CAAC,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC,EAC3C,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CACvD;IACH,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,OAAO,EAAE,SAAS,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;IAC7C,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACxC,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC7B,YAAY,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CAClC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/radio/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { RadioProps as SurfaceRadioProps } from '@ankhorage/surface';\nimport type React from 'react';\n\nimport type { ZoraBaseProps } from '../../theme/ZoraBaseProps';\n\nexport interface RadioProps extends ZoraBaseProps, Omit<SurfaceRadioProps, 'mode' | 'themeId'> {}\n\nexport interface RadioGroupOption<TValue extends string> {\n value: TValue;\n label: React.ReactNode;\n description?: React.ReactNode;\n disabled?: boolean;\n testID?: string;\n}\n\nexport interface RadioGroupProps<TValue extends string>\n extends\n ZoraBaseProps,\n Pick<\n Omit<SurfaceRadioProps, 'mode' | 'themeId'>,\n 'color' | 'size' | 'invalid' | 'readOnly' | 'disabled'\n > {\n value: TValue;\n onValueChange: (value: TValue) => void;\n options: readonly RadioGroupOption<TValue>[];\n orientation?: 'horizontal' | 'vertical';\n gap?: 'xs' | 's' | 'm' | 'l';\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/radio/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { RadioProps as SurfaceRadioProps } from '@ankhorage/surface';\nimport type React from 'react';\n\nimport type { ZoraBaseProps } from '../../theme/ZoraBaseProps';\n\nexport interface RadioProps extends ZoraBaseProps, Omit<SurfaceRadioProps, 'mode' | 'themeId'> {}\n\nexport interface RadioGroupOption<TValue extends string> {\n value: TValue;\n label: React.ReactNode;\n description?: React.ReactNode;\n disabled?: boolean;\n testID?: string;\n}\n\nexport interface RadioGroupProps<TValue extends string>\n extends\n ZoraBaseProps,\n Pick<\n Omit<SurfaceRadioProps, 'mode' | 'themeId'>,\n 'color' | 'size' | 'invalid' | 'readOnly' | 'disabled'\n > {\n value: TValue;\n onValueChange: (value: TValue) => void;\n options: readonly RadioGroupOption<TValue>[];\n orientation?: 'horizontal' | 'vertical';\n gap?: 'xs' | 's' | 'm' | 'l';\n presentation?: 'inline' | 'card';\n}\n"]}
@@ -3,7 +3,7 @@ export declare const foundationMetas: {
3
3
  readonly name: "Box";
4
4
  readonly category: "foundation";
5
5
  readonly directManifestNode: true;
6
- readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
6
+ readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "RadioGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
7
7
  readonly blueprint: {
8
8
  readonly label: "Box";
9
9
  };
@@ -21,7 +21,7 @@ export declare const foundationMetas: {
21
21
  readonly name: "Container";
22
22
  readonly category: "foundation";
23
23
  readonly directManifestNode: true;
24
- readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
24
+ readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "RadioGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
25
25
  readonly blueprint: {
26
26
  readonly label: "Container";
27
27
  };
@@ -41,7 +41,7 @@ export declare const foundationMetas: {
41
41
  readonly name: "Grid";
42
42
  readonly category: "foundation";
43
43
  readonly directManifestNode: true;
44
- readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
44
+ readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "RadioGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
45
45
  readonly blueprint: {
46
46
  readonly label: "Grid";
47
47
  };
@@ -75,7 +75,7 @@ export declare const foundationMetas: {
75
75
  readonly name: "Stack";
76
76
  readonly category: "foundation";
77
77
  readonly directManifestNode: true;
78
- readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
78
+ readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "RadioGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
79
79
  readonly blueprint: {
80
80
  readonly label: "Stack";
81
81
  };
@@ -2,7 +2,7 @@ export declare const screenMeta: {
2
2
  readonly name: "Screen";
3
3
  readonly category: "layout";
4
4
  readonly directManifestNode: true;
5
- readonly allowedChildren: readonly ["ScreenSection", "Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
5
+ readonly allowedChildren: readonly ["ScreenSection", "Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "RadioGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
6
6
  readonly blueprint: {
7
7
  readonly label: "Screen";
8
8
  };
@@ -2,7 +2,7 @@ export declare const screenSectionMeta: {
2
2
  readonly name: "ScreenSection";
3
3
  readonly category: "layout";
4
4
  readonly directManifestNode: true;
5
- readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
5
+ readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "RadioGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
6
6
  readonly blueprint: {
7
7
  readonly label: "Screen section";
8
8
  readonly defaultProps: {
@@ -1,5 +1,5 @@
1
- export declare const CONTAINER_ALLOWED_CHILDREN: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
1
+ export declare const CONTAINER_ALLOWED_CHILDREN: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "RadioGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
2
2
  export declare const CONTENT_RAIL_ALLOWED_CHILDREN: readonly ["Box", "Stack", "Card", "Panel", "Image", "ProductCard", "PostCard", "ChatListItem", "MessageBubble", "MissingElement"];
3
- export declare const SCREEN_SECTION_ALLOWED_CHILDREN: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
4
- export declare const SCREEN_ALLOWED_CHILDREN: readonly ["ScreenSection", "Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
3
+ export declare const SCREEN_SECTION_ALLOWED_CHILDREN: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "RadioGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
4
+ export declare const SCREEN_ALLOWED_CHILDREN: readonly ["ScreenSection", "Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "RadioGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
5
5
  //# sourceMappingURL=allowedChildren.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"allowedChildren.d.ts","sourceRoot":"","sources":["../../src/metadata/allowedChildren.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,0BAA0B,qWA6B7B,CAAC;AAEX,eAAO,MAAM,6BAA6B,mIAWhC,CAAC;AAEX,eAAO,MAAM,+BAA+B,qWAA2C,CAAC;AAExF,eAAO,MAAM,uBAAuB,sXAA4D,CAAC"}
1
+ {"version":3,"file":"allowedChildren.d.ts","sourceRoot":"","sources":["../../src/metadata/allowedChildren.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,0BAA0B,mXA8B7B,CAAC;AAEX,eAAO,MAAM,6BAA6B,mIAWhC,CAAC;AAEX,eAAO,MAAM,+BAA+B,mXAA2C,CAAC;AAExF,eAAO,MAAM,uBAAuB,oYAA4D,CAAC"}
@@ -10,6 +10,7 @@ export const CONTAINER_ALLOWED_CHILDREN = [
10
10
  'Image',
11
11
  'Button',
12
12
  'ButtonGroup',
13
+ 'RadioGroup',
13
14
  'ThemeModeToggle',
14
15
  'Input',
15
16
  'Textarea',
@@ -1 +1 @@
1
- {"version":3,"file":"allowedChildren.js","sourceRoot":"","sources":["../../src/metadata/allowedChildren.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,KAAK;IACL,OAAO;IACP,MAAM;IACN,WAAW;IACX,SAAS;IACT,MAAM;IACN,SAAS;IACT,MAAM;IACN,OAAO;IACP,QAAQ;IACR,aAAa;IACb,iBAAiB;IACjB,OAAO;IACP,UAAU;IACV,WAAW;IACX,MAAM;IACN,OAAO;IACP,QAAQ;IACR,YAAY;IACZ,eAAe;IACf,aAAa;IACb,UAAU;IACV,cAAc;IACd,eAAe;IACf,cAAc;IACd,eAAe;IACf,aAAa;IACb,gBAAgB;CACR,CAAC;AAEX,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,KAAK;IACL,OAAO;IACP,MAAM;IACN,OAAO;IACP,OAAO;IACP,aAAa;IACb,UAAU;IACV,cAAc;IACd,eAAe;IACf,gBAAgB;CACR,CAAC;AAEX,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,GAAG,0BAA0B,CAAU,CAAC;AAExF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,eAAe,EAAE,GAAG,0BAA0B,CAAU,CAAC","sourcesContent":["export const CONTAINER_ALLOWED_CHILDREN = [\n 'Box',\n 'Stack',\n 'Grid',\n 'Container',\n 'Divider',\n 'Text',\n 'Heading',\n 'Icon',\n 'Image',\n 'Button',\n 'ButtonGroup',\n 'ThemeModeToggle',\n 'Input',\n 'Textarea',\n 'FormField',\n 'Card',\n 'Panel',\n 'Notice',\n 'EmptyState',\n 'SectionHeader',\n 'SettingsRow',\n 'PostCard',\n 'ChatListItem',\n 'MessageBubble',\n 'ProgressRing',\n 'ReaderSurface',\n 'ContentRail',\n 'MissingElement',\n] as const;\n\nexport const CONTENT_RAIL_ALLOWED_CHILDREN = [\n 'Box',\n 'Stack',\n 'Card',\n 'Panel',\n 'Image',\n 'ProductCard',\n 'PostCard',\n 'ChatListItem',\n 'MessageBubble',\n 'MissingElement',\n] as const;\n\nexport const SCREEN_SECTION_ALLOWED_CHILDREN = [...CONTAINER_ALLOWED_CHILDREN] as const;\n\nexport const SCREEN_ALLOWED_CHILDREN = ['ScreenSection', ...CONTAINER_ALLOWED_CHILDREN] as const;\n"]}
1
+ {"version":3,"file":"allowedChildren.js","sourceRoot":"","sources":["../../src/metadata/allowedChildren.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,KAAK;IACL,OAAO;IACP,MAAM;IACN,WAAW;IACX,SAAS;IACT,MAAM;IACN,SAAS;IACT,MAAM;IACN,OAAO;IACP,QAAQ;IACR,aAAa;IACb,YAAY;IACZ,iBAAiB;IACjB,OAAO;IACP,UAAU;IACV,WAAW;IACX,MAAM;IACN,OAAO;IACP,QAAQ;IACR,YAAY;IACZ,eAAe;IACf,aAAa;IACb,UAAU;IACV,cAAc;IACd,eAAe;IACf,cAAc;IACd,eAAe;IACf,aAAa;IACb,gBAAgB;CACR,CAAC;AAEX,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,KAAK;IACL,OAAO;IACP,MAAM;IACN,OAAO;IACP,OAAO;IACP,aAAa;IACb,UAAU;IACV,cAAc;IACd,eAAe;IACf,gBAAgB;CACR,CAAC;AAEX,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,GAAG,0BAA0B,CAAU,CAAC;AAExF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,eAAe,EAAE,GAAG,0BAA0B,CAAU,CAAC","sourcesContent":["export const CONTAINER_ALLOWED_CHILDREN = [\n 'Box',\n 'Stack',\n 'Grid',\n 'Container',\n 'Divider',\n 'Text',\n 'Heading',\n 'Icon',\n 'Image',\n 'Button',\n 'ButtonGroup',\n 'RadioGroup',\n 'ThemeModeToggle',\n 'Input',\n 'Textarea',\n 'FormField',\n 'Card',\n 'Panel',\n 'Notice',\n 'EmptyState',\n 'SectionHeader',\n 'SettingsRow',\n 'PostCard',\n 'ChatListItem',\n 'MessageBubble',\n 'ProgressRing',\n 'ReaderSurface',\n 'ContentRail',\n 'MissingElement',\n] as const;\n\nexport const CONTENT_RAIL_ALLOWED_CHILDREN = [\n 'Box',\n 'Stack',\n 'Card',\n 'Panel',\n 'Image',\n 'ProductCard',\n 'PostCard',\n 'ChatListItem',\n 'MessageBubble',\n 'MissingElement',\n] as const;\n\nexport const SCREEN_SECTION_ALLOWED_CHILDREN = [...CONTAINER_ALLOWED_CHILDREN] as const;\n\nexport const SCREEN_ALLOWED_CHILDREN = ['ScreenSection', ...CONTAINER_ALLOWED_CHILDREN] as const;\n"]}
@@ -848,11 +848,11 @@ export declare const ZORA_BINDABLE_COMPONENT_META: {
848
848
  };
849
849
  readonly headerActions: {
850
850
  readonly label: "Header actions";
851
- readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
851
+ readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "RadioGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
852
852
  };
853
853
  readonly footerActions: {
854
854
  readonly label: "Footer actions";
855
- readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
855
+ readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "RadioGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
856
856
  };
857
857
  };
858
858
  readonly props: {
@@ -1 +1 @@
1
- {"version":3,"file":"themeRecipeMeta.d.ts","sourceRoot":"","sources":["../../src/metadata/themeRecipeMeta.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAEtE,eAAO,MAAM,sBAAsB,EAAE,2BAMpC,CAAC"}
1
+ {"version":3,"file":"themeRecipeMeta.d.ts","sourceRoot":"","sources":["../../src/metadata/themeRecipeMeta.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAEtE,eAAO,MAAM,sBAAsB,EAAE,2BAOpC,CAAC"}
@@ -1,12 +1,14 @@
1
1
  import { buttonThemeRecipeMeta } from '../components/button/themeRecipeMeta';
2
2
  import { cardThemeRecipeMeta } from '../components/card/themeRecipeMeta';
3
3
  import { headingThemeRecipeMeta } from '../components/heading/themeRecipeMeta';
4
+ import { radioGroupThemeRecipeMeta } from '../components/radio/themeRecipeMeta';
4
5
  import { textThemeRecipeMeta } from '../components/text/themeRecipeMeta';
5
6
  import { panelThemeRecipeMeta } from '../patterns/panel/themeRecipeMeta';
6
7
  export const ZORA_THEME_RECIPE_META = {
7
8
  Button: buttonThemeRecipeMeta,
8
9
  Card: cardThemeRecipeMeta,
9
10
  Heading: headingThemeRecipeMeta,
11
+ RadioGroup: radioGroupThemeRecipeMeta,
10
12
  Text: textThemeRecipeMeta,
11
13
  Panel: panelThemeRecipeMeta,
12
14
  };
@@ -1 +1 @@
1
- {"version":3,"file":"themeRecipeMeta.js","sourceRoot":"","sources":["../../src/metadata/themeRecipeMeta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAGzE,MAAM,CAAC,MAAM,sBAAsB,GAAgC;IACjE,MAAM,EAAE,qBAAqB;IAC7B,IAAI,EAAE,mBAAmB;IACzB,OAAO,EAAE,sBAAsB;IAC/B,IAAI,EAAE,mBAAmB;IACzB,KAAK,EAAE,oBAAoB;CAC5B,CAAC","sourcesContent":["import { buttonThemeRecipeMeta } from '../components/button/themeRecipeMeta';\nimport { cardThemeRecipeMeta } from '../components/card/themeRecipeMeta';\nimport { headingThemeRecipeMeta } from '../components/heading/themeRecipeMeta';\nimport { textThemeRecipeMeta } from '../components/text/themeRecipeMeta';\nimport { panelThemeRecipeMeta } from '../patterns/panel/themeRecipeMeta';\nimport type { ZoraThemeRecipeMetaRegistry } from './themeRecipeTypes';\n\nexport const ZORA_THEME_RECIPE_META: ZoraThemeRecipeMetaRegistry = {\n Button: buttonThemeRecipeMeta,\n Card: cardThemeRecipeMeta,\n Heading: headingThemeRecipeMeta,\n Text: textThemeRecipeMeta,\n Panel: panelThemeRecipeMeta,\n};\n"]}
1
+ {"version":3,"file":"themeRecipeMeta.js","sourceRoot":"","sources":["../../src/metadata/themeRecipeMeta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAGzE,MAAM,CAAC,MAAM,sBAAsB,GAAgC;IACjE,MAAM,EAAE,qBAAqB;IAC7B,IAAI,EAAE,mBAAmB;IACzB,OAAO,EAAE,sBAAsB;IAC/B,UAAU,EAAE,yBAAyB;IACrC,IAAI,EAAE,mBAAmB;IACzB,KAAK,EAAE,oBAAoB;CAC5B,CAAC","sourcesContent":["import { buttonThemeRecipeMeta } from '../components/button/themeRecipeMeta';\nimport { cardThemeRecipeMeta } from '../components/card/themeRecipeMeta';\nimport { headingThemeRecipeMeta } from '../components/heading/themeRecipeMeta';\nimport { radioGroupThemeRecipeMeta } from '../components/radio/themeRecipeMeta';\nimport { textThemeRecipeMeta } from '../components/text/themeRecipeMeta';\nimport { panelThemeRecipeMeta } from '../patterns/panel/themeRecipeMeta';\nimport type { ZoraThemeRecipeMetaRegistry } from './themeRecipeTypes';\n\nexport const ZORA_THEME_RECIPE_META: ZoraThemeRecipeMetaRegistry = {\n Button: buttonThemeRecipeMeta,\n Card: cardThemeRecipeMeta,\n Heading: headingThemeRecipeMeta,\n RadioGroup: radioGroupThemeRecipeMeta,\n Text: textThemeRecipeMeta,\n Panel: panelThemeRecipeMeta,\n};\n"]}
@@ -3,7 +3,7 @@ export declare const messageBubbleMeta: {
3
3
  readonly category: "pattern";
4
4
  readonly description: "Chat/message bubble with direction, author, text, meta, and delivery status presentation.";
5
5
  readonly directManifestNode: true;
6
- readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
6
+ readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "RadioGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
7
7
  readonly blueprint: {
8
8
  readonly label: "Message bubble";
9
9
  readonly icon: {
@@ -2,7 +2,7 @@ export declare const noticeMeta: {
2
2
  readonly name: "Notice";
3
3
  readonly category: "pattern";
4
4
  readonly directManifestNode: true;
5
- readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
5
+ readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "RadioGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
6
6
  readonly blueprint: {
7
7
  readonly label: "Notice";
8
8
  readonly defaultProps: {
@@ -2,7 +2,7 @@ export declare const panelMeta: {
2
2
  readonly name: "Panel";
3
3
  readonly category: "pattern";
4
4
  readonly directManifestNode: true;
5
- readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
5
+ readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "RadioGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
6
6
  readonly blueprint: {
7
7
  readonly label: "Panel";
8
8
  readonly defaultProps: {
@@ -3,7 +3,7 @@ export declare const postCardMeta: {
3
3
  readonly category: "pattern";
4
4
  readonly description: "Social/content post card with author identity, body, media, actions, and comment previews.";
5
5
  readonly directManifestNode: true;
6
- readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
6
+ readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "RadioGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
7
7
  readonly blueprint: {
8
8
  readonly label: "Post card";
9
9
  readonly icon: {
@@ -125,11 +125,11 @@ export declare const readerSurfaceMeta: {
125
125
  };
126
126
  readonly headerActions: {
127
127
  readonly label: "Header actions";
128
- readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
128
+ readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "RadioGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
129
129
  };
130
130
  readonly footerActions: {
131
131
  readonly label: "Footer actions";
132
- readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
132
+ readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "RadioGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
133
133
  };
134
134
  };
135
135
  readonly props: {
@@ -105,7 +105,7 @@ export declare const barcodeScannerViewMeta: {
105
105
  readonly category: "pattern";
106
106
  readonly description: "Composed scanner shell with permission, camera slot, scan overlay, and manual entry affordance.";
107
107
  readonly directManifestNode: true;
108
- readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
108
+ readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "RadioGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
109
109
  readonly requirements: {
110
110
  readonly permissions: readonly [{
111
111
  readonly permission: "camera";
@@ -145,7 +145,7 @@ export declare const barcodeScannerViewMeta: {
145
145
  };
146
146
  readonly children: {
147
147
  readonly label: "Scanner footer";
148
- readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
148
+ readonly allowedChildren: readonly ["Box", "Stack", "Grid", "Container", "Divider", "Text", "Heading", "Icon", "Image", "Button", "ButtonGroup", "RadioGroup", "ThemeModeToggle", "Input", "Textarea", "FormField", "Card", "Panel", "Notice", "EmptyState", "SectionHeader", "SettingsRow", "PostCard", "ChatListItem", "MessageBubble", "ProgressRing", "ReaderSurface", "ContentRail", "MissingElement"];
149
149
  };
150
150
  };
151
151
  readonly props: {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ankhorage/zora",
3
3
  "type": "module",
4
- "version": "4.3.0",
4
+ "version": "4.4.1",
5
5
  "description": "Opinionated React Native and React Native Web UI kit built on @ankhorage/surface.",
6
6
  "homepage": "https://github.com/ankhorage/zora#readme",
7
7
  "bugs": {
@@ -0,0 +1,31 @@
1
+ import { expect, test } from 'bun:test';
2
+
3
+ import { resolveRadioGroupThemeRecipe } from './resolveRadioGroupThemeRecipe';
4
+
5
+ test('resolves RadioGroup theme defaults while preserving instance overrides', () => {
6
+ expect(resolveRadioGroupThemeRecipe({ themeFields: {} })).toEqual({
7
+ gap: 's',
8
+ color: 'primary',
9
+ size: 'm',
10
+ });
11
+
12
+ expect(
13
+ resolveRadioGroupThemeRecipe({
14
+ gap: 'l',
15
+ color: 'danger',
16
+ size: 's',
17
+ themeFields: { gap: 'xs', color: 'secondary', size: 'l' },
18
+ }),
19
+ ).toEqual({ gap: 'l', color: 'danger', size: 's' });
20
+ });
21
+
22
+ test('card presentation stays on the RadioGroup and Surface Radio semantic path', async () => {
23
+ const source = await Bun.file('src/components/radio/RadioGroup.tsx').text();
24
+
25
+ expect(source).toContain('accessibilityRole="radiogroup"');
26
+ expect(source).toContain('checked={value === option.value}');
27
+ expect(source).toContain('<Radio');
28
+ expect(source).toContain("const isCard = presentation === 'card';");
29
+ expect(source).not.toContain('<Button');
30
+ expect(source).not.toContain('SelectableItem');
31
+ });
@@ -1,12 +1,17 @@
1
- import { Radio } from '@ankhorage/surface';
1
+ import { Radio, useTheme } from '@ankhorage/surface';
2
2
  import React from 'react';
3
3
  import { View } from 'react-native';
4
4
 
5
5
  import { Stack } from '../../foundation';
6
+ import { useZoraThemeRecipe } from '../../theme/useZoraThemeRecipe';
6
7
  import { withZoraThemeScope } from '../../theme/withZoraThemeScope';
7
8
  import { Text } from '../text';
9
+ import { resolveRadioGroupThemeRecipe } from './resolveRadioGroupThemeRecipe';
8
10
  import type { RadioGroupOption, RadioGroupProps } from './types';
9
11
 
12
+ /***
13
+ * Resolves the themed radio-group presentation within the active ZORA scope.
14
+ */
10
15
  function RadioGroupInner<TValue extends string>({
11
16
  themeId: _themeId,
12
17
  mode: _mode,
@@ -14,9 +19,10 @@ function RadioGroupInner<TValue extends string>({
14
19
  onValueChange,
15
20
  options,
16
21
  orientation = 'vertical',
17
- gap = 's',
18
- color = 'primary',
19
- size = 'm',
22
+ gap,
23
+ presentation = 'inline',
24
+ color,
25
+ size,
20
26
  invalid = false,
21
27
  readOnly = false,
22
28
  disabled = false,
@@ -24,6 +30,8 @@ function RadioGroupInner<TValue extends string>({
24
30
  interactionPolicy,
25
31
  }: RadioGroupProps<TValue>) {
26
32
  const isHorizontal = orientation === 'horizontal';
33
+ const themeFields = useZoraThemeRecipe('RadioGroup');
34
+ const recipe = resolveRadioGroupThemeRecipe({ gap, color, size, themeFields });
27
35
 
28
36
  return (
29
37
  <View
@@ -36,7 +44,7 @@ function RadioGroupInner<TValue extends string>({
36
44
  >
37
45
  <Stack
38
46
  direction={isHorizontal ? 'row' : 'column'}
39
- gap={gap}
47
+ gap={recipe.gap}
40
48
  wrap={isHorizontal ? 'wrap' : 'nowrap'}
41
49
  >
42
50
  {options.map((option) => (
@@ -47,8 +55,10 @@ function RadioGroupInner<TValue extends string>({
47
55
  disabled={disabled || option.disabled === true}
48
56
  invalid={invalid}
49
57
  readOnly={readOnly}
50
- size={size}
51
- color={color}
58
+ size={recipe.size}
59
+ color={recipe.color}
60
+ orientation={orientation}
61
+ presentation={presentation}
52
62
  onSelect={onValueChange}
53
63
  interactionPolicy={interactionPolicy}
54
64
  />
@@ -63,6 +73,9 @@ function RadioGroupInner<TValue extends string>({
63
73
  */
64
74
  export const RadioGroup = withZoraThemeScope(RadioGroupInner);
65
75
 
76
+ /***
77
+ * Renders one option through the single Surface Radio interaction boundary.
78
+ */
66
79
  function RadioGroupItem<TValue extends string>({
67
80
  option,
68
81
  checked,
@@ -71,6 +84,8 @@ function RadioGroupItem<TValue extends string>({
71
84
  readOnly,
72
85
  size,
73
86
  color,
87
+ orientation,
88
+ presentation,
74
89
  onSelect,
75
90
  interactionPolicy,
76
91
  }: {
@@ -81,10 +96,14 @@ function RadioGroupItem<TValue extends string>({
81
96
  readOnly: boolean;
82
97
  size: NonNullable<RadioGroupProps<TValue>['size']>;
83
98
  color: NonNullable<RadioGroupProps<TValue>['color']>;
99
+ orientation: NonNullable<RadioGroupProps<TValue>['orientation']>;
100
+ presentation: NonNullable<RadioGroupProps<TValue>['presentation']>;
84
101
  onSelect: (value: TValue) => void;
85
102
  interactionPolicy: RadioGroupProps<TValue>['interactionPolicy'];
86
103
  }) {
104
+ const { theme } = useTheme();
87
105
  const passive = interactionPolicy === 'passive';
106
+ const isCard = presentation === 'card';
88
107
 
89
108
  return (
90
109
  <Radio
@@ -96,13 +115,31 @@ function RadioGroupItem<TValue extends string>({
96
115
  size={size}
97
116
  color={color}
98
117
  testID={option.testID}
118
+ bg={
119
+ isCard
120
+ ? checked
121
+ ? theme.semantics.selection.background
122
+ : theme.semantics.surface.default
123
+ : undefined
124
+ }
125
+ borderColor={
126
+ isCard
127
+ ? checked
128
+ ? theme.semantics.selection.border
129
+ : theme.semantics.border.default
130
+ : undefined
131
+ }
132
+ borderWidth={isCard ? 1 : undefined}
133
+ p={isCard ? 'm' : undefined}
134
+ radius={isCard ? 'l' : undefined}
135
+ width={isCard && orientation === 'vertical' ? '100%' : undefined}
99
136
  onCheckedChange={(nextChecked) => {
100
137
  if (passive) return;
101
138
  if (nextChecked) onSelect(option.value);
102
139
  }}
103
140
  >
104
141
  <Stack gap="xs">
105
- <Text>{option.label}</Text>
142
+ <Text weight={isCard ? 'semiBold' : undefined}>{option.label}</Text>
106
143
  {option.description ? (
107
144
  <Text emphasis="muted" variant="caption">
108
145
  {option.description}