@ankhorage/zora 17.0.0 → 18.0.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 (158) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +1 -1
  3. package/dist/constants.d.ts +1 -1
  4. package/dist/constants.js +1 -1
  5. package/dist/constants.js.map +1 -1
  6. package/dist/features/auth/adapters/inbound/AuthFormField.js +3 -3
  7. package/dist/features/auth/adapters/inbound/AuthFormField.js.map +1 -1
  8. package/dist/features/chip/adapters/inbound/Chip.js +3 -3
  9. package/dist/features/chip/adapters/inbound/Chip.js.map +1 -1
  10. package/dist/features/form/field/adapters/inbound/Field.d.ts +5 -0
  11. package/dist/features/form/field/adapters/inbound/Field.d.ts.map +1 -0
  12. package/dist/features/form/field/adapters/inbound/Field.js +20 -0
  13. package/dist/features/form/field/adapters/inbound/Field.js.map +1 -0
  14. package/dist/features/form/{formFieldMeta.d.ts → field/meta.d.ts} +4 -4
  15. package/dist/features/form/field/meta.d.ts.map +1 -0
  16. package/dist/features/form/{formFieldMeta.js → field/meta.js} +4 -4
  17. package/dist/features/form/field/meta.js.map +1 -0
  18. package/dist/features/form/field/public.d.ts +2 -0
  19. package/dist/features/form/field/public.d.ts.map +1 -0
  20. package/dist/features/form/field/public.js +2 -0
  21. package/dist/features/form/field/public.js.map +1 -0
  22. package/dist/features/form/formMeta.d.ts +1 -1
  23. package/dist/features/form/formMeta.js +1 -1
  24. package/dist/features/form/formMeta.js.map +1 -1
  25. package/dist/features/form/public.d.ts +2 -2
  26. package/dist/features/form/public.d.ts.map +1 -1
  27. package/dist/features/form/public.js +1 -1
  28. package/dist/features/form/public.js.map +1 -1
  29. package/dist/features/list/adapters/inbound/List.d.ts +5 -0
  30. package/dist/features/list/adapters/inbound/List.d.ts.map +1 -0
  31. package/dist/features/list/adapters/inbound/List.js +34 -0
  32. package/dist/features/list/adapters/inbound/List.js.map +1 -0
  33. package/dist/features/list/adapters/inbound/ListItem.d.ts +5 -0
  34. package/dist/features/list/adapters/inbound/ListItem.d.ts.map +1 -0
  35. package/dist/features/list/adapters/inbound/ListItem.js +43 -0
  36. package/dist/features/list/adapters/inbound/ListItem.js.map +1 -0
  37. package/dist/features/list/adapters/inbound/ListSection.d.ts +5 -0
  38. package/dist/features/list/adapters/inbound/ListSection.d.ts.map +1 -0
  39. package/dist/{patterns/list → features/list/adapters/inbound}/ListSection.js +4 -8
  40. package/dist/features/list/adapters/inbound/ListSection.js.map +1 -0
  41. package/dist/{patterns → features}/list/meta.d.ts +6 -6
  42. package/dist/features/list/meta.d.ts.map +1 -0
  43. package/dist/{patterns → features}/list/meta.js +6 -14
  44. package/dist/features/list/meta.js.map +1 -0
  45. package/dist/features/list/public.d.ts +4 -0
  46. package/dist/features/list/public.d.ts.map +1 -1
  47. package/dist/features/list/public.js +3 -0
  48. package/dist/features/list/public.js.map +1 -1
  49. package/dist/features/list/utils/resolveListSeparator.d.ts +5 -0
  50. package/dist/features/list/utils/resolveListSeparator.d.ts.map +1 -0
  51. package/dist/{patterns/list → features/list/utils}/resolveListSeparator.js +1 -0
  52. package/dist/features/list/utils/resolveListSeparator.js.map +1 -0
  53. package/dist/features/skeleton/adapters/inbound/SkeletonList.d.ts.map +1 -1
  54. package/dist/features/skeleton/adapters/inbound/SkeletonList.js +2 -2
  55. package/dist/features/skeleton/adapters/inbound/SkeletonList.js.map +1 -1
  56. package/dist/features/uploader/adapters/inbound/Uploader.js +3 -3
  57. package/dist/features/uploader/adapters/inbound/Uploader.js.map +1 -1
  58. package/dist/index.d.ts +4 -4
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +2 -2
  61. package/dist/index.js.map +1 -1
  62. package/dist/metadata/bindableComponentMeta.d.ts +1 -1
  63. package/dist/metadata/bindableComponentMeta.js +1 -1
  64. package/dist/metadata/bindableComponentMeta.js.map +1 -1
  65. package/dist/metadata/componentMeta.js +4 -4
  66. package/dist/metadata/componentMeta.js.map +1 -1
  67. package/dist/patterns/chat-list-item/ChatListItem.js +3 -3
  68. package/dist/patterns/chat-list-item/ChatListItem.js.map +1 -1
  69. package/dist/patterns/inspector-field/InspectorField.js +3 -3
  70. package/dist/patterns/inspector-field/InspectorField.js.map +1 -1
  71. package/dist/patterns/message-bubble/MessageBubble.js +3 -3
  72. package/dist/patterns/message-bubble/MessageBubble.js.map +1 -1
  73. package/dist/patterns/selection/SelectableItem.js +4 -4
  74. package/dist/patterns/selection/SelectableItem.js.map +1 -1
  75. package/dist/patterns/switch-field/SwitchField.d.ts +1 -2
  76. package/dist/patterns/switch-field/SwitchField.d.ts.map +1 -1
  77. package/dist/patterns/switch-field/SwitchField.js +3 -4
  78. package/dist/patterns/switch-field/SwitchField.js.map +1 -1
  79. package/dist/patterns/tree-view/TreeItem.d.ts.map +1 -1
  80. package/dist/patterns/tree-view/TreeItem.js +2 -2
  81. package/dist/patterns/tree-view/TreeItem.js.map +1 -1
  82. package/dist/registry.js +4 -4
  83. package/dist/registry.js.map +1 -1
  84. package/dist/types/form.d.ts +1 -1
  85. package/dist/types/form.d.ts.map +1 -1
  86. package/dist/types/form.js.map +1 -1
  87. package/dist/{patterns/list/types.d.ts → types/list.d.ts} +14 -18
  88. package/dist/types/list.d.ts.map +1 -0
  89. package/dist/types/list.js +2 -0
  90. package/dist/types/list.js.map +1 -0
  91. package/package.json +2 -2
  92. package/src/constants.ts +1 -1
  93. package/src/features/auth/adapters/inbound/AuthFormField.tsx +3 -3
  94. package/src/features/bottom-sheet/public.test.ts +1 -1
  95. package/src/features/chip/adapters/inbound/Chip.tsx +3 -3
  96. package/src/features/form/{adapters/inbound/FormField.tsx → field/adapters/inbound/Field.tsx} +10 -10
  97. package/src/features/form/{formFieldMeta.ts → field/meta.ts} +5 -4
  98. package/src/features/form/field/public.ts +1 -0
  99. package/src/features/form/formMeta.ts +1 -1
  100. package/src/features/form/public.ts +2 -2
  101. package/src/features/list/adapters/inbound/List.tsx +77 -0
  102. package/src/features/list/adapters/inbound/ListItem.tsx +89 -0
  103. package/src/{patterns/list → features/list/adapters/inbound}/ListSection.tsx +5 -10
  104. package/src/{patterns → features}/list/meta.ts +7 -14
  105. package/src/features/list/public.ts +11 -0
  106. package/src/features/list/utils/resolveListSeparator.ts +9 -0
  107. package/src/features/skeleton/adapters/inbound/SkeletonList.tsx +3 -3
  108. package/src/features/uploader/adapters/inbound/Uploader.tsx +3 -3
  109. package/src/index.ts +11 -10
  110. package/src/metadata/bindableComponentMeta.ts +1 -1
  111. package/src/metadata/componentMeta.test.ts +5 -5
  112. package/src/metadata/componentMeta.ts +4 -4
  113. package/src/patterns/chat-list-item/ChatListItem.tsx +3 -3
  114. package/src/patterns/inspector-field/InspectorField.tsx +3 -3
  115. package/src/patterns/message-bubble/MessageBubble.tsx +3 -3
  116. package/src/patterns/selection/SelectableItem.tsx +4 -4
  117. package/src/patterns/switch-field/SwitchField.tsx +8 -8
  118. package/src/patterns/tree-view/TreeItem.tsx +2 -2
  119. package/src/platformAcceptance.test.ts +1 -1
  120. package/src/registry.ts +4 -4
  121. package/src/showcaseCoverage.test.ts +2 -2
  122. package/src/theme/themeScopeStructure.test.ts +5 -5
  123. package/src/types/form.ts +1 -1
  124. package/src/{patterns/list/types.ts → types/list.ts} +17 -18
  125. package/dist/features/form/adapters/inbound/FormField.d.ts +0 -5
  126. package/dist/features/form/adapters/inbound/FormField.d.ts.map +0 -1
  127. package/dist/features/form/adapters/inbound/FormField.js +0 -20
  128. package/dist/features/form/adapters/inbound/FormField.js.map +0 -1
  129. package/dist/features/form/formFieldMeta.d.ts.map +0 -1
  130. package/dist/features/form/formFieldMeta.js.map +0 -1
  131. package/dist/patterns/list/List.d.ts +0 -9
  132. package/dist/patterns/list/List.d.ts.map +0 -1
  133. package/dist/patterns/list/List.js +0 -40
  134. package/dist/patterns/list/List.js.map +0 -1
  135. package/dist/patterns/list/ListRow.d.ts +0 -9
  136. package/dist/patterns/list/ListRow.d.ts.map +0 -1
  137. package/dist/patterns/list/ListRow.js +0 -113
  138. package/dist/patterns/list/ListRow.js.map +0 -1
  139. package/dist/patterns/list/ListSection.d.ts +0 -9
  140. package/dist/patterns/list/ListSection.d.ts.map +0 -1
  141. package/dist/patterns/list/ListSection.js.map +0 -1
  142. package/dist/patterns/list/index.d.ts +0 -5
  143. package/dist/patterns/list/index.d.ts.map +0 -1
  144. package/dist/patterns/list/index.js +0 -4
  145. package/dist/patterns/list/index.js.map +0 -1
  146. package/dist/patterns/list/meta.d.ts.map +0 -1
  147. package/dist/patterns/list/meta.js.map +0 -1
  148. package/dist/patterns/list/resolveListSeparator.d.ts +0 -5
  149. package/dist/patterns/list/resolveListSeparator.d.ts.map +0 -1
  150. package/dist/patterns/list/resolveListSeparator.js.map +0 -1
  151. package/dist/patterns/list/types.d.ts.map +0 -1
  152. package/dist/patterns/list/types.js +0 -2
  153. package/dist/patterns/list/types.js.map +0 -1
  154. package/src/patterns/list/List.tsx +0 -77
  155. package/src/patterns/list/ListRow.tsx +0 -198
  156. package/src/patterns/list/index.ts +0 -10
  157. package/src/patterns/list/resolveListSeparator.test.ts +0 -18
  158. package/src/patterns/list/resolveListSeparator.ts +0 -8
@@ -76,7 +76,7 @@ const scopedComponentFiles = [
76
76
  join(srcDir, 'features', 'form', 'adapters', 'inbound', 'Form.tsx'),
77
77
  join(srcDir, 'features', 'form', 'adapters', 'inbound', 'FormActions.tsx'),
78
78
  join(srcDir, 'features', 'form', 'adapters', 'inbound', 'FormError.tsx'),
79
- join(srcDir, 'features', 'form', 'adapters', 'inbound', 'FormField.tsx'),
79
+ join(srcDir, 'features', 'form', 'field', 'adapters', 'inbound', 'Field.tsx'),
80
80
  join(srcDir, 'features', 'form', 'search-input', 'adapters', 'inbound', 'SearchInput.tsx'),
81
81
  join(srcDir, 'features', 'form', 'select', 'adapters', 'inbound', 'Select.native.tsx'),
82
82
  join(srcDir, 'features', 'form', 'select', 'adapters', 'inbound', 'Select.web.tsx'),
@@ -109,9 +109,9 @@ const scopedComponentFiles = [
109
109
  join(srcDir, 'patterns', 'confirm-dialog', 'ConfirmDialog.tsx'),
110
110
  join(srcDir, 'features', 'empty-state', 'adapters', 'inbound', 'EmptyState.tsx'),
111
111
  join(srcDir, 'patterns', 'inspector-field', 'InspectorField.tsx'),
112
- join(srcDir, 'patterns', 'list', 'List.tsx'),
113
- join(srcDir, 'patterns', 'list', 'ListRow.tsx'),
114
- join(srcDir, 'patterns', 'list', 'ListSection.tsx'),
112
+ join(srcDir, 'features', 'list', 'adapters', 'inbound', 'List.tsx'),
113
+ join(srcDir, 'features', 'list', 'adapters', 'inbound', 'ListItem.tsx'),
114
+ join(srcDir, 'features', 'list', 'adapters', 'inbound', 'ListSection.tsx'),
115
115
  join(srcDir, 'patterns', 'notice', 'Notice.tsx'),
116
116
  join(srcDir, 'patterns', 'panel', 'Panel.tsx'),
117
117
  join(srcDir, 'patterns', 'section-header', 'SectionHeader.tsx'),
@@ -164,7 +164,7 @@ const scopedPropTypeFiles = [
164
164
  join(srcDir, 'patterns', 'confirm-dialog', 'types.ts'),
165
165
  join(srcDir, 'types', 'empty-state.ts'),
166
166
  join(srcDir, 'patterns', 'inspector-field', 'types.ts'),
167
- join(srcDir, 'patterns', 'list', 'types.ts'),
167
+ join(srcDir, 'types', 'list.ts'),
168
168
  join(srcDir, 'patterns', 'notice', 'types.ts'),
169
169
  join(srcDir, 'patterns', 'panel', 'types.ts'),
170
170
  join(srcDir, 'patterns', 'section-header', 'types.ts'),
package/src/types/form.ts CHANGED
@@ -44,7 +44,7 @@ export interface FormProps extends ZoraBaseProps {
44
44
  actions?: React.ReactNode;
45
45
  }
46
46
 
47
- export interface FormFieldProps
47
+ export interface FieldProps
48
48
  extends
49
49
  ZoraBaseProps,
50
50
  Pick<
@@ -1,42 +1,41 @@
1
+ import type { ListItemProps as SurfaceListItemProps } from '@ankhorage/surface';
1
2
  import type React from 'react';
2
3
 
3
- import type { ZoraBaseProps } from '../../theme/ZoraBaseProps';
4
+ import type { ZoraBaseProps } from '../theme/ZoraBaseProps';
4
5
 
5
- export type ListRowVariant = 'divider' | 'card';
6
+ export type ListItemVariant = 'divider' | 'card';
6
7
 
7
- interface ListRowBaseProps extends ZoraBaseProps {
8
+ interface ListItemBaseProps
9
+ extends
10
+ ZoraBaseProps,
11
+ Pick<SurfaceListItemProps, 'compact' | 'disabled' | 'leading' | 'selected' | 'trailing'> {
8
12
  title: React.ReactNode;
9
13
  description?: React.ReactNode;
10
14
  meta?: React.ReactNode;
11
- leading?: React.ReactNode;
12
- trailing?: React.ReactNode;
13
- selected?: boolean;
14
- disabled?: boolean;
15
- compact?: boolean;
16
- variant?: ListRowVariant;
15
+ variant?: ListItemVariant;
17
16
  }
18
17
 
19
- interface ListRowPressableProps {
18
+ interface ListItemPressableProps {
20
19
  onPress: () => void;
21
20
  action?: never;
22
21
  }
23
22
 
24
- interface ListRowActionProps {
23
+ interface ListItemActionProps {
25
24
  action: React.ReactNode;
26
25
  onPress?: never;
27
26
  }
28
27
 
29
- interface ListRowStaticProps {
28
+ interface ListItemStaticProps {
30
29
  action?: never;
31
30
  onPress?: never;
32
31
  }
33
32
 
34
- export type ListRowProps = ListRowBaseProps &
35
- (ListRowPressableProps | ListRowActionProps | ListRowStaticProps);
33
+ export type ListItemProps = ListItemBaseProps &
34
+ (ListItemPressableProps | ListItemActionProps | ListItemStaticProps);
36
35
 
37
36
  export interface ListItemsProps extends ZoraBaseProps {
38
- items: readonly ListRowProps[];
39
- rowVariant?: ListRowVariant;
37
+ items: readonly ListItemProps[];
38
+ itemVariant?: ListItemVariant;
40
39
  compact?: boolean;
41
40
  }
42
41
 
@@ -51,8 +50,8 @@ interface ListSectionItemsProps extends ZoraBaseProps {
51
50
  description?: React.ReactNode;
52
51
  eyebrow?: React.ReactNode;
53
52
  actions?: React.ReactNode;
54
- items: readonly ListRowProps[];
55
- rowVariant?: ListRowVariant;
53
+ items: readonly ListItemProps[];
54
+ itemVariant?: ListItemVariant;
56
55
  compact?: boolean;
57
56
  }
58
57
 
@@ -1,5 +0,0 @@
1
- import React from 'react';
2
- import type { FormFieldProps } from '../../../../types/form';
3
- /*** Groups one form control with its label, description, helper text, and field error. */
4
- export declare const FormField: (props: FormFieldProps) => React.ReactElement | null;
5
- //# sourceMappingURL=FormField.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FormField.d.ts","sourceRoot":"","sources":["../../../../../src/features/form/adapters/inbound/FormField.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAoC7D,0FAA0F;AAC1F,eAAO,MAAM,SAAS,sDAAqC,CAAC"}
@@ -1,20 +0,0 @@
1
- import { Field } from '@ankhorage/surface';
2
- import React from 'react';
3
- import { withZoraThemeScope } from '../../../../theme/withZoraThemeScope';
4
- import { View } from '../../../layout/public';
5
- import { Text } from '../../../typography/public';
6
- function FormFieldInner({ themeId: _themeId, mode: _mode, label, description, helperText, children, interactionPolicy: _interactionPolicy, ...props }) {
7
- return (<Field {...props} helperText={helperText} label={<View gap="xs">
8
- <Text variant="label" weight="semiBold">
9
- {label}
10
- </Text>
11
- {description ? (<Text emphasis="muted" variant="bodySmall">
12
- {description}
13
- </Text>) : null}
14
- </View>}>
15
- {children}
16
- </Field>);
17
- }
18
- /*** Groups one form control with its label, description, helper text, and field error. */
19
- export const FormField = withZoraThemeScope(FormFieldInner);
20
- //# sourceMappingURL=FormField.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FormField.js","sourceRoot":"","sources":["../../../../../src/features/form/adapters/inbound/FormField.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAE1E,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAElD,SAAS,cAAc,CAAC,EACtB,OAAO,EAAE,QAAQ,EACjB,IAAI,EAAE,KAAK,EACX,KAAK,EACL,WAAW,EACX,UAAU,EACV,QAAQ,EACR,iBAAiB,EAAE,kBAAkB,EACrC,GAAG,KAAK,EACO;IACf,OAAO,CACL,CAAC,KAAK,CACJ,IAAI,KAAK,CAAC,CACV,UAAU,CAAC,CAAC,UAAU,CAAC,CACvB,KAAK,CAAC,CACJ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CACZ;UAAA,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CACrC;YAAA,CAAC,KAAK,CACR;UAAA,EAAE,IAAI,CACN;UAAA,CAAC,WAAW,CAAC,CAAC,CAAC,CACb,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CACxC;cAAA,CAAC,WAAW,CACd;YAAA,EAAE,IAAI,CAAC,CACR,CAAC,CAAC,CAAC,IAAI,CACV;QAAA,EAAE,IAAI,CACR,CAAC,CAED;MAAA,CAAC,QAAQ,CACX;IAAA,EAAE,KAAK,CAAC,CACT,CAAC;AACJ,CAAC;AAED,0FAA0F;AAC1F,MAAM,CAAC,MAAM,SAAS,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC","sourcesContent":["import { Field } from '@ankhorage/surface';\nimport React from 'react';\n\nimport { withZoraThemeScope } from '../../../../theme/withZoraThemeScope';\nimport type { FormFieldProps } from '../../../../types/form';\nimport { View } from '../../../layout/public';\nimport { Text } from '../../../typography/public';\n\nfunction FormFieldInner({\n themeId: _themeId,\n mode: _mode,\n label,\n description,\n helperText,\n children,\n interactionPolicy: _interactionPolicy,\n ...props\n}: FormFieldProps) {\n return (\n <Field\n {...props}\n helperText={helperText}\n label={\n <View gap=\"xs\">\n <Text variant=\"label\" weight=\"semiBold\">\n {label}\n </Text>\n {description ? (\n <Text emphasis=\"muted\" variant=\"bodySmall\">\n {description}\n </Text>\n ) : null}\n </View>\n }\n >\n {children}\n </Field>\n );\n}\n\n/*** Groups one form control with its label, description, helper text, and field error. */\nexport const FormField = withZoraThemeScope(FormFieldInner);\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"formFieldMeta.d.ts","sourceRoot":"","sources":["../../../src/features/form/formFieldMeta.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCY,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"formFieldMeta.js","sourceRoot":"","sources":["../../../src/features/form/formFieldMeta.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,WAAW;IACjB,QAAQ,EAAE,WAAW;IACrB,kBAAkB,EAAE,IAAI;IACxB,eAAe,EAAE;QACf,UAAU;QACV,eAAe;QACf,YAAY;QACZ,aAAa;QACb,QAAQ;QACR,WAAW;KACZ;IACD,SAAS,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IACpE,QAAQ,EAAE;QACR,KAAK,EAAE;YACL,SAAS,EAAE;gBACT,KAAK,EAAE,YAAY;gBACnB,WAAW,EAAE,+BAA+B;gBAC5C,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;gBAC1B,eAAe,EAAE,IAAI;aACtB;YACD,QAAQ,EAAE;gBACR,KAAK,EAAE,UAAU;gBACjB,WAAW,EAAE,gCAAgC;gBAC7C,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;gBAC1B,eAAe,EAAE,IAAI;gBACrB,iBAAiB,EAAE,IAAI;aACxB;SACF;KACF;IACD,KAAK,EAAE;QACL,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;QAChF,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE;QAC1E,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE;QACzE,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;QAC1E,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE;QACxF,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;QACtF,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE;QACnF,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE;KACrF;CACmC,CAAC","sourcesContent":["import type { ZoraComponentMeta } from '../../metadata';\nexport const formFieldMeta = {\n name: 'FormField',\n category: 'component',\n directManifestNode: true,\n allowedChildren: [\n 'Checkbox',\n 'CheckboxGroup',\n 'RadioGroup',\n 'SearchInput',\n 'Select',\n 'TextInput',\n ],\n blueprint: { label: 'Form field', defaultProps: { label: 'Label' } },\n bindings: {\n props: {\n errorText: {\n label: 'Error text',\n description: 'Field-level validation error.',\n value: { type: 'unknown' },\n acceptsFallback: true,\n },\n disabled: {\n label: 'Disabled',\n description: 'Whether the field is disabled.',\n value: { type: 'boolean' },\n acceptsFallback: true,\n acceptsTransforms: true,\n },\n },\n },\n props: {\n label: { type: 'string', category: 'Content', label: 'Label', default: 'Label' },\n description: { type: 'string', category: 'Content', label: 'Description' },\n helperText: { type: 'string', category: 'Content', label: 'Helper text' },\n errorText: { type: 'string', category: 'Validation', label: 'Error text' },\n required: { type: 'boolean', category: 'Validation', label: 'Required', default: false },\n invalid: { type: 'boolean', category: 'Validation', label: 'Invalid', default: false },\n disabled: { type: 'boolean', category: 'State', label: 'Disabled', default: false },\n readOnly: { type: 'boolean', category: 'State', label: 'Read-only', default: false },\n },\n} as const satisfies ZoraComponentMeta;\n"]}
@@ -1,9 +0,0 @@
1
- import React from 'react';
2
- import type { ListProps } from './types';
3
- /***
4
- * List container pattern for composing `ListRow` and `ListSection`.
5
- *
6
-
7
- */
8
- export declare const List: (props: ListProps) => React.ReactElement | null;
9
- //# sourceMappingURL=List.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"List.d.ts","sourceRoot":"","sources":["../../../src/patterns/list/List.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,KAAK,EAAkB,SAAS,EAAgC,MAAM,SAAS,CAAC;AAiEvF;;;;GAIG;AACH,eAAO,MAAM,IAAI,iDAAgC,CAAC"}
@@ -1,40 +0,0 @@
1
- import React from 'react';
2
- import { Divider, View } from '../../features/layout/public';
3
- import { withZoraThemeScope } from '../../theme/withZoraThemeScope';
4
- import { ListRow } from './ListRow';
5
- import { resolveListSeparator } from './resolveListSeparator';
6
- function resolveRowVariant({ item, defaultVariant, }) {
7
- return item.variant ?? defaultVariant;
8
- }
9
- function resolveRowCompact({ item, compact, }) {
10
- return item.compact ?? compact ?? false;
11
- }
12
- function ListItemsInner({ themeId: _themeId, mode: _mode, testID, items, rowVariant = 'divider', compact, }) {
13
- return (<View gap="none" testID={testID}>
14
- {items.map((item, index) => {
15
- const effectiveVariant = resolveRowVariant({ item, defaultVariant: rowVariant });
16
- const separator = resolveListSeparator(effectiveVariant, index);
17
- return (<React.Fragment key={`${index}`}>
18
- {separator === 'divider' ? <Divider /> : null}
19
- {separator === 'spacer' ? <View height="s"/> : null}
20
- <ListRow {...item} compact={resolveRowCompact({ item, compact })} variant={effectiveVariant}/>
21
- </React.Fragment>);
22
- })}
23
- </View>);
24
- }
25
- function ListInner(props) {
26
- if ('items' in props) {
27
- return <ListItemsInner {...props}/>;
28
- }
29
- const { themeId: _themeId, mode: _mode, children, testID } = props;
30
- return (<View gap="none" testID={testID}>
31
- {children}
32
- </View>);
33
- }
34
- /***
35
- * List container pattern for composing `ListRow` and `ListSection`.
36
- *
37
-
38
- */
39
- export const List = withZoraThemeScope(ListInner);
40
- //# sourceMappingURL=List.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"List.js","sourceRoot":"","sources":["../../../src/patterns/list/List.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,SAAS,iBAAiB,CAAC,EACzB,IAAI,EACJ,cAAc,GAIf;IACC,OAAO,IAAI,CAAC,OAAO,IAAI,cAAc,CAAC;AACxC,CAAC;AAED,SAAS,iBAAiB,CAAC,EACzB,IAAI,EACJ,OAAO,GAIR;IACC,OAAO,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,KAAK,CAAC;AAC1C,CAAC;AAED,SAAS,cAAc,CAAC,EACtB,OAAO,EAAE,QAAQ,EACjB,IAAI,EAAE,KAAK,EACX,MAAM,EACN,KAAK,EACL,UAAU,GAAG,SAAS,EACtB,OAAO,GACQ;IACf,OAAO,CACL,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAC9B;MAAA,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACzB,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,CAAC;YACjF,MAAM,SAAS,GAAG,oBAAoB,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;YAEhE,OAAO,CACL,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAC9B;YAAA,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,AAAD,EAAG,CAAC,CAAC,CAAC,IAAI,CAC7C;YAAA,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAG,CAAC,CAAC,CAAC,IAAI,CACpD;YAAA,CAAC,OAAO,CACN,IAAI,IAAI,CAAC,CACT,OAAO,CAAC,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAC9C,OAAO,CAAC,CAAC,gBAAgB,CAAC,EAE9B;UAAA,EAAE,KAAK,CAAC,QAAQ,CAAC,CAClB,CAAC;QACJ,CAAC,CAAC,CACJ;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,KAAgB;IACjC,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,EAAG,CAAC;IACvC,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACnE,OAAO,CACL,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAC9B;MAAA,CAAC,QAAQ,CACX;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC","sourcesContent":["import React from 'react';\n\nimport { Divider, View } from '../../features/layout/public';\nimport { withZoraThemeScope } from '../../theme/withZoraThemeScope';\nimport { ListRow } from './ListRow';\nimport { resolveListSeparator } from './resolveListSeparator';\nimport type { ListItemsProps, ListProps, ListRowProps, ListRowVariant } from './types';\n\nfunction resolveRowVariant({\n item,\n defaultVariant,\n}: {\n item: ListRowProps;\n defaultVariant: ListRowVariant;\n}): ListRowVariant {\n return item.variant ?? defaultVariant;\n}\n\nfunction resolveRowCompact({\n item,\n compact,\n}: {\n item: ListRowProps;\n compact: boolean | undefined;\n}): boolean {\n return item.compact ?? compact ?? false;\n}\n\nfunction ListItemsInner({\n themeId: _themeId,\n mode: _mode,\n testID,\n items,\n rowVariant = 'divider',\n compact,\n}: ListItemsProps) {\n return (\n <View gap=\"none\" testID={testID}>\n {items.map((item, index) => {\n const effectiveVariant = resolveRowVariant({ item, defaultVariant: rowVariant });\n const separator = resolveListSeparator(effectiveVariant, index);\n\n return (\n <React.Fragment key={`${index}`}>\n {separator === 'divider' ? <Divider /> : null}\n {separator === 'spacer' ? <View height=\"s\" /> : null}\n <ListRow\n {...item}\n compact={resolveRowCompact({ item, compact })}\n variant={effectiveVariant}\n />\n </React.Fragment>\n );\n })}\n </View>\n );\n}\n\nfunction ListInner(props: ListProps) {\n if ('items' in props) {\n return <ListItemsInner {...props} />;\n }\n\n const { themeId: _themeId, mode: _mode, children, testID } = props;\n return (\n <View gap=\"none\" testID={testID}>\n {children}\n </View>\n );\n}\n\n/***\n * List container pattern for composing `ListRow` and `ListSection`.\n *\n \n */\nexport const List = withZoraThemeScope(ListInner);\n"]}
@@ -1,9 +0,0 @@
1
- import React from 'react';
2
- import type { ListRowProps } from './types';
3
- /***
4
- * Row pattern for lists with leading/trailing slots and optional press behavior.
5
- *
6
-
7
- */
8
- export declare const ListRow: (props: ListRowProps) => React.ReactElement | null;
9
- //# sourceMappingURL=ListRow.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ListRow.d.ts","sourceRoot":"","sources":["../../../src/patterns/list/ListRow.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,SAAS,CAAC;AAyL5D;;;;GAIG;AACH,eAAO,MAAM,OAAO,oDAAmC,CAAC"}
@@ -1,113 +0,0 @@
1
- import { ButtonBase } from '@ankhorage/surface';
2
- import React from 'react';
3
- import { View } from '../../features/layout/public';
4
- import { Text } from '../../features/typography/public';
5
- import { useZoraTheme } from '../../theme/useZoraTheme';
6
- import { withZoraThemeScope } from '../../theme/withZoraThemeScope';
7
- function resolvePadding(compact) {
8
- return compact ? { px: 'm', py: 's' } : { px: 'm', py: 'm' };
9
- }
10
- function resolveContainerStyles({ variant, theme, selected, pressed, hovered, disabled, }) {
11
- const borderColor = selected ? theme.semantics.border.focus : theme.semantics.border.default;
12
- const dividerBorderColor = selected ? theme.semantics.border.focus : 'transparent';
13
- if (variant === 'card') {
14
- return {
15
- bg: pressed
16
- ? theme.semantics.neutral.surfaceActive
17
- : hovered
18
- ? theme.semantics.neutral.surfaceHover
19
- : theme.semantics.surface.raised,
20
- borderColor,
21
- borderWidth: 1,
22
- radius: 'l',
23
- opacity: disabled ? 0.72 : 1,
24
- };
25
- }
26
- return {
27
- bg: pressed
28
- ? theme.semantics.neutral.surfaceActive
29
- : hovered
30
- ? theme.semantics.neutral.surfaceHover
31
- : selected
32
- ? theme.semantics.neutral.surface
33
- : 'transparent',
34
- borderColor: dividerBorderColor,
35
- borderWidth: selected ? 1 : 0,
36
- radius: 'm',
37
- opacity: disabled ? 0.72 : 1,
38
- };
39
- }
40
- function ListRowInner({ themeId: _themeId, mode: _mode, testID, title, description, meta, leading, trailing, action, onPress, selected = false, disabled = false, compact = false, variant = 'divider', }) {
41
- const { theme } = useZoraTheme();
42
- const padding = resolvePadding(compact);
43
- const isInteractive = Boolean(onPress) && !action;
44
- const content = (<View align="center" direction="row" style={{
45
- flex: 1,
46
- }}>
47
- {leading ? (<>
48
- <View>{leading}</View>
49
- <View width="m"/>
50
- </>) : null}
51
-
52
- <View flex={1}>
53
- <View gap="xxs">
54
- <Text variant="body" weight={selected ? 'semiBold' : 'medium'}>
55
- {title}
56
- </Text>
57
- {description ? (<Text emphasis="muted" variant="bodySmall">
58
- {description}
59
- </Text>) : null}
60
- {meta ? (<Text emphasis="subtle" variant="caption">
61
- {meta}
62
- </Text>) : null}
63
- </View>
64
- </View>
65
-
66
- {trailing || action ? (<>
67
- <View width="m"/>
68
- <View direction="row" align="center" gap="s" wrap="nowrap">
69
- {trailing}
70
- {action}
71
- </View>
72
- </>) : null}
73
- </View>);
74
- if (!isInteractive) {
75
- const styles = resolveContainerStyles({
76
- variant,
77
- theme,
78
- selected,
79
- pressed: false,
80
- hovered: false,
81
- disabled,
82
- });
83
- return (<View bg={styles.bg} borderColor={styles.borderColor} borderWidth={styles.borderWidth} px={padding.px} py={padding.py} radius={styles.radius} testID={testID} style={{
84
- opacity: styles.opacity,
85
- }}>
86
- {content}
87
- </View>);
88
- }
89
- return (<ButtonBase accessibilityRole="button" accessibilityState={{ disabled, selected }} disabled={disabled} onPress={onPress} radius={variant === 'card' ? 'l' : 'm'} testID={testID}>
90
- {(state) => {
91
- const styles = resolveContainerStyles({
92
- variant,
93
- theme,
94
- selected,
95
- pressed: state.pressed,
96
- hovered: state.hovered,
97
- disabled: state.disabled,
98
- });
99
- return (<View bg={styles.bg} borderColor={styles.borderColor} borderWidth={styles.borderWidth} px={padding.px} py={padding.py} radius={styles.radius} style={{
100
- opacity: styles.opacity,
101
- }}>
102
- {content}
103
- </View>);
104
- }}
105
- </ButtonBase>);
106
- }
107
- /***
108
- * Row pattern for lists with leading/trailing slots and optional press behavior.
109
- *
110
-
111
- */
112
- export const ListRow = withZoraThemeScope(ListRowInner);
113
- //# sourceMappingURL=ListRow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ListRow.js","sourceRoot":"","sources":["../../../src/patterns/list/ListRow.tsx"],"names":[],"mappings":"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","sourcesContent":["import { ButtonBase } from '@ankhorage/surface';\nimport React from 'react';\n\nimport { View } from '../../features/layout/public';\nimport { Text } from '../../features/typography/public';\nimport { useZoraTheme } from '../../theme/useZoraTheme';\nimport { withZoraThemeScope } from '../../theme/withZoraThemeScope';\nimport type { ListRowProps, ListRowVariant } from './types';\n\nfunction resolvePadding(compact: boolean) {\n return compact ? { px: 'm' as const, py: 's' as const } : { px: 'm' as const, py: 'm' as const };\n}\n\nfunction resolveContainerStyles({\n variant,\n theme,\n selected,\n pressed,\n hovered,\n disabled,\n}: {\n variant: ListRowVariant;\n theme: ReturnType<typeof useZoraTheme>['theme'];\n selected: boolean;\n pressed: boolean;\n hovered: boolean;\n disabled: boolean;\n}) {\n const borderColor = selected ? theme.semantics.border.focus : theme.semantics.border.default;\n const dividerBorderColor = selected ? theme.semantics.border.focus : 'transparent';\n\n if (variant === 'card') {\n return {\n bg: pressed\n ? theme.semantics.neutral.surfaceActive\n : hovered\n ? theme.semantics.neutral.surfaceHover\n : theme.semantics.surface.raised,\n borderColor,\n borderWidth: 1,\n radius: 'l' as const,\n opacity: disabled ? 0.72 : 1,\n };\n }\n\n return {\n bg: pressed\n ? theme.semantics.neutral.surfaceActive\n : hovered\n ? theme.semantics.neutral.surfaceHover\n : selected\n ? theme.semantics.neutral.surface\n : 'transparent',\n borderColor: dividerBorderColor,\n borderWidth: selected ? 1 : 0,\n radius: 'm' as const,\n opacity: disabled ? 0.72 : 1,\n };\n}\n\nfunction ListRowInner({\n themeId: _themeId,\n mode: _mode,\n testID,\n title,\n description,\n meta,\n leading,\n trailing,\n action,\n onPress,\n selected = false,\n disabled = false,\n compact = false,\n variant = 'divider',\n}: ListRowProps) {\n const { theme } = useZoraTheme();\n const padding = resolvePadding(compact);\n const isInteractive = Boolean(onPress) && !action;\n\n const content = (\n <View\n align=\"center\"\n direction=\"row\"\n style={{\n flex: 1,\n }}\n >\n {leading ? (\n <>\n <View>{leading}</View>\n <View width=\"m\" />\n </>\n ) : null}\n\n <View flex={1}>\n <View gap=\"xxs\">\n <Text variant=\"body\" weight={selected ? 'semiBold' : 'medium'}>\n {title}\n </Text>\n {description ? (\n <Text emphasis=\"muted\" variant=\"bodySmall\">\n {description}\n </Text>\n ) : null}\n {meta ? (\n <Text emphasis=\"subtle\" variant=\"caption\">\n {meta}\n </Text>\n ) : null}\n </View>\n </View>\n\n {trailing || action ? (\n <>\n <View width=\"m\" />\n <View direction=\"row\" align=\"center\" gap=\"s\" wrap=\"nowrap\">\n {trailing}\n {action}\n </View>\n </>\n ) : null}\n </View>\n );\n\n if (!isInteractive) {\n const styles = resolveContainerStyles({\n variant,\n theme,\n selected,\n pressed: false,\n hovered: false,\n disabled,\n });\n\n return (\n <View\n bg={styles.bg}\n borderColor={styles.borderColor}\n borderWidth={styles.borderWidth}\n px={padding.px}\n py={padding.py}\n radius={styles.radius}\n testID={testID}\n style={{\n opacity: styles.opacity,\n }}\n >\n {content}\n </View>\n );\n }\n\n return (\n <ButtonBase\n accessibilityRole=\"button\"\n accessibilityState={{ disabled, selected }}\n disabled={disabled}\n onPress={onPress}\n radius={variant === 'card' ? 'l' : 'm'}\n testID={testID}\n >\n {(state) => {\n const styles = resolveContainerStyles({\n variant,\n theme,\n selected,\n pressed: state.pressed,\n hovered: state.hovered,\n disabled: state.disabled,\n });\n\n return (\n <View\n bg={styles.bg}\n borderColor={styles.borderColor}\n borderWidth={styles.borderWidth}\n px={padding.px}\n py={padding.py}\n radius={styles.radius}\n style={{\n opacity: styles.opacity,\n }}\n >\n {content}\n </View>\n );\n }}\n </ButtonBase>\n );\n}\n\n/***\n * Row pattern for lists with leading/trailing slots and optional press behavior.\n *\n \n */\nexport const ListRow = withZoraThemeScope(ListRowInner);\n"]}
@@ -1,9 +0,0 @@
1
- import React from 'react';
2
- import type { ListSectionProps } from './types';
3
- /***
4
- * Section wrapper for lists with optional title and description.
5
- *
6
-
7
- */
8
- export declare const ListSection: (props: ListSectionProps) => React.ReactElement | null;
9
- //# sourceMappingURL=ListSection.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ListSection.d.ts","sourceRoot":"","sources":["../../../src/patterns/list/ListSection.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AA6BhD;;;;GAIG;AACH,eAAO,MAAM,WAAW,wDAAuC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ListSection.js","sourceRoot":"","sources":["../../../src/patterns/list/ListSection.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAG9B,SAAS,gBAAgB,CAAC,EACxB,OAAO,EAAE,QAAQ,EACjB,IAAI,EAAE,KAAK,EACX,MAAM,EACN,KAAK,EACL,WAAW,EACX,OAAO,EACP,OAAO,EACP,GAAG,KAAK,EACS;IACjB,MAAM,SAAS,GAAG,KAAK,KAAK,SAAS,CAAC;IAEtC,OAAO,CACL,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAC3B;MAAA,CAAC,SAAS,CAAC,CAAC,CAAC,CACX,CAAC,aAAa,CACZ,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,WAAW,CAAC,CAAC,WAAW,CAAC,CACzB,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,KAAK,CAAC,CAAC,KAAK,CAAC,EACb,CACH,CAAC,CAAC,CAAC,IAAI,CACR;MAAA,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAClB;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAAC","sourcesContent":["import React from 'react';\n\nimport { View } from '../../features/layout/public';\nimport { withZoraThemeScope } from '../../theme/withZoraThemeScope';\nimport { SectionHeader } from '../section-header';\nimport { List } from './List';\nimport type { ListSectionProps } from './types';\n\nfunction ListSectionInner({\n themeId: _themeId,\n mode: _mode,\n testID,\n title,\n description,\n eyebrow,\n actions,\n ...props\n}: ListSectionProps) {\n const hasHeader = title !== undefined;\n\n return (\n <View gap=\"s\" testID={testID}>\n {hasHeader ? (\n <SectionHeader\n actions={actions}\n description={description}\n eyebrow={eyebrow}\n title={title}\n />\n ) : null}\n <List {...props} />\n </View>\n );\n}\n\n/***\n * Section wrapper for lists with optional title and description.\n *\n \n */\nexport const ListSection = withZoraThemeScope(ListSectionInner);\n"]}
@@ -1,5 +0,0 @@
1
- export { List } from './List';
2
- export { ListRow } from './ListRow';
3
- export { ListSection } from './ListSection';
4
- export type { ListChildrenProps, ListItemsProps, ListProps, ListRowProps, ListRowVariant, } from './types';
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/patterns/list/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EACV,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,YAAY,EACZ,cAAc,GACf,MAAM,SAAS,CAAC"}
@@ -1,4 +0,0 @@
1
- export { List } from './List';
2
- export { ListRow } from './ListRow';
3
- export { ListSection } from './ListSection';
4
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/patterns/list/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC","sourcesContent":["export { List } from './List';\nexport { ListRow } from './ListRow';\nexport { ListSection } from './ListSection';\nexport type {\n ListChildrenProps,\n ListItemsProps,\n ListProps,\n ListRowProps,\n ListRowVariant,\n} from './types';\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../../src/patterns/list/meta.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,QAAQ;;;;;;;CAOiB,CAAC;AAEvC,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;CA0Bc,CAAC;AAEvC,eAAO,MAAM,eAAe;;;;;;;CAOU,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../../src/patterns/list/meta.ts"],"names":[],"mappings":"AAEA,MAAM,SAAS,GAAG,mEAAmE,CAAC;AAEtF,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,SAAS;IACnB,kBAAkB,EAAE,KAAK;IACzB,eAAe,EAAE,EAAE;IACnB,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,EAAE;CAC2B,CAAC;AAEvC,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,SAAS;IACf,QAAQ,EAAE,SAAS;IACnB,kBAAkB,EAAE,KAAK;IACzB,eAAe,EAAE,EAAE;IACnB,IAAI,EAAE,SAAS;IACf,MAAM,EAAE;QACN,SAAS,EAAE;YACT,KAAK,EAAE,YAAY;YACnB,SAAS,EAAE,sBAAsB;YACjC,WAAW,EAAE,iDAAiD;YAC9D,aAAa,EAAE;gBACb;oBACE,IAAI,EAAE,gBAAgB;oBACtB,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,SAAS;iBACjB;gBACD;oBACE,IAAI,EAAE,cAAc;oBACpB,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,MAAM;iBACd;aACF;SACF;KACF;IACD,KAAK,EAAE,EAAE;CAC2B,CAAC;AAEvC,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,aAAa;IACnB,QAAQ,EAAE,SAAS;IACnB,kBAAkB,EAAE,KAAK;IACzB,eAAe,EAAE,EAAE;IACnB,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,EAAE;CAC2B,CAAC","sourcesContent":["import type { ZoraComponentMeta } from '../../metadata';\n\nconst LIST_NOTE = 'List pattern component; not represented as a manifest node in v1.';\n\nexport const listMeta = {\n name: 'List',\n category: 'pattern',\n directManifestNode: false,\n allowedChildren: [],\n note: LIST_NOTE,\n props: {},\n} as const satisfies ZoraComponentMeta;\n\nexport const listRowMeta = {\n name: 'ListRow',\n category: 'pattern',\n directManifestNode: false,\n allowedChildren: [],\n note: LIST_NOTE,\n events: {\n itemPress: {\n label: 'Item press',\n eventType: 'collection.itemPress',\n description: 'Emitted when a collection item row is selected.',\n payloadFields: [\n {\n path: 'payload.itemId',\n type: 'string',\n label: 'Item ID',\n },\n {\n path: 'payload.item',\n type: 'record',\n label: 'Item',\n },\n ],\n },\n },\n props: {},\n} as const satisfies ZoraComponentMeta;\n\nexport const listSectionMeta = {\n name: 'ListSection',\n category: 'pattern',\n directManifestNode: false,\n allowedChildren: [],\n note: LIST_NOTE,\n props: {},\n} as const satisfies ZoraComponentMeta;\n"]}
@@ -1,5 +0,0 @@
1
- import type { ListRowVariant } from './types';
2
- type ListSeparatorKind = 'none' | 'divider' | 'spacer';
3
- export declare function resolveListSeparator(variant: ListRowVariant, index: number): ListSeparatorKind;
4
- export {};
5
- //# sourceMappingURL=resolveListSeparator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveListSeparator.d.ts","sourceRoot":"","sources":["../../../src/patterns/list/resolveListSeparator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,KAAK,iBAAiB,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEvD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAG9F"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveListSeparator.js","sourceRoot":"","sources":["../../../src/patterns/list/resolveListSeparator.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,oBAAoB,CAAC,OAAuB,EAAE,KAAa;IACzE,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IAC/B,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;AACtD,CAAC","sourcesContent":["import type { ListRowVariant } from './types';\n\ntype ListSeparatorKind = 'none' | 'divider' | 'spacer';\n\nexport function resolveListSeparator(variant: ListRowVariant, index: number): ListSeparatorKind {\n if (index === 0) return 'none';\n return variant === 'divider' ? 'divider' : 'spacer';\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/patterns/list/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,MAAM,CAAC;AAEhD,UAAU,gBAAiB,SAAQ,aAAa;IAC9C,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAED,UAAU,qBAAqB;IAC7B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,KAAK,CAAC;CAChB;AAED,UAAU,kBAAkB;IAC1B,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB;AAED,UAAU,kBAAkB;IAC1B,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB;AAED,MAAM,MAAM,YAAY,GAAG,gBAAgB,GACzC,CAAC,qBAAqB,GAAG,kBAAkB,GAAG,kBAAkB,CAAC,CAAC;AAEpE,MAAM,WAAW,cAAe,SAAQ,aAAa;IACnD,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,MAAM,MAAM,SAAS,GAAG,cAAc,GAAG,iBAAiB,CAAC;AAE3D,UAAU,qBAAsB,SAAQ,aAAa;IACnD,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,wBAAyB,SAAQ,aAAa;IACtD,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,MAAM,MAAM,gBAAgB,GAAG,qBAAqB,GAAG,wBAAwB,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/patterns/list/types.ts"],"names":[],"mappings":"","sourcesContent":["import type React from 'react';\n\nimport type { ZoraBaseProps } from '../../theme/ZoraBaseProps';\n\nexport type ListRowVariant = 'divider' | 'card';\n\ninterface ListRowBaseProps extends ZoraBaseProps {\n title: React.ReactNode;\n description?: React.ReactNode;\n meta?: React.ReactNode;\n leading?: React.ReactNode;\n trailing?: React.ReactNode;\n selected?: boolean;\n disabled?: boolean;\n compact?: boolean;\n variant?: ListRowVariant;\n}\n\ninterface ListRowPressableProps {\n onPress: () => void;\n action?: never;\n}\n\ninterface ListRowActionProps {\n action: React.ReactNode;\n onPress?: never;\n}\n\ninterface ListRowStaticProps {\n action?: never;\n onPress?: never;\n}\n\nexport type ListRowProps = ListRowBaseProps &\n (ListRowPressableProps | ListRowActionProps | ListRowStaticProps);\n\nexport interface ListItemsProps extends ZoraBaseProps {\n items: readonly ListRowProps[];\n rowVariant?: ListRowVariant;\n compact?: boolean;\n}\n\nexport interface ListChildrenProps extends ZoraBaseProps {\n children: React.ReactNode;\n}\n\nexport type ListProps = ListItemsProps | ListChildrenProps;\n\ninterface ListSectionItemsProps extends ZoraBaseProps {\n title?: React.ReactNode;\n description?: React.ReactNode;\n eyebrow?: React.ReactNode;\n actions?: React.ReactNode;\n items: readonly ListRowProps[];\n rowVariant?: ListRowVariant;\n compact?: boolean;\n}\n\ninterface ListSectionChildrenProps extends ZoraBaseProps {\n title?: React.ReactNode;\n description?: React.ReactNode;\n eyebrow?: React.ReactNode;\n actions?: React.ReactNode;\n children: React.ReactNode;\n}\n\nexport type ListSectionProps = ListSectionItemsProps | ListSectionChildrenProps;\n"]}
@@ -1,77 +0,0 @@
1
- import React from 'react';
2
-
3
- import { Divider, View } from '../../features/layout/public';
4
- import { withZoraThemeScope } from '../../theme/withZoraThemeScope';
5
- import { ListRow } from './ListRow';
6
- import { resolveListSeparator } from './resolveListSeparator';
7
- import type { ListItemsProps, ListProps, ListRowProps, ListRowVariant } from './types';
8
-
9
- function resolveRowVariant({
10
- item,
11
- defaultVariant,
12
- }: {
13
- item: ListRowProps;
14
- defaultVariant: ListRowVariant;
15
- }): ListRowVariant {
16
- return item.variant ?? defaultVariant;
17
- }
18
-
19
- function resolveRowCompact({
20
- item,
21
- compact,
22
- }: {
23
- item: ListRowProps;
24
- compact: boolean | undefined;
25
- }): boolean {
26
- return item.compact ?? compact ?? false;
27
- }
28
-
29
- function ListItemsInner({
30
- themeId: _themeId,
31
- mode: _mode,
32
- testID,
33
- items,
34
- rowVariant = 'divider',
35
- compact,
36
- }: ListItemsProps) {
37
- return (
38
- <View gap="none" testID={testID}>
39
- {items.map((item, index) => {
40
- const effectiveVariant = resolveRowVariant({ item, defaultVariant: rowVariant });
41
- const separator = resolveListSeparator(effectiveVariant, index);
42
-
43
- return (
44
- <React.Fragment key={`${index}`}>
45
- {separator === 'divider' ? <Divider /> : null}
46
- {separator === 'spacer' ? <View height="s" /> : null}
47
- <ListRow
48
- {...item}
49
- compact={resolveRowCompact({ item, compact })}
50
- variant={effectiveVariant}
51
- />
52
- </React.Fragment>
53
- );
54
- })}
55
- </View>
56
- );
57
- }
58
-
59
- function ListInner(props: ListProps) {
60
- if ('items' in props) {
61
- return <ListItemsInner {...props} />;
62
- }
63
-
64
- const { themeId: _themeId, mode: _mode, children, testID } = props;
65
- return (
66
- <View gap="none" testID={testID}>
67
- {children}
68
- </View>
69
- );
70
- }
71
-
72
- /***
73
- * List container pattern for composing `ListRow` and `ListSection`.
74
- *
75
-
76
- */
77
- export const List = withZoraThemeScope(ListInner);