@zeyos/zx 2.1.0 → 2.2.1

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 (311) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/README.md +15 -0
  3. package/dist/types/compat/base.d.ts +156 -0
  4. package/dist/types/compat/globals.d.ts +20 -0
  5. package/dist/types/compat/index.d.ts +128 -0
  6. package/dist/types/compat/map/basic.d.ts +175 -0
  7. package/dist/types/compat/map/data.d.ts +102 -0
  8. package/dist/types/compat/map/date-time.d.ts +80 -0
  9. package/dist/types/compat/map/factory.d.ts +9 -0
  10. package/dist/types/compat/map/form.d.ts +98 -0
  11. package/dist/types/compat/map/helpers.d.ts +12 -0
  12. package/dist/types/compat/map/http.d.ts +36 -0
  13. package/dist/types/compat/map/layout.d.ts +106 -0
  14. package/dist/types/compat/map/options.d.ts +80 -0
  15. package/dist/types/compat/map/select.d.ts +95 -0
  16. package/dist/types/compat/map/stubs.d.ts +32 -0
  17. package/dist/types/compat/map/utilities.d.ts +37 -0
  18. package/dist/types/compat-entry.d.ts +5 -0
  19. package/dist/types/components/badge/badge.d.ts +46 -0
  20. package/dist/types/components/breadcrumb/breadcrumb.d.ts +200 -0
  21. package/dist/types/components/button/button.d.ts +42 -0
  22. package/dist/types/components/check-button/check-button.d.ts +98 -0
  23. package/dist/types/components/checklist/checklist.d.ts +143 -0
  24. package/dist/types/components/checklist/field-adapter.d.ts +5 -0
  25. package/dist/types/components/context-menu/context-menu.d.ts +130 -0
  26. package/dist/types/components/copy/copy-button.d.ts +48 -0
  27. package/dist/types/components/copy/copy-input.d.ts +91 -0
  28. package/dist/types/components/data-filter/data-filter.d.ts +250 -0
  29. package/dist/types/components/data-filter/filter-core.d.ts +52 -0
  30. package/dist/types/components/date-picker/date-picker.d.ts +137 -0
  31. package/dist/types/components/date-picker/date-range-picker.d.ts +350 -0
  32. package/dist/types/components/date-picker/field-adapter.d.ts +6 -0
  33. package/dist/types/components/date-picker/month-picker.d.ts +75 -0
  34. package/dist/types/components/date-picker/range-field-adapter.d.ts +7 -0
  35. package/dist/types/components/date-picker/time-picker.d.ts +127 -0
  36. package/dist/types/components/datebox/date-range-box.d.ts +218 -0
  37. package/dist/types/components/datebox/datebox.d.ts +160 -0
  38. package/dist/types/components/datebox/field-adapter.d.ts +5 -0
  39. package/dist/types/components/dialog/dialog.d.ts +284 -0
  40. package/dist/types/components/dropdown/dropdown.d.ts +118 -0
  41. package/dist/types/components/empty-state/empty-state.d.ts +38 -0
  42. package/dist/types/components/field/field.d.ts +231 -0
  43. package/dist/types/components/field-upload/field-adapter.d.ts +5 -0
  44. package/dist/types/components/field-upload/field-upload.d.ts +213 -0
  45. package/dist/types/components/fieldset/fieldset.d.ts +125 -0
  46. package/dist/types/components/finder/finder.d.ts +252 -0
  47. package/dist/types/components/form/form.d.ts +194 -0
  48. package/dist/types/components/groupbox/groupbox.d.ts +89 -0
  49. package/dist/types/components/layout/layout.d.ts +132 -0
  50. package/dist/types/components/loading/inline-loading.d.ts +86 -0
  51. package/dist/types/components/loading/progress-bar.d.ts +168 -0
  52. package/dist/types/components/loading/spinner.d.ts +34 -0
  53. package/dist/types/components/master-panel/master-panel.d.ts +112 -0
  54. package/dist/types/components/menu-button/menu-button.d.ts +142 -0
  55. package/dist/types/components/message/message.d.ts +212 -0
  56. package/dist/types/components/modal/modal.d.ts +105 -0
  57. package/dist/types/components/multi-value-editor/field-adapter.d.ts +5 -0
  58. package/dist/types/components/multi-value-editor/multi-value-editor.d.ts +66 -0
  59. package/dist/types/components/navigation-bar/navigation-bar.d.ts +229 -0
  60. package/dist/types/components/number-field/field-adapter.d.ts +5 -0
  61. package/dist/types/components/number-field/number-field.d.ts +292 -0
  62. package/dist/types/components/pagination/pagination.d.ts +267 -0
  63. package/dist/types/components/panel/panel.d.ts +194 -0
  64. package/dist/types/components/permission/permission.d.ts +93 -0
  65. package/dist/types/components/rating/field-adapter.d.ts +5 -0
  66. package/dist/types/components/rating/rating.d.ts +213 -0
  67. package/dist/types/components/search/search.d.ts +98 -0
  68. package/dist/types/components/select/field-adapter.d.ts +5 -0
  69. package/dist/types/components/select/filter.d.ts +11 -0
  70. package/dist/types/components/select/select.d.ts +235 -0
  71. package/dist/types/components/skeleton/skeleton.d.ts +97 -0
  72. package/dist/types/components/slider/field-adapter.d.ts +5 -0
  73. package/dist/types/components/slider/slider.d.ts +216 -0
  74. package/dist/types/components/split-view/split-view.d.ts +335 -0
  75. package/dist/types/components/stepper/stepper.d.ts +314 -0
  76. package/dist/types/components/stepper/steps.d.ts +131 -0
  77. package/dist/types/components/tabbox/tabbox.d.ts +230 -0
  78. package/dist/types/components/table/sort.d.ts +49 -0
  79. package/dist/types/components/table/table.d.ts +872 -0
  80. package/dist/types/components/tag-picker/field-adapter.d.ts +5 -0
  81. package/dist/types/components/tag-picker/tag-picker.d.ts +375 -0
  82. package/dist/types/components/timebox/field-adapter.d.ts +5 -0
  83. package/dist/types/components/timebox/timebox.d.ts +121 -0
  84. package/dist/types/components/toggle/field-adapter.d.ts +5 -0
  85. package/dist/types/components/toggle/toggle.d.ts +94 -0
  86. package/dist/types/components/toolbar/toolbar.d.ts +230 -0
  87. package/dist/types/components/tooltip/tooltip.d.ts +183 -0
  88. package/dist/types/components/tree/hierarchy.d.ts +113 -0
  89. package/dist/types/components/tree/tree.d.ts +383 -0
  90. package/dist/types/components/truncate/truncate.d.ts +61 -0
  91. package/dist/types/components/value-list/field-adapter.d.ts +5 -0
  92. package/dist/types/components/value-list/value-list.d.ts +143 -0
  93. package/dist/types/core/breakpoint.d.ts +68 -0
  94. package/dist/types/core/component.d.ts +115 -0
  95. package/dist/types/core/date.d.ts +50 -0
  96. package/dist/types/core/dom.d.ts +86 -0
  97. package/dist/types/core/export.d.ts +70 -0
  98. package/dist/types/core/fontawesome.d.ts +107 -0
  99. package/dist/types/core/format.d.ts +107 -0
  100. package/dist/types/core/http.d.ts +122 -0
  101. package/dist/types/core/i18n.d.ts +35 -0
  102. package/dist/types/core/icons.d.ts +137 -0
  103. package/dist/types/core/keyboard.d.ts +72 -0
  104. package/dist/types/core/position.d.ts +45 -0
  105. package/dist/types/core/storage.d.ts +46 -0
  106. package/dist/types/core/util.d.ts +117 -0
  107. package/dist/types/elements/define.d.ts +73 -0
  108. package/dist/types/elements/reflect.d.ts +27 -0
  109. package/dist/types/index.d.ts +79 -0
  110. package/dist/types/zeyos/connect.d.ts +65 -0
  111. package/dist/types/zeyos/form.d.ts +140 -0
  112. package/dist/types/zeyos/icons.d.ts +104 -0
  113. package/dist/types/zeyos/index.d.ts +12 -0
  114. package/dist/types/zeyos/modules.d.ts +110 -0
  115. package/dist/types/zeyos/query.d.ts +157 -0
  116. package/dist/types/zeyos/schema.d.ts +79 -0
  117. package/dist/types/zeyos/select.d.ts +167 -0
  118. package/dist/types/zeyos/table.d.ts +205 -0
  119. package/dist/zx-compat.esm.js +375 -39
  120. package/dist/zx-compat.esm.min.js +1 -1
  121. package/dist/zx-compat.global.js +372 -73
  122. package/dist/zx-compat.global.min.js +3 -3
  123. package/dist/zx-zeyos.esm.js +355 -49
  124. package/dist/zx-zeyos.esm.min.js +1 -1
  125. package/dist/zx.css +68 -6
  126. package/dist/zx.esm.js +359 -73
  127. package/dist/zx.esm.min.js +3 -3
  128. package/dist/zx.global.js +359 -73
  129. package/dist/zx.global.min.js +3 -3
  130. package/dist/zx.min.css +1 -1
  131. package/docs/api.json +48 -2
  132. package/docs/llms.md +31 -0
  133. package/package.json +37 -9
  134. package/src/compat/base.js +291 -0
  135. package/src/compat/globals.js +165 -0
  136. package/src/compat/index.js +84 -0
  137. package/src/compat/map/basic.js +464 -0
  138. package/src/compat/map/data.js +232 -0
  139. package/src/compat/map/date-time.js +177 -0
  140. package/src/compat/map/factory.js +45 -0
  141. package/src/compat/map/form.js +330 -0
  142. package/src/compat/map/helpers.js +46 -0
  143. package/src/compat/map/http.js +117 -0
  144. package/src/compat/map/layout.js +256 -0
  145. package/src/compat/map/options.js +267 -0
  146. package/src/compat/map/select.js +198 -0
  147. package/src/compat/map/stubs.js +26 -0
  148. package/src/compat/map/utilities.js +113 -0
  149. package/src/compat-entry.js +11 -0
  150. package/src/components/badge/badge.css +147 -0
  151. package/src/components/badge/badge.js +92 -0
  152. package/src/components/breadcrumb/breadcrumb.css +105 -0
  153. package/src/components/breadcrumb/breadcrumb.js +331 -0
  154. package/src/components/button/button.css +104 -0
  155. package/src/components/button/button.js +76 -0
  156. package/src/components/check-button/check-button.css +66 -0
  157. package/src/components/check-button/check-button.js +167 -0
  158. package/src/components/checklist/checklist.css +65 -0
  159. package/src/components/checklist/checklist.js +282 -0
  160. package/src/components/checklist/field-adapter.js +46 -0
  161. package/src/components/context-menu/context-menu.css +54 -0
  162. package/src/components/context-menu/context-menu.js +334 -0
  163. package/src/components/copy/copy-button.css +27 -0
  164. package/src/components/copy/copy-button.js +78 -0
  165. package/src/components/copy/copy-input.css +59 -0
  166. package/src/components/copy/copy-input.js +123 -0
  167. package/src/components/data-filter/data-filter.css +53 -0
  168. package/src/components/data-filter/data-filter.js +400 -0
  169. package/src/components/data-filter/filter-core.js +128 -0
  170. package/src/components/date-picker/date-picker.css +181 -0
  171. package/src/components/date-picker/date-picker.js +500 -0
  172. package/src/components/date-picker/date-range-picker.css +264 -0
  173. package/src/components/date-picker/date-range-picker.js +990 -0
  174. package/src/components/date-picker/field-adapter.js +36 -0
  175. package/src/components/date-picker/month-picker.js +223 -0
  176. package/src/components/date-picker/range-field-adapter.js +31 -0
  177. package/src/components/date-picker/time-picker.css +191 -0
  178. package/src/components/date-picker/time-picker.js +406 -0
  179. package/src/components/datebox/date-range-box.css +128 -0
  180. package/src/components/datebox/date-range-box.js +492 -0
  181. package/src/components/datebox/datebox.css +108 -0
  182. package/src/components/datebox/datebox.js +358 -0
  183. package/src/components/datebox/field-adapter.js +34 -0
  184. package/src/components/dialog/dialog.css +74 -0
  185. package/src/components/dialog/dialog.js +450 -0
  186. package/src/components/dropdown/dropdown.css +24 -0
  187. package/src/components/dropdown/dropdown.js +288 -0
  188. package/src/components/empty-state/empty-state.css +80 -0
  189. package/src/components/empty-state/empty-state.js +92 -0
  190. package/src/components/field/field.css +127 -0
  191. package/src/components/field/field.js +605 -0
  192. package/src/components/field-upload/field-adapter.js +21 -0
  193. package/src/components/field-upload/field-upload.css +108 -0
  194. package/src/components/field-upload/field-upload.js +475 -0
  195. package/src/components/fieldset/fieldset.css +37 -0
  196. package/src/components/fieldset/fieldset.js +307 -0
  197. package/src/components/finder/finder.css +98 -0
  198. package/src/components/finder/finder.js +509 -0
  199. package/src/components/form/form.css +32 -0
  200. package/src/components/form/form.js +302 -0
  201. package/src/components/groupbox/groupbox.css +51 -0
  202. package/src/components/groupbox/groupbox.js +199 -0
  203. package/src/components/layout/layout.css +117 -0
  204. package/src/components/layout/layout.js +136 -0
  205. package/src/components/loading/inline-loading.css +34 -0
  206. package/src/components/loading/inline-loading.js +140 -0
  207. package/src/components/loading/progress-bar.css +115 -0
  208. package/src/components/loading/progress-bar.js +259 -0
  209. package/src/components/loading/spinner.css +58 -0
  210. package/src/components/loading/spinner.js +57 -0
  211. package/src/components/master-panel/master-panel.css +51 -0
  212. package/src/components/master-panel/master-panel.js +203 -0
  213. package/src/components/menu-button/menu-button.css +49 -0
  214. package/src/components/menu-button/menu-button.js +294 -0
  215. package/src/components/message/message.css +122 -0
  216. package/src/components/message/message.js +499 -0
  217. package/src/components/modal/modal.css +47 -0
  218. package/src/components/modal/modal.js +203 -0
  219. package/src/components/multi-value-editor/field-adapter.js +44 -0
  220. package/src/components/multi-value-editor/multi-value-editor.css +56 -0
  221. package/src/components/multi-value-editor/multi-value-editor.js +170 -0
  222. package/src/components/navigation-bar/navigation-bar.css +130 -0
  223. package/src/components/navigation-bar/navigation-bar.js +450 -0
  224. package/src/components/number-field/field-adapter.js +40 -0
  225. package/src/components/number-field/number-field.css +77 -0
  226. package/src/components/number-field/number-field.js +545 -0
  227. package/src/components/pagination/pagination.css +95 -0
  228. package/src/components/pagination/pagination.js +481 -0
  229. package/src/components/panel/panel.css +123 -0
  230. package/src/components/panel/panel.js +336 -0
  231. package/src/components/permission/permission.css +47 -0
  232. package/src/components/permission/permission.js +198 -0
  233. package/src/components/rating/field-adapter.js +34 -0
  234. package/src/components/rating/rating.css +97 -0
  235. package/src/components/rating/rating.js +395 -0
  236. package/src/components/search/search.css +70 -0
  237. package/src/components/search/search.js +193 -0
  238. package/src/components/select/field-adapter.js +24 -0
  239. package/src/components/select/filter.js +39 -0
  240. package/src/components/select/select.css +180 -0
  241. package/src/components/select/select.js +663 -0
  242. package/src/components/skeleton/skeleton.css +76 -0
  243. package/src/components/skeleton/skeleton.js +139 -0
  244. package/src/components/slider/field-adapter.js +36 -0
  245. package/src/components/slider/slider.css +181 -0
  246. package/src/components/slider/slider.js +399 -0
  247. package/src/components/split-view/split-view.css +139 -0
  248. package/src/components/split-view/split-view.js +806 -0
  249. package/src/components/stepper/stepper.css +234 -0
  250. package/src/components/stepper/stepper.js +459 -0
  251. package/src/components/stepper/steps.js +131 -0
  252. package/src/components/tabbox/tabbox.css +281 -0
  253. package/src/components/tabbox/tabbox.js +484 -0
  254. package/src/components/table/sort.js +85 -0
  255. package/src/components/table/table.css +364 -0
  256. package/src/components/table/table.js +1711 -0
  257. package/src/components/tag-picker/field-adapter.js +35 -0
  258. package/src/components/tag-picker/tag-picker.css +169 -0
  259. package/src/components/tag-picker/tag-picker.js +837 -0
  260. package/src/components/timebox/field-adapter.js +24 -0
  261. package/src/components/timebox/timebox.css +51 -0
  262. package/src/components/timebox/timebox.js +276 -0
  263. package/src/components/toggle/field-adapter.js +24 -0
  264. package/src/components/toggle/toggle.css +66 -0
  265. package/src/components/toggle/toggle.js +150 -0
  266. package/src/components/toolbar/toolbar.css +81 -0
  267. package/src/components/toolbar/toolbar.js +511 -0
  268. package/src/components/tooltip/tooltip.css +36 -0
  269. package/src/components/tooltip/tooltip.js +420 -0
  270. package/src/components/tree/hierarchy.js +151 -0
  271. package/src/components/tree/tree.css +99 -0
  272. package/src/components/tree/tree.js +784 -0
  273. package/src/components/truncate/truncate.css +20 -0
  274. package/src/components/truncate/truncate.js +92 -0
  275. package/src/components/value-list/field-adapter.js +24 -0
  276. package/src/components/value-list/value-list.css +108 -0
  277. package/src/components/value-list/value-list.js +336 -0
  278. package/src/core/breakpoint.js +150 -0
  279. package/src/core/component.js +292 -0
  280. package/src/core/date.js +216 -0
  281. package/src/core/dom.js +260 -0
  282. package/src/core/export.js +204 -0
  283. package/src/core/fontawesome.js +177 -0
  284. package/src/core/format.js +283 -0
  285. package/src/core/http.js +246 -0
  286. package/src/core/i18n.js +83 -0
  287. package/src/core/icons.js +283 -0
  288. package/src/core/keyboard.js +240 -0
  289. package/src/core/position.js +177 -0
  290. package/src/core/storage.js +175 -0
  291. package/src/core/util.js +336 -0
  292. package/src/elements/define.js +715 -0
  293. package/src/elements/reflect.js +79 -0
  294. package/src/index.js +131 -0
  295. package/src/zeyos/connect.js +142 -0
  296. package/src/zeyos/form.js +254 -0
  297. package/src/zeyos/icons.js +92 -0
  298. package/src/zeyos/index.js +21 -0
  299. package/src/zeyos/modules.js +269 -0
  300. package/src/zeyos/query.js +199 -0
  301. package/src/zeyos/schema.js +474 -0
  302. package/src/zeyos/select.js +175 -0
  303. package/src/zeyos/table.js +272 -0
  304. package/styles/base.css +124 -0
  305. package/styles/icons.css +34 -0
  306. package/styles/tokens/dark.css +84 -0
  307. package/styles/tokens/density.css +9 -0
  308. package/styles/tokens/global.css +80 -0
  309. package/styles/tokens/modules.css +109 -0
  310. package/styles/tokens/semantic.css +49 -0
  311. package/styles/zx.css +61 -0
@@ -0,0 +1,115 @@
1
+ export type ComponentOptions = Record<string, any>;
2
+ export type ComponentListener = (event: Event & {
3
+ detail?: Record<string, unknown>;
4
+ }) => void;
5
+ /**
6
+ * Base class for lifecycle-safe Zx components.
7
+ *
8
+ * Generic over its own options type so a subclass can bind its `XOptions` typedef with
9
+ * `@extends {Component<XOptions>}`. That is what types `new Select(target, { … })` for editors and
10
+ * for TypeScript consumers: a subclass declares no constructor of its own, so it inherits this
11
+ * signature, and without the binding every component would accept any object at all.
12
+ *
13
+ * @template {ComponentOptions} [TOptions=ComponentOptions]
14
+ * @fires Component#event
15
+ */
16
+ export declare class Component<TOptions extends ComponentOptions = ComponentOptions> extends EventTarget {
17
+ #private;
18
+ /** @type {ComponentOptions} */
19
+ static defaults: ComponentOptions;
20
+ /**
21
+ * BEM block a subclass wants on its root, without the `zx-` prefix. Empty on the base, which is
22
+ * the same falsy answer the undeclared property gave — declared so the statics are visible to
23
+ * `this.constructor` and to the generated declarations.
24
+ * @type {string}
25
+ */
26
+ static cssName: string;
27
+ /** @type {Element} Root element. */
28
+ el: Element;
29
+ /** @type {Record<string, Element>} Elements captured by `h()` ref properties. */
30
+ refs: Record<string, Element>;
31
+ /** @type {Readonly<TOptions>} Merged component options. */
32
+ options: Readonly<TOptions>;
33
+ /**
34
+ * Creates a component around an existing target, or asks `render()` to create its root.
35
+ * @param {Element|string|null} target Existing element, selector, or null.
36
+ * @param {TOptions} [options={}] Component options.
37
+ */
38
+ constructor(target: Element | string | null, options?: TOptions);
39
+ /**
40
+ * Renders or enhances the component root. Subclasses creating a root must return it.
41
+ * @returns {Element|null}
42
+ */
43
+ render(): Element | null;
44
+ /**
45
+ * Subscribes to a component-level event for this component's lifetime.
46
+ * @param {string} type Lowercase event name.
47
+ * @param {ComponentListener|EventListenerObject} fn Listener.
48
+ * @returns {this}
49
+ */
50
+ on(type: string, fn: ComponentListener | EventListenerObject): this;
51
+ /**
52
+ * Removes a component-level event listener.
53
+ * @param {string} type Event name.
54
+ * @param {ComponentListener|EventListenerObject} fn Listener.
55
+ * @returns {this}
56
+ */
57
+ off(type: string, fn: ComponentListener | EventListenerObject): this;
58
+ /**
59
+ * Subscribes to one component-level event occurrence.
60
+ * @param {string} type Event name.
61
+ * @param {ComponentListener|EventListenerObject} fn Listener.
62
+ * @returns {this}
63
+ */
64
+ once(type: string, fn: ComponentListener | EventListenerObject): this;
65
+ /**
66
+ * MooTools-compatible alias of `on()`.
67
+ * @param {string} type Event name.
68
+ * @param {ComponentListener|EventListenerObject} fn Listener.
69
+ * @returns {this}
70
+ */
71
+ addEvent(type: string, fn: ComponentListener | EventListenerObject): this;
72
+ /**
73
+ * Dispatches a component event and a bubbling, composed `zx-*` DOM event.
74
+ * @param {string} type Lowercase event name.
75
+ * @param {Record<string, unknown>} [detail={}] Single event detail object.
76
+ * @returns {Event & {detail: Record<string, unknown>}}
77
+ * @fires Component#event
78
+ */
79
+ emit(type: string, detail?: Record<string, unknown>): Event & {
80
+ detail: Record<string, unknown>;
81
+ };
82
+ /**
83
+ * Adds an automatically cleaned-up DOM event listener.
84
+ * @param {EventTarget} element DOM event target.
85
+ * @param {string} type Event name.
86
+ * @param {EventListenerOrEventListenerObject} fn Listener.
87
+ * @param {boolean|AddEventListenerOptions} [opts={}] Listener options.
88
+ * @returns {this}
89
+ */
90
+ listen(element: EventTarget, type: string, fn: EventListenerOrEventListenerObject, opts?: boolean | AddEventListenerOptions): this;
91
+ /**
92
+ * Returns the component's root element.
93
+ * @returns {Element}
94
+ */
95
+ toElement(): Element;
96
+ /**
97
+ * Resolves and interpolates a component-local or global translation.
98
+ * @param {string} key Message key.
99
+ * @param {...unknown} args Positional interpolation values.
100
+ * @returns {string}
101
+ */
102
+ msg(key: string, ...args: unknown[]): string;
103
+ /**
104
+ * Aborts listeners, unregisters the component, and removes roots created by the component.
105
+ * Safe to call repeatedly.
106
+ * @returns {void}
107
+ */
108
+ destroy(): void;
109
+ /**
110
+ * Retrieves the component currently registered for an element.
111
+ * @param {Element} element Root element.
112
+ * @returns {Component|null}
113
+ */
114
+ static from(element: Element): Component | null;
115
+ }
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Formats a local Date using strftime-style kernel tokens.
3
+ * @param {Date} date Date to format.
4
+ * @param {string} fmt Format containing `%d %e %m %Y %y %H %M %S %a %A %b %B %s` tokens.
5
+ * @returns {string}
6
+ */
7
+ export declare function formatDate(date: Date, fmt: string): string;
8
+ /**
9
+ * Parses numeric date tokens from a string, returning null for mismatches or invalid dates.
10
+ * Unspecified fields default to 1970-01-01 00:00:00 local time.
11
+ * @param {string} str Date text.
12
+ * @param {string} fmt Matching numeric format.
13
+ * @returns {Date|null}
14
+ */
15
+ export declare function parseDate(str: string, fmt: string): Date | null;
16
+ /**
17
+ * Clamps a date to optional inclusive bounds and returns a new Date.
18
+ * @param {Date} date Date to clamp.
19
+ * @param {Date|null|undefined} min Minimum date.
20
+ * @param {Date|null|undefined} max Maximum date.
21
+ * @returns {Date}
22
+ */
23
+ export declare function clampDate(date: Date, min: Date | null | undefined, max: Date | null | undefined): Date;
24
+ /**
25
+ * Reports whether two dates share the same local calendar day.
26
+ * @param {Date} a First date.
27
+ * @param {Date} b Second date.
28
+ * @returns {boolean}
29
+ */
30
+ export declare function isSameDay(a: Date, b: Date): boolean;
31
+ /**
32
+ * Adds local calendar days without mutating the input.
33
+ * @param {Date} date Base date.
34
+ * @param {number} n Number of days.
35
+ * @returns {Date}
36
+ */
37
+ export declare function addDays(date: Date, n: number): Date;
38
+ /**
39
+ * Adds local calendar months without mutating the input, clamping to the target month's end.
40
+ * @param {Date} date Base date.
41
+ * @param {number} n Number of months.
42
+ * @returns {Date}
43
+ */
44
+ export declare function addMonths(date: Date, n: number): Date;
45
+ /**
46
+ * Returns the locale's first weekday (`0` Sunday through `6` Saturday), Monday by default.
47
+ * @param {string} [lang=getLanguage()] BCP 47 language tag.
48
+ * @returns {number}
49
+ */
50
+ export declare function getWeekStart(lang?: string): number;
@@ -0,0 +1,86 @@
1
+ export type ElementProvider = {
2
+ toElement: () => Node | null;
3
+ };
4
+ export type DomChild = Node | string | number | ElementProvider | null | undefined | Array<DomChild>;
5
+ export type HProps = {
6
+ /**
7
+ * Class name or names.
8
+ */
9
+ class?: string | string[];
10
+ /**
11
+ * Inline styles.
12
+ */
13
+ style?: string | Record<string, string | number>;
14
+ /**
15
+ * Data properties.
16
+ */
17
+ dataset?: Record<string, unknown>;
18
+ /**
19
+ * Ref name collected by `h.scope()`.
20
+ */
21
+ ref?: string;
22
+ };
23
+ /**
24
+ * Creates an element and appends normalized children.
25
+ * @param {string} tag Element tag name.
26
+ * @param {(HProps & Record<string, any>)|DomChild} [props] Properties and attributes, or the first child.
27
+ * @param {...DomChild} children Child values.
28
+ * @returns {HTMLElement}
29
+ */
30
+ export declare function h(tag: string, props?: (HProps & Record<string, any>) | DomChild, ...children: DomChild[]): HTMLElement;
31
+ export declare namespace h {
32
+ var scope: <T>(refs: Record<string, Element>, fn: () => T) => T;
33
+ var raw: (html: string) => DocumentFragment;
34
+ }
35
+ export type TargetSnapshot = {
36
+ children: Node[];
37
+ attributes: [string, string][];
38
+ };
39
+ /** @typedef {{children: Node[], attributes: [string, string][]}} TargetSnapshot */
40
+ /**
41
+ * Captures an enhanced target's children and attributes so `destroy()` can put it back exactly as
42
+ * it was found.
43
+ * @param {Element} element Target being taken over.
44
+ * @returns {TargetSnapshot}
45
+ */
46
+ export declare function snapshotTarget(element: Element): TargetSnapshot;
47
+ /**
48
+ * Restores a target captured by `snapshotTarget()`.
49
+ * @param {Element} element Target to restore.
50
+ * @param {TargetSnapshot|null} snapshot Snapshot taken before the takeover, or null to do nothing.
51
+ * @returns {void}
52
+ */
53
+ export declare function restoreTarget(element: Element, snapshot: TargetSnapshot | null): void;
54
+ /**
55
+ * Escapes text for safe insertion into an HTML string.
56
+ * @param {unknown} str Value to escape.
57
+ * @returns {string}
58
+ */
59
+ export declare function htmlEscape(str: unknown): string;
60
+ export type HighlightOptions = {
61
+ /**
62
+ * Class applied to each generated `<mark>`.
63
+ */
64
+ className?: string;
65
+ };
66
+ /**
67
+ * @typedef {Object} HighlightOptions
68
+ * @property {string} [className='zx-mark'] Class applied to each generated `<mark>`.
69
+ */
70
+ /**
71
+ * Wraps every case-insensitive occurrence of a query in a `<mark>` element and returns the result
72
+ * as a fragment. The text is placed in text nodes and the marks are built element by element, so
73
+ * this is safe for user and server data — no HTML is ever parsed. An empty or whitespace-only
74
+ * query yields the text unchanged in a single text node.
75
+ * @param {unknown} text Text to search.
76
+ * @param {unknown} query Search term, matched literally.
77
+ * @param {HighlightOptions} [options={}] Marking options.
78
+ * @returns {DocumentFragment}
79
+ */
80
+ export declare function highlightMatch(text: unknown, query: unknown, options?: HighlightOptions): DocumentFragment;
81
+ /**
82
+ * Resolves an Element, selector, or object exposing `toElement()`.
83
+ * @param {Element|string|ElementProvider|null|undefined} target Target to resolve.
84
+ * @returns {Element|null}
85
+ */
86
+ export declare function resolveElement(target: Element | string | ElementProvider | null | undefined): Element | null;
@@ -0,0 +1,70 @@
1
+ /**
2
+ * @typedef {Object} CsvColumn
3
+ * @property {string} id Row property read when no `value` accessor is given, and the default label.
4
+ * @property {string} [label] Header text; defaults to `id`.
5
+ * @property {(row: any) => unknown} [value] Accessor returning the cell value for a row.
6
+ */
7
+ export type CsvColumn = {
8
+ /**
9
+ * Row property read when no `value` accessor is given, and the default label.
10
+ */
11
+ id: string;
12
+ /**
13
+ * Header text; defaults to `id`.
14
+ */
15
+ label?: string;
16
+ /**
17
+ * Accessor returning the cell value for a row.
18
+ */
19
+ value?: (row: any) => unknown;
20
+ };
21
+ export type CsvOptions = {
22
+ /**
23
+ * Field separator; use `';'` for German Excel locales.
24
+ */
25
+ delimiter?: string;
26
+ /**
27
+ * Whether to emit the header row.
28
+ */
29
+ header?: boolean;
30
+ /**
31
+ * Record separator; RFC 4180 uses CRLF.
32
+ */
33
+ newline?: string;
34
+ };
35
+ export type DownloadOptions = {
36
+ /**
37
+ * MIME type of the generated blob.
38
+ */
39
+ type?: string;
40
+ };
41
+ /**
42
+ * Serialises rows to RFC 4180 CSV text.
43
+ *
44
+ * Fields containing the delimiter, a double quote, CR, or LF are quoted with inner quotes doubled.
45
+ * Dates become ISO strings, null and undefined become empty fields, and text that starts with
46
+ * `=`, `+`, `-`, or `@` is prefixed with a tab so spreadsheets treat it as text rather than a
47
+ * formula. Numbers are never prefixed, so negative amounts survive intact.
48
+ *
49
+ * @param {Iterable<any>|null|undefined} rows Row objects.
50
+ * @param {Array<string|CsvColumn>} columns Column ids, or descriptors with a label and accessor.
51
+ * @param {CsvOptions} [options={}] Serialisation options.
52
+ * @returns {string}
53
+ */
54
+ export declare function toCsv(rows: Iterable<any> | null | undefined, columns: Array<string | CsvColumn>, options?: CsvOptions): string;
55
+ /**
56
+ * Saves data to the user's downloads through a temporary object URL and anchor click.
57
+ * A UTF-8 BOM is prepended to CSV strings so Excel reads them as UTF-8.
58
+ * @param {string} filename Suggested file name including its extension.
59
+ * @param {string|Blob|ArrayBuffer|ArrayBufferView} data Payload to save.
60
+ * @param {DownloadOptions} [options={}] Blob options.
61
+ * @returns {void}
62
+ */
63
+ export declare function downloadBlob(filename: string, data: string | Blob | ArrayBuffer | ArrayBufferView, options?: DownloadOptions): void;
64
+ /**
65
+ * Copies text to the clipboard, falling back to a hidden textarea when the async Clipboard API is
66
+ * unavailable or blocked. Never rejects.
67
+ * @param {string} text Text to copy.
68
+ * @returns {Promise<boolean>} Whether the copy succeeded.
69
+ */
70
+ export declare function copyToClipboard(text: string): Promise<boolean>;
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Font Awesome knowledge for the icon layer: style/family class names, the built-in glyph
3
+ * name → Font Awesome name map, icon-spec parsing, and kit loading.
4
+ *
5
+ * Nothing here is imported by a component. `icons.js` uses it only after an application opts in
6
+ * with `useFontAwesome()` / `loadFontAwesome()`, so the zero-dependency default is untouched: Zx
7
+ * never fetches a kit, a stylesheet, or a webfont on its own.
8
+ */
9
+ /**
10
+ * Font Awesome style names mapped to their CSS class. `kit` is the pseudo-style for custom icons
11
+ * uploaded to a kit (`fa-kit fa-zeyos-notes`).
12
+ * @type {Readonly<Record<string, string>>}
13
+ */
14
+ export declare const faStyles: Readonly<Record<string, string>>;
15
+ /**
16
+ * Font Awesome families mapped to their CSS class. `classic` is the default and adds no class.
17
+ * @type {Readonly<Record<string, string>>}
18
+ */
19
+ export declare const faFamilies: Readonly<Record<string, string>>;
20
+ /**
21
+ * Built-in Zx glyph names mapped to their Font Awesome 6/7 counterpart, so the same component
22
+ * code renders either provider. Names not listed here are passed to Font Awesome unchanged.
23
+ * @type {Readonly<Record<string, string>>}
24
+ */
25
+ export declare const faNames: Readonly<Record<string, string>>;
26
+ export type IconSpec = {
27
+ /**
28
+ * Renderer the spec named, null when it named none.
29
+ */
30
+ provider: 'fa' | 'builtin' | null;
31
+ /**
32
+ * Bare icon name (`'user'`, `'zeyos-notes'`), empty for literal specs.
33
+ */
34
+ name: string;
35
+ /**
36
+ * Style named by the spec, if any.
37
+ */
38
+ style: string | null;
39
+ /**
40
+ * Literal class list when the spec was already CSS classes.
41
+ */
42
+ classes: string[] | null;
43
+ };
44
+ /**
45
+ * @typedef {Object} IconSpec
46
+ * @property {'fa'|'builtin'|null} provider Renderer the spec named, null when it named none.
47
+ * @property {string} name Bare icon name (`'user'`, `'zeyos-notes'`), empty for literal specs.
48
+ * @property {string|null} style Style named by the spec, if any.
49
+ * @property {string[]|null} classes Literal class list when the spec was already CSS classes.
50
+ */
51
+ /**
52
+ * Parses an icon spec into the renderer it names and the icon name it carries. Recognised forms:
53
+ *
54
+ * - `'fa-solid fa-user'`, `'fa-kit fa-zeyos-notes'` — a literal class list, used as given.
55
+ * - `'fa:user'`, `'fas:user'`, `'duotone:user'`, `'kit:zeyos-notes'` — prefix plus icon name.
56
+ * - `'builtin:check'` — forces one of the bundled inline SVG glyphs.
57
+ * - `'user'` — a bare name, left for the caller's active provider to interpret.
58
+ *
59
+ * @param {string} spec Icon spec.
60
+ * @returns {IconSpec}
61
+ */
62
+ export declare function parseIconSpec(spec: string): IconSpec;
63
+ export type FaClassOptions = {
64
+ /**
65
+ * Style name from `faStyles`.
66
+ */
67
+ style?: string;
68
+ /**
69
+ * Family name from `faFamilies`.
70
+ */
71
+ family?: string;
72
+ /**
73
+ * Adds `fa-fw` for column-aligned glyphs.
74
+ */
75
+ fixedWidth?: boolean;
76
+ /**
77
+ * Maps built-in Zx glyph names through `faNames`.
78
+ */
79
+ translate?: boolean;
80
+ };
81
+ /**
82
+ * @typedef {Object} FaClassOptions
83
+ * @property {string} [style='solid'] Style name from `faStyles`.
84
+ * @property {string} [family='classic'] Family name from `faFamilies`.
85
+ * @property {boolean} [fixedWidth=false] Adds `fa-fw` for column-aligned glyphs.
86
+ * @property {boolean} [translate=true] Maps built-in Zx glyph names through `faNames`.
87
+ */
88
+ /**
89
+ * Builds the Font Awesome class list for an icon name.
90
+ * @param {string} name Font Awesome icon name, with or without the `fa-` prefix.
91
+ * @param {FaClassOptions} [options={}] Style, family, and modifiers.
92
+ * @returns {string[]} Class names, style/family first.
93
+ */
94
+ export declare function faIconClasses(name: string, options?: FaClassOptions): string[];
95
+ /**
96
+ * Expands a kit token into its script URL. Full URLs and paths are returned unchanged.
97
+ * @param {string} kit Kit token (`'ae8320b210'`) or script URL.
98
+ * @returns {string}
99
+ */
100
+ export declare function kitUrl(kit: string): string;
101
+ /**
102
+ * Loads a Font Awesome kit script once per URL. Repeat calls return the first promise, and a kit
103
+ * the host page already embedded is adopted rather than loaded twice.
104
+ * @param {string} kit Kit token or script URL.
105
+ * @returns {Promise<void>} Resolves when the kit has loaded.
106
+ */
107
+ export declare function loadFontAwesomeKit(kit: string): Promise<void>;
@@ -0,0 +1,107 @@
1
+ export type NumberFormatOptions = {
2
+ /**
3
+ * BCP 47 language tag; defaults to the active language.
4
+ */
5
+ locale?: string;
6
+ /**
7
+ * Shorthand setting both the minimum and maximum fraction digits.
8
+ */
9
+ decimals?: number;
10
+ /**
11
+ * Minimum fraction digits.
12
+ */
13
+ minDecimals?: number;
14
+ /**
15
+ * Maximum fraction digits.
16
+ */
17
+ maxDecimals?: number;
18
+ /**
19
+ * Whether to insert the locale's grouping separators.
20
+ */
21
+ group?: boolean;
22
+ };
23
+ export type CurrencyFormatOptions = {
24
+ /**
25
+ * BCP 47 language tag.
26
+ */
27
+ locale?: string;
28
+ /**
29
+ * Fraction digits; defaults to the currency's own minor-unit count.
30
+ */
31
+ decimals?: number;
32
+ };
33
+ export type PercentFormatOptions = {
34
+ /**
35
+ * BCP 47 language tag.
36
+ */
37
+ locale?: string;
38
+ /**
39
+ * Fraction digits.
40
+ */
41
+ decimals?: number;
42
+ };
43
+ export type FileSizeFormatOptions = {
44
+ /**
45
+ * BCP 47 language tag.
46
+ */
47
+ locale?: string;
48
+ /**
49
+ * Maximum fraction digits; trailing zeros are dropped.
50
+ */
51
+ decimals?: number;
52
+ /**
53
+ * Binary KiB/MiB/GiB or decimal kB/MB/GB units.
54
+ */
55
+ standard?: 'iec' | 'si';
56
+ };
57
+ export type RelativeTimeFormatOptions = {
58
+ /**
59
+ * Reference point the date is measured against.
60
+ */
61
+ now?: Date | number | string;
62
+ /**
63
+ * BCP 47 language tag.
64
+ */
65
+ locale?: string;
66
+ /**
67
+ * `auto` produces "yesterday", `always` "1 day ago".
68
+ */
69
+ numeric?: 'auto' | 'always';
70
+ };
71
+ /**
72
+ * Formats a number for the active language.
73
+ * @param {number|string|null|undefined} value Value to format.
74
+ * @param {NumberFormatOptions} [options={}] Formatting options.
75
+ * @returns {string} Formatted number, or an empty string for null, undefined, and NaN.
76
+ */
77
+ export declare function formatNumber(value: number | string | null | undefined, options?: NumberFormatOptions): string;
78
+ /**
79
+ * Formats a monetary amount, falling back to plain number formatting when the currency code is
80
+ * missing or not shaped like an ISO 4217 code.
81
+ * @param {number|string|null|undefined} value Amount to format.
82
+ * @param {string|null|undefined} currency Three-letter ISO 4217 code such as `EUR`.
83
+ * @param {CurrencyFormatOptions} [options={}] Formatting options.
84
+ * @returns {string} Formatted amount, or an empty string for null, undefined, and NaN.
85
+ */
86
+ export declare function formatCurrency(value: number | string | null | undefined, currency: string | null | undefined, options?: CurrencyFormatOptions): string;
87
+ /**
88
+ * Formats a fraction as a percentage: `0.42` becomes `42%`.
89
+ * @param {number|string|null|undefined} value Fraction to format.
90
+ * @param {PercentFormatOptions} [options={}] Formatting options.
91
+ * @returns {string} Formatted percentage, or an empty string for null, undefined, and NaN.
92
+ */
93
+ export declare function formatPercent(value: number | string | null | undefined, options?: PercentFormatOptions): string;
94
+ /**
95
+ * Formats a byte count with binary (KiB) or decimal (kB) units.
96
+ * @param {number|string|null|undefined} bytes Byte count.
97
+ * @param {FileSizeFormatOptions} [options={}] Formatting options.
98
+ * @returns {string} Formatted size, `'0 B'` for zero, or an empty string for null and NaN.
99
+ */
100
+ export declare function formatFileSize(bytes: number | string | null | undefined, options?: FileSizeFormatOptions): string;
101
+ /**
102
+ * Formats a date relative to a reference point, picking the largest sensible unit.
103
+ * @param {Date|number|string|null|undefined} date Date, Unix timestamp in seconds, or ISO string.
104
+ * @param {RelativeTimeFormatOptions} [options={}] Formatting options.
105
+ * @returns {string} Formatted phrase, or an empty string when the date cannot be read.
106
+ */
107
+ export declare function formatRelativeTime(date: Date | number | string | null | undefined, options?: RelativeTimeFormatOptions): string;
@@ -0,0 +1,122 @@
1
+ /**
2
+ * @typedef {Object} HttpOptions
3
+ * @property {string} [base=''] URL prefix.
4
+ * @property {Record<string, string>} [headers={}] Default request headers.
5
+ * @property {((error: Error, context: {path: string, options: RequestOptions}) => void)|null} [onError=null]
6
+ * @property {number} [timeout=30000] Timeout in milliseconds; zero disables it.
7
+ */
8
+ export type HttpOptions = {
9
+ /**
10
+ * URL prefix.
11
+ */
12
+ base?: string;
13
+ /**
14
+ * Default request headers.
15
+ */
16
+ headers?: Record<string, string>;
17
+ onError?: ((error: Error, context: {
18
+ path: string;
19
+ options: RequestOptions;
20
+ }) => void) | null;
21
+ /**
22
+ * Timeout in milliseconds; zero disables it.
23
+ */
24
+ timeout?: number;
25
+ };
26
+ export type RequestOptions = {
27
+ /**
28
+ * HTTP method.
29
+ */
30
+ method?: string;
31
+ /**
32
+ * JSON or form data.
33
+ */
34
+ data?: unknown;
35
+ /**
36
+ * Files that switch the body to FormData.
37
+ */
38
+ files?: File | FileList | File[];
39
+ /**
40
+ * Query parameters.
41
+ */
42
+ query?: string | URLSearchParams | Record<string, unknown>;
43
+ /**
44
+ * Per-request headers.
45
+ */
46
+ headers?: Record<string, string>;
47
+ };
48
+ /**
49
+ * @typedef {Object} RequestOptions
50
+ * @property {string} [method='GET'] HTTP method.
51
+ * @property {unknown} [data=null] JSON or form data.
52
+ * @property {File|FileList|File[]} [files=null] Files that switch the body to FormData.
53
+ * @property {string|URLSearchParams|Record<string, unknown>} [query=null] Query parameters.
54
+ * @property {Record<string, string>} [headers={}] Per-request headers.
55
+ */
56
+ /** Dependency-free JSON fetch wrapper with legacy ZeyOS envelope handling. */
57
+ export declare class Http {
58
+ /** @type {string} */
59
+ base: string;
60
+ /** @type {Readonly<Record<string, string>>} */
61
+ headers: Readonly<Record<string, string>>;
62
+ /** @type {HttpOptions['onError']} */
63
+ onError: HttpOptions['onError'];
64
+ /** @type {number} */
65
+ timeout: number;
66
+ /**
67
+ * @param {HttpOptions} [options={}] Client defaults.
68
+ */
69
+ constructor({ base, headers, onError, timeout }?: HttpOptions);
70
+ /**
71
+ * Performs a request and returns its parsed JSON payload or legacy `result` value.
72
+ * @param {string} path Path relative to the configured base.
73
+ * @param {RequestOptions} [options={}] Request settings.
74
+ * @returns {Promise<any>}
75
+ */
76
+ request(path: string, options?: RequestOptions): Promise<any>;
77
+ /**
78
+ * Sends a GET request with query parameters.
79
+ * @param {string} path Request path.
80
+ * @param {RequestOptions['query']} [query=null] Query parameters.
81
+ * @returns {Promise<any>}
82
+ */
83
+ get(path: string, query?: RequestOptions['query']): Promise<any>;
84
+ /**
85
+ * Sends a POST request with a JSON body.
86
+ * @param {string} path Request path.
87
+ * @param {unknown} [data=null] Request data.
88
+ * @returns {Promise<any>}
89
+ */
90
+ post(path: string, data?: unknown): Promise<any>;
91
+ /**
92
+ * Sends a PUT request with a JSON body.
93
+ * @param {string} path Request path.
94
+ * @param {unknown} [data=null] Request data.
95
+ * @returns {Promise<any>}
96
+ */
97
+ put(path: string, data?: unknown): Promise<any>;
98
+ /**
99
+ * Sends a DELETE request with a JSON body.
100
+ * @param {string} path Request path.
101
+ * @param {unknown} [data=null] Request data.
102
+ * @returns {Promise<any>}
103
+ */
104
+ delete(path: string, data?: unknown): Promise<any>;
105
+ }
106
+ /**
107
+ * Creates an Http client for a ZeyOS remote-call service.
108
+ * @param {string} service Service name.
109
+ * @param {string} [accesskey=''] Optional service access key.
110
+ * @param {HttpOptions & {apiBase?: string}} [options={}] Client and API-base options.
111
+ * @returns {Http}
112
+ */
113
+ export declare function zeyosService(service: string, accesskey?: string, options?: HttpOptions & {
114
+ apiBase?: string;
115
+ }): Http;
116
+ /**
117
+ * Unwraps a legacy `{result}` response or throws a legacy `{error}` response.
118
+ * JSON values without either envelope key pass through unchanged.
119
+ * @param {any} json Parsed JSON value.
120
+ * @returns {any}
121
+ */
122
+ export declare function parseResult(json: any): any;