@cratis/scene.blueprint.default 4.38.0 → 4.40.0

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 (167) hide show
  1. package/ComponentName.ts +27 -0
  2. package/defaultBlueprintComponents.ts +10 -1
  3. package/dist/cjs/ComponentName.js +9 -0
  4. package/dist/cjs/ComponentName.js.map +1 -1
  5. package/dist/cjs/defaultBlueprintComponents.js +19 -1
  6. package/dist/cjs/defaultBlueprintComponents.js.map +1 -1
  7. package/dist/cjs/foundation/BulkBar.js +62 -0
  8. package/dist/cjs/foundation/BulkBar.js.map +1 -0
  9. package/dist/cjs/foundation/DataList.js +436 -0
  10. package/dist/cjs/foundation/DataList.js.map +1 -0
  11. package/dist/cjs/foundation/FormScreenBody.js +447 -0
  12. package/dist/cjs/foundation/FormScreenBody.js.map +1 -0
  13. package/dist/cjs/foundation/FoundationStates.js +2 -1
  14. package/dist/cjs/foundation/FoundationStates.js.map +1 -1
  15. package/dist/cjs/foundation/GlobalSearch.js +54 -0
  16. package/dist/cjs/foundation/GlobalSearch.js.map +1 -0
  17. package/dist/cjs/foundation/KanbanBoard.js +222 -0
  18. package/dist/cjs/foundation/KanbanBoard.js.map +1 -0
  19. package/dist/cjs/foundation/NotificationsButton.js +45 -0
  20. package/dist/cjs/foundation/NotificationsButton.js.map +1 -0
  21. package/dist/cjs/foundation/SubNavigation.js +72 -0
  22. package/dist/cjs/foundation/SubNavigation.js.map +1 -0
  23. package/dist/cjs/foundation/TabSet.js +101 -0
  24. package/dist/cjs/foundation/TabSet.js.map +1 -0
  25. package/dist/cjs/foundation/WizardProgress.js +185 -0
  26. package/dist/cjs/foundation/WizardProgress.js.map +1 -0
  27. package/dist/cjs/foundation/boardModel.js +67 -0
  28. package/dist/cjs/foundation/boardModel.js.map +1 -0
  29. package/dist/cjs/foundation/formModel.js +158 -0
  30. package/dist/cjs/foundation/formModel.js.map +1 -0
  31. package/dist/cjs/foundation/foundationComponentMetadata.js +54 -0
  32. package/dist/cjs/foundation/foundationComponentMetadata.js.map +1 -1
  33. package/dist/cjs/foundation/foundationDescriptors.js +400 -0
  34. package/dist/cjs/foundation/foundationDescriptors.js.map +1 -1
  35. package/dist/cjs/foundation/foundationSamples.js +303 -0
  36. package/dist/cjs/foundation/foundationSamples.js.map +1 -1
  37. package/dist/cjs/foundation/foundationStrings.js +72 -0
  38. package/dist/cjs/foundation/foundationStrings.js.map +1 -1
  39. package/dist/cjs/foundation/listModel.js +200 -0
  40. package/dist/cjs/foundation/listModel.js.map +1 -0
  41. package/dist/cjs/foundation/tabModel.js +41 -0
  42. package/dist/cjs/foundation/tabModel.js.map +1 -0
  43. package/dist/cjs/foundation/urlState.js +57 -0
  44. package/dist/cjs/foundation/urlState.js.map +1 -0
  45. package/dist/cjs/foundation/useCompactWidth.js +23 -0
  46. package/dist/cjs/foundation/useCompactWidth.js.map +1 -0
  47. package/dist/cjs/foundation/wizardModel.js +50 -0
  48. package/dist/cjs/foundation/wizardModel.js.map +1 -0
  49. package/dist/cjs/index.js +71 -0
  50. package/dist/cjs/index.js.map +1 -1
  51. package/dist/esm/ComponentName.d.ts +10 -1
  52. package/dist/esm/ComponentName.d.ts.map +1 -1
  53. package/dist/esm/ComponentName.js +9 -0
  54. package/dist/esm/ComponentName.js.map +1 -1
  55. package/dist/esm/defaultBlueprintComponents.d.ts.map +1 -1
  56. package/dist/esm/defaultBlueprintComponents.js +19 -1
  57. package/dist/esm/defaultBlueprintComponents.js.map +1 -1
  58. package/dist/esm/foundation/BulkBar.d.ts +4 -0
  59. package/dist/esm/foundation/BulkBar.d.ts.map +1 -0
  60. package/dist/esm/foundation/BulkBar.js +59 -0
  61. package/dist/esm/foundation/BulkBar.js.map +1 -0
  62. package/dist/esm/foundation/DataList.d.ts +3 -0
  63. package/dist/esm/foundation/DataList.d.ts.map +1 -0
  64. package/dist/esm/foundation/DataList.js +434 -0
  65. package/dist/esm/foundation/DataList.js.map +1 -0
  66. package/dist/esm/foundation/FormScreenBody.d.ts +3 -0
  67. package/dist/esm/foundation/FormScreenBody.d.ts.map +1 -0
  68. package/dist/esm/foundation/FormScreenBody.js +445 -0
  69. package/dist/esm/foundation/FormScreenBody.js.map +1 -0
  70. package/dist/esm/foundation/FoundationStates.js +2 -1
  71. package/dist/esm/foundation/FoundationStates.js.map +1 -1
  72. package/dist/esm/foundation/GlobalSearch.d.ts +3 -0
  73. package/dist/esm/foundation/GlobalSearch.d.ts.map +1 -0
  74. package/dist/esm/foundation/GlobalSearch.js +52 -0
  75. package/dist/esm/foundation/GlobalSearch.js.map +1 -0
  76. package/dist/esm/foundation/KanbanBoard.d.ts +3 -0
  77. package/dist/esm/foundation/KanbanBoard.d.ts.map +1 -0
  78. package/dist/esm/foundation/KanbanBoard.js +220 -0
  79. package/dist/esm/foundation/KanbanBoard.js.map +1 -0
  80. package/dist/esm/foundation/NotificationsButton.d.ts +3 -0
  81. package/dist/esm/foundation/NotificationsButton.d.ts.map +1 -0
  82. package/dist/esm/foundation/NotificationsButton.js +43 -0
  83. package/dist/esm/foundation/NotificationsButton.js.map +1 -0
  84. package/dist/esm/foundation/SubNavigation.d.ts +3 -0
  85. package/dist/esm/foundation/SubNavigation.d.ts.map +1 -0
  86. package/dist/esm/foundation/SubNavigation.js +70 -0
  87. package/dist/esm/foundation/SubNavigation.js.map +1 -0
  88. package/dist/esm/foundation/TabSet.d.ts +3 -0
  89. package/dist/esm/foundation/TabSet.d.ts.map +1 -0
  90. package/dist/esm/foundation/TabSet.js +99 -0
  91. package/dist/esm/foundation/TabSet.js.map +1 -0
  92. package/dist/esm/foundation/WizardProgress.d.ts +3 -0
  93. package/dist/esm/foundation/WizardProgress.d.ts.map +1 -0
  94. package/dist/esm/foundation/WizardProgress.js +183 -0
  95. package/dist/esm/foundation/WizardProgress.js.map +1 -0
  96. package/dist/esm/foundation/boardModel.d.ts +22 -0
  97. package/dist/esm/foundation/boardModel.d.ts.map +1 -0
  98. package/dist/esm/foundation/boardModel.js +61 -0
  99. package/dist/esm/foundation/boardModel.js.map +1 -0
  100. package/dist/esm/foundation/formModel.d.ts +48 -0
  101. package/dist/esm/foundation/formModel.d.ts.map +1 -0
  102. package/dist/esm/foundation/formModel.js +147 -0
  103. package/dist/esm/foundation/formModel.js.map +1 -0
  104. package/dist/esm/foundation/foundationComponentMetadata.d.ts.map +1 -1
  105. package/dist/esm/foundation/foundationComponentMetadata.js +54 -0
  106. package/dist/esm/foundation/foundationComponentMetadata.js.map +1 -1
  107. package/dist/esm/foundation/foundationDescriptors.d.ts.map +1 -1
  108. package/dist/esm/foundation/foundationDescriptors.js +400 -0
  109. package/dist/esm/foundation/foundationDescriptors.js.map +1 -1
  110. package/dist/esm/foundation/foundationSamples.d.ts.map +1 -1
  111. package/dist/esm/foundation/foundationSamples.js +303 -0
  112. package/dist/esm/foundation/foundationSamples.js.map +1 -1
  113. package/dist/esm/foundation/foundationStrings.d.ts +72 -0
  114. package/dist/esm/foundation/foundationStrings.d.ts.map +1 -1
  115. package/dist/esm/foundation/foundationStrings.js +72 -0
  116. package/dist/esm/foundation/foundationStrings.js.map +1 -1
  117. package/dist/esm/foundation/index.d.ts +16 -0
  118. package/dist/esm/foundation/index.d.ts.map +1 -1
  119. package/dist/esm/foundation/index.js +16 -0
  120. package/dist/esm/foundation/index.js.map +1 -1
  121. package/dist/esm/foundation/listModel.d.ts +49 -0
  122. package/dist/esm/foundation/listModel.d.ts.map +1 -0
  123. package/dist/esm/foundation/listModel.js +183 -0
  124. package/dist/esm/foundation/listModel.js.map +1 -0
  125. package/dist/esm/foundation/tabModel.d.ts +10 -0
  126. package/dist/esm/foundation/tabModel.d.ts.map +1 -0
  127. package/dist/esm/foundation/tabModel.js +37 -0
  128. package/dist/esm/foundation/tabModel.js.map +1 -0
  129. package/dist/esm/foundation/urlState.d.ts +4 -0
  130. package/dist/esm/foundation/urlState.d.ts.map +1 -0
  131. package/dist/esm/foundation/urlState.js +53 -0
  132. package/dist/esm/foundation/urlState.js.map +1 -0
  133. package/dist/esm/foundation/useCompactWidth.d.ts +3 -0
  134. package/dist/esm/foundation/useCompactWidth.d.ts.map +1 -0
  135. package/dist/esm/foundation/useCompactWidth.js +20 -0
  136. package/dist/esm/foundation/useCompactWidth.js.map +1 -0
  137. package/dist/esm/foundation/wizardModel.d.ts +16 -0
  138. package/dist/esm/foundation/wizardModel.d.ts.map +1 -0
  139. package/dist/esm/foundation/wizardModel.js +43 -0
  140. package/dist/esm/foundation/wizardModel.js.map +1 -0
  141. package/dist/esm/index.js +16 -0
  142. package/dist/esm/index.js.map +1 -1
  143. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  144. package/foundation/BulkBar.tsx +38 -0
  145. package/foundation/DataList.tsx +208 -0
  146. package/foundation/FormScreenBody.tsx +196 -0
  147. package/foundation/FoundationStates.tsx +1 -1
  148. package/foundation/GlobalSearch.tsx +33 -0
  149. package/foundation/KanbanBoard.tsx +97 -0
  150. package/foundation/NotificationsButton.tsx +28 -0
  151. package/foundation/SubNavigation.tsx +49 -0
  152. package/foundation/TabSet.tsx +65 -0
  153. package/foundation/WizardProgress.tsx +109 -0
  154. package/foundation/boardModel.ts +64 -0
  155. package/foundation/formModel.ts +146 -0
  156. package/foundation/foundationComponentMetadata.ts +9 -0
  157. package/foundation/foundationDescriptors.ts +195 -0
  158. package/foundation/foundationSamples.ts +56 -0
  159. package/foundation/foundationStrings.ts +72 -0
  160. package/foundation/index.ts +16 -0
  161. package/foundation/listModel.ts +190 -0
  162. package/foundation/tabModel.ts +41 -0
  163. package/foundation/urlState.ts +52 -0
  164. package/foundation/useCompactWidth.ts +23 -0
  165. package/foundation/wizardModel.ts +54 -0
  166. package/package.json +8 -8
  167. package/shell/layout.css +513 -0
@@ -0,0 +1,434 @@
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import { useMemo, useState, useEffect } from 'react';
3
+ import { useValueOutput } from '@cratis/scene.react';
4
+ import { readOptionalString } from '../shell/elementProperties.js';
5
+ import { readComponentState, ComponentState } from './ComponentState.js';
6
+ import { FoundationIcon } from './FoundationIcon.js';
7
+ import { FoundationFrame } from './StateFrame.js';
8
+ import { readLocale, formatNumber, NumberFormat, formatDate } from './formatting.js';
9
+ import { readFoundationStrings, formatText } from './foundationStrings.js';
10
+ import { readPermissionRule } from './PermissionRule.js';
11
+ import { readListColumns, readListVariant, ListVariant, parseSort, filterRows, searchRows, sortRows, paginate, parseSelection, rowId, groupRows, CellKind, formatSort, nextSort, textOf, toggleSelection } from './listModel.js';
12
+ import { useCompactWidth } from './useCompactWidth.js';
13
+ import { useUrlState } from './urlState.js';
14
+
15
+ function Cell({ column, row, locale }) {
16
+ const raw = row[column.field];
17
+ const text = textOf(row, column.field);
18
+ switch(column.kind){
19
+ case CellKind.Number:
20
+ return /*#__PURE__*/ jsx(Fragment, {
21
+ children: typeof raw === 'number' ? formatNumber(raw, locale) : text
22
+ });
23
+ case CellKind.Currency:
24
+ return /*#__PURE__*/ jsx(Fragment, {
25
+ children: typeof raw === 'number' ? formatNumber(raw, locale, NumberFormat.Currency, column.currency ?? 'USD') : text
26
+ });
27
+ case CellKind.Date:
28
+ return /*#__PURE__*/ jsx(Fragment, {
29
+ children: formatDate(raw, locale)
30
+ });
31
+ case CellKind.Status:
32
+ {
33
+ const tone = column.tones[text] ?? 'neutral';
34
+ const icon = {
35
+ success: 'check',
36
+ warning: 'alert',
37
+ danger: 'close',
38
+ info: 'info',
39
+ neutral: 'circle'
40
+ }[tone] ?? 'circle';
41
+ return /*#__PURE__*/ jsxs("span", {
42
+ className: "foundation-chip",
43
+ "data-tone": tone,
44
+ children: [
45
+ /*#__PURE__*/ jsx(FoundationIcon, {
46
+ name: icon
47
+ }),
48
+ /*#__PURE__*/ jsx("span", {
49
+ children: text
50
+ })
51
+ ]
52
+ });
53
+ }
54
+ default:
55
+ return /*#__PURE__*/ jsx(Fragment, {
56
+ children: text
57
+ });
58
+ }
59
+ }
60
+ /**
61
+ * The `dataList` component: the records of a collection as a table, as cards, or grouped with subtotals, with search, sort, paging and
62
+ * selection that live in the address.
63
+ *
64
+ * `rows` and `columns` (`field`, `header`, `kind`: text, number, currency, date or status, `sortable`, `tones`) come from a query; the list takes its
65
+ * text, filter, sort, page and selection from the address when `urlKey` is given (`<urlKey>q`, `sort`, `page`, `selected`), so a shared link or a refresh restores
66
+ * the screen as it was. `search` and `filter` (the filter builder's value) narrow the rows. A header is a button that cycles ascending, descending, none, and the
67
+ * column says so in words. Rows select with checkboxes (`selectionMode` multiple or single), and a row's "Actions" menu names its row. On a phone a table becomes cards -
68
+ * nothing is hidden or cut. The selection is the `value` output; a row action is the `action` output. Header, row and cell elements are real table elements,
69
+ * so a screen reader announces the row and column of the cell it is on.
70
+ */ function DataList({ element, interactions, bindingOutputs }) {
71
+ const columns = useMemo(()=>readListColumns(element.properties.columns), [
72
+ element.properties.columns
73
+ ]);
74
+ const rows = useMemo(()=>Array.isArray(element.properties.rows) ? element.properties.rows.filter((row)=>typeof row === 'object' && row !== null && !Array.isArray(row)) : [], [
75
+ element.properties.rows
76
+ ]);
77
+ const idField = readOptionalString(element, 'idField') ?? 'id';
78
+ const titleField = readOptionalString(element, 'titleField') ?? columns[0]?.field ?? idField;
79
+ const urlKey = readOptionalString(element, 'urlKey');
80
+ const keyed = (name)=>urlKey === undefined ? undefined : `${urlKey}${name}`;
81
+ const [searchText, setSearchText] = useUrlState(keyed('q'), readOptionalString(element, 'search'));
82
+ const [sortText, setSortText] = useUrlState(keyed('sort'), readOptionalString(element, 'sort'));
83
+ const [pageText, setPageText] = useUrlState(keyed('page'), '1');
84
+ const [selectedText, setSelectedText] = useUrlState(keyed('selected'), readOptionalString(element, 'selected'));
85
+ const [openGroups, setOpenGroups] = useState();
86
+ const strings = readFoundationStrings(element);
87
+ const locale = readLocale(element);
88
+ const compact = useCompactWidth();
89
+ const requestedVariant = readListVariant(element.properties.variant);
90
+ const variant = requestedVariant === ListVariant.Table && compact && element.properties.collapse !== false ? ListVariant.Cards : requestedVariant;
91
+ const pageSize = typeof element.properties.pageSize === 'number' ? element.properties.pageSize : 0;
92
+ const multiple = element.properties.selectionMode !== 'single';
93
+ const selectable = element.properties.selectionMode === 'multiple' || element.properties.selectionMode === 'single';
94
+ const actions = Array.isArray(element.properties.rowActions) ? element.properties.rowActions.filter((action)=>typeof action === 'string') : [];
95
+ const actionRule = readPermissionRule(element, 'actionPermission');
96
+ const groupBy = readOptionalString(element, 'groupBy');
97
+ const totalField = readOptionalString(element, 'totalField');
98
+ const sort = parseSort(sortText, columns);
99
+ const matching = useMemo(()=>filterRows(searchRows(rows, columns, searchText ?? ''), element.properties.filter), [
100
+ rows,
101
+ columns,
102
+ searchText,
103
+ element.properties.filter
104
+ ]);
105
+ const sorted = useMemo(()=>sortRows(matching, sort, locale), [
106
+ matching,
107
+ sort?.field,
108
+ sort?.descending,
109
+ locale
110
+ ]);
111
+ const page = paginate(sorted, Number(pageText), variant === ListVariant.Grouped ? 0 : pageSize);
112
+ const selected = parseSelection(selectedText);
113
+ const state = readComponentState(element, rows.length > 0);
114
+ useEffect(()=>{
115
+ if (Number(pageText) !== page.page && pageText !== undefined) setPageText(String(page.page));
116
+ }, [
117
+ page.page,
118
+ pageText,
119
+ setPageText
120
+ ]);
121
+ useValueOutput(bindingOutputs, multiple ? selected : selected[0]);
122
+ const select = (id)=>{
123
+ setSelectedText(toggleSelection(selected, id, multiple).join(',') || undefined);
124
+ interactions?.onSelect?.();
125
+ };
126
+ const run = (action, id)=>{
127
+ bindingOutputs?.setOutput('action', {
128
+ action,
129
+ row: id
130
+ });
131
+ interactions?.onClick?.({
132
+ stopPropagation: ()=>undefined
133
+ });
134
+ };
135
+ const sortLabel = (column)=>sort?.field === column.field ? `${column.header}, ${sort.descending ? strings.listSortedDescending : strings.listSortedAscending}` : column.header;
136
+ const nameOf = (row, index)=>textOf(row, titleField) || rowId(row, index, idField);
137
+ const allOnPage = page.rows.length > 0 && page.rows.every((row, index)=>selected.includes(rowId(row, index, idField)));
138
+ const count = matching.length === rows.length ? formatText(strings.listCount, {
139
+ count: rows.length
140
+ }) : formatText(strings.listCountFiltered, {
141
+ shown: matching.length,
142
+ total: rows.length
143
+ });
144
+ const rowActions = (row, index)=>actions.length === 0 || actionRule === 'hidden' ? undefined : /*#__PURE__*/ jsxs("select", {
145
+ className: "foundation-row-actions",
146
+ "aria-label": formatText(strings.listRowActions, {
147
+ name: nameOf(row, index)
148
+ }),
149
+ value: "",
150
+ disabled: actionRule === 'disabled',
151
+ title: actionRule === 'disabled' ? strings.disabledNoPermission : undefined,
152
+ onChange: (event)=>{
153
+ if (event.target.value) run(event.target.value, rowId(row, index, idField));
154
+ },
155
+ children: [
156
+ /*#__PURE__*/ jsx("option", {
157
+ value: "",
158
+ children: strings.listActions
159
+ }),
160
+ actions.map((action)=>/*#__PURE__*/ jsx("option", {
161
+ value: action,
162
+ children: action
163
+ }, action))
164
+ ]
165
+ });
166
+ const checkbox = (row, index)=>!selectable ? undefined : /*#__PURE__*/ jsx("input", {
167
+ type: multiple ? 'checkbox' : 'radio',
168
+ name: `${element.id}-select`,
169
+ checked: selected.includes(rowId(row, index, idField)),
170
+ "aria-label": formatText(strings.listSelectRow, {
171
+ name: nameOf(row, index)
172
+ }),
173
+ onChange: ()=>select(rowId(row, index, idField))
174
+ });
175
+ const table = (tableRows, offset = 0, caption)=>/*#__PURE__*/ jsx("div", {
176
+ className: "foundation-table-scroll",
177
+ children: /*#__PURE__*/ jsxs("table", {
178
+ className: "foundation-table",
179
+ children: [
180
+ /*#__PURE__*/ jsx("caption", {
181
+ className: "foundation-visually-hidden",
182
+ children: caption ?? readOptionalString(element, 'label') ?? strings.listTable
183
+ }),
184
+ /*#__PURE__*/ jsx("thead", {
185
+ children: /*#__PURE__*/ jsxs("tr", {
186
+ children: [
187
+ selectable && /*#__PURE__*/ jsx("th", {
188
+ scope: "col",
189
+ className: "foundation-table-select",
190
+ children: multiple && /*#__PURE__*/ jsx("input", {
191
+ type: "checkbox",
192
+ checked: allOnPage,
193
+ "aria-label": strings.listSelectAll,
194
+ onChange: ()=>setSelectedText((allOnPage ? selected.filter((id)=>!page.rows.some((row, index)=>rowId(row, index, idField) === id)) : [
195
+ ...new Set([
196
+ ...selected,
197
+ ...page.rows.map((row, index)=>rowId(row, index, idField))
198
+ ])
199
+ ]).join(',') || undefined)
200
+ })
201
+ }),
202
+ columns.map((column)=>/*#__PURE__*/ jsx("th", {
203
+ scope: "col",
204
+ "aria-sort": sort?.field === column.field ? sort.descending ? 'descending' : 'ascending' : undefined,
205
+ children: column.sortable ? /*#__PURE__*/ jsxs("button", {
206
+ type: "button",
207
+ className: "foundation-sort",
208
+ "aria-label": formatText(strings.listSortBy, {
209
+ column: sortLabel(column)
210
+ }),
211
+ onClick: ()=>{
212
+ setSortText(formatSort(nextSort(sort, column.field)));
213
+ setPageText('1');
214
+ },
215
+ children: [
216
+ /*#__PURE__*/ jsx("span", {
217
+ children: column.header
218
+ }),
219
+ sort?.field === column.field && /*#__PURE__*/ jsx(FoundationIcon, {
220
+ name: sort.descending ? 'arrow-down' : 'arrow-up'
221
+ })
222
+ ]
223
+ }) : column.header
224
+ }, column.field)),
225
+ actions.length > 0 && actionRule !== 'hidden' && /*#__PURE__*/ jsx("th", {
226
+ scope: "col",
227
+ children: /*#__PURE__*/ jsx("span", {
228
+ className: "foundation-visually-hidden",
229
+ children: strings.listActions
230
+ })
231
+ })
232
+ ]
233
+ })
234
+ }),
235
+ /*#__PURE__*/ jsx("tbody", {
236
+ children: tableRows.map((row, position)=>{
237
+ const index = offset + position;
238
+ const id = rowId(row, index, idField);
239
+ return /*#__PURE__*/ jsxs("tr", {
240
+ "aria-selected": selectable ? selected.includes(id) : undefined,
241
+ "data-selected": selected.includes(id),
242
+ children: [
243
+ selectable && /*#__PURE__*/ jsx("td", {
244
+ className: "foundation-table-select",
245
+ children: checkbox(row, index)
246
+ }),
247
+ columns.map((column, columnIndex)=>columnIndex === 0 ? /*#__PURE__*/ jsx("th", {
248
+ scope: "row",
249
+ children: /*#__PURE__*/ jsx(Cell, {
250
+ column: column,
251
+ row: row,
252
+ locale: locale
253
+ })
254
+ }, column.field) : /*#__PURE__*/ jsx("td", {
255
+ "data-kind": column.kind,
256
+ children: /*#__PURE__*/ jsx(Cell, {
257
+ column: column,
258
+ row: row,
259
+ locale: locale
260
+ })
261
+ }, column.field)),
262
+ actions.length > 0 && actionRule !== 'hidden' && /*#__PURE__*/ jsx("td", {
263
+ children: rowActions(row, index)
264
+ })
265
+ ]
266
+ }, id);
267
+ })
268
+ })
269
+ ]
270
+ })
271
+ });
272
+ const cards = (cardRows, offset = 0)=>/*#__PURE__*/ jsx("ul", {
273
+ className: "foundation-cards",
274
+ "aria-label": readOptionalString(element, 'label') ?? strings.listCards,
275
+ children: cardRows.map((row, position)=>{
276
+ const index = offset + position;
277
+ const id = rowId(row, index, idField);
278
+ return /*#__PURE__*/ jsxs("li", {
279
+ className: "foundation-card-row",
280
+ "data-selected": selected.includes(id),
281
+ children: [
282
+ /*#__PURE__*/ jsxs("div", {
283
+ className: "foundation-card-head",
284
+ children: [
285
+ checkbox(row, index),
286
+ /*#__PURE__*/ jsx("strong", {
287
+ children: nameOf(row, index)
288
+ })
289
+ ]
290
+ }),
291
+ /*#__PURE__*/ jsx("dl", {
292
+ children: columns.filter((column)=>column.field !== titleField).map((column)=>/*#__PURE__*/ jsxs("div", {
293
+ children: [
294
+ /*#__PURE__*/ jsx("dt", {
295
+ className: "foundation-count",
296
+ children: column.header
297
+ }),
298
+ /*#__PURE__*/ jsx("dd", {
299
+ children: /*#__PURE__*/ jsx(Cell, {
300
+ column: column,
301
+ row: row,
302
+ locale: locale
303
+ })
304
+ })
305
+ ]
306
+ }, column.field))
307
+ }),
308
+ rowActions(row, index)
309
+ ]
310
+ }, id);
311
+ })
312
+ });
313
+ const groups = variant === ListVariant.Grouped && groupBy ? groupRows(sorted, groupBy, totalField) : [];
314
+ const isOpen = (key)=>openGroups === undefined ? true : openGroups.has(key);
315
+ const toggleGroup = (key)=>setOpenGroups((current)=>{
316
+ const base = current ?? new Set(groups.map((group)=>group.key));
317
+ const next = new Set(base);
318
+ if (next.has(key)) next.delete(key);
319
+ else next.add(key);
320
+ return next;
321
+ });
322
+ const totalColumn = columns.find((column)=>column.field === totalField);
323
+ return /*#__PURE__*/ jsx(FoundationFrame, {
324
+ element: element,
325
+ interactions: interactions,
326
+ name: "data-list",
327
+ state: state,
328
+ skeleton: [
329
+ 100,
330
+ 100,
331
+ 100,
332
+ 100
333
+ ],
334
+ children: (state === ComponentState.Ready || state === ComponentState.Partial) && /*#__PURE__*/ jsxs(Fragment, {
335
+ children: [
336
+ /*#__PURE__*/ jsx("p", {
337
+ className: "foundation-count",
338
+ role: "status",
339
+ children: count
340
+ }),
341
+ matching.length === 0 ? /*#__PURE__*/ jsxs("div", {
342
+ className: "foundation-empty",
343
+ role: "status",
344
+ children: [
345
+ /*#__PURE__*/ jsx("strong", {
346
+ className: "foundation-empty-headline",
347
+ children: strings.listNoMatches
348
+ }),
349
+ /*#__PURE__*/ jsx("button", {
350
+ type: "button",
351
+ className: "foundation-link",
352
+ onClick: ()=>{
353
+ setSearchText(undefined);
354
+ setPageText('1');
355
+ interactions?.onChange?.();
356
+ },
357
+ children: strings.listClearSearch
358
+ })
359
+ ]
360
+ }) : variant === ListVariant.Grouped && groupBy ? groups.map((group)=>/*#__PURE__*/ jsxs("section", {
361
+ className: "foundation-list-group",
362
+ children: [
363
+ /*#__PURE__*/ jsxs("h3", {
364
+ children: [
365
+ /*#__PURE__*/ jsxs("button", {
366
+ type: "button",
367
+ "aria-expanded": isOpen(group.key),
368
+ className: "foundation-sort",
369
+ onClick: ()=>toggleGroup(group.key),
370
+ "aria-label": formatText(isOpen(group.key) ? strings.listGroupCollapse : strings.listGroupExpand, {
371
+ group: group.key
372
+ }),
373
+ children: [
374
+ /*#__PURE__*/ jsx(FoundationIcon, {
375
+ name: isOpen(group.key) ? 'chevron-down' : 'chevron-right'
376
+ }),
377
+ group.key
378
+ ]
379
+ }),
380
+ /*#__PURE__*/ jsx("span", {
381
+ className: "foundation-count",
382
+ children: group.subtotal === undefined ? group.rows.length : formatText(strings.listGroupSubtotal, {
383
+ count: group.rows.length,
384
+ total: formatNumber(group.subtotal, locale, totalColumn?.kind === CellKind.Currency ? NumberFormat.Currency : NumberFormat.Number, totalColumn?.currency ?? 'USD')
385
+ })
386
+ })
387
+ ]
388
+ }),
389
+ isOpen(group.key) && table(group.rows, 0, group.key)
390
+ ]
391
+ }, group.key)) : /*#__PURE__*/ jsxs(Fragment, {
392
+ children: [
393
+ variant === ListVariant.Cards ? cards(page.rows, (page.page - 1) * Math.max(1, pageSize)) : table(page.rows, (page.page - 1) * Math.max(1, pageSize)),
394
+ page.pages > 1 && /*#__PURE__*/ jsxs("nav", {
395
+ className: "foundation-pager",
396
+ "aria-label": formatText(strings.listPage, {
397
+ page: page.page,
398
+ pages: page.pages
399
+ }),
400
+ children: [
401
+ /*#__PURE__*/ jsx("button", {
402
+ type: "button",
403
+ className: "foundation-button",
404
+ "data-emphasis": "secondary",
405
+ disabled: page.page <= 1,
406
+ onClick: ()=>setPageText(String(page.page - 1)),
407
+ children: strings.listPrevious
408
+ }),
409
+ /*#__PURE__*/ jsx("span", {
410
+ "aria-current": "page",
411
+ children: formatText(strings.listPage, {
412
+ page: page.page,
413
+ pages: page.pages
414
+ })
415
+ }),
416
+ /*#__PURE__*/ jsx("button", {
417
+ type: "button",
418
+ className: "foundation-button",
419
+ "data-emphasis": "secondary",
420
+ disabled: page.page >= page.pages,
421
+ onClick: ()=>setPageText(String(page.page + 1)),
422
+ children: strings.listNext
423
+ })
424
+ ]
425
+ })
426
+ ]
427
+ })
428
+ ]
429
+ })
430
+ });
431
+ }
432
+
433
+ export { DataList };
434
+ //# sourceMappingURL=DataList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataList.js","sources":["../../../foundation/DataList.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { useEffect, useMemo, useState } from 'react';\nimport { RegisteredComponentProps, useValueOutput } from '@cratis/scene.react';\nimport { readOptionalString } from '../shell/elementProperties';\nimport { ComponentState, readComponentState } from './ComponentState';\nimport { FoundationIcon } from './FoundationIcon';\nimport { FoundationFrame } from './StateFrame';\nimport { formatDate, formatNumber, NumberFormat, readLocale } from './formatting';\nimport { formatText, readFoundationStrings } from './foundationStrings';\nimport { readPermissionRule } from './PermissionRule';\nimport {\n CellKind, ListColumn, ListRow, ListVariant, filterRows, formatSort, groupRows, nextSort, paginate, parseSelection, parseSort, readListColumns, readListVariant, rowId,\n searchRows, sortRows, textOf, toggleSelection,\n} from './listModel';\nimport { useCompactWidth } from './useCompactWidth';\nimport { useUrlState } from './urlState';\n\nfunction Cell({ column, row, locale }: { column: ListColumn; row: ListRow; locale: string }) {\n const raw = row[column.field];\n const text = textOf(row, column.field);\n switch (column.kind) {\n case CellKind.Number: return <>{typeof raw === 'number' ? formatNumber(raw, locale) : text}</>;\n case CellKind.Currency: return <>{typeof raw === 'number' ? formatNumber(raw, locale, NumberFormat.Currency, column.currency ?? 'USD') : text}</>;\n case CellKind.Date: return <>{formatDate(raw, locale)}</>;\n case CellKind.Status: {\n const tone = column.tones[text] ?? 'neutral';\n const icon = ({ success: 'check', warning: 'alert', danger: 'close', info: 'info', neutral: 'circle' } as const)[tone as 'success'] ?? 'circle';\n return <span className='foundation-chip' data-tone={tone}><FoundationIcon name={icon} /><span>{text}</span></span>;\n }\n default: return <>{text}</>;\n }\n}\n\n/**\n * The `dataList` component: the records of a collection as a table, as cards, or grouped with subtotals, with search, sort, paging and\n * selection that live in the address.\n *\n * `rows` and `columns` (`field`, `header`, `kind`: text, number, currency, date or status, `sortable`, `tones`) come from a query; the list takes its\n * text, filter, sort, page and selection from the address when `urlKey` is given (`<urlKey>q`, `sort`, `page`, `selected`), so a shared link or a refresh restores\n * the screen as it was. `search` and `filter` (the filter builder's value) narrow the rows. A header is a button that cycles ascending, descending, none, and the\n * column says so in words. Rows select with checkboxes (`selectionMode` multiple or single), and a row's \"Actions\" menu names its row. On a phone a table becomes cards -\n * nothing is hidden or cut. The selection is the `value` output; a row action is the `action` output. Header, row and cell elements are real table elements,\n * so a screen reader announces the row and column of the cell it is on.\n */\nexport function DataList({ element, interactions, bindingOutputs }: RegisteredComponentProps) {\n const columns = useMemo(() => readListColumns(element.properties.columns), [element.properties.columns]);\n const rows = useMemo(() => (Array.isArray(element.properties.rows) ? (element.properties.rows as unknown[]).filter((row): row is ListRow => typeof row === 'object' && row !== null && !Array.isArray(row)) : []), [element.properties.rows]);\n const idField = readOptionalString(element, 'idField') ?? 'id';\n const titleField = readOptionalString(element, 'titleField') ?? columns[0]?.field ?? idField;\n const urlKey = readOptionalString(element, 'urlKey');\n const keyed = (name: string) => (urlKey === undefined ? undefined : `${urlKey}${name}`);\n const [searchText, setSearchText] = useUrlState(keyed('q'), readOptionalString(element, 'search'));\n const [sortText, setSortText] = useUrlState(keyed('sort'), readOptionalString(element, 'sort'));\n const [pageText, setPageText] = useUrlState(keyed('page'), '1');\n const [selectedText, setSelectedText] = useUrlState(keyed('selected'), readOptionalString(element, 'selected'));\n const [openGroups, setOpenGroups] = useState<Set<string> | undefined>();\n const strings = readFoundationStrings(element);\n const locale = readLocale(element);\n const compact = useCompactWidth();\n const requestedVariant = readListVariant(element.properties.variant);\n const variant = requestedVariant === ListVariant.Table && compact && element.properties.collapse !== false ? ListVariant.Cards : requestedVariant;\n const pageSize = typeof element.properties.pageSize === 'number' ? element.properties.pageSize : 0;\n const multiple = element.properties.selectionMode !== 'single';\n const selectable = element.properties.selectionMode === 'multiple' || element.properties.selectionMode === 'single';\n const actions = Array.isArray(element.properties.rowActions) ? element.properties.rowActions.filter((action): action is string => typeof action === 'string') : [];\n const actionRule = readPermissionRule(element, 'actionPermission');\n const groupBy = readOptionalString(element, 'groupBy');\n const totalField = readOptionalString(element, 'totalField');\n const sort = parseSort(sortText, columns);\n\n const matching = useMemo(() => filterRows(searchRows(rows, columns, searchText ?? ''), element.properties.filter), [rows, columns, searchText, element.properties.filter]);\n const sorted = useMemo(() => sortRows(matching, sort, locale), [matching, sort?.field, sort?.descending, locale]);\n const page = paginate(sorted, Number(pageText), variant === ListVariant.Grouped ? 0 : pageSize);\n const selected = parseSelection(selectedText);\n const state = readComponentState(element, rows.length > 0);\n\n useEffect(() => { if (Number(pageText) !== page.page && pageText !== undefined) setPageText(String(page.page)); }, [page.page, pageText, setPageText]);\n useValueOutput(bindingOutputs, multiple ? selected : selected[0]);\n\n const select = (id: string) => { setSelectedText(toggleSelection(selected, id, multiple).join(',') || undefined); interactions?.onSelect?.(); };\n const run = (action: string, id: string) => { bindingOutputs?.setOutput('action', { action, row: id }); interactions?.onClick?.({ stopPropagation: () => undefined }); };\n const sortLabel = (column: ListColumn) => (sort?.field === column.field ? `${column.header}, ${sort.descending ? strings.listSortedDescending : strings.listSortedAscending}` : column.header);\n const nameOf = (row: ListRow, index: number) => textOf(row, titleField) || rowId(row, index, idField);\n const allOnPage = page.rows.length > 0 && page.rows.every((row, index) => selected.includes(rowId(row, index, idField)));\n const count = matching.length === rows.length ? formatText(strings.listCount, { count: rows.length }) : formatText(strings.listCountFiltered, { shown: matching.length, total: rows.length });\n\n const rowActions = (row: ListRow, index: number) => actions.length === 0 || actionRule === 'hidden' ? undefined : (\n <select className='foundation-row-actions' aria-label={formatText(strings.listRowActions, { name: nameOf(row, index) })} value='' disabled={actionRule === 'disabled'} title={actionRule === 'disabled' ? strings.disabledNoPermission : undefined}\n onChange={event => { if (event.target.value) run(event.target.value, rowId(row, index, idField)); }}>\n <option value=''>{strings.listActions}</option>\n {actions.map(action => <option key={action} value={action}>{action}</option>)}\n </select>\n );\n\n const checkbox = (row: ListRow, index: number) => !selectable ? undefined : (\n <input type={multiple ? 'checkbox' : 'radio'} name={`${element.id}-select`} checked={selected.includes(rowId(row, index, idField))} aria-label={formatText(strings.listSelectRow, { name: nameOf(row, index) })} onChange={() => select(rowId(row, index, idField))} />\n );\n\n const table = (tableRows: ListRow[], offset = 0, caption?: string) => (\n <div className='foundation-table-scroll'>\n <table className='foundation-table'>\n <caption className='foundation-visually-hidden'>{caption ?? readOptionalString(element, 'label') ?? strings.listTable}</caption>\n <thead>\n <tr>\n {selectable && (\n <th scope='col' className='foundation-table-select'>\n {multiple && <input type='checkbox' checked={allOnPage} aria-label={strings.listSelectAll}\n onChange={() => setSelectedText((allOnPage ? selected.filter(id => !page.rows.some((row, index) => rowId(row, index, idField) === id)) : [...new Set([...selected, ...page.rows.map((row, index) => rowId(row, index, idField))])]).join(',') || undefined)} />}\n </th>\n )}\n {columns.map(column => (\n <th key={column.field} scope='col' aria-sort={sort?.field === column.field ? (sort.descending ? 'descending' : 'ascending') : undefined}>\n {column.sortable ? (\n <button type='button' className='foundation-sort' aria-label={formatText(strings.listSortBy, { column: sortLabel(column) })} onClick={() => { setSortText(formatSort(nextSort(sort, column.field))); setPageText('1'); }}>\n <span>{column.header}</span>\n {sort?.field === column.field && <FoundationIcon name={sort.descending ? 'arrow-down' : 'arrow-up'} />}\n </button>\n ) : column.header}\n </th>\n ))}\n {actions.length > 0 && actionRule !== 'hidden' && <th scope='col'><span className='foundation-visually-hidden'>{strings.listActions}</span></th>}\n </tr>\n </thead>\n <tbody>\n {tableRows.map((row, position) => {\n const index = offset + position;\n const id = rowId(row, index, idField);\n return (\n <tr key={id} aria-selected={selectable ? selected.includes(id) : undefined} data-selected={selected.includes(id)}>\n {selectable && <td className='foundation-table-select'>{checkbox(row, index)}</td>}\n {columns.map((column, columnIndex) => columnIndex === 0\n ? <th key={column.field} scope='row'><Cell column={column} row={row} locale={locale} /></th>\n : <td key={column.field} data-kind={column.kind}><Cell column={column} row={row} locale={locale} /></td>)}\n {actions.length > 0 && actionRule !== 'hidden' && <td>{rowActions(row, index)}</td>}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n\n const cards = (cardRows: ListRow[], offset = 0) => (\n <ul className='foundation-cards' aria-label={readOptionalString(element, 'label') ?? strings.listCards}>\n {cardRows.map((row, position) => {\n const index = offset + position;\n const id = rowId(row, index, idField);\n return (\n <li key={id} className='foundation-card-row' data-selected={selected.includes(id)}>\n <div className='foundation-card-head'>{checkbox(row, index)}<strong>{nameOf(row, index)}</strong></div>\n <dl>\n {columns.filter(column => column.field !== titleField).map(column => (\n <div key={column.field}><dt className='foundation-count'>{column.header}</dt><dd><Cell column={column} row={row} locale={locale} /></dd></div>\n ))}\n </dl>\n {rowActions(row, index)}\n </li>\n );\n })}\n </ul>\n );\n\n const groups = variant === ListVariant.Grouped && groupBy ? groupRows(sorted, groupBy, totalField) : [];\n const isOpen = (key: string) => (openGroups === undefined ? true : openGroups.has(key));\n const toggleGroup = (key: string) => setOpenGroups(current => { const base = current ?? new Set(groups.map(group => group.key)); const next = new Set(base); if (next.has(key)) next.delete(key); else next.add(key); return next; });\n const totalColumn = columns.find(column => column.field === totalField);\n\n return (\n <FoundationFrame element={element} interactions={interactions} name='data-list' state={state} skeleton={[100, 100, 100, 100]}>\n {(state === ComponentState.Ready || state === ComponentState.Partial) && (\n <>\n <p className='foundation-count' role='status'>{count}</p>\n {matching.length === 0 ? (\n <div className='foundation-empty' role='status'>\n <strong className='foundation-empty-headline'>{strings.listNoMatches}</strong>\n <button type='button' className='foundation-link' onClick={() => { setSearchText(undefined); setPageText('1'); interactions?.onChange?.(); }}>{strings.listClearSearch}</button>\n </div>\n ) : variant === ListVariant.Grouped && groupBy ? groups.map(group => (\n <section key={group.key} className='foundation-list-group'>\n <h3>\n <button type='button' aria-expanded={isOpen(group.key)} className='foundation-sort' onClick={() => toggleGroup(group.key)}\n aria-label={formatText(isOpen(group.key) ? strings.listGroupCollapse : strings.listGroupExpand, { group: group.key })}>\n <FoundationIcon name={isOpen(group.key) ? 'chevron-down' : 'chevron-right'} />{group.key}\n </button>\n <span className='foundation-count'>{group.subtotal === undefined ? group.rows.length : formatText(strings.listGroupSubtotal, { count: group.rows.length, total: formatNumber(group.subtotal, locale, totalColumn?.kind === CellKind.Currency ? NumberFormat.Currency : NumberFormat.Number, totalColumn?.currency ?? 'USD') })}</span>\n </h3>\n {isOpen(group.key) && table(group.rows, 0, group.key)}\n </section>\n )) : (\n <>\n {variant === ListVariant.Cards ? cards(page.rows, (page.page - 1) * Math.max(1, pageSize)) : table(page.rows, (page.page - 1) * Math.max(1, pageSize))}\n {page.pages > 1 && (\n <nav className='foundation-pager' aria-label={formatText(strings.listPage, { page: page.page, pages: page.pages })}>\n <button type='button' className='foundation-button' data-emphasis='secondary' disabled={page.page <= 1} onClick={() => setPageText(String(page.page - 1))}>{strings.listPrevious}</button>\n <span aria-current='page'>{formatText(strings.listPage, { page: page.page, pages: page.pages })}</span>\n <button type='button' className='foundation-button' data-emphasis='secondary' disabled={page.page >= page.pages} onClick={() => setPageText(String(page.page + 1))}>{strings.listNext}</button>\n </nav>\n )}\n </>\n )}\n </>\n )}\n </FoundationFrame>\n );\n}\n\n"],"names":["Cell","column","row","locale","raw","field","text","textOf","kind","CellKind","Number","_jsx","_Fragment","formatNumber","Currency","NumberFormat","currency","Date","formatDate","Status","tone","tones","icon","success","warning","danger","info","neutral","_jsxs","span","className","data-tone","FoundationIcon","name","DataList","element","interactions","bindingOutputs","columns","useMemo","readListColumns","properties","rows","Array","isArray","filter","idField","readOptionalString","titleField","urlKey","keyed","undefined","searchText","setSearchText","useUrlState","sortText","setSortText","pageText","setPageText","selectedText","setSelectedText","openGroups","setOpenGroups","useState","strings","readFoundationStrings","readLocale","compact","useCompactWidth","requestedVariant","readListVariant","variant","ListVariant","Table","collapse","Cards","pageSize","multiple","selectionMode","selectable","actions","rowActions","action","actionRule","readPermissionRule","groupBy","totalField","sort","parseSort","matching","filterRows","searchRows","sorted","sortRows","descending","page","paginate","Grouped","selected","parseSelection","state","readComponentState","length","useEffect","String","useValueOutput","select","id","toggleSelection","join","onSelect","run","setOutput","onClick","stopPropagation","sortLabel","header","listSortedDescending","listSortedAscending","nameOf","index","rowId","allOnPage","every","includes","count","formatText","listCount","listCountFiltered","shown","total","aria-label","listRowActions","value","disabled","title","disabledNoPermission","onChange","event","target","option","listActions","map","checkbox","input","type","checked","listSelectRow","table","tableRows","offset","caption","div","listTable","thead","tr","th","scope","listSelectAll","some","Set","aria-sort","sortable","button","listSortBy","formatSort","nextSort","tbody","position","aria-selected","data-selected","td","columnIndex","data-kind","cards","cardRows","ul","listCards","li","strong","dl","dt","dd","groups","groupRows","isOpen","key","has","toggleGroup","current","base","group","next","delete","add","totalColumn","find","FoundationFrame","skeleton","ComponentState","Ready","Partial","p","role","listNoMatches","listClearSearch","section","h3","aria-expanded","listGroupCollapse","listGroupExpand","subtotal","listGroupSubtotal","Math","max","pages","nav","listPage","data-emphasis","listPrevious","aria-current","listNext"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { RegisteredComponentProps } from '@cratis/scene.react';
2
+ export declare function FormScreenBody({ element, interactions, bindingOutputs }: RegisteredComponentProps): import("react").JSX.Element;
3
+ //# sourceMappingURL=FormScreenBody.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormScreenBody.d.ts","sourceRoot":"","sources":["../../../foundation/FormScreenBody.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,wBAAwB,EAAkB,MAAM,qBAAqB,CAAC;AAqG/E,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,EAAE,wBAAwB,+BA0FjG"}