@vielzeug/refine 1.8.0 → 2.0.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 (809) hide show
  1. package/README.md +5 -12
  2. package/dist/_dev.cjs +1 -1
  3. package/dist/_dev.cjs.map +1 -1
  4. package/dist/_dev.js +2 -5
  5. package/dist/_dev.js.map +1 -1
  6. package/dist/_virtual/_rolldown/runtime.cjs +1 -1
  7. package/dist/accordion-item.cjs +26 -24
  8. package/dist/accordion-item.cjs.map +1 -1
  9. package/dist/accordion-item.js +53 -51
  10. package/dist/accordion-item.js.map +1 -1
  11. package/dist/accordion.cjs +3 -1
  12. package/dist/accordion.cjs.map +1 -1
  13. package/dist/accordion.js +5 -3
  14. package/dist/accordion.js.map +1 -1
  15. package/dist/alert.cjs +1 -1
  16. package/dist/alert.cjs.map +1 -1
  17. package/dist/alert.js +1 -1
  18. package/dist/alert.js.map +1 -1
  19. package/dist/async.cjs +4 -2
  20. package/dist/async.cjs.map +1 -1
  21. package/dist/async.js +4 -2
  22. package/dist/async.js.map +1 -1
  23. package/dist/avatar-group.cjs +7 -0
  24. package/dist/avatar-group.cjs.map +1 -0
  25. package/dist/avatar-group.js +34 -0
  26. package/dist/avatar-group.js.map +1 -0
  27. package/dist/avatar.cjs +21 -16
  28. package/dist/avatar.cjs.map +1 -1
  29. package/dist/avatar.js +38 -54
  30. package/dist/avatar.js.map +1 -1
  31. package/dist/badge.cjs +4 -2
  32. package/dist/badge.cjs.map +1 -1
  33. package/dist/badge.js +6 -4
  34. package/dist/badge.js.map +1 -1
  35. package/dist/box.cjs +3 -1
  36. package/dist/box.cjs.map +1 -1
  37. package/dist/box.js +24 -18
  38. package/dist/box.js.map +1 -1
  39. package/dist/breadcrumb.cjs +4 -4
  40. package/dist/breadcrumb.cjs.map +1 -1
  41. package/dist/breadcrumb.js +4 -4
  42. package/dist/breadcrumb.js.map +1 -1
  43. package/dist/button-group.cjs +3 -3
  44. package/dist/button-group.cjs.map +1 -1
  45. package/dist/button-group.js +18 -16
  46. package/dist/button-group.js.map +1 -1
  47. package/dist/button.cjs +16 -12
  48. package/dist/button.cjs.map +1 -1
  49. package/dist/button.js +31 -28
  50. package/dist/button.js.map +1 -1
  51. package/dist/calendar.cjs +94 -69
  52. package/dist/calendar.cjs.map +1 -1
  53. package/dist/calendar.js +131 -98
  54. package/dist/calendar.js.map +1 -1
  55. package/dist/card.cjs +7 -7
  56. package/dist/card.cjs.map +1 -1
  57. package/dist/card.js +53 -49
  58. package/dist/card.js.map +1 -1
  59. package/dist/carousel.cjs +65 -57
  60. package/dist/carousel.cjs.map +1 -1
  61. package/dist/carousel.js +157 -201
  62. package/dist/carousel.js.map +1 -1
  63. package/dist/chat-message.cjs +21 -19
  64. package/dist/chat-message.cjs.map +1 -1
  65. package/dist/chat-message.js +18 -15
  66. package/dist/chat-message.js.map +1 -1
  67. package/dist/checkbox-group.cjs +12 -10
  68. package/dist/checkbox-group.cjs.map +1 -1
  69. package/dist/checkbox-group.js +75 -76
  70. package/dist/checkbox-group.js.map +1 -1
  71. package/dist/checkbox.cjs +4 -4
  72. package/dist/checkbox.cjs.map +1 -1
  73. package/dist/checkbox.js +55 -55
  74. package/dist/checkbox.js.map +1 -1
  75. package/dist/chip.cjs +22 -20
  76. package/dist/chip.cjs.map +1 -1
  77. package/dist/chip.js +15 -12
  78. package/dist/chip.js.map +1 -1
  79. package/dist/code-window.cjs +8 -2
  80. package/dist/code-window.cjs.map +1 -1
  81. package/dist/code-window.js +8 -2
  82. package/dist/code-window.js.map +1 -1
  83. package/dist/combobox.cjs +63 -58
  84. package/dist/combobox.cjs.map +1 -1
  85. package/dist/combobox.js +199 -197
  86. package/dist/combobox.js.map +1 -1
  87. package/dist/command-palette.cjs +49 -29
  88. package/dist/command-palette.cjs.map +1 -1
  89. package/dist/command-palette.js +150 -118
  90. package/dist/command-palette.js.map +1 -1
  91. package/dist/content/avatar/avatar-group.d.ts +33 -0
  92. package/dist/content/avatar/avatar-group.d.ts.map +1 -0
  93. package/dist/content/avatar/avatar.d.ts +0 -32
  94. package/dist/content/avatar/avatar.d.ts.map +1 -1
  95. package/dist/content/card/card.css.cjs +1 -1
  96. package/dist/content/card/card.css.cjs.map +1 -1
  97. package/dist/content/card/card.css.js +1 -1
  98. package/dist/content/card/card.css.js.map +1 -1
  99. package/dist/content/card/card.d.ts.map +1 -1
  100. package/dist/content/carousel/carousel-slide.cjs +3 -1
  101. package/dist/content/carousel/carousel-slide.cjs.map +1 -1
  102. package/dist/content/carousel/carousel-slide.css.cjs +1 -1
  103. package/dist/content/carousel/carousel-slide.css.cjs.map +1 -1
  104. package/dist/content/carousel/carousel-slide.css.js +1 -1
  105. package/dist/content/carousel/carousel-slide.css.js.map +1 -1
  106. package/dist/content/carousel/carousel-slide.js +3 -1
  107. package/dist/content/carousel/carousel-slide.js.map +1 -1
  108. package/dist/content/carousel/carousel.css.cjs +1 -1
  109. package/dist/content/carousel/carousel.css.cjs.map +1 -1
  110. package/dist/content/carousel/carousel.css.js +1 -1
  111. package/dist/content/carousel/carousel.css.js.map +1 -1
  112. package/dist/content/carousel/carousel.d.ts +5 -19
  113. package/dist/content/carousel/carousel.d.ts.map +1 -1
  114. package/dist/content/chat-message/chat-message.d.ts.map +1 -1
  115. package/dist/content/index.d.ts +10 -2
  116. package/dist/content/index.d.ts.map +1 -1
  117. package/dist/content/list/_list-item-reveal.cjs +1 -1
  118. package/dist/content/list/_list-item-reveal.cjs.map +1 -1
  119. package/dist/content/list/_list-item-reveal.d.ts +2 -2
  120. package/dist/content/list/_list-item-reveal.d.ts.map +1 -1
  121. package/dist/content/list/_list-item-reveal.js +2 -2
  122. package/dist/content/list/_list-item-reveal.js.map +1 -1
  123. package/dist/content/list/list.d.ts.map +1 -1
  124. package/dist/content/marquee/index.d.ts +2 -0
  125. package/dist/content/marquee/index.d.ts.map +1 -0
  126. package/dist/content/marquee/marquee.css.cjs +2 -0
  127. package/dist/content/marquee/marquee.css.cjs.map +1 -0
  128. package/dist/content/marquee/marquee.css.js +6 -0
  129. package/dist/content/marquee/marquee.css.js.map +1 -0
  130. package/dist/content/marquee/marquee.d.ts +44 -0
  131. package/dist/content/marquee/marquee.d.ts.map +1 -0
  132. package/dist/content/stepper/_is-step-navigable.cjs +2 -0
  133. package/dist/content/stepper/_is-step-navigable.cjs.map +1 -0
  134. package/dist/content/stepper/_is-step-navigable.d.ts +14 -0
  135. package/dist/content/stepper/_is-step-navigable.d.ts.map +1 -0
  136. package/dist/content/stepper/_is-step-navigable.js +8 -0
  137. package/dist/content/stepper/_is-step-navigable.js.map +1 -0
  138. package/dist/content/stepper/step.css.cjs +2 -0
  139. package/dist/content/stepper/step.css.cjs.map +1 -0
  140. package/dist/content/stepper/step.css.js +6 -0
  141. package/dist/content/stepper/step.css.js.map +1 -0
  142. package/dist/content/stepper/step.d.ts +63 -0
  143. package/dist/content/stepper/step.d.ts.map +1 -0
  144. package/dist/content/stepper/stepper.css.cjs +2 -0
  145. package/dist/content/stepper/stepper.css.cjs.map +1 -0
  146. package/dist/content/stepper/stepper.css.js +6 -0
  147. package/dist/content/stepper/stepper.css.js.map +1 -0
  148. package/dist/content/stepper/stepper.d.ts +88 -0
  149. package/dist/content/stepper/stepper.d.ts.map +1 -0
  150. package/dist/copy-command.cjs +9 -3
  151. package/dist/copy-command.cjs.map +1 -1
  152. package/dist/copy-command.js +9 -3
  153. package/dist/copy-command.js.map +1 -1
  154. package/dist/{headless → core}/_internal.d.ts +3 -5
  155. package/dist/core/_internal.d.ts.map +1 -0
  156. package/dist/core/announcer.cjs.map +1 -0
  157. package/dist/core/announcer.d.ts.map +1 -0
  158. package/dist/{headless → core}/announcer.js +1 -1
  159. package/dist/core/announcer.js.map +1 -0
  160. package/dist/core/aria-reflection.cjs.map +1 -0
  161. package/dist/core/aria-reflection.d.ts.map +1 -0
  162. package/dist/{headless → core}/aria-reflection.js +1 -1
  163. package/dist/core/aria-reflection.js.map +1 -0
  164. package/dist/core/auto-resize.cjs.map +1 -0
  165. package/dist/core/auto-resize.d.ts.map +1 -0
  166. package/dist/{headless → core}/auto-resize.js +1 -1
  167. package/dist/core/auto-resize.js.map +1 -0
  168. package/dist/core/checkable.cjs.map +1 -0
  169. package/dist/core/checkable.d.ts.map +1 -0
  170. package/dist/{headless → core}/checkable.js +1 -1
  171. package/dist/core/checkable.js.map +1 -0
  172. package/dist/core/choice-field.cjs +2 -0
  173. package/dist/core/choice-field.cjs.map +1 -0
  174. package/dist/core/choice-field.d.ts.map +1 -0
  175. package/dist/{headless → core}/choice-field.js +3 -2
  176. package/dist/core/choice-field.js.map +1 -0
  177. package/dist/core/composer.cjs.map +1 -0
  178. package/dist/core/composer.d.ts.map +1 -0
  179. package/dist/{headless → core}/composer.js +1 -1
  180. package/dist/core/composer.js.map +1 -0
  181. package/dist/{headless → core}/date-picker.cjs +1 -1
  182. package/dist/core/date-picker.cjs.map +1 -0
  183. package/dist/core/date-picker.d.ts.map +1 -0
  184. package/dist/{headless → core}/date-picker.js +3 -3
  185. package/dist/core/date-picker.js.map +1 -0
  186. package/dist/core/direction.cjs.map +1 -0
  187. package/dist/core/direction.d.ts.map +1 -0
  188. package/dist/{headless → core}/direction.js +1 -1
  189. package/dist/core/direction.js.map +1 -0
  190. package/dist/core/field-base.cjs +2 -0
  191. package/dist/core/field-base.cjs.map +1 -0
  192. package/dist/{headless → core}/field-base.d.ts +3 -3
  193. package/dist/core/field-base.d.ts.map +1 -0
  194. package/dist/core/field-base.js +66 -0
  195. package/dist/core/field-base.js.map +1 -0
  196. package/dist/core/focus.cjs.map +1 -0
  197. package/dist/core/focus.d.ts.map +1 -0
  198. package/dist/{headless → core}/focus.js +1 -1
  199. package/dist/core/focus.js.map +1 -0
  200. package/dist/{headless → core}/index.d.ts +7 -6
  201. package/dist/core/index.d.ts.map +1 -0
  202. package/dist/{headless → core}/keyboard.cjs +1 -1
  203. package/dist/core/keyboard.cjs.map +1 -0
  204. package/dist/core/keyboard.d.ts.map +1 -0
  205. package/dist/{headless → core}/keyboard.js +2 -2
  206. package/dist/core/keyboard.js.map +1 -0
  207. package/dist/core/light-dom.cjs.map +1 -0
  208. package/dist/core/light-dom.d.ts.map +1 -0
  209. package/dist/{headless → core}/light-dom.js +1 -1
  210. package/dist/core/light-dom.js.map +1 -0
  211. package/dist/core/nav.cjs.map +1 -0
  212. package/dist/core/nav.d.ts.map +1 -0
  213. package/dist/{headless → core}/nav.js +1 -1
  214. package/dist/core/nav.js.map +1 -0
  215. package/dist/core/numbers.cjs.map +1 -0
  216. package/dist/core/numbers.d.ts.map +1 -0
  217. package/dist/{headless → core}/numbers.js +1 -1
  218. package/dist/core/numbers.js.map +1 -0
  219. package/dist/core/option-list.cjs +2 -0
  220. package/dist/core/option-list.cjs.map +1 -0
  221. package/dist/core/option-list.d.ts +49 -0
  222. package/dist/core/option-list.d.ts.map +1 -0
  223. package/dist/core/option-list.js +65 -0
  224. package/dist/core/option-list.js.map +1 -0
  225. package/dist/core/ore.cjs.map +1 -0
  226. package/dist/{headless → core}/ore.d.ts +2 -2
  227. package/dist/core/ore.d.ts.map +1 -0
  228. package/dist/{headless → core}/ore.js +1 -1
  229. package/dist/core/ore.js.map +1 -0
  230. package/dist/core/overlay.cjs +2 -0
  231. package/dist/core/overlay.cjs.map +1 -0
  232. package/dist/core/overlay.d.ts +41 -0
  233. package/dist/core/overlay.d.ts.map +1 -0
  234. package/dist/core/overlay.js +17 -0
  235. package/dist/core/overlay.js.map +1 -0
  236. package/dist/core/paginated-list.d.ts.map +1 -0
  237. package/dist/core/parse.cjs.map +1 -0
  238. package/dist/core/parse.d.ts.map +1 -0
  239. package/dist/{headless → core}/parse.js +1 -1
  240. package/dist/core/parse.js.map +1 -0
  241. package/dist/core/positioner.cjs +2 -0
  242. package/dist/core/positioner.cjs.map +1 -0
  243. package/dist/core/positioner.d.ts.map +1 -0
  244. package/dist/{headless → core}/positioner.js +7 -7
  245. package/dist/core/positioner.js.map +1 -0
  246. package/dist/core/ref-callback.cjs +2 -0
  247. package/dist/core/ref-callback.cjs.map +1 -0
  248. package/dist/core/ref-callback.d.ts.map +1 -0
  249. package/dist/{headless → core}/ref-callback.js +2 -2
  250. package/dist/core/ref-callback.js.map +1 -0
  251. package/dist/core/signals.cjs +2 -0
  252. package/dist/core/signals.cjs.map +1 -0
  253. package/dist/core/signals.d.ts.map +1 -0
  254. package/dist/{headless → core}/signals.js +3 -2
  255. package/dist/core/signals.js.map +1 -0
  256. package/dist/core/slider.cjs +2 -0
  257. package/dist/core/slider.cjs.map +1 -0
  258. package/dist/core/slider.d.ts.map +1 -0
  259. package/dist/{headless → core}/slider.js +3 -3
  260. package/dist/{headless/slider.cjs.map → core/slider.js.map} +1 -1
  261. package/dist/core/spinner.cjs +2 -0
  262. package/dist/core/spinner.cjs.map +1 -0
  263. package/dist/core/spinner.d.ts.map +1 -0
  264. package/dist/{headless → core}/spinner.js +3 -3
  265. package/dist/{headless/spinner.cjs.map → core/spinner.js.map} +1 -1
  266. package/dist/core/swipe.cjs.map +1 -0
  267. package/dist/core/swipe.d.ts.map +1 -0
  268. package/dist/{headless → core}/swipe.js +1 -1
  269. package/dist/core/swipe.js.map +1 -0
  270. package/dist/core/text-field.cjs.map +1 -0
  271. package/dist/core/text-field.d.ts.map +1 -0
  272. package/dist/{headless → core}/text-field.js +1 -1
  273. package/dist/core/text-field.js.map +1 -0
  274. package/dist/core/typeahead.cjs.map +1 -0
  275. package/dist/core/typeahead.d.ts.map +1 -0
  276. package/dist/{headless → core}/typeahead.js +1 -1
  277. package/dist/core/typeahead.js.map +1 -0
  278. package/dist/custom-elements.json +5079 -4595
  279. package/dist/datagrid.cjs +320 -271
  280. package/dist/datagrid.cjs.map +1 -1
  281. package/dist/datagrid.js +483 -429
  282. package/dist/datagrid.js.map +1 -1
  283. package/dist/date-picker.cjs +77 -62
  284. package/dist/date-picker.cjs.map +1 -1
  285. package/dist/date-picker.js +169 -146
  286. package/dist/date-picker.js.map +1 -1
  287. package/dist/dialog.cjs +3 -3
  288. package/dist/dialog.cjs.map +1 -1
  289. package/dist/dialog.js +18 -7
  290. package/dist/dialog.js.map +1 -1
  291. package/dist/disclosure/tabs/tabs.d.ts.map +1 -1
  292. package/dist/drawer.cjs +5 -5
  293. package/dist/drawer.cjs.map +1 -1
  294. package/dist/drawer.js +52 -47
  295. package/dist/drawer.js.map +1 -1
  296. package/dist/errors.cjs.map +1 -1
  297. package/dist/errors.js.map +1 -1
  298. package/dist/feedback/chip/chip.d.ts.map +1 -1
  299. package/dist/feedback/skeleton/skeleton.d.ts.map +1 -1
  300. package/dist/feedback/toast/index.d.ts +1 -1
  301. package/dist/feedback/toast/index.d.ts.map +1 -1
  302. package/dist/feedback/toast/toast.d.ts +16 -68
  303. package/dist/feedback/toast/toast.d.ts.map +1 -1
  304. package/dist/feedback/typing-indicator/typing-indicator.d.ts +1 -1
  305. package/dist/file-input.cjs +111 -78
  306. package/dist/file-input.cjs.map +1 -1
  307. package/dist/file-input.js +220 -183
  308. package/dist/file-input.js.map +1 -1
  309. package/dist/grid-item.cjs +3 -1
  310. package/dist/grid-item.cjs.map +1 -1
  311. package/dist/grid-item.js +3 -1
  312. package/dist/grid-item.js.map +1 -1
  313. package/dist/grid.cjs +3 -1
  314. package/dist/grid.cjs.map +1 -1
  315. package/dist/grid.js +6 -5
  316. package/dist/grid.js.map +1 -1
  317. package/dist/icon.cjs +5 -1
  318. package/dist/icon.cjs.map +1 -1
  319. package/dist/icon.js +50 -46
  320. package/dist/icon.js.map +1 -1
  321. package/dist/index.cjs +1 -1
  322. package/dist/index.d.ts +7 -8
  323. package/dist/index.d.ts.map +1 -1
  324. package/dist/index.js +2 -67
  325. package/dist/input.cjs +44 -40
  326. package/dist/input.cjs.map +1 -1
  327. package/dist/input.js +132 -130
  328. package/dist/input.js.map +1 -1
  329. package/dist/inputs/button-group/button-group.css.cjs +1 -1
  330. package/dist/inputs/button-group/button-group.css.cjs.map +1 -1
  331. package/dist/inputs/button-group/button-group.css.js +1 -1
  332. package/dist/inputs/button-group/button-group.css.js.map +1 -1
  333. package/dist/inputs/button-group/button-group.d.ts +6 -3
  334. package/dist/inputs/button-group/button-group.d.ts.map +1 -1
  335. package/dist/inputs/checkbox/checkbox.d.ts +6 -5
  336. package/dist/inputs/checkbox/checkbox.d.ts.map +1 -1
  337. package/dist/inputs/checkbox-group/checkbox-group.d.ts +1 -1
  338. package/dist/inputs/checkbox-group/checkbox-group.d.ts.map +1 -1
  339. package/dist/inputs/combobox/combobox.d.ts +4 -2
  340. package/dist/inputs/combobox/combobox.d.ts.map +1 -1
  341. package/dist/inputs/combobox/combobox.types.d.ts +5 -7
  342. package/dist/inputs/combobox/combobox.types.d.ts.map +1 -1
  343. package/dist/inputs/datagrid/datagrid-column.cjs +1 -1
  344. package/dist/inputs/datagrid/datagrid-column.cjs.map +1 -1
  345. package/dist/inputs/datagrid/datagrid-column.d.ts +1 -1
  346. package/dist/inputs/datagrid/datagrid-column.d.ts.map +1 -1
  347. package/dist/inputs/datagrid/datagrid-column.js +5 -5
  348. package/dist/inputs/datagrid/datagrid-column.js.map +1 -1
  349. package/dist/inputs/datagrid/datagrid-model.cjs +2 -0
  350. package/dist/inputs/datagrid/datagrid-model.cjs.map +1 -0
  351. package/dist/inputs/datagrid/datagrid-model.d.ts +101 -0
  352. package/dist/inputs/datagrid/datagrid-model.d.ts.map +1 -0
  353. package/dist/inputs/datagrid/datagrid-model.js +202 -0
  354. package/dist/inputs/datagrid/datagrid-model.js.map +1 -0
  355. package/dist/inputs/datagrid/datagrid-nav.cjs.map +1 -1
  356. package/dist/inputs/datagrid/datagrid.d.ts +44 -45
  357. package/dist/inputs/datagrid/datagrid.d.ts.map +1 -1
  358. package/dist/inputs/date-picker/date-picker.d.ts +4 -4
  359. package/dist/inputs/date-picker/date-picker.d.ts.map +1 -1
  360. package/dist/inputs/file-input/file-input-upload.cjs +1 -1
  361. package/dist/inputs/file-input/file-input-upload.cjs.map +1 -1
  362. package/dist/inputs/file-input/file-input-upload.d.ts.map +1 -1
  363. package/dist/inputs/file-input/file-input-upload.js +6 -3
  364. package/dist/inputs/file-input/file-input-upload.js.map +1 -1
  365. package/dist/inputs/file-input/file-input.d.ts.map +1 -1
  366. package/dist/inputs/index.d.ts +0 -4
  367. package/dist/inputs/index.d.ts.map +1 -1
  368. package/dist/inputs/input/input.d.ts +4 -10
  369. package/dist/inputs/input/input.d.ts.map +1 -1
  370. package/dist/inputs/message-composer/message-composer.d.ts +6 -10
  371. package/dist/inputs/message-composer/message-composer.d.ts.map +1 -1
  372. package/dist/inputs/number-input/number-input.d.ts +4 -10
  373. package/dist/inputs/number-input/number-input.d.ts.map +1 -1
  374. package/dist/inputs/otp-input/otp-input.d.ts +4 -6
  375. package/dist/inputs/otp-input/otp-input.d.ts.map +1 -1
  376. package/dist/inputs/radio/radio.d.ts +4 -3
  377. package/dist/inputs/radio/radio.d.ts.map +1 -1
  378. package/dist/inputs/radio-group/radio-group.d.ts +1 -1
  379. package/dist/inputs/radio-group/radio-group.d.ts.map +1 -1
  380. package/dist/inputs/rating/rating.d.ts +4 -5
  381. package/dist/inputs/rating/rating.d.ts.map +1 -1
  382. package/dist/inputs/select/select.d.ts +7 -9
  383. package/dist/inputs/select/select.d.ts.map +1 -1
  384. package/dist/inputs/shared/field-binding.cjs.map +1 -1
  385. package/dist/inputs/shared/field-binding.d.ts +1 -1
  386. package/dist/inputs/shared/field-binding.js.map +1 -1
  387. package/dist/inputs/shared/index.d.ts +0 -1
  388. package/dist/inputs/shared/index.d.ts.map +1 -1
  389. package/dist/inputs/shared/native-field-event.cjs +2 -0
  390. package/dist/inputs/shared/native-field-event.cjs.map +1 -0
  391. package/dist/inputs/shared/native-field-event.d.ts +6 -0
  392. package/dist/inputs/shared/native-field-event.d.ts.map +1 -0
  393. package/dist/inputs/shared/native-field-event.js +29 -0
  394. package/dist/inputs/shared/native-field-event.js.map +1 -0
  395. package/dist/inputs/shared/templates.cjs +18 -12
  396. package/dist/inputs/shared/templates.cjs.map +1 -1
  397. package/dist/inputs/shared/templates.d.ts +1 -1
  398. package/dist/inputs/shared/templates.d.ts.map +1 -1
  399. package/dist/inputs/shared/templates.js +19 -13
  400. package/dist/inputs/shared/templates.js.map +1 -1
  401. package/dist/inputs/slider/slider.css.cjs +1 -1
  402. package/dist/inputs/slider/slider.css.cjs.map +1 -1
  403. package/dist/inputs/slider/slider.css.js +1 -1
  404. package/dist/inputs/slider/slider.css.js.map +1 -1
  405. package/dist/inputs/slider/slider.d.ts +7 -10
  406. package/dist/inputs/slider/slider.d.ts.map +1 -1
  407. package/dist/inputs/switch/switch.d.ts +4 -3
  408. package/dist/inputs/switch/switch.d.ts.map +1 -1
  409. package/dist/inputs/textarea/textarea.d.ts +4 -10
  410. package/dist/inputs/textarea/textarea.d.ts.map +1 -1
  411. package/dist/inputs/time-picker/time-picker.d.ts +4 -4
  412. package/dist/inputs/time-picker/time-picker.d.ts.map +1 -1
  413. package/dist/layout/box/box.d.ts.map +1 -1
  414. package/dist/layout/navbar/navbar.css.cjs +1 -1
  415. package/dist/layout/navbar/navbar.css.cjs.map +1 -1
  416. package/dist/layout/navbar/navbar.css.js +1 -1
  417. package/dist/layout/navbar/navbar.css.js.map +1 -1
  418. package/dist/layout/navbar/navbar.d.ts +10 -0
  419. package/dist/layout/navbar/navbar.d.ts.map +1 -1
  420. package/dist/layout/sidebar/sidebar-item.css.cjs +1 -1
  421. package/dist/layout/sidebar/sidebar-item.css.cjs.map +1 -1
  422. package/dist/layout/sidebar/sidebar-item.css.js +1 -1
  423. package/dist/layout/sidebar/sidebar-item.css.js.map +1 -1
  424. package/dist/layout/sidebar/sidebar.css.cjs +1 -1
  425. package/dist/layout/sidebar/sidebar.css.cjs.map +1 -1
  426. package/dist/layout/sidebar/sidebar.css.js +1 -1
  427. package/dist/layout/sidebar/sidebar.css.js.map +1 -1
  428. package/dist/layout/sidebar/sidebar.d.ts.map +1 -1
  429. package/dist/list-item.cjs +2 -2
  430. package/dist/list-item.cjs.map +1 -1
  431. package/dist/list-item.js +4 -4
  432. package/dist/list-item.js.map +1 -1
  433. package/dist/list.cjs +3 -1
  434. package/dist/list.cjs.map +1 -1
  435. package/dist/list.js +28 -25
  436. package/dist/list.js.map +1 -1
  437. package/dist/marquee.cjs +32 -0
  438. package/dist/marquee.cjs.map +1 -0
  439. package/dist/marquee.js +93 -0
  440. package/dist/marquee.js.map +1 -0
  441. package/dist/menu.cjs +7 -7
  442. package/dist/menu.cjs.map +1 -1
  443. package/dist/menu.js +135 -103
  444. package/dist/menu.js.map +1 -1
  445. package/dist/message-composer.cjs +33 -31
  446. package/dist/message-composer.cjs.map +1 -1
  447. package/dist/message-composer.js +123 -123
  448. package/dist/message-composer.js.map +1 -1
  449. package/dist/navbar.cjs +17 -15
  450. package/dist/navbar.cjs.map +1 -1
  451. package/dist/navbar.js +108 -89
  452. package/dist/navbar.js.map +1 -1
  453. package/dist/number-input.cjs +19 -19
  454. package/dist/number-input.cjs.map +1 -1
  455. package/dist/number-input.js +94 -97
  456. package/dist/number-input.js.map +1 -1
  457. package/dist/otp-input.cjs +15 -13
  458. package/dist/otp-input.cjs.map +1 -1
  459. package/dist/otp-input.js +83 -82
  460. package/dist/otp-input.js.map +1 -1
  461. package/dist/overlay/command-palette/command-palette.d.ts +2 -2
  462. package/dist/overlay/command-palette/command-palette.d.ts.map +1 -1
  463. package/dist/overlay/command-palette/command-palette.types.d.ts +4 -5
  464. package/dist/overlay/command-palette/command-palette.types.d.ts.map +1 -1
  465. package/dist/overlay/dialog/dialog.d.ts +7 -6
  466. package/dist/overlay/dialog/dialog.d.ts.map +1 -1
  467. package/dist/overlay/drawer/drawer.d.ts +7 -10
  468. package/dist/overlay/drawer/drawer.d.ts.map +1 -1
  469. package/dist/overlay/index.d.ts +1 -1
  470. package/dist/overlay/index.d.ts.map +1 -1
  471. package/dist/overlay/menu/menu.d.ts +9 -7
  472. package/dist/overlay/menu/menu.d.ts.map +1 -1
  473. package/dist/overlay/popover/popover.d.ts +6 -11
  474. package/dist/overlay/popover/popover.d.ts.map +1 -1
  475. package/dist/overlay/shared/await-exit.cjs +1 -1
  476. package/dist/overlay/shared/await-exit.cjs.map +1 -1
  477. package/dist/overlay/shared/await-exit.js +1 -1
  478. package/dist/overlay/shared/await-exit.js.map +1 -1
  479. package/dist/overlay/shared/use-dialog.cjs +1 -1
  480. package/dist/overlay/shared/use-dialog.cjs.map +1 -1
  481. package/dist/overlay/shared/use-dialog.d.ts +13 -3
  482. package/dist/overlay/shared/use-dialog.d.ts.map +1 -1
  483. package/dist/overlay/shared/use-dialog.js +80 -72
  484. package/dist/overlay/shared/use-dialog.js.map +1 -1
  485. package/dist/overlay/shared/use-floating-trigger.cjs +1 -1
  486. package/dist/overlay/shared/use-floating-trigger.cjs.map +1 -1
  487. package/dist/overlay/shared/use-floating-trigger.d.ts +3 -1
  488. package/dist/overlay/shared/use-floating-trigger.d.ts.map +1 -1
  489. package/dist/overlay/shared/use-floating-trigger.js +64 -70
  490. package/dist/overlay/shared/use-floating-trigger.js.map +1 -1
  491. package/dist/overlay/tooltip/tooltip.d.ts +9 -0
  492. package/dist/overlay/tooltip/tooltip.d.ts.map +1 -1
  493. package/dist/pagination.cjs +69 -55
  494. package/dist/pagination.cjs.map +1 -1
  495. package/dist/pagination.js +70 -56
  496. package/dist/pagination.js.map +1 -1
  497. package/dist/password-strength.cjs +6 -4
  498. package/dist/password-strength.cjs.map +1 -1
  499. package/dist/password-strength.js +6 -4
  500. package/dist/password-strength.js.map +1 -1
  501. package/dist/popover.cjs +4 -4
  502. package/dist/popover.cjs.map +1 -1
  503. package/dist/popover.js +28 -17
  504. package/dist/popover.js.map +1 -1
  505. package/dist/progress.cjs +25 -17
  506. package/dist/progress.cjs.map +1 -1
  507. package/dist/progress.js +26 -18
  508. package/dist/progress.js.map +1 -1
  509. package/dist/radio-group.cjs +14 -12
  510. package/dist/radio-group.cjs.map +1 -1
  511. package/dist/radio-group.js +88 -89
  512. package/dist/radio-group.js.map +1 -1
  513. package/dist/radio.cjs +4 -4
  514. package/dist/radio.cjs.map +1 -1
  515. package/dist/radio.js +90 -90
  516. package/dist/radio.js.map +1 -1
  517. package/dist/rating.cjs +18 -16
  518. package/dist/rating.cjs.map +1 -1
  519. package/dist/rating.js +69 -69
  520. package/dist/rating.js.map +1 -1
  521. package/dist/refine.cjs +1669 -1324
  522. package/dist/refine.cjs.map +1 -1
  523. package/dist/refine.iife.js +1656 -1311
  524. package/dist/refine.iife.js.map +1 -1
  525. package/dist/refine.js +1759 -1414
  526. package/dist/refine.js.map +1 -1
  527. package/dist/register.d.ts +21 -0
  528. package/dist/register.d.ts.map +1 -0
  529. package/dist/select.cjs +59 -51
  530. package/dist/select.cjs.map +1 -1
  531. package/dist/select.js +189 -182
  532. package/dist/select.js.map +1 -1
  533. package/dist/separator.cjs +9 -9
  534. package/dist/separator.cjs.map +1 -1
  535. package/dist/separator.js +9 -9
  536. package/dist/separator.js.map +1 -1
  537. package/dist/shared/index.d.ts +1 -1
  538. package/dist/shared/prop-bundles.cjs +1 -1
  539. package/dist/shared/prop-bundles.cjs.map +1 -1
  540. package/dist/shared/prop-bundles.js +4 -2
  541. package/dist/shared/prop-bundles.js.map +1 -1
  542. package/dist/shared/size-presets.cjs +1 -1
  543. package/dist/shared/size-presets.cjs.map +1 -1
  544. package/dist/shared/size-presets.d.ts +3 -0
  545. package/dist/shared/size-presets.d.ts.map +1 -1
  546. package/dist/shared/size-presets.js +4 -1
  547. package/dist/shared/size-presets.js.map +1 -1
  548. package/dist/sidebar.cjs +8 -8
  549. package/dist/sidebar.cjs.map +1 -1
  550. package/dist/sidebar.js +25 -25
  551. package/dist/sidebar.js.map +1 -1
  552. package/dist/skeleton.cjs +4 -6
  553. package/dist/skeleton.cjs.map +1 -1
  554. package/dist/skeleton.js +21 -22
  555. package/dist/skeleton.js.map +1 -1
  556. package/dist/slider.cjs +14 -14
  557. package/dist/slider.cjs.map +1 -1
  558. package/dist/slider.js +160 -168
  559. package/dist/slider.js.map +1 -1
  560. package/dist/step.cjs +47 -0
  561. package/dist/step.cjs.map +1 -0
  562. package/dist/step.js +127 -0
  563. package/dist/step.js.map +1 -0
  564. package/dist/stepper.cjs +8 -0
  565. package/dist/stepper.cjs.map +1 -0
  566. package/dist/stepper.js +101 -0
  567. package/dist/stepper.js.map +1 -0
  568. package/dist/styles/index.d.ts +0 -28
  569. package/dist/styles/index.d.ts.map +1 -1
  570. package/dist/styles/mixins/shape.css.cjs +2 -2
  571. package/dist/styles/mixins/shape.css.cjs.map +1 -1
  572. package/dist/styles/mixins/shape.css.js +6 -6
  573. package/dist/styles/mixins/shape.css.js.map +1 -1
  574. package/dist/styles/tokens.css +4 -0
  575. package/dist/switch.cjs +4 -4
  576. package/dist/switch.cjs.map +1 -1
  577. package/dist/switch.js +44 -44
  578. package/dist/switch.js.map +1 -1
  579. package/dist/tab-item.cjs +3 -3
  580. package/dist/tab-item.cjs.map +1 -1
  581. package/dist/tab-item.js +24 -24
  582. package/dist/tab-item.js.map +1 -1
  583. package/dist/tab-panel.cjs +7 -5
  584. package/dist/tab-panel.cjs.map +1 -1
  585. package/dist/tab-panel.js +14 -12
  586. package/dist/tab-panel.js.map +1 -1
  587. package/dist/table.cjs +3 -1
  588. package/dist/table.cjs.map +1 -1
  589. package/dist/table.js +3 -1
  590. package/dist/table.js.map +1 -1
  591. package/dist/tabs.cjs +6 -6
  592. package/dist/tabs.cjs.map +1 -1
  593. package/dist/tabs.js +30 -29
  594. package/dist/tabs.js.map +1 -1
  595. package/dist/text.cjs +3 -1
  596. package/dist/text.cjs.map +1 -1
  597. package/dist/text.js +3 -1
  598. package/dist/text.js.map +1 -1
  599. package/dist/textarea.cjs +22 -22
  600. package/dist/textarea.cjs.map +1 -1
  601. package/dist/textarea.js +110 -112
  602. package/dist/textarea.js.map +1 -1
  603. package/dist/time-picker.cjs +69 -61
  604. package/dist/time-picker.cjs.map +1 -1
  605. package/dist/time-picker.js +146 -132
  606. package/dist/time-picker.js.map +1 -1
  607. package/dist/toast.cjs +22 -22
  608. package/dist/toast.cjs.map +1 -1
  609. package/dist/toast.js +280 -173
  610. package/dist/toast.js.map +1 -1
  611. package/dist/tooltip.cjs +5 -5
  612. package/dist/tooltip.cjs.map +1 -1
  613. package/dist/tooltip.js +61 -51
  614. package/dist/tooltip.js.map +1 -1
  615. package/dist/typing-indicator.cjs +1 -1
  616. package/dist/typing-indicator.cjs.map +1 -1
  617. package/dist/typing-indicator.js +5 -5
  618. package/dist/typing-indicator.js.map +1 -1
  619. package/dist/utils/link.cjs.map +1 -1
  620. package/dist/utils/link.d.ts +2 -2
  621. package/package.json +35 -117
  622. package/dist/form.cjs +0 -11
  623. package/dist/form.cjs.map +0 -1
  624. package/dist/form.js +0 -59
  625. package/dist/form.js.map +0 -1
  626. package/dist/headless/_internal.d.ts.map +0 -1
  627. package/dist/headless/announcer.cjs.map +0 -1
  628. package/dist/headless/announcer.d.ts.map +0 -1
  629. package/dist/headless/announcer.js.map +0 -1
  630. package/dist/headless/aria-reflection.cjs.map +0 -1
  631. package/dist/headless/aria-reflection.d.ts.map +0 -1
  632. package/dist/headless/aria-reflection.js.map +0 -1
  633. package/dist/headless/auto-resize.cjs.map +0 -1
  634. package/dist/headless/auto-resize.d.ts.map +0 -1
  635. package/dist/headless/auto-resize.js.map +0 -1
  636. package/dist/headless/checkable.cjs.map +0 -1
  637. package/dist/headless/checkable.d.ts.map +0 -1
  638. package/dist/headless/checkable.js.map +0 -1
  639. package/dist/headless/choice-field.cjs +0 -2
  640. package/dist/headless/choice-field.cjs.map +0 -1
  641. package/dist/headless/choice-field.d.ts.map +0 -1
  642. package/dist/headless/choice-field.js.map +0 -1
  643. package/dist/headless/composer.cjs.map +0 -1
  644. package/dist/headless/composer.d.ts.map +0 -1
  645. package/dist/headless/composer.js.map +0 -1
  646. package/dist/headless/datagrid.cjs +0 -2
  647. package/dist/headless/datagrid.cjs.map +0 -1
  648. package/dist/headless/datagrid.d.ts +0 -158
  649. package/dist/headless/datagrid.d.ts.map +0 -1
  650. package/dist/headless/datagrid.js +0 -55
  651. package/dist/headless/datagrid.js.map +0 -1
  652. package/dist/headless/date-picker.cjs.map +0 -1
  653. package/dist/headless/date-picker.d.ts.map +0 -1
  654. package/dist/headless/date-picker.js.map +0 -1
  655. package/dist/headless/direction.cjs.map +0 -1
  656. package/dist/headless/direction.d.ts.map +0 -1
  657. package/dist/headless/direction.js.map +0 -1
  658. package/dist/headless/field-base.cjs +0 -2
  659. package/dist/headless/field-base.cjs.map +0 -1
  660. package/dist/headless/field-base.d.ts.map +0 -1
  661. package/dist/headless/field-base.js +0 -72
  662. package/dist/headless/field-base.js.map +0 -1
  663. package/dist/headless/focus.cjs.map +0 -1
  664. package/dist/headless/focus.d.ts.map +0 -1
  665. package/dist/headless/focus.js.map +0 -1
  666. package/dist/headless/index.d.ts.map +0 -1
  667. package/dist/headless/keyboard.cjs.map +0 -1
  668. package/dist/headless/keyboard.d.ts.map +0 -1
  669. package/dist/headless/keyboard.js.map +0 -1
  670. package/dist/headless/light-dom.cjs.map +0 -1
  671. package/dist/headless/light-dom.d.ts.map +0 -1
  672. package/dist/headless/light-dom.js.map +0 -1
  673. package/dist/headless/nav.cjs.map +0 -1
  674. package/dist/headless/nav.d.ts.map +0 -1
  675. package/dist/headless/nav.js.map +0 -1
  676. package/dist/headless/numbers.cjs.map +0 -1
  677. package/dist/headless/numbers.d.ts.map +0 -1
  678. package/dist/headless/numbers.js.map +0 -1
  679. package/dist/headless/option-list.cjs +0 -2
  680. package/dist/headless/option-list.cjs.map +0 -1
  681. package/dist/headless/option-list.d.ts +0 -107
  682. package/dist/headless/option-list.d.ts.map +0 -1
  683. package/dist/headless/option-list.js +0 -66
  684. package/dist/headless/option-list.js.map +0 -1
  685. package/dist/headless/ore.cjs.map +0 -1
  686. package/dist/headless/ore.d.ts.map +0 -1
  687. package/dist/headless/ore.js.map +0 -1
  688. package/dist/headless/overlay.cjs +0 -2
  689. package/dist/headless/overlay.cjs.map +0 -1
  690. package/dist/headless/overlay.d.ts +0 -64
  691. package/dist/headless/overlay.d.ts.map +0 -1
  692. package/dist/headless/overlay.js +0 -32
  693. package/dist/headless/overlay.js.map +0 -1
  694. package/dist/headless/paginated-list.cjs +0 -2
  695. package/dist/headless/paginated-list.cjs.map +0 -1
  696. package/dist/headless/paginated-list.d.ts.map +0 -1
  697. package/dist/headless/paginated-list.js +0 -34
  698. package/dist/headless/paginated-list.js.map +0 -1
  699. package/dist/headless/parse.cjs.map +0 -1
  700. package/dist/headless/parse.d.ts.map +0 -1
  701. package/dist/headless/parse.js.map +0 -1
  702. package/dist/headless/positioner.cjs +0 -2
  703. package/dist/headless/positioner.cjs.map +0 -1
  704. package/dist/headless/positioner.d.ts.map +0 -1
  705. package/dist/headless/positioner.js.map +0 -1
  706. package/dist/headless/ref-callback.cjs +0 -2
  707. package/dist/headless/ref-callback.cjs.map +0 -1
  708. package/dist/headless/ref-callback.d.ts.map +0 -1
  709. package/dist/headless/ref-callback.js.map +0 -1
  710. package/dist/headless/selection-control.cjs +0 -2
  711. package/dist/headless/selection-control.cjs.map +0 -1
  712. package/dist/headless/selection-control.d.ts +0 -30
  713. package/dist/headless/selection-control.d.ts.map +0 -1
  714. package/dist/headless/selection-control.js +0 -44
  715. package/dist/headless/selection-control.js.map +0 -1
  716. package/dist/headless/signals.cjs +0 -2
  717. package/dist/headless/signals.cjs.map +0 -1
  718. package/dist/headless/signals.d.ts.map +0 -1
  719. package/dist/headless/signals.js.map +0 -1
  720. package/dist/headless/slider.cjs +0 -2
  721. package/dist/headless/slider.d.ts.map +0 -1
  722. package/dist/headless/slider.js.map +0 -1
  723. package/dist/headless/sort-control.cjs +0 -2
  724. package/dist/headless/sort-control.cjs.map +0 -1
  725. package/dist/headless/sort-control.d.ts +0 -22
  726. package/dist/headless/sort-control.d.ts.map +0 -1
  727. package/dist/headless/sort-control.js +0 -36
  728. package/dist/headless/sort-control.js.map +0 -1
  729. package/dist/headless/spinner.cjs +0 -2
  730. package/dist/headless/spinner.d.ts.map +0 -1
  731. package/dist/headless/spinner.js.map +0 -1
  732. package/dist/headless/swipe.cjs.map +0 -1
  733. package/dist/headless/swipe.d.ts.map +0 -1
  734. package/dist/headless/swipe.js.map +0 -1
  735. package/dist/headless/text-field.cjs.map +0 -1
  736. package/dist/headless/text-field.d.ts.map +0 -1
  737. package/dist/headless/text-field.js.map +0 -1
  738. package/dist/headless/typeahead.cjs.map +0 -1
  739. package/dist/headless/typeahead.d.ts.map +0 -1
  740. package/dist/headless/typeahead.js.map +0 -1
  741. package/dist/headless.cjs +0 -1
  742. package/dist/headless.js +0 -30
  743. package/dist/inputs/datagrid/datagrid-controls.cjs +0 -2
  744. package/dist/inputs/datagrid/datagrid-controls.cjs.map +0 -1
  745. package/dist/inputs/datagrid/datagrid-controls.d.ts +0 -98
  746. package/dist/inputs/datagrid/datagrid-controls.d.ts.map +0 -1
  747. package/dist/inputs/datagrid/datagrid-controls.js +0 -147
  748. package/dist/inputs/datagrid/datagrid-controls.js.map +0 -1
  749. package/dist/inputs/form/form.css.cjs +0 -2
  750. package/dist/inputs/form/form.css.cjs.map +0 -1
  751. package/dist/inputs/form/form.css.js +0 -6
  752. package/dist/inputs/form/form.css.js.map +0 -1
  753. package/dist/inputs/form/form.d.ts +0 -59
  754. package/dist/inputs/form/form.d.ts.map +0 -1
  755. package/dist/inputs/shared/form-context.cjs +0 -2
  756. package/dist/inputs/shared/form-context.cjs.map +0 -1
  757. package/dist/inputs/shared/form-context.d.ts +0 -55
  758. package/dist/inputs/shared/form-context.d.ts.map +0 -1
  759. package/dist/inputs/shared/form-context.js +0 -15
  760. package/dist/inputs/shared/form-context.js.map +0 -1
  761. package/dist/styles/index.cjs +0 -2
  762. package/dist/styles/index.cjs.map +0 -1
  763. package/dist/styles/index.js +0 -25
  764. package/dist/styles/index.js.map +0 -1
  765. package/dist/styles/styles.css +0 -5
  766. package/dist/testing/index.d.ts +0 -188
  767. package/dist/testing/index.d.ts.map +0 -1
  768. package/dist/testing.cjs +0 -2
  769. package/dist/testing.cjs.map +0 -1
  770. package/dist/testing.js +0 -26
  771. package/dist/testing.js.map +0 -1
  772. /package/dist/{headless → core}/announcer.cjs +0 -0
  773. /package/dist/{headless → core}/announcer.d.ts +0 -0
  774. /package/dist/{headless → core}/aria-reflection.cjs +0 -0
  775. /package/dist/{headless → core}/aria-reflection.d.ts +0 -0
  776. /package/dist/{headless → core}/auto-resize.cjs +0 -0
  777. /package/dist/{headless → core}/auto-resize.d.ts +0 -0
  778. /package/dist/{headless → core}/checkable.cjs +0 -0
  779. /package/dist/{headless → core}/checkable.d.ts +0 -0
  780. /package/dist/{headless → core}/choice-field.d.ts +0 -0
  781. /package/dist/{headless → core}/composer.cjs +0 -0
  782. /package/dist/{headless → core}/composer.d.ts +0 -0
  783. /package/dist/{headless → core}/date-picker.d.ts +0 -0
  784. /package/dist/{headless → core}/direction.cjs +0 -0
  785. /package/dist/{headless → core}/direction.d.ts +0 -0
  786. /package/dist/{headless → core}/focus.cjs +0 -0
  787. /package/dist/{headless → core}/focus.d.ts +0 -0
  788. /package/dist/{headless → core}/keyboard.d.ts +0 -0
  789. /package/dist/{headless → core}/light-dom.cjs +0 -0
  790. /package/dist/{headless → core}/light-dom.d.ts +0 -0
  791. /package/dist/{headless → core}/nav.cjs +0 -0
  792. /package/dist/{headless → core}/nav.d.ts +0 -0
  793. /package/dist/{headless → core}/numbers.cjs +0 -0
  794. /package/dist/{headless → core}/numbers.d.ts +0 -0
  795. /package/dist/{headless → core}/ore.cjs +0 -0
  796. /package/dist/{headless → core}/paginated-list.d.ts +0 -0
  797. /package/dist/{headless → core}/parse.cjs +0 -0
  798. /package/dist/{headless → core}/parse.d.ts +0 -0
  799. /package/dist/{headless → core}/positioner.d.ts +0 -0
  800. /package/dist/{headless → core}/ref-callback.d.ts +0 -0
  801. /package/dist/{headless → core}/signals.d.ts +0 -0
  802. /package/dist/{headless → core}/slider.d.ts +0 -0
  803. /package/dist/{headless → core}/spinner.d.ts +0 -0
  804. /package/dist/{headless → core}/swipe.cjs +0 -0
  805. /package/dist/{headless → core}/swipe.d.ts +0 -0
  806. /package/dist/{headless → core}/text-field.cjs +0 -0
  807. /package/dist/{headless → core}/text-field.d.ts +0 -0
  808. /package/dist/{headless → core}/typeahead.cjs +0 -0
  809. /package/dist/{headless → core}/typeahead.d.ts +0 -0
@@ -11,10 +11,12 @@ export type { OreComboboxEvents, OreComboboxProps } from './combobox.types';
11
11
  * @attr {boolean} creatable - Allow users to create custom options from search query
12
12
  * @attr {boolean} no-filter - Disable client-side filtering (useful for server-side search)
13
13
  * @attr {string} placeholder - Placeholder text
14
- * @attr {boolean} required - Require a non-blank selection for `<ore-form>` validation
14
+ * @attr {boolean} required - Require a non-blank selection for native form validation
15
15
  * @attr {boolean} success - Show an inline success check icon (suppressed while `error` is set)
16
16
  *
17
- * @fires {CustomEvent} change - Emitted when selection changes. detail: { value: string | string[], values: string[], labels: string[] }
17
+ * @fires input - Emitted when the selection changes.
18
+ * @fires change - Emitted when the selection changes.
19
+ * @fires open-change - Emitted when the dropdown state changes. detail: { open, reason }
18
20
  * @fires {CustomEvent} search - Emitted when user types. detail: { query: string }
19
21
  *
20
22
  * @slot - Slotted combobox options and option groups
@@ -1 +1 @@
1
- {"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../../../src/inputs/combobox/combobox.ts"],"names":[],"mappings":"AA8BA,OAAO,0BAA0B,CAAC;AAClC,OAAO,gBAAgB,CAAC;AAGxB,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,eAAO,MAAM,YAAY,EAAG,cAAuB,CAAC"}
1
+ {"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../../../src/inputs/combobox/combobox.ts"],"names":[],"mappings":"AAkBA,OAAO,0BAA0B,CAAC;AAClC,OAAO,gBAAgB,CAAC;AAGxB,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,eAAO,MAAM,YAAY,EAAG,cAAuB,CAAC"}
@@ -1,12 +1,10 @@
1
- import type { ChoiceChangeDetail, DropdownCloseReason, OverlayOpenDetail } from '../../headless';
1
+ import type { OverlayOpenChangeDetail } from '../../core';
2
2
  import type { SelectableFieldProps } from '../../shared';
3
3
  import type { VisualVariant } from '../../types';
4
4
  export type OreComboboxEvents = {
5
- change: ChoiceChangeDetail;
6
- close: {
7
- reason: DropdownCloseReason;
8
- };
9
- open: OverlayOpenDetail;
5
+ change: Event;
6
+ input: Event;
7
+ 'open-change': OverlayOpenChangeDetail;
10
8
  search: {
11
9
  query: string;
12
10
  };
@@ -34,7 +32,7 @@ export type OreComboboxProps = Omit<SelectableFieldProps<Exclude<VisualVariant,
34
32
  multiple?: boolean;
35
33
  'no-filter'?: boolean;
36
34
  options?: ComboboxOptionInput[];
37
- /** Require a non-blank selection for `<ore-form>` validation */
35
+ /** Require a non-blank selection for native form validation */
38
36
  required?: boolean;
39
37
  value?: string | string[];
40
38
  };
@@ -1 +1 @@
1
- {"version":3,"file":"combobox.types.d.ts","sourceRoot":"","sources":["../../../src/inputs/combobox/combobox.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACjG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,EAAE;QAAE,MAAM,EAAE,mBAAmB,CAAA;KAAE,CAAC;IACvC,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,oBAAoB,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAC9D,iBAAiB,GAAG,OAAO,CAC5B,GAAG;IACF,yFAAyF;IACzF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sDAAsD;IACtD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iBAAiB,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IACxC,yCAAyC;IACzC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAChC,gEAAgE;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC"}
1
+ {"version":3,"file":"combobox.types.d.ts","sourceRoot":"","sources":["../../../src/inputs/combobox/combobox.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,KAAK,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,aAAa,EAAE,uBAAuB,CAAC;IACvC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,oBAAoB,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAC9D,iBAAiB,GAAG,OAAO,CAC5B,GAAG;IACF,yFAAyF;IACzF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sDAAsD;IACtD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iBAAiB,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IACxC,yCAAyC;IACzC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAChC,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC"}
@@ -1,2 +1,2 @@
1
- const e=require("../../_dev.cjs");customElements.get(`ore-column`)||customElements.define(`ore-column`,class extends HTMLElement{connectedCallback(){this.getAttribute(`key`)||e.warn("ore-column: missing required `key` attribute"),this.getAttribute(`label`)||e.warn("ore-column: missing required `label` attribute")}});var t=`ore-column`,n=[`key`,`label`,`sortable`,`resizable`,`align`,`width`,`header-label`];function r(e){return Array.from(e.querySelectorAll(`:scope > ore-column`)).map(e=>({align:e.getAttribute(`align`)??void 0,headerLabel:e.getAttribute(`header-label`)??void 0,key:e.getAttribute(`key`)??``,label:e.getAttribute(`label`)??``,resizable:e.hasAttribute(`resizable`),sortable:e.hasAttribute(`sortable`),width:e.getAttribute(`width`)??void 0}))}exports.COLUMN_OBSERVED_ATTRS=n,exports.COLUMN_TAG=t,exports.parseColumnChildren=r;
1
+ require("../../_dev.cjs"),customElements.get(`ore-column`)||customElements.define(`ore-column`,class extends HTMLElement{connectedCallback(){this.getAttribute(`key`),this.getAttribute(`label`)}});var e=`ore-column`,t=[`key`,`label`,`sortable`,`resizable`,`align`,`width`,`header-label`];function n(e){return Array.from(e.querySelectorAll(`:scope > ore-column`)).map(e=>({align:e.getAttribute(`align`)??void 0,headerLabel:e.getAttribute(`header-label`)??void 0,key:e.getAttribute(`key`)??``,label:e.getAttribute(`label`)??``,resizable:e.hasAttribute(`resizable`),sortable:e.hasAttribute(`sortable`),width:e.getAttribute(`width`)??void 0}))}exports.COLUMN_OBSERVED_ATTRS=t,exports.COLUMN_TAG=e,exports.parseColumnChildren=n;
2
2
  //# sourceMappingURL=datagrid-column.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"datagrid-column.cjs","names":[],"sources":["../../../src/inputs/datagrid/datagrid-column.ts"],"sourcesContent":["import type { DataGridColumn } from '../../headless';\n\nimport { warn } from '../../_dev';\n\n// ── Declarative ore-column element ────────────────────────────────────────────\n\n/**\n * Declarative column definition for `<ore-datagrid>`.\n * Use as a child element instead of setting the `columns` prop imperatively.\n *\n * @element ore-column\n *\n * @attr {string} key - Row property key (required)\n * @attr {string} label - Header display label (required)\n * @attr {boolean} sortable - Makes the column sortable\n * @attr {boolean} resizable - Adds a drag handle to resize the column\n * @attr {string} align - Text alignment: 'left' | 'center' | 'right'\n * @attr {string} width - CSS column width (e.g. '12rem')\n * @attr {string} header-label - Accessible label override for the column header\n *\n * @example\n * ```html\n * <ore-datagrid>\n * <ore-column key=\"name\" label=\"Name\" sortable></ore-column>\n * <ore-column key=\"email\" label=\"Email\" width=\"20rem\"></ore-column>\n * </ore-datagrid>\n * ```\n */\nif (!customElements.get('ore-column'))\n customElements.define(\n 'ore-column',\n class extends HTMLElement {\n connectedCallback(): void {\n if (!this.getAttribute('key')) {\n warn('ore-column: missing required `key` attribute');\n }\n\n if (!this.getAttribute('label')) {\n warn('ore-column: missing required `label` attribute');\n }\n }\n },\n );\n\nexport const COLUMN_TAG = 'ore-column' as const;\n\n/** Attributes observed by the column MutationObserver in ore-datagrid. */\nexport const COLUMN_OBSERVED_ATTRS = [\n 'key',\n 'label',\n 'sortable',\n 'resizable',\n 'align',\n 'width',\n 'header-label',\n] as const;\n\n/** Parse all `<ore-column>` direct children of `host` into DataGridColumn descriptors. */\nexport function parseColumnChildren(host: HTMLElement): DataGridColumn[] {\n return Array.from(host.querySelectorAll(':scope > ore-column')).map((el) => ({\n align: (el.getAttribute('align') as 'left' | 'center' | 'right' | null) ?? undefined,\n headerLabel: el.getAttribute('header-label') ?? undefined,\n key: el.getAttribute('key') ?? '',\n label: el.getAttribute('label') ?? '',\n resizable: el.hasAttribute('resizable'),\n sortable: el.hasAttribute('sortable'),\n width: el.getAttribute('width') ?? undefined,\n }));\n}\n"],"mappings":"kCA4BK,eAAe,IAAI,YAAY,GAClC,eAAe,OACb,aACA,cAAc,WAAY,CACxB,mBAA0B,CACnB,KAAK,aAAa,KAAK,GAC1B,EAAA,KAAK,8CAA8C,EAGhD,KAAK,aAAa,OAAO,GAC5B,EAAA,KAAK,gDAAgD,CAEzD,CACF,CACF,EAEF,IAAa,EAAa,aAGb,EAAwB,CACnC,MACA,QACA,WACA,YACA,QACA,QACA,cACF,EAGA,SAAgB,EAAoB,EAAqC,CACvE,OAAO,MAAM,KAAK,EAAK,iBAAiB,qBAAqB,CAAC,CAAC,CAAC,IAAK,IAAQ,CAC3E,MAAQ,EAAG,aAAa,OAAO,GAA4C,IAAA,GAC3E,YAAa,EAAG,aAAa,cAAc,GAAK,IAAA,GAChD,IAAK,EAAG,aAAa,KAAK,GAAK,GAC/B,MAAO,EAAG,aAAa,OAAO,GAAK,GACnC,UAAW,EAAG,aAAa,WAAW,EACtC,SAAU,EAAG,aAAa,UAAU,EACpC,MAAO,EAAG,aAAa,OAAO,GAAK,IAAA,EACrC,EAAE,CACJ"}
1
+ {"version":3,"file":"datagrid-column.cjs","names":[],"sources":["../../../src/inputs/datagrid/datagrid-column.ts"],"sourcesContent":["import type { DataGridColumn } from './datagrid-model';\n\nimport { warn } from '../../_dev';\n\n// ── Declarative ore-column element ────────────────────────────────────────────\n\n/**\n * Declarative column definition for `<ore-datagrid>`.\n * Use as a child element instead of setting the `columns` prop imperatively.\n *\n * @element ore-column\n *\n * @attr {string} key - Row property key (required)\n * @attr {string} label - Header display label (required)\n * @attr {boolean} sortable - Makes the column sortable\n * @attr {boolean} resizable - Adds a drag handle to resize the column\n * @attr {string} align - Text alignment: 'left' | 'center' | 'right'\n * @attr {string} width - CSS column width (e.g. '12rem')\n * @attr {string} header-label - Accessible label override for the column header\n *\n * @example\n * ```html\n * <ore-datagrid>\n * <ore-column key=\"name\" label=\"Name\" sortable></ore-column>\n * <ore-column key=\"email\" label=\"Email\" width=\"20rem\"></ore-column>\n * </ore-datagrid>\n * ```\n */\nif (!customElements.get('ore-column'))\n customElements.define(\n 'ore-column',\n class extends HTMLElement {\n connectedCallback(): void {\n if (!this.getAttribute('key')) {\n warn('ore-column: missing required `key` attribute');\n }\n\n if (!this.getAttribute('label')) {\n warn('ore-column: missing required `label` attribute');\n }\n }\n },\n );\n\nexport const COLUMN_TAG = 'ore-column' as const;\n\n/** Attributes observed by the column MutationObserver in ore-datagrid. */\nexport const COLUMN_OBSERVED_ATTRS = [\n 'key',\n 'label',\n 'sortable',\n 'resizable',\n 'align',\n 'width',\n 'header-label',\n] as const;\n\n/** Parse all `<ore-column>` direct children of `host` into DataGridColumn descriptors. */\nexport function parseColumnChildren(host: HTMLElement): DataGridColumn[] {\n return Array.from(host.querySelectorAll(':scope > ore-column')).map((el) => ({\n align: (el.getAttribute('align') as 'left' | 'center' | 'right' | null) ?? undefined,\n headerLabel: el.getAttribute('header-label') ?? undefined,\n key: el.getAttribute('key') ?? '',\n label: el.getAttribute('label') ?? '',\n resizable: el.hasAttribute('resizable'),\n sortable: el.hasAttribute('sortable'),\n width: el.getAttribute('width') ?? undefined,\n }));\n}\n"],"mappings":"0BA4BK,eAAe,IAAI,YAAY,GAClC,eAAe,OACb,aACA,cAAc,WAAY,CACxB,mBAA0B,CACnB,KAAK,aAAa,KAAK,EAIvB,KAAK,aAAa,OAAO,CAGhC,CACF,CACF,EAEF,IAAa,EAAa,aAGb,EAAwB,CACnC,MACA,QACA,WACA,YACA,QACA,QACA,cACF,EAGA,SAAgB,EAAoB,EAAqC,CACvE,OAAO,MAAM,KAAK,EAAK,iBAAiB,qBAAqB,CAAC,CAAC,CAAC,IAAK,IAAQ,CAC3E,MAAQ,EAAG,aAAa,OAAO,GAA4C,IAAA,GAC3E,YAAa,EAAG,aAAa,cAAc,GAAK,IAAA,GAChD,IAAK,EAAG,aAAa,KAAK,GAAK,GAC/B,MAAO,EAAG,aAAa,OAAO,GAAK,GACnC,UAAW,EAAG,aAAa,WAAW,EACtC,SAAU,EAAG,aAAa,UAAU,EACpC,MAAO,EAAG,aAAa,OAAO,GAAK,IAAA,EACrC,EAAE,CACJ"}
@@ -1,4 +1,4 @@
1
- import type { DataGridColumn } from '../../headless';
1
+ import type { DataGridColumn } from './datagrid-model';
2
2
  export declare const COLUMN_TAG: "ore-column";
3
3
  /** Attributes observed by the column MutationObserver in ore-datagrid. */
4
4
  export declare const COLUMN_OBSERVED_ATTRS: readonly ["key", "label", "sortable", "resizable", "align", "width", "header-label"];
@@ -1 +1 @@
1
- {"version":3,"file":"datagrid-column.d.ts","sourceRoot":"","sources":["../../../src/inputs/datagrid/datagrid-column.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AA4CrD,eAAO,MAAM,UAAU,EAAG,YAAqB,CAAC;AAEhD,0EAA0E;AAC1E,eAAO,MAAM,qBAAqB,sFAQxB,CAAC;AAEX,0FAA0F;AAC1F,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,cAAc,EAAE,CAUvE"}
1
+ {"version":3,"file":"datagrid-column.d.ts","sourceRoot":"","sources":["../../../src/inputs/datagrid/datagrid-column.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AA4CvD,eAAO,MAAM,UAAU,EAAG,YAAqB,CAAC;AAEhD,0EAA0E;AAC1E,eAAO,MAAM,qBAAqB,sFAQxB,CAAC;AAEX,0FAA0F;AAC1F,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,cAAc,EAAE,CAUvE"}
@@ -1,11 +1,11 @@
1
- import { warn as e } from "../../_dev.js";
1
+ import "../../_dev.js";
2
2
  //#region src/inputs/datagrid/datagrid-column.ts
3
3
  customElements.get("ore-column") || customElements.define("ore-column", class extends HTMLElement {
4
4
  connectedCallback() {
5
- this.getAttribute("key") || e("ore-column: missing required `key` attribute"), this.getAttribute("label") || e("ore-column: missing required `label` attribute");
5
+ this.getAttribute("key"), this.getAttribute("label");
6
6
  }
7
7
  });
8
- var t = "ore-column", n = [
8
+ var e = "ore-column", t = [
9
9
  "key",
10
10
  "label",
11
11
  "sortable",
@@ -14,7 +14,7 @@ var t = "ore-column", n = [
14
14
  "width",
15
15
  "header-label"
16
16
  ];
17
- function r(e) {
17
+ function n(e) {
18
18
  return Array.from(e.querySelectorAll(":scope > ore-column")).map((e) => ({
19
19
  align: e.getAttribute("align") ?? void 0,
20
20
  headerLabel: e.getAttribute("header-label") ?? void 0,
@@ -26,6 +26,6 @@ function r(e) {
26
26
  }));
27
27
  }
28
28
  //#endregion
29
- export { n as COLUMN_OBSERVED_ATTRS, t as COLUMN_TAG, r as parseColumnChildren };
29
+ export { t as COLUMN_OBSERVED_ATTRS, e as COLUMN_TAG, n as parseColumnChildren };
30
30
 
31
31
  //# sourceMappingURL=datagrid-column.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"datagrid-column.js","names":[],"sources":["../../../src/inputs/datagrid/datagrid-column.ts"],"sourcesContent":["import type { DataGridColumn } from '../../headless';\n\nimport { warn } from '../../_dev';\n\n// ── Declarative ore-column element ────────────────────────────────────────────\n\n/**\n * Declarative column definition for `<ore-datagrid>`.\n * Use as a child element instead of setting the `columns` prop imperatively.\n *\n * @element ore-column\n *\n * @attr {string} key - Row property key (required)\n * @attr {string} label - Header display label (required)\n * @attr {boolean} sortable - Makes the column sortable\n * @attr {boolean} resizable - Adds a drag handle to resize the column\n * @attr {string} align - Text alignment: 'left' | 'center' | 'right'\n * @attr {string} width - CSS column width (e.g. '12rem')\n * @attr {string} header-label - Accessible label override for the column header\n *\n * @example\n * ```html\n * <ore-datagrid>\n * <ore-column key=\"name\" label=\"Name\" sortable></ore-column>\n * <ore-column key=\"email\" label=\"Email\" width=\"20rem\"></ore-column>\n * </ore-datagrid>\n * ```\n */\nif (!customElements.get('ore-column'))\n customElements.define(\n 'ore-column',\n class extends HTMLElement {\n connectedCallback(): void {\n if (!this.getAttribute('key')) {\n warn('ore-column: missing required `key` attribute');\n }\n\n if (!this.getAttribute('label')) {\n warn('ore-column: missing required `label` attribute');\n }\n }\n },\n );\n\nexport const COLUMN_TAG = 'ore-column' as const;\n\n/** Attributes observed by the column MutationObserver in ore-datagrid. */\nexport const COLUMN_OBSERVED_ATTRS = [\n 'key',\n 'label',\n 'sortable',\n 'resizable',\n 'align',\n 'width',\n 'header-label',\n] as const;\n\n/** Parse all `<ore-column>` direct children of `host` into DataGridColumn descriptors. */\nexport function parseColumnChildren(host: HTMLElement): DataGridColumn[] {\n return Array.from(host.querySelectorAll(':scope > ore-column')).map((el) => ({\n align: (el.getAttribute('align') as 'left' | 'center' | 'right' | null) ?? undefined,\n headerLabel: el.getAttribute('header-label') ?? undefined,\n key: el.getAttribute('key') ?? '',\n label: el.getAttribute('label') ?? '',\n resizable: el.hasAttribute('resizable'),\n sortable: el.hasAttribute('sortable'),\n width: el.getAttribute('width') ?? undefined,\n }));\n}\n"],"mappings":";;AA4BK,eAAe,IAAI,YAAY,KAClC,eAAe,OACb,cACA,cAAc,YAAY;CACxB,oBAA0B;EAKxB,AAJK,KAAK,aAAa,KAAK,KAC1B,EAAK,8CAA8C,GAGhD,KAAK,aAAa,OAAO,KAC5B,EAAK,gDAAgD;CAEzD;AACF,CACF;AAEF,IAAa,IAAa,cAGb,IAAwB;CACnC;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAGA,SAAgB,EAAoB,GAAqC;CACvE,OAAO,MAAM,KAAK,EAAK,iBAAiB,qBAAqB,CAAC,CAAC,CAAC,KAAK,OAAQ;EAC3E,OAAQ,EAAG,aAAa,OAAO,KAA4C,KAAA;EAC3E,aAAa,EAAG,aAAa,cAAc,KAAK,KAAA;EAChD,KAAK,EAAG,aAAa,KAAK,KAAK;EAC/B,OAAO,EAAG,aAAa,OAAO,KAAK;EACnC,WAAW,EAAG,aAAa,WAAW;EACtC,UAAU,EAAG,aAAa,UAAU;EACpC,OAAO,EAAG,aAAa,OAAO,KAAK,KAAA;CACrC,EAAE;AACJ"}
1
+ {"version":3,"file":"datagrid-column.js","names":[],"sources":["../../../src/inputs/datagrid/datagrid-column.ts"],"sourcesContent":["import type { DataGridColumn } from './datagrid-model';\n\nimport { warn } from '../../_dev';\n\n// ── Declarative ore-column element ────────────────────────────────────────────\n\n/**\n * Declarative column definition for `<ore-datagrid>`.\n * Use as a child element instead of setting the `columns` prop imperatively.\n *\n * @element ore-column\n *\n * @attr {string} key - Row property key (required)\n * @attr {string} label - Header display label (required)\n * @attr {boolean} sortable - Makes the column sortable\n * @attr {boolean} resizable - Adds a drag handle to resize the column\n * @attr {string} align - Text alignment: 'left' | 'center' | 'right'\n * @attr {string} width - CSS column width (e.g. '12rem')\n * @attr {string} header-label - Accessible label override for the column header\n *\n * @example\n * ```html\n * <ore-datagrid>\n * <ore-column key=\"name\" label=\"Name\" sortable></ore-column>\n * <ore-column key=\"email\" label=\"Email\" width=\"20rem\"></ore-column>\n * </ore-datagrid>\n * ```\n */\nif (!customElements.get('ore-column'))\n customElements.define(\n 'ore-column',\n class extends HTMLElement {\n connectedCallback(): void {\n if (!this.getAttribute('key')) {\n warn('ore-column: missing required `key` attribute');\n }\n\n if (!this.getAttribute('label')) {\n warn('ore-column: missing required `label` attribute');\n }\n }\n },\n );\n\nexport const COLUMN_TAG = 'ore-column' as const;\n\n/** Attributes observed by the column MutationObserver in ore-datagrid. */\nexport const COLUMN_OBSERVED_ATTRS = [\n 'key',\n 'label',\n 'sortable',\n 'resizable',\n 'align',\n 'width',\n 'header-label',\n] as const;\n\n/** Parse all `<ore-column>` direct children of `host` into DataGridColumn descriptors. */\nexport function parseColumnChildren(host: HTMLElement): DataGridColumn[] {\n return Array.from(host.querySelectorAll(':scope > ore-column')).map((el) => ({\n align: (el.getAttribute('align') as 'left' | 'center' | 'right' | null) ?? undefined,\n headerLabel: el.getAttribute('header-label') ?? undefined,\n key: el.getAttribute('key') ?? '',\n label: el.getAttribute('label') ?? '',\n resizable: el.hasAttribute('resizable'),\n sortable: el.hasAttribute('sortable'),\n width: el.getAttribute('width') ?? undefined,\n }));\n}\n"],"mappings":";;AA4BK,eAAe,IAAI,YAAY,KAClC,eAAe,OACb,cACA,cAAc,YAAY;CACxB,oBAA0B;EAKxB,AAJK,KAAK,aAAa,KAAK,GAIvB,KAAK,aAAa,OAAO;CAGhC;AACF,CACF;AAEF,IAAa,IAAa,cAGb,IAAwB;CACnC;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAGA,SAAgB,EAAoB,GAAqC;CACvE,OAAO,MAAM,KAAK,EAAK,iBAAiB,qBAAqB,CAAC,CAAC,CAAC,KAAK,OAAQ;EAC3E,OAAQ,EAAG,aAAa,OAAO,KAA4C,KAAA;EAC3E,aAAa,EAAG,aAAa,cAAc,KAAK,KAAA;EAChD,KAAK,EAAG,aAAa,KAAK,KAAK;EAC/B,OAAO,EAAG,aAAa,OAAO,KAAK;EACnC,WAAW,EAAG,aAAa,WAAW;EACtC,UAAU,EAAG,aAAa,UAAU;EACpC,OAAO,EAAG,aAAa,OAAO,KAAK,KAAA;CACrC,EAAE;AACJ"}
@@ -0,0 +1,2 @@
1
+ let e=require("@vielzeug/ripple"),t=require("@vielzeug/ripple/watch");var n=[{label:`Contains`,value:`contains`},{label:`Equals`,value:`equals`},{label:`Greater than`,value:`gt`},{label:`Less than`,value:`lt`}],r=r=>{let i=(0,e.signal)(``),a=(0,e.signal)(!1),o=(0,e.signal)(new Set),s=(0,e.signal)(new Set),c=(0,e.signal)(new Map),l=(0,e.signal)(``),u=(0,e.signal)(`none`),d=(0,e.signal)(new Set),f=(0,e.signal)(0),p=(0,e.computed)(()=>new Set(r.columns.value.map(e=>e.key))),m=(0,e.computed)(()=>r.columns.value.filter(e=>!o.value.has(e.key))),h=(0,e.computed)(()=>{let e=new Set((r.filterOptions.value??[]).map(e=>e.key)),t=[...s.value].filter(t=>!e.has(t));if(!t.length)return new Map;let n=new Map;for(let e of t){let t=new Set,i=[];for(let n of r.items.value){let r=n[e],a=r==null?``:String(r);t.has(a)||(t.add(a),i.push({label:a||`(empty)`,value:a}))}n.set(e,i)}return n}),g=(0,e.computed)(()=>{let e=r.filterOptions.value??[],t=new Set(e.map(e=>e.key)),i=[...s.value].filter(e=>!t.has(e)).map(e=>({key:e,label:r.columns.value.find(t=>t.key===e)?.label??e,operators:n,options:h.value.get(e)??[]}));return[...e.map(e=>({...e,operators:e.operators??n})),...i]}),_=(0,e.computed)(()=>{let e=r.items.value;if(!r.clientSide.value)return e;let t=i.value.trim().toLowerCase();return t?e.filter(e=>Object.values(e).some(e=>e!=null&&String(e).toLowerCase().includes(t))):e}),v=(0,e.computed)(()=>{let e=_.value;return!r.clientSide.value||!c.value.size?e:e.filter(e=>{for(let[t,n]of c.value){if(!n.values.size||!p.value.has(t))continue;let r=e[t],i=r==null?``:String(r);if(n.operator===`equals`&&!n.values.has(i)||n.operator===`contains`&&![...n.values].some(e=>i.toLowerCase().includes(e.toLowerCase())))return!1;if(n.operator===`gt`||n.operator===`lt`){let e=parseFloat(i),t=[...n.values].map(parseFloat).filter(e=>!Number.isNaN(e));if(!t.length)continue;if(n.operator===`gt`&&!t.some(t=>e>t)||n.operator===`lt`&&!t.some(t=>e<t))return!1}}return!0})}),y=(0,e.computed)(()=>({direction:u.value,key:l.value})),b=(0,e.computed)(()=>{let e=v.value;if(!r.clientSide.value||r.sortMode.value===`server`)return e;let{direction:t,key:n}=y.value;if(!n||t===`none`)return e;let i=r.columns.value.find(e=>e.key===n);return e.slice().sort((e,r)=>{let a=i?.sortValue?i.sortValue(e):e[n],o=i?.sortValue?i.sortValue(r):r[n],s=typeof a==`number`&&typeof o==`number`?a-o:String(a??``).localeCompare(String(o??``));return t===`asc`?s:-s})}),x=(0,e.computed)(()=>b.value.length),S=(0,e.computed)(()=>{let e=r.pageSize.value;return Math.ceil(x.value/(e<=0?2**53-1:e))}),C=(0,e.computed)(()=>S.value?Math.min(f.value,S.value-1):-1),w=(0,e.computed)(()=>{let e=r.pageSize.value;if(e<=0)return b.value;let t=C.value*e;return b.value.slice(t,t+e)}),T=(0,e.computed)(()=>S.value>0&&C.value<S.value-1),E=(0,e.computed)(()=>C.value>0),D=(0,e.computed)(()=>r.items.value.filter(e=>d.value.has(r.getRowKey(e))));(0,t.watch)(p,e=>{let t=new Set([...s.value].filter(t=>e.has(t))),n=new Map([...c.value].filter(([t])=>e.has(t)));t.size!==s.value.size&&(s.value=t),n.size!==c.value.size&&(c.value=n)},{immediate:!1}),(0,t.watch)(b,()=>{f.value=0});let O=e=>{d.value=e,r.onSelectionChange?.(e)},k=(e,t)=>{let n=new Map(c.value);t.length?n.set(e,{operator:n.get(e)?.operator??`contains`,values:new Set(t)}):n.delete(e),c.value=n},A=(e,t)=>{let n=c.value.get(e);n&&(c.value=new Map(c.value).set(e,{...n,operator:t}))},j=(e,t)=>{l.value=t===`none`?``:e,u.value=t,f.value=0,r.onSortChange?.(y.value)};return{activateFilterKey:e=>{s.value.has(e)||(s.value=new Set([...s.value,e]))},clearAllFilters:()=>{s.value=new Set,c.value=new Map},clearSelection:()=>O(new Set),currentPageItems:w,filterDefs:g,filteredRows:v,filterValues:c,goToPage:e=>{Number.isFinite(e)&&(f.value=Math.max(0,e))},hasNextPage:T,hasPrevPage:E,hiddenColumns:o,isAllSelected:()=>{let e=w.value;return e.length>0&&e.every(e=>d.value.has(r.getRowKey(e)))},nextPage:()=>{T.value&&(f.value=C.value+1)},pageCount:S,pageIndex:C,prevPage:()=>{E.value&&(f.value=C.value-1)},removeFilter:e=>{let t=new Set(s.value);t.delete(e),s.value=t;let n=new Map(c.value);n.delete(e),c.value=n},resetFilters:()=>{s.value=new Set,c.value=new Map},resetSearch:()=>{i.value=``,a.value=!1},searchActive:a,searchQuery:i,selectAll:()=>{if(r.selectionMode.value!==`multi`)return;let e=new Set(d.value);if(w.value.every(t=>e.has(r.getRowKey(t))))for(let t of w.value)e.delete(r.getRowKey(t));else for(let t of w.value)e.add(r.getRowKey(t));O(e)},selectedKeys:(0,e.computed)(()=>new Set(d.value)),selectedRows:D,setActiveFilterKeys:e=>{let t=new Set(e);s.value=t,c.value=new Map([...c.value].filter(([e])=>t.has(e)))},setFilter:k,setFilterOperator:A,setSearchQuery:e=>{i.value=e},setSelection:e=>O(new Set(e)),sortBy:e=>{let t=l.value===e?u.value===`asc`?`desc`:u.value===`desc`?`none`:`asc`:`asc`;j(t===`none`?``:e,t)},sortState:y,sortTo:j,toggleColumnVisibility:e=>{let t=new Set(o.value);t.has(e)?t.delete(e):t.add(e),o.value=t},toggleRow:e=>{if(r.selectionMode.value===`none`)return;let t=new Set(d.value);t.has(e)?t.delete(e):(r.selectionMode.value===`single`&&t.clear(),t.add(e)),O(t)},toggleSearch:()=>{a.value&&(i.value=``),a.value=!a.value},totalItems:x,visibleColumns:m}};exports.createDataGridModel=r;
2
+ //# sourceMappingURL=datagrid-model.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datagrid-model.cjs","names":[],"sources":["../../../src/inputs/datagrid/datagrid-model.ts"],"sourcesContent":["import { computed, signal, type Readable } from '@vielzeug/ripple';\nimport { watch } from '@vielzeug/ripple/watch';\n\nexport type SortDirection = 'asc' | 'desc' | 'none';\n\nexport type SortState = {\n direction: SortDirection;\n key: string;\n};\n\nexport type DataGridColumn<T = Record<string, unknown>> = {\n align?: 'left' | 'center' | 'right';\n cell?: (item: T) => string;\n headerLabel?: string;\n key: string;\n label: string;\n renderExpanded?: (item: T) => string;\n resizable?: boolean;\n sortable?: boolean;\n sortValue?: (item: T) => number | string;\n width?: string;\n};\n\nexport type SelectionMode = 'multi' | 'none' | 'single';\n\nexport type FilterOption = {\n key: string;\n label: string;\n operators?: { label: string; value: string }[];\n options: { label?: string; value: string }[];\n};\n\nexport type FilterOperator = 'contains' | 'equals' | 'gt' | 'lt';\n\nexport type FilterRule = {\n operator: FilterOperator;\n values: Set<string>;\n};\n\nexport type DataGridView = {\n id: string;\n label: string;\n};\n\nexport type DataGridModelOptions<T = Record<string, unknown>> = {\n clientSide: Readable<boolean>;\n columns: Readable<DataGridColumn<T>[]>;\n filterOptions: Readable<FilterOption[] | undefined>;\n getRowKey: (item: T) => string;\n items: Readable<T[]>;\n onSelectionChange?: (keys: Set<string>) => void;\n onSortChange?: (sort: SortState) => void;\n pageSize: Readable<number>;\n selectionMode: Readable<SelectionMode>;\n sortMode: Readable<'client' | 'server'>;\n};\n\nexport type DataGridModel<T = Record<string, unknown>> = {\n activateFilterKey(key: string): void;\n clearAllFilters(): void;\n clearSelection(): void;\n readonly currentPageItems: Readable<T[]>;\n readonly filterDefs: Readable<FilterOption[]>;\n readonly filteredRows: Readable<T[]>;\n readonly filterValues: Readable<Map<string, FilterRule>>;\n goToPage(index: number): void;\n readonly hasNextPage: Readable<boolean>;\n readonly hasPrevPage: Readable<boolean>;\n readonly hiddenColumns: Readable<Set<string>>;\n isAllSelected(): boolean;\n nextPage(): void;\n readonly pageCount: Readable<number>;\n readonly pageIndex: Readable<number>;\n prevPage(): void;\n removeFilter(key: string): void;\n resetFilters(): void;\n resetSearch(): void;\n readonly searchActive: Readable<boolean>;\n readonly searchQuery: Readable<string>;\n selectAll(): void;\n readonly selectedKeys: Readable<ReadonlySet<string>>;\n readonly selectedRows: Readable<T[]>;\n setActiveFilterKeys(keys: string[]): void;\n setFilter(key: string, values: string[]): void;\n setFilterOperator(key: string, operator: FilterOperator): void;\n setSearchQuery(query: string): void;\n setSelection(keys: Set<string>): void;\n sortBy(key: string): void;\n readonly sortState: Readable<SortState>;\n sortTo(key: string, direction: SortDirection): void;\n toggleColumnVisibility(key: string): void;\n toggleRow(key: string): void;\n toggleSearch(): void;\n readonly totalItems: Readable<number>;\n readonly visibleColumns: Readable<DataGridColumn<T>[]>;\n};\n\nconst DEFAULT_OPERATORS: { label: string; value: FilterOperator }[] = [\n { label: 'Contains', value: 'contains' },\n { label: 'Equals', value: 'equals' },\n { label: 'Greater than', value: 'gt' },\n { label: 'Less than', value: 'lt' },\n];\n\n/**\n * Feature-owned state and transform pipeline for `ore-datagrid`.\n *\n * Rows flow through query, filters, sorting, and pagination in order. Selection\n * and column visibility share the same model so every interactive grid concern\n * has one reactive owner. Source-backed grids retain their server-owned rows by\n * setting `clientSide` to false.\n */\nexport const createDataGridModel = <T extends Record<string, unknown>>(\n options: DataGridModelOptions<T>,\n): DataGridModel<T> => {\n const searchQuery = signal('');\n const searchActive = signal(false);\n const hiddenColumns = signal(new Set<string>());\n const activeFilterKeys = signal(new Set<string>());\n const filterValues = signal(new Map<string, FilterRule>());\n const sortKey = signal('');\n const sortDirection = signal<SortDirection>('none');\n const selectedKeys = signal(new Set<string>());\n const pageIndex = signal(0);\n\n const columnKeys = computed(() => new Set(options.columns.value.map((column) => column.key)));\n const visibleColumns = computed(() => options.columns.value.filter((column) => !hiddenColumns.value.has(column.key)));\n\n const colOptions = computed(() => {\n const externalKeys = new Set((options.filterOptions.value ?? []).map((filter) => filter.key));\n const activeKeys = [...activeFilterKeys.value].filter((key) => !externalKeys.has(key));\n\n if (!activeKeys.length) return new Map<string, { label: string; value: string }[]>();\n\n const derived = new Map<string, { label: string; value: string }[]>();\n\n for (const key of activeKeys) {\n const seen = new Set<string>();\n const values: { label: string; value: string }[] = [];\n\n for (const row of options.items.value) {\n const value = row[key];\n const stringValue = value == null ? '' : String(value);\n\n if (!seen.has(stringValue)) {\n seen.add(stringValue);\n values.push({ label: stringValue || '(empty)', value: stringValue });\n }\n }\n\n derived.set(key, values);\n }\n\n return derived;\n });\n\n const filterDefs = computed<FilterOption[]>(() => {\n const provided = options.filterOptions.value ?? [];\n const providedKeys = new Set(provided.map((filter) => filter.key));\n const derived = [...activeFilterKeys.value]\n .filter((key) => !providedKeys.has(key))\n .map((key) => {\n const column = options.columns.value.find((candidate) => candidate.key === key);\n\n return {\n key,\n label: column?.label ?? key,\n operators: DEFAULT_OPERATORS,\n options: colOptions.value.get(key) ?? [],\n };\n });\n\n return [...provided.map((filter) => ({ ...filter, operators: filter.operators ?? DEFAULT_OPERATORS })), ...derived];\n });\n\n const searchedRows = computed(() => {\n const rows = options.items.value;\n\n if (!options.clientSide.value) return rows;\n\n const query = searchQuery.value.trim().toLowerCase();\n\n if (!query) return rows;\n\n return rows.filter((row) =>\n Object.values(row).some((value) => value != null && String(value).toLowerCase().includes(query)),\n );\n });\n\n const filteredRows = computed(() => {\n const rows = searchedRows.value;\n\n if (!options.clientSide.value || !filterValues.value.size) return rows;\n\n return rows.filter((row) => {\n for (const [key, rule] of filterValues.value) {\n if (!rule.values.size || !columnKeys.value.has(key)) continue;\n\n const value = row[key];\n const stringValue = value == null ? '' : String(value);\n\n if (rule.operator === 'equals' && !rule.values.has(stringValue)) return false;\n\n if (\n rule.operator === 'contains' &&\n ![...rule.values].some((target) => stringValue.toLowerCase().includes(target.toLowerCase()))\n ) {\n return false;\n }\n\n if (rule.operator === 'gt' || rule.operator === 'lt') {\n const numericValue = parseFloat(stringValue);\n const targets = [...rule.values].map(parseFloat).filter((target) => !Number.isNaN(target));\n\n if (!targets.length) continue;\n\n if (rule.operator === 'gt' && !targets.some((target) => numericValue > target)) return false;\n\n if (rule.operator === 'lt' && !targets.some((target) => numericValue < target)) return false;\n }\n }\n\n return true;\n });\n });\n\n const sortState = computed<SortState>(() => ({ direction: sortDirection.value, key: sortKey.value }));\n const sortedRows = computed(() => {\n const rows = filteredRows.value;\n\n if (!options.clientSide.value || options.sortMode.value === 'server') return rows;\n\n const { direction, key } = sortState.value;\n\n if (!key || direction === 'none') return rows;\n\n const column = options.columns.value.find((candidate) => candidate.key === key);\n\n return rows.slice().sort((a, b) => {\n const aValue = column?.sortValue ? column.sortValue(a) : (a[key] as number | string);\n const bValue = column?.sortValue ? column.sortValue(b) : (b[key] as number | string);\n const comparison =\n typeof aValue === 'number' && typeof bValue === 'number'\n ? aValue - bValue\n : String(aValue ?? '').localeCompare(String(bValue ?? ''));\n\n return direction === 'asc' ? comparison : -comparison;\n });\n });\n\n const totalItems = computed(() => sortedRows.value.length);\n const pageCount = computed(() => {\n const size = options.pageSize.value;\n\n return Math.ceil(totalItems.value / (size <= 0 ? Number.MAX_SAFE_INTEGER : size));\n });\n const safePageIndex = computed(() => (pageCount.value ? Math.min(pageIndex.value, pageCount.value - 1) : -1));\n const currentPageItems = computed(() => {\n const size = options.pageSize.value;\n\n if (size <= 0) return sortedRows.value;\n\n const start = safePageIndex.value * size;\n\n return sortedRows.value.slice(start, start + size);\n });\n const hasNextPage = computed(() => pageCount.value > 0 && safePageIndex.value < pageCount.value - 1);\n const hasPrevPage = computed(() => safePageIndex.value > 0);\n const selectedRows = computed(() =>\n options.items.value.filter((item) => selectedKeys.value.has(options.getRowKey(item))),\n );\n\n watch(\n columnKeys,\n (keys) => {\n const nextActiveKeys = new Set([...activeFilterKeys.value].filter((key) => keys.has(key)));\n const nextValues = new Map([...filterValues.value].filter(([key]) => keys.has(key)));\n\n if (nextActiveKeys.size !== activeFilterKeys.value.size) activeFilterKeys.value = nextActiveKeys;\n\n if (nextValues.size !== filterValues.value.size) filterValues.value = nextValues;\n },\n { immediate: false },\n );\n\n watch(sortedRows, () => {\n pageIndex.value = 0;\n });\n\n const commitSelection = (next: Set<string>): void => {\n selectedKeys.value = next;\n options.onSelectionChange?.(next);\n };\n\n const setFilter = (key: string, values: string[]): void => {\n const next = new Map(filterValues.value);\n\n if (values.length) {\n next.set(key, { operator: next.get(key)?.operator ?? 'contains', values: new Set(values) });\n } else {\n next.delete(key);\n }\n\n filterValues.value = next;\n };\n\n const setFilterOperator = (key: string, operator: FilterOperator): void => {\n const rule = filterValues.value.get(key);\n\n if (rule) filterValues.value = new Map(filterValues.value).set(key, { ...rule, operator });\n };\n\n const sortTo = (key: string, direction: SortDirection): void => {\n sortKey.value = direction === 'none' ? '' : key;\n sortDirection.value = direction;\n pageIndex.value = 0;\n options.onSortChange?.(sortState.value);\n };\n\n return {\n activateFilterKey: (key) => {\n if (!activeFilterKeys.value.has(key)) activeFilterKeys.value = new Set([...activeFilterKeys.value, key]);\n },\n clearAllFilters: () => {\n activeFilterKeys.value = new Set();\n filterValues.value = new Map();\n },\n clearSelection: () => commitSelection(new Set()),\n currentPageItems,\n filterDefs,\n filteredRows,\n filterValues,\n goToPage: (index) => {\n if (Number.isFinite(index)) pageIndex.value = Math.max(0, index);\n },\n hasNextPage,\n hasPrevPage,\n hiddenColumns,\n isAllSelected: () => {\n const page = currentPageItems.value;\n\n return page.length > 0 && page.every((item) => selectedKeys.value.has(options.getRowKey(item)));\n },\n nextPage: () => {\n if (hasNextPage.value) pageIndex.value = safePageIndex.value + 1;\n },\n pageCount,\n pageIndex: safePageIndex,\n prevPage: () => {\n if (hasPrevPage.value) pageIndex.value = safePageIndex.value - 1;\n },\n removeFilter: (key) => {\n const nextActiveKeys = new Set(activeFilterKeys.value);\n\n nextActiveKeys.delete(key);\n activeFilterKeys.value = nextActiveKeys;\n\n const nextValues = new Map(filterValues.value);\n\n nextValues.delete(key);\n filterValues.value = nextValues;\n },\n resetFilters: () => {\n activeFilterKeys.value = new Set();\n filterValues.value = new Map();\n },\n resetSearch: () => {\n searchQuery.value = '';\n searchActive.value = false;\n },\n searchActive,\n searchQuery,\n selectAll: () => {\n if (options.selectionMode.value !== 'multi') return;\n\n const next = new Set(selectedKeys.value);\n\n if (currentPageItems.value.every((item) => next.has(options.getRowKey(item)))) {\n for (const item of currentPageItems.value) next.delete(options.getRowKey(item));\n } else {\n for (const item of currentPageItems.value) next.add(options.getRowKey(item));\n }\n\n commitSelection(next);\n },\n selectedKeys: computed(() => new Set(selectedKeys.value)),\n selectedRows,\n setActiveFilterKeys: (keys) => {\n const nextActiveKeys = new Set(keys);\n\n activeFilterKeys.value = nextActiveKeys;\n filterValues.value = new Map([...filterValues.value].filter(([key]) => nextActiveKeys.has(key)));\n },\n setFilter,\n setFilterOperator,\n setSearchQuery: (query) => {\n searchQuery.value = query;\n },\n setSelection: (keys) => commitSelection(new Set(keys)),\n sortBy: (key) => {\n const nextDirection =\n sortKey.value !== key\n ? 'asc'\n : sortDirection.value === 'asc'\n ? 'desc'\n : sortDirection.value === 'desc'\n ? 'none'\n : 'asc';\n\n sortTo(nextDirection === 'none' ? '' : key, nextDirection);\n },\n sortState,\n sortTo,\n toggleColumnVisibility: (key) => {\n const next = new Set(hiddenColumns.value);\n\n if (next.has(key)) next.delete(key);\n else next.add(key);\n\n hiddenColumns.value = next;\n },\n toggleRow: (key) => {\n if (options.selectionMode.value === 'none') return;\n\n const next = new Set(selectedKeys.value);\n\n if (next.has(key)) next.delete(key);\n else {\n if (options.selectionMode.value === 'single') next.clear();\n\n next.add(key);\n }\n\n commitSelection(next);\n },\n toggleSearch: () => {\n if (searchActive.value) searchQuery.value = '';\n\n searchActive.value = !searchActive.value;\n },\n totalItems,\n visibleColumns,\n };\n};\n"],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ import { type Readable } from '@vielzeug/ripple';
2
+ export type SortDirection = 'asc' | 'desc' | 'none';
3
+ export type SortState = {
4
+ direction: SortDirection;
5
+ key: string;
6
+ };
7
+ export type DataGridColumn<T = Record<string, unknown>> = {
8
+ align?: 'left' | 'center' | 'right';
9
+ cell?: (item: T) => string;
10
+ headerLabel?: string;
11
+ key: string;
12
+ label: string;
13
+ renderExpanded?: (item: T) => string;
14
+ resizable?: boolean;
15
+ sortable?: boolean;
16
+ sortValue?: (item: T) => number | string;
17
+ width?: string;
18
+ };
19
+ export type SelectionMode = 'multi' | 'none' | 'single';
20
+ export type FilterOption = {
21
+ key: string;
22
+ label: string;
23
+ operators?: {
24
+ label: string;
25
+ value: string;
26
+ }[];
27
+ options: {
28
+ label?: string;
29
+ value: string;
30
+ }[];
31
+ };
32
+ export type FilterOperator = 'contains' | 'equals' | 'gt' | 'lt';
33
+ export type FilterRule = {
34
+ operator: FilterOperator;
35
+ values: Set<string>;
36
+ };
37
+ export type DataGridView = {
38
+ id: string;
39
+ label: string;
40
+ };
41
+ export type DataGridModelOptions<T = Record<string, unknown>> = {
42
+ clientSide: Readable<boolean>;
43
+ columns: Readable<DataGridColumn<T>[]>;
44
+ filterOptions: Readable<FilterOption[] | undefined>;
45
+ getRowKey: (item: T) => string;
46
+ items: Readable<T[]>;
47
+ onSelectionChange?: (keys: Set<string>) => void;
48
+ onSortChange?: (sort: SortState) => void;
49
+ pageSize: Readable<number>;
50
+ selectionMode: Readable<SelectionMode>;
51
+ sortMode: Readable<'client' | 'server'>;
52
+ };
53
+ export type DataGridModel<T = Record<string, unknown>> = {
54
+ activateFilterKey(key: string): void;
55
+ clearAllFilters(): void;
56
+ clearSelection(): void;
57
+ readonly currentPageItems: Readable<T[]>;
58
+ readonly filterDefs: Readable<FilterOption[]>;
59
+ readonly filteredRows: Readable<T[]>;
60
+ readonly filterValues: Readable<Map<string, FilterRule>>;
61
+ goToPage(index: number): void;
62
+ readonly hasNextPage: Readable<boolean>;
63
+ readonly hasPrevPage: Readable<boolean>;
64
+ readonly hiddenColumns: Readable<Set<string>>;
65
+ isAllSelected(): boolean;
66
+ nextPage(): void;
67
+ readonly pageCount: Readable<number>;
68
+ readonly pageIndex: Readable<number>;
69
+ prevPage(): void;
70
+ removeFilter(key: string): void;
71
+ resetFilters(): void;
72
+ resetSearch(): void;
73
+ readonly searchActive: Readable<boolean>;
74
+ readonly searchQuery: Readable<string>;
75
+ selectAll(): void;
76
+ readonly selectedKeys: Readable<ReadonlySet<string>>;
77
+ readonly selectedRows: Readable<T[]>;
78
+ setActiveFilterKeys(keys: string[]): void;
79
+ setFilter(key: string, values: string[]): void;
80
+ setFilterOperator(key: string, operator: FilterOperator): void;
81
+ setSearchQuery(query: string): void;
82
+ setSelection(keys: Set<string>): void;
83
+ sortBy(key: string): void;
84
+ readonly sortState: Readable<SortState>;
85
+ sortTo(key: string, direction: SortDirection): void;
86
+ toggleColumnVisibility(key: string): void;
87
+ toggleRow(key: string): void;
88
+ toggleSearch(): void;
89
+ readonly totalItems: Readable<number>;
90
+ readonly visibleColumns: Readable<DataGridColumn<T>[]>;
91
+ };
92
+ /**
93
+ * Feature-owned state and transform pipeline for `ore-datagrid`.
94
+ *
95
+ * Rows flow through query, filters, sorting, and pagination in order. Selection
96
+ * and column visibility share the same model so every interactive grid concern
97
+ * has one reactive owner. Source-backed grids retain their server-owned rows by
98
+ * setting `clientSide` to false.
99
+ */
100
+ export declare const createDataGridModel: <T extends Record<string, unknown>>(options: DataGridModelOptions<T>) => DataGridModel<T>;
101
+ //# sourceMappingURL=datagrid-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datagrid-model.d.ts","sourceRoot":"","sources":["../../../src/inputs/datagrid/datagrid-model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,202 @@
1
+ import { computed as e, signal as t } from "@vielzeug/ripple";
2
+ import { watch as n } from "@vielzeug/ripple/watch";
3
+ //#region src/inputs/datagrid/datagrid-model.ts
4
+ var r = [
5
+ {
6
+ label: "Contains",
7
+ value: "contains"
8
+ },
9
+ {
10
+ label: "Equals",
11
+ value: "equals"
12
+ },
13
+ {
14
+ label: "Greater than",
15
+ value: "gt"
16
+ },
17
+ {
18
+ label: "Less than",
19
+ value: "lt"
20
+ }
21
+ ], i = (i) => {
22
+ let a = t(""), o = t(!1), s = t(/* @__PURE__ */ new Set()), c = t(/* @__PURE__ */ new Set()), l = t(/* @__PURE__ */ new Map()), u = t(""), d = t("none"), f = t(/* @__PURE__ */ new Set()), p = t(0), m = e(() => new Set(i.columns.value.map((e) => e.key))), h = e(() => i.columns.value.filter((e) => !s.value.has(e.key))), g = e(() => {
23
+ let e = new Set((i.filterOptions.value ?? []).map((e) => e.key)), t = [...c.value].filter((t) => !e.has(t));
24
+ if (!t.length) return /* @__PURE__ */ new Map();
25
+ let n = /* @__PURE__ */ new Map();
26
+ for (let e of t) {
27
+ let t = /* @__PURE__ */ new Set(), r = [];
28
+ for (let n of i.items.value) {
29
+ let i = n[e], a = i == null ? "" : String(i);
30
+ t.has(a) || (t.add(a), r.push({
31
+ label: a || "(empty)",
32
+ value: a
33
+ }));
34
+ }
35
+ n.set(e, r);
36
+ }
37
+ return n;
38
+ }), _ = e(() => {
39
+ let e = i.filterOptions.value ?? [], t = new Set(e.map((e) => e.key)), n = [...c.value].filter((e) => !t.has(e)).map((e) => ({
40
+ key: e,
41
+ label: i.columns.value.find((t) => t.key === e)?.label ?? e,
42
+ operators: r,
43
+ options: g.value.get(e) ?? []
44
+ }));
45
+ return [...e.map((e) => ({
46
+ ...e,
47
+ operators: e.operators ?? r
48
+ })), ...n];
49
+ }), v = e(() => {
50
+ let e = i.items.value;
51
+ if (!i.clientSide.value) return e;
52
+ let t = a.value.trim().toLowerCase();
53
+ return t ? e.filter((e) => Object.values(e).some((e) => e != null && String(e).toLowerCase().includes(t))) : e;
54
+ }), y = e(() => {
55
+ let e = v.value;
56
+ return !i.clientSide.value || !l.value.size ? e : e.filter((e) => {
57
+ for (let [t, n] of l.value) {
58
+ if (!n.values.size || !m.value.has(t)) continue;
59
+ let r = e[t], i = r == null ? "" : String(r);
60
+ if (n.operator === "equals" && !n.values.has(i) || n.operator === "contains" && ![...n.values].some((e) => i.toLowerCase().includes(e.toLowerCase()))) return !1;
61
+ if (n.operator === "gt" || n.operator === "lt") {
62
+ let e = parseFloat(i), t = [...n.values].map(parseFloat).filter((e) => !Number.isNaN(e));
63
+ if (!t.length) continue;
64
+ if (n.operator === "gt" && !t.some((t) => e > t) || n.operator === "lt" && !t.some((t) => e < t)) return !1;
65
+ }
66
+ }
67
+ return !0;
68
+ });
69
+ }), b = e(() => ({
70
+ direction: d.value,
71
+ key: u.value
72
+ })), x = e(() => {
73
+ let e = y.value;
74
+ if (!i.clientSide.value || i.sortMode.value === "server") return e;
75
+ let { direction: t, key: n } = b.value;
76
+ if (!n || t === "none") return e;
77
+ let r = i.columns.value.find((e) => e.key === n);
78
+ return e.slice().sort((e, i) => {
79
+ let a = r?.sortValue ? r.sortValue(e) : e[n], o = r?.sortValue ? r.sortValue(i) : i[n], s = typeof a == "number" && typeof o == "number" ? a - o : String(a ?? "").localeCompare(String(o ?? ""));
80
+ return t === "asc" ? s : -s;
81
+ });
82
+ }), S = e(() => x.value.length), C = e(() => {
83
+ let e = i.pageSize.value;
84
+ return Math.ceil(S.value / (e <= 0 ? 2 ** 53 - 1 : e));
85
+ }), w = e(() => C.value ? Math.min(p.value, C.value - 1) : -1), T = e(() => {
86
+ let e = i.pageSize.value;
87
+ if (e <= 0) return x.value;
88
+ let t = w.value * e;
89
+ return x.value.slice(t, t + e);
90
+ }), E = e(() => C.value > 0 && w.value < C.value - 1), D = e(() => w.value > 0), O = e(() => i.items.value.filter((e) => f.value.has(i.getRowKey(e))));
91
+ n(m, (e) => {
92
+ let t = new Set([...c.value].filter((t) => e.has(t))), n = new Map([...l.value].filter(([t]) => e.has(t)));
93
+ t.size !== c.value.size && (c.value = t), n.size !== l.value.size && (l.value = n);
94
+ }, { immediate: !1 }), n(x, () => {
95
+ p.value = 0;
96
+ });
97
+ let k = (e) => {
98
+ f.value = e, i.onSelectionChange?.(e);
99
+ }, A = (e, t) => {
100
+ let n = new Map(l.value);
101
+ t.length ? n.set(e, {
102
+ operator: n.get(e)?.operator ?? "contains",
103
+ values: new Set(t)
104
+ }) : n.delete(e), l.value = n;
105
+ }, j = (e, t) => {
106
+ let n = l.value.get(e);
107
+ n && (l.value = new Map(l.value).set(e, {
108
+ ...n,
109
+ operator: t
110
+ }));
111
+ }, M = (e, t) => {
112
+ u.value = t === "none" ? "" : e, d.value = t, p.value = 0, i.onSortChange?.(b.value);
113
+ };
114
+ return {
115
+ activateFilterKey: (e) => {
116
+ c.value.has(e) || (c.value = /* @__PURE__ */ new Set([...c.value, e]));
117
+ },
118
+ clearAllFilters: () => {
119
+ c.value = /* @__PURE__ */ new Set(), l.value = /* @__PURE__ */ new Map();
120
+ },
121
+ clearSelection: () => k(/* @__PURE__ */ new Set()),
122
+ currentPageItems: T,
123
+ filterDefs: _,
124
+ filteredRows: y,
125
+ filterValues: l,
126
+ goToPage: (e) => {
127
+ Number.isFinite(e) && (p.value = Math.max(0, e));
128
+ },
129
+ hasNextPage: E,
130
+ hasPrevPage: D,
131
+ hiddenColumns: s,
132
+ isAllSelected: () => {
133
+ let e = T.value;
134
+ return e.length > 0 && e.every((e) => f.value.has(i.getRowKey(e)));
135
+ },
136
+ nextPage: () => {
137
+ E.value && (p.value = w.value + 1);
138
+ },
139
+ pageCount: C,
140
+ pageIndex: w,
141
+ prevPage: () => {
142
+ D.value && (p.value = w.value - 1);
143
+ },
144
+ removeFilter: (e) => {
145
+ let t = new Set(c.value);
146
+ t.delete(e), c.value = t;
147
+ let n = new Map(l.value);
148
+ n.delete(e), l.value = n;
149
+ },
150
+ resetFilters: () => {
151
+ c.value = /* @__PURE__ */ new Set(), l.value = /* @__PURE__ */ new Map();
152
+ },
153
+ resetSearch: () => {
154
+ a.value = "", o.value = !1;
155
+ },
156
+ searchActive: o,
157
+ searchQuery: a,
158
+ selectAll: () => {
159
+ if (i.selectionMode.value !== "multi") return;
160
+ let e = new Set(f.value);
161
+ if (T.value.every((t) => e.has(i.getRowKey(t)))) for (let t of T.value) e.delete(i.getRowKey(t));
162
+ else for (let t of T.value) e.add(i.getRowKey(t));
163
+ k(e);
164
+ },
165
+ selectedKeys: e(() => new Set(f.value)),
166
+ selectedRows: O,
167
+ setActiveFilterKeys: (e) => {
168
+ let t = new Set(e);
169
+ c.value = t, l.value = new Map([...l.value].filter(([e]) => t.has(e)));
170
+ },
171
+ setFilter: A,
172
+ setFilterOperator: j,
173
+ setSearchQuery: (e) => {
174
+ a.value = e;
175
+ },
176
+ setSelection: (e) => k(new Set(e)),
177
+ sortBy: (e) => {
178
+ let t = u.value === e ? d.value === "asc" ? "desc" : d.value === "desc" ? "none" : "asc" : "asc";
179
+ M(t === "none" ? "" : e, t);
180
+ },
181
+ sortState: b,
182
+ sortTo: M,
183
+ toggleColumnVisibility: (e) => {
184
+ let t = new Set(s.value);
185
+ t.has(e) ? t.delete(e) : t.add(e), s.value = t;
186
+ },
187
+ toggleRow: (e) => {
188
+ if (i.selectionMode.value === "none") return;
189
+ let t = new Set(f.value);
190
+ t.has(e) ? t.delete(e) : (i.selectionMode.value === "single" && t.clear(), t.add(e)), k(t);
191
+ },
192
+ toggleSearch: () => {
193
+ o.value && (a.value = ""), o.value = !o.value;
194
+ },
195
+ totalItems: S,
196
+ visibleColumns: h
197
+ };
198
+ };
199
+ //#endregion
200
+ export { i as createDataGridModel };
201
+
202
+ //# sourceMappingURL=datagrid-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datagrid-model.js","names":[],"sources":["../../../src/inputs/datagrid/datagrid-model.ts"],"sourcesContent":["import { computed, signal, type Readable } from '@vielzeug/ripple';\nimport { watch } from '@vielzeug/ripple/watch';\n\nexport type SortDirection = 'asc' | 'desc' | 'none';\n\nexport type SortState = {\n direction: SortDirection;\n key: string;\n};\n\nexport type DataGridColumn<T = Record<string, unknown>> = {\n align?: 'left' | 'center' | 'right';\n cell?: (item: T) => string;\n headerLabel?: string;\n key: string;\n label: string;\n renderExpanded?: (item: T) => string;\n resizable?: boolean;\n sortable?: boolean;\n sortValue?: (item: T) => number | string;\n width?: string;\n};\n\nexport type SelectionMode = 'multi' | 'none' | 'single';\n\nexport type FilterOption = {\n key: string;\n label: string;\n operators?: { label: string; value: string }[];\n options: { label?: string; value: string }[];\n};\n\nexport type FilterOperator = 'contains' | 'equals' | 'gt' | 'lt';\n\nexport type FilterRule = {\n operator: FilterOperator;\n values: Set<string>;\n};\n\nexport type DataGridView = {\n id: string;\n label: string;\n};\n\nexport type DataGridModelOptions<T = Record<string, unknown>> = {\n clientSide: Readable<boolean>;\n columns: Readable<DataGridColumn<T>[]>;\n filterOptions: Readable<FilterOption[] | undefined>;\n getRowKey: (item: T) => string;\n items: Readable<T[]>;\n onSelectionChange?: (keys: Set<string>) => void;\n onSortChange?: (sort: SortState) => void;\n pageSize: Readable<number>;\n selectionMode: Readable<SelectionMode>;\n sortMode: Readable<'client' | 'server'>;\n};\n\nexport type DataGridModel<T = Record<string, unknown>> = {\n activateFilterKey(key: string): void;\n clearAllFilters(): void;\n clearSelection(): void;\n readonly currentPageItems: Readable<T[]>;\n readonly filterDefs: Readable<FilterOption[]>;\n readonly filteredRows: Readable<T[]>;\n readonly filterValues: Readable<Map<string, FilterRule>>;\n goToPage(index: number): void;\n readonly hasNextPage: Readable<boolean>;\n readonly hasPrevPage: Readable<boolean>;\n readonly hiddenColumns: Readable<Set<string>>;\n isAllSelected(): boolean;\n nextPage(): void;\n readonly pageCount: Readable<number>;\n readonly pageIndex: Readable<number>;\n prevPage(): void;\n removeFilter(key: string): void;\n resetFilters(): void;\n resetSearch(): void;\n readonly searchActive: Readable<boolean>;\n readonly searchQuery: Readable<string>;\n selectAll(): void;\n readonly selectedKeys: Readable<ReadonlySet<string>>;\n readonly selectedRows: Readable<T[]>;\n setActiveFilterKeys(keys: string[]): void;\n setFilter(key: string, values: string[]): void;\n setFilterOperator(key: string, operator: FilterOperator): void;\n setSearchQuery(query: string): void;\n setSelection(keys: Set<string>): void;\n sortBy(key: string): void;\n readonly sortState: Readable<SortState>;\n sortTo(key: string, direction: SortDirection): void;\n toggleColumnVisibility(key: string): void;\n toggleRow(key: string): void;\n toggleSearch(): void;\n readonly totalItems: Readable<number>;\n readonly visibleColumns: Readable<DataGridColumn<T>[]>;\n};\n\nconst DEFAULT_OPERATORS: { label: string; value: FilterOperator }[] = [\n { label: 'Contains', value: 'contains' },\n { label: 'Equals', value: 'equals' },\n { label: 'Greater than', value: 'gt' },\n { label: 'Less than', value: 'lt' },\n];\n\n/**\n * Feature-owned state and transform pipeline for `ore-datagrid`.\n *\n * Rows flow through query, filters, sorting, and pagination in order. Selection\n * and column visibility share the same model so every interactive grid concern\n * has one reactive owner. Source-backed grids retain their server-owned rows by\n * setting `clientSide` to false.\n */\nexport const createDataGridModel = <T extends Record<string, unknown>>(\n options: DataGridModelOptions<T>,\n): DataGridModel<T> => {\n const searchQuery = signal('');\n const searchActive = signal(false);\n const hiddenColumns = signal(new Set<string>());\n const activeFilterKeys = signal(new Set<string>());\n const filterValues = signal(new Map<string, FilterRule>());\n const sortKey = signal('');\n const sortDirection = signal<SortDirection>('none');\n const selectedKeys = signal(new Set<string>());\n const pageIndex = signal(0);\n\n const columnKeys = computed(() => new Set(options.columns.value.map((column) => column.key)));\n const visibleColumns = computed(() => options.columns.value.filter((column) => !hiddenColumns.value.has(column.key)));\n\n const colOptions = computed(() => {\n const externalKeys = new Set((options.filterOptions.value ?? []).map((filter) => filter.key));\n const activeKeys = [...activeFilterKeys.value].filter((key) => !externalKeys.has(key));\n\n if (!activeKeys.length) return new Map<string, { label: string; value: string }[]>();\n\n const derived = new Map<string, { label: string; value: string }[]>();\n\n for (const key of activeKeys) {\n const seen = new Set<string>();\n const values: { label: string; value: string }[] = [];\n\n for (const row of options.items.value) {\n const value = row[key];\n const stringValue = value == null ? '' : String(value);\n\n if (!seen.has(stringValue)) {\n seen.add(stringValue);\n values.push({ label: stringValue || '(empty)', value: stringValue });\n }\n }\n\n derived.set(key, values);\n }\n\n return derived;\n });\n\n const filterDefs = computed<FilterOption[]>(() => {\n const provided = options.filterOptions.value ?? [];\n const providedKeys = new Set(provided.map((filter) => filter.key));\n const derived = [...activeFilterKeys.value]\n .filter((key) => !providedKeys.has(key))\n .map((key) => {\n const column = options.columns.value.find((candidate) => candidate.key === key);\n\n return {\n key,\n label: column?.label ?? key,\n operators: DEFAULT_OPERATORS,\n options: colOptions.value.get(key) ?? [],\n };\n });\n\n return [...provided.map((filter) => ({ ...filter, operators: filter.operators ?? DEFAULT_OPERATORS })), ...derived];\n });\n\n const searchedRows = computed(() => {\n const rows = options.items.value;\n\n if (!options.clientSide.value) return rows;\n\n const query = searchQuery.value.trim().toLowerCase();\n\n if (!query) return rows;\n\n return rows.filter((row) =>\n Object.values(row).some((value) => value != null && String(value).toLowerCase().includes(query)),\n );\n });\n\n const filteredRows = computed(() => {\n const rows = searchedRows.value;\n\n if (!options.clientSide.value || !filterValues.value.size) return rows;\n\n return rows.filter((row) => {\n for (const [key, rule] of filterValues.value) {\n if (!rule.values.size || !columnKeys.value.has(key)) continue;\n\n const value = row[key];\n const stringValue = value == null ? '' : String(value);\n\n if (rule.operator === 'equals' && !rule.values.has(stringValue)) return false;\n\n if (\n rule.operator === 'contains' &&\n ![...rule.values].some((target) => stringValue.toLowerCase().includes(target.toLowerCase()))\n ) {\n return false;\n }\n\n if (rule.operator === 'gt' || rule.operator === 'lt') {\n const numericValue = parseFloat(stringValue);\n const targets = [...rule.values].map(parseFloat).filter((target) => !Number.isNaN(target));\n\n if (!targets.length) continue;\n\n if (rule.operator === 'gt' && !targets.some((target) => numericValue > target)) return false;\n\n if (rule.operator === 'lt' && !targets.some((target) => numericValue < target)) return false;\n }\n }\n\n return true;\n });\n });\n\n const sortState = computed<SortState>(() => ({ direction: sortDirection.value, key: sortKey.value }));\n const sortedRows = computed(() => {\n const rows = filteredRows.value;\n\n if (!options.clientSide.value || options.sortMode.value === 'server') return rows;\n\n const { direction, key } = sortState.value;\n\n if (!key || direction === 'none') return rows;\n\n const column = options.columns.value.find((candidate) => candidate.key === key);\n\n return rows.slice().sort((a, b) => {\n const aValue = column?.sortValue ? column.sortValue(a) : (a[key] as number | string);\n const bValue = column?.sortValue ? column.sortValue(b) : (b[key] as number | string);\n const comparison =\n typeof aValue === 'number' && typeof bValue === 'number'\n ? aValue - bValue\n : String(aValue ?? '').localeCompare(String(bValue ?? ''));\n\n return direction === 'asc' ? comparison : -comparison;\n });\n });\n\n const totalItems = computed(() => sortedRows.value.length);\n const pageCount = computed(() => {\n const size = options.pageSize.value;\n\n return Math.ceil(totalItems.value / (size <= 0 ? Number.MAX_SAFE_INTEGER : size));\n });\n const safePageIndex = computed(() => (pageCount.value ? Math.min(pageIndex.value, pageCount.value - 1) : -1));\n const currentPageItems = computed(() => {\n const size = options.pageSize.value;\n\n if (size <= 0) return sortedRows.value;\n\n const start = safePageIndex.value * size;\n\n return sortedRows.value.slice(start, start + size);\n });\n const hasNextPage = computed(() => pageCount.value > 0 && safePageIndex.value < pageCount.value - 1);\n const hasPrevPage = computed(() => safePageIndex.value > 0);\n const selectedRows = computed(() =>\n options.items.value.filter((item) => selectedKeys.value.has(options.getRowKey(item))),\n );\n\n watch(\n columnKeys,\n (keys) => {\n const nextActiveKeys = new Set([...activeFilterKeys.value].filter((key) => keys.has(key)));\n const nextValues = new Map([...filterValues.value].filter(([key]) => keys.has(key)));\n\n if (nextActiveKeys.size !== activeFilterKeys.value.size) activeFilterKeys.value = nextActiveKeys;\n\n if (nextValues.size !== filterValues.value.size) filterValues.value = nextValues;\n },\n { immediate: false },\n );\n\n watch(sortedRows, () => {\n pageIndex.value = 0;\n });\n\n const commitSelection = (next: Set<string>): void => {\n selectedKeys.value = next;\n options.onSelectionChange?.(next);\n };\n\n const setFilter = (key: string, values: string[]): void => {\n const next = new Map(filterValues.value);\n\n if (values.length) {\n next.set(key, { operator: next.get(key)?.operator ?? 'contains', values: new Set(values) });\n } else {\n next.delete(key);\n }\n\n filterValues.value = next;\n };\n\n const setFilterOperator = (key: string, operator: FilterOperator): void => {\n const rule = filterValues.value.get(key);\n\n if (rule) filterValues.value = new Map(filterValues.value).set(key, { ...rule, operator });\n };\n\n const sortTo = (key: string, direction: SortDirection): void => {\n sortKey.value = direction === 'none' ? '' : key;\n sortDirection.value = direction;\n pageIndex.value = 0;\n options.onSortChange?.(sortState.value);\n };\n\n return {\n activateFilterKey: (key) => {\n if (!activeFilterKeys.value.has(key)) activeFilterKeys.value = new Set([...activeFilterKeys.value, key]);\n },\n clearAllFilters: () => {\n activeFilterKeys.value = new Set();\n filterValues.value = new Map();\n },\n clearSelection: () => commitSelection(new Set()),\n currentPageItems,\n filterDefs,\n filteredRows,\n filterValues,\n goToPage: (index) => {\n if (Number.isFinite(index)) pageIndex.value = Math.max(0, index);\n },\n hasNextPage,\n hasPrevPage,\n hiddenColumns,\n isAllSelected: () => {\n const page = currentPageItems.value;\n\n return page.length > 0 && page.every((item) => selectedKeys.value.has(options.getRowKey(item)));\n },\n nextPage: () => {\n if (hasNextPage.value) pageIndex.value = safePageIndex.value + 1;\n },\n pageCount,\n pageIndex: safePageIndex,\n prevPage: () => {\n if (hasPrevPage.value) pageIndex.value = safePageIndex.value - 1;\n },\n removeFilter: (key) => {\n const nextActiveKeys = new Set(activeFilterKeys.value);\n\n nextActiveKeys.delete(key);\n activeFilterKeys.value = nextActiveKeys;\n\n const nextValues = new Map(filterValues.value);\n\n nextValues.delete(key);\n filterValues.value = nextValues;\n },\n resetFilters: () => {\n activeFilterKeys.value = new Set();\n filterValues.value = new Map();\n },\n resetSearch: () => {\n searchQuery.value = '';\n searchActive.value = false;\n },\n searchActive,\n searchQuery,\n selectAll: () => {\n if (options.selectionMode.value !== 'multi') return;\n\n const next = new Set(selectedKeys.value);\n\n if (currentPageItems.value.every((item) => next.has(options.getRowKey(item)))) {\n for (const item of currentPageItems.value) next.delete(options.getRowKey(item));\n } else {\n for (const item of currentPageItems.value) next.add(options.getRowKey(item));\n }\n\n commitSelection(next);\n },\n selectedKeys: computed(() => new Set(selectedKeys.value)),\n selectedRows,\n setActiveFilterKeys: (keys) => {\n const nextActiveKeys = new Set(keys);\n\n activeFilterKeys.value = nextActiveKeys;\n filterValues.value = new Map([...filterValues.value].filter(([key]) => nextActiveKeys.has(key)));\n },\n setFilter,\n setFilterOperator,\n setSearchQuery: (query) => {\n searchQuery.value = query;\n },\n setSelection: (keys) => commitSelection(new Set(keys)),\n sortBy: (key) => {\n const nextDirection =\n sortKey.value !== key\n ? 'asc'\n : sortDirection.value === 'asc'\n ? 'desc'\n : sortDirection.value === 'desc'\n ? 'none'\n : 'asc';\n\n sortTo(nextDirection === 'none' ? '' : key, nextDirection);\n },\n sortState,\n sortTo,\n toggleColumnVisibility: (key) => {\n const next = new Set(hiddenColumns.value);\n\n if (next.has(key)) next.delete(key);\n else next.add(key);\n\n hiddenColumns.value = next;\n },\n toggleRow: (key) => {\n if (options.selectionMode.value === 'none') return;\n\n const next = new Set(selectedKeys.value);\n\n if (next.has(key)) next.delete(key);\n else {\n if (options.selectionMode.value === 'single') next.clear();\n\n next.add(key);\n }\n\n commitSelection(next);\n },\n toggleSearch: () => {\n if (searchActive.value) searchQuery.value = '';\n\n searchActive.value = !searchActive.value;\n },\n totalItems,\n visibleColumns,\n };\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"datagrid-nav.cjs","names":[],"sources":["../../../src/inputs/datagrid/datagrid-nav.ts"],"sourcesContent":["import { type Readable, signal } from '@vielzeug/ripple';\n\n// ── Types ──────────────────────────────────────────────────────────────────────\n\n/** Position in the 2D grid model (0-based row/col indices). */\nexport type GridCellPos = { col: number; row: number };\n\n/** Handle returned by createGridNav for programmatic control. */\nexport type GridNavHandle = {\n /** Current active cell position. Reactive signal. */\n readonly activeCell: Readable<GridCellPos>;\n /**\n * Move focus to a specific cell by position.\n * Clamps to valid grid bounds; no-ops for invalid positions.\n */\n focusCell(pos: GridCellPos): void;\n};\n\n// ── Selector ───────────────────────────────────────────────────────────────────\n\nconst CELL_SELECTOR = '.dg-td, .dg-th';\n\n/** Build a 2D array of focusable cells from the shadow root. One sub-array per <tr>. */\nfunction getGrid(shadow: ShadowRoot): HTMLElement[][] {\n return Array.from(shadow.querySelectorAll<HTMLElement>('tr'))\n .map((tr) => Array.from(tr.querySelectorAll<HTMLElement>(CELL_SELECTOR)))\n .filter((row) => row.length > 0);\n}\n\n// ── Factory ────────────────────────────────────────────────────────────────────\n\n/**\n * Keyboard navigation for the ARIA grid pattern (roving tabindex).\n *\n * - Arrow keys move focus between cells.\n * - Home/End move to the first/last cell in the row.\n * - Ctrl+Home/Ctrl+End move to the first/last cell in the grid.\n * - Only the active cell has `tabindex=\"0\"`; all others have `\"-1\"`.\n *\n * @param table - The `.dg-table` element to attach the keydown listener to.\n * @param shadow - The shadow root containing the grid cells.\n * @returns A handle with `focusCell` and a reactive `activeCell` signal, plus a cleanup fn.\n */\nexport function createGridNav(table: HTMLElement, shadow: ShadowRoot): { cleanup: () => void; handle: GridNavHandle } {\n const activeCell = signal<GridCellPos>({ col: 0, row: 0 });\n\n const focusCell = (pos: GridCellPos): void => {\n const grid = getGrid(shadow);\n const rowIdx = Math.max(0, Math.min(pos.row, grid.length - 1));\n const row = grid[rowIdx];\n\n if (!row) return;\n\n const colIdx = Math.max(0, Math.min(pos.col, row.length - 1));\n const target = row[colIdx];\n\n if (!target) return;\n\n for (const r of grid) {\n for (const cell of r) cell.setAttribute('tabindex', '-1');\n }\n\n target.setAttribute('tabindex', '0');\n target.focus();\n activeCell.value = { col: colIdx, row: rowIdx };\n };\n\n const handleArrow = (e: KeyboardEvent): void => {\n const active = shadow.activeElement as HTMLElement | null;\n\n if (!active?.matches(CELL_SELECTOR)) return;\n\n const grid = getGrid(shadow);\n const rowIdx = grid.findIndex((row) => row.includes(active));\n\n if (rowIdx === -1) return;\n\n const colIdx = grid[rowIdx].indexOf(active);\n const lastRow = grid.length - 1;\n const lastCol = grid[rowIdx].length - 1;\n\n let nextRow = rowIdx;\n let nextCol = colIdx;\n\n if (e.key === 'ArrowRight') nextCol = colIdx + 1;\n else if (e.key === 'ArrowLeft') nextCol = colIdx - 1;\n else if (e.key === 'ArrowDown') nextRow = rowIdx + 1;\n else if (e.key === 'ArrowUp') nextRow = rowIdx - 1;\n else if (e.key === 'Home') {\n nextCol = 0;\n\n if (e.ctrlKey) nextRow = 0;\n } else if (e.key === 'End') {\n nextCol = lastCol;\n\n if (e.ctrlKey) nextRow = lastRow;\n } else return;\n\n e.preventDefault();\n focusCell({\n col: Math.max(0, Math.min(nextCol, (grid[Math.max(0, Math.min(nextRow, lastRow))]?.length ?? 1) - 1)),\n row: Math.max(0, Math.min(nextRow, lastRow)),\n });\n };\n\n table.addEventListener('keydown', handleArrow);\n\n return {\n cleanup: () => table.removeEventListener('keydown', handleArrow),\n handle: { activeCell, focusCell },\n };\n}\n"],"mappings":"kCAoBA,IAAM,EAAgB,iBAGtB,SAAS,EAAQ,EAAqC,CACpD,OAAO,MAAM,KAAK,EAAO,iBAA8B,IAAI,CAAC,CAAC,CAC1D,IAAK,GAAO,MAAM,KAAK,EAAG,iBAA8B,CAAa,CAAC,CAAC,CAAC,CACxE,OAAQ,GAAQ,EAAI,OAAS,CAAC,CACnC,CAgBA,SAAgB,EAAc,EAAoB,EAAoE,CACpH,IAAM,GAAA,EAAA,EAAA,OAAA,CAAiC,CAAE,IAAK,EAAG,IAAK,CAAE,CAAC,EAEnD,EAAa,GAA2B,CAC5C,IAAM,EAAO,EAAQ,CAAM,EACrB,EAAS,KAAK,IAAI,EAAG,KAAK,IAAI,EAAI,IAAK,EAAK,OAAS,CAAC,CAAC,EACvD,EAAM,EAAK,GAEjB,GAAI,CAAC,EAAK,OAEV,IAAM,EAAS,KAAK,IAAI,EAAG,KAAK,IAAI,EAAI,IAAK,EAAI,OAAS,CAAC,CAAC,EACtD,EAAS,EAAI,GAEd,KAEL,KAAK,IAAM,KAAK,EACd,IAAK,IAAM,KAAQ,EAAG,EAAK,aAAa,WAAY,IAAI,EAG1D,EAAO,aAAa,WAAY,GAAG,EACnC,EAAO,MAAM,EACb,EAAW,MAAQ,CAAE,IAAK,EAAQ,IAAK,CAAO,CALY,CAM5D,EAEM,EAAe,GAA2B,CAC9C,IAAM,EAAS,EAAO,cAEtB,GAAI,CAAC,GAAQ,QAAQ,CAAa,EAAG,OAErC,IAAM,EAAO,EAAQ,CAAM,EACrB,EAAS,EAAK,UAAW,GAAQ,EAAI,SAAS,CAAM,CAAC,EAE3D,GAAI,IAAW,GAAI,OAEnB,IAAM,EAAS,EAAK,EAAO,CAAC,QAAQ,CAAM,EACpC,EAAU,EAAK,OAAS,EACxB,EAAU,EAAK,EAAO,CAAC,OAAS,EAElC,EAAU,EACV,EAAU,EAEd,GAAI,EAAE,MAAQ,aAAc,EAAU,EAAS,OAC1C,GAAI,EAAE,MAAQ,YAAa,EAAU,EAAS,OAC9C,GAAI,EAAE,MAAQ,YAAa,EAAU,EAAS,OAC9C,GAAI,EAAE,MAAQ,UAAW,EAAU,EAAS,OAC5C,GAAI,EAAE,MAAQ,OACjB,EAAU,EAEN,EAAE,UAAS,EAAU,QACpB,GAAI,EAAE,MAAQ,MACnB,EAAU,EAEN,EAAE,UAAS,EAAU,QACpB,OAEP,EAAE,eAAe,EACjB,EAAU,CACR,IAAK,KAAK,IAAI,EAAG,KAAK,IAAI,GAAU,EAAK,KAAK,IAAI,EAAG,KAAK,IAAI,EAAS,CAAO,CAAC,EAAE,EAAE,QAAU,GAAK,CAAC,CAAC,EACpG,IAAK,KAAK,IAAI,EAAG,KAAK,IAAI,EAAS,CAAO,CAAC,CAC7C,CAAC,CACH,EAIA,OAFA,EAAM,iBAAiB,UAAW,CAAW,EAEtC,CACL,YAAe,EAAM,oBAAoB,UAAW,CAAW,EAC/D,OAAQ,CAAE,aAAY,WAAU,CAClC,CACF"}
1
+ {"version":3,"file":"datagrid-nav.cjs","names":[],"sources":["../../../src/inputs/datagrid/datagrid-nav.ts"],"sourcesContent":["import { type Readable, signal } from '@vielzeug/ripple';\n\n// ── Types ──────────────────────────────────────────────────────────────────────\n\n/** Position in the 2D grid model (0-based row/col indices). */\nexport type GridCellPos = { col: number; row: number };\n\n/** Handle returned by createGridNav for programmatic control. */\nexport type GridNavHandle = {\n /** Current active cell position. Reactive signal. */\n readonly activeCell: Readable<GridCellPos>;\n /**\n * Move focus to a specific cell by position.\n * Clamps to valid grid bounds; no-ops for invalid positions.\n */\n focusCell(pos: GridCellPos): void;\n};\n\n// ── Selector ───────────────────────────────────────────────────────────────────\n\nconst CELL_SELECTOR = '.dg-td, .dg-th';\n\n/** Build a 2D array of focusable cells from the shadow root. One sub-array per <tr>. */\nfunction getGrid(shadow: ShadowRoot): HTMLElement[][] {\n return Array.from(shadow.querySelectorAll<HTMLElement>('tr'))\n .map((tr) => Array.from(tr.querySelectorAll<HTMLElement>(CELL_SELECTOR)))\n .filter((row) => row.length > 0);\n}\n\n// ── Factory ────────────────────────────────────────────────────────────────────\n\n/**\n * Keyboard navigation for the ARIA grid pattern (roving tabindex).\n *\n * - Arrow keys move focus between cells.\n * - Home/End move to the first/last cell in the row.\n * - Ctrl+Home/Ctrl+End move to the first/last cell in the grid.\n * - Only the active cell has `tabindex=\"0\"`; all others have `\"-1\"`.\n *\n * @param table - The `.dg-table` element to attach the keydown listener to.\n * @param shadow - The shadow root containing the grid cells.\n * @returns A handle with `focusCell` and a reactive `activeCell` signal, plus a cleanup fn.\n */\nexport function createGridNav(table: HTMLElement, shadow: ShadowRoot): { cleanup: () => void; handle: GridNavHandle } {\n const activeCell = signal<GridCellPos>({ col: 0, row: 0 });\n\n const focusCell = (pos: GridCellPos): void => {\n const grid = getGrid(shadow);\n const rowIdx = Math.max(0, Math.min(pos.row, grid.length - 1));\n const row = grid[rowIdx];\n\n if (!row) return;\n\n const colIdx = Math.max(0, Math.min(pos.col, row.length - 1));\n const target = row[colIdx];\n\n if (!target) return;\n\n for (const r of grid) {\n for (const cell of r) cell.setAttribute('tabindex', '-1');\n }\n\n target.setAttribute('tabindex', '0');\n target.focus();\n activeCell.value = { col: colIdx, row: rowIdx };\n };\n\n const handleArrow = (e: KeyboardEvent): void => {\n const active = shadow.activeElement as HTMLElement | null;\n\n if (!active?.matches(CELL_SELECTOR)) return;\n\n const grid = getGrid(shadow);\n const rowIdx = grid.findIndex((row) => row.includes(active));\n\n if (rowIdx === -1) return;\n\n const colIdx = grid[rowIdx].indexOf(active);\n const lastRow = grid.length - 1;\n const lastCol = grid[rowIdx].length - 1;\n\n let nextRow = rowIdx;\n let nextCol = colIdx;\n\n if (e.key === 'ArrowRight') nextCol = colIdx + 1;\n else if (e.key === 'ArrowLeft') nextCol = colIdx - 1;\n else if (e.key === 'ArrowDown') nextRow = rowIdx + 1;\n else if (e.key === 'ArrowUp') nextRow = rowIdx - 1;\n else if (e.key === 'Home') {\n nextCol = 0;\n\n if (e.ctrlKey) nextRow = 0;\n } else if (e.key === 'End') {\n nextCol = lastCol;\n\n if (e.ctrlKey) nextRow = lastRow;\n } else return;\n\n e.preventDefault();\n focusCell({\n col: Math.max(0, Math.min(nextCol, (grid[Math.max(0, Math.min(nextRow, lastRow))]?.length ?? 1) - 1)),\n row: Math.max(0, Math.min(nextRow, lastRow)),\n });\n };\n\n table.addEventListener('keydown', handleArrow);\n\n return {\n cleanup: () => table.removeEventListener('keydown', handleArrow),\n handle: { activeCell, focusCell },\n };\n}\n"],"mappings":"kCAoBA,IAAM,EAAgB,iBAGtB,SAAS,EAAQ,EAAqC,CACpD,OAAO,MAAM,KAAK,EAAO,iBAA8B,IAAI,CAAC,CAAC,CAC1D,IAAK,GAAO,MAAM,KAAK,EAAG,iBAA8B,CAAa,CAAC,CAAC,CAAC,CACxE,OAAQ,GAAQ,EAAI,OAAS,CAAC,CACnC,CAgBA,SAAgB,EAAc,EAAoB,EAAoE,CACpH,IAAM,GAAA,EAAa,EAAA,OAAA,CAAoB,CAAE,IAAK,EAAG,IAAK,CAAE,CAAC,EAEnD,EAAa,GAA2B,CAC5C,IAAM,EAAO,EAAQ,CAAM,EACrB,EAAS,KAAK,IAAI,EAAG,KAAK,IAAI,EAAI,IAAK,EAAK,OAAS,CAAC,CAAC,EACvD,EAAM,EAAK,GAEjB,GAAI,CAAC,EAAK,OAEV,IAAM,EAAS,KAAK,IAAI,EAAG,KAAK,IAAI,EAAI,IAAK,EAAI,OAAS,CAAC,CAAC,EACtD,EAAS,EAAI,GAEd,KAEL,KAAK,IAAM,KAAK,EACd,IAAK,IAAM,KAAQ,EAAG,EAAK,aAAa,WAAY,IAAI,EAG1D,EAAO,aAAa,WAAY,GAAG,EACnC,EAAO,MAAM,EACb,EAAW,MAAQ,CAAE,IAAK,EAAQ,IAAK,CAAO,CALY,CAM5D,EAEM,EAAe,GAA2B,CAC9C,IAAM,EAAS,EAAO,cAEtB,GAAI,CAAC,GAAQ,QAAQ,CAAa,EAAG,OAErC,IAAM,EAAO,EAAQ,CAAM,EACrB,EAAS,EAAK,UAAW,GAAQ,EAAI,SAAS,CAAM,CAAC,EAE3D,GAAI,IAAW,GAAI,OAEnB,IAAM,EAAS,EAAK,EAAO,CAAC,QAAQ,CAAM,EACpC,EAAU,EAAK,OAAS,EACxB,EAAU,EAAK,EAAO,CAAC,OAAS,EAElC,EAAU,EACV,EAAU,EAEd,GAAI,EAAE,MAAQ,aAAc,EAAU,EAAS,OAC1C,GAAI,EAAE,MAAQ,YAAa,EAAU,EAAS,OAC9C,GAAI,EAAE,MAAQ,YAAa,EAAU,EAAS,OAC9C,GAAI,EAAE,MAAQ,UAAW,EAAU,EAAS,OAC5C,GAAI,EAAE,MAAQ,OACjB,EAAU,EAEN,EAAE,UAAS,EAAU,QACpB,GAAI,EAAE,MAAQ,MACnB,EAAU,EAEN,EAAE,UAAS,EAAU,QACpB,OAEP,EAAE,eAAe,EACjB,EAAU,CACR,IAAK,KAAK,IAAI,EAAG,KAAK,IAAI,GAAU,EAAK,KAAK,IAAI,EAAG,KAAK,IAAI,EAAS,CAAO,CAAC,EAAE,EAAE,QAAU,GAAK,CAAC,CAAC,EACpG,IAAK,KAAK,IAAI,EAAG,KAAK,IAAI,EAAS,CAAO,CAAC,CAC7C,CAAC,CACH,EAIA,OAFA,EAAM,iBAAiB,UAAW,CAAW,EAEtC,CACL,YAAe,EAAM,oBAAoB,UAAW,CAAW,EAC/D,OAAQ,CAAE,aAAY,WAAU,CAClC,CACF"}