@ankhorage/zora 2.4.4 → 2.4.6

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 (72) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +188 -0
  3. package/dist/components/data-table/DataTable.d.ts +4 -0
  4. package/dist/components/data-table/DataTable.d.ts.map +1 -0
  5. package/dist/components/data-table/DataTable.js +207 -0
  6. package/dist/components/data-table/DataTable.js.map +1 -0
  7. package/dist/components/data-table/index.d.ts +3 -0
  8. package/dist/components/data-table/index.d.ts.map +1 -0
  9. package/dist/components/data-table/index.js +2 -0
  10. package/dist/components/data-table/index.js.map +1 -0
  11. package/dist/components/data-table/meta.d.ts +9 -0
  12. package/dist/components/data-table/meta.d.ts.map +1 -0
  13. package/dist/components/data-table/meta.js +9 -0
  14. package/dist/components/data-table/meta.js.map +1 -0
  15. package/dist/components/data-table/types.d.ts +51 -0
  16. package/dist/components/data-table/types.d.ts.map +1 -0
  17. package/dist/components/data-table/types.js +2 -0
  18. package/dist/components/data-table/types.js.map +1 -0
  19. package/dist/components/date-picker/DatePicker.d.ts +4 -0
  20. package/dist/components/date-picker/DatePicker.d.ts.map +1 -0
  21. package/dist/components/date-picker/DatePicker.js +144 -0
  22. package/dist/components/date-picker/DatePicker.js.map +1 -0
  23. package/dist/components/date-picker/index.d.ts +3 -0
  24. package/dist/components/date-picker/index.d.ts.map +1 -0
  25. package/dist/components/date-picker/index.js +2 -0
  26. package/dist/components/date-picker/index.js.map +1 -0
  27. package/dist/components/date-picker/meta.d.ts +9 -0
  28. package/dist/components/date-picker/meta.d.ts.map +1 -0
  29. package/dist/components/date-picker/meta.js +9 -0
  30. package/dist/components/date-picker/meta.js.map +1 -0
  31. package/dist/components/date-picker/types.d.ts +18 -0
  32. package/dist/components/date-picker/types.d.ts.map +1 -0
  33. package/dist/components/date-picker/types.js +2 -0
  34. package/dist/components/date-picker/types.js.map +1 -0
  35. package/dist/components/time-picker/TimePicker.d.ts +4 -0
  36. package/dist/components/time-picker/TimePicker.d.ts.map +1 -0
  37. package/dist/components/time-picker/TimePicker.js +80 -0
  38. package/dist/components/time-picker/TimePicker.js.map +1 -0
  39. package/dist/components/time-picker/index.d.ts +3 -0
  40. package/dist/components/time-picker/index.d.ts.map +1 -0
  41. package/dist/components/time-picker/index.js +2 -0
  42. package/dist/components/time-picker/index.js.map +1 -0
  43. package/dist/components/time-picker/meta.d.ts +9 -0
  44. package/dist/components/time-picker/meta.d.ts.map +1 -0
  45. package/dist/components/time-picker/meta.js +9 -0
  46. package/dist/components/time-picker/meta.js.map +1 -0
  47. package/dist/components/time-picker/types.d.ts +19 -0
  48. package/dist/components/time-picker/types.d.ts.map +1 -0
  49. package/dist/components/time-picker/types.js +2 -0
  50. package/dist/components/time-picker/types.js.map +1 -0
  51. package/dist/index.d.ts +6 -0
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +3 -0
  54. package/dist/index.js.map +1 -1
  55. package/dist/metadata/componentMeta.d.ts.map +1 -1
  56. package/dist/metadata/componentMeta.js +6 -0
  57. package/dist/metadata/componentMeta.js.map +1 -1
  58. package/package.json +1 -1
  59. package/src/components/data-table/DataTable.tsx +388 -0
  60. package/src/components/data-table/index.ts +11 -0
  61. package/src/components/data-table/meta.ts +10 -0
  62. package/src/components/data-table/types.ts +57 -0
  63. package/src/components/date-picker/DatePicker.tsx +242 -0
  64. package/src/components/date-picker/index.ts +2 -0
  65. package/src/components/date-picker/meta.ts +10 -0
  66. package/src/components/date-picker/types.ts +20 -0
  67. package/src/components/time-picker/TimePicker.tsx +152 -0
  68. package/src/components/time-picker/index.ts +2 -0
  69. package/src/components/time-picker/meta.ts +10 -0
  70. package/src/components/time-picker/types.ts +21 -0
  71. package/src/index.ts +15 -0
  72. package/src/metadata/componentMeta.ts +6 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.4.6
4
+
5
+ ### Patch Changes
6
+
7
+ - 884095d: Add DatePicker and TimePicker components backed by existing ZORA ActionSheet primitives.
8
+
9
+ ## 2.4.5
10
+
11
+ ### Patch Changes
12
+
13
+ - 9db4949: Add DataTable for typed app-facing tabular data with row actions, sorting state, loading, empty, and responsive layouts.
14
+
3
15
  ## 2.4.4
4
16
 
5
17
  ### Patch Changes
package/README.md CHANGED
@@ -301,6 +301,7 @@ Metadata model overview:
301
301
  - `CheckboxGroup`
302
302
  - `Chip`
303
303
  - `ChipGroup`
304
+ - `DataTable`
304
305
  - `DropdownMenu`
305
306
  - `Drawer`
306
307
  - `Form`
@@ -1131,6 +1132,193 @@ No inherited props. `ChipGroupProps` is declared directly by ZORA.
1131
1132
 
1132
1133
  </details>
1133
1134
 
1135
+ ### `DataTable`
1136
+
1137
+ Typed, app-facing tabular data display for admin lists, dashboards, commerce
1138
+ orders, transactions, inventory, reports, moderation queues, bookings, and other
1139
+ structured app screens.
1140
+
1141
+ `DataTable` is intentionally a ZORA component, not a Surface primitive. Surface
1142
+ provides the render foundation. ZORA owns the app-facing table behavior:
1143
+ columns, rows, sorting UI, row actions, loading/empty states, and responsive
1144
+ mobile fallback.
1145
+
1146
+ ```tsx
1147
+ type Order = {
1148
+ id: string;
1149
+ customer: string;
1150
+ status: 'paid' | 'pending' | 'failed';
1151
+ total: string;
1152
+ };
1153
+
1154
+ const orders: Order[] = [
1155
+ { id: 'ord-1001', customer: 'Nora Frei', status: 'paid', total: 'CHF 128' },
1156
+ { id: 'ord-1002', customer: 'Mika Baumann', status: 'pending', total: 'CHF 64' },
1157
+ ];
1158
+
1159
+ <DataTable
1160
+ columns={[
1161
+ { id: 'customer', header: 'Customer', accessor: 'customer', sortable: true },
1162
+ {
1163
+ id: 'status',
1164
+ header: 'Status',
1165
+ renderCell: ({ row }) => (
1166
+ <Badge color={row.status === 'paid' ? 'success' : 'warning'}>{row.status}</Badge>
1167
+ ),
1168
+ },
1169
+ { id: 'total', header: 'Total', accessor: 'total', align: 'end' },
1170
+ ]}
1171
+ rows={orders}
1172
+ rowId={(row) => row.id}
1173
+ />;
1174
+ ```
1175
+
1176
+ Use `rowActions` to attach contextual actions. Row actions are rendered through
1177
+ ZORA `DropdownMenu`, so `DataTable` does not invent its own overflow behavior.
1178
+
1179
+ ```tsx
1180
+ <DataTable
1181
+ columns={[
1182
+ { id: 'customer', header: 'Customer', accessor: 'customer' },
1183
+ { id: 'total', header: 'Total', accessor: 'total', align: 'end' },
1184
+ ]}
1185
+ rows={orders}
1186
+ rowId={(row) => row.id}
1187
+ rowActions={(row) => [
1188
+ {
1189
+ id: 'view',
1190
+ title: 'View',
1191
+ icon: { name: 'eye-outline' },
1192
+ onPress: () => viewOrder(row),
1193
+ },
1194
+ {
1195
+ id: 'refund',
1196
+ title: 'Refund',
1197
+ description: 'Start a refund workflow.',
1198
+ icon: { name: 'return-down-back-outline' },
1199
+ intent: 'danger',
1200
+ onPress: () => refundOrder(row),
1201
+ },
1202
+ ]}
1203
+ />
1204
+ ```
1205
+
1206
+ Use controlled sort state when a screen owns sorting:
1207
+
1208
+ ```tsx
1209
+ const [sort, setSort] = React.useState<DataTableSortState>({
1210
+ columnId: 'customer',
1211
+ direction: 'asc',
1212
+ });
1213
+
1214
+ <DataTable
1215
+ columns={[
1216
+ { id: 'customer', header: 'Customer', accessor: 'customer', sortable: true },
1217
+ { id: 'total', header: 'Total', accessor: 'total', align: 'end', sortable: true },
1218
+ ]}
1219
+ rows={orders}
1220
+ rowId={(row) => row.id}
1221
+ sort={sort}
1222
+ onSortChange={setSort}
1223
+ />;
1224
+ ```
1225
+
1226
+ `DataTable` renders a table-like layout on wider screens and a card/list fallback
1227
+ on narrow screens. It supports loading and empty states out of the box:
1228
+
1229
+ ```tsx
1230
+ <DataTable
1231
+ columns={columns}
1232
+ rows={orders}
1233
+ rowId={(row) => row.id}
1234
+ loading={isLoading}
1235
+ loadingRows={6}
1236
+ emptyTitle="No orders"
1237
+ emptyDescription="Orders will appear here when customers check out."
1238
+ />
1239
+ ```
1240
+
1241
+ V1 is intentionally not a spreadsheet or data grid. It does not include
1242
+ virtualization, column resizing, column pinning, inline editing, grouped rows,
1243
+ nested rows, server-side pagination controllers, or export features.
1244
+
1245
+ <details>
1246
+ <summary>Props</summary>
1247
+
1248
+ `DataTable` props:
1249
+
1250
+ | Prop | Type | Default | Notes |
1251
+ | ------------------ | -------------------------------------- | --------------------------------- | ------------------------------------------- |
1252
+ | `columns` | `readonly DataTableColumn<TRow>[]` | - | Column definitions. |
1253
+ | `rows` | `readonly TRow[]` | - | Row data. |
1254
+ | `rowId` | `(row: TRow, index: number) => string` | - | Stable row id resolver. |
1255
+ | `rowActions` | `(row, index) => DataTableRowAction[]` | - | Optional contextual row actions. |
1256
+ | `sort` | `DataTableSortState` | - | Controlled sort state. |
1257
+ | `onSortChange` | `(sort: DataTableSortState) => void` | - | Called when a sortable header is activated. |
1258
+ | `loading` | `boolean` | `false` | Shows loading placeholders. |
1259
+ | `loadingRows` | `number` | `5` | Placeholder row count while loading. |
1260
+ | `emptyTitle` | `React.ReactNode` | `'No data'` | Empty-state title. |
1261
+ | `emptyDescription` | `React.ReactNode` | `'There are no rows to display.'` | Empty-state description. |
1262
+ | `density` | `DataTableDensity` | `'comfortable'` | Row density: `comfortable` or `compact`. |
1263
+ | `testID` | `string` | - | Test id. |
1264
+ | `mode` | `ZoraThemeMode` | - | Optional scoped theme mode override. |
1265
+ | `themeId` | `ZoraThemeId` | - | Optional scoped theme id override. |
1266
+
1267
+ `DataTableColumn<TRow>` fields:
1268
+
1269
+ | Field | Type | Default | Notes |
1270
+ | ------------ | ---------------------------------------------------------- | ------- | ------------------------------------------ |
1271
+ | `id` | `string` | - | Stable column id. |
1272
+ | `header` | `React.ReactNode` | - | Header label. |
1273
+ | `accessor` | `keyof TRow` | - | Reads a primitive/date value from the row. |
1274
+ | `align` | `DataTableColumnAlign` | `start` | Cell alignment. |
1275
+ | `width` | `number` | - | Fixed column width. |
1276
+ | `minWidth` | `number` | `140` | Minimum column width. |
1277
+ | `sortable` | `boolean` | `false` | Enables sort header behavior. |
1278
+ | `renderCell` | `(context: DataTableCellContext<TRow>) => React.ReactNode` | - | Custom cell rendering. |
1279
+
1280
+ `DataTableCellContext<TRow>` fields:
1281
+
1282
+ | Field | Type | Notes |
1283
+ | ---------- | ----------------------- | ----------------------------- |
1284
+ | `row` | `TRow` | Current row. |
1285
+ | `rowIndex` | `number` | Current row index. |
1286
+ | `column` | `DataTableColumn<TRow>` | Current column. |
1287
+ | `value` | `unknown` | Accessor value, when present. |
1288
+
1289
+ `DataTableRowAction<TRow>` fields:
1290
+
1291
+ | Field | Type | Default | Notes |
1292
+ | ------------- | --------------------- | ------- | -------------------------------------------- |
1293
+ | `id` | `string` | - | Stable action id. |
1294
+ | `title` | `React.ReactNode` | - | Action label. |
1295
+ | `description` | `React.ReactNode` | - | Optional secondary text. |
1296
+ | `icon` | `ButtonIconSpec` | - | Optional action icon. |
1297
+ | `intent` | `MenuActionIntent` | - | Action intent, currently `default`/`danger`. |
1298
+ | `disabled` | `boolean` | `false` | Disables the action. |
1299
+ | `onPress` | `(row: TRow) => void` | - | Called with the row when selected. |
1300
+
1301
+ Type aliases:
1302
+
1303
+ ```ts
1304
+ type DataTableColumnAlign = 'start' | 'center' | 'end';
1305
+ type DataTableDensity = 'comfortable' | 'compact';
1306
+ type DataTableSortDirection = 'asc' | 'desc';
1307
+
1308
+ interface DataTableSortState {
1309
+ columnId: string;
1310
+ direction: DataTableSortDirection;
1311
+ }
1312
+ ```
1313
+
1314
+ Default cell rendering:
1315
+
1316
+ - `string`, `number`, `boolean`, `bigint`, and `Date` values render automatically.
1317
+ - `null` / `undefined` render as `—`.
1318
+ - Structured values render as `—` unless `renderCell` is provided.
1319
+
1320
+ </details>
1321
+
1134
1322
  ### `Textarea`
1135
1323
 
1136
1324
  Multiline text input wrapper with ZORA sizing and optional Surface icon specs.
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import type { DataTableProps } from './types';
3
+ export declare const DataTable: <TRow extends object>(props: DataTableProps<TRow>) => React.ReactElement | null;
4
+ //# sourceMappingURL=DataTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../src/components/data-table/DataTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAY1B,OAAO,KAAK,EAKV,cAAc,EAGf,MAAM,SAAS,CAAC;AA+WjB,eAAO,MAAM,SAAS,GAxCE,IAAI,SAAS,MAAM,2DAwCgB,CAAC"}
@@ -0,0 +1,207 @@
1
+ import React from 'react';
2
+ import { ScrollView } from 'react-native';
3
+ import { Box, Show, Stack } from '../../foundation';
4
+ import { EmptyState } from '../../patterns/empty-state';
5
+ import { withZoraThemeScope } from '../../theme/withZoraThemeScope';
6
+ import { Button } from '../button';
7
+ import { Card } from '../card';
8
+ import { IconButton } from '../icon-button';
9
+ import { DropdownMenu } from '../menu';
10
+ import { SkeletonList } from '../skeleton';
11
+ import { Text } from '../text';
12
+ function resolveTextAlign(align) {
13
+ switch (align) {
14
+ case 'center':
15
+ return 'center';
16
+ case 'end':
17
+ return 'right';
18
+ case 'start':
19
+ default:
20
+ return 'left';
21
+ }
22
+ }
23
+ function resolveCellJustify(align) {
24
+ switch (align) {
25
+ case 'center':
26
+ return 'center';
27
+ case 'end':
28
+ return 'flex-end';
29
+ case 'start':
30
+ default:
31
+ return 'flex-start';
32
+ }
33
+ }
34
+ function resolveCellStyle(column) {
35
+ return {
36
+ alignItems: resolveCellJustify(column.align),
37
+ flexGrow: column.width === undefined ? 1 : 0,
38
+ flexShrink: 0,
39
+ minWidth: column.minWidth ?? 140,
40
+ width: column.width,
41
+ };
42
+ }
43
+ function resolveRowPadding(density) {
44
+ return density === 'compact'
45
+ ? { px: 'm', py: 's' }
46
+ : { px: 'm', py: 'm' };
47
+ }
48
+ function resolveAccessorValue(row, column) {
49
+ if (column.accessor === undefined) {
50
+ return undefined;
51
+ }
52
+ return row[column.accessor];
53
+ }
54
+ function renderDefaultCell(value) {
55
+ if (value === null || value === undefined) {
56
+ return '—';
57
+ }
58
+ if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
59
+ return String(value);
60
+ }
61
+ if (typeof value === 'bigint') {
62
+ return value.toString();
63
+ }
64
+ if (value instanceof Date) {
65
+ return value.toLocaleDateString();
66
+ }
67
+ return '—';
68
+ }
69
+ function createCellContext(column, row, rowIndex) {
70
+ return {
71
+ column,
72
+ row,
73
+ rowIndex,
74
+ value: resolveAccessorValue(row, column),
75
+ };
76
+ }
77
+ function renderCell(column, row, rowIndex) {
78
+ const context = createCellContext(column, row, rowIndex);
79
+ return column.renderCell ? column.renderCell(context) : renderDefaultCell(context.value);
80
+ }
81
+ function renderTableCell(column, row, rowIndex) {
82
+ if (column.renderCell) {
83
+ return column.renderCell(createCellContext(column, row, rowIndex));
84
+ }
85
+ return (<Text align={resolveTextAlign(column.align)} variant="bodySmall">
86
+ {renderDefaultCell(resolveAccessorValue(row, column))}
87
+ </Text>);
88
+ }
89
+ function resolveNextSortDirection(current) {
90
+ return current === 'asc' ? 'desc' : 'asc';
91
+ }
92
+ function mapRowActions(row, actions) {
93
+ return actions.map((action) => ({
94
+ description: action.description,
95
+ disabled: action.disabled,
96
+ icon: action.icon,
97
+ id: action.id,
98
+ intent: action.intent,
99
+ onPress: action.onPress ? () => action.onPress?.(row) : undefined,
100
+ title: action.title,
101
+ }));
102
+ }
103
+ function renderRowActions({ row, rowIndex, rowActions, testID, }) {
104
+ const actions = rowActions?.(row, rowIndex) ?? [];
105
+ if (actions.length === 0) {
106
+ return null;
107
+ }
108
+ return (<DropdownMenu actions={mapRowActions(row, actions)} trigger={<IconButton icon={{ name: 'ellipsis-horizontal' }} label="Row actions" size="s" variant="ghost"/>} testID={testID ? `${testID}-row-actions-${rowIndex}` : undefined}/>);
109
+ }
110
+ function DataTableHeader({ columns, sort, onSortChange, density, }) {
111
+ const padding = resolveRowPadding(density ?? 'comfortable');
112
+ return (<Box bg="subtle" borderColor="border" borderWidth={1} radius="m">
113
+ <Stack direction="row" align="center">
114
+ {columns.map((column) => {
115
+ const currentDirection = sort?.columnId === column.id ? sort.direction : undefined;
116
+ const sortable = Boolean(column.sortable && onSortChange);
117
+ const directionLabel = currentDirection === undefined ? '' : currentDirection === 'asc' ? ' ↑' : ' ↓';
118
+ return (<Box key={column.id} px={padding.px} py={padding.py} style={resolveCellStyle(column)}>
119
+ {sortable ? (<Button color="primary" onPress={() => onSortChange?.({
120
+ columnId: column.id,
121
+ direction: resolveNextSortDirection(currentDirection),
122
+ })} size="s" variant="ghost">
123
+ {column.header}
124
+ {directionLabel}
125
+ </Button>) : (<Text align={resolveTextAlign(column.align)} emphasis="muted" variant="caption" weight="semiBold">
126
+ {column.header}
127
+ </Text>)}
128
+ </Box>);
129
+ })}
130
+ <Box px={padding.px} py={padding.py} style={{ minWidth: 56, width: 56 }}>
131
+ <Text align="right" emphasis="muted" variant="caption" weight="semiBold">
132
+ Actions
133
+ </Text>
134
+ </Box>
135
+ </Stack>
136
+ </Box>);
137
+ }
138
+ function DataTableDesktop({ columns, rows, rowActions, rowId, sort, onSortChange, density, testID, }) {
139
+ const padding = resolveRowPadding(density ?? 'comfortable');
140
+ return (<ScrollView horizontal showsHorizontalScrollIndicator={false}>
141
+ <Box minWidth={720} style={{ width: '100%' }}>
142
+ <Stack gap="xs">
143
+ <DataTableHeader columns={columns} density={density} onSortChange={onSortChange} sort={sort}/>
144
+ <Stack gap="xs">
145
+ {rows.map((row, rowIndex) => (<Box bg="surface" borderColor="border" borderWidth={1} key={rowId(row, rowIndex)} radius="m" testID={testID ? `${testID}-row-${rowIndex}` : undefined}>
146
+ <Stack direction="row" align="center">
147
+ {columns.map((column) => (<Box key={column.id} px={padding.px} py={padding.py} style={resolveCellStyle(column)}>
148
+ {renderTableCell(column, row, rowIndex)}
149
+ </Box>))}
150
+ <Box px={padding.px} py={padding.py} style={{ alignItems: 'flex-end', minWidth: 56, width: 56 }}>
151
+ {renderRowActions({ row, rowActions, rowIndex, testID })}
152
+ </Box>
153
+ </Stack>
154
+ </Box>))}
155
+ </Stack>
156
+ </Stack>
157
+ </Box>
158
+ </ScrollView>);
159
+ }
160
+ function DataTableMobile({ columns, rows, rowActions, rowId, testID, }) {
161
+ const [primaryColumn, ...detailColumns] = columns;
162
+ return (<Stack gap="s">
163
+ {rows.map((row, rowIndex) => {
164
+ const title = primaryColumn
165
+ ? renderCell(primaryColumn, row, rowIndex)
166
+ : `Row ${rowIndex + 1}`;
167
+ const actions = renderRowActions({ row, rowActions, rowIndex, testID });
168
+ return (<Card actions={actions} compact key={rowId(row, rowIndex)} testID={testID ? `${testID}-card-${rowIndex}` : undefined} title={title}>
169
+ <Stack gap="s">
170
+ {detailColumns.map((column) => (<Stack gap="xxs" key={column.id}>
171
+ <Text emphasis="muted" variant="caption" weight="semiBold">
172
+ {column.header}
173
+ </Text>
174
+ {column.renderCell ? (renderCell(column, row, rowIndex)) : (<Text variant="bodySmall">
175
+ {renderDefaultCell(resolveAccessorValue(row, column))}
176
+ </Text>)}
177
+ </Stack>))}
178
+ </Stack>
179
+ </Card>);
180
+ })}
181
+ </Stack>);
182
+ }
183
+ function DataTableInner({ themeId: _themeId, mode: _mode, rows, loading = false, loadingRows = 5, emptyTitle = 'No data', emptyDescription = 'There are no rows to display.', testID, density = 'comfortable', ...props }) {
184
+ if (loading) {
185
+ return <SkeletonList rows={loadingRows} variant="card" testID={testID}/>;
186
+ }
187
+ if (rows.length === 0) {
188
+ return <EmptyState title={emptyTitle} description={emptyDescription}/>;
189
+ }
190
+ const tableProps = {
191
+ ...props,
192
+ density,
193
+ emptyDescription,
194
+ emptyTitle,
195
+ loading,
196
+ loadingRows,
197
+ rows,
198
+ testID,
199
+ };
200
+ return (<Box testID={testID}>
201
+ <Show when={{ base: false, md: true }} fallback={<DataTableMobile {...tableProps}/>}>
202
+ <DataTableDesktop {...tableProps}/>
203
+ </Show>
204
+ </Box>);
205
+ }
206
+ export const DataTable = withZoraThemeScope(DataTableInner);
207
+ //# sourceMappingURL=DataTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTable.js","sourceRoot":"","sources":["../../../src/components/data-table/DataTable.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport { ScrollView, type ViewStyle } from 'react-native';\n\nimport { Box, Show, Stack } from '../../foundation';\nimport { EmptyState } from '../../patterns/empty-state';\nimport { withZoraThemeScope } from '../../theme/withZoraThemeScope';\nimport { Button } from '../button';\nimport { Card } from '../card';\nimport { IconButton } from '../icon-button';\nimport { DropdownMenu, type MenuAction } from '../menu';\nimport { SkeletonList } from '../skeleton';\nimport { Text, type TextAlign } from '../text';\nimport type {\n DataTableCellContext,\n DataTableColumn,\n DataTableColumnAlign,\n DataTableDensity,\n DataTableProps,\n DataTableRowAction,\n DataTableSortDirection,\n} from './types';\n\nfunction resolveTextAlign(align: DataTableColumnAlign | undefined): TextAlign {\n switch (align) {\n case 'center':\n return 'center';\n case 'end':\n return 'right';\n case 'start':\n default:\n return 'left';\n }\n}\n\nfunction resolveCellJustify(align: DataTableColumnAlign | undefined): ViewStyle['alignItems'] {\n switch (align) {\n case 'center':\n return 'center';\n case 'end':\n return 'flex-end';\n case 'start':\n default:\n return 'flex-start';\n }\n}\n\nfunction resolveCellStyle<TRow extends object>(column: DataTableColumn<TRow>): ViewStyle {\n return {\n alignItems: resolveCellJustify(column.align),\n flexGrow: column.width === undefined ? 1 : 0,\n flexShrink: 0,\n minWidth: column.minWidth ?? 140,\n width: column.width,\n };\n}\n\nfunction resolveRowPadding(density: DataTableDensity) {\n return density === 'compact'\n ? { px: 'm' as const, py: 's' as const }\n : { px: 'm' as const, py: 'm' as const };\n}\n\nfunction resolveAccessorValue<TRow extends object>(row: TRow, column: DataTableColumn<TRow>) {\n if (column.accessor === undefined) {\n return undefined;\n }\n\n return row[column.accessor];\n}\n\nfunction renderDefaultCell(value: unknown): React.ReactNode {\n if (value === null || value === undefined) {\n return '—';\n }\n\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n\n if (typeof value === 'bigint') {\n return value.toString();\n }\n\n if (value instanceof Date) {\n return value.toLocaleDateString();\n }\n\n return '—';\n}\n\nfunction createCellContext<TRow extends object>(\n column: DataTableColumn<TRow>,\n row: TRow,\n rowIndex: number,\n): DataTableCellContext<TRow> {\n return {\n column,\n row,\n rowIndex,\n value: resolveAccessorValue(row, column),\n };\n}\n\nfunction renderCell<TRow extends object>(\n column: DataTableColumn<TRow>,\n row: TRow,\n rowIndex: number,\n) {\n const context = createCellContext(column, row, rowIndex);\n return column.renderCell ? column.renderCell(context) : renderDefaultCell(context.value);\n}\n\nfunction renderTableCell<TRow extends object>(\n column: DataTableColumn<TRow>,\n row: TRow,\n rowIndex: number,\n) {\n if (column.renderCell) {\n return column.renderCell(createCellContext(column, row, rowIndex));\n }\n\n return (\n <Text align={resolveTextAlign(column.align)} variant=\"bodySmall\">\n {renderDefaultCell(resolveAccessorValue(row, column))}\n </Text>\n );\n}\n\nfunction resolveNextSortDirection(\n current: DataTableSortDirection | undefined,\n): DataTableSortDirection {\n return current === 'asc' ? 'desc' : 'asc';\n}\n\nfunction mapRowActions<TRow extends object>(\n row: TRow,\n actions: readonly DataTableRowAction<TRow>[],\n): readonly MenuAction[] {\n return actions.map((action) => ({\n description: action.description,\n disabled: action.disabled,\n icon: action.icon,\n id: action.id,\n intent: action.intent,\n onPress: action.onPress ? () => action.onPress?.(row) : undefined,\n title: action.title,\n }));\n}\n\nfunction renderRowActions<TRow extends object>({\n row,\n rowIndex,\n rowActions,\n testID,\n}: {\n row: TRow;\n rowIndex: number;\n rowActions: DataTableProps<TRow>['rowActions'];\n testID?: string;\n}) {\n const actions = rowActions?.(row, rowIndex) ?? [];\n\n if (actions.length === 0) {\n return null;\n }\n\n return (\n <DropdownMenu\n actions={mapRowActions(row, actions)}\n trigger={\n <IconButton\n icon={{ name: 'ellipsis-horizontal' }}\n label=\"Row actions\"\n size=\"s\"\n variant=\"ghost\"\n />\n }\n testID={testID ? `${testID}-row-actions-${rowIndex}` : undefined}\n />\n );\n}\n\nfunction DataTableHeader<TRow extends object>({\n columns,\n sort,\n onSortChange,\n density,\n}: Pick<DataTableProps<TRow>, 'columns' | 'density' | 'onSortChange' | 'sort'>) {\n const padding = resolveRowPadding(density ?? 'comfortable');\n\n return (\n <Box bg=\"subtle\" borderColor=\"border\" borderWidth={1} radius=\"m\">\n <Stack direction=\"row\" align=\"center\">\n {columns.map((column) => {\n const currentDirection = sort?.columnId === column.id ? sort.direction : undefined;\n const sortable = Boolean(column.sortable && onSortChange);\n const directionLabel =\n currentDirection === undefined ? '' : currentDirection === 'asc' ? ' ↑' : ' ↓';\n\n return (\n <Box key={column.id} px={padding.px} py={padding.py} style={resolveCellStyle(column)}>\n {sortable ? (\n <Button\n color=\"primary\"\n onPress={() =>\n onSortChange?.({\n columnId: column.id,\n direction: resolveNextSortDirection(currentDirection),\n })\n }\n size=\"s\"\n variant=\"ghost\"\n >\n {column.header}\n {directionLabel}\n </Button>\n ) : (\n <Text\n align={resolveTextAlign(column.align)}\n emphasis=\"muted\"\n variant=\"caption\"\n weight=\"semiBold\"\n >\n {column.header}\n </Text>\n )}\n </Box>\n );\n })}\n <Box px={padding.px} py={padding.py} style={{ minWidth: 56, width: 56 }}>\n <Text align=\"right\" emphasis=\"muted\" variant=\"caption\" weight=\"semiBold\">\n Actions\n </Text>\n </Box>\n </Stack>\n </Box>\n );\n}\n\nfunction DataTableDesktop<TRow extends object>({\n columns,\n rows,\n rowActions,\n rowId,\n sort,\n onSortChange,\n density,\n testID,\n}: DataTableProps<TRow>) {\n const padding = resolveRowPadding(density ?? 'comfortable');\n\n return (\n <ScrollView horizontal showsHorizontalScrollIndicator={false}>\n <Box minWidth={720} style={{ width: '100%' }}>\n <Stack gap=\"xs\">\n <DataTableHeader\n columns={columns}\n density={density}\n onSortChange={onSortChange}\n sort={sort}\n />\n <Stack gap=\"xs\">\n {rows.map((row, rowIndex) => (\n <Box\n bg=\"surface\"\n borderColor=\"border\"\n borderWidth={1}\n key={rowId(row, rowIndex)}\n radius=\"m\"\n testID={testID ? `${testID}-row-${rowIndex}` : undefined}\n >\n <Stack direction=\"row\" align=\"center\">\n {columns.map((column) => (\n <Box\n key={column.id}\n px={padding.px}\n py={padding.py}\n style={resolveCellStyle(column)}\n >\n {renderTableCell(column, row, rowIndex)}\n </Box>\n ))}\n <Box\n px={padding.px}\n py={padding.py}\n style={{ alignItems: 'flex-end', minWidth: 56, width: 56 }}\n >\n {renderRowActions({ row, rowActions, rowIndex, testID })}\n </Box>\n </Stack>\n </Box>\n ))}\n </Stack>\n </Stack>\n </Box>\n </ScrollView>\n );\n}\n\nfunction DataTableMobile<TRow extends object>({\n columns,\n rows,\n rowActions,\n rowId,\n testID,\n}: DataTableProps<TRow>) {\n const [primaryColumn, ...detailColumns] = columns;\n\n return (\n <Stack gap=\"s\">\n {rows.map((row, rowIndex) => {\n const title = primaryColumn\n ? renderCell(primaryColumn, row, rowIndex)\n : `Row ${rowIndex + 1}`;\n const actions = renderRowActions({ row, rowActions, rowIndex, testID });\n\n return (\n <Card\n actions={actions}\n compact\n key={rowId(row, rowIndex)}\n testID={testID ? `${testID}-card-${rowIndex}` : undefined}\n title={title}\n >\n <Stack gap=\"s\">\n {detailColumns.map((column) => (\n <Stack gap=\"xxs\" key={column.id}>\n <Text emphasis=\"muted\" variant=\"caption\" weight=\"semiBold\">\n {column.header}\n </Text>\n {column.renderCell ? (\n renderCell(column, row, rowIndex)\n ) : (\n <Text variant=\"bodySmall\">\n {renderDefaultCell(resolveAccessorValue(row, column))}\n </Text>\n )}\n </Stack>\n ))}\n </Stack>\n </Card>\n );\n })}\n </Stack>\n );\n}\n\nfunction DataTableInner<TRow extends object>({\n themeId: _themeId,\n mode: _mode,\n rows,\n loading = false,\n loadingRows = 5,\n emptyTitle = 'No data',\n emptyDescription = 'There are no rows to display.',\n testID,\n density = 'comfortable',\n ...props\n}: DataTableProps<TRow>) {\n if (loading) {\n return <SkeletonList rows={loadingRows} variant=\"card\" testID={testID} />;\n }\n\n if (rows.length === 0) {\n return <EmptyState title={emptyTitle} description={emptyDescription} />;\n }\n\n const tableProps: DataTableProps<TRow> = {\n ...props,\n density,\n emptyDescription,\n emptyTitle,\n loading,\n loadingRows,\n rows,\n testID,\n };\n\n return (\n <Box testID={testID}>\n <Show when={{ base: false, md: true }} fallback={<DataTableMobile {...tableProps} />}>\n <DataTableDesktop {...tableProps} />\n </Show>\n </Box>\n );\n}\n\nexport const DataTable = withZoraThemeScope(DataTableInner);\n"]}
@@ -0,0 +1,3 @@
1
+ export { DataTable } from './DataTable';
2
+ export type { DataTableCellContext, DataTableColumn, DataTableColumnAlign, DataTableDensity, DataTableProps, DataTableRowAction, DataTableSortDirection, DataTableSortState, } from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/data-table/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EACV,oBAAoB,EACpB,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { DataTable } from './DataTable';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/data-table/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC","sourcesContent":["export { DataTable } from './DataTable';\nexport type {\n DataTableCellContext,\n DataTableColumn,\n DataTableColumnAlign,\n DataTableDensity,\n DataTableProps,\n DataTableRowAction,\n DataTableSortDirection,\n DataTableSortState,\n} from './types';\n"]}
@@ -0,0 +1,9 @@
1
+ export declare const dataTableMeta: {
2
+ readonly name: "DataTable";
3
+ readonly category: "component";
4
+ readonly directManifestNode: false;
5
+ readonly allowedChildren: readonly [];
6
+ readonly note: "Code-facing typed data table component; not represented as a manifest node in v1.";
7
+ readonly props: {};
8
+ };
9
+ //# sourceMappingURL=meta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../../src/components/data-table/meta.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa;;;;;;;CAOY,CAAC"}
@@ -0,0 +1,9 @@
1
+ export const dataTableMeta = {
2
+ name: 'DataTable',
3
+ category: 'component',
4
+ directManifestNode: false,
5
+ allowedChildren: [],
6
+ note: 'Code-facing typed data table component; not represented as a manifest node in v1.',
7
+ props: {},
8
+ };
9
+ //# sourceMappingURL=meta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../../src/components/data-table/meta.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,WAAW;IACjB,QAAQ,EAAE,WAAW;IACrB,kBAAkB,EAAE,KAAK;IACzB,eAAe,EAAE,EAAE;IACnB,IAAI,EAAE,mFAAmF;IACzF,KAAK,EAAE,EAAE;CAC2B,CAAC","sourcesContent":["import type { ZoraComponentMeta } from '../../metadata';\n\nexport const dataTableMeta = {\n name: 'DataTable',\n category: 'component',\n directManifestNode: false,\n allowedChildren: [],\n note: 'Code-facing typed data table component; not represented as a manifest node in v1.',\n props: {},\n} as const satisfies ZoraComponentMeta;\n"]}
@@ -0,0 +1,51 @@
1
+ import type { ButtonIconSpec } from '@ankhorage/surface';
2
+ import type React from 'react';
3
+ import type { ZoraBaseProps } from '../../theme/ZoraBaseProps';
4
+ import type { MenuActionIntent } from '../menu';
5
+ export type DataTableColumnAlign = 'start' | 'center' | 'end';
6
+ export type DataTableDensity = 'comfortable' | 'compact';
7
+ export type DataTableSortDirection = 'asc' | 'desc';
8
+ export interface DataTableSortState {
9
+ columnId: string;
10
+ direction: DataTableSortDirection;
11
+ }
12
+ export interface DataTableCellContext<TRow extends object> {
13
+ row: TRow;
14
+ rowIndex: number;
15
+ column: DataTableColumn<TRow>;
16
+ value: unknown;
17
+ }
18
+ export interface DataTableColumn<TRow extends object> {
19
+ id: string;
20
+ header: React.ReactNode;
21
+ accessor?: keyof TRow;
22
+ align?: DataTableColumnAlign;
23
+ width?: number;
24
+ minWidth?: number;
25
+ sortable?: boolean;
26
+ renderCell?: (context: DataTableCellContext<TRow>) => React.ReactNode;
27
+ }
28
+ export interface DataTableRowAction<TRow extends object> {
29
+ id: string;
30
+ title: React.ReactNode;
31
+ description?: React.ReactNode;
32
+ icon?: ButtonIconSpec;
33
+ intent?: MenuActionIntent;
34
+ disabled?: boolean;
35
+ onPress?: (row: TRow) => void;
36
+ }
37
+ export interface DataTableProps<TRow extends object> extends ZoraBaseProps {
38
+ columns: readonly DataTableColumn<TRow>[];
39
+ rows: readonly TRow[];
40
+ rowId: (row: TRow, index: number) => string;
41
+ rowActions?: (row: TRow, index: number) => readonly DataTableRowAction<TRow>[];
42
+ sort?: DataTableSortState;
43
+ onSortChange?: (sort: DataTableSortState) => void;
44
+ loading?: boolean;
45
+ loadingRows?: number;
46
+ emptyTitle?: React.ReactNode;
47
+ emptyDescription?: React.ReactNode;
48
+ density?: DataTableDensity;
49
+ testID?: string;
50
+ }
51
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/data-table/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AAC9D,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG,SAAS,CAAC;AACzD,MAAM,MAAM,sBAAsB,GAAG,KAAK,GAAG,MAAM,CAAC;AAEpD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,sBAAsB,CAAC;CACnC;AAED,MAAM,WAAW,oBAAoB,CAAC,IAAI,SAAS,MAAM;IACvD,GAAG,EAAE,IAAI,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;IAC9B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,eAAe,CAAC,IAAI,SAAS,MAAM;IAClD,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;CACvE;AAED,MAAM,WAAW,kBAAkB,CAAC,IAAI,SAAS,MAAM;IACrD,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc,CAAC,IAAI,SAAS,MAAM,CAAE,SAAQ,aAAa;IACxE,OAAO,EAAE,SAAS,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;IAC1C,IAAI,EAAE,SAAS,IAAI,EAAE,CAAC;IACtB,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5C,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;IAC/E,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAClD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACnC,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/data-table/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ButtonIconSpec } from '@ankhorage/surface';\nimport type React from 'react';\n\nimport type { ZoraBaseProps } from '../../theme/ZoraBaseProps';\nimport type { MenuActionIntent } from '../menu';\n\nexport type DataTableColumnAlign = 'start' | 'center' | 'end';\nexport type DataTableDensity = 'comfortable' | 'compact';\nexport type DataTableSortDirection = 'asc' | 'desc';\n\nexport interface DataTableSortState {\n columnId: string;\n direction: DataTableSortDirection;\n}\n\nexport interface DataTableCellContext<TRow extends object> {\n row: TRow;\n rowIndex: number;\n column: DataTableColumn<TRow>;\n value: unknown;\n}\n\nexport interface DataTableColumn<TRow extends object> {\n id: string;\n header: React.ReactNode;\n accessor?: keyof TRow;\n align?: DataTableColumnAlign;\n width?: number;\n minWidth?: number;\n sortable?: boolean;\n renderCell?: (context: DataTableCellContext<TRow>) => React.ReactNode;\n}\n\nexport interface DataTableRowAction<TRow extends object> {\n id: string;\n title: React.ReactNode;\n description?: React.ReactNode;\n icon?: ButtonIconSpec;\n intent?: MenuActionIntent;\n disabled?: boolean;\n onPress?: (row: TRow) => void;\n}\n\nexport interface DataTableProps<TRow extends object> extends ZoraBaseProps {\n columns: readonly DataTableColumn<TRow>[];\n rows: readonly TRow[];\n rowId: (row: TRow, index: number) => string;\n rowActions?: (row: TRow, index: number) => readonly DataTableRowAction<TRow>[];\n sort?: DataTableSortState;\n onSortChange?: (sort: DataTableSortState) => void;\n loading?: boolean;\n loadingRows?: number;\n emptyTitle?: React.ReactNode;\n emptyDescription?: React.ReactNode;\n density?: DataTableDensity;\n testID?: string;\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import type { DatePickerProps } from './types';
3
+ export declare const DatePicker: (props: DatePickerProps) => React.ReactElement | null;
4
+ //# sourceMappingURL=DatePicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePicker.d.ts","sourceRoot":"","sources":["../../../src/components/date-picker/DatePicker.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAyO/C,eAAO,MAAM,UAAU,uDAAsC,CAAC"}