@zeyos/zx 2.1.0 → 2.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 (311) hide show
  1. package/CHANGELOG.md +39 -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 +362 -33
  120. package/dist/zx-compat.esm.min.js +1 -1
  121. package/dist/zx-compat.global.js +359 -67
  122. package/dist/zx-compat.global.min.js +3 -3
  123. package/dist/zx-zeyos.esm.js +342 -43
  124. package/dist/zx-zeyos.esm.min.js +1 -1
  125. package/dist/zx.css +68 -6
  126. package/dist/zx.esm.js +346 -67
  127. package/dist/zx.esm.min.js +3 -3
  128. package/dist/zx.global.js +346 -67
  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 +28 -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 +1693 -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,118 @@
1
+ import { Component } from '../../core/component.js';
2
+ declare const HANDLE_POINTER_DISMISS: unique symbol;
3
+ declare const HANDLE_ESCAPE_DISMISS: unique symbol;
4
+ export type DropdownOptions = {
5
+ /**
6
+ * Panel content.
7
+ */
8
+ content?: Node | string | number | {
9
+ toElement: () => Node | null;
10
+ } | null;
11
+ /**
12
+ * Panel placement.
13
+ */
14
+ placement?: 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end' | 'bottom' | 'top';
15
+ /**
16
+ * Gap between anchor and panel in pixels.
17
+ */
18
+ offset?: number;
19
+ /**
20
+ * Whether the panel matches the anchor width.
21
+ */
22
+ matchWidth?: boolean;
23
+ /**
24
+ * Trigger behavior.
25
+ */
26
+ openOn?: 'click' | 'manual';
27
+ /**
28
+ * Whether a click within the panel closes it.
29
+ */
30
+ closeOnSelect?: boolean;
31
+ /**
32
+ * Open event listener.
33
+ */
34
+ onopen?: (event: CustomEvent<Record<string, never>>) => void;
35
+ /**
36
+ * Close event listener.
37
+ */
38
+ onclose?: (event: CustomEvent<Record<string, never>>) => void;
39
+ };
40
+ /**
41
+ * @typedef {Object} DropdownOptions
42
+ * @property {Node|string|number|{toElement: () => Node|null}|null} [content=null] Panel content.
43
+ * @property {'bottom-start'|'bottom-end'|'top-start'|'top-end'|'bottom'|'top'} [placement='bottom-start'] Panel placement.
44
+ * @property {number} [offset=4] Gap between anchor and panel in pixels.
45
+ * @property {boolean} [matchWidth=false] Whether the panel matches the anchor width.
46
+ * @property {'click'|'manual'} [openOn='click'] Trigger behavior.
47
+ * @property {boolean} [closeOnSelect=false] Whether a click within the panel closes it.
48
+ * @property {(event: CustomEvent<Record<string, never>>) => void} [onopen] Open event listener.
49
+ * @property {(event: CustomEvent<Record<string, never>>) => void} [onclose] Close event listener.
50
+ */
51
+ /**
52
+ * Generic anchored floating panel using the browser popover top layer.
53
+ * @fires Dropdown#open
54
+ * @fires Dropdown#close
55
+ * @extends {Component<DropdownOptions>}
56
+ */
57
+ export declare class Dropdown extends Component<DropdownOptions> {
58
+ #private;
59
+ static cssName: string;
60
+ /** @type {Readonly<DropdownOptions>} */
61
+ static defaults: Readonly<DropdownOptions>;
62
+ /**
63
+ * Creates a floating panel anchored to an existing element.
64
+ * @param {Element|string} anchor Anchor element or selector.
65
+ * @param {DropdownOptions} [options={}] Dropdown options.
66
+ */
67
+ constructor(anchor: Element | string, options?: DropdownOptions);
68
+ /**
69
+ * Creates the owned popover panel.
70
+ * @returns {HTMLElement}
71
+ */
72
+ render(): HTMLElement;
73
+ /**
74
+ * Opens and positions the panel.
75
+ * @returns {this}
76
+ * @fires Dropdown#open
77
+ */
78
+ open(): this;
79
+ /**
80
+ * Closes the panel and releases its positioning resources.
81
+ * @returns {this}
82
+ * @fires Dropdown#close
83
+ */
84
+ close(): this;
85
+ /**
86
+ * Toggles the panel.
87
+ * @returns {this}
88
+ */
89
+ toggle(): this;
90
+ /**
91
+ * Reports whether the panel is open.
92
+ * @returns {boolean}
93
+ */
94
+ isOpen(): boolean;
95
+ /**
96
+ * Replaces panel content without interpreting strings as HTML.
97
+ * @param {Node|string|number|{toElement: () => Node|null}|null} content Panel content.
98
+ * @returns {this}
99
+ */
100
+ setContent(content: Node | string | number | {
101
+ toElement: () => Node | null;
102
+ } | null): this;
103
+ /**
104
+ * Returns the owned popover panel.
105
+ * @returns {HTMLElement}
106
+ */
107
+ getPanel(): HTMLElement;
108
+ /**
109
+ * Closes and removes the panel, restoring anchor ARIA attributes.
110
+ * @returns {void}
111
+ */
112
+ destroy(): void;
113
+ /** @param {PointerEvent} event @returns {void} */
114
+ [HANDLE_POINTER_DISMISS](event: PointerEvent): void;
115
+ /** @param {KeyboardEvent} event @returns {void} */
116
+ [HANDLE_ESCAPE_DISMISS](event: KeyboardEvent): void;
117
+ }
118
+ export {};
@@ -0,0 +1,38 @@
1
+ export type ButtonOptions = import('../button/button.js').ButtonOptions;
2
+ export type EmptyStateOptions = {
3
+ /**
4
+ * Decorative icon name; null renders no icon.
5
+ */
6
+ icon?: string | null;
7
+ /**
8
+ * Headline text, rendered as a paragraph so page outlines stay intact.
9
+ */
10
+ title?: string;
11
+ /**
12
+ * Supporting sentence below the headline.
13
+ */
14
+ description?: string;
15
+ /**
16
+ * Buttons or button descriptors below the text.
17
+ */
18
+ actions?: Array<Element | ButtonOptions>;
19
+ /**
20
+ * Overall scale.
21
+ */
22
+ size?: 'md' | 'sm';
23
+ /**
24
+ * Content alignment.
25
+ */
26
+ align?: 'center' | 'start';
27
+ };
28
+ /**
29
+ * Creates the placeholder shown where a list, table, or panel has no content yet.
30
+ *
31
+ * Purely presentational: the icon is decorative, the headline is a paragraph rather than a heading
32
+ * so dropping the element into a Table's empty slot or a Panel body never disturbs the page's
33
+ * heading outline.
34
+ *
35
+ * @param {EmptyStateOptions} [opts={}] Empty-state options.
36
+ * @returns {HTMLDivElement}
37
+ */
38
+ export declare function emptyState(opts?: EmptyStateOptions): HTMLDivElement;
@@ -0,0 +1,231 @@
1
+ import { Component } from '../../core/component.js';
2
+ export type FieldOptions = {
3
+ /**
4
+ * Control ID and logical field identifier.
5
+ */
6
+ id?: string | null;
7
+ /**
8
+ * Registered field type.
9
+ */
10
+ type?: string;
11
+ /**
12
+ * Visible label.
13
+ */
14
+ label?: string;
15
+ /**
16
+ * Supporting description.
17
+ */
18
+ description?: string;
19
+ /**
20
+ * Initial value.
21
+ */
22
+ value?: unknown;
23
+ /**
24
+ * Control placeholder.
25
+ */
26
+ placeholder?: string;
27
+ /**
28
+ * Whether a value is required.
29
+ */
30
+ required?: boolean;
31
+ /**
32
+ * Whether the control is disabled.
33
+ */
34
+ disabled?: boolean;
35
+ /**
36
+ * Select or option-list values.
37
+ */
38
+ options?: string[] | Record<string, string> | null;
39
+ /**
40
+ * Label/control layout.
41
+ */
42
+ layout?: 'stack' | 'inline';
43
+ /**
44
+ * Adapter-specific control properties.
45
+ */
46
+ props?: Record<string, unknown>;
47
+ /**
48
+ * Adapter used by the `custom` type.
49
+ */
50
+ adapter?: FieldAdapterFactory;
51
+ };
52
+ export type FieldAdapter = {
53
+ /**
54
+ * Control root.
55
+ */
56
+ el: Element;
57
+ /**
58
+ * Read the current value.
59
+ */
60
+ get: () => unknown;
61
+ /**
62
+ * Set the current value.
63
+ */
64
+ set: (value: unknown, options?: {
65
+ silent?: boolean;
66
+ }) => void;
67
+ /**
68
+ * Focus the control.
69
+ */
70
+ focus: () => void;
71
+ /**
72
+ * Set disabled state.
73
+ */
74
+ setDisabled: (disabled: boolean) => void;
75
+ /**
76
+ * Release adapter-owned resources.
77
+ */
78
+ destroy?: () => void;
79
+ };
80
+ export type FieldAdapterFactory = (field: Field, options: Readonly<FieldOptions>) => FieldAdapter;
81
+ export type NumericCoercion = {
82
+ valid: boolean;
83
+ value: number | string;
84
+ };
85
+ /**
86
+ * @typedef {Object} FieldOptions
87
+ * @property {string|null} [id=null] Control ID and logical field identifier.
88
+ * @property {string} [type='text'] Registered field type.
89
+ * @property {string} [label=''] Visible label.
90
+ * @property {string} [description=''] Supporting description.
91
+ * @property {unknown} [value=undefined] Initial value.
92
+ * @property {string} [placeholder=''] Control placeholder.
93
+ * @property {boolean} [required=false] Whether a value is required.
94
+ * @property {boolean} [disabled=false] Whether the control is disabled.
95
+ * @property {string[]|Record<string, string>|null} [options=null] Select or option-list values.
96
+ * @property {'stack'|'inline'} [layout='stack'] Label/control layout.
97
+ * @property {Record<string, unknown>} [props={}] Adapter-specific control properties.
98
+ * @property {FieldAdapterFactory} [adapter] Adapter used by the `custom` type.
99
+ */
100
+ /**
101
+ * @typedef {Object} FieldAdapter
102
+ * @property {Element} el Control root.
103
+ * @property {() => unknown} get Read the current value.
104
+ * @property {(value: unknown, options?: {silent?: boolean}) => void} set Set the current value.
105
+ * @property {() => void} focus Focus the control.
106
+ * @property {(disabled: boolean) => void} setDisabled Set disabled state.
107
+ * @property {() => void} [destroy] Release adapter-owned resources.
108
+ */
109
+ /** @typedef {(field: Field, options: Readonly<FieldOptions>) => FieldAdapter} FieldAdapterFactory */
110
+ /** @typedef {{valid: boolean, value: number|string}} NumericCoercion */
111
+ /**
112
+ * One labelled form control backed by a registered adapter.
113
+ * @fires Field#change
114
+ * @fires Field#invalid
115
+ * @extends {Component<FieldOptions>}
116
+ */
117
+ export declare class Field extends Component<FieldOptions> {
118
+ #private;
119
+ _ownedComponents: Set<any>;
120
+ _ownedNodes: any[];
121
+ _rootAttributes: Map<string, string>;
122
+ controlId: string;
123
+ adapter: FieldAdapter;
124
+ _baseDescribedBy: string;
125
+ _descriptionId: string;
126
+ _highlightId: string;
127
+ _highlight: HTMLElement;
128
+ initialValue: unknown;
129
+ static cssName: string;
130
+ /** @type {FieldOptions & {msg: Record<string, string>}} */
131
+ static defaults: FieldOptions & {
132
+ msg: Record<string, string>;
133
+ };
134
+ /**
135
+ * Registers or replaces a field adapter.
136
+ * @param {string} type Adapter type name.
137
+ * @param {FieldAdapterFactory} adapter Adapter factory.
138
+ * @returns {typeof Field}
139
+ */
140
+ static register(type: string, adapter: FieldAdapterFactory): typeof Field;
141
+ /**
142
+ * Reports whether a field adapter is registered.
143
+ * @param {string} type Adapter type name.
144
+ * @returns {boolean}
145
+ */
146
+ static has(type: string): boolean;
147
+ /** @returns {HTMLElement} */
148
+ render(): HTMLElement;
149
+ /**
150
+ * Returns the adapter value.
151
+ * @returns {unknown}
152
+ */
153
+ getValue(): unknown;
154
+ /**
155
+ * Sets the adapter value.
156
+ * @param {unknown} value New value.
157
+ * @param {{silent?: boolean}} [options={}] Set `silent` to suppress `change`.
158
+ * @returns {this}
159
+ * @fires Field#change
160
+ */
161
+ setValue(value: unknown, { silent }?: {
162
+ silent?: boolean;
163
+ }): this;
164
+ /**
165
+ * Focuses the adapter control.
166
+ * @returns {this}
167
+ */
168
+ focus(): this;
169
+ /**
170
+ * Restores the initial value without emitting `change`.
171
+ * @returns {this}
172
+ */
173
+ reset(): this;
174
+ /**
175
+ * Enables or disables the adapter control.
176
+ * @param {boolean} disabled Disabled state.
177
+ * @returns {this}
178
+ */
179
+ setDisabled(disabled: boolean): this;
180
+ /**
181
+ * Displays a validation or status message.
182
+ * @param {string} message Message text.
183
+ * @param {'danger'|'warning'|'success'} [kind='danger'] Message kind.
184
+ * @returns {this}
185
+ */
186
+ setHighlight(message: string, kind?: 'danger' | 'warning' | 'success'): this;
187
+ /**
188
+ * Clears the current validation or status message.
189
+ * @returns {this}
190
+ */
191
+ clearHighlight(): this;
192
+ /**
193
+ * Returns the adapter's control root.
194
+ * @returns {Element}
195
+ */
196
+ getInput(): Element;
197
+ /**
198
+ * Registers a child component for destruction with this field.
199
+ * @template {Component} T
200
+ * @param {T} component Child component.
201
+ * @returns {T} The registered component.
202
+ */
203
+ own<T extends Component>(component: T): T;
204
+ /** @param {boolean} [highlighted=false] @returns {void} */
205
+ _syncDescription(highlighted?: boolean): void;
206
+ /** @returns {void} */
207
+ destroy(): void;
208
+ }
209
+ /**
210
+ * Coerces a localized integer string. Empty strings remain empty and valid.
211
+ * @param {unknown} input Input value.
212
+ * @returns {NumericCoercion}
213
+ */
214
+ export declare function coerceInteger(input: unknown): NumericCoercion;
215
+ /**
216
+ * Coerces a localized floating-point string. The rightmost comma or dot is the decimal separator
217
+ * when both occur, so values such as `1.234,56` are accepted.
218
+ * @param {unknown} input Input value.
219
+ * @returns {NumericCoercion}
220
+ */
221
+ export declare function coerceFloat(input: unknown): NumericCoercion;
222
+ /**
223
+ * Field value change event.
224
+ * @event Field#change
225
+ * @type {CustomEvent<{value: unknown}>}
226
+ */
227
+ /**
228
+ * Field validation failure event.
229
+ * @event Field#invalid
230
+ * @type {CustomEvent<{message: string}>}
231
+ */
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Registers the `upload` field type. Upload state remains server-owned, so its form value is null.
3
+ * @returns {void}
4
+ */
5
+ export declare function registerFieldUploadAdapter(): void;
@@ -0,0 +1,213 @@
1
+ import { Component } from '../../core/component.js';
2
+ export type UploadTransport = {
3
+ /**
4
+ * Upload method used by stubs.
5
+ */
6
+ upload?: (url: string, options: UploadTransportOptions) => Promise<unknown>;
7
+ /**
8
+ * Http-compatible request method.
9
+ */
10
+ request?: (url: string, options: Record<string, unknown>) => Promise<unknown>;
11
+ };
12
+ export type UploadTransportOptions = {
13
+ /**
14
+ * Selected files.
15
+ */
16
+ files: File[];
17
+ /**
18
+ * Multipart field name.
19
+ */
20
+ paramName: string;
21
+ /**
22
+ * Extra form values.
23
+ */
24
+ params: Record<string, unknown>;
25
+ /**
26
+ * Request headers.
27
+ */
28
+ headers: Record<string, string>;
29
+ /**
30
+ * Abort signal.
31
+ */
32
+ signal: AbortSignal;
33
+ /**
34
+ * Progress callback.
35
+ */
36
+ onProgress: (percent: number) => void;
37
+ };
38
+ export type FieldUploadOptions = {
39
+ /**
40
+ * Upload endpoint.
41
+ */
42
+ url?: string;
43
+ /**
44
+ * Multipart file field name.
45
+ */
46
+ paramName?: string;
47
+ /**
48
+ * Extra multipart values.
49
+ */
50
+ params?: Record<string, unknown>;
51
+ /**
52
+ * Request headers.
53
+ */
54
+ headers?: Record<string, string>;
55
+ /**
56
+ * Allow multiple files.
57
+ */
58
+ multiple?: boolean;
59
+ /**
60
+ * Native accept filter.
61
+ */
62
+ accept?: string | null;
63
+ /**
64
+ * Maximum size per file in bytes.
65
+ */
66
+ maxSize?: number | null;
67
+ /**
68
+ * Upload immediately after selection.
69
+ */
70
+ autoUpload?: boolean;
71
+ /**
72
+ * Show a preview for the first selected image.
73
+ */
74
+ preview?: boolean;
75
+ /**
76
+ * Injected Http-compatible or stub upload transport.
77
+ */
78
+ http?: UploadTransport | null;
79
+ };
80
+ /**
81
+ * @typedef {Object} UploadTransport
82
+ * @property {(url: string, options: UploadTransportOptions) => Promise<unknown>} [upload] Upload method used by stubs.
83
+ * @property {(url: string, options: Record<string, unknown>) => Promise<unknown>} [request] Http-compatible request method.
84
+ */
85
+ /**
86
+ * @typedef {Object} UploadTransportOptions
87
+ * @property {File[]} files Selected files.
88
+ * @property {string} paramName Multipart field name.
89
+ * @property {Record<string, unknown>} params Extra form values.
90
+ * @property {Record<string, string>} headers Request headers.
91
+ * @property {AbortSignal} signal Abort signal.
92
+ * @property {(percent: number) => void} onProgress Progress callback.
93
+ */
94
+ /**
95
+ * @typedef {Object} FieldUploadOptions
96
+ * @property {string} [url=''] Upload endpoint.
97
+ * @property {string} [paramName='upload'] Multipart file field name.
98
+ * @property {Record<string, unknown>} [params={}] Extra multipart values.
99
+ * @property {Record<string, string>} [headers={}] Request headers.
100
+ * @property {boolean} [multiple=false] Allow multiple files.
101
+ * @property {string|null} [accept=null] Native accept filter.
102
+ * @property {number|null} [maxSize=null] Maximum size per file in bytes.
103
+ * @property {boolean} [autoUpload=true] Upload immediately after selection.
104
+ * @property {boolean} [preview=true] Show a preview for the first selected image.
105
+ * @property {UploadTransport|null} [http=null] Injected Http-compatible or stub upload transport.
106
+ */
107
+ /**
108
+ * Accessible click/drop upload area. Native requests intentionally use XMLHttpRequest because
109
+ * browser fetch upload streams still do not expose portable upload progress events.
110
+ * @fires FieldUpload#select
111
+ * @fires FieldUpload#progress
112
+ * @fires FieldUpload#success
113
+ * @fires FieldUpload#error
114
+ * @fires FieldUpload#abort
115
+ * @extends {Component<FieldUploadOptions>}
116
+ */
117
+ export declare class FieldUpload extends Component<FieldUploadOptions> {
118
+ _ownedNodes: any[];
119
+ _files: any[] | File[];
120
+ _disabled: boolean;
121
+ _running: boolean;
122
+ _runId: number;
123
+ _xhr: XMLHttpRequest;
124
+ _transportController: AbortController;
125
+ _previewUrl: string;
126
+ _initialState: string;
127
+ _initialDisabled: string;
128
+ _input: HTMLElement;
129
+ _dropzone: HTMLElement;
130
+ _preview: HTMLElement;
131
+ _progress: HTMLElement;
132
+ _progressText: HTMLElement;
133
+ _abort: HTMLElement;
134
+ _progressWrap: HTMLElement;
135
+ _status: HTMLElement;
136
+ static cssName: string;
137
+ /** @type {FieldUploadOptions} */
138
+ static defaults: FieldUploadOptions;
139
+ /** @returns {HTMLElement} */
140
+ render(): HTMLElement;
141
+ /**
142
+ * Uploads supplied files, or the current selection when omitted.
143
+ * @param {File[]|FileList|null} [files=null] Optional files to select and upload.
144
+ * @returns {Promise<unknown|null>} Transport response, or null when no upload starts.
145
+ */
146
+ upload(files?: File[] | FileList | null): Promise<unknown | null>;
147
+ /**
148
+ * Aborts the active upload.
149
+ * @returns {this}
150
+ * @fires FieldUpload#abort
151
+ */
152
+ abort(): this;
153
+ /**
154
+ * Clears selection, preview, progress, and status.
155
+ * @returns {this}
156
+ */
157
+ clear(): this;
158
+ /**
159
+ * Enables or disables file selection and dropping.
160
+ * @param {boolean} disabled Disabled state.
161
+ * @returns {this}
162
+ */
163
+ setDisabled(disabled: boolean): this;
164
+ /** @param {FileList|File[]|ArrayLike<File>} files @returns {void} */
165
+ _selectFiles(files: FileList | File[] | ArrayLike<File>): void;
166
+ /** @param {FileList|File[]|ArrayLike<File>} files @returns {boolean} */
167
+ _setFiles(files: FileList | File[] | ArrayLike<File>): boolean;
168
+ /** @param {DragEvent} event @returns {void} */
169
+ _handleDragOver(event: DragEvent): void;
170
+ /** @returns {Promise<unknown>} */
171
+ _uploadInjected(): Promise<unknown>;
172
+ /** @returns {Promise<unknown>} */
173
+ _uploadXhr(): Promise<unknown>;
174
+ /** @param {number} percent @returns {void} */
175
+ _setProgress(percent: number): void;
176
+ /** @returns {void} */
177
+ _finishAbort(): void;
178
+ /** @param {Error} error @returns {void} */
179
+ _selectionError(error: Error): void;
180
+ /** @returns {void} */
181
+ _renderPreview(): void;
182
+ /** @returns {void} */
183
+ _revokePreview(): void;
184
+ /** @param {string} state @returns {void} */
185
+ _setState(state: string): void;
186
+ /** @returns {void} */
187
+ destroy(): void;
188
+ }
189
+ /**
190
+ * Files selected event.
191
+ * @event FieldUpload#select
192
+ * @type {CustomEvent<{files: File[]}>
193
+ */
194
+ /**
195
+ * Upload progress event.
196
+ * @event FieldUpload#progress
197
+ * @type {CustomEvent<{percent: number}>
198
+ */
199
+ /**
200
+ * Upload success event.
201
+ * @event FieldUpload#success
202
+ * @type {CustomEvent<{response: unknown}>
203
+ */
204
+ /**
205
+ * Upload failure event.
206
+ * @event FieldUpload#error
207
+ * @type {CustomEvent<{error: Error}>
208
+ */
209
+ /**
210
+ * Upload aborted event.
211
+ * @event FieldUpload#abort
212
+ * @type {CustomEvent<Record<string, never>>}
213
+ */