@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
@@ -0,0 +1,260 @@
1
+ export type OverlayKind = 'modal' | 'non-modal' | 'popup' | 'tooltip' | 'toast';
2
+ export type OverlayEntryOptions = {
3
+ /**
4
+ * Layer kind.
5
+ */
6
+ kind: OverlayKind;
7
+ /**
8
+ * The overlay's own root: the panel, dialog, or region.
9
+ */
10
+ root: Element;
11
+ /**
12
+ * Component that owns the entry; informational.
13
+ */
14
+ owner?: unknown;
15
+ /**
16
+ * Element(s) the overlay was
17
+ * opened from or is anchored to. The topmost entry whose root contains one becomes the parent.
18
+ */
19
+ anchor?: Element | null | Array<Element | null | undefined>;
20
+ /**
21
+ * Further elements that count as part of the
22
+ * overlay for outside presses and focus — a dropdown's trigger, which toggles it on its own.
23
+ */
24
+ inside?: Array<Element | null | undefined>;
25
+ /**
26
+ * Handles an
27
+ * Escape routed to this entry. Return `false` to decline, which passes it to the next layer down.
28
+ * The dispatcher calls `preventDefault()` on an Escape an entry handled.
29
+ */
30
+ onEscape?: (event: KeyboardEvent, handle: OverlayHandle) => boolean | void;
31
+ /**
32
+ * Called for a press
33
+ * outside the entry's chain, while nothing above it contained the press.
34
+ */
35
+ onOutsidePointer?: (event: Event, handle: OverlayHandle) => void;
36
+ /**
37
+ * Called when focus
38
+ * moves to an element outside the entry's chain.
39
+ */
40
+ onFocusOutside?: (event: FocusEvent, handle: OverlayHandle) => void;
41
+ /**
42
+ * Called when the parent entry closes.
43
+ * An entry without it outlives its parent and is re-parented to the grandparent.
44
+ */
45
+ onParentClose?: (handle: OverlayHandle) => void;
46
+ };
47
+ export type OverlayEntry = {
48
+ /**
49
+ * Z-order; higher is on top. Unique and increasing, never reused.
50
+ */
51
+ order: number;
52
+ /**
53
+ * Layer kind.
54
+ */
55
+ kind: OverlayKind;
56
+ /**
57
+ * Overlay root.
58
+ */
59
+ root: Element;
60
+ /**
61
+ * Owning component.
62
+ */
63
+ owner: unknown;
64
+ /**
65
+ * Anchor elements.
66
+ */
67
+ anchors: Element[];
68
+ /**
69
+ * Extra elements that count as inside.
70
+ */
71
+ inside: Element[];
72
+ /**
73
+ * Overlay the anchor sat in when the entry opened.
74
+ */
75
+ parent: OverlayEntry | null;
76
+ /**
77
+ * Escape handler.
78
+ */
79
+ onEscape?: OverlayEntryOptions['onEscape'];
80
+ /**
81
+ * Outside-press handler.
82
+ */
83
+ onOutsidePointer?: OverlayEntryOptions['onOutsidePointer'];
84
+ /**
85
+ * Focus-outside handler.
86
+ */
87
+ onFocusOutside?: OverlayEntryOptions['onFocusOutside'];
88
+ /**
89
+ * Parent-close handler.
90
+ */
91
+ onParentClose?: OverlayEntryOptions['onParentClose'];
92
+ };
93
+ export type OverlayHandle = {
94
+ /**
95
+ * The registered entry.
96
+ */
97
+ entry: OverlayEntry;
98
+ /**
99
+ * The entry's z-order, for `data-zx-overlay-order`.
100
+ */
101
+ order: number;
102
+ /**
103
+ * Whether the entry is still registered.
104
+ */
105
+ isOpen: () => boolean;
106
+ /**
107
+ * Whether no other entry (toasts aside) sits above it.
108
+ */
109
+ isTopmost: () => boolean;
110
+ /**
111
+ * Whether a node is inside the entry's
112
+ * chain: its root, its `inside` elements, or any overlay opened from it.
113
+ */
114
+ contains: (node: Node | null | undefined) => boolean;
115
+ /**
116
+ * Unregisters the entry and closes the children that follow it.
117
+ * Safe to call repeatedly.
118
+ */
119
+ release: () => void;
120
+ };
121
+ /**
122
+ * Whether `node` is `root` or inside it, crossing shadow roots.
123
+ * @param {Node|null|undefined} root Container.
124
+ * @param {Node|null|undefined} node Candidate.
125
+ * @returns {boolean}
126
+ */
127
+ export declare function containsNode(root: Node | null | undefined, node: Node | null | undefined): boolean;
128
+ /**
129
+ * The entry an overlay opened from `anchors` belongs under: the topmost one whose root contains an
130
+ * anchor. Tooltips and toasts are never parents.
131
+ * @param {readonly OverlayEntry[]} entries Registered entries, bottom to top.
132
+ * @param {readonly Element[]} anchors Anchor elements of the overlay being opened.
133
+ * @returns {OverlayEntry|null}
134
+ */
135
+ export declare function findParent(entries: readonly OverlayEntry[], anchors: readonly Element[]): OverlayEntry | null;
136
+ /**
137
+ * Whether a node is inside an entry's chain: its root, its `inside` elements, or — recursively —
138
+ * any entry whose parent it is.
139
+ * @param {readonly OverlayEntry[]} entries Registered entries.
140
+ * @param {OverlayEntry} entry Entry to test.
141
+ * @param {Node|null|undefined} node Candidate.
142
+ * @returns {boolean}
143
+ */
144
+ export declare function insideChain(entries: readonly OverlayEntry[], entry: OverlayEntry, node: Node | null | undefined): boolean;
145
+ /**
146
+ * The topmost entry, toasts aside, optionally narrowed by a predicate.
147
+ * @param {readonly OverlayEntry[]} entries Registered entries, bottom to top.
148
+ * @param {(entry: OverlayEntry) => boolean} [filter] Extra condition.
149
+ * @returns {OverlayEntry|null}
150
+ */
151
+ export declare function topmostEntry(entries: readonly OverlayEntry[], filter?: (entry: OverlayEntry) => boolean): OverlayEntry | null;
152
+ /**
153
+ * The entries an Escape may be offered to, in the order they are asked: from the top down, those
154
+ * with an Escape handler, stopping at the first modal (whose Escape is the browser's).
155
+ *
156
+ * `within` is the open modal dialog the key was pressed in, when there is one. Everything outside
157
+ * it is inert, so an entry whose root lies outside it is never offered the key — which keeps a
158
+ * modal the stack does not know about (a `<dialog>` an application opened with `showModal()`)
159
+ * from losing its Escape to a popup left open behind it.
160
+ * @param {readonly OverlayEntry[]} entries Registered entries, bottom to top.
161
+ * @param {Node|null} [within=null] Open modal dialog containing the key's target.
162
+ * @returns {OverlayEntry[]}
163
+ */
164
+ export declare function escapeCandidates(entries: readonly OverlayEntry[], within?: Node | null): OverlayEntry[];
165
+ /**
166
+ * The entries a press on `node` dismisses, topmost first.
167
+ *
168
+ * A press inside a toast dismisses nothing. Tooltips go on any press outside them. For the rest,
169
+ * the walk runs from the top down and stops at the first entry whose chain contains the press — it
170
+ * landed on that layer, and the layers beneath are covered by it or own it — or at a modal, below
171
+ * which everything is inert. Every entry passed on the way that handles outside presses is
172
+ * dismissed. As for Escape, a press inside an open modal dialog dismisses nothing outside it.
173
+ * @param {readonly OverlayEntry[]} entries Registered entries, bottom to top.
174
+ * @param {Node|null|undefined} node Press target.
175
+ * @param {Node|null} [within=null] Open modal dialog containing the press.
176
+ * @returns {OverlayEntry[]}
177
+ */
178
+ export declare function outsideTargets(entries: readonly OverlayEntry[], node: Node | null | undefined, within?: Node | null): OverlayEntry[];
179
+ /**
180
+ * A registry of open overlays. The library uses the one shared instance, `overlayStack`; separate
181
+ * instances exist for tests and for documents other than the global one.
182
+ */
183
+ export declare class OverlayStack {
184
+ #private;
185
+ /**
186
+ * @param {{target?: EventTarget|null}} [options={}] Where to listen; the global document when
187
+ * omitted. Pass `null` to install no listeners and drive the dispatch methods directly.
188
+ */
189
+ constructor(options?: {
190
+ target?: EventTarget | null;
191
+ });
192
+ /**
193
+ * Registers an open overlay above every other.
194
+ * @param {OverlayEntryOptions} options Entry description.
195
+ * @returns {OverlayHandle}
196
+ */
197
+ push(options: OverlayEntryOptions): OverlayHandle;
198
+ /**
199
+ * The registered entries, bottom to top. A copy: changing it changes nothing.
200
+ * @returns {OverlayEntry[]}
201
+ */
202
+ entries(): OverlayEntry[];
203
+ /**
204
+ * The topmost entry, toasts aside.
205
+ * @param {(entry: OverlayEntry) => boolean} [filter] Extra condition.
206
+ * @returns {OverlayEntry|null}
207
+ */
208
+ topmost(filter?: (entry: OverlayEntry) => boolean): OverlayEntry | null;
209
+ /**
210
+ * Root of the topmost open modal dialog, or null when none is open. Asks the registry first and
211
+ * falls back to the document, so a `<dialog>` opened with `showModal()` outside the library still
212
+ * counts.
213
+ * @returns {Element|null}
214
+ */
215
+ topmostModal(): Element | null;
216
+ /**
217
+ * Whether a node is inside any registered overlay's root or `inside` elements.
218
+ * @param {Node|null|undefined} node Candidate.
219
+ * @returns {boolean}
220
+ */
221
+ containsNode(node: Node | null | undefined): boolean;
222
+ /**
223
+ * Subscribes to registry changes: called after every push and release.
224
+ * @param {(entries: readonly OverlayEntry[]) => void} listener Change listener.
225
+ * @returns {() => void} Unsubscribes.
226
+ */
227
+ subscribe(listener: (entries: readonly OverlayEntry[]) => void): () => void;
228
+ /**
229
+ * Routes an Escape keydown to the topmost layer that handles it. Ignores other keys and events
230
+ * already `defaultPrevented`. Installed on the document while overlays are open; public so a
231
+ * stack created without a target can be driven directly.
232
+ * @param {KeyboardEvent} event Keydown event.
233
+ * @returns {OverlayEntry|null} The entry that handled it.
234
+ */
235
+ handleKeydown(event: KeyboardEvent): OverlayEntry | null;
236
+ /**
237
+ * Dismisses the layers a press landed outside of. Installed on the document, capture phase, while
238
+ * overlays are open; public so a stack created without a target can be driven directly.
239
+ * @param {Event} event Pointerdown event.
240
+ * @returns {OverlayEntry[]} The entries asked to dismiss, topmost first.
241
+ */
242
+ handlePointerdown(event: Event): OverlayEntry[];
243
+ /**
244
+ * Tells the entries that watch focus that it moved outside them.
245
+ * @param {FocusEvent} event Focusin event.
246
+ * @returns {void}
247
+ */
248
+ handleFocusin(event: FocusEvent): void;
249
+ }
250
+ /**
251
+ * The document's overlay stack, shared by every overlay in the library.
252
+ * @type {OverlayStack}
253
+ */
254
+ export declare const overlayStack: OverlayStack;
255
+ /**
256
+ * Registers an open overlay on the shared stack. Shorthand for `overlayStack.push(options)`.
257
+ * @param {OverlayEntryOptions} options Entry description.
258
+ * @returns {OverlayHandle}
259
+ */
260
+ export declare function pushOverlay(options: OverlayEntryOptions): OverlayHandle;
@@ -11,8 +11,9 @@ export { Component } from './core/component.js';
11
11
  export { h, htmlEscape, resolveElement, highlightMatch, __, compactElement, fragment, parseCompactTag, applyCompactProperties, appendContent, appendCompact, appendCompactChild, onCompactEvent, offCompactEvent, fireCompactEvent } from './core/dom.js';
12
12
  export { position } from './core/position.js';
13
13
  export { breakpoints, breakpointOf, matchBreakpoint, onBreakpoint } from './core/breakpoint.js';
14
+ export { MOTION_ATTRIBUTE, prefersReducedMotion, watchMotion } from './core/motion.js';
14
15
  export { Http, zeyosService, parseResult } from './core/http.js';
15
- export { setTranslator, setLanguage, getLanguage, translate, printf } from './core/i18n.js';
16
+ export { setTranslator, setLanguage, getLanguage, translate, printf, defaultMessages } from './core/i18n.js';
16
17
  export { focusTrap, rovingTabindex, typeahead } from './core/keyboard.js';
17
18
  export { formatDate, parseDate, clampDate, isSameDay, addDays, addMonths, getWeekStart } from './core/date.js';
18
19
  export { icon, icons, iconNames, registerIcons, configureIcons, getIconConfig, useFontAwesome, useBuiltinIcons, loadFontAwesome } from './core/icons.js';
@@ -22,8 +23,8 @@ export { formatNumber, formatCurrency, formatPercent, formatFileSize, formatRela
22
23
  export { storage } from './core/storage.js';
23
24
  export { toCsv, downloadBlob, copyToClipboard } from './core/export.js';
24
25
  export { defineElements } from './elements/define.js';
25
- export { button, buttonGroup } from './components/button/button.js';
26
- export { badge, badgeGroup } from './components/badge/badge.js';
26
+ export { button, buttonGroup, setButtonBusy } from './components/button/button.js';
27
+ export { BADGE_TONES, badge, badgeGroup } from './components/badge/badge.js';
27
28
  export { CheckButton } from './components/check-button/check-button.js';
28
29
  export { emptyState } from './components/empty-state/empty-state.js';
29
30
  export { spinner } from './components/loading/spinner.js';
@@ -53,15 +54,17 @@ export { Pagination, paginationRange } from './components/pagination/pagination.
53
54
  export { Search } from './components/search/search.js';
54
55
  export { AppIcon, appIcon } from './components/app-icon/app-icon.js';
55
56
  export { Launcher, rankLauncherItems } from './components/launcher/launcher.js';
56
- export { Avatar, avatarInitials } from './components/avatar/avatar.js';
57
+ export { AVATAR_TONES, Avatar, avatarInitials, avatarTone } from './components/avatar/avatar.js';
57
58
  export { EntityRef, normalizeEntityRef, normalizeEntityRefLink, normalizeEntityRefMetadata, normalizeEntityRefActions } from './components/entity-ref/entity-ref.js';
58
59
  export { FileItem, normalizeFileItem } from './components/file-item/file-item.js';
59
60
  export { FileList, normalizeFileListItems } from './components/file-list/file-list.js';
60
61
  export { ActivityItem, resolveActivityActions, normalizeActivityAction, normalizeActivityTimestamp } from './components/activity-item/activity-item.js';
61
62
  export { ActivityList, groupActivityItems, normalizeActivityItems } from './components/activity-list/activity-list.js';
62
63
  export { AccountMenu } from './components/account-menu/account-menu.js';
64
+ export { WorkspaceSwitcher } from './components/workspace-switcher/workspace-switcher.js';
63
65
  export { normalizeAppItems } from './internal/app-rail.js';
64
- export { AppSidebar } from './components/app-sidebar/app-sidebar.js';
66
+ export { ModuleBar, partitionModules, resolveModuleColor } from './components/module-bar/module-bar.js';
67
+ export { AppSidebar, presentationGlyph } from './components/app-sidebar/app-sidebar.js';
65
68
  export { Message } from './components/message/message.js';
66
69
  export { Modal } from './components/modal/modal.js';
67
70
  export { Dialog } from './components/dialog/dialog.js';
@@ -72,6 +75,7 @@ export { Tooltip, tooltip, describe } from './components/tooltip/tooltip.js';
72
75
  export { MenuButton } from './components/menu-button/menu-button.js';
73
76
  export { ContextMenu } from './components/context-menu/context-menu.js';
74
77
  export { Select } from './components/select/select.js';
78
+ export { statusIcon, priorityIcon } from './components/select/glyphs.js';
75
79
  export { Checklist } from './components/checklist/checklist.js';
76
80
  export { TagPicker } from './components/tag-picker/tag-picker.js';
77
81
  export { NumberField, parseNumber, snapNumber } from './components/number-field/number-field.js';
@@ -101,6 +105,7 @@ export { DataFilter } from './components/data-filter/data-filter.js';
101
105
  export { FilterPanel, isActiveValue, pruneValue, serializeFilterValue } from './components/filter-panel/filter-panel.js';
102
106
  export { SortControl } from './components/sort-control/sort-control.js';
103
107
  export { ListToolbar } from './components/list-toolbar/list-toolbar.js';
108
+ export { ViewSettings } from './components/view-settings/view-settings.js';
104
109
  export { Filter } from './components/filter/filter.js';
105
110
  export { filterOperators, emptyFilterAst, filterCondition, filterGroup, parseFilterAst, cloneFilterAst, stringifyFilterAst, validateFilterAst } from './components/filter/filter-model.js';
106
111
  export { Field } from './components/field/field.js';
@@ -43,6 +43,17 @@ export type AppNavItem = {
43
43
  * Child destinations/actions.
44
44
  */
45
45
  children?: AppNavItem[];
46
+ /**
47
+ * Makes the item a section: a quiet heading over its `children`, which
48
+ * render at the same level. A section is never focused, selected, or collapsed, and needs no `id`.
49
+ */
50
+ section?: boolean;
51
+ /**
52
+ * A section's trailing controls, such as an add button.
53
+ */
54
+ actions?: Node | {
55
+ toElement: () => Node | null;
56
+ };
46
57
  };
47
58
  export type AppRailPresenterOptions = {
48
59
  /**
@@ -129,6 +140,9 @@ export type RailFlyout = {
129
140
  * @property {() => void} [invoke] Application-owned non-link action.
130
141
  * @property {boolean} [disabled] Whether activation is unavailable.
131
142
  * @property {AppNavItem[]} [children] Child destinations/actions.
143
+ * @property {boolean} [section] Makes the item a section: a quiet heading over its `children`, which
144
+ * render at the same level. A section is never focused, selected, or collapsed, and needs no `id`.
145
+ * @property {Node|{toElement: () => Node|null}} [actions] A section's trailing controls, such as an add button.
132
146
  */
133
147
  /**
134
148
  * @typedef {Object} AppRailPresenterOptions
@@ -170,6 +184,13 @@ export declare class AppRailPresenter extends Component<AppRailPresenterOptions>
170
184
  _pointerFocus: WeakSet<object>;
171
185
  _silenceFlyoutEvents: boolean;
172
186
  static cssName: string;
187
+ /**
188
+ * BEM block of the rail's own parts (header, list, footer, row, item). A component built on the
189
+ * presenter names its parts after itself; flyout panels keep the `zx-app-rail__` vocabulary,
190
+ * because every rail portals the same panel.
191
+ * @type {string}
192
+ */
193
+ static partBlock: string;
173
194
  /** @type {Readonly<AppRailPresenterOptions>} */
174
195
  static defaults: Readonly<AppRailPresenterOptions>;
175
196
  /**
@@ -204,6 +225,23 @@ export declare class AppRailPresenter extends Component<AppRailPresenterOptions>
204
225
  destroy(): void;
205
226
  /** @returns {void} */
206
227
  _rebuild(): void;
228
+ /** @returns {string} The BEM block of the rail's own parts. @protected */
229
+ protected _partBlock(): string;
230
+ /**
231
+ * Builds one top-level rail control. The control must carry `data-app-nav-id` and
232
+ * `data-app-nav-value-id`, which keyboard handling, flyouts, and the active state read.
233
+ * @param {AppNavItem} item Top-level item.
234
+ * @param {boolean} hasFlyout Whether the control opens a flyout of the item's children.
235
+ * @returns {HTMLElement}
236
+ * @protected
237
+ */
238
+ protected _renderControl(item: AppNavItem, hasFlyout: boolean): HTMLElement;
239
+ /** Whether an item with children presents them in a flyout. @param {AppNavItem} item @returns {boolean} @protected */
240
+ protected _flyoutsFor(item: AppNavItem): boolean;
241
+ /** Whether a top-level control gets a hover/focus tooltip naming it. @param {AppNavItem} item @returns {boolean} @protected */
242
+ protected _tooltipFor(item: AppNavItem): boolean;
243
+ /** Runs after every rebuild, before the active state is applied. @returns {void} @protected */
244
+ protected _afterRebuild(): void;
207
245
  /** @param {AppNavItem} item @param {HTMLElement} trigger @param {string} key @param {string|null} parentKey @returns {void} */
208
246
  _buildFlyout(item: AppNavItem, trigger: HTMLElement, key: string, parentKey: string | null): void;
209
247
  /** @param {AppNavItem} item @param {Event} event @returns {Event} */
@@ -80,7 +80,51 @@ export type MenuHeading = {
80
80
  export type MenuSeparator = {
81
81
  type: 'separator';
82
82
  };
83
- export type MenuEntry = MenuItem | MenuHeading | MenuSeparator | '-';
83
+ export type MenuChoiceOption = {
84
+ /**
85
+ * Value the choice takes.
86
+ */
87
+ value: unknown;
88
+ /**
89
+ * Accessible name and tooltip; the option shows its glyph or icon.
90
+ */
91
+ label: string;
92
+ /**
93
+ * Kernel icon name.
94
+ */
95
+ icon?: string;
96
+ /**
97
+ * A pictogram drawn instead of an icon.
98
+ */
99
+ glyph?: Node | (() => Node);
100
+ /**
101
+ * Whether the option is unavailable.
102
+ */
103
+ disabled?: boolean;
104
+ };
105
+ export type MenuChoice = {
106
+ /**
107
+ * Entry kind.
108
+ */
109
+ type: 'choice';
110
+ /**
111
+ * Visible row label.
112
+ */
113
+ label: string;
114
+ /**
115
+ * Value of the checked option.
116
+ */
117
+ value?: unknown;
118
+ /**
119
+ * The options, in order.
120
+ */
121
+ options: MenuChoiceOption[];
122
+ /**
123
+ * Called with the chosen option's value.
124
+ */
125
+ onselect?: (value: unknown, entry: MenuChoice, controller: MenuController) => void;
126
+ };
127
+ export type MenuEntry = MenuItem | MenuHeading | MenuSeparator | MenuChoice | '-';
84
128
  /** @typedef {'menuitem'|'menuitemcheckbox'|'menuitemradio'} MenuItemRole */
85
129
  /**
86
130
  * @typedef {Object} MenuController
@@ -111,7 +155,27 @@ export type MenuEntry = MenuItem | MenuHeading | MenuSeparator | '-';
111
155
  * @property {string} label Visible heading.
112
156
  */
113
157
  /** @typedef {{type: 'separator'}} MenuSeparator */
114
- /** @typedef {MenuItem|MenuHeading|MenuSeparator|'-'} MenuEntry */
158
+ /**
159
+ * One option of a menu choice.
160
+ * @typedef {Object} MenuChoiceOption
161
+ * @property {unknown} value Value the choice takes.
162
+ * @property {string} label Accessible name and tooltip; the option shows its glyph or icon.
163
+ * @property {string} [icon] Kernel icon name.
164
+ * @property {Node|(() => Node)} [glyph] A pictogram drawn instead of an icon.
165
+ * @property {boolean} [disabled=false] Whether the option is unavailable.
166
+ */
167
+ /**
168
+ * A setting chosen in place: a labelled row of two to a few options, one checked — a theme, a
169
+ * layout. Choosing an option keeps the menu open, so its effect shows.
170
+ * @typedef {Object} MenuChoice
171
+ * @property {'choice'} type Entry kind.
172
+ * @property {string} label Visible row label.
173
+ * @property {unknown} [value] Value of the checked option.
174
+ * @property {MenuChoiceOption[]} options The options, in order.
175
+ * @property {(value: unknown, entry: MenuChoice, controller: MenuController) => void} [onselect]
176
+ * Called with the chosen option's value.
177
+ */
178
+ /** @typedef {MenuItem|MenuHeading|MenuSeparator|MenuChoice|'-'} MenuEntry */
115
179
  export declare const MENU_ITEM_SELECTOR: string;
116
180
  /**
117
181
  * Reports whether an entry is an interactive menu action.
@@ -129,6 +193,10 @@ export declare function menuItemRole(item: MenuItem): MenuItemRole;
129
193
  * Builds one menu's entries with shared structure and link safety.
130
194
  * @param {MenuEntry[]} entries Entry definitions.
131
195
  * @param {string} block CSS block name, without the `zx-` prefix.
196
+ * @param {{choices?: boolean}} [options={}] Whether the menu handles `choice` entries; a menu that
197
+ * does not leaves them out rather than drawing a row that does nothing.
132
198
  * @returns {HTMLElement[]}
133
199
  */
134
- export declare function renderMenuEntries(entries: MenuEntry[], block: string): HTMLElement[];
200
+ export declare function renderMenuEntries(entries: MenuEntry[], block: string, { choices }?: {
201
+ choices?: boolean;
202
+ }): HTMLElement[];
@@ -63,3 +63,9 @@ export type ZeyosFacade = {
63
63
  * @returns {ZeyosFacade} Bound facade.
64
64
  */
65
65
  export declare function connect(client: Record<string, any>, { onError, locale }?: ConnectOptions): ZeyosFacade;
66
+ /**
67
+ * The text a failed request is reported with: the error's own message, or a generic sentence.
68
+ * @param {unknown} error Rejection reason.
69
+ * @returns {string}
70
+ */
71
+ export declare function errorMessage(error: unknown): string;
@@ -12,6 +12,17 @@ export type ZeyosFormOptions = {
12
12
  * Per-field label overrides.
13
13
  */
14
14
  labels?: Record<string, string>;
15
+ /**
16
+ * Per-field semantic format overrides, such as
17
+ * `{ duedate: 'date' }` for a Unix-second field that holds a calendar day.
18
+ */
19
+ formats?: Record<string, string>;
20
+ /**
21
+ * IANA time zone of the ZeyOS instance. A date-only field's stored
22
+ * midnight is read as the calendar day it names in this zone, and a picked day is saved as midnight
23
+ * in it; defaults to the runtime's own zone.
24
+ */
25
+ timeZone?: string;
15
26
  /**
16
27
  * Fieldset legend.
17
28
  */
@@ -32,6 +43,17 @@ export type ZeyosFormOptions = {
32
43
  * Success callback.
33
44
  */
34
45
  onSaved?: (record: Record<string, unknown>) => unknown | Promise<unknown>;
46
+ /**
47
+ * Element or selector whose theme scope shows the
48
+ * binding's toasts — the save confirmation and the report of a failed request. Null uses the form's
49
+ * own element, so a form inside a scoped shell or dialog toasts inside that scope.
50
+ */
51
+ scope?: Element | string | null;
52
+ /**
53
+ * Whether the binding raises toasts. `false` keeps it silent:
54
+ * `save()`, `load()`, and `ready` still resolve or reject, and reporting is the caller's.
55
+ */
56
+ notify?: boolean;
35
57
  };
36
58
  export type ZeyosFormConfig = {
37
59
  /**
@@ -54,11 +76,13 @@ export type ZeyosFormConfig = {
54
76
  */
55
77
  formOptions: Record<string, any>;
56
78
  /**
57
- * Maps Unix seconds to Date values.
79
+ * Maps Unix
80
+ * seconds to Date values: a date-only field to local midnight of its calendar day in `timeZone`.
58
81
  */
59
82
  mapFromRecord: (record: Record<string, unknown>) => Record<string, unknown>;
60
83
  /**
61
- * Maps Date and enum values to API storage values.
84
+ * Maps Date and
85
+ * enum values to API storage values: a date-only field to midnight of its day in `timeZone`.
62
86
  */
63
87
  mapToRecord: (values: Record<string, unknown>) => Record<string, unknown>;
64
88
  };
@@ -76,7 +100,8 @@ export type ZeyosFormBinding = {
76
100
  */
77
101
  load: (id: unknown) => Promise<Record<string, unknown>>;
78
102
  /**
79
- * Validates and creates or updates the record.
103
+ * Validates and creates or updates the
104
+ * record, then confirms with a toast in the form's scope unless `notify` is false.
80
105
  */
81
106
  save: () => Promise<Record<string, unknown> | null>;
82
107
  /**
@@ -93,11 +118,21 @@ export type ZeyosFormBinding = {
93
118
  * @property {string[]} [fields] Curated ordered field allow-list.
94
119
  * @property {string[]} [exclude] Field ids to omit.
95
120
  * @property {Record<string, string>} [labels] Per-field label overrides.
121
+ * @property {Record<string, string>} [formats] Per-field semantic format overrides, such as
122
+ * `{ duedate: 'date' }` for a Unix-second field that holds a calendar day.
123
+ * @property {string} [timeZone] IANA time zone of the ZeyOS instance. A date-only field's stored
124
+ * midnight is read as the calendar day it names in this zone, and a picked day is saved as midnight
125
+ * in it; defaults to the runtime's own zone.
96
126
  * @property {string} [title=''] Fieldset legend.
97
127
  * @property {1|2|3} [columns=2] Fieldset column count.
98
128
  * @property {Record<string, unknown>} [value] Initial record using ZeyOS storage values.
99
129
  * @property {unknown} [id] Initial record id to load.
100
130
  * @property {(record: Record<string, unknown>) => unknown|Promise<unknown>} [onSaved] Success callback.
131
+ * @property {Element|string|null} [scope=null] Element or selector whose theme scope shows the
132
+ * binding's toasts — the save confirmation and the report of a failed request. Null uses the form's
133
+ * own element, so a form inside a scoped shell or dialog toasts inside that scope.
134
+ * @property {boolean} [notify=true] Whether the binding raises toasts. `false` keeps it silent:
135
+ * `save()`, `load()`, and `ready` still resolve or reject, and reporting is the caller's.
101
136
  */
102
137
  /**
103
138
  * @typedef {Object} ZeyosFormConfig
@@ -105,22 +140,26 @@ export type ZeyosFormBinding = {
105
140
  * @property {Record<string, Record<string, any>>} fields Field descriptors keyed by id.
106
141
  * @property {Array<{id: string, resource: string}>} entityFields Referenced-resource fields.
107
142
  * @property {Record<string, any>} formOptions Plain Zx Form options.
108
- * @property {(record: Record<string, unknown>) => Record<string, unknown>} mapFromRecord Maps Unix seconds to Date values.
109
- * @property {(values: Record<string, unknown>) => Record<string, unknown>} mapToRecord Maps Date and enum values to API storage values.
143
+ * @property {(record: Record<string, unknown>) => Record<string, unknown>} mapFromRecord Maps Unix
144
+ * seconds to Date values: a date-only field to local midnight of its calendar day in `timeZone`.
145
+ * @property {(values: Record<string, unknown>) => Record<string, unknown>} mapToRecord Maps Date and
146
+ * enum values to API storage values: a date-only field to midnight of its day in `timeZone`.
110
147
  */
111
148
  /**
112
149
  * @typedef {Object} ZeyosFormBinding
113
150
  * @property {Form} form Generated Zx form.
114
151
  * @property {Promise<Record<string, unknown>|null>} ready Initial value/load readiness.
115
152
  * @property {(id: unknown) => Promise<Record<string, unknown>>} load Loads and maps one record.
116
- * @property {() => Promise<Record<string, unknown>|null>} save Validates and creates or updates the record.
153
+ * @property {() => Promise<Record<string, unknown>|null>} save Validates and creates or updates the
154
+ * record, then confirms with a toast in the form's scope unless `notify` is false.
117
155
  * @property {() => Form} getForm Returns the generated Zx Form.
118
156
  * @property {() => void} destroy Destroys the form and all owned fields/selects.
119
157
  */
120
158
  /**
121
159
  * Builds the DOM-free form configuration consumed by {@link zeyosForm}. Entity descriptors retain
122
160
  * the `zxselect` type and receive the same async options used by {@link zeyosSelect}; enum options
123
- * come from normalized schema metadata, and the returned mappers handle Unix-second dates.
161
+ * come from normalized schema metadata with readable labels, and the returned mappers handle
162
+ * Unix-second dates — date-only fields as calendar days in `opts.timeZone`.
124
163
  * @param {Record<string, any>} client Injected ZeyOS client instance.
125
164
  * @param {string} resource Resource name such as `transactions`.
126
165
  * @param {ZeyosFormOptions} [opts={}] Schema curation and layout options.
@@ -130,8 +169,10 @@ export declare function buildZeyosFormConfig(client: Record<string, any>, resour
130
169
  /**
131
170
  * Generates a schema-driven Zx Form and a small async binding object. `load(id)` hydrates entity
132
171
  * labels and converts Unix seconds to Date objects. `save()` validates, maps values back to API
133
- * storage types, calls create/update through the WP14 connection facade, shows a success toast,
134
- * and invokes `onSaved(record)`. Await `ready` when `opts.id` or `opts.value` is supplied.
172
+ * storage types, calls create/update through the WP14 connection facade, invokes
173
+ * `onSaved(record)`, and shows a success toast. Its toasts — that confirmation and the report of a
174
+ * failed request — appear in the theme scope of `opts.scope` or of the form itself, and
175
+ * `notify: false` silences them. Await `ready` when `opts.id` or `opts.value` is supplied.
135
176
  * @param {Record<string, any>} client Injected ZeyOS client instance.
136
177
  * @param {string} resource Resource name such as `transactions`.
137
178
  * @param {ZeyosFormOptions} [opts={}] Schema, initial value, and save options.
@@ -3,11 +3,12 @@
3
3
  * @module zx/zeyos
4
4
  */
5
5
  export { fieldToZxField, fieldToZxColumn, resolveFields, registerFieldType } from './schema.js';
6
- export { buildListQuery, tableSortToQuery, dataFilterStateToFilters, dateToUnixSeconds, unixSecondsToDate } from './query.js';
6
+ export { buildListQuery, tableSortToQuery, dataFilterStateToFilters, dateToUnixSeconds, unixSecondsToDate, calendarDayToUnixSeconds, unixSecondsToCalendarDay } from './query.js';
7
7
  export { connect } from './connect.js';
8
8
  export { zeyosModules, moduleAliases, moduleInfo, moduleColor, moduleIconName, moduleKeys, moduleGlyphColor, normalizeModuleName, registerModules } from './modules.js';
9
9
  export { ZEYOS_ICON_KIT, useZeyosIcons, moduleIcon, moduleChip, zeyosAppIcon } from './icons.js';
10
10
  export { ZEYOS_LAUNCHER_APPLICATIONS, buildZeyosLauncherConfig, zeyosLauncher, normalizeZeyosLauncherApplications, normalizeZeyosLauncherRecords, zeyosActiveIdentifier } from './launcher.js';
11
+ export { zeyosModuleItems, buildZeyosModuleBarConfig, buildZeyosAppSidebarConfig, zeyosModuleBar } from './module-bar.js';
11
12
  export { zeyosSelect, buildZeyosSelectConfig, zeyosEntitySelect, buildZeyosEntitySelectConfig } from './select.js';
12
13
  export { zeyosForm } from './form.js';
13
14
  export { zeyosTable } from './table.js';
@@ -145,3 +145,12 @@ export declare function zeyosActiveIdentifier(state?: {
145
145
  fork?: unknown;
146
146
  weblet?: unknown;
147
147
  }): string;
148
+ /**
149
+ * Normalizes one application of the ZeyOS shell catalogue: a `[module, label]` pair, a
150
+ * `[ID, name, module, color]` fork, a weblet row, or an object. Shared with the module bar.
151
+ * @param {unknown} raw @param {string|null} fallbackId @param {unknown} fallbackLabel
152
+ * @returns {Record<string, any>|null}
153
+ */
154
+ export declare function normalizeApplication(raw: unknown, fallbackId: string | null, fallbackLabel: unknown): Record<string, any> | null;
155
+ /** @param {unknown} raw @param {unknown} resolver @returns {Record<string, any>} */
156
+ export declare function mergeDestination(raw: unknown, resolver: unknown): Record<string, any>;