@zeyos/zx 4.3.4 → 5.0.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 (231) hide show
  1. package/CHANGELOG.md +438 -0
  2. package/README.md +49 -10
  3. package/dist/types/components/activity-item/activity-item.d.ts +351 -0
  4. package/dist/types/components/activity-list/activity-list.d.ts +217 -0
  5. package/dist/types/components/app-sidebar/app-sidebar.d.ts +33 -3
  6. package/dist/types/components/avatar/avatar.d.ts +46 -7
  7. package/dist/types/components/badge/badge.d.ts +21 -1
  8. package/dist/types/components/button/button.d.ts +23 -0
  9. package/dist/types/components/calendar/calendar.d.ts +19 -0
  10. package/dist/types/components/card/card.d.ts +7 -0
  11. package/dist/types/components/card-view/card-view.d.ts +11 -3
  12. package/dist/types/components/card-view/record-card.d.ts +7 -1
  13. package/dist/types/components/chart/chart.d.ts +10 -0
  14. package/dist/types/components/checklist/checklist.d.ts +9 -0
  15. package/dist/types/components/code-editor/code-editor.d.ts +149 -0
  16. package/dist/types/components/code-editor/field-adapter.d.ts +5 -0
  17. package/dist/types/components/context-menu/context-menu.d.ts +18 -2
  18. package/dist/types/components/date-picker/date-picker.d.ts +8 -0
  19. package/dist/types/components/date-picker/time-picker.d.ts +7 -0
  20. package/dist/types/components/datebox/date-range-box.d.ts +5 -1
  21. package/dist/types/components/datebox/datebox.d.ts +7 -2
  22. package/dist/types/components/dialog/dialog.d.ts +75 -6
  23. package/dist/types/components/dropdown/dropdown.d.ts +2 -2
  24. package/dist/types/components/entity-ref/entity-ref.d.ts +331 -0
  25. package/dist/types/components/field/field.d.ts +24 -2
  26. package/dist/types/components/fieldset/fieldset.d.ts +19 -1
  27. package/dist/types/components/file-item/file-item.d.ts +262 -0
  28. package/dist/types/components/file-list/file-list.d.ts +171 -0
  29. package/dist/types/components/filter/filter.d.ts +91 -36
  30. package/dist/types/components/filter-panel/filter-panel.d.ts +449 -0
  31. package/dist/types/components/form/form.d.ts +12 -1
  32. package/dist/types/components/kanban-view/kanban-card.d.ts +146 -0
  33. package/dist/types/components/kanban-view/kanban-view.d.ts +170 -4
  34. package/dist/types/components/launcher/launcher.d.ts +278 -26
  35. package/dist/types/components/list-toolbar/list-toolbar.d.ts +599 -0
  36. package/dist/types/components/menu-button/menu-button.d.ts +37 -42
  37. package/dist/types/components/message/message.d.ts +126 -17
  38. package/dist/types/components/modal/modal.d.ts +61 -2
  39. package/dist/types/components/navigation-bar/navigation-bar.d.ts +105 -21
  40. package/dist/types/components/panel/panel.d.ts +7 -0
  41. package/dist/types/components/search/search.d.ts +7 -0
  42. package/dist/types/components/select/color.d.ts +12 -0
  43. package/dist/types/components/select/glyphs.d.ts +124 -0
  44. package/dist/types/components/select/select.d.ts +15 -3
  45. package/dist/types/components/sort-control/sort-control.d.ts +105 -0
  46. package/dist/types/components/stat-tile/stat-tile.d.ts +288 -0
  47. package/dist/types/components/tabbox/tabbox.d.ts +16 -0
  48. package/dist/types/components/table/table.d.ts +190 -1
  49. package/dist/types/components/table-view/table-view.d.ts +11 -5
  50. package/dist/types/components/tag-picker/tag-picker.d.ts +21 -4
  51. package/dist/types/components/timebox/timebox.d.ts +7 -0
  52. package/dist/types/components/tree/tree.d.ts +13 -0
  53. package/dist/types/components/value-list/value-list.d.ts +8 -0
  54. package/dist/types/components/view/record-view.d.ts +96 -5
  55. package/dist/types/core/breakpoint.d.ts +1 -1
  56. package/dist/types/core/icons.d.ts +37 -22
  57. package/dist/types/core/motion.d.ts +59 -0
  58. package/dist/types/core/overlay-host.d.ts +15 -1
  59. package/dist/types/index.d.ts +16 -3
  60. package/dist/types/internal/app-rail.d.ts +10 -0
  61. package/dist/types/internal/menu-items.d.ts +134 -0
  62. package/dist/types/zeyos/connect.d.ts +6 -0
  63. package/dist/types/zeyos/form.d.ts +50 -9
  64. package/dist/types/zeyos/index.d.ts +1 -1
  65. package/dist/types/zeyos/query.d.ts +79 -0
  66. package/dist/types/zeyos/schema.d.ts +24 -1
  67. package/dist/types/zeyos/table.d.ts +100 -14
  68. package/dist/types/zeyos/view.d.ts +10 -0
  69. package/dist/zx-zeyos.esm.js +2206 -489
  70. package/dist/zx-zeyos.esm.min.js +56 -1
  71. package/dist/zx.css +3322 -724
  72. package/dist/zx.esm.js +12244 -5809
  73. package/dist/zx.esm.min.js +58 -3
  74. package/dist/zx.global.js +12246 -5811
  75. package/dist/zx.global.min.js +58 -3
  76. package/dist/zx.min.css +1 -1
  77. package/docs/api.json +1683 -146
  78. package/docs/llms.md +777 -110
  79. package/docs/llms.txt +14 -8
  80. package/package.json +1 -1
  81. package/src/components/account-menu/account-menu.css +35 -10
  82. package/src/components/activity-item/activity-item.css +137 -0
  83. package/src/components/activity-item/activity-item.js +602 -0
  84. package/src/components/activity-list/activity-list.css +99 -0
  85. package/src/components/activity-list/activity-list.js +409 -0
  86. package/src/components/app-icon/app-icon.css +1 -1
  87. package/src/components/app-rail/app-rail.css +191 -22
  88. package/src/components/app-sidebar/app-sidebar.css +349 -24
  89. package/src/components/app-sidebar/app-sidebar.js +86 -11
  90. package/src/components/aurora/aurora.css +5 -3
  91. package/src/components/avatar/avatar.css +32 -7
  92. package/src/components/avatar/avatar.js +72 -8
  93. package/src/components/badge/badge.css +54 -2
  94. package/src/components/badge/badge.js +29 -2
  95. package/src/components/button/button.css +74 -8
  96. package/src/components/button/button.js +44 -1
  97. package/src/components/calendar/calendar.css +46 -46
  98. package/src/components/calendar/calendar.js +33 -3
  99. package/src/components/card/card.css +2 -2
  100. package/src/components/card/card.js +12 -1
  101. package/src/components/card-view/card-view.css +10 -7
  102. package/src/components/card-view/card-view.js +25 -9
  103. package/src/components/card-view/record-card.js +7 -3
  104. package/src/components/chart/chart.css +4 -1
  105. package/src/components/chart/chart.js +12 -0
  106. package/src/components/check-button/check-button.css +10 -2
  107. package/src/components/checklist/checklist.css +9 -2
  108. package/src/components/checklist/checklist.js +11 -5
  109. package/src/components/checklist/field-adapter.js +3 -1
  110. package/src/components/code-editor/code-editor.css +68 -0
  111. package/src/components/code-editor/code-editor.js +306 -0
  112. package/src/components/code-editor/field-adapter.js +34 -0
  113. package/src/components/context-menu/context-menu.css +87 -5
  114. package/src/components/context-menu/context-menu.js +22 -30
  115. package/src/components/copy/copy-button.css +6 -0
  116. package/src/components/copy/copy-input.css +8 -3
  117. package/src/components/data-filter/data-filter.css +5 -4
  118. package/src/components/date-picker/date-picker.css +6 -6
  119. package/src/components/date-picker/date-picker.js +22 -8
  120. package/src/components/date-picker/date-range-picker.css +3 -3
  121. package/src/components/date-picker/month-picker.js +3 -3
  122. package/src/components/date-picker/time-picker.css +1 -1
  123. package/src/components/date-picker/time-picker.js +20 -8
  124. package/src/components/datebox/date-range-box.css +79 -2
  125. package/src/components/datebox/date-range-box.js +13 -2
  126. package/src/components/datebox/datebox.css +79 -2
  127. package/src/components/datebox/datebox.js +13 -2
  128. package/src/components/dialog/dialog.css +26 -0
  129. package/src/components/dialog/dialog.js +174 -70
  130. package/src/components/dropdown/dropdown.css +1 -1
  131. package/src/components/dropdown/dropdown.js +7 -5
  132. package/src/components/empty-state/empty-state.css +2 -2
  133. package/src/components/entity-ref/entity-ref.css +182 -0
  134. package/src/components/entity-ref/entity-ref.js +496 -0
  135. package/src/components/field/field.css +28 -9
  136. package/src/components/field/field.js +68 -26
  137. package/src/components/field-upload/field-upload.css +1 -1
  138. package/src/components/fieldset/fieldset.css +5 -3
  139. package/src/components/fieldset/fieldset.js +28 -5
  140. package/src/components/file-item/file-item.css +88 -0
  141. package/src/components/file-item/file-item.js +505 -0
  142. package/src/components/file-list/file-list.css +51 -0
  143. package/src/components/file-list/file-list.js +320 -0
  144. package/src/components/filter/filter.css +27 -1
  145. package/src/components/filter/filter.js +205 -47
  146. package/src/components/filter-panel/filter-panel.css +104 -0
  147. package/src/components/filter-panel/filter-panel.js +964 -0
  148. package/src/components/finder/finder.css +15 -13
  149. package/src/components/form/form.css +5 -4
  150. package/src/components/form/form.js +11 -2
  151. package/src/components/grid/grid.css +1 -1
  152. package/src/components/groupbox/groupbox.css +1 -1
  153. package/src/components/kanban-view/kanban-card.js +247 -0
  154. package/src/components/kanban-view/kanban-view.css +226 -8
  155. package/src/components/kanban-view/kanban-view.js +255 -12
  156. package/src/components/launcher/launcher.css +107 -25
  157. package/src/components/launcher/launcher.js +557 -63
  158. package/src/components/list-toolbar/list-toolbar.css +194 -0
  159. package/src/components/list-toolbar/list-toolbar.js +851 -0
  160. package/src/components/master-panel/master-panel.css +2 -0
  161. package/src/components/menu-button/menu-button.css +87 -5
  162. package/src/components/menu-button/menu-button.js +86 -46
  163. package/src/components/message/message.css +38 -5
  164. package/src/components/message/message.js +230 -17
  165. package/src/components/modal/modal.css +15 -0
  166. package/src/components/modal/modal.js +159 -3
  167. package/src/components/navigation-bar/navigation-bar.css +95 -11
  168. package/src/components/navigation-bar/navigation-bar.js +171 -4
  169. package/src/components/number-field/field-adapter.js +1 -0
  170. package/src/components/number-field/number-field.css +70 -0
  171. package/src/components/number-field/number-field.js +2 -0
  172. package/src/components/pagination/pagination.css +8 -6
  173. package/src/components/panel/panel.css +1 -1
  174. package/src/components/panel/panel.js +13 -2
  175. package/src/components/rating/rating.css +7 -0
  176. package/src/components/search/search.js +17 -5
  177. package/src/components/select/color.js +22 -0
  178. package/src/components/select/field-adapter.js +6 -1
  179. package/src/components/select/glyphs.js +165 -0
  180. package/src/components/select/select.css +138 -45
  181. package/src/components/select/select.js +86 -47
  182. package/src/components/sheet/sheet.css +11 -8
  183. package/src/components/slider/slider.css +16 -2
  184. package/src/components/slider/slider.js +1 -1
  185. package/src/components/sort-control/sort-control.css +20 -0
  186. package/src/components/sort-control/sort-control.js +140 -0
  187. package/src/components/stat-tile/stat-tile.css +208 -0
  188. package/src/components/stat-tile/stat-tile.js +601 -0
  189. package/src/components/tabbox/tabbox.css +32 -27
  190. package/src/components/tabbox/tabbox.js +17 -2
  191. package/src/components/table/table.css +155 -31
  192. package/src/components/table/table.js +386 -33
  193. package/src/components/table-view/table-view.css +8 -2
  194. package/src/components/table-view/table-view.js +21 -6
  195. package/src/components/tag-picker/tag-picker.css +86 -6
  196. package/src/components/tag-picker/tag-picker.js +25 -8
  197. package/src/components/timebox/timebox.css +22 -2
  198. package/src/components/timebox/timebox.js +18 -5
  199. package/src/components/toggle/toggle.css +12 -1
  200. package/src/components/toolbar/toolbar.js +2 -2
  201. package/src/components/tooltip/tooltip.css +4 -0
  202. package/src/components/tooltip/tooltip.js +10 -3
  203. package/src/components/tree/tree.css +25 -16
  204. package/src/components/tree/tree.js +31 -0
  205. package/src/components/value-list/value-list.css +3 -3
  206. package/src/components/value-list/value-list.js +22 -6
  207. package/src/components/view/record-view.css +5 -0
  208. package/src/components/view/record-view.js +100 -7
  209. package/src/core/breakpoint.js +1 -1
  210. package/src/core/icons.js +259 -57
  211. package/src/core/motion.js +147 -0
  212. package/src/core/overlay-host.js +21 -2
  213. package/src/index.js +30 -3
  214. package/src/internal/app-rail.js +18 -1
  215. package/src/internal/menu-items.js +142 -0
  216. package/src/zeyos/connect.js +6 -2
  217. package/src/zeyos/form.js +67 -27
  218. package/src/zeyos/index.js +1 -1
  219. package/src/zeyos/query.js +153 -0
  220. package/src/zeyos/schema.js +144 -27
  221. package/src/zeyos/table.js +68 -5
  222. package/src/zeyos/view.js +6 -0
  223. package/styles/base.css +56 -0
  224. package/styles/icons.css +11 -1
  225. package/styles/print.css +192 -0
  226. package/styles/tokens/dark.css +113 -37
  227. package/styles/tokens/global.css +121 -27
  228. package/styles/tokens/semantic.css +100 -31
  229. package/styles/tokens/themes.css +7 -6
  230. package/styles/zx.css +11 -1
  231. package/styles/tokens/density.css +0 -9
package/docs/api.json CHANGED
@@ -106,6 +106,254 @@
106
106
  }
107
107
  ]
108
108
  },
109
+ "ActivityItem": {
110
+ "options": [
111
+ {
112
+ "name": "id",
113
+ "type": "unknown",
114
+ "default": "null",
115
+ "description": "Host-owned activity identifier."
116
+ },
117
+ {
118
+ "name": "actor",
119
+ "type": "ActivityContent",
120
+ "default": "''",
121
+ "description": "Actor identity text or presentation slot."
122
+ },
123
+ {
124
+ "name": "avatar",
125
+ "type": "ActivityAvatar",
126
+ "default": "null",
127
+ "description": "Avatar descriptor or host-owned avatar element."
128
+ },
129
+ {
130
+ "name": "title",
131
+ "type": "ActivityContent",
132
+ "default": "''",
133
+ "description": "Activity summary."
134
+ },
135
+ {
136
+ "name": "content",
137
+ "type": "ActivityContent",
138
+ "default": "null",
139
+ "description": "Optional body slot."
140
+ },
141
+ {
142
+ "name": "timestamp",
143
+ "type": "Date|string|number|null",
144
+ "default": "null",
145
+ "description": "Date, parseable date string, or epoch milliseconds."
146
+ },
147
+ {
148
+ "name": "timeLabel",
149
+ "type": "string|null",
150
+ "default": "null",
151
+ "description": "Explicit human-readable timestamp."
152
+ },
153
+ {
154
+ "name": "metadata",
155
+ "type": "ActivityContent[]",
156
+ "default": "[]",
157
+ "description": "Compact metadata slots."
158
+ },
159
+ {
160
+ "name": "attachments",
161
+ "type": "ActivityContent[]",
162
+ "default": "[]",
163
+ "description": "Attachment presentation slots, commonly FileItem elements."
164
+ },
165
+ {
166
+ "name": "actions",
167
+ "type": "ActivityActionSlot[]",
168
+ "default": "[]",
169
+ "description": "Native action descriptors or host-owned controls."
170
+ },
171
+ {
172
+ "name": "kind",
173
+ "type": "string",
174
+ "default": "'default'",
175
+ "description": "Product-neutral activity kind exposed as `data-kind`."
176
+ },
177
+ {
178
+ "name": "state",
179
+ "type": "ActivityState",
180
+ "default": "'default'",
181
+ "description": "Delivery state exposed as `data-state`."
182
+ },
183
+ {
184
+ "name": "stateLabel",
185
+ "type": "string|null",
186
+ "default": "null",
187
+ "description": "Word shown in the state badge instead of the built-in one."
188
+ },
189
+ {
190
+ "name": "headingLevel",
191
+ "type": "1|2|3|4|5|6",
192
+ "default": "3",
193
+ "description": "Semantic heading level for the activity summary."
194
+ }
195
+ ],
196
+ "events": [
197
+ {
198
+ "name": "action",
199
+ "payload": "{id:string,action:NormalizedActivityAction,event:MouseEvent}",
200
+ "description": ""
201
+ }
202
+ ],
203
+ "methods": [
204
+ {
205
+ "name": "setActivity",
206
+ "signature": "setActivity(values)",
207
+ "returns": "this",
208
+ "description": "Replaces any subset of the activity presentation."
209
+ },
210
+ {
211
+ "name": "getActivity",
212
+ "signature": "getActivity()",
213
+ "returns": "ActivityItemOptions",
214
+ "description": "Returns a shallow, host-safe copy of the current descriptor."
215
+ },
216
+ {
217
+ "name": "destroy",
218
+ "signature": "destroy()",
219
+ "returns": "void",
220
+ "description": "Restores an enhanced target exactly, or removes an owned item."
221
+ }
222
+ ]
223
+ },
224
+ "ActivityList": {
225
+ "options": [
226
+ {
227
+ "name": "items",
228
+ "type": "ActivityItemOptions[]",
229
+ "default": "[]",
230
+ "description": "Initial activities in host-supplied chronological order."
231
+ },
232
+ {
233
+ "name": "groupBy",
234
+ "type": "ActivityGroupReader",
235
+ "default": "null",
236
+ "description": "Property or resolver used for stable grouping."
237
+ },
238
+ {
239
+ "name": "groupLabel",
240
+ "type": "ActivityGroupLabel|null",
241
+ "default": "null",
242
+ "description": "Group-heading renderer."
243
+ },
244
+ {
245
+ "name": "label",
246
+ "type": "string",
247
+ "default": "'Activity'",
248
+ "description": "Accessible collection name."
249
+ },
250
+ {
251
+ "name": "variant",
252
+ "type": "ActivityListVariant",
253
+ "default": "'default'",
254
+ "description": "Entry layout, reflected as `data-variant` on the root. `'compact'` also makes an avatar descriptor without a `size` small."
255
+ },
256
+ {
257
+ "name": "loading",
258
+ "type": "boolean",
259
+ "default": "false",
260
+ "description": "Whether initial or incremental activity is loading."
261
+ },
262
+ {
263
+ "name": "loadingCount",
264
+ "type": "number",
265
+ "default": "3",
266
+ "description": "Placeholder rows shown for an empty loading list."
267
+ },
268
+ {
269
+ "name": "loadingText",
270
+ "type": "string",
271
+ "default": "'Loading activity'",
272
+ "description": "Loading status text."
273
+ },
274
+ {
275
+ "name": "emptyText",
276
+ "type": "ActivityListContent",
277
+ "default": "'No activity yet'",
278
+ "description": "Empty-state content."
279
+ },
280
+ {
281
+ "name": "groupHeadingLevel",
282
+ "type": "1|2|3|4|5|6",
283
+ "default": "2",
284
+ "description": "Semantic group-heading level."
285
+ },
286
+ {
287
+ "name": "itemHeadingLevel",
288
+ "type": "1|2|3|4|5|6",
289
+ "default": "3",
290
+ "description": "Default item-heading level."
291
+ }
292
+ ],
293
+ "events": [
294
+ {
295
+ "name": "datachange",
296
+ "payload": "{items:ActivityItemOptions[]}",
297
+ "description": ""
298
+ }
299
+ ],
300
+ "methods": [
301
+ {
302
+ "name": "setItems",
303
+ "signature": "setItems(items, [options])",
304
+ "returns": "this",
305
+ "description": "Replaces all activities."
306
+ },
307
+ {
308
+ "name": "getItems",
309
+ "signature": "getItems()",
310
+ "returns": "ActivityItemOptions[]",
311
+ "description": "Returns shallow descriptor copies in current display order."
312
+ },
313
+ {
314
+ "name": "getItem",
315
+ "signature": "getItem(id)",
316
+ "returns": "ActivityItemOptions|null",
317
+ "description": "Returns a shallow descriptor copy by stable host ID."
318
+ },
319
+ {
320
+ "name": "appendItems",
321
+ "signature": "appendItems(items, [options])",
322
+ "returns": "this",
323
+ "description": "Adds activities after the current source order for older-page or forward-stream updates."
324
+ },
325
+ {
326
+ "name": "prependItems",
327
+ "signature": "prependItems(items, [options])",
328
+ "returns": "this",
329
+ "description": "Adds activities before the current source order for newest-first live updates."
330
+ },
331
+ {
332
+ "name": "updateItem",
333
+ "signature": "updateItem(id, values, [options])",
334
+ "returns": "this",
335
+ "description": "Patches the first activity whose ID is `Object.is`-equal to the requested ID."
336
+ },
337
+ {
338
+ "name": "removeItem",
339
+ "signature": "removeItem(id, [options])",
340
+ "returns": "this",
341
+ "description": "Removes the first activity whose ID is `Object.is`-equal to the requested ID."
342
+ },
343
+ {
344
+ "name": "setLoading",
345
+ "signature": "setLoading(loading)",
346
+ "returns": "this",
347
+ "description": "Sets initial/incremental loading presentation."
348
+ },
349
+ {
350
+ "name": "destroy",
351
+ "signature": "destroy()",
352
+ "returns": "void",
353
+ "description": "Restores an enhanced target exactly, or removes an owned list."
354
+ }
355
+ ]
356
+ },
109
357
  "Alert": {
110
358
  "options": [
111
359
  {
@@ -335,7 +583,7 @@
335
583
  "name": "getItems",
336
584
  "signature": "getItems()",
337
585
  "returns": "AppNavItem[]",
338
- "description": "Returns a shallow copy of normalized items."
586
+ "description": "Returns a copy of the normalized items. A leaf has no `children` property, as it was written, rather than the empty list normalization gives it."
339
587
  },
340
588
  {
341
589
  "name": "setActive",
@@ -514,7 +762,7 @@
514
762
  "name": "name",
515
763
  "type": "string",
516
764
  "default": "''",
517
- "description": "Name used to derive fallback initials."
765
+ "description": "Name used to derive the fallback initials and tone."
518
766
  },
519
767
  {
520
768
  "name": "initials",
@@ -532,7 +780,7 @@
532
780
  "name": "size",
533
781
  "type": "string|number",
534
782
  "default": "'md'",
535
- "description": "Preset (`sm`, `md`, `lg`) or pixel size."
783
+ "description": "Preset — `sm` 24px, `md` 32px, `lg` 40px at the default spacing unit — or a pixel size. Below 24px the fallback shows a single initial."
536
784
  },
537
785
  {
538
786
  "name": "shape",
@@ -540,6 +788,12 @@
540
788
  "default": "'circle'",
541
789
  "description": "Avatar shape."
542
790
  },
791
+ {
792
+ "name": "tone",
793
+ "type": "AvatarTone|null",
794
+ "default": "null",
795
+ "description": "Fallback colour from the tone palette. `null` derives a stable tone from the name (or the initials when there is no name), so the same person gets the same colour on every screen; see {@link avatarTone}."
796
+ },
543
797
  {
544
798
  "name": "status",
545
799
  "type": "'online'|'away'|'busy'|'offline'|null",
@@ -601,6 +855,12 @@
601
855
  "default": "'neutral'",
602
856
  "description": "Semantic intent."
603
857
  },
858
+ {
859
+ "name": "tone",
860
+ "type": "BadgeTone|null",
861
+ "default": "null",
862
+ "description": "Categorical colour — a project, a label, a module — from the tone palette rather than the status set, so a tag never reads as a warning. When set it decides the colour and `kind` is ignored for it; `variant` still applies. Unknown names are ignored."
863
+ },
604
864
  {
605
865
  "name": "variant",
606
866
  "type": "'soft'|'solid'|'outline'",
@@ -812,11 +1072,23 @@
812
1072
  "default": "false",
813
1073
  "description": "Whether the button is disabled."
814
1074
  },
1075
+ {
1076
+ "name": "busy",
1077
+ "type": "boolean",
1078
+ "default": "false",
1079
+ "description": "Whether the button is working on its action — see `setButtonBusy()`."
1080
+ },
815
1081
  {
816
1082
  "name": "title",
817
1083
  "type": "string",
818
1084
  "default": null,
819
1085
  "description": "Native title text."
1086
+ },
1087
+ {
1088
+ "name": "shortcut",
1089
+ "type": "ButtonShortcut",
1090
+ "default": null,
1091
+ "description": "Keyboard hint; does not register a keyboard handler."
820
1092
  }
821
1093
  ],
822
1094
  "events": [
@@ -1387,6 +1659,12 @@
1387
1659
  "default": "false",
1388
1660
  "description": "Record selection behavior."
1389
1661
  },
1662
+ {
1663
+ "name": "selectionTrigger",
1664
+ "type": "'checkbox'|'card'",
1665
+ "default": "'checkbox'",
1666
+ "description": "Select through a checkbox or the non-interactive card surface."
1667
+ },
1390
1668
  {
1391
1669
  "name": "selection",
1392
1670
  "type": "unknown[]",
@@ -1407,9 +1685,9 @@
1407
1685
  },
1408
1686
  {
1409
1687
  "name": "fieldControls",
1410
- "type": "boolean",
1688
+ "type": "boolean|import('../view/record-view.js').ViewFieldControlsConfig",
1411
1689
  "default": "true",
1412
- "description": "Whether to expose shared field controls."
1690
+ "description": "Whether to expose shared field controls. `true` renders the chooser in the card toolbar and `false` omits it; an object customises its `label` and mounts it into `target`."
1413
1691
  },
1414
1692
  {
1415
1693
  "name": "emptyText",
@@ -1825,6 +2103,12 @@
1825
2103
  "default": "false",
1826
2104
  "description": "Fallback initial checked state."
1827
2105
  },
2106
+ {
2107
+ "name": "hideLabel",
2108
+ "type": "boolean",
2109
+ "default": "false",
2110
+ "description": "Whether the heading is left out. The group keeps the heading text as its accessible name (`aria-label`); a Field labelling the checklist names it instead, which is why the `checklist` field type sets this."
2111
+ },
1828
2112
  {
1829
2113
  "name": "load",
1830
2114
  "type": "(() => Promise<ChecklistItem[]>|ChecklistItem[])|null",
@@ -1901,6 +2185,102 @@
1901
2185
  }
1902
2186
  ]
1903
2187
  },
2188
+ "CodeEditor": {
2189
+ "options": [
2190
+ {
2191
+ "name": "value",
2192
+ "type": "unknown",
2193
+ "default": "''",
2194
+ "description": "Initial text."
2195
+ },
2196
+ {
2197
+ "name": "name",
2198
+ "type": "string",
2199
+ "default": "''",
2200
+ "description": "Form field name."
2201
+ },
2202
+ {
2203
+ "name": "language",
2204
+ "type": "string",
2205
+ "default": "'text'",
2206
+ "description": "Language identifier shown to the user and exposed as data."
2207
+ },
2208
+ {
2209
+ "name": "label",
2210
+ "type": "string",
2211
+ "default": "'Code editor'",
2212
+ "description": "Accessible editor label."
2213
+ },
2214
+ {
2215
+ "name": "placeholder",
2216
+ "type": "string",
2217
+ "default": "''",
2218
+ "description": "Placeholder text."
2219
+ },
2220
+ {
2221
+ "name": "rows",
2222
+ "type": "number",
2223
+ "default": "12",
2224
+ "description": "Visible textarea rows."
2225
+ },
2226
+ {
2227
+ "name": "indent",
2228
+ "type": "string",
2229
+ "default": "'\\t'",
2230
+ "description": "Text inserted by Tab and removed by Shift+Tab."
2231
+ },
2232
+ {
2233
+ "name": "wrap",
2234
+ "type": "'off'|'soft'|'hard'",
2235
+ "default": "'off'",
2236
+ "description": "Textarea wrapping behavior."
2237
+ },
2238
+ {
2239
+ "name": "spellcheck",
2240
+ "type": "boolean",
2241
+ "default": "false",
2242
+ "description": "Whether browser spellcheck is enabled."
2243
+ },
2244
+ {
2245
+ "name": "readOnly",
2246
+ "type": "boolean",
2247
+ "default": "false",
2248
+ "description": "Whether content can be selected but not changed."
2249
+ },
2250
+ {
2251
+ "name": "disabled",
2252
+ "type": "boolean",
2253
+ "default": "false",
2254
+ "description": "Whether the editor is disabled."
2255
+ },
2256
+ {
2257
+ "name": "status",
2258
+ "type": "boolean",
2259
+ "default": "true",
2260
+ "description": "Whether the line/column status is visible."
2261
+ }
2262
+ ],
2263
+ "events": [
2264
+ {
2265
+ "name": "input",
2266
+ "payload": "{value:string}",
2267
+ "description": "Input listener."
2268
+ },
2269
+ {
2270
+ "name": "change",
2271
+ "payload": "{value:string}",
2272
+ "description": "Change listener."
2273
+ }
2274
+ ],
2275
+ "methods": [
2276
+ {
2277
+ "name": "setValue",
2278
+ "signature": "setValue(value, [options])",
2279
+ "returns": "this",
2280
+ "description": "Replaces the editor text."
2281
+ }
2282
+ ]
2283
+ },
1904
2284
  "Confirm": {
1905
2285
  "options": [
1906
2286
  {
@@ -1932,7 +2312,13 @@
1932
2312
  "type": "boolean",
1933
2313
  "default": "false",
1934
2314
  "description": "Whether the confirmation action is dangerous."
1935
- }
2315
+ },
2316
+ {
2317
+ "name": "confirmText",
2318
+ "type": "string|null",
2319
+ "default": "null",
2320
+ "description": "Text the reader must type before the confirm button enables — the name of what is about to be deleted, say. The dialog adds an input labelled \"Type <confirmText> to confirm\" (message `dialog.typeToConfirm`, `%1` standing for the text), focuses it, and enables the confirm button, and Enter, only while its value matches exactly, ignoring surrounding spaces."
2321
+ }
1936
2322
  ],
1937
2323
  "events": [],
1938
2324
  "methods": []
@@ -2328,7 +2714,7 @@
2328
2714
  "name": "clearable",
2329
2715
  "type": "boolean",
2330
2716
  "default": "true",
2331
- "description": "Show a clear button while a range is present."
2717
+ "description": "Show a clear button while a range is present and the box is enabled; without it the input keeps no room for one."
2332
2718
  },
2333
2719
  {
2334
2720
  "name": "min",
@@ -2637,7 +3023,7 @@
2637
3023
  "name": "clearable",
2638
3024
  "type": "boolean",
2639
3025
  "default": "true",
2640
- "description": "Show a clear button when a value is present."
3026
+ "description": "Show a clear button while a value is present and the box is enabled; without it the input keeps no room for one."
2641
3027
  },
2642
3028
  {
2643
3029
  "name": "disabled",
@@ -2755,7 +3141,7 @@
2755
3141
  "name": "scope",
2756
3142
  "type": "Element|string|null",
2757
3143
  "default": "null",
2758
- "description": "Element whose nearest Zx theme scope owns the overlay; defaults to the opener."
3144
+ "description": "Element whose nearest Zx theme scope owns the overlay; defaults to the opener. Resolved on every open, so a scope connected after construction still owns it."
2759
3145
  }
2760
3146
  ],
2761
3147
  "events": [
@@ -2828,7 +3214,7 @@
2828
3214
  "name": "confirm",
2829
3215
  "signature": "confirm([options])",
2830
3216
  "returns": "Promise<boolean>",
2831
- "description": "Opens a confirmation dialog."
3217
+ "description": "Opens a confirmation dialog. With `confirmText` it becomes a type-to-confirm dialog: the confirm button stays disabled until the reader has typed that text."
2832
3218
  },
2833
3219
  {
2834
3220
  "name": "prompt",
@@ -3093,7 +3479,7 @@
3093
3479
  "name": "scope",
3094
3480
  "type": "Element|string|null",
3095
3481
  "default": "null",
3096
- "description": "Element whose nearest Zx theme scope owns the panel; defaults to the anchor."
3482
+ "description": "Element whose nearest Zx theme scope owns the panel; defaults to the anchor. Resolved on every open, so an anchor connected after construction still gets its scope."
3097
3483
  }
3098
3484
  ],
3099
3485
  "events": [
@@ -3195,6 +3581,126 @@
3195
3581
  "events": [],
3196
3582
  "methods": []
3197
3583
  },
3584
+ "EntityRef": {
3585
+ "options": [
3586
+ {
3587
+ "name": "id",
3588
+ "type": "unknown",
3589
+ "default": "null",
3590
+ "description": "Application-owned entity identifier included in events."
3591
+ },
3592
+ {
3593
+ "name": "title",
3594
+ "type": "string",
3595
+ "default": "''",
3596
+ "description": "Primary identity text."
3597
+ },
3598
+ {
3599
+ "name": "subtitle",
3600
+ "type": "EntityRefContent",
3601
+ "default": "null",
3602
+ "description": "Secondary identity text or safe caller-supplied content."
3603
+ },
3604
+ {
3605
+ "name": "icon",
3606
+ "type": "EntityRefIcon",
3607
+ "default": "null",
3608
+ "description": "Icon name, node, component, or lazy renderer."
3609
+ },
3610
+ {
3611
+ "name": "metadata",
3612
+ "type": "EntityRefMetadata[]",
3613
+ "default": "[]",
3614
+ "description": "Labelled dense metadata."
3615
+ },
3616
+ {
3617
+ "name": "link",
3618
+ "type": "EntityRefLinkValue",
3619
+ "default": "null",
3620
+ "description": "Optional native primary link."
3621
+ },
3622
+ {
3623
+ "name": "actions",
3624
+ "type": "EntityRefActionEntry[]",
3625
+ "default": "[]",
3626
+ "description": "Secondary controls; element actions keep their own behavior."
3627
+ },
3628
+ {
3629
+ "name": "size",
3630
+ "type": "'sm'|'md'|'lg'",
3631
+ "default": "'md'",
3632
+ "description": "Size of the icon and the identity text."
3633
+ },
3634
+ {
3635
+ "name": "wrap",
3636
+ "type": "boolean",
3637
+ "default": "false",
3638
+ "description": "Whether long identity text may wrap instead of truncating."
3639
+ },
3640
+ {
3641
+ "name": "actionsLabel",
3642
+ "type": "string",
3643
+ "default": "'Entity actions'",
3644
+ "description": "Accessible name for secondary actions."
3645
+ }
3646
+ ],
3647
+ "events": [
3648
+ {
3649
+ "name": "activate",
3650
+ "payload": "{id: unknown, entity: Readonly<EntityRefState>, href: string, event: MouseEvent}",
3651
+ "description": "Preventable primary-link listener."
3652
+ },
3653
+ {
3654
+ "name": "action",
3655
+ "payload": "{id: string, action: Readonly<EntityRefAction>, entity: Readonly<EntityRefState>, event: MouseEvent}",
3656
+ "description": "Preventable delegated-action listener."
3657
+ }
3658
+ ],
3659
+ "methods": [
3660
+ {
3661
+ "name": "set",
3662
+ "signature": "set(values)",
3663
+ "returns": "this",
3664
+ "description": "Updates any subset of the identity without replacing the root."
3665
+ },
3666
+ {
3667
+ "name": "setMetadata",
3668
+ "signature": "setMetadata(metadata)",
3669
+ "returns": "this",
3670
+ "description": "Replaces the metadata collection."
3671
+ },
3672
+ {
3673
+ "name": "setActions",
3674
+ "signature": "setActions(actions)",
3675
+ "returns": "this",
3676
+ "description": "Replaces the secondary action controls."
3677
+ },
3678
+ {
3679
+ "name": "setLink",
3680
+ "signature": "setLink(link)",
3681
+ "returns": "this",
3682
+ "description": "Sets or clears the primary link."
3683
+ },
3684
+ {
3685
+ "name": "getEntity",
3686
+ "signature": "getEntity()",
3687
+ "returns": "Readonly<EntityRefState>",
3688
+ "description": "Returns a defensive presentation snapshot. Caller-supplied Nodes and Components retain their identity; arrays and descriptors are copied."
3689
+ },
3690
+ {
3691
+ "name": "focus",
3692
+ "signature": "focus()",
3693
+ "returns": "this",
3694
+ "description": "Focuses the primary link or the first enabled action."
3695
+ },
3696
+ {
3697
+ "name": "destroy",
3698
+ "signature": "destroy()",
3699
+ "returns": "void",
3700
+ "description": "Restores an enhanced target exactly, or removes an owned reference."
3701
+ }
3702
+ ]
3703
+ },
3198
3704
  "EntitySelect": {
3199
3705
  "options": [
3200
3706
  {
@@ -3225,7 +3731,7 @@
3225
3731
  "name": "colorKey",
3226
3732
  "type": "string|((item: SelectItem)=>unknown)",
3227
3733
  "default": "'color'",
3228
- "description": "Optional icon colour reader."
3734
+ "description": "Optional icon colour reader: a CSS colour or a token reference such as `var(--zx-color-tone-blue-fg)`. Without one the glyph is a neutral tile in muted ink."
3229
3735
  },
3230
3736
  {
3231
3737
  "name": "subtitleKey",
@@ -3249,7 +3755,13 @@
3249
3755
  "name": "id",
3250
3756
  "type": "string|null",
3251
3757
  "default": "null",
3252
- "description": "Control ID and logical field identifier."
3758
+ "description": "DOM id of the control. Generated when omitted; a Fieldset derives it from its `idPrefix` and the field key, so a key never becomes a DOM id by itself."
3759
+ },
3760
+ {
3761
+ "name": "name",
3762
+ "type": "string|null",
3763
+ "default": "null",
3764
+ "description": "Field name: the `name` of a native control and the key the field is filed under. A Fieldset sets it to the field key; a standalone field falls back to `id`."
3253
3765
  },
3254
3766
  {
3255
3767
  "name": "type",
@@ -3535,6 +4047,12 @@
3535
4047
  "type": "Record<string, FieldOptions|Field|Element|Component>",
3536
4048
  "default": "{}",
3537
4049
  "description": "Initial fields."
4050
+ },
4051
+ {
4052
+ "name": "idPrefix",
4053
+ "type": "string|null",
4054
+ "default": "null",
4055
+ "description": "Prefix of the DOM ids generated for the fields, as `<idPrefix>-<key>`. Null generates one per instance, so the same fieldset mounted twice never repeats an id and a field key never collides with an element id elsewhere on the page."
3538
4056
  }
3539
4057
  ],
3540
4058
  "events": [],
@@ -3543,7 +4061,7 @@
3543
4061
  "name": "addField",
3544
4062
  "signature": "addField(id, field)",
3545
4063
  "returns": "Field",
3546
- "description": "Adds a field from options, an existing field, an element, or a component."
4064
+ "description": "Adds a field from options, an existing field, an element, or a component. The key becomes the field's `name` and its `data-field-id`; the control's DOM id is `<idPrefix>-<key>`, unless the field options give an `id` of their own that differs from the key."
3547
4065
  },
3548
4066
  {
3549
4067
  "name": "getField",
@@ -3619,153 +4137,452 @@
3619
4137
  }
3620
4138
  ]
3621
4139
  },
3622
- "Filter": {
4140
+ "FileItem": {
3623
4141
  "options": [
3624
4142
  {
3625
- "name": "fields",
3626
- "type": "FilterField[]",
3627
- "default": null,
3628
- "description": "Field definitions."
4143
+ "name": "id",
4144
+ "type": "unknown",
4145
+ "default": "null",
4146
+ "description": "Application-owned file identifier included in events."
3629
4147
  },
3630
4148
  {
3631
- "name": "value",
3632
- "type": "FilterAst",
3633
- "default": null,
3634
- "description": "Initial expression."
4149
+ "name": "name",
4150
+ "type": "string",
4151
+ "default": "''",
4152
+ "description": "File name."
3635
4153
  },
3636
4154
  {
3637
- "name": "operators",
3638
- "type": "Array<{id:string,label:string,arity:'none'|'single'|'pair'|'many',types:string[]}>",
3639
- "default": null,
3640
- "description": "Additional/overridden operators."
4155
+ "name": "size",
4156
+ "type": "number|string|null",
4157
+ "default": "null",
4158
+ "description": "Byte count; invalid and negative values are omitted."
3641
4159
  },
3642
4160
  {
3643
- "name": "allowGroups",
3644
- "type": "boolean",
3645
- "default": "true",
3646
- "description": "Whether nested groups may be authored."
4161
+ "name": "mime",
4162
+ "type": "string",
4163
+ "default": "''",
4164
+ "description": "MIME type. Shown as a readable type (\"PDF\", \"Image\"), never as the raw string, and used to pick the icon."
3647
4165
  },
3648
4166
  {
3649
- "name": "maxDepth",
3650
- "type": "number",
3651
- "default": "3",
3652
- "description": "Maximum nested group depth."
4167
+ "name": "typeLabel",
4168
+ "type": "string|null",
4169
+ "default": "null",
4170
+ "description": "Type shown beside the size; null derives it from the MIME type (or the name's extension when the MIME type is unfamiliar), an empty string hides it."
3653
4171
  },
3654
4172
  {
3655
- "name": "maxConditions",
3656
- "type": "number",
3657
- "default": "50",
3658
- "description": "Maximum condition count."
4173
+ "name": "subtitle",
4174
+ "type": "EntityRefContent",
4175
+ "default": "null",
4176
+ "description": "Optional supporting text before generated metadata."
3659
4177
  },
3660
4178
  {
3661
- "name": "autoApply",
3662
- "type": "boolean",
3663
- "default": "false",
3664
- "description": "Emit apply after every valid mutation."
4179
+ "name": "icon",
4180
+ "type": "EntityRefIcon",
4181
+ "default": "'file'",
4182
+ "description": "File icon name, node, component, or lazy renderer. The generic `'file'` glyph gives way to one for the MIME type when the active icon set has it."
3665
4183
  },
3666
4184
  {
3667
- "name": "readonly",
4185
+ "name": "metadata",
4186
+ "type": "EntityRefMetadata[]",
4187
+ "default": "[]",
4188
+ "description": "Additional labelled metadata."
4189
+ },
4190
+ {
4191
+ "name": "link",
4192
+ "type": "EntityRefLinkValue",
4193
+ "default": "null",
4194
+ "description": "Optional safe native file/download link."
4195
+ },
4196
+ {
4197
+ "name": "actions",
4198
+ "type": "EntityRefActionEntry[]",
4199
+ "default": "[]",
4200
+ "description": "File actions; application policy stays external."
4201
+ },
4202
+ {
4203
+ "name": "status",
4204
+ "type": "FileStatus",
4205
+ "default": "'ready'",
4206
+ "description": "Durable or transient presentation state."
4207
+ },
4208
+ {
4209
+ "name": "statusLabel",
4210
+ "type": "string|null",
4211
+ "default": "null",
4212
+ "description": "Overrides the generated state label; an empty string hides it."
4213
+ },
4214
+ {
4215
+ "name": "progress",
4216
+ "type": "number|null",
4217
+ "default": "null",
4218
+ "description": "Completed percentage, clamped to 0–100."
4219
+ },
4220
+ {
4221
+ "name": "indeterminate",
3668
4222
  "type": "boolean",
3669
4223
  "default": "false",
3670
- "description": "Prevent mutations while keeping values readable."
4224
+ "description": "Whether active progress has no known amount."
3671
4225
  },
3672
4226
  {
3673
- "name": "disabled",
4227
+ "name": "identitySize",
4228
+ "type": "'sm'|'md'|'lg'",
4229
+ "default": "'md'",
4230
+ "description": "Size of the file's icon and name."
4231
+ },
4232
+ {
4233
+ "name": "wrap",
3674
4234
  "type": "boolean",
3675
4235
  "default": "false",
3676
- "description": "Disable all controls."
4236
+ "description": "Whether long identity text may wrap."
3677
4237
  },
3678
4238
  {
3679
- "name": "applyLabel",
4239
+ "name": "actionsLabel",
3680
4240
  "type": "string",
3681
- "default": "'Apply filters'",
3682
- "description": "Apply button label."
4241
+ "default": "'File actions'",
4242
+ "description": "Accessible name for secondary actions."
3683
4243
  },
3684
4244
  {
3685
- "name": "clearLabel",
4245
+ "name": "locale",
3686
4246
  "type": "string",
3687
- "default": "'Clear'",
3688
- "description": "Clear button label."
4247
+ "default": null,
4248
+ "description": "Locale passed to `formatFileSize`."
3689
4249
  }
3690
4250
  ],
3691
4251
  "events": [
3692
4252
  {
3693
- "name": "change",
3694
- "payload": "Record<string,unknown>",
3695
- "description": "Draft-change listener."
3696
- },
3697
- {
3698
- "name": "apply",
3699
- "payload": "Record<string,unknown>",
3700
- "description": "Valid-apply listener."
3701
- },
3702
- {
3703
- "name": "invalid",
3704
- "payload": "Record<string,unknown>",
3705
- "description": "Invalid-apply listener."
3706
- },
3707
- {
3708
- "name": "query",
3709
- "payload": "Record<string,unknown>",
3710
- "description": "Async query listener."
3711
- },
3712
- {
3713
- "name": "loaded",
3714
- "payload": "Record<string,unknown>",
3715
- "description": "Async loaded listener."
4253
+ "name": "activate",
4254
+ "payload": "{id: unknown, file: Readonly<FileItemState>, href: string, event: MouseEvent}",
4255
+ "description": "Preventable native-link listener."
3716
4256
  },
3717
4257
  {
3718
- "name": "error",
3719
- "payload": "Record<string,unknown>",
3720
- "description": "Async failure listener."
4258
+ "name": "action",
4259
+ "payload": "{id: string, fileId: unknown, action: object, file: Readonly<FileItemState>, event: MouseEvent}",
4260
+ "description": "Preventable file-action listener."
3721
4261
  }
3722
4262
  ],
3723
4263
  "methods": [
3724
4264
  {
3725
- "name": "getValue",
3726
- "signature": "getValue()",
3727
- "returns": "FilterAst",
3728
- "description": "Returns a defensive AST copy."
4265
+ "name": "set",
4266
+ "signature": "set(values)",
4267
+ "returns": "this",
4268
+ "description": "Updates any subset of the file without replacing the row root."
3729
4269
  },
3730
4270
  {
3731
- "name": "setValue",
3732
- "signature": "setValue(value, [options])",
4271
+ "name": "setStatus",
4272
+ "signature": "setStatus(status, [statusLabel])",
3733
4273
  "returns": "this",
3734
- "description": "Atomically replaces the AST."
4274
+ "description": "Updates the file lifecycle state and, optionally, its visible label."
3735
4275
  },
3736
4276
  {
3737
- "name": "addCondition",
3738
- "signature": "addCondition([parentId], [initial])",
3739
- "returns": "string|null",
3740
- "description": "Adds a condition to a group."
4277
+ "name": "setProgress",
4278
+ "signature": "setProgress(progress, [options])",
4279
+ "returns": "this",
4280
+ "description": "Updates the progress meter."
3741
4281
  },
3742
4282
  {
3743
- "name": "addGroup",
3744
- "signature": "addGroup([parentId], [logic])",
3745
- "returns": "string|null",
3746
- "description": "Adds a nested group."
4283
+ "name": "getFile",
4284
+ "signature": "getFile()",
4285
+ "returns": "Readonly<FileItemState>",
4286
+ "description": "Returns a defensive file snapshot."
3747
4287
  },
3748
4288
  {
3749
- "name": "update",
3750
- "signature": "update(id, patch)",
4289
+ "name": "focus",
4290
+ "signature": "focus()",
3751
4291
  "returns": "this",
3752
- "description": "Updates a node by stable ID."
4292
+ "description": "Focuses the native destination or first enabled action."
3753
4293
  },
3754
4294
  {
3755
- "name": "remove",
3756
- "signature": "remove(id)",
3757
- "returns": "this",
3758
- "description": "Removes a non-root node."
4295
+ "name": "destroy",
4296
+ "signature": "destroy()",
4297
+ "returns": "void",
4298
+ "description": "Restores an enhanced target exactly, or removes an owned row."
4299
+ }
4300
+ ]
4301
+ },
4302
+ "FileList": {
4303
+ "options": [
4304
+ {
4305
+ "name": "items",
4306
+ "type": "FileItemOptions[]",
4307
+ "default": "[]",
4308
+ "description": "Initial files in host-supplied order."
3759
4309
  },
3760
4310
  {
3761
- "name": "move",
3762
- "signature": "move(id, parentId, index)",
3763
- "returns": "this",
3764
- "description": "Moves a node into a group while preserving its identity."
4311
+ "name": "label",
4312
+ "type": "string",
4313
+ "default": "'Files'",
4314
+ "description": "Accessible collection name."
3765
4315
  },
3766
4316
  {
3767
- "name": "validate",
3768
- "signature": "validate()",
4317
+ "name": "loading",
4318
+ "type": "boolean",
4319
+ "default": "false",
4320
+ "description": "Whether initial or incremental files are loading."
4321
+ },
4322
+ {
4323
+ "name": "loadingCount",
4324
+ "type": "number",
4325
+ "default": "3",
4326
+ "description": "Placeholder rows shown for an empty loading list."
4327
+ },
4328
+ {
4329
+ "name": "loadingText",
4330
+ "type": "string",
4331
+ "default": "'Loading files'",
4332
+ "description": "Loading status text."
4333
+ },
4334
+ {
4335
+ "name": "emptyText",
4336
+ "type": "string|number|Node|Component|null",
4337
+ "default": "'No files'",
4338
+ "description": "Empty-state content."
4339
+ }
4340
+ ],
4341
+ "events": [
4342
+ {
4343
+ "name": "activate",
4344
+ "payload": "{id: unknown, index: number, file: Readonly<FileItemState>, href: string, event: MouseEvent}",
4345
+ "description": "Preventable native-file-link listener."
4346
+ },
4347
+ {
4348
+ "name": "action",
4349
+ "payload": "{id: string, fileId: unknown, index: number, action: object, file: Readonly<FileItemState>, event: MouseEvent}",
4350
+ "description": "Preventable file-action listener."
4351
+ },
4352
+ {
4353
+ "name": "datachange",
4354
+ "payload": "{items: Readonly<FileItemState>[]}",
4355
+ "description": "Collection mutation listener."
4356
+ }
4357
+ ],
4358
+ "methods": [
4359
+ {
4360
+ "name": "setItems",
4361
+ "signature": "setItems(items, [options])",
4362
+ "returns": "this",
4363
+ "description": "Replaces every file."
4364
+ },
4365
+ {
4366
+ "name": "getItems",
4367
+ "signature": "getItems()",
4368
+ "returns": "Readonly<FileItemState>[]",
4369
+ "description": "Returns defensive snapshots in display order."
4370
+ },
4371
+ {
4372
+ "name": "getItem",
4373
+ "signature": "getItem(id)",
4374
+ "returns": "Readonly<FileItemState>|null",
4375
+ "description": "Returns a defensive snapshot by stable ID."
4376
+ },
4377
+ {
4378
+ "name": "addItem",
4379
+ "signature": "addItem(item, [index], [options])",
4380
+ "returns": "this",
4381
+ "description": "Adds one file at a bounded index."
4382
+ },
4383
+ {
4384
+ "name": "updateItem",
4385
+ "signature": "updateItem(id, values, [options])",
4386
+ "returns": "this",
4387
+ "description": "Patches the first file whose ID is `Object.is`-equal to `id`."
4388
+ },
4389
+ {
4390
+ "name": "removeItem",
4391
+ "signature": "removeItem(id, [options])",
4392
+ "returns": "this",
4393
+ "description": "Removes the first file whose ID is `Object.is`-equal to `id`."
4394
+ },
4395
+ {
4396
+ "name": "setLoading",
4397
+ "signature": "setLoading(loading)",
4398
+ "returns": "this",
4399
+ "description": "Sets initial/incremental loading presentation."
4400
+ },
4401
+ {
4402
+ "name": "destroy",
4403
+ "signature": "destroy()",
4404
+ "returns": "void",
4405
+ "description": "Restores an enhanced target exactly, or removes an owned collection."
4406
+ }
4407
+ ]
4408
+ },
4409
+ "Filter": {
4410
+ "options": [
4411
+ {
4412
+ "name": "fields",
4413
+ "type": "FilterField[]",
4414
+ "default": null,
4415
+ "description": "Field definitions."
4416
+ },
4417
+ {
4418
+ "name": "value",
4419
+ "type": "FilterAst",
4420
+ "default": null,
4421
+ "description": "Initial expression."
4422
+ },
4423
+ {
4424
+ "name": "operators",
4425
+ "type": "Array<{id:string,label:string,arity:'none'|'single'|'pair'|'many',types:string[]}>",
4426
+ "default": null,
4427
+ "description": "Additional/overridden operators."
4428
+ },
4429
+ {
4430
+ "name": "allowGroups",
4431
+ "type": "boolean",
4432
+ "default": "true",
4433
+ "description": "Whether nested groups may be authored."
4434
+ },
4435
+ {
4436
+ "name": "maxDepth",
4437
+ "type": "number",
4438
+ "default": "3",
4439
+ "description": "Maximum nested group depth."
4440
+ },
4441
+ {
4442
+ "name": "maxConditions",
4443
+ "type": "number",
4444
+ "default": "50",
4445
+ "description": "Maximum condition count."
4446
+ },
4447
+ {
4448
+ "name": "searchable",
4449
+ "type": "boolean",
4450
+ "default": "false",
4451
+ "description": "Searchable field, operator and single-choice controls."
4452
+ },
4453
+ {
4454
+ "name": "layout",
4455
+ "type": "'standard'|'compact'",
4456
+ "default": "'standard'",
4457
+ "description": "Condition layout; compact rows adapt to container width."
4458
+ },
4459
+ {
4460
+ "name": "rootLogic",
4461
+ "type": "'and'|'or'|null",
4462
+ "default": "null",
4463
+ "description": "Restrict root logic without rewriting incompatible saved expressions."
4464
+ },
4465
+ {
4466
+ "name": "showApply",
4467
+ "type": "boolean",
4468
+ "default": "true",
4469
+ "description": "Show the internal Apply button."
4470
+ },
4471
+ {
4472
+ "name": "showRootActions",
4473
+ "type": "boolean",
4474
+ "default": "true",
4475
+ "description": "Show Add controls inside the root group as well as the footer."
4476
+ },
4477
+ {
4478
+ "name": "autoApply",
4479
+ "type": "boolean",
4480
+ "default": "false",
4481
+ "description": "Emit apply after every valid mutation."
4482
+ },
4483
+ {
4484
+ "name": "readonly",
4485
+ "type": "boolean",
4486
+ "default": "false",
4487
+ "description": "Prevent mutations while keeping values readable."
4488
+ },
4489
+ {
4490
+ "name": "disabled",
4491
+ "type": "boolean",
4492
+ "default": "false",
4493
+ "description": "Disable all controls."
4494
+ },
4495
+ {
4496
+ "name": "applyLabel",
4497
+ "type": "string",
4498
+ "default": null,
4499
+ "description": "Apply button label. Omitted resolves `filter.apply`, English `Apply filters`."
4500
+ },
4501
+ {
4502
+ "name": "clearLabel",
4503
+ "type": "string",
4504
+ "default": null,
4505
+ "description": "Clear button label. Omitted resolves `filter.clear`, English `Clear`."
4506
+ }
4507
+ ],
4508
+ "events": [
4509
+ {
4510
+ "name": "change",
4511
+ "payload": "Record<string,unknown>",
4512
+ "description": "Draft-change listener."
4513
+ },
4514
+ {
4515
+ "name": "apply",
4516
+ "payload": "Record<string,unknown>",
4517
+ "description": "Valid-apply listener."
4518
+ },
4519
+ {
4520
+ "name": "invalid",
4521
+ "payload": "Record<string,unknown>",
4522
+ "description": "Invalid-apply listener."
4523
+ },
4524
+ {
4525
+ "name": "query",
4526
+ "payload": "Record<string,unknown>",
4527
+ "description": "Async query listener."
4528
+ },
4529
+ {
4530
+ "name": "loaded",
4531
+ "payload": "Record<string,unknown>",
4532
+ "description": "Async loaded listener."
4533
+ },
4534
+ {
4535
+ "name": "error",
4536
+ "payload": "Record<string,unknown>",
4537
+ "description": "Async failure listener."
4538
+ }
4539
+ ],
4540
+ "methods": [
4541
+ {
4542
+ "name": "getValue",
4543
+ "signature": "getValue()",
4544
+ "returns": "FilterAst",
4545
+ "description": "Returns a defensive AST copy."
4546
+ },
4547
+ {
4548
+ "name": "setValue",
4549
+ "signature": "setValue(value, [options])",
4550
+ "returns": "this",
4551
+ "description": "Atomically replaces the AST."
4552
+ },
4553
+ {
4554
+ "name": "addCondition",
4555
+ "signature": "addCondition([parentId], [initial])",
4556
+ "returns": "string|null",
4557
+ "description": "Adds a condition to a group."
4558
+ },
4559
+ {
4560
+ "name": "addGroup",
4561
+ "signature": "addGroup([parentId], [logic])",
4562
+ "returns": "string|null",
4563
+ "description": "Adds a nested group."
4564
+ },
4565
+ {
4566
+ "name": "update",
4567
+ "signature": "update(id, patch)",
4568
+ "returns": "this",
4569
+ "description": "Updates a node by stable ID."
4570
+ },
4571
+ {
4572
+ "name": "remove",
4573
+ "signature": "remove(id)",
4574
+ "returns": "this",
4575
+ "description": "Removes a non-root node."
4576
+ },
4577
+ {
4578
+ "name": "move",
4579
+ "signature": "move(id, parentId, index)",
4580
+ "returns": "this",
4581
+ "description": "Moves a node into a group while preserving its identity."
4582
+ },
4583
+ {
4584
+ "name": "validate",
4585
+ "signature": "validate()",
3769
4586
  "returns": "{valid:boolean,errors:Array<Record<string,string>>}",
3770
4587
  "description": "Returns semantic validity and errors."
3771
4588
  },
@@ -3789,6 +4606,102 @@
3789
4606
  }
3790
4607
  ]
3791
4608
  },
4609
+ "FilterPanel": {
4610
+ "options": [
4611
+ {
4612
+ "name": "fields",
4613
+ "type": "Record<string, FilterPanelField>",
4614
+ "default": "{}",
4615
+ "description": "Field metadata exactly as a list response publishes it. An empty map is the ordinary case, not an error: it renders `emptyText`."
4616
+ },
4617
+ {
4618
+ "name": "order",
4619
+ "type": "string[]|null",
4620
+ "default": "null",
4621
+ "description": "Display order by field key; omitted keeps object order. Keys the map does not declare are ignored, and fields the order omits follow in map order."
4622
+ },
4623
+ {
4624
+ "name": "value",
4625
+ "type": "Record<string, unknown>",
4626
+ "default": "{}",
4627
+ "description": "Applied filters. The draft starts as a copy."
4628
+ },
4629
+ {
4630
+ "name": "mode",
4631
+ "type": "FilterPanelMode",
4632
+ "default": "'draft'",
4633
+ "description": "`'draft'` collects edits until `apply()`; `'live'` applies every committed edit."
4634
+ },
4635
+ {
4636
+ "name": "serialize",
4637
+ "type": "FilterPanelSerialize",
4638
+ "default": "'seconds'",
4639
+ "description": "How a date leaves the component. A range's lower bound takes the start of its day and its upper bound the end, so a one-day range matches."
4640
+ },
4641
+ {
4642
+ "name": "emptyText",
4643
+ "type": "string|null",
4644
+ "default": "null",
4645
+ "description": "Text shown when `fields` is empty; null resolves `filterPanel.empty`."
4646
+ },
4647
+ {
4648
+ "name": "msg",
4649
+ "type": "Record<string, string>|Record<string, Record<string, string>>",
4650
+ "default": null,
4651
+ "description": "Localized messages."
4652
+ }
4653
+ ],
4654
+ "events": [
4655
+ {
4656
+ "name": "apply",
4657
+ "payload": "{value}",
4658
+ "description": "Apply listener."
4659
+ },
4660
+ {
4661
+ "name": "change",
4662
+ "payload": "{value, field}",
4663
+ "description": "Change listener."
4664
+ }
4665
+ ],
4666
+ "methods": [
4667
+ {
4668
+ "name": "getValue",
4669
+ "signature": "getValue()",
4670
+ "returns": "Record<string, unknown>",
4671
+ "description": "Returns the applied value: only the constraints that are set, with dates serialized through `serialize`. Unknown field types are never part of it."
4672
+ },
4673
+ {
4674
+ "name": "setValue",
4675
+ "signature": "setValue(value)",
4676
+ "returns": "this",
4677
+ "description": "Replaces both the applied value and the draft the controls show. Accepts what `getValue()` returns as well as raw input values, so a value that survived a URL round-trip goes back in."
4678
+ },
4679
+ {
4680
+ "name": "apply",
4681
+ "signature": "apply()",
4682
+ "returns": "this",
4683
+ "description": "Commits the draft. In live mode every committed edit already does this; calling it directly is how a host forces a reload with the values that are on screen."
4684
+ },
4685
+ {
4686
+ "name": "reset",
4687
+ "signature": "reset()",
4688
+ "returns": "this",
4689
+ "description": "Restores the controls to the `value` the panel was constructed with **without committing**, so the filters in force stay in force. This is the Cancel half of a sheet: the panel goes back to showing what is being filtered by. Contrast `clear()`, which commits. In live mode there is no uncommitted draft to hold back, so there it applies like any other edit."
4690
+ },
4691
+ {
4692
+ "name": "clear",
4693
+ "signature": "clear()",
4694
+ "returns": "this",
4695
+ "description": "Empties every control **and commits**, in both modes. \"Clear the filters\" has one meaning, and leaving a list filtered behind a panel showing no filters is not it — the records look missing and nothing on screen explains why. Contrast `reset()`, which restores the controls without committing. The price is one unfiltered load at the moment the button is pressed, which is also the feedback that says the filters are gone."
4696
+ },
4697
+ {
4698
+ "name": "destroy",
4699
+ "signature": "destroy()",
4700
+ "returns": "void",
4701
+ "description": "Destroys the composed controls and puts an enhanced target back as found."
4702
+ }
4703
+ ]
4704
+ },
3792
4705
  "Finder": {
3793
4706
  "options": [
3794
4707
  {
@@ -3963,6 +4876,12 @@
3963
4876
  "type": "boolean",
3964
4877
  "default": "true",
3965
4878
  "description": "Native `novalidate` state."
4879
+ },
4880
+ {
4881
+ "name": "idPrefix",
4882
+ "type": "string|null",
4883
+ "default": "null",
4884
+ "description": "Prefix of the DOM ids generated for the fields of the fieldsets this form builds, as `<idPrefix>-<key>`. Null generates one per form instance, so a form mounted twice never repeats an id. A fieldset's own `idPrefix` wins."
3966
4885
  }
3967
4886
  ],
3968
4887
  "events": [
@@ -3987,7 +4906,7 @@
3987
4906
  "name": "addFieldset",
3988
4907
  "signature": "addFieldset(fieldset)",
3989
4908
  "returns": "Fieldset",
3990
- "description": "Adds an existing fieldset or constructs one from options."
4909
+ "description": "Adds an existing fieldset or constructs one from options. A constructed fieldset generates its field ids from the form's `idPrefix` unless its options carry their own."
3991
4910
  },
3992
4911
  {
3993
4912
  "name": "setActions",
@@ -4234,6 +5153,12 @@
4234
5153
  "default": "false",
4235
5154
  "description": "Shared selection mode."
4236
5155
  },
5156
+ {
5157
+ "name": "selectionTrigger",
5158
+ "type": "'checkbox'|'card'",
5159
+ "default": "'checkbox'",
5160
+ "description": "Select through a checkbox or the non-interactive card surface."
5161
+ },
4237
5162
  {
4238
5163
  "name": "selection",
4239
5164
  "type": "unknown[]",
@@ -4254,9 +5179,9 @@
4254
5179
  },
4255
5180
  {
4256
5181
  "name": "fieldControls",
4257
- "type": "boolean",
5182
+ "type": "boolean|import('../view/record-view.js').ViewFieldControlsConfig",
4258
5183
  "default": "true",
4259
- "description": "Show shared field controls."
5184
+ "description": "Show shared field controls. Redeclared narrower than `RecordViewOptions` it fails declaration emit, because the two option types are intersected."
4260
5185
  },
4261
5186
  {
4262
5187
  "name": "emptyText",
@@ -4336,6 +5261,72 @@
4336
5261
  "default": "'card'",
4337
5262
  "description": "Whether the whole card or only its handle starts a pointer drag. Touch drags from the card body require a long press so the board still scrolls."
4338
5263
  },
5264
+ {
5265
+ "name": "moveHandle",
5266
+ "type": "'keyboard'|'always'",
5267
+ "default": "'keyboard'",
5268
+ "description": "Move-handle presentation. `keyboard` keeps it announced and tabbable but out of sight until it takes focus, because the card itself is already the pointer drag source; `always` shows it alongside the card's other controls. `dragFrom:'handle'` overrides this — a drag source a pointer user cannot see is not a control."
5269
+ },
5270
+ {
5271
+ "name": "entityIcon",
5272
+ "type": "string|((record:KanbanRecord,index:number)=>string|null)|null",
5273
+ "default": "null",
5274
+ "description": "Icon naming what the record is, drawn before the identifier."
5275
+ },
5276
+ {
5277
+ "name": "identifier",
5278
+ "type": "KanbanCardField",
5279
+ "default": "null",
5280
+ "description": "Stable record key shown on the card head."
5281
+ },
5282
+ {
5283
+ "name": "status",
5284
+ "type": "KanbanIndicatorSource",
5285
+ "default": "null",
5286
+ "description": "Status indicator source."
5287
+ },
5288
+ {
5289
+ "name": "statusTones",
5290
+ "type": "Record<string,string>",
5291
+ "default": "{}",
5292
+ "description": "Maps a status value to a semantic tone."
5293
+ },
5294
+ {
5295
+ "name": "priority",
5296
+ "type": "KanbanIndicatorSource",
5297
+ "default": "null",
5298
+ "description": "Priority indicator source."
5299
+ },
5300
+ {
5301
+ "name": "priorityTones",
5302
+ "type": "Record<string,string>",
5303
+ "default": "{}",
5304
+ "description": "Maps a priority value to a semantic tone."
5305
+ },
5306
+ {
5307
+ "name": "progress",
5308
+ "type": "KanbanCardField",
5309
+ "default": "null",
5310
+ "description": "Completion source; a number or `{value,max,label}`."
5311
+ },
5312
+ {
5313
+ "name": "progressMax",
5314
+ "type": "number",
5315
+ "default": "100",
5316
+ "description": "Amount that counts as finished."
5317
+ },
5318
+ {
5319
+ "name": "assignees",
5320
+ "type": "KanbanCardField",
5321
+ "default": "null",
5322
+ "description": "Responsible people; a name, a list, or descriptors."
5323
+ },
5324
+ {
5325
+ "name": "maxAvatars",
5326
+ "type": "number",
5327
+ "default": "3",
5328
+ "description": "Faces drawn before the overflow chip."
5329
+ },
4339
5330
  {
4340
5331
  "name": "multiMove",
4341
5332
  "type": "boolean",
@@ -4424,7 +5415,7 @@
4424
5415
  "name": "renderCard",
4425
5416
  "type": "((context:KanbanCardContext)=>Node|null|undefined)|null",
4426
5417
  "default": "null",
4427
- "description": "Replaces card content."
5418
+ "description": "Replaces the shared record-card content — eyebrow, titles, and metadata. The preview, selection control, action group, move handle, rule badges, and any configured card head and footer still render, because each of those answers to its own option; clear those options to remove them."
4428
5419
  },
4429
5420
  {
4430
5421
  "name": "renderColumnHeader",
@@ -4767,38 +5758,38 @@
4767
5758
  {
4768
5759
  "name": "placeholder",
4769
5760
  "type": "string",
4770
- "default": "'Search applications and records'",
4771
- "description": "Search-field placeholder."
5761
+ "default": null,
5762
+ "description": "Search-field placeholder. Omitted resolves `launcher.placeholder`, English `Search applications and records`."
4772
5763
  },
4773
5764
  {
4774
5765
  "name": "label",
4775
5766
  "type": "string",
4776
- "default": "'Launcher'",
4777
- "description": "Dialog and field label."
5767
+ "default": null,
5768
+ "description": "Dialog and field label. Omitted resolves `launcher.label`, English `Launcher`."
4778
5769
  },
4779
5770
  {
4780
5771
  "name": "closeLabel",
4781
5772
  "type": "string",
4782
- "default": "'Close launcher'",
4783
- "description": "Close-button accessible label."
5773
+ "default": null,
5774
+ "description": "Close-button accessible label. Omitted resolves `launcher.close`, English `Close launcher`."
4784
5775
  },
4785
5776
  {
4786
5777
  "name": "resultsLabel",
4787
5778
  "type": "string",
4788
- "default": "'Launcher results'",
4789
- "description": "Results-region accessible label."
5779
+ "default": null,
5780
+ "description": "Results-region accessible label. Omitted resolves `launcher.results`, English `Launcher results`."
4790
5781
  },
4791
5782
  {
4792
5783
  "name": "emptyText",
4793
5784
  "type": "string",
4794
- "default": "'No results'",
4795
- "description": "Empty-state text."
5785
+ "default": null,
5786
+ "description": "Empty-state text. Omitted resolves `launcher.empty`, English `No results`."
4796
5787
  },
4797
5788
  {
4798
5789
  "name": "loadingText",
4799
5790
  "type": "string",
4800
- "default": "'Searching…'",
4801
- "description": "Loading-state text."
5791
+ "default": null,
5792
+ "description": "Loading-state text. Omitted resolves `launcher.loading`, English `Searching…`."
4802
5793
  },
4803
5794
  {
4804
5795
  "name": "shortcut",
@@ -4808,7 +5799,7 @@
4808
5799
  },
4809
5800
  {
4810
5801
  "name": "hints",
4811
- "type": "false|{move?: string, open?: string, close?: string}",
5802
+ "type": "false|{move?: string, open?: string, back?: string, close?: string}",
4812
5803
  "default": null,
4813
5804
  "description": "Visible keyboard hints, or false."
4814
5805
  },
@@ -4822,7 +5813,7 @@
4822
5813
  "events": [
4823
5814
  {
4824
5815
  "name": "select",
4825
- "payload": "{item, value, source, query}",
5816
+ "payload": "{item, value, source, query, page}",
4826
5817
  "description": "Preventable selection listener."
4827
5818
  },
4828
5819
  {
@@ -4830,6 +5821,11 @@
4830
5821
  "payload": "{query: string}",
4831
5822
  "description": "Query-change listener."
4832
5823
  },
5824
+ {
5825
+ "name": "page",
5826
+ "payload": "{page, path}",
5827
+ "description": "Page-navigation listener."
5828
+ },
4833
5829
  {
4834
5830
  "name": "open",
4835
5831
  "payload": "Record<string, never>",
@@ -4842,16 +5838,28 @@
4842
5838
  },
4843
5839
  {
4844
5840
  "name": "error",
4845
- "payload": "{source: LauncherSource, error: unknown}",
5841
+ "payload": "{source, error, page}",
4846
5842
  "description": "Source error listener."
4847
5843
  }
4848
5844
  ],
4849
5845
  "methods": [
4850
5846
  {
4851
5847
  "name": "open",
4852
- "signature": "open()",
5848
+ "signature": "open([options])",
5849
+ "returns": "this",
5850
+ "description": "Opens the launcher and focuses/selects its query. It opens on the root unless `page` names one; already open, `page` navigates there."
5851
+ },
5852
+ {
5853
+ "name": "back",
5854
+ "signature": "back()",
4853
5855
  "returns": "this",
4854
- "description": "Opens the launcher and focuses/selects its query."
5856
+ "description": "Goes back one page, restoring the level beneath with its query and highlighted option. Does nothing on the root."
5857
+ },
5858
+ {
5859
+ "name": "getPage",
5860
+ "signature": "getPage()",
5861
+ "returns": "LauncherItem|null",
5862
+ "description": "Returns the page shown, or null on the root."
4855
5863
  },
4856
5864
  {
4857
5865
  "name": "close",
@@ -4893,7 +5901,7 @@
4893
5901
  "name": "setItems",
4894
5902
  "signature": "setItems(items)",
4895
5903
  "returns": "this",
4896
- "description": "Replaces local catalogue items."
5904
+ "description": "Replaces the root's local catalogue items; an open page keeps its own."
4897
5905
  },
4898
5906
  {
4899
5907
  "name": "setCurrent",
@@ -4905,7 +5913,7 @@
4905
5913
  "name": "setSources",
4906
5914
  "signature": "setSources(sources)",
4907
5915
  "returns": "this",
4908
- "description": "Replaces asynchronous sources and aborts work from the old set."
5916
+ "description": "Replaces the root's asynchronous sources and aborts work from the old set; on a page they load once the root is back."
4909
5917
  },
4910
5918
  {
4911
5919
  "name": "destroy",
@@ -4915,6 +5923,18 @@
4915
5923
  }
4916
5924
  ]
4917
5925
  },
5926
+ "LauncherOpen": {
5927
+ "options": [
5928
+ {
5929
+ "name": "page",
5930
+ "type": "string|number|LauncherItem",
5931
+ "default": null,
5932
+ "description": "Opens straight into a page: the id of a local item with `items` (at any depth of array pages, whose path becomes the back stack), or a page item."
5933
+ }
5934
+ ],
5935
+ "events": [],
5936
+ "methods": []
5937
+ },
4918
5938
  "LayoutGrid": {
4919
5939
  "options": [
4920
5940
  {
@@ -4947,9 +5967,182 @@
4947
5967
  "default": "''",
4948
5968
  "description": "Extra class names."
4949
5969
  }
4950
- ],
4951
- "events": [],
4952
- "methods": []
5970
+ ],
5971
+ "events": [],
5972
+ "methods": []
5973
+ },
5974
+ "ListToolbar": {
5975
+ "options": [
5976
+ {
5977
+ "name": "search",
5978
+ "type": "ListToolbarSearch|boolean",
5979
+ "default": "{}",
5980
+ "description": "Search field configuration; `false` omits it."
5981
+ },
5982
+ {
5983
+ "name": "count",
5984
+ "type": "number|null",
5985
+ "default": "null",
5986
+ "description": "Initial result count shown in the live status line."
5987
+ },
5988
+ {
5989
+ "name": "countText",
5990
+ "type": "((count: number) => string)|null",
5991
+ "default": "null",
5992
+ "description": "Formats the count line; omitted uses the `listToolbar.results` message (`'%1 results'`)."
5993
+ },
5994
+ {
5995
+ "name": "views",
5996
+ "type": "Array<string|ListToolbarView>",
5997
+ "default": "[]",
5998
+ "description": "Shape switch entries; `[]` omits the switch."
5999
+ },
6000
+ {
6001
+ "name": "view",
6002
+ "type": "string|null",
6003
+ "default": "null",
6004
+ "description": "Initially selected shape; omitted selects the first entry."
6005
+ },
6006
+ {
6007
+ "name": "tools",
6008
+ "type": "ListToolbarTool[]",
6009
+ "default": "[]",
6010
+ "description": "Tool buttons, in display order."
6011
+ },
6012
+ {
6013
+ "name": "label",
6014
+ "type": "string|null",
6015
+ "default": "null",
6016
+ "description": "Accessible name of the bar; omitted uses the `listToolbar.label` message."
6017
+ },
6018
+ {
6019
+ "name": "msg",
6020
+ "type": "Record<string, string>|Record<string, Record<string, string>>",
6021
+ "default": null,
6022
+ "description": "Localized messages."
6023
+ }
6024
+ ],
6025
+ "events": [
6026
+ {
6027
+ "name": "search",
6028
+ "payload": "{value: string}",
6029
+ "description": "Search listener."
6030
+ },
6031
+ {
6032
+ "name": "viewchange",
6033
+ "payload": "{view: string, previous: string|null}",
6034
+ "description": "Shape listener."
6035
+ },
6036
+ {
6037
+ "name": "action",
6038
+ "payload": "{id: string, pressed: boolean|null, tool: Element}",
6039
+ "description": "Tool listener."
6040
+ }
6041
+ ],
6042
+ "methods": [
6043
+ {
6044
+ "name": "setCount",
6045
+ "signature": "setCount(count)",
6046
+ "returns": "this",
6047
+ "description": "Replaces the count line. `null` clears it, which is the right answer while a request is in flight: the number on screen describes the filters the reader has just changed."
6048
+ },
6049
+ {
6050
+ "name": "getCount",
6051
+ "signature": "getCount()",
6052
+ "returns": "number|null",
6053
+ "description": "Returns the count currently shown, or null when the line is empty."
6054
+ },
6055
+ {
6056
+ "name": "setBadge",
6057
+ "signature": "setBadge(id, value)",
6058
+ "returns": "this",
6059
+ "description": "Replaces a tool's badge and its accessible name with it. `null` removes the badge."
6060
+ },
6061
+ {
6062
+ "name": "setPressed",
6063
+ "signature": "setPressed(id, [pressed])",
6064
+ "returns": "this",
6065
+ "description": "Sets the pressed state of a toggle tool. A tool declared without `pressed` is a plain button and is left alone."
6066
+ },
6067
+ {
6068
+ "name": "setToolDisabled",
6069
+ "signature": "setToolDisabled(id, [disabled])",
6070
+ "returns": "this",
6071
+ "description": "Enables or disables a tool, for instance while its panel is loading."
6072
+ },
6073
+ {
6074
+ "name": "setTools",
6075
+ "signature": "setTools(tools)",
6076
+ "returns": "this",
6077
+ "description": "Replaces every tool. Elements adopted with `addTool()` and a chooser mounted by `bind()` stay where they are."
6078
+ },
6079
+ {
6080
+ "name": "getTool",
6081
+ "signature": "getTool(id)",
6082
+ "returns": "HTMLButtonElement|null",
6083
+ "description": "Returns a tool's button element."
6084
+ },
6085
+ {
6086
+ "name": "getToolsElement",
6087
+ "signature": "getToolsElement()",
6088
+ "returns": "HTMLElement",
6089
+ "description": "The element tools are mounted into. Hand it to a view as `fieldControls: {target}` to place that view's field chooser in this bar without calling `bind()`. A control mounted here by somebody else stays theirs: the toolbar puts back what it adopted through `addTool()` or `bind()`, and everything else goes wherever this slot goes. Use `addTool()` instead to hand the toolbar an element it should return on `destroy()`."
6090
+ },
6091
+ {
6092
+ "name": "addTool",
6093
+ "signature": "addTool(element)",
6094
+ "returns": "this",
6095
+ "description": "Adopts a ready-made control into the tools slot. The element's original position is recorded, and `destroy()` puts it back."
6096
+ },
6097
+ {
6098
+ "name": "setView",
6099
+ "signature": "setView(view, [options])",
6100
+ "returns": "this",
6101
+ "description": "Selects a view shape. A value outside `views` is ignored, so the switch can only ever report one of the shapes it was configured with."
6102
+ },
6103
+ {
6104
+ "name": "getView",
6105
+ "signature": "getView()",
6106
+ "returns": "string|null",
6107
+ "description": "Returns the selected view shape, or null when no shape switch is configured."
6108
+ },
6109
+ {
6110
+ "name": "getSearch",
6111
+ "signature": "getSearch()",
6112
+ "returns": "string",
6113
+ "description": "Returns the current query, or an empty string when the field is omitted."
6114
+ },
6115
+ {
6116
+ "name": "setSearch",
6117
+ "signature": "setSearch(value, [options])",
6118
+ "returns": "this",
6119
+ "description": "Sets the query."
6120
+ },
6121
+ {
6122
+ "name": "focusSearch",
6123
+ "signature": "focusSearch()",
6124
+ "returns": "this",
6125
+ "description": "Focuses the search field, for a host that binds a \"/\" shortcut."
6126
+ },
6127
+ {
6128
+ "name": "bind",
6129
+ "signature": "bind(view)",
6130
+ "returns": "this",
6131
+ "description": "Optional sugar for a `TableView` or `CardView`: it wires the shape switch to the view and mounts the view's field chooser into this bar. Nothing is imported and nothing is required — every capability is feature-detected, so a view that offers none of them still works and still gets `viewchange`, and the host swaps the view itself. See `recordViewCapabilities()` for what is looked for."
6132
+ },
6133
+ {
6134
+ "name": "unbind",
6135
+ "signature": "unbind()",
6136
+ "returns": "this",
6137
+ "description": "Releases a bound view and returns its field chooser to where it was found."
6138
+ },
6139
+ {
6140
+ "name": "destroy",
6141
+ "signature": "destroy()",
6142
+ "returns": "void",
6143
+ "description": "Destroys the search field, returns every adopted control to where it came from, and restores an enhanced target to the markup it had before the takeover."
6144
+ }
6145
+ ]
4953
6146
  },
4954
6147
  "MasterPanel": {
4955
6148
  "options": [
@@ -5071,7 +6264,7 @@
5071
6264
  },
5072
6265
  {
5073
6266
  "name": "open",
5074
- "signature": "open()",
6267
+ "signature": "open([options])",
5075
6268
  "returns": "this",
5076
6269
  "description": "Opens the menu."
5077
6270
  },
@@ -5101,13 +6294,13 @@
5101
6294
  },
5102
6295
  {
5103
6296
  "name": "focusFirst",
5104
- "signature": "focusFirst()",
6297
+ "signature": "focusFirst([options])",
5105
6298
  "returns": "this",
5106
6299
  "description": "Opens the menu and focuses its first enabled item."
5107
6300
  },
5108
6301
  {
5109
6302
  "name": "focusLast",
5110
- "signature": "focusLast()",
6303
+ "signature": "focusLast([options])",
5111
6304
  "returns": "this",
5112
6305
  "description": "Opens the menu and focuses its last enabled item."
5113
6306
  },
@@ -5125,6 +6318,18 @@
5125
6318
  }
5126
6319
  ]
5127
6320
  },
6321
+ "MenuButtonOpen": {
6322
+ "options": [
6323
+ {
6324
+ "name": "returnFocus",
6325
+ "type": "boolean|HTMLElement",
6326
+ "default": "true",
6327
+ "description": "Where focus goes when this opening ends with a selection or Escape: `true` is the trigger, an element is that element (the trigger again if it has left the document), and `false` leaves focus alone."
6328
+ }
6329
+ ],
6330
+ "events": [],
6331
+ "methods": []
6332
+ },
5128
6333
  "Message": {
5129
6334
  "options": [
5130
6335
  {
@@ -5192,7 +6397,7 @@
5192
6397
  "name": "timeout",
5193
6398
  "type": "number",
5194
6399
  "default": "4000",
5195
- "description": "Auto-dismiss delay in milliseconds; zero persists."
6400
+ "description": "Auto-dismiss delay in milliseconds; zero persists. A message with an `action` stays at least 8000ms."
5196
6401
  },
5197
6402
  {
5198
6403
  "name": "closable",
@@ -5200,6 +6405,18 @@
5200
6405
  "default": "true",
5201
6406
  "description": "Whether to render a close button."
5202
6407
  },
6408
+ {
6409
+ "name": "action",
6410
+ "type": "MessageAction|null",
6411
+ "default": "null",
6412
+ "description": "A command button inside the message. The message never times out while the pointer is over it or focus is inside it."
6413
+ },
6414
+ {
6415
+ "name": "leading",
6416
+ "type": "Node|{toElement: () => Node|null}|null",
6417
+ "default": "null",
6418
+ "description": "Visual shown in place of the kind icon, such as an Avatar's element. It is decorative — the message text must say what it shows."
6419
+ },
5203
6420
  {
5204
6421
  "name": "scope",
5205
6422
  "type": "Element|string|null",
@@ -5246,7 +6463,7 @@
5246
6463
  "name": "scope",
5247
6464
  "type": "Element|string|null",
5248
6465
  "default": "null",
5249
- "description": "Element whose nearest Zx theme scope owns the overlay; defaults to the opener."
6466
+ "description": "Element whose nearest Zx theme scope owns the overlay; defaults to the opener. Resolved on every open, so a scope connected after construction still owns it."
5250
6467
  }
5251
6468
  ],
5252
6469
  "events": [
@@ -5422,6 +6639,24 @@
5422
6639
  "type": "NavigationAction[]",
5423
6640
  "default": "[]",
5424
6641
  "description": "Right-aligned action elements or descriptors."
6642
+ },
6643
+ {
6644
+ "name": "overflow",
6645
+ "type": "boolean",
6646
+ "default": "true",
6647
+ "description": "Whether items collapse into the overflow menu at all. `false` keeps every item in the bar at every width and never shows the More button."
6648
+ },
6649
+ {
6650
+ "name": "overflowBelow",
6651
+ "type": "string|number|false",
6652
+ "default": "'44rem'",
6653
+ "description": "Container inline size at or below which items collapse, as a `px` or `rem` length (a number is read as `px`); `false` disables collapsing exactly as `overflow: false` does. The default is the threshold the stylesheet's own container query carries, and a bar that keeps it collapses in CSS without measuring itself; any other value is watched with a `ResizeObserver`."
6654
+ },
6655
+ {
6656
+ "name": "minVisible",
6657
+ "type": "number",
6658
+ "default": "0",
6659
+ "description": "How many items, counted from the start, never collapse. The default collapses all of them, which is right for a top app bar and wrong for a phone bottom bar — `minVisible: 4` is what makes that bar usable."
5425
6660
  }
5426
6661
  ],
5427
6662
  "events": [
@@ -5927,6 +7162,18 @@
5927
7162
  }
5928
7163
  ]
5929
7164
  },
7165
+ "PriorityIcon": {
7166
+ "options": [
7167
+ {
7168
+ "name": "label",
7169
+ "type": "string|null",
7170
+ "default": "null",
7171
+ "description": "Accessible name. Without one the glyph is decorative (`aria-hidden`) and must sit beside text, or inside a control with a tooltip, that says the priority."
7172
+ }
7173
+ ],
7174
+ "events": [],
7175
+ "methods": []
7176
+ },
5930
7177
  "ProgressBar": {
5931
7178
  "options": [
5932
7179
  {
@@ -6084,6 +7331,18 @@
6084
7331
  "type": "string",
6085
7332
  "default": "''",
6086
7333
  "description": "Input placeholder."
7334
+ },
7335
+ {
7336
+ "name": "okLabel",
7337
+ "type": "string",
7338
+ "default": "'OK'",
7339
+ "description": "Confirmation label."
7340
+ },
7341
+ {
7342
+ "name": "cancelLabel",
7343
+ "type": "string",
7344
+ "default": "'Cancel'",
7345
+ "description": "Cancellation label."
6087
7346
  }
6088
7347
  ],
6089
7348
  "events": [],
@@ -6501,6 +7760,12 @@
6501
7760
  "default": "false",
6502
7761
  "description": "Selection presentation."
6503
7762
  },
7763
+ {
7764
+ "name": "selectionTrigger",
7765
+ "type": "'checkbox'|'card'",
7766
+ "default": "'checkbox'",
7767
+ "description": "Selection affordance for owning views."
7768
+ },
6504
7769
  {
6505
7770
  "name": "selected",
6506
7771
  "type": "boolean",
@@ -6587,9 +7852,9 @@
6587
7852
  },
6588
7853
  {
6589
7854
  "name": "fieldControls",
6590
- "type": "boolean",
7855
+ "type": "boolean|ViewFieldControlsConfig",
6591
7856
  "default": "true",
6592
- "description": "Whether concrete views show the shared field chooser."
7857
+ "description": "Whether concrete views show the shared field chooser. `true` renders it in the view's own toolbar and `false` omits it; a `ViewFieldControlsConfig` object renders the same control with a translated `label` and, with `target`, mounts it into a host element such as a list toolbar."
6593
7858
  },
6594
7859
  {
6595
7860
  "name": "emptyText",
@@ -6956,6 +8221,12 @@
6956
8221
  "default": "''",
6957
8222
  "description": "Empty control text."
6958
8223
  },
8224
+ {
8225
+ "name": "label",
8226
+ "type": "string",
8227
+ "default": "''",
8228
+ "description": "Accessible combobox name; falls back to the placeholder."
8229
+ },
6959
8230
  {
6960
8231
  "name": "clearable",
6961
8232
  "type": "boolean",
@@ -7102,7 +8373,7 @@
7102
8373
  "name": "priority",
7103
8374
  "signature": "priority(target, [options])",
7104
8375
  "returns": "Select",
7105
- "description": "Creates the five-level priority preset."
8376
+ "description": "Creates the five-level priority preset: values 0 (lowest) to 4 (highest), each drawn as grey signal bars filled to its level, except the highest, which is the one coloured level — a danger square with an exclamation mark. A \"No priority\" row (value null, a row of dashes) heads the list and labels the empty control; `clearable: false` removes it."
7106
8377
  },
7107
8378
  {
7108
8379
  "name": "status",
@@ -7685,6 +8956,85 @@
7685
8956
  }
7686
8957
  ]
7687
8958
  },
8959
+ "SortControl": {
8960
+ "options": [
8961
+ {
8962
+ "name": "fields",
8963
+ "type": "SortField[]",
8964
+ "default": "[]",
8965
+ "description": "Available sort fields, in display order."
8966
+ },
8967
+ {
8968
+ "name": "value",
8969
+ "type": "SortValue|null",
8970
+ "default": "null",
8971
+ "description": "Initial sort; null chooses the first field ascending."
8972
+ },
8973
+ {
8974
+ "name": "label",
8975
+ "type": "string",
8976
+ "default": "'Sort by'",
8977
+ "description": "Accessible field label and direction-name prefix."
8978
+ },
8979
+ {
8980
+ "name": "labels",
8981
+ "type": "{asc?:string,desc?:string}",
8982
+ "default": "{}",
8983
+ "description": "Current/next direction labels, defaulting to Ascending/Descending."
8984
+ },
8985
+ {
8986
+ "name": "disabled",
8987
+ "type": "boolean",
8988
+ "default": "false",
8989
+ "description": "Whether interaction is disabled."
8990
+ }
8991
+ ],
8992
+ "events": [
8993
+ {
8994
+ "name": "change",
8995
+ "payload": "{value:SortValue}",
8996
+ "description": "Atomic field/direction change."
8997
+ }
8998
+ ],
8999
+ "methods": [
9000
+ {
9001
+ "name": "getValue",
9002
+ "signature": "getValue()",
9003
+ "returns": "SortValue|null",
9004
+ "description": "Returns a defensive copy of the current sort."
9005
+ },
9006
+ {
9007
+ "name": "setValue",
9008
+ "signature": "setValue(value, [options])",
9009
+ "returns": "this",
9010
+ "description": "Replaces the field and direction atomically; rejects unavailable fields and directions."
9011
+ },
9012
+ {
9013
+ "name": "enable",
9014
+ "signature": "enable()",
9015
+ "returns": "this",
9016
+ "description": "Enables both controls when fields are available."
9017
+ },
9018
+ {
9019
+ "name": "disable",
9020
+ "signature": "disable()",
9021
+ "returns": "this",
9022
+ "description": "Disables both controls and closes the option panel."
9023
+ },
9024
+ {
9025
+ "name": "focus",
9026
+ "signature": "focus()",
9027
+ "returns": "this",
9028
+ "description": "Focuses the searchable control."
9029
+ },
9030
+ {
9031
+ "name": "destroy",
9032
+ "signature": "destroy()",
9033
+ "returns": "void",
9034
+ "description": "Releases the owned Select and restores an enhanced target."
9035
+ }
9036
+ ]
9037
+ },
7688
9038
  "Spinner": {
7689
9039
  "options": [
7690
9040
  {
@@ -7935,6 +9285,163 @@
7935
9285
  "events": [],
7936
9286
  "methods": []
7937
9287
  },
9288
+ "StatTile": {
9289
+ "options": [
9290
+ {
9291
+ "name": "label",
9292
+ "type": "string",
9293
+ "default": "''",
9294
+ "description": "The metric's name, set small above the value."
9295
+ },
9296
+ {
9297
+ "name": "value",
9298
+ "type": "number|string|null",
9299
+ "default": "null",
9300
+ "description": "The metric. A string is rendered as given."
9301
+ },
9302
+ {
9303
+ "name": "format",
9304
+ "type": "StatTileFormat",
9305
+ "default": "'number'",
9306
+ "description": "How a numeric value is rendered: a named mode, a callback receiving the raw value, or null to print the value unformatted."
9307
+ },
9308
+ {
9309
+ "name": "currency",
9310
+ "type": "string|null",
9311
+ "default": "null",
9312
+ "description": "ISO 4217 code used by `format: 'currency'`."
9313
+ },
9314
+ {
9315
+ "name": "caption",
9316
+ "type": "string",
9317
+ "default": "''",
9318
+ "description": "A muted context line under the value — what the number is out of or measured in, e.g. `'of 13,184'` or `'open tickets'`. Part of the accessible name."
9319
+ },
9320
+ {
9321
+ "name": "locale",
9322
+ "type": "string",
9323
+ "default": null,
9324
+ "description": "BCP 47 tag for every formatter; defaults to the active language."
9325
+ },
9326
+ {
9327
+ "name": "delta",
9328
+ "type": "number|string|null",
9329
+ "default": "null",
9330
+ "description": "Change against the previous period. Rendered with its own sign and an arrow, never with colour alone."
9331
+ },
9332
+ {
9333
+ "name": "deltaKind",
9334
+ "type": "StatTileDeltaKind",
9335
+ "default": "'neutral'",
9336
+ "description": "Whether the change is good, bad, or merely a change. This — not the sign's direction — picks the delta colour: a rising ticket count is not a success, so \"up is good\" is never assumed."
9337
+ },
9338
+ {
9339
+ "name": "deltaFormat",
9340
+ "type": "StatTileFormat",
9341
+ "default": null,
9342
+ "description": "How the delta is rendered; defaults to `format`."
9343
+ },
9344
+ {
9345
+ "name": "deltaLabel",
9346
+ "type": "string",
9347
+ "default": "''",
9348
+ "description": "What the change is measured against, e.g. `'vs. last week'`."
9349
+ },
9350
+ {
9351
+ "name": "trend",
9352
+ "type": "number[]",
9353
+ "default": "[]",
9354
+ "description": "Values for a decorative sparkline. Fewer than two usable numbers render nothing."
9355
+ },
9356
+ {
9357
+ "name": "icon",
9358
+ "type": "string|null",
9359
+ "default": "null",
9360
+ "description": "Icon name from `icons.js`, shown muted beside the label — a glyph, not a coloured chip."
9361
+ },
9362
+ {
9363
+ "name": "kind",
9364
+ "type": "StatTileKind",
9365
+ "default": "'neutral'",
9366
+ "description": "Semantic intent. It tints the sparkline and never the value, which stays at full text contrast whatever intent a record carries."
9367
+ },
9368
+ {
9369
+ "name": "href",
9370
+ "type": "string|null",
9371
+ "default": "null",
9372
+ "description": "Destination. A tile with an href is an `<a>`."
9373
+ },
9374
+ {
9375
+ "name": "clickable",
9376
+ "type": "boolean",
9377
+ "default": "false",
9378
+ "description": "Renders a `<button>` without an href. Passing `onclick` sets this implicitly; set it directly to subscribe with `on('click', …)` instead."
9379
+ },
9380
+ {
9381
+ "name": "loading",
9382
+ "type": "boolean",
9383
+ "default": "false",
9384
+ "description": "Renders a skeleton shaped like the tile."
9385
+ },
9386
+ {
9387
+ "name": "msg",
9388
+ "type": "Record<string, unknown>",
9389
+ "default": null,
9390
+ "description": "Message overrides, keyed as `statTile.*`."
9391
+ }
9392
+ ],
9393
+ "events": [
9394
+ {
9395
+ "name": "click",
9396
+ "payload": "{event: MouseEvent}",
9397
+ "description": "Activation listener; its presence is what turns a tile with no href into a button. It is the tile's `click` event, as every Zx component's `on*` option is, so it receives the `CustomEvent` carrying the native event in `detail.event`."
9398
+ }
9399
+ ],
9400
+ "methods": [
9401
+ {
9402
+ "name": "update",
9403
+ "signature": "update(options)",
9404
+ "returns": "this",
9405
+ "description": "Replaces any subset of the tile's content and redraws it. This is how a tile leaves `loading: true` behind once the server answers."
9406
+ },
9407
+ {
9408
+ "name": "getAccessibleName",
9409
+ "signature": "getAccessibleName()",
9410
+ "returns": "string",
9411
+ "description": "Reports the tile's own accessible name, which is what assistive technology announces."
9412
+ },
9413
+ {
9414
+ "name": "destroy",
9415
+ "signature": "destroy()",
9416
+ "returns": "void",
9417
+ "description": "Aborts listeners and restores an adopted target to the state it was found in."
9418
+ }
9419
+ ]
9420
+ },
9421
+ "StatusIcon": {
9422
+ "options": [
9423
+ {
9424
+ "name": "indicator",
9425
+ "type": "StatusIndicator",
9426
+ "default": null,
9427
+ "description": "Shape, overriding the status's own."
9428
+ },
9429
+ {
9430
+ "name": "tone",
9431
+ "type": "StatusTone",
9432
+ "default": null,
9433
+ "description": "Colour, overriding the status's own."
9434
+ },
9435
+ {
9436
+ "name": "label",
9437
+ "type": "string|null",
9438
+ "default": "null",
9439
+ "description": "Accessible name. Without one the glyph is decorative (`aria-hidden`) and must sit beside text, or inside a control with a tooltip, that says the status."
9440
+ }
9441
+ ],
9442
+ "events": [],
9443
+ "methods": []
9444
+ },
7938
9445
  "Stepper": {
7939
9446
  "options": [
7940
9447
  {
@@ -8099,6 +9606,12 @@
8099
9606
  "type": "boolean",
8100
9607
  "default": "true",
8101
9608
  "description": "Keep inactive panel elements mounted."
9609
+ },
9610
+ {
9611
+ "name": "label",
9612
+ "type": "string",
9613
+ "default": null,
9614
+ "description": "Accessible name of the tab list — what the tabs switch between (\"Record sections\"). A tab list needs one whenever the page has more than one, and screen readers announce it on entry."
8102
9615
  }
8103
9616
  ],
8104
9617
  "events": [
@@ -8244,12 +9757,30 @@
8244
9757
  "default": "null",
8245
9758
  "description": "Additional row class callback."
8246
9759
  },
9760
+ {
9761
+ "name": "rowKind",
9762
+ "type": "string|((row: TableRow) => unknown)|null",
9763
+ "default": "null",
9764
+ "description": "Row property or callback naming each row's kind — the `type` on a ZeyOS transaction line, where one value is a position carrying quantities and amounts and another is a section heading that groups the positions under it. `null`, the default, renders every row exactly as before."
9765
+ },
9766
+ {
9767
+ "name": "rowKinds",
9768
+ "type": "Record<string, TableRowKind>|null",
9769
+ "default": "null",
9770
+ "description": "Presentation per kind, keyed by the resolved kind coerced to a string. A kind with no entry here renders as an ordinary row. While any row in the current data resolves to a `span` kind the header sort controls are withheld and `setSort()` is inert: sorting a grouped table scatters the positions out of their sections, and doing that silently is worse than not offering it. `sortMode: 'server'` still owns its own order."
9771
+ },
8247
9772
  {
8248
9773
  "name": "zebra",
8249
9774
  "type": "boolean",
8250
9775
  "default": "true",
8251
9776
  "description": "Whether alternate rows use the zebra background."
8252
9777
  },
9778
+ {
9779
+ "name": "variant",
9780
+ "type": "TableVariant",
9781
+ "default": "'default'",
9782
+ "description": "Frame treatment. `'default'` draws the table's own bordered box; `'plain'` is for a table inside a card or panel that already draws one — no outer frame, no header band, no zebra, hairline row dividers. Reflected as `data-variant` on the root."
9783
+ },
8253
9784
  {
8254
9785
  "name": "editMode",
8255
9786
  "type": "TableEditMode",
@@ -8483,7 +10014,7 @@
8483
10014
  "name": "setSort",
8484
10015
  "signature": "setSort(id, [dir], [options])",
8485
10016
  "returns": "this",
8486
- "description": "Activates a column sort. Local mode stably reorders data; server mode only updates the header state and emits the request event."
10017
+ "description": "Activates a column sort. Local mode stably reorders data; server mode only updates the header state and emits the request event. Inert while the data holds a spanning row: a sort would scatter the positions out of the sections that group them, in either sort mode. The header withholds its controls for the same reason, so nothing on screen invites the call."
8487
10018
  },
8488
10019
  {
8489
10020
  "name": "getSort",
@@ -8695,9 +10226,9 @@
8695
10226
  },
8696
10227
  {
8697
10228
  "name": "fieldControls",
8698
- "type": "boolean",
10229
+ "type": "boolean|import('../view/record-view.js').ViewFieldControlsConfig",
8699
10230
  "default": "true",
8700
- "description": "Show the accessible visibility and reorder disclosure."
10231
+ "description": "Show the accessible visibility and reorder disclosure. `true` keeps the composed Table's own column chooser and `false` omits it; an object renders the shared record-view chooser instead, with a translated `label` and, with `target`, mounted into a host element."
8701
10232
  },
8702
10233
  {
8703
10234
  "name": "emptyText",
@@ -8805,7 +10336,13 @@
8805
10336
  "name": "colorKey",
8806
10337
  "type": "TagValueReader",
8807
10338
  "default": "'color'",
8808
- "description": "Optional item colour property or reader."
10339
+ "description": "Optional item colour property or reader: a CSS colour or a token reference such as `var(--zx-color-tone-blue-fg)`."
10340
+ },
10341
+ {
10342
+ "name": "toneKey",
10343
+ "type": "TagValueReader",
10344
+ "default": "'tone'",
10345
+ "description": "Optional item tone property or reader: a categorical tone name from the Badge palette (`blue`, `teal`, `green`, `amber`, `orange`, `red`, `pink`, `violet`, `slate`). A toned tag takes the palette's fill and ink, as a Badge with that `tone` does; a tone wins over a colour, and unknown names are ignored."
8809
10346
  },
8810
10347
  {
8811
10348
  "name": "searchKeys",
@@ -8871,7 +10408,7 @@
8871
10408
  "name": "readonly",
8872
10409
  "type": "boolean",
8873
10410
  "default": "false",
8874
- "description": "Whether tags may be added or removed."
10411
+ "description": "When true the picker shows only its tags — no input, chevron, or remove buttons."
8875
10412
  },
8876
10413
  {
8877
10414
  "name": "renderItem",