@zeyos/zx 4.4.0 → 5.2.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 (252) hide show
  1. package/CHANGELOG.md +447 -0
  2. package/README.md +44 -11
  3. package/dist/types/components/account-menu/account-menu.d.ts +8 -0
  4. package/dist/types/components/activity-list/activity-list.d.ts +31 -1
  5. package/dist/types/components/app-icon/app-icon.d.ts +14 -2
  6. package/dist/types/components/app-sidebar/app-sidebar.d.ts +293 -17
  7. package/dist/types/components/avatar/avatar.d.ts +46 -7
  8. package/dist/types/components/badge/badge.d.ts +21 -1
  9. package/dist/types/components/button/button.d.ts +15 -0
  10. package/dist/types/components/calendar/calendar.d.ts +67 -5
  11. package/dist/types/components/card-view/card-view.d.ts +7 -4
  12. package/dist/types/components/card-view/record-card.d.ts +11 -0
  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 +6 -17
  16. package/dist/types/components/context-menu/context-menu.d.ts +6 -2
  17. package/dist/types/components/data-filter/data-filter.d.ts +4 -4
  18. package/dist/types/components/datebox/date-range-box.d.ts +5 -1
  19. package/dist/types/components/datebox/datebox.d.ts +7 -2
  20. package/dist/types/components/dialog/dialog.d.ts +46 -6
  21. package/dist/types/components/dropdown/dropdown.d.ts +24 -9
  22. package/dist/types/components/entity-ref/entity-ref.d.ts +2 -2
  23. package/dist/types/components/field/field.d.ts +54 -2
  24. package/dist/types/components/fieldset/external-adapter.d.ts +83 -0
  25. package/dist/types/components/fieldset/fieldset.d.ts +26 -1
  26. package/dist/types/components/file-item/file-item.d.ts +34 -6
  27. package/dist/types/components/file-list/file-list.d.ts +35 -3
  28. package/dist/types/components/filter/filter.d.ts +127 -3
  29. package/dist/types/components/filter-panel/filter-panel.d.ts +36 -7
  30. package/dist/types/components/form/form.d.ts +12 -1
  31. package/dist/types/components/kanban-view/kanban-card.d.ts +8 -0
  32. package/dist/types/components/launcher/launcher.d.ts +268 -15
  33. package/dist/types/components/list-toolbar/list-toolbar.d.ts +16 -7
  34. package/dist/types/components/menu-button/menu-button.d.ts +39 -5
  35. package/dist/types/components/message/message.d.ts +132 -17
  36. package/dist/types/components/modal/modal.d.ts +43 -2
  37. package/dist/types/components/module-bar/module-bar.d.ts +395 -0
  38. package/dist/types/components/pagination/pagination.d.ts +17 -3
  39. package/dist/types/components/select/color.d.ts +12 -0
  40. package/dist/types/components/select/glyphs.d.ts +124 -0
  41. package/dist/types/components/select/select.d.ts +17 -3
  42. package/dist/types/components/sheet/sheet.d.ts +15 -0
  43. package/dist/types/components/stat-tile/stat-tile.d.ts +16 -5
  44. package/dist/types/components/tabbox/tabbox.d.ts +9 -0
  45. package/dist/types/components/table/table.d.ts +311 -18
  46. package/dist/types/components/tag-picker/tag-picker.d.ts +21 -4
  47. package/dist/types/components/tree/tree.d.ts +13 -0
  48. package/dist/types/components/view/record-view.d.ts +59 -2
  49. package/dist/types/components/view-settings/view-settings.d.ts +879 -0
  50. package/dist/types/components/workspace-switcher/workspace-switcher.d.ts +327 -0
  51. package/dist/types/core/breakpoint.d.ts +1 -1
  52. package/dist/types/core/component.d.ts +12 -2
  53. package/dist/types/core/i18n.d.ts +27 -3
  54. package/dist/types/core/icons.d.ts +23 -25
  55. package/dist/types/core/keyboard.d.ts +98 -1
  56. package/dist/types/core/messages.d.ts +382 -0
  57. package/dist/types/core/motion.d.ts +59 -0
  58. package/dist/types/core/overlay-host.d.ts +42 -1
  59. package/dist/types/core/overlay-stack.d.ts +260 -0
  60. package/dist/types/index.d.ts +10 -5
  61. package/dist/types/internal/app-rail.d.ts +38 -0
  62. package/dist/types/internal/menu-items.d.ts +71 -3
  63. package/dist/types/zeyos/connect.d.ts +6 -0
  64. package/dist/types/zeyos/form.d.ts +50 -9
  65. package/dist/types/zeyos/index.d.ts +2 -1
  66. package/dist/types/zeyos/launcher.d.ts +9 -0
  67. package/dist/types/zeyos/module-bar.d.ts +176 -0
  68. package/dist/types/zeyos/query.d.ts +110 -5
  69. package/dist/types/zeyos/schema.d.ts +24 -1
  70. package/dist/types/zeyos/table.d.ts +345 -22
  71. package/dist/types/zeyos/view.d.ts +26 -2
  72. package/dist/zx-zeyos.esm.js +6178 -1008
  73. package/dist/zx-zeyos.esm.min.js +53 -5
  74. package/dist/zx.css +2861 -827
  75. package/dist/zx.esm.js +8909 -1480
  76. package/dist/zx.esm.min.js +55 -7
  77. package/dist/zx.global.js +8911 -1482
  78. package/dist/zx.global.min.js +55 -7
  79. package/dist/zx.min.css +1 -1
  80. package/docs/api.json +1079 -117
  81. package/docs/llms.md +956 -154
  82. package/docs/llms.txt +9 -5
  83. package/package.json +1 -1
  84. package/src/components/account-menu/account-menu.css +35 -10
  85. package/src/components/account-menu/account-menu.js +12 -0
  86. package/src/components/activity-item/activity-item.css +1 -1
  87. package/src/components/activity-item/activity-item.js +3 -0
  88. package/src/components/activity-list/activity-list.css +38 -3
  89. package/src/components/activity-list/activity-list.js +61 -1
  90. package/src/components/app-icon/app-icon.css +14 -3
  91. package/src/components/app-icon/app-icon.js +11 -1
  92. package/src/components/app-rail/app-rail.css +59 -79
  93. package/src/components/app-sidebar/app-sidebar.css +304 -168
  94. package/src/components/app-sidebar/app-sidebar.js +667 -46
  95. package/src/components/aurora/aurora.css +5 -3
  96. package/src/components/avatar/avatar.css +32 -7
  97. package/src/components/avatar/avatar.js +72 -8
  98. package/src/components/badge/badge.css +54 -2
  99. package/src/components/badge/badge.js +29 -2
  100. package/src/components/breadcrumb/breadcrumb.css +1 -1
  101. package/src/components/button/button.css +67 -9
  102. package/src/components/button/button.js +38 -0
  103. package/src/components/calendar/calendar.css +47 -47
  104. package/src/components/calendar/calendar.js +26 -52
  105. package/src/components/card/card.css +4 -4
  106. package/src/components/card-view/card-view.css +14 -12
  107. package/src/components/card-view/card-view.js +13 -9
  108. package/src/components/card-view/record-card.js +14 -3
  109. package/src/components/chart/chart.css +4 -1
  110. package/src/components/chart/chart.js +12 -0
  111. package/src/components/check-button/check-button.css +10 -2
  112. package/src/components/checklist/checklist.css +9 -2
  113. package/src/components/checklist/checklist.js +11 -5
  114. package/src/components/checklist/field-adapter.js +3 -1
  115. package/src/components/code-editor/code-editor.css +7 -6
  116. package/src/components/code-editor/code-editor.js +19 -1
  117. package/src/components/code-editor/field-adapter.js +9 -2
  118. package/src/components/context-menu/context-menu.css +9 -4
  119. package/src/components/context-menu/context-menu.js +8 -2
  120. package/src/components/copy/copy-button.css +6 -0
  121. package/src/components/copy/copy-input.css +9 -4
  122. package/src/components/data-filter/data-filter.css +5 -4
  123. package/src/components/data-filter/data-filter.js +2 -2
  124. package/src/components/date-picker/date-picker.css +6 -6
  125. package/src/components/date-picker/date-range-picker.css +3 -3
  126. package/src/components/date-picker/time-picker.css +3 -3
  127. package/src/components/datebox/date-range-box.css +79 -2
  128. package/src/components/datebox/date-range-box.js +13 -2
  129. package/src/components/datebox/datebox.css +79 -2
  130. package/src/components/datebox/datebox.js +13 -2
  131. package/src/components/dialog/dialog.css +26 -0
  132. package/src/components/dialog/dialog.js +99 -17
  133. package/src/components/dock/dock.css +5 -4
  134. package/src/components/dropdown/dropdown.css +1 -1
  135. package/src/components/dropdown/dropdown.js +159 -72
  136. package/src/components/empty-state/empty-state.css +2 -2
  137. package/src/components/entity-ref/entity-ref.css +1 -1
  138. package/src/components/entity-ref/entity-ref.js +1 -1
  139. package/src/components/field/field.css +28 -9
  140. package/src/components/field/field.js +101 -29
  141. package/src/components/field-upload/field-upload.css +1 -1
  142. package/src/components/fieldset/external-adapter.js +363 -0
  143. package/src/components/fieldset/fieldset.css +5 -3
  144. package/src/components/fieldset/fieldset.js +38 -64
  145. package/src/components/file-item/file-item.js +144 -10
  146. package/src/components/file-list/file-list.js +144 -21
  147. package/src/components/filter/filter.css +86 -2
  148. package/src/components/filter/filter.js +307 -11
  149. package/src/components/filter-panel/filter-panel.css +1 -1
  150. package/src/components/filter-panel/filter-panel.js +149 -32
  151. package/src/components/finder/finder.css +16 -14
  152. package/src/components/form/form.css +5 -4
  153. package/src/components/form/form.js +11 -2
  154. package/src/components/grid/grid.css +1 -1
  155. package/src/components/groupbox/groupbox.css +1 -1
  156. package/src/components/kanban-view/kanban-card.js +11 -3
  157. package/src/components/kanban-view/kanban-view.css +42 -18
  158. package/src/components/kanban-view/kanban-view.js +9 -6
  159. package/src/components/launcher/launcher.css +108 -26
  160. package/src/components/launcher/launcher.js +530 -42
  161. package/src/components/list-toolbar/list-toolbar.css +13 -8
  162. package/src/components/list-toolbar/list-toolbar.js +40 -14
  163. package/src/components/master-panel/master-panel.css +2 -0
  164. package/src/components/master-panel/master-panel.js +0 -1
  165. package/src/components/menu-button/menu-button.css +72 -4
  166. package/src/components/menu-button/menu-button.js +160 -18
  167. package/src/components/message/message.css +33 -3
  168. package/src/components/message/message.js +264 -22
  169. package/src/components/modal/modal.css +1 -1
  170. package/src/components/modal/modal.js +83 -15
  171. package/src/components/module-bar/module-bar.css +486 -0
  172. package/src/components/module-bar/module-bar.js +1074 -0
  173. package/src/components/multi-value-editor/multi-value-editor.css +1 -1
  174. package/src/components/navigation-bar/navigation-bar.css +18 -9
  175. package/src/components/number-field/field-adapter.js +3 -1
  176. package/src/components/number-field/number-field.css +70 -0
  177. package/src/components/number-field/number-field.js +2 -0
  178. package/src/components/pagination/pagination.css +13 -11
  179. package/src/components/pagination/pagination.js +20 -4
  180. package/src/components/panel/panel.css +4 -3
  181. package/src/components/questionnaire/questionnaire.css +4 -4
  182. package/src/components/rating/field-adapter.js +2 -1
  183. package/src/components/rating/rating.css +8 -1
  184. package/src/components/search/search.css +4 -1
  185. package/src/components/select/color.js +22 -0
  186. package/src/components/select/field-adapter.js +2 -0
  187. package/src/components/select/glyphs.js +165 -0
  188. package/src/components/select/select.css +138 -45
  189. package/src/components/select/select.js +92 -47
  190. package/src/components/sheet/sheet.css +12 -9
  191. package/src/components/sheet/sheet.js +74 -32
  192. package/src/components/slider/field-adapter.js +6 -1
  193. package/src/components/slider/slider.css +18 -4
  194. package/src/components/slider/slider.js +1 -1
  195. package/src/components/sort-control/sort-control.css +4 -1
  196. package/src/components/split-view/split-view.css +1 -1
  197. package/src/components/stat-tile/stat-tile.css +42 -47
  198. package/src/components/stat-tile/stat-tile.js +17 -6
  199. package/src/components/stepper/stepper.css +1 -1
  200. package/src/components/tabbox/tabbox.css +41 -32
  201. package/src/components/tabbox/tabbox.js +5 -1
  202. package/src/components/table/table.css +187 -37
  203. package/src/components/table/table.js +718 -73
  204. package/src/components/tag-picker/field-adapter.js +2 -1
  205. package/src/components/tag-picker/tag-picker.css +83 -5
  206. package/src/components/tag-picker/tag-picker.js +25 -8
  207. package/src/components/timebox/timebox.css +22 -2
  208. package/src/components/toggle/toggle.css +12 -1
  209. package/src/components/toolbar/toolbar.js +2 -2
  210. package/src/components/tooltip/tooltip.css +4 -0
  211. package/src/components/tooltip/tooltip.js +44 -19
  212. package/src/components/tree/tree.css +26 -17
  213. package/src/components/tree/tree.js +31 -0
  214. package/src/components/value-list/value-list.css +3 -3
  215. package/src/components/view/record-view.css +1 -1
  216. package/src/components/view/record-view.js +178 -18
  217. package/src/components/view-settings/view-settings.css +285 -0
  218. package/src/components/view-settings/view-settings.js +1830 -0
  219. package/src/components/workspace-switcher/workspace-switcher.css +188 -0
  220. package/src/components/workspace-switcher/workspace-switcher.js +463 -0
  221. package/src/core/breakpoint.js +1 -1
  222. package/src/core/component.js +88 -17
  223. package/src/core/fontawesome.js +5 -1
  224. package/src/core/i18n.js +47 -4
  225. package/src/core/icons.js +204 -61
  226. package/src/core/keyboard.js +206 -11
  227. package/src/core/messages.js +427 -0
  228. package/src/core/motion.js +147 -0
  229. package/src/core/overlay-host.js +77 -3
  230. package/src/core/overlay-stack.js +487 -0
  231. package/src/core/position.js +22 -3
  232. package/src/index.js +10 -5
  233. package/src/internal/app-rail.js +135 -55
  234. package/src/internal/menu-items.js +61 -3
  235. package/src/zeyos/connect.js +6 -2
  236. package/src/zeyos/form.js +69 -27
  237. package/src/zeyos/index.js +4 -1
  238. package/src/zeyos/launcher.js +8 -3
  239. package/src/zeyos/module-bar.js +181 -0
  240. package/src/zeyos/query.js +197 -13
  241. package/src/zeyos/schema.js +144 -27
  242. package/src/zeyos/table.js +287 -84
  243. package/src/zeyos/view.js +49 -93
  244. package/styles/base.css +72 -1
  245. package/styles/icons.css +11 -1
  246. package/styles/print.css +1 -1
  247. package/styles/tokens/dark.css +117 -37
  248. package/styles/tokens/global.css +121 -27
  249. package/styles/tokens/semantic.css +140 -43
  250. package/styles/tokens/themes.css +7 -6
  251. package/styles/zx.css +3 -1
  252. package/styles/tokens/density.css +0 -9
package/docs/api.json CHANGED
@@ -80,6 +80,12 @@
80
80
  "returns": "this",
81
81
  "description": "Replaces account presentation without touching session state."
82
82
  },
83
+ {
84
+ "name": "setCompact",
85
+ "signature": "setCompact(compact)",
86
+ "returns": "this",
87
+ "description": "Shows the avatar alone or the avatar with the name and secondary line — for a navigation column that narrows to icons and widens again. The trigger keeps its full accessible name either way."
88
+ },
83
89
  {
84
90
  "name": "setItems",
85
91
  "signature": "setItems(items)",
@@ -247,6 +253,12 @@
247
253
  "default": "'Activity'",
248
254
  "description": "Accessible collection name."
249
255
  },
256
+ {
257
+ "name": "variant",
258
+ "type": "ActivityListVariant",
259
+ "default": "'default'",
260
+ "description": "Entry layout, reflected as `data-variant` on the root. `'compact'` also makes an avatar descriptor without a `size` small."
261
+ },
250
262
  {
251
263
  "name": "loading",
252
264
  "type": "boolean",
@@ -384,7 +396,13 @@
384
396
  "name": "color",
385
397
  "type": "string|null",
386
398
  "default": "null",
387
- "description": "Identity colour; falls back to the accent colour."
399
+ "description": "Identity colour, any CSS colour; takes precedence over `tone`."
400
+ },
401
+ {
402
+ "name": "tone",
403
+ "type": "AppIconTone|null",
404
+ "default": "null",
405
+ "description": "Categorical identity colour from the theme's tone palette, drawn with its `--zx-color-tone-<tone>-solid` fill. Without `color` or `tone` the icon takes the accent."
388
406
  },
389
407
  {
390
408
  "name": "size",
@@ -455,9 +473,9 @@
455
473
  "options": [
456
474
  {
457
475
  "name": "items",
458
- "type": "AppNavItem[]",
476
+ "type": "AppNavItem[]|AppSidebarModule[]",
459
477
  "default": "[]",
460
- "description": "Application navigation tree."
478
+ "description": "Application navigation tree; in the modules layout its top level is the modules."
461
479
  },
462
480
  {
463
481
  "name": "active",
@@ -495,6 +513,42 @@
495
513
  "default": "'left'",
496
514
  "description": "Workspace edge occupied by navigation."
497
515
  },
516
+ {
517
+ "name": "layout",
518
+ "type": "'tree'|'modules'",
519
+ "default": "'tree'",
520
+ "description": "`'modules'` draws the top level as a module strip beside a panel showing one module's menu; minimized, the strip remains and menus open as flyouts."
521
+ },
522
+ {
523
+ "name": "module",
524
+ "type": "string|number|null",
525
+ "default": "null",
526
+ "description": "Modules layout: the module the panel shows first. Defaults to the module containing `active`, else the first module with a panel."
527
+ },
528
+ {
529
+ "name": "moduleBar",
530
+ "type": "AppSidebarModuleBarOptions",
531
+ "default": "{}",
532
+ "description": "Modules layout: strip presentation."
533
+ },
534
+ {
535
+ "name": "presentation",
536
+ "type": "'expanded'|'compact'|'collapsed'|null",
537
+ "default": "null",
538
+ "description": "Modules layout: how much of the navigation shows — both menus expanded (module names beside the side menu), the module menu collapsed to icons beside the side menu, or both collapsed to the icon strip. Defaults to `collapsed` ? `'collapsed'` : `'expanded'`."
539
+ },
540
+ {
541
+ "name": "presentations",
542
+ "type": "Array<'expanded'|'compact'|'collapsed'>",
543
+ "default": "['expanded','compact','collapsed']",
544
+ "description": "Modules layout: the presentations offered, widest first."
545
+ },
546
+ {
547
+ "name": "presentationSwitch",
548
+ "type": "boolean",
549
+ "default": "true",
550
+ "description": "Modules layout: whether the strip's foot carries the switch between presentations. Turn it off when the choice lives elsewhere — an account menu, through `presentationChoice()`."
551
+ },
498
552
  {
499
553
  "name": "label",
500
554
  "type": "string",
@@ -505,7 +559,7 @@
505
559
  "name": "header",
506
560
  "type": "Node|string|number|{toElement: () => Node|null}|null",
507
561
  "default": "null",
508
- "description": "Expanded header content."
562
+ "description": "Expanded header content; in the modules layout, content above every module's menu."
509
563
  },
510
564
  {
511
565
  "name": "footer",
@@ -517,13 +571,13 @@
517
571
  "name": "railHeader",
518
572
  "type": "Node|string|number|{toElement: () => Node|null}|null",
519
573
  "default": "null",
520
- "description": "Minimized leading content."
574
+ "description": "Minimized leading content; in the modules layout, the strip's leading content in both states."
521
575
  },
522
576
  {
523
577
  "name": "railFooter",
524
578
  "type": "Node|string|number|{toElement: () => Node|null}|null",
525
579
  "default": "null",
526
- "description": "Minimized trailing content."
580
+ "description": "Minimized trailing content; in the modules layout, the strip's trailing content in both states."
527
581
  },
528
582
  {
529
583
  "name": "openDelay",
@@ -564,6 +618,16 @@
564
618
  "name": "flyoutchange",
565
619
  "payload": "{item: AppNavItem, id: string|number, open: boolean}",
566
620
  "description": "Minimized flyout-state listener."
621
+ },
622
+ {
623
+ "name": "modulechange",
624
+ "payload": "{item: AppNavItem, id: string|number, previous: string|number|null}",
625
+ "description": "Preventable module-switch listener."
626
+ },
627
+ {
628
+ "name": "presentationchange",
629
+ "payload": "{presentation: 'expanded'|'compact'|'collapsed', previous: 'expanded'|'compact'|'collapsed'}",
630
+ "description": "Presentation listener."
567
631
  }
568
632
  ],
569
633
  "methods": [
@@ -577,13 +641,55 @@
577
641
  "name": "getItems",
578
642
  "signature": "getItems()",
579
643
  "returns": "AppNavItem[]",
580
- "description": "Returns a shallow copy of normalized items."
644
+ "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."
581
645
  },
582
646
  {
583
647
  "name": "setActive",
584
648
  "signature": "setActive(id)",
585
649
  "returns": "this",
586
- "description": "Sets the active id without routing."
650
+ "description": "Sets the active id without routing. In the modules layout the panel follows the active route into its module."
651
+ },
652
+ {
653
+ "name": "setBadge",
654
+ "signature": "setBadge(id, badge)",
655
+ "returns": "this",
656
+ "description": "Updates one badge — a module's, or any destination's — without rebuilding the navigation."
657
+ },
658
+ {
659
+ "name": "setModule",
660
+ "signature": "setModule(id, [options])",
661
+ "returns": "this",
662
+ "description": "Modules layout: shows a module's menu in the panel. Fires a preventable `modulechange` unless silent."
663
+ },
664
+ {
665
+ "name": "getModule",
666
+ "signature": "getModule()",
667
+ "returns": "string|number|null",
668
+ "description": "Modules layout: the module whose menu the panel shows."
669
+ },
670
+ {
671
+ "name": "setModuleLabels",
672
+ "signature": "setModuleLabels(labels)",
673
+ "returns": "this",
674
+ "description": "Modules layout: whether the strip prints module names — `'auto'` (beside the tiles while expanded, none while collapsed), `'beside'`, `'below'`, or `'hidden'`. A narrow drawer that has no room for a labelled strip beside the panel sets `'hidden'`."
675
+ },
676
+ {
677
+ "name": "getPresentation",
678
+ "signature": "getPresentation()",
679
+ "returns": "'expanded'|'compact'|'collapsed'",
680
+ "description": "How much of the navigation shows: `'expanded'` (in the modules layout, both menus), `'compact'` (the module menu collapsed to icons beside the side menu), or `'collapsed'`."
681
+ },
682
+ {
683
+ "name": "setPresentation",
684
+ "signature": "setPresentation(presentation, [options])",
685
+ "returns": "this",
686
+ "description": "Shows the navigation as `'expanded'`, `'compact'` (modules layout), or `'collapsed'`."
687
+ },
688
+ {
689
+ "name": "togglePresentation",
690
+ "signature": "togglePresentation()",
691
+ "returns": "this",
692
+ "description": "Moves to the next presentation the strip's switch offers, wrapping (Mod+B in an application)."
587
693
  },
588
694
  {
589
695
  "name": "setExpanded",
@@ -661,16 +767,52 @@
661
767
  "name": "focus",
662
768
  "signature": "focus()",
663
769
  "returns": "this",
664
- "description": "Focuses the first navigation action."
770
+ "description": "Focuses the first navigation action: the module strip's Tab stop in the modules layout."
665
771
  },
666
772
  {
667
773
  "name": "destroy",
668
774
  "signature": "destroy()",
669
775
  "returns": "void",
670
776
  "description": "Destroys flyouts and restores/removes the host."
777
+ },
778
+ {
779
+ "name": "presentationChoice",
780
+ "signature": "presentationChoice([options])",
781
+ "returns": "import('../../internal/menu-items.js').MenuChoice",
782
+ "description": "The choice between presentations as a menu entry, for an account or settings menu that holds it instead of the strip: `account.setItems([sidebar.presentationChoice(), …])`. It reads the current presentation when called, so rebuild it after `presentationchange`."
671
783
  }
672
784
  ]
673
785
  },
786
+ "AppSidebarModuleBar": {
787
+ "options": [
788
+ {
789
+ "name": "appearance",
790
+ "type": "'tint'|'solid'|'plain'",
791
+ "default": "'tint'",
792
+ "description": "Tile treatment."
793
+ },
794
+ {
795
+ "name": "labels",
796
+ "type": "'auto'|'beside'|'below'|'hidden'",
797
+ "default": "'auto'",
798
+ "description": "Module names on the strip: `'auto'` prints them beside the tiles while expanded and leaves the icons alone while collapsed; `'hidden'` keeps the icon strip beside the panel; `'below'` prints them under the tiles."
799
+ },
800
+ {
801
+ "name": "allModules",
802
+ "type": "'auto'|'always'|'never'",
803
+ "default": "'auto'",
804
+ "description": "The \"All modules\" button."
805
+ },
806
+ {
807
+ "name": "label",
808
+ "type": "string|null",
809
+ "default": "null",
810
+ "description": "Strip accessible label; omitted resolves `moduleBar.label`."
811
+ }
812
+ ],
813
+ "events": [],
814
+ "methods": []
815
+ },
674
816
  "Aspect": {
675
817
  "options": [
676
818
  {
@@ -756,7 +898,7 @@
756
898
  "name": "name",
757
899
  "type": "string",
758
900
  "default": "''",
759
- "description": "Name used to derive fallback initials."
901
+ "description": "Name used to derive the fallback initials and tone."
760
902
  },
761
903
  {
762
904
  "name": "initials",
@@ -774,7 +916,7 @@
774
916
  "name": "size",
775
917
  "type": "string|number",
776
918
  "default": "'md'",
777
- "description": "Preset (`sm`, `md`, `lg`) or pixel size."
919
+ "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."
778
920
  },
779
921
  {
780
922
  "name": "shape",
@@ -782,6 +924,12 @@
782
924
  "default": "'circle'",
783
925
  "description": "Avatar shape."
784
926
  },
927
+ {
928
+ "name": "tone",
929
+ "type": "AvatarTone|null",
930
+ "default": "null",
931
+ "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}."
932
+ },
785
933
  {
786
934
  "name": "status",
787
935
  "type": "'online'|'away'|'busy'|'offline'|null",
@@ -843,6 +991,12 @@
843
991
  "default": "'neutral'",
844
992
  "description": "Semantic intent."
845
993
  },
994
+ {
995
+ "name": "tone",
996
+ "type": "BadgeTone|null",
997
+ "default": "null",
998
+ "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."
999
+ },
846
1000
  {
847
1001
  "name": "variant",
848
1002
  "type": "'soft'|'solid'|'outline'",
@@ -1054,6 +1208,12 @@
1054
1208
  "default": "false",
1055
1209
  "description": "Whether the button is disabled."
1056
1210
  },
1211
+ {
1212
+ "name": "busy",
1213
+ "type": "boolean",
1214
+ "default": "false",
1215
+ "description": "Whether the button is working on its action — see `setButtonBusy()`."
1216
+ },
1057
1217
  {
1058
1218
  "name": "title",
1059
1219
  "type": "string",
@@ -1274,7 +1434,7 @@
1274
1434
  "name": "msg",
1275
1435
  "type": "Record<string, string>",
1276
1436
  "default": null,
1277
- "description": "Localized component messages."
1437
+ "description": "Per-instance messages, keyed `calendar.*` (`calendar.today`, `calendar.next`, …). The bare keys of earlier versions (`today`, `next`) are still read, after the namespaced key, until the next major version."
1278
1438
  },
1279
1439
  {
1280
1440
  "name": "renderEvent",
@@ -1751,9 +1911,9 @@
1751
1911
  },
1752
1912
  {
1753
1913
  "name": "label",
1754
- "type": "string",
1755
- "default": "'Card view'",
1756
- "description": "Accessible collection label."
1914
+ "type": "string|null",
1915
+ "default": "null",
1916
+ "description": "Accessible collection label; null resolves message `cardView.label`, \"Card view\"."
1757
1917
  }
1758
1918
  ],
1759
1919
  "events": [
@@ -2079,6 +2239,12 @@
2079
2239
  "default": "false",
2080
2240
  "description": "Fallback initial checked state."
2081
2241
  },
2242
+ {
2243
+ "name": "hideLabel",
2244
+ "type": "boolean",
2245
+ "default": "false",
2246
+ "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."
2247
+ },
2082
2248
  {
2083
2249
  "name": "load",
2084
2250
  "type": "(() => Promise<ChecklistItem[]>|ChecklistItem[])|null",
@@ -2282,6 +2448,12 @@
2282
2448
  "type": "boolean",
2283
2449
  "default": "false",
2284
2450
  "description": "Whether the confirmation action is dangerous."
2451
+ },
2452
+ {
2453
+ "name": "confirmText",
2454
+ "type": "string|null",
2455
+ "default": "null",
2456
+ "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."
2285
2457
  }
2286
2458
  ],
2287
2459
  "events": [],
@@ -2515,7 +2687,7 @@
2515
2687
  "name": "clearLabel",
2516
2688
  "type": "string|null",
2517
2689
  "default": "null",
2518
- "description": "Clear button label; null resolves `dataFilter.clear`."
2690
+ "description": "Clear button label; null resolves message `dataFilter.clear`, \"Clear\"."
2519
2691
  }
2520
2692
  ],
2521
2693
  "events": [
@@ -2678,7 +2850,7 @@
2678
2850
  "name": "clearable",
2679
2851
  "type": "boolean",
2680
2852
  "default": "true",
2681
- "description": "Show a clear button while a range is present."
2853
+ "description": "Show a clear button while a range is present and the box is enabled; without it the input keeps no room for one."
2682
2854
  },
2683
2855
  {
2684
2856
  "name": "min",
@@ -2987,7 +3159,7 @@
2987
3159
  "name": "clearable",
2988
3160
  "type": "boolean",
2989
3161
  "default": "true",
2990
- "description": "Show a clear button when a value is present."
3162
+ "description": "Show a clear button while a value is present and the box is enabled; without it the input keeps no room for one."
2991
3163
  },
2992
3164
  {
2993
3165
  "name": "disabled",
@@ -3105,7 +3277,7 @@
3105
3277
  "name": "scope",
3106
3278
  "type": "Element|string|null",
3107
3279
  "default": "null",
3108
- "description": "Element whose nearest Zx theme scope owns the overlay; defaults to the opener."
3280
+ "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."
3109
3281
  }
3110
3282
  ],
3111
3283
  "events": [
@@ -3178,7 +3350,7 @@
3178
3350
  "name": "confirm",
3179
3351
  "signature": "confirm([options])",
3180
3352
  "returns": "Promise<boolean>",
3181
- "description": "Opens a confirmation dialog."
3353
+ "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."
3182
3354
  },
3183
3355
  {
3184
3356
  "name": "prompt",
@@ -3443,7 +3615,7 @@
3443
3615
  "name": "scope",
3444
3616
  "type": "Element|string|null",
3445
3617
  "default": "null",
3446
- "description": "Element whose nearest Zx theme scope owns the panel; defaults to the anchor."
3618
+ "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."
3447
3619
  }
3448
3620
  ],
3449
3621
  "events": [
@@ -3593,7 +3765,7 @@
3593
3765
  "name": "size",
3594
3766
  "type": "'sm'|'md'|'lg'",
3595
3767
  "default": "'md'",
3596
- "description": "Density-independent identity size."
3768
+ "description": "Size of the icon and the identity text."
3597
3769
  },
3598
3770
  {
3599
3771
  "name": "wrap",
@@ -3695,7 +3867,7 @@
3695
3867
  "name": "colorKey",
3696
3868
  "type": "string|((item: SelectItem)=>unknown)",
3697
3869
  "default": "'color'",
3698
- "description": "Optional icon colour reader."
3870
+ "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."
3699
3871
  },
3700
3872
  {
3701
3873
  "name": "subtitleKey",
@@ -3719,7 +3891,13 @@
3719
3891
  "name": "id",
3720
3892
  "type": "string|null",
3721
3893
  "default": "null",
3722
- "description": "Control ID and logical field identifier."
3894
+ "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."
3895
+ },
3896
+ {
3897
+ "name": "name",
3898
+ "type": "string|null",
3899
+ "default": "null",
3900
+ "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`."
3723
3901
  },
3724
3902
  {
3725
3903
  "name": "type",
@@ -3763,6 +3941,12 @@
3763
3941
  "default": "false",
3764
3942
  "description": "Whether the control is disabled."
3765
3943
  },
3944
+ {
3945
+ "name": "readonly",
3946
+ "type": "boolean",
3947
+ "default": "false",
3948
+ "description": "Whether the value is read-only: shown and focusable, not editable. Types whose control has no read-only state (`checkbox`, `select`, `optionlist`, `zxselect`, `date`, `time`, …) ignore it."
3949
+ },
3766
3950
  {
3767
3951
  "name": "options",
3768
3952
  "type": "string[]|Record<string, string>|null",
@@ -3843,6 +4027,12 @@
3843
4027
  "returns": "this",
3844
4028
  "description": "Enables or disables the adapter control."
3845
4029
  },
4030
+ {
4031
+ "name": "setReadonly",
4032
+ "signature": "setReadonly(readonly)",
4033
+ "returns": "this",
4034
+ "description": "Makes the value read-only or editable again, where the control has a read-only state (see the `readonly` option); reflected as `data-readonly` on the root either way."
4035
+ },
3846
4036
  {
3847
4037
  "name": "setHighlight",
3848
4038
  "signature": "setHighlight(message, [kind])",
@@ -4005,6 +4195,12 @@
4005
4195
  "type": "Record<string, FieldOptions|Field|Element|Component>",
4006
4196
  "default": "{}",
4007
4197
  "description": "Initial fields."
4198
+ },
4199
+ {
4200
+ "name": "idPrefix",
4201
+ "type": "string|null",
4202
+ "default": "null",
4203
+ "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."
4008
4204
  }
4009
4205
  ],
4010
4206
  "events": [],
@@ -4013,7 +4209,7 @@
4013
4209
  "name": "addField",
4014
4210
  "signature": "addField(id, field)",
4015
4211
  "returns": "Field",
4016
- "description": "Adds a field from options, an existing field, an element, or a component."
4212
+ "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. An element or a component that is not a registered field type is wrapped in a `custom` field that reads and writes it through its own API — `getValue`/`setValue`, `get`/`set`, `getValues`/`setValues`, `isChecked`/`setChecked`, or a `value` property — disables it through `setDisabled(bool)` or `enable()`/`disable()`, and makes it read-only through `setReadonly(bool)`, falling back to the element's native properties only when the component has none of these. The component's own `change` becomes the field's `change`, once per edit."
4017
4213
  },
4018
4214
  {
4019
4215
  "name": "getField",
@@ -4113,7 +4309,13 @@
4113
4309
  "name": "mime",
4114
4310
  "type": "string",
4115
4311
  "default": "''",
4116
- "description": "MIME type."
4312
+ "description": "MIME type. Shown as a readable type (\"PDF\", \"Image\"), never as the raw string, and used to pick the icon."
4313
+ },
4314
+ {
4315
+ "name": "typeLabel",
4316
+ "type": "string|null",
4317
+ "default": "null",
4318
+ "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."
4117
4319
  },
4118
4320
  {
4119
4321
  "name": "subtitle",
@@ -4125,7 +4327,7 @@
4125
4327
  "name": "icon",
4126
4328
  "type": "EntityRefIcon",
4127
4329
  "default": "'file'",
4128
- "description": "File icon name, node, component, or lazy renderer."
4330
+ "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."
4129
4331
  },
4130
4332
  {
4131
4333
  "name": "metadata",
@@ -4170,10 +4372,10 @@
4170
4372
  "description": "Whether active progress has no known amount."
4171
4373
  },
4172
4374
  {
4173
- "name": "density",
4375
+ "name": "identitySize",
4174
4376
  "type": "'sm'|'md'|'lg'",
4175
4377
  "default": "'md'",
4176
- "description": "File-identity presentation size."
4378
+ "description": "Size of the file's icon and name."
4177
4379
  },
4178
4380
  {
4179
4381
  "name": "wrap",
@@ -4394,13 +4596,13 @@
4394
4596
  "name": "searchable",
4395
4597
  "type": "boolean",
4396
4598
  "default": "false",
4397
- "description": "Searchable field, operator and single-choice controls."
4599
+ "description": "Searchable field, operator and single-choice controls; a many-valued operator on a field with static choices gets a `TagPicker`."
4398
4600
  },
4399
4601
  {
4400
4602
  "name": "layout",
4401
4603
  "type": "'standard'|'compact'",
4402
4604
  "default": "'standard'",
4403
- "description": "Condition layout; compact rows adapt to container width."
4605
+ "description": "Condition layout; compact rows adapt to container width and show the group's \"and\"/\"or\" between them, a click on it switching the group's logic."
4404
4606
  },
4405
4607
  {
4406
4608
  "name": "rootLogic",
@@ -4584,6 +4786,12 @@
4584
4786
  "default": "'seconds'",
4585
4787
  "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."
4586
4788
  },
4789
+ {
4790
+ "name": "timeZone",
4791
+ "type": "string|null",
4792
+ "default": "null",
4793
+ "description": "IANA zone the calendar days are counted in, such as the ZeyOS instance's `Europe/Vienna`. A day serializes as the first (or last) instant of that day in this zone, and an incoming instant shows as the day it falls on there — the same rule `zeyosForm()` and `zeyosTable()` apply to date-only fields. Null uses the runtime's own zone. An unknown zone throws a `RangeError`."
4794
+ },
4587
4795
  {
4588
4796
  "name": "emptyText",
4589
4797
  "type": "string|null",
@@ -4822,6 +5030,12 @@
4822
5030
  "type": "boolean",
4823
5031
  "default": "true",
4824
5032
  "description": "Native `novalidate` state."
5033
+ },
5034
+ {
5035
+ "name": "idPrefix",
5036
+ "type": "string|null",
5037
+ "default": "null",
5038
+ "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."
4825
5039
  }
4826
5040
  ],
4827
5041
  "events": [
@@ -4846,7 +5060,7 @@
4846
5060
  "name": "addFieldset",
4847
5061
  "signature": "addFieldset(fieldset)",
4848
5062
  "returns": "Fieldset",
4849
- "description": "Adds an existing fieldset or constructs one from options."
5063
+ "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."
4850
5064
  },
4851
5065
  {
4852
5066
  "name": "setActions",
@@ -5739,7 +5953,7 @@
5739
5953
  },
5740
5954
  {
5741
5955
  "name": "hints",
5742
- "type": "false|{move?: string, open?: string, close?: string}",
5956
+ "type": "false|{move?: string, open?: string, back?: string, close?: string}",
5743
5957
  "default": null,
5744
5958
  "description": "Visible keyboard hints, or false."
5745
5959
  },
@@ -5753,7 +5967,7 @@
5753
5967
  "events": [
5754
5968
  {
5755
5969
  "name": "select",
5756
- "payload": "{item, value, source, query}",
5970
+ "payload": "{item, value, source, query, page}",
5757
5971
  "description": "Preventable selection listener."
5758
5972
  },
5759
5973
  {
@@ -5761,6 +5975,11 @@
5761
5975
  "payload": "{query: string}",
5762
5976
  "description": "Query-change listener."
5763
5977
  },
5978
+ {
5979
+ "name": "page",
5980
+ "payload": "{page, path}",
5981
+ "description": "Page-navigation listener."
5982
+ },
5764
5983
  {
5765
5984
  "name": "open",
5766
5985
  "payload": "Record<string, never>",
@@ -5773,16 +5992,28 @@
5773
5992
  },
5774
5993
  {
5775
5994
  "name": "error",
5776
- "payload": "{source: LauncherSource, error: unknown}",
5995
+ "payload": "{source, error, page}",
5777
5996
  "description": "Source error listener."
5778
5997
  }
5779
5998
  ],
5780
5999
  "methods": [
5781
6000
  {
5782
6001
  "name": "open",
5783
- "signature": "open()",
6002
+ "signature": "open([options])",
5784
6003
  "returns": "this",
5785
- "description": "Opens the launcher and focuses/selects its query."
6004
+ "description": "Opens the launcher and focuses/selects its query. It opens on the root unless `page` names one; already open, `page` navigates there."
6005
+ },
6006
+ {
6007
+ "name": "back",
6008
+ "signature": "back()",
6009
+ "returns": "this",
6010
+ "description": "Goes back one page, restoring the level beneath with its query and highlighted option. Does nothing on the root."
6011
+ },
6012
+ {
6013
+ "name": "getPage",
6014
+ "signature": "getPage()",
6015
+ "returns": "LauncherItem|null",
6016
+ "description": "Returns the page shown, or null on the root."
5786
6017
  },
5787
6018
  {
5788
6019
  "name": "close",
@@ -5824,7 +6055,7 @@
5824
6055
  "name": "setItems",
5825
6056
  "signature": "setItems(items)",
5826
6057
  "returns": "this",
5827
- "description": "Replaces local catalogue items."
6058
+ "description": "Replaces the root's local catalogue items; an open page keeps its own."
5828
6059
  },
5829
6060
  {
5830
6061
  "name": "setCurrent",
@@ -5836,7 +6067,7 @@
5836
6067
  "name": "setSources",
5837
6068
  "signature": "setSources(sources)",
5838
6069
  "returns": "this",
5839
- "description": "Replaces asynchronous sources and aborts work from the old set."
6070
+ "description": "Replaces the root's asynchronous sources and aborts work from the old set; on a page they load once the root is back."
5840
6071
  },
5841
6072
  {
5842
6073
  "name": "destroy",
@@ -5846,6 +6077,18 @@
5846
6077
  }
5847
6078
  ]
5848
6079
  },
6080
+ "LauncherOpen": {
6081
+ "options": [
6082
+ {
6083
+ "name": "page",
6084
+ "type": "string|number|LauncherItem",
6085
+ "default": null,
6086
+ "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."
6087
+ }
6088
+ ],
6089
+ "events": [],
6090
+ "methods": []
6091
+ },
5849
6092
  "LayoutGrid": {
5850
6093
  "options": [
5851
6094
  {
@@ -6039,7 +6282,7 @@
6039
6282
  "name": "bind",
6040
6283
  "signature": "bind(view)",
6041
6284
  "returns": "this",
6042
- "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."
6285
+ "description": "Optional sugar for a `TableView`, `CardView`, or `KanbanView`: it wires the shape switch to the view and mounts the view's field chooser into this bar — through the view's public `mountFieldControls()` when it has one, which every `RecordView` does. A `TableView` with the default `fieldControls: true` contributes its Table's column chooser. 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."
6043
6286
  },
6044
6287
  {
6045
6288
  "name": "unbind",
@@ -6175,7 +6418,7 @@
6175
6418
  },
6176
6419
  {
6177
6420
  "name": "open",
6178
- "signature": "open()",
6421
+ "signature": "open([options])",
6179
6422
  "returns": "this",
6180
6423
  "description": "Opens the menu."
6181
6424
  },
@@ -6185,6 +6428,12 @@
6185
6428
  "returns": "this",
6186
6429
  "description": "Closes the menu."
6187
6430
  },
6431
+ {
6432
+ "name": "toggle",
6433
+ "signature": "toggle()",
6434
+ "returns": "this",
6435
+ "description": "Opens the menu when it is closed, and closes it when it is open. Opening this way moves no focus; `focusFirst()` opens with focus on the first item."
6436
+ },
6188
6437
  {
6189
6438
  "name": "isOpen",
6190
6439
  "signature": "isOpen()",
@@ -6205,13 +6454,13 @@
6205
6454
  },
6206
6455
  {
6207
6456
  "name": "focusFirst",
6208
- "signature": "focusFirst()",
6457
+ "signature": "focusFirst([options])",
6209
6458
  "returns": "this",
6210
6459
  "description": "Opens the menu and focuses its first enabled item."
6211
6460
  },
6212
6461
  {
6213
6462
  "name": "focusLast",
6214
- "signature": "focusLast()",
6463
+ "signature": "focusLast([options])",
6215
6464
  "returns": "this",
6216
6465
  "description": "Opens the menu and focuses its last enabled item."
6217
6466
  },
@@ -6229,6 +6478,18 @@
6229
6478
  }
6230
6479
  ]
6231
6480
  },
6481
+ "MenuButtonOpen": {
6482
+ "options": [
6483
+ {
6484
+ "name": "returnFocus",
6485
+ "type": "boolean|HTMLElement",
6486
+ "default": "true",
6487
+ "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."
6488
+ }
6489
+ ],
6490
+ "events": [],
6491
+ "methods": []
6492
+ },
6232
6493
  "Message": {
6233
6494
  "options": [
6234
6495
  {
@@ -6296,7 +6557,7 @@
6296
6557
  "name": "timeout",
6297
6558
  "type": "number",
6298
6559
  "default": "4000",
6299
- "description": "Auto-dismiss delay in milliseconds; zero persists."
6560
+ "description": "Auto-dismiss delay in milliseconds; zero persists. A message with an `action` stays at least 8000ms."
6300
6561
  },
6301
6562
  {
6302
6563
  "name": "closable",
@@ -6304,6 +6565,18 @@
6304
6565
  "default": "true",
6305
6566
  "description": "Whether to render a close button."
6306
6567
  },
6568
+ {
6569
+ "name": "action",
6570
+ "type": "MessageAction|null",
6571
+ "default": "null",
6572
+ "description": "A command button inside the message. The message never times out while the pointer is over it or focus is inside it."
6573
+ },
6574
+ {
6575
+ "name": "leading",
6576
+ "type": "Node|{toElement: () => Node|null}|null",
6577
+ "default": "null",
6578
+ "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."
6579
+ },
6307
6580
  {
6308
6581
  "name": "scope",
6309
6582
  "type": "Element|string|null",
@@ -6350,7 +6623,7 @@
6350
6623
  "name": "scope",
6351
6624
  "type": "Element|string|null",
6352
6625
  "default": "null",
6353
- "description": "Element whose nearest Zx theme scope owns the overlay; defaults to the opener."
6626
+ "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."
6354
6627
  }
6355
6628
  ],
6356
6629
  "events": [
@@ -6409,92 +6682,312 @@
6409
6682
  }
6410
6683
  ]
6411
6684
  },
6412
- "MonthPicker": {
6685
+ "ModuleBar": {
6413
6686
  "options": [
6414
6687
  {
6415
- "name": "value",
6416
- "type": "Date|null",
6417
- "default": "null",
6418
- "description": "Initially selected month."
6688
+ "name": "items",
6689
+ "type": "ModuleItem[]",
6690
+ "default": "[]",
6691
+ "description": "Modules, in bar order."
6419
6692
  },
6420
6693
  {
6421
- "name": "min",
6422
- "type": "Date|null",
6694
+ "name": "active",
6695
+ "type": "string|number|null",
6423
6696
  "default": "null",
6424
- "description": "Earliest selectable month."
6697
+ "description": "Active destination id: a module, or any item in a module's menu."
6425
6698
  },
6426
6699
  {
6427
- "name": "max",
6428
- "type": "Date|null",
6429
- "default": "null",
6430
- "description": "Latest selectable month."
6431
- }
6432
- ],
6433
- "events": [
6700
+ "name": "orientation",
6701
+ "type": "'vertical'|'horizontal'",
6702
+ "default": "'vertical'",
6703
+ "description": "Bar flow."
6704
+ },
6434
6705
  {
6435
- "name": "change",
6436
- "payload": "{date: Date|null}",
6437
- "description": "Change listener."
6438
- }
6439
- ],
6440
- "methods": [
6706
+ "name": "side",
6707
+ "type": "'left'|'right'|'top'|'bottom'",
6708
+ "default": "'left'",
6709
+ "description": "Workspace edge the bar occupies."
6710
+ },
6441
6711
  {
6442
- "name": "set",
6443
- "signature": "set(date, [options])",
6444
- "returns": "this",
6445
- "description": "Selects the first day of a month."
6712
+ "name": "appearance",
6713
+ "type": "'tint'|'solid'|'plain'",
6714
+ "default": "'tint'",
6715
+ "description": "Tile treatment: the glyph in the module colour on a tint of it, the solid identity tile, or monochrome glyphs."
6446
6716
  },
6447
6717
  {
6448
- "name": "destroy",
6449
- "signature": "destroy()",
6450
- "returns": "void",
6451
- "description": "Removes generated content from an enhanced target."
6452
- }
6453
- ]
6454
- },
6455
- "MultiValueEditor": {
6456
- "options": [
6718
+ "name": "labels",
6719
+ "type": "'hidden'|'below'|'beside'",
6720
+ "default": "'hidden'",
6721
+ "description": "Whether a vertical bar prints each module's name: under its tile (a narrow strip), beside it (a full navigation column, with the count at the end of the row), or not at all — the name then stays the accessible name and the tooltip. Horizontal bars never print names."
6722
+ },
6457
6723
  {
6458
- "name": "values",
6459
- "type": "unknown[]",
6460
- "default": "[]",
6461
- "description": "Initial ordered values."
6724
+ "name": "menus",
6725
+ "type": "'flyout'|'none'",
6726
+ "default": "'flyout'",
6727
+ "description": "How a module's children are presented: in a flyout, or by an adjacent panel the application owns, in which case activating the module emits `select`."
6462
6728
  },
6463
6729
  {
6464
- "name": "options",
6465
- "type": "unknown[]|Record<string, string>|null",
6730
+ "name": "expanded",
6731
+ "type": "string|number|null",
6466
6732
  "default": "null",
6467
- "description": "Allowed values; null uses text inputs."
6733
+ "description": "With `menus: 'none'`, the module whose menu the adjacent panel shows."
6468
6734
  },
6469
6735
  {
6470
- "name": "addLabel",
6471
- "type": "string",
6472
- "default": "'Add value'",
6473
- "description": "Add-row button text."
6736
+ "name": "controls",
6737
+ "type": "string|null",
6738
+ "default": "null",
6739
+ "description": "With `menus: 'none'`, the id of that panel."
6474
6740
  },
6475
6741
  {
6476
- "name": "reorder",
6477
- "type": "'both'|'buttons'|'drag'|'none'",
6478
- "default": "'both'",
6479
- "description": "Reordering affordances each row gets: a drag handle, the up/down buttons, both, or neither."
6480
- }
6481
- ],
6482
- "events": [
6483
- {
6484
- "name": "change",
6485
- "payload": "{values: string[]}",
6486
- "description": "Values change listener."
6487
- }
6488
- ],
6489
- "methods": [
6742
+ "name": "allModules",
6743
+ "type": "'auto'|'always'|'never'",
6744
+ "default": "'auto'",
6745
+ "description": "The \"All modules\" button: shown when a module does not fit or is unpinned, always, or never (the bar then scrolls)."
6746
+ },
6490
6747
  {
6491
- "name": "getValues",
6492
- "signature": "getValues()",
6493
- "returns": "string[]",
6494
- "description": "Returns a copy of the ordered values."
6748
+ "name": "header",
6749
+ "type": "Node|string|number|{toElement: () => Node|null}|null",
6750
+ "default": "null",
6751
+ "description": "Leading content, such as a product mark."
6495
6752
  },
6496
6753
  {
6497
- "name": "setValues",
6754
+ "name": "footer",
6755
+ "type": "Node|string|number|{toElement: () => Node|null}|null",
6756
+ "default": "null",
6757
+ "description": "Trailing content, such as an account menu."
6758
+ },
6759
+ {
6760
+ "name": "label",
6761
+ "type": "string|null",
6762
+ "default": "null",
6763
+ "description": "Navigation accessible label. Omitted resolves `moduleBar.label`, English `Modules`."
6764
+ },
6765
+ {
6766
+ "name": "openDelay",
6767
+ "type": "number",
6768
+ "default": "80",
6769
+ "description": "Flyout hover-open delay in milliseconds."
6770
+ },
6771
+ {
6772
+ "name": "closeDelay",
6773
+ "type": "number",
6774
+ "default": "160",
6775
+ "description": "Flyout pointer and focus crossing grace in milliseconds."
6776
+ },
6777
+ {
6778
+ "name": "renderIcon",
6779
+ "type": "(item: AppNavItem, context: Record<string, any>) => Node|null",
6780
+ "default": null,
6781
+ "description": "Optional host icon renderer."
6782
+ }
6783
+ ],
6784
+ "events": [
6785
+ {
6786
+ "name": "select",
6787
+ "payload": "AppNavSelectDetail",
6788
+ "description": "Preventable activation listener."
6789
+ },
6790
+ {
6791
+ "name": "flyoutchange",
6792
+ "payload": "{item: AppNavItem, id: string|number, open: boolean}",
6793
+ "description": "Flyout-state listener."
6794
+ },
6795
+ {
6796
+ "name": "overflowchange",
6797
+ "payload": "{visible: Array<string|number>, overflow: Array<string|number>}",
6798
+ "description": "Overflow listener."
6799
+ },
6800
+ {
6801
+ "name": "allmodules",
6802
+ "payload": "{open: boolean}",
6803
+ "description": "\"All modules\" catalogue open-state listener."
6804
+ }
6805
+ ],
6806
+ "methods": [
6807
+ {
6808
+ "name": "setItems",
6809
+ "signature": "setItems(items)",
6810
+ "returns": "this",
6811
+ "description": "Replaces the modules and rebuilds the bar."
6812
+ },
6813
+ {
6814
+ "name": "getItems",
6815
+ "signature": "getItems()",
6816
+ "returns": "ModuleItem[]",
6817
+ "description": "Returns a copy of the normalized modules."
6818
+ },
6819
+ {
6820
+ "name": "setActive",
6821
+ "signature": "setActive(id)",
6822
+ "returns": "this",
6823
+ "description": "Marks the active destination — a module, or anything in a module's menu — without routing. The module holding it becomes current and stays on the bar."
6824
+ },
6825
+ {
6826
+ "name": "openFlyout",
6827
+ "signature": "openFlyout(id, [options])",
6828
+ "returns": "this",
6829
+ "description": "Opens a module's menu flyout."
6830
+ },
6831
+ {
6832
+ "name": "closeFlyout",
6833
+ "signature": "closeFlyout(id)",
6834
+ "returns": "this",
6835
+ "description": "Closes a module's menu flyout."
6836
+ },
6837
+ {
6838
+ "name": "closeAllFlyouts",
6839
+ "signature": "closeAllFlyouts()",
6840
+ "returns": "this",
6841
+ "description": "Closes every menu flyout."
6842
+ },
6843
+ {
6844
+ "name": "isFlyoutOpen",
6845
+ "signature": "isFlyoutOpen(id)",
6846
+ "returns": "boolean",
6847
+ "description": "Reports whether a module's menu flyout is open."
6848
+ },
6849
+ {
6850
+ "name": "setExpanded",
6851
+ "signature": "setExpanded(id)",
6852
+ "returns": "this",
6853
+ "description": "With `menus: 'none'`, names the module whose menu the adjacent panel now shows."
6854
+ },
6855
+ {
6856
+ "name": "setBadge",
6857
+ "signature": "setBadge(id, badge)",
6858
+ "returns": "this",
6859
+ "description": "Updates one badge in place — on the tile, in a flyout, and in the catalogue — without rebuilding the bar. `null` removes it."
6860
+ },
6861
+ {
6862
+ "name": "setLayout",
6863
+ "signature": "setLayout(layout)",
6864
+ "returns": "this",
6865
+ "description": "Changes flow or edge, keeping items, the active destination, and the expanded module."
6866
+ },
6867
+ {
6868
+ "name": "setLabels",
6869
+ "signature": "setLabels(labels)",
6870
+ "returns": "this",
6871
+ "description": "Changes whether module names are printed — the expanded and collapsed states of a vertical navigation column — keeping items, the active destination, and the expanded module."
6872
+ },
6873
+ {
6874
+ "name": "openAllModules",
6875
+ "signature": "openAllModules()",
6876
+ "returns": "this",
6877
+ "description": "Opens the \"All modules\" catalogue and focuses its filter or first entry."
6878
+ },
6879
+ {
6880
+ "name": "closeAllModules",
6881
+ "signature": "closeAllModules()",
6882
+ "returns": "this",
6883
+ "description": "Closes the \"All modules\" catalogue."
6884
+ },
6885
+ {
6886
+ "name": "isAllModulesOpen",
6887
+ "signature": "isAllModulesOpen()",
6888
+ "returns": "boolean",
6889
+ "description": "Reports whether the \"All modules\" catalogue is open."
6890
+ },
6891
+ {
6892
+ "name": "focus",
6893
+ "signature": "focus()",
6894
+ "returns": "this",
6895
+ "description": "Focuses the bar's Tab stop: the current module, else the first tile."
6896
+ },
6897
+ {
6898
+ "name": "destroy",
6899
+ "signature": "destroy()",
6900
+ "returns": "void",
6901
+ "description": "Destroys flyouts, tooltips, and the catalogue, and restores or removes the root."
6902
+ }
6903
+ ]
6904
+ },
6905
+ "MonthPicker": {
6906
+ "options": [
6907
+ {
6908
+ "name": "value",
6909
+ "type": "Date|null",
6910
+ "default": "null",
6911
+ "description": "Initially selected month."
6912
+ },
6913
+ {
6914
+ "name": "min",
6915
+ "type": "Date|null",
6916
+ "default": "null",
6917
+ "description": "Earliest selectable month."
6918
+ },
6919
+ {
6920
+ "name": "max",
6921
+ "type": "Date|null",
6922
+ "default": "null",
6923
+ "description": "Latest selectable month."
6924
+ }
6925
+ ],
6926
+ "events": [
6927
+ {
6928
+ "name": "change",
6929
+ "payload": "{date: Date|null}",
6930
+ "description": "Change listener."
6931
+ }
6932
+ ],
6933
+ "methods": [
6934
+ {
6935
+ "name": "set",
6936
+ "signature": "set(date, [options])",
6937
+ "returns": "this",
6938
+ "description": "Selects the first day of a month."
6939
+ },
6940
+ {
6941
+ "name": "destroy",
6942
+ "signature": "destroy()",
6943
+ "returns": "void",
6944
+ "description": "Removes generated content from an enhanced target."
6945
+ }
6946
+ ]
6947
+ },
6948
+ "MultiValueEditor": {
6949
+ "options": [
6950
+ {
6951
+ "name": "values",
6952
+ "type": "unknown[]",
6953
+ "default": "[]",
6954
+ "description": "Initial ordered values."
6955
+ },
6956
+ {
6957
+ "name": "options",
6958
+ "type": "unknown[]|Record<string, string>|null",
6959
+ "default": "null",
6960
+ "description": "Allowed values; null uses text inputs."
6961
+ },
6962
+ {
6963
+ "name": "addLabel",
6964
+ "type": "string",
6965
+ "default": "'Add value'",
6966
+ "description": "Add-row button text."
6967
+ },
6968
+ {
6969
+ "name": "reorder",
6970
+ "type": "'both'|'buttons'|'drag'|'none'",
6971
+ "default": "'both'",
6972
+ "description": "Reordering affordances each row gets: a drag handle, the up/down buttons, both, or neither."
6973
+ }
6974
+ ],
6975
+ "events": [
6976
+ {
6977
+ "name": "change",
6978
+ "payload": "{values: string[]}",
6979
+ "description": "Values change listener."
6980
+ }
6981
+ ],
6982
+ "methods": [
6983
+ {
6984
+ "name": "getValues",
6985
+ "signature": "getValues()",
6986
+ "returns": "string[]",
6987
+ "description": "Returns a copy of the ordered values."
6988
+ },
6989
+ {
6990
+ "name": "setValues",
6498
6991
  "signature": "setValues(values, [options])",
6499
6992
  "returns": "this",
6500
6993
  "description": "Replaces all rows."
@@ -7049,6 +7542,18 @@
7049
7542
  }
7050
7543
  ]
7051
7544
  },
7545
+ "PriorityIcon": {
7546
+ "options": [
7547
+ {
7548
+ "name": "label",
7549
+ "type": "string|null",
7550
+ "default": "null",
7551
+ "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."
7552
+ }
7553
+ ],
7554
+ "events": [],
7555
+ "methods": []
7556
+ },
7052
7557
  "ProgressBar": {
7053
7558
  "options": [
7054
7559
  {
@@ -7206,6 +7711,18 @@
7206
7711
  "type": "string",
7207
7712
  "default": "''",
7208
7713
  "description": "Input placeholder."
7714
+ },
7715
+ {
7716
+ "name": "okLabel",
7717
+ "type": "string",
7718
+ "default": "'OK'",
7719
+ "description": "Confirmation label."
7720
+ },
7721
+ {
7722
+ "name": "cancelLabel",
7723
+ "type": "string",
7724
+ "default": "'Cancel'",
7725
+ "description": "Cancellation label."
7209
7726
  }
7210
7727
  ],
7211
7728
  "events": [],
@@ -7652,6 +8169,12 @@
7652
8169
  "type": "Node[]",
7653
8170
  "default": "[]",
7654
8171
  "description": "Listener-free, owner-created controls such as a move handle."
8172
+ },
8173
+ {
8174
+ "name": "message",
8175
+ "type": "(key: string, ...args: unknown[]) => string",
8176
+ "default": null,
8177
+ "description": "Resolves the card's built-in strings (`recordCard.select`, `recordCard.actions`, `recordCard.untitled`, `recordCard.selected`, `recordCard.notSelected`). An owning component passes its own `msg()`; omitted, the host translator and then the default English catalogue answer."
7655
8178
  }
7656
8179
  ],
7657
8180
  "events": [],
@@ -7841,6 +8364,18 @@
7841
8364
  "returns": "string[]",
7842
8365
  "description": "Returns the complete field id order."
7843
8366
  },
8367
+ {
8368
+ "name": "getFieldControls",
8369
+ "signature": "getFieldControls()",
8370
+ "returns": "HTMLElement|null",
8371
+ "description": "Returns the element that lets a reader show, hide, and reorder this view's fields: the shared field chooser, or — for a `TableView` with `fieldControls: true` — the column chooser of its composed `Table`. Null when the view renders none (`fieldControls: false`). The element stays owned by the view: move it with {@link RecordView#mountFieldControls} rather than appending it elsewhere yourself, so `destroy()` can still find and remove it."
8372
+ },
8373
+ {
8374
+ "name": "mountFieldControls",
8375
+ "signature": "mountFieldControls(target)",
8376
+ "returns": "HTMLElement|null",
8377
+ "description": "Moves the view's field chooser into a host element — a list toolbar, a pane header — or, with `null`, back to where the view first rendered it. It keeps driving this view wherever it sits, and `destroy()` removes it from the host. `ListToolbar.bind()` calls this for every record view, which is how its field chooser ends up in the bar."
8378
+ },
7844
8379
  {
7845
8380
  "name": "setFieldVisible",
7846
8381
  "signature": "setFieldVisible(id, [visible], [options])",
@@ -8172,6 +8707,12 @@
8172
8707
  }
8173
8708
  ],
8174
8709
  "methods": [
8710
+ {
8711
+ "name": "get",
8712
+ "signature": "get()",
8713
+ "returns": "unknown",
8714
+ "description": "Returns the selected item ID, or null: the same as reading `value`, under the `get()`/`set()` pair the other value components share."
8715
+ },
8175
8716
  {
8176
8717
  "name": "set",
8177
8718
  "signature": "set(idOrItem, [options])",
@@ -8236,7 +8777,7 @@
8236
8777
  "name": "priority",
8237
8778
  "signature": "priority(target, [options])",
8238
8779
  "returns": "Select",
8239
- "description": "Creates the five-level priority preset."
8780
+ "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."
8240
8781
  },
8241
8782
  {
8242
8783
  "name": "status",
@@ -9174,6 +9715,12 @@
9174
9715
  "default": "null",
9175
9716
  "description": "ISO 4217 code used by `format: 'currency'`."
9176
9717
  },
9718
+ {
9719
+ "name": "caption",
9720
+ "type": "string",
9721
+ "default": "''",
9722
+ "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."
9723
+ },
9177
9724
  {
9178
9725
  "name": "locale",
9179
9726
  "type": "string",
@@ -9214,13 +9761,13 @@
9214
9761
  "name": "icon",
9215
9762
  "type": "string|null",
9216
9763
  "default": "null",
9217
- "description": "Icon name from `icons.js`, shown beside the label."
9764
+ "description": "Icon name from `icons.js`, shown muted beside the label — a glyph, not a coloured chip."
9218
9765
  },
9219
9766
  {
9220
9767
  "name": "kind",
9221
9768
  "type": "StatTileKind",
9222
9769
  "default": "'neutral'",
9223
- "description": "Semantic intent. It tints the icon and the sparkline and never the value, which stays at full text contrast whatever intent a record carries."
9770
+ "description": "Semantic intent. It tints the sparkline and never the value, which stays at full text contrast whatever intent a record carries."
9224
9771
  },
9225
9772
  {
9226
9773
  "name": "href",
@@ -9275,6 +9822,30 @@
9275
9822
  }
9276
9823
  ]
9277
9824
  },
9825
+ "StatusIcon": {
9826
+ "options": [
9827
+ {
9828
+ "name": "indicator",
9829
+ "type": "StatusIndicator",
9830
+ "default": null,
9831
+ "description": "Shape, overriding the status's own."
9832
+ },
9833
+ {
9834
+ "name": "tone",
9835
+ "type": "StatusTone",
9836
+ "default": null,
9837
+ "description": "Colour, overriding the status's own."
9838
+ },
9839
+ {
9840
+ "name": "label",
9841
+ "type": "string|null",
9842
+ "default": "null",
9843
+ "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."
9844
+ }
9845
+ ],
9846
+ "events": [],
9847
+ "methods": []
9848
+ },
9278
9849
  "Stepper": {
9279
9850
  "options": [
9280
9851
  {
@@ -9439,9 +10010,15 @@
9439
10010
  "type": "boolean",
9440
10011
  "default": "true",
9441
10012
  "description": "Keep inactive panel elements mounted."
9442
- }
9443
- ],
9444
- "events": [
10013
+ },
10014
+ {
10015
+ "name": "label",
10016
+ "type": "string",
10017
+ "default": null,
10018
+ "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."
10019
+ }
10020
+ ],
10021
+ "events": [
9445
10022
  {
9446
10023
  "name": "change",
9447
10024
  "payload": "{name: string, previous: string|null}",
@@ -9602,6 +10179,12 @@
9602
10179
  "default": "true",
9603
10180
  "description": "Whether alternate rows use the zebra background."
9604
10181
  },
10182
+ {
10183
+ "name": "variant",
10184
+ "type": "TableVariant",
10185
+ "default": "'default'",
10186
+ "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."
10187
+ },
9605
10188
  {
9606
10189
  "name": "editMode",
9607
10190
  "type": "TableEditMode",
@@ -9643,6 +10226,24 @@
9643
10226
  "type": "false|TableHierarchyOptions",
9644
10227
  "default": "false",
9645
10228
  "description": "Flat parent references projected as an expandable treegrid. Row data and mutation APIs remain flat."
10229
+ },
10230
+ {
10231
+ "name": "interactive",
10232
+ "type": "boolean",
10233
+ "default": "false",
10234
+ "description": "Makes the table an APG grid — row focus, Enter firing `rowclick` — even without selection, editing, or hierarchy, which already imply it. Attaching a `rowclick` or `rowdblclick` listener through `on()` or an `on…` option sets it too; pass it when the host listens for the bubbling `zx-rowclick` DOM event instead."
10235
+ },
10236
+ {
10237
+ "name": "label",
10238
+ "type": "string|null",
10239
+ "default": "null",
10240
+ "description": "Accessible name of the table. A grid must have one; null resolves the `table.label` message (English \"Table\") for a grid and leaves a plain table unnamed, so name it after what it lists."
10241
+ },
10242
+ {
10243
+ "name": "labelledBy",
10244
+ "type": "string|null",
10245
+ "default": "null",
10246
+ "description": "Id of an element that names the grid — the heading above it, say. Wins over `label`."
9646
10247
  }
9647
10248
  ],
9648
10249
  "events": [
@@ -9951,6 +10552,12 @@
9951
10552
  "returns": "number",
9952
10553
  "description": "How many rows are currently rendered."
9953
10554
  },
10555
+ {
10556
+ "name": "addEventListener",
10557
+ "signature": "addEventListener(type, listener, [options])",
10558
+ "returns": "void",
10559
+ "description": "Registers a listener, and turns the table into a grid when the listener is for a row click: a host that reacts to the row needs the row reachable by keyboard."
10560
+ },
9954
10561
  {
9955
10562
  "name": "isStacked",
9956
10563
  "signature": "isStacked()",
@@ -10157,7 +10764,13 @@
10157
10764
  "name": "colorKey",
10158
10765
  "type": "TagValueReader",
10159
10766
  "default": "'color'",
10160
- "description": "Optional item colour property or reader."
10767
+ "description": "Optional item colour property or reader: a CSS colour or a token reference such as `var(--zx-color-tone-blue-fg)`."
10768
+ },
10769
+ {
10770
+ "name": "toneKey",
10771
+ "type": "TagValueReader",
10772
+ "default": "'tone'",
10773
+ "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."
10161
10774
  },
10162
10775
  {
10163
10776
  "name": "searchKeys",
@@ -10223,7 +10836,7 @@
10223
10836
  "name": "readonly",
10224
10837
  "type": "boolean",
10225
10838
  "default": "false",
10226
- "description": "Whether tags may be added or removed."
10839
+ "description": "When true the picker shows only its tags — no input, chevron, or remove buttons."
10227
10840
  },
10228
10841
  {
10229
10842
  "name": "renderItem",
@@ -11235,5 +11848,354 @@
11235
11848
  "description": "Disables editing, removal, and reordering."
11236
11849
  }
11237
11850
  ]
11851
+ },
11852
+ "ViewSettings": {
11853
+ "options": [
11854
+ {
11855
+ "name": "fields",
11856
+ "type": "ViewSettingsField[]",
11857
+ "default": "[]",
11858
+ "description": "Field descriptors, in their default order. Bound to a view, a non-empty list is also the allow-list: the view's other fields are neither listed nor touched. An empty list takes every field the view has."
11859
+ },
11860
+ {
11861
+ "name": "fieldOrder",
11862
+ "type": "string[]",
11863
+ "default": "[]",
11864
+ "description": "Preferred field order; missing fields append."
11865
+ },
11866
+ {
11867
+ "name": "hiddenFields",
11868
+ "type": "string[]",
11869
+ "default": "[]",
11870
+ "description": "Hidden field ids. A field with `visible: false` starts hidden too; a locked field never does."
11871
+ },
11872
+ {
11873
+ "name": "groupBy",
11874
+ "type": "string|null",
11875
+ "default": "null",
11876
+ "description": "Initial grouping field."
11877
+ },
11878
+ {
11879
+ "name": "grouping",
11880
+ "type": "boolean|ViewSettingsGrouping",
11881
+ "default": "true",
11882
+ "description": "The Group section. `false` omits it; an object restricts the fields it offers."
11883
+ },
11884
+ {
11885
+ "name": "board",
11886
+ "type": "ViewSettingsBoardOptions|false",
11887
+ "default": "false",
11888
+ "description": "The Board section (column field, swim-lane field, show empty columns) with its initial values and, in `fields`, the fields it offers; `false` omits it."
11889
+ },
11890
+ {
11891
+ "name": "sections",
11892
+ "type": "ViewSettingsSection[]",
11893
+ "default": null,
11894
+ "description": "Order and presence of the sections. Defaults to `['fields', 'grouping', 'board']`; a section whose option is `false` is always left out."
11895
+ },
11896
+ {
11897
+ "name": "types",
11898
+ "type": "Record<string, {icon?: string, label?: string}>",
11899
+ "default": "{}",
11900
+ "description": "Extends or overrides the built-in type map, keyed by type name."
11901
+ },
11902
+ {
11903
+ "name": "searchThreshold",
11904
+ "type": "number",
11905
+ "default": "8",
11906
+ "description": "Field count above which the field search is shown."
11907
+ },
11908
+ {
11909
+ "name": "headingLevel",
11910
+ "type": "2|3|4|5|6",
11911
+ "default": "3",
11912
+ "description": "Heading level of the section headings."
11913
+ },
11914
+ {
11915
+ "name": "label",
11916
+ "type": "string|null",
11917
+ "default": "null",
11918
+ "description": "Accessible name of the region; omitted uses the `viewSettings.label` message (\"View settings\")."
11919
+ },
11920
+ {
11921
+ "name": "msg",
11922
+ "type": "Record<string, string>|Record<string, Record<string, string>>",
11923
+ "default": null,
11924
+ "description": "Localized messages."
11925
+ }
11926
+ ],
11927
+ "events": [
11928
+ {
11929
+ "name": "change",
11930
+ "payload": "{state: ViewSettingsState, reason: ViewSettingsChangeReason}",
11931
+ "description": "Any change the reader made."
11932
+ },
11933
+ {
11934
+ "name": "fieldorderchange",
11935
+ "payload": "{order: string[]}",
11936
+ "description": "Field order changed."
11937
+ },
11938
+ {
11939
+ "name": "fieldvisibilitychange",
11940
+ "payload": "{visible: string[], hidden: string[]}",
11941
+ "description": "A field was added or hidden."
11942
+ },
11943
+ {
11944
+ "name": "groupchange",
11945
+ "payload": "{field: string|null}",
11946
+ "description": "Grouping field changed."
11947
+ },
11948
+ {
11949
+ "name": "boardchange",
11950
+ "payload": "{board: ViewSettingsBoard}",
11951
+ "description": "Board settings changed."
11952
+ }
11953
+ ],
11954
+ "methods": [
11955
+ {
11956
+ "name": "getState",
11957
+ "signature": "getState()",
11958
+ "returns": "ViewSettingsState",
11959
+ "description": "Returns the current settings as a JSON-safe snapshot."
11960
+ },
11961
+ {
11962
+ "name": "setState",
11963
+ "signature": "setState(partial, [options])",
11964
+ "returns": "this",
11965
+ "description": "Applies part of a state. Unknown field ids are ignored, missing ones append, and a locked field stays shown. Each part that actually changes emits its own event unless `silent`. A keyboard pick-up or pointer drag in progress is canceled first."
11966
+ },
11967
+ {
11968
+ "name": "setFields",
11969
+ "signature": "setFields(fields)",
11970
+ "returns": "this",
11971
+ "description": "Replaces the field descriptors, keeping order, visibility, grouping, and board settings for every id that still exists. While a view is bound, the view owns the field list: change it with the view's own `setFields()` and the panel follows through `statechange`. A `setFields()` here is not pushed to the view and lasts only until the view's next change."
11972
+ },
11973
+ {
11974
+ "name": "getFields",
11975
+ "signature": "getFields()",
11976
+ "returns": "ViewSettingsField[]",
11977
+ "description": "Returns the field descriptors in their current order."
11978
+ },
11979
+ {
11980
+ "name": "showField",
11981
+ "signature": "showField(id)",
11982
+ "returns": "this",
11983
+ "description": "Shows a hidden field at the end of the shown list."
11984
+ },
11985
+ {
11986
+ "name": "hideField",
11987
+ "signature": "hideField(id)",
11988
+ "returns": "this",
11989
+ "description": "Hides a shown field. A locked field and the last shown field cannot be hidden."
11990
+ },
11991
+ {
11992
+ "name": "moveField",
11993
+ "signature": "moveField(id, index)",
11994
+ "returns": "this",
11995
+ "description": "Moves a shown field to a position among the movable shown fields (locked ones keep theirs)."
11996
+ },
11997
+ {
11998
+ "name": "bind",
11999
+ "signature": "bind(view, [options])",
12000
+ "returns": "this",
12001
+ "description": "Connects a record view (`TableView`, `CardView`, `KanbanView`, or anything exposing the `RecordView` state surface). The view's fields and state are read now; order and visibility changes made here are pushed through `setFieldOrder()` and `setFieldVisible()`; and the view's own `statechange` is followed, so a column hidden from a table header disappears here too. The view's labels and types win over the panel's own descriptors, which supply only what the view lacks (`locked`, `groupable`, a type the view leaves at its `'text'` default). While bound, the view owns the field list; see `setFields()`. Grouping and board settings are never applied to the view — they are emitted, and the host decides (a `CardView` is re-created or given a new `groupBy`, a `KanbanView` its axes). A view's own `groupBy`, `columnBy`, and `swimlaneBy` options are adopted when they name fields."
12002
+ },
12003
+ {
12004
+ "name": "unbind",
12005
+ "signature": "unbind()",
12006
+ "returns": "this",
12007
+ "description": "Releases a bound view. The settings keep their current state."
12008
+ },
12009
+ {
12010
+ "name": "focus",
12011
+ "signature": "focus()",
12012
+ "returns": "this",
12013
+ "description": "Focuses the field search, or the first control of the shown list when there is no search."
12014
+ },
12015
+ {
12016
+ "name": "destroy",
12017
+ "signature": "destroy()",
12018
+ "returns": "void",
12019
+ "description": "Destroys the nested controls, releases a bound view, and restores an enhanced target."
12020
+ }
12021
+ ]
12022
+ },
12023
+ "ViewSettingsBoard": {
12024
+ "options": [
12025
+ {
12026
+ "name": "columnBy",
12027
+ "type": "string|null",
12028
+ "default": "null",
12029
+ "description": "Initial column field."
12030
+ },
12031
+ {
12032
+ "name": "swimlaneBy",
12033
+ "type": "string|null",
12034
+ "default": "null",
12035
+ "description": "Initial swim-lane field, or null for none."
12036
+ },
12037
+ {
12038
+ "name": "showEmptyColumns",
12039
+ "type": "boolean",
12040
+ "default": "true",
12041
+ "description": "Whether columns without cards stay visible."
12042
+ },
12043
+ {
12044
+ "name": "fields",
12045
+ "type": "string[]",
12046
+ "default": null,
12047
+ "description": "The field ids offered for columns and swim lanes, in this order. Omitted offers the same fields as the Group section."
12048
+ }
12049
+ ],
12050
+ "events": [],
12051
+ "methods": []
12052
+ },
12053
+ "WorkspaceSwitcher": {
12054
+ "options": [
12055
+ {
12056
+ "name": "workspaces",
12057
+ "type": "WorkspaceItem[]",
12058
+ "default": "[]",
12059
+ "description": "Workspaces in menu order. Entries without an id are skipped, and a repeated id keeps its first entry."
12060
+ },
12061
+ {
12062
+ "name": "active",
12063
+ "type": "string|number|null",
12064
+ "default": "null",
12065
+ "description": "Active workspace id. Defaults to the first enabled workspace, which also stands in for an id that is not listed or is disabled."
12066
+ },
12067
+ {
12068
+ "name": "items",
12069
+ "type": "MenuButtonItem[]",
12070
+ "default": "[]",
12071
+ "description": "Extra actions listed after the workspaces — \"Create workspace\", \"Workspace settings\", `'-'` separators, \"Sign out\". A separator is inserted between the workspaces and the actions automatically."
12072
+ },
12073
+ {
12074
+ "name": "compact",
12075
+ "type": "boolean",
12076
+ "default": "false",
12077
+ "description": "Whether the trigger shows the tile alone."
12078
+ },
12079
+ {
12080
+ "name": "heading",
12081
+ "type": "string|null",
12082
+ "default": "null",
12083
+ "description": "Group label above the workspaces; null resolves message `workspaceSwitcher.heading` (\"Workspaces\"), and an empty string leaves the label out."
12084
+ },
12085
+ {
12086
+ "name": "label",
12087
+ "type": "string|null",
12088
+ "default": "null",
12089
+ "description": "Trigger accessible name, in which `%1` is the active workspace's name and is filled in again after every switch. Null resolves message `workspaceSwitcher.label` (\"Switch workspace: %1\"), or `workspaceSwitcher.labelEmpty` (\"Switch workspace\") while no workspace is active."
12090
+ },
12091
+ {
12092
+ "name": "placement",
12093
+ "type": "'bottom-start'|'bottom-end'|'top-start'|'top-end'|'bottom'|'top'|'right-start'|'right-end'|'left-start'|'left-end'|'right'|'left'",
12094
+ "default": "'bottom-start'",
12095
+ "description": "Popup placement."
12096
+ },
12097
+ {
12098
+ "name": "msg",
12099
+ "type": "Record<string, unknown>",
12100
+ "default": null,
12101
+ "description": "Component-local message overrides, by key: `workspaceSwitcher.heading` (\"Workspaces\"), `workspaceSwitcher.label` (\"Switch workspace: %1\", `%1` the active workspace's name), and `workspaceSwitcher.labelEmpty` (\"Switch workspace\", the trigger's name while no workspace is active)."
12102
+ }
12103
+ ],
12104
+ "events": [
12105
+ {
12106
+ "name": "select",
12107
+ "payload": "{workspace, id, previous}",
12108
+ "description": "Preventable workspace switch; `preventDefault()` keeps the previous workspace active and the menu open."
12109
+ },
12110
+ {
12111
+ "name": "action",
12112
+ "payload": "{value: unknown, item: object}",
12113
+ "description": "Preventable extra action; `preventDefault()` skips the item's own callback and keeps the menu open."
12114
+ },
12115
+ {
12116
+ "name": "open",
12117
+ "payload": "Record<string, never>",
12118
+ "description": "Open listener."
12119
+ },
12120
+ {
12121
+ "name": "close",
12122
+ "payload": "Record<string, never>",
12123
+ "description": "Close listener."
12124
+ }
12125
+ ],
12126
+ "methods": [
12127
+ {
12128
+ "name": "getActive",
12129
+ "signature": "getActive()",
12130
+ "returns": "WorkspaceItem|null",
12131
+ "description": "Returns the active workspace, or null when no workspace is enabled."
12132
+ },
12133
+ {
12134
+ "name": "setActive",
12135
+ "signature": "setActive(id, [options])",
12136
+ "returns": "this",
12137
+ "description": "Makes another workspace active. An unknown or disabled id changes nothing."
12138
+ },
12139
+ {
12140
+ "name": "setWorkspaces",
12141
+ "signature": "setWorkspaces(workspaces)",
12142
+ "returns": "this",
12143
+ "description": "Replaces the workspaces. The active workspace stays active while it is still listed and enabled; otherwise the first enabled workspace becomes active, silently."
12144
+ },
12145
+ {
12146
+ "name": "setItems",
12147
+ "signature": "setItems(items)",
12148
+ "returns": "this",
12149
+ "description": "Replaces the extra actions after the workspaces."
12150
+ },
12151
+ {
12152
+ "name": "setCompact",
12153
+ "signature": "setCompact(compact)",
12154
+ "returns": "this",
12155
+ "description": "Shows the tile alone, or the tile with the name, secondary line, and chevron — for a navigation column that narrows to icons and widens again. The trigger keeps its full accessible name and gains the workspace name as a tooltip while compact."
12156
+ },
12157
+ {
12158
+ "name": "open",
12159
+ "signature": "open()",
12160
+ "returns": "this",
12161
+ "description": "Opens the menu."
12162
+ },
12163
+ {
12164
+ "name": "close",
12165
+ "signature": "close()",
12166
+ "returns": "this",
12167
+ "description": "Closes the menu."
12168
+ },
12169
+ {
12170
+ "name": "toggle",
12171
+ "signature": "toggle()",
12172
+ "returns": "this",
12173
+ "description": "Toggles the menu."
12174
+ },
12175
+ {
12176
+ "name": "isOpen",
12177
+ "signature": "isOpen()",
12178
+ "returns": "boolean",
12179
+ "description": "Reports whether the menu is open."
12180
+ },
12181
+ {
12182
+ "name": "focus",
12183
+ "signature": "focus()",
12184
+ "returns": "this",
12185
+ "description": "Focuses the trigger."
12186
+ },
12187
+ {
12188
+ "name": "getPanel",
12189
+ "signature": "getPanel()",
12190
+ "returns": "HTMLElement",
12191
+ "description": "Returns the menu panel for shell hover and focus coordination."
12192
+ },
12193
+ {
12194
+ "name": "destroy",
12195
+ "signature": "destroy()",
12196
+ "returns": "void",
12197
+ "description": "Destroys the menu and restores or removes the host."
12198
+ }
12199
+ ]
11238
12200
  }
11239
12201
  }