@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,91 @@
1
+ import { Component } from '../../core/component.js';
2
+ export type CopyInputOptions = {
3
+ /**
4
+ * Text shown and copied.
5
+ */
6
+ value?: string;
7
+ /**
8
+ * Visible label above the box.
9
+ */
10
+ label?: string;
11
+ /**
12
+ * Whether the label is kept for assistive technology only.
13
+ */
14
+ hideLabel?: boolean;
15
+ /**
16
+ * Confirmation shown after a copy.
17
+ */
18
+ feedback?: string;
19
+ /**
20
+ * Accessible name of the copy button.
21
+ */
22
+ buttonTitle?: string;
23
+ /**
24
+ * Control size.
25
+ */
26
+ size?: 'md' | 'sm';
27
+ /**
28
+ * Copy listener.
29
+ */
30
+ oncopy?: (event: CustomEvent<{
31
+ value: string;
32
+ copied: boolean;
33
+ }>) => void;
34
+ };
35
+ /**
36
+ * @typedef {Object} CopyInputOptions
37
+ * @property {string} [value=''] Text shown and copied.
38
+ * @property {string} [label=''] Visible label above the box.
39
+ * @property {boolean} [hideLabel=false] Whether the label is kept for assistive technology only.
40
+ * @property {string} [feedback='Copied'] Confirmation shown after a copy.
41
+ * @property {string} [buttonTitle='Copy'] Accessible name of the copy button.
42
+ * @property {'md'|'sm'} [size='md'] Control size.
43
+ * @property {(event: CustomEvent<{value: string, copied: boolean}>) => void} [oncopy] Copy listener.
44
+ */
45
+ /**
46
+ * A read-only box holding a value to be copied — an API endpoint, a document number, a share link
47
+ * — with the copy button attached.
48
+ *
49
+ * The field is `readonly` rather than `disabled` so the text stays selectable and reachable by
50
+ * keyboard; focusing it selects the whole value, which is what someone reaching for Ctrl+C
51
+ * expects.
52
+ *
53
+ * @fires CopyInput#copy
54
+ * @extends {Component<CopyInputOptions>}
55
+ */
56
+ export declare class CopyInput extends Component<CopyInputOptions> {
57
+ _createdRoot: boolean;
58
+ _snapshot: import("../../core/dom.js").TargetSnapshot;
59
+ static cssName: string;
60
+ /** @type {CopyInputOptions} */
61
+ static defaults: CopyInputOptions;
62
+ /** @returns {HTMLElement} */
63
+ render(): HTMLElement;
64
+ /**
65
+ * Returns the current value.
66
+ * @returns {string}
67
+ */
68
+ get(): string;
69
+ /**
70
+ * Replaces the value.
71
+ * @param {string} value Text to show and copy.
72
+ * @returns {this}
73
+ */
74
+ set(value: string): this;
75
+ /**
76
+ * Focuses the box and selects its contents.
77
+ *
78
+ * The selection is made here as well as in the `focus` listener: the listener covers a click or
79
+ * a Tab, but a programmatic `focus()` fires no focus event when the document itself is not
80
+ * focused, and the value would then be left uncopied under the caret.
81
+ * @returns {this}
82
+ */
83
+ focus(): this;
84
+ /** Restores an enhanced target to the markup it had before the takeover. @returns {void} */
85
+ destroy(): void;
86
+ }
87
+ /**
88
+ * Fired after a copy attempt; `copied` is false when the clipboard refused the write.
89
+ * @event CopyInput#copy
90
+ * @type {CustomEvent<{value: string, copied: boolean}>}
91
+ */
@@ -0,0 +1,250 @@
1
+ import { Component } from '../../core/component.js';
2
+ export type DataFilterRow = Record<string, any>;
3
+ export type DataFilterOption = {
4
+ /**
5
+ * Option value.
6
+ */
7
+ value: unknown;
8
+ /**
9
+ * Option label.
10
+ */
11
+ label?: string;
12
+ };
13
+ export type SelectFilterDefinition = {
14
+ type: 'select';
15
+ /**
16
+ * State key.
17
+ */
18
+ id: string;
19
+ /**
20
+ * Visible label.
21
+ */
22
+ label: string;
23
+ /**
24
+ * Single row field.
25
+ */
26
+ field?: string;
27
+ /**
28
+ * Row fields combined with OR.
29
+ */
30
+ fields?: Array<string | ((row: DataFilterRow) => unknown)>;
31
+ /**
32
+ * Custom value accessor.
33
+ */
34
+ get?: (row: DataFilterRow) => unknown;
35
+ /**
36
+ * Explicit options; omitted derives distinct values.
37
+ */
38
+ options?: Array<unknown | DataFilterOption>;
39
+ /**
40
+ * Empty option label.
41
+ */
42
+ emptyLabel?: string;
43
+ };
44
+ export type TextFilterDefinition = {
45
+ type: 'text';
46
+ /**
47
+ * State key.
48
+ */
49
+ id: string;
50
+ /**
51
+ * Visible label.
52
+ */
53
+ label: string;
54
+ /**
55
+ * Search fields.
56
+ */
57
+ fields: Array<string | ((row: DataFilterRow) => unknown)>;
58
+ /**
59
+ * Search placeholder.
60
+ */
61
+ placeholder?: string;
62
+ };
63
+ export type CustomFilterDefinition = {
64
+ type: 'custom';
65
+ /**
66
+ * State key.
67
+ */
68
+ id: string;
69
+ /**
70
+ * Visible label.
71
+ */
72
+ label: string;
73
+ /**
74
+ * User-supplied native or custom control.
75
+ */
76
+ element: Element;
77
+ /**
78
+ * Row predicate.
79
+ */
80
+ predicate: (row: DataFilterRow, value: unknown) => boolean;
81
+ };
82
+ export type FilterDefinition = SelectFilterDefinition | TextFilterDefinition | CustomFilterDefinition;
83
+ export type DataFilterOptions = {
84
+ /**
85
+ * Declarative filters.
86
+ */
87
+ filters?: FilterDefinition[];
88
+ /**
89
+ * Rows to filter.
90
+ */
91
+ data?: DataFilterRow[];
92
+ /**
93
+ * Apply and emit whenever a control changes.
94
+ */
95
+ autoApply?: boolean;
96
+ /**
97
+ * Clear button label; null resolves `dataFilter.clear`.
98
+ */
99
+ clearLabel?: string | null;
100
+ onfilter?: (event: CustomEvent<DataFilterEventDetail>) => void;
101
+ };
102
+ export type DataFilterEventDetail = {
103
+ rows: DataFilterRow[];
104
+ state: Record<string, unknown>;
105
+ };
106
+ /** @typedef {Record<string, any>} DataFilterRow */
107
+ /**
108
+ * @typedef {Object} DataFilterOption
109
+ * @property {unknown} value Option value.
110
+ * @property {string} [label] Option label.
111
+ */
112
+ /**
113
+ * @typedef {Object} SelectFilterDefinition
114
+ * @property {'select'} type
115
+ * @property {string} id State key.
116
+ * @property {string} label Visible label.
117
+ * @property {string} [field] Single row field.
118
+ * @property {Array<string|((row: DataFilterRow) => unknown)>} [fields] Row fields combined with OR.
119
+ * @property {(row: DataFilterRow) => unknown} [get] Custom value accessor.
120
+ * @property {Array<unknown|DataFilterOption>} [options] Explicit options; omitted derives distinct values.
121
+ * @property {string} [emptyLabel] Empty option label.
122
+ */
123
+ /**
124
+ * @typedef {Object} TextFilterDefinition
125
+ * @property {'text'} type
126
+ * @property {string} id State key.
127
+ * @property {string} label Visible label.
128
+ * @property {Array<string|((row: DataFilterRow) => unknown)>} fields Search fields.
129
+ * @property {string} [placeholder] Search placeholder.
130
+ */
131
+ /**
132
+ * @typedef {Object} CustomFilterDefinition
133
+ * @property {'custom'} type
134
+ * @property {string} id State key.
135
+ * @property {string} label Visible label.
136
+ * @property {Element} element User-supplied native or custom control.
137
+ * @property {(row: DataFilterRow, value: unknown) => boolean} predicate Row predicate.
138
+ */
139
+ /** @typedef {SelectFilterDefinition|TextFilterDefinition|CustomFilterDefinition} FilterDefinition */
140
+ /**
141
+ * @typedef {Object} DataFilterOptions
142
+ * @property {FilterDefinition[]} [filters=[]] Declarative filters.
143
+ * @property {DataFilterRow[]} [data=[]] Rows to filter.
144
+ * @property {boolean} [autoApply=true] Apply and emit whenever a control changes.
145
+ * @property {string|null} [clearLabel=null] Clear button label; null resolves `dataFilter.clear`.
146
+ * @property {(event: CustomEvent<DataFilterEventDetail>) => void} [onfilter]
147
+ */
148
+ /** @typedef {{rows: DataFilterRow[], state: Record<string, unknown>}} DataFilterEventDetail */
149
+ /**
150
+ * Inline declarative filter bar that produces a filtered copy of client-side data.
151
+ * @fires DataFilter#filter
152
+ * @extends {Component<DataFilterOptions>}
153
+ */
154
+ export declare class DataFilter extends Component<DataFilterOptions> {
155
+ _originalChildren: ChildNode[];
156
+ _filters: ({
157
+ type: 'custom';
158
+ id: string;
159
+ label: string;
160
+ element: Element;
161
+ predicate: (row: DataFilterRow, value: unknown) => boolean;
162
+ } | {
163
+ type: 'select';
164
+ id: string;
165
+ label: string;
166
+ field?: string;
167
+ fields?: Array<string | ((row: DataFilterRow) => unknown)>;
168
+ get?: (row: DataFilterRow) => unknown;
169
+ options?: Array<unknown | DataFilterOption>;
170
+ emptyLabel?: string;
171
+ } | {
172
+ type: 'text';
173
+ id: string;
174
+ label: string;
175
+ fields: Array<string | ((row: DataFilterRow) => unknown)>;
176
+ placeholder?: string;
177
+ })[];
178
+ _data: DataFilterRow[];
179
+ _state: {};
180
+ _entries: Map<any, any>;
181
+ _customOrigins: Map<any, any>;
182
+ _restored: boolean;
183
+ _filtered: import("./filter-core.js").FilterRow[];
184
+ _controls: HTMLElement;
185
+ _badge: HTMLElement;
186
+ _clearButton: HTMLElement;
187
+ static cssName: string;
188
+ /** @type {DataFilterOptions} */
189
+ static defaults: DataFilterOptions;
190
+ /**
191
+ * Creates a filter bar around a target or creates a new root when target is null.
192
+ * @param {Element|string|null} target Existing root, selector, or null.
193
+ * @param {DataFilterOptions} [options={}] Filter options.
194
+ */
195
+ constructor(target: Element | string | null, options?: DataFilterOptions);
196
+ /** @returns {HTMLElement} Filter root. */
197
+ render(): HTMLElement;
198
+ /**
199
+ * Replaces source rows and refreshes auto-derived select options.
200
+ * @param {DataFilterRow[]} rows New source rows.
201
+ * @returns {this}
202
+ * @fires DataFilter#filter
203
+ */
204
+ setData(rows: DataFilterRow[]): this;
205
+ /**
206
+ * Applies current state, emits the filtered rows, and returns them.
207
+ * @returns {DataFilterRow[]} Filtered copy.
208
+ * @fires DataFilter#filter
209
+ */
210
+ apply(): DataFilterRow[];
211
+ /**
212
+ * Clears every control and applies the empty state.
213
+ * @returns {this}
214
+ * @fires DataFilter#filter
215
+ */
216
+ clear(): this;
217
+ /** @returns {Record<string, unknown>} Shallow copy of state keyed by filter id. */
218
+ getState(): Record<string, unknown>;
219
+ /**
220
+ * Replaces filter state. Missing filter ids are cleared.
221
+ * @param {Record<string, unknown>} state State keyed by filter id.
222
+ * @returns {this}
223
+ * @fires DataFilter#filter
224
+ */
225
+ setState(state: Record<string, unknown>): this;
226
+ /**
227
+ * Adds one filter control without mutating the original options array.
228
+ * @param {FilterDefinition} definition Filter definition.
229
+ * @returns {this}
230
+ */
231
+ addFilter(definition: FilterDefinition): this;
232
+ /** Restores enhanced content and user-owned custom controls. @returns {void} */
233
+ destroy(): void;
234
+ /** @param {FilterDefinition} definition @returns {void} */
235
+ _appendFilter(definition: FilterDefinition): void;
236
+ /** @param {SelectFilterDefinition} definition @param {{element: HTMLSelectElement, options: Array<{value: unknown, label: string}>}} entry @returns {void} */
237
+ _populateSelect(definition: SelectFilterDefinition, entry: {
238
+ element: HTMLSelectElement;
239
+ options: Array<{
240
+ value: unknown;
241
+ label: string;
242
+ }>;
243
+ }): void;
244
+ /** @returns {void} */
245
+ _controlChanged(): void;
246
+ /** @returns {void} */
247
+ _syncControls(): void;
248
+ /** @returns {void} */
249
+ _syncActiveState(): void;
250
+ }
@@ -0,0 +1,52 @@
1
+ /** @typedef {Record<string, any>} FilterRow */
2
+ /** @typedef {Record<string, unknown>} FilterState */
3
+ export type FilterRow = Record<string, any>;
4
+ export type FilterState = Record<string, unknown>;
5
+ /**
6
+ * Normalizes searchable text for case- and diacritic-insensitive matching.
7
+ * @param {unknown} value Value to normalize.
8
+ * @returns {string} Normalized text.
9
+ */
10
+ export declare function normalizeText(value: unknown): string;
11
+ /**
12
+ * Tests a text corpus with whitespace-delimited, multi-word AND semantics.
13
+ * @param {unknown[]} values Searchable field values.
14
+ * @param {unknown} query Query value.
15
+ * @returns {boolean} Whether every query term occurs in the combined fields.
16
+ */
17
+ export declare function matchesText(values: unknown[], query: unknown): boolean;
18
+ /**
19
+ * Returns whether a filter state value represents an active filter.
20
+ * @param {unknown} value Filter value.
21
+ * @returns {boolean} Whether the value is active.
22
+ */
23
+ export declare function isActiveFilterValue(value: unknown): boolean;
24
+ /**
25
+ * Resolves all values addressed by a select or text filter definition.
26
+ * @param {FilterRow} row Source row.
27
+ * @param {Record<string, any>} definition Filter definition.
28
+ * @returns {unknown[]} Resolved values.
29
+ */
30
+ export declare function getFilterValues(row: FilterRow, definition: Record<string, any>): unknown[];
31
+ /**
32
+ * Derives distinct native-select options in first-seen order.
33
+ * Values shaped as `{value, label}` (or legacy `{field, label}`) retain their display label.
34
+ * @param {FilterRow[]} rows Source rows.
35
+ * @param {Record<string, any>} definition Select filter definition.
36
+ * @returns {Array<{value: unknown, label: string}>} Distinct options.
37
+ */
38
+ export declare function deriveSelectOptions(rows: FilterRow[], definition: Record<string, any>): Array<{
39
+ value: unknown;
40
+ label: string;
41
+ }>;
42
+ /** Alias for the distinct-option derivation used by DataFilter. */
43
+ export declare const deriveOptions: typeof deriveSelectOptions;
44
+ /**
45
+ * Applies all active filter definitions to an array without mutating it.
46
+ * Filters combine with AND; multiple fields inside one select filter combine with OR.
47
+ * @param {FilterRow[]} rows Source rows.
48
+ * @param {Array<Record<string, any>>} filterDefs Filter definitions.
49
+ * @param {FilterState} state Values keyed by filter id.
50
+ * @returns {FilterRow[]} Filtered copy.
51
+ */
52
+ export declare function applyFilters(rows: FilterRow[], filterDefs: Array<Record<string, any>>, state: FilterState): FilterRow[];
@@ -0,0 +1,137 @@
1
+ import { Component } from '../../core/component.js';
2
+ import { TimePicker } from './time-picker.js';
3
+ export type DatePickerOptions = {
4
+ /**
5
+ * Initially selected date.
6
+ */
7
+ value?: Date | null;
8
+ /**
9
+ * Earliest selectable local calendar day.
10
+ */
11
+ min?: Date | null;
12
+ /**
13
+ * Latest selectable local calendar day.
14
+ */
15
+ max?: Date | null;
16
+ /**
17
+ * First weekday, from 0 (Sunday) through 6 (Saturday).
18
+ */
19
+ weekStart?: number;
20
+ /**
21
+ * Show ISO week numbers.
22
+ */
23
+ showWeekNumbers?: boolean;
24
+ /**
25
+ * Append a time picker below the calendar.
26
+ */
27
+ time?: boolean;
28
+ /**
29
+ * Change listener.
30
+ */
31
+ onchange?: (event: CustomEvent<{
32
+ date: Date | null;
33
+ }>) => void;
34
+ /**
35
+ * Visible-month listener.
36
+ */
37
+ onmonthchange?: (event: CustomEvent<{
38
+ year: number;
39
+ month: number;
40
+ }>) => void;
41
+ };
42
+ export type DatePickerSetOptions = {
43
+ silent?: boolean;
44
+ };
45
+ /**
46
+ * @typedef {Object} DatePickerOptions
47
+ * @property {Date|null} [value=null] Initially selected date.
48
+ * @property {Date|null} [min=null] Earliest selectable local calendar day.
49
+ * @property {Date|null} [max=null] Latest selectable local calendar day.
50
+ * @property {number} [weekStart=1] First weekday, from 0 (Sunday) through 6 (Saturday).
51
+ * @property {boolean} [showWeekNumbers=false] Show ISO week numbers.
52
+ * @property {boolean} [time=false] Append a time picker below the calendar.
53
+ * @property {(event: CustomEvent<{date: Date|null}>) => void} [onchange] Change listener.
54
+ * @property {(event: CustomEvent<{year: number, month: number}>) => void} [onmonthchange] Visible-month listener.
55
+ */
56
+ /** @typedef {{silent?: boolean}} DatePickerSetOptions */
57
+ /**
58
+ * Accessible inline calendar following the APG date-picker grid pattern.
59
+ * @fires DatePicker#change
60
+ * @fires DatePicker#monthchange
61
+ * @extends {Component<DatePickerOptions>}
62
+ */
63
+ export declare class DatePicker extends Component<DatePickerOptions> {
64
+ _min: Date;
65
+ _max: Date;
66
+ _value: Date;
67
+ _focused: Date;
68
+ _viewYear: any;
69
+ _viewMonth: any;
70
+ _weekStart: number;
71
+ _quickOpen: boolean;
72
+ _timePicker: TimePicker;
73
+ _content: HTMLElement;
74
+ static cssName: string;
75
+ /** @type {DatePickerOptions} */
76
+ static defaults: DatePickerOptions;
77
+ /** @returns {HTMLElement} */
78
+ render(): HTMLElement;
79
+ /**
80
+ * Returns a copy of the selected date.
81
+ * @returns {Date|null}
82
+ */
83
+ get(): Date | null;
84
+ /**
85
+ * Selects a date, clamped to the configured day bounds.
86
+ * @param {Date|null} date Date to select, or null to clear.
87
+ * @param {DatePickerSetOptions} [options={}] Update behavior.
88
+ * @returns {this}
89
+ * @fires DatePicker#change
90
+ */
91
+ set(date: Date | null, { silent }?: DatePickerSetOptions): this;
92
+ /**
93
+ * Moves focus to the currently roving calendar day.
94
+ * @returns {this}
95
+ */
96
+ focus(): this;
97
+ /** Cleans up an appended time picker and generated host content. @returns {void} */
98
+ destroy(): void;
99
+ /** @param {Date|null} date @returns {Date|null} */
100
+ _normalizeValue(date: Date | null): Date | null;
101
+ /** @param {Date} date @returns {Date} */
102
+ _clampFocus(date: Date): Date;
103
+ /** @returns {void} */
104
+ _renderWeekdays(): void;
105
+ /** @returns {void} */
106
+ _renderCalendar(): void;
107
+ /** @param {Event} event @returns {void} */
108
+ _onDayClick(event: Event): void;
109
+ /** @param {KeyboardEvent} event @returns {void} */
110
+ _onDayKeydown(event: KeyboardEvent): void;
111
+ /** @param {Date} date @returns {void} */
112
+ _moveFocus(date: Date): void;
113
+ /** @param {Date} date @returns {void} */
114
+ _selectDate(date: Date): void;
115
+ /** @param {number} amount @returns {void} */
116
+ _pageMonth(amount: number): void;
117
+ /** @returns {void} */
118
+ _emitMonthChange(): void;
119
+ /** @returns {void} */
120
+ _toggleQuickPick(): void;
121
+ /** @returns {void} */
122
+ _closeQuickPick(): void;
123
+ /** @returns {void} */
124
+ _renderQuickPick(): void;
125
+ /** @param {number} amount @returns {void} */
126
+ _stepQuickYear(amount: number): void;
127
+ /** @param {Event} event @returns {void} */
128
+ _onQuickClick(event: Event): void;
129
+ /** @param {KeyboardEvent} event @returns {void} */
130
+ _onQuickKeydown(event: KeyboardEvent): void;
131
+ /** @param {number} month @returns {void} */
132
+ _chooseQuickMonth(month: number): void;
133
+ /** @param {Date} date @returns {boolean} */
134
+ _inRange(date: Date): boolean;
135
+ /** @param {Date} date @returns {HTMLButtonElement|null} */
136
+ _buttonForDate(date: Date): HTMLButtonElement | null;
137
+ }