@vielzeug/refine 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1097) hide show
  1. package/README.md +89 -0
  2. package/dist/_dev.cjs +2 -0
  3. package/dist/_dev.cjs.map +1 -0
  4. package/dist/_dev.d.ts +2 -0
  5. package/dist/_dev.d.ts.map +1 -0
  6. package/dist/_dev.js +9 -0
  7. package/dist/_dev.js.map +1 -0
  8. package/dist/_virtual/_rolldown/runtime.cjs +1 -0
  9. package/dist/accordion-item.cjs +26 -0
  10. package/dist/accordion-item.cjs.map +1 -0
  11. package/dist/accordion-item.js +124 -0
  12. package/dist/accordion-item.js.map +1 -0
  13. package/dist/accordion.cjs +2 -0
  14. package/dist/accordion.cjs.map +1 -0
  15. package/dist/accordion.js +47 -0
  16. package/dist/accordion.js.map +1 -0
  17. package/dist/alert.cjs +36 -0
  18. package/dist/alert.cjs.map +1 -0
  19. package/dist/alert.js +93 -0
  20. package/dist/alert.js.map +1 -0
  21. package/dist/async.cjs +55 -0
  22. package/dist/async.cjs.map +1 -0
  23. package/dist/async.js +99 -0
  24. package/dist/async.js.map +1 -0
  25. package/dist/avatar.cjs +18 -0
  26. package/dist/avatar.cjs.map +1 -0
  27. package/dist/avatar.js +108 -0
  28. package/dist/avatar.js.map +1 -0
  29. package/dist/badge.cjs +7 -0
  30. package/dist/badge.cjs.map +1 -0
  31. package/dist/badge.js +65 -0
  32. package/dist/badge.js.map +1 -0
  33. package/dist/box.cjs +2 -0
  34. package/dist/box.cjs.map +1 -0
  35. package/dist/box.js +31 -0
  36. package/dist/box.js.map +1 -0
  37. package/dist/breadcrumb.cjs +21 -0
  38. package/dist/breadcrumb.cjs.map +1 -0
  39. package/dist/breadcrumb.js +57 -0
  40. package/dist/breadcrumb.js.map +1 -0
  41. package/dist/button-group.cjs +6 -0
  42. package/dist/button-group.cjs.map +1 -0
  43. package/dist/button-group.js +33 -0
  44. package/dist/button-group.js.map +1 -0
  45. package/dist/button.cjs +18 -0
  46. package/dist/button.cjs.map +1 -0
  47. package/dist/button.js +124 -0
  48. package/dist/button.js.map +1 -0
  49. package/dist/calendar.cjs +126 -0
  50. package/dist/calendar.cjs.map +1 -0
  51. package/dist/calendar.js +300 -0
  52. package/dist/calendar.js.map +1 -0
  53. package/dist/card.cjs +23 -0
  54. package/dist/card.cjs.map +1 -0
  55. package/dist/card.js +87 -0
  56. package/dist/card.js.map +1 -0
  57. package/dist/carousel.cjs +61 -0
  58. package/dist/carousel.cjs.map +1 -0
  59. package/dist/carousel.js +280 -0
  60. package/dist/carousel.js.map +1 -0
  61. package/dist/checkbox-group.cjs +18 -0
  62. package/dist/checkbox-group.cjs.map +1 -0
  63. package/dist/checkbox-group.js +118 -0
  64. package/dist/checkbox-group.js.map +1 -0
  65. package/dist/checkbox.cjs +11 -0
  66. package/dist/checkbox.cjs.map +1 -0
  67. package/dist/checkbox.js +88 -0
  68. package/dist/checkbox.js.map +1 -0
  69. package/dist/chip.cjs +42 -0
  70. package/dist/chip.cjs.map +1 -0
  71. package/dist/chip.js +133 -0
  72. package/dist/chip.js.map +1 -0
  73. package/dist/code-window.cjs +19 -0
  74. package/dist/code-window.cjs.map +1 -0
  75. package/dist/code-window.js +41 -0
  76. package/dist/code-window.js.map +1 -0
  77. package/dist/combobox.cjs +103 -0
  78. package/dist/combobox.cjs.map +1 -0
  79. package/dist/combobox.js +444 -0
  80. package/dist/combobox.js.map +1 -0
  81. package/dist/content/avatar/avatar-group.css?inline.cjs +2 -0
  82. package/dist/content/avatar/avatar-group.css?inline.cjs.map +1 -0
  83. package/dist/content/avatar/avatar-group.css?inline.js +6 -0
  84. package/dist/content/avatar/avatar-group.css?inline.js.map +1 -0
  85. package/dist/content/avatar/avatar.css?inline.cjs +2 -0
  86. package/dist/content/avatar/avatar.css?inline.cjs.map +1 -0
  87. package/dist/content/avatar/avatar.css?inline.js +6 -0
  88. package/dist/content/avatar/avatar.css?inline.js.map +1 -0
  89. package/dist/content/avatar/avatar.d.ts +88 -0
  90. package/dist/content/avatar/avatar.d.ts.map +1 -0
  91. package/dist/content/breadcrumb/breadcrumb-item.css?inline.cjs +2 -0
  92. package/dist/content/breadcrumb/breadcrumb-item.css?inline.cjs.map +1 -0
  93. package/dist/content/breadcrumb/breadcrumb-item.css?inline.js +6 -0
  94. package/dist/content/breadcrumb/breadcrumb-item.css?inline.js.map +1 -0
  95. package/dist/content/breadcrumb/breadcrumb.css?inline.cjs +2 -0
  96. package/dist/content/breadcrumb/breadcrumb.css?inline.cjs.map +1 -0
  97. package/dist/content/breadcrumb/breadcrumb.css?inline.js +6 -0
  98. package/dist/content/breadcrumb/breadcrumb.css?inline.js.map +1 -0
  99. package/dist/content/breadcrumb/breadcrumb.d.ts +57 -0
  100. package/dist/content/breadcrumb/breadcrumb.d.ts.map +1 -0
  101. package/dist/content/card/card.css?inline.cjs +2 -0
  102. package/dist/content/card/card.css?inline.cjs.map +1 -0
  103. package/dist/content/card/card.css?inline.js +6 -0
  104. package/dist/content/card/card.css?inline.js.map +1 -0
  105. package/dist/content/card/card.d.ts +74 -0
  106. package/dist/content/card/card.d.ts.map +1 -0
  107. package/dist/content/carousel/carousel-slide.cjs +2 -0
  108. package/dist/content/carousel/carousel-slide.cjs.map +1 -0
  109. package/dist/content/carousel/carousel-slide.css?inline.cjs +2 -0
  110. package/dist/content/carousel/carousel-slide.css?inline.cjs.map +1 -0
  111. package/dist/content/carousel/carousel-slide.css?inline.js +6 -0
  112. package/dist/content/carousel/carousel-slide.css?inline.js.map +1 -0
  113. package/dist/content/carousel/carousel-slide.d.ts +2 -0
  114. package/dist/content/carousel/carousel-slide.d.ts.map +1 -0
  115. package/dist/content/carousel/carousel-slide.js +18 -0
  116. package/dist/content/carousel/carousel-slide.js.map +1 -0
  117. package/dist/content/carousel/carousel.css?inline.cjs +2 -0
  118. package/dist/content/carousel/carousel.css?inline.cjs.map +1 -0
  119. package/dist/content/carousel/carousel.css?inline.js +6 -0
  120. package/dist/content/carousel/carousel.css?inline.js.map +1 -0
  121. package/dist/content/carousel/carousel.d.ts +110 -0
  122. package/dist/content/carousel/carousel.d.ts.map +1 -0
  123. package/dist/content/carousel/index.d.ts +3 -0
  124. package/dist/content/carousel/index.d.ts.map +1 -0
  125. package/dist/content/code-window/code-window.css?inline.cjs +2 -0
  126. package/dist/content/code-window/code-window.css?inline.cjs.map +1 -0
  127. package/dist/content/code-window/code-window.css?inline.js +6 -0
  128. package/dist/content/code-window/code-window.css?inline.js.map +1 -0
  129. package/dist/content/code-window/code-window.d.ts +61 -0
  130. package/dist/content/code-window/code-window.d.ts.map +1 -0
  131. package/dist/content/copy-command/copy-command.css?inline.cjs +2 -0
  132. package/dist/content/copy-command/copy-command.css?inline.cjs.map +1 -0
  133. package/dist/content/copy-command/copy-command.css?inline.js +6 -0
  134. package/dist/content/copy-command/copy-command.css?inline.js.map +1 -0
  135. package/dist/content/copy-command/copy-command.d.ts +66 -0
  136. package/dist/content/copy-command/copy-command.d.ts.map +1 -0
  137. package/dist/content/icon/icon.css?inline.cjs +2 -0
  138. package/dist/content/icon/icon.css?inline.cjs.map +1 -0
  139. package/dist/content/icon/icon.css?inline.js +6 -0
  140. package/dist/content/icon/icon.css?inline.js.map +1 -0
  141. package/dist/content/icon/icon.d.ts +45 -0
  142. package/dist/content/icon/icon.d.ts.map +1 -0
  143. package/dist/content/index.d.ts +23 -0
  144. package/dist/content/index.d.ts.map +1 -0
  145. package/dist/content/pagination/pagination.css?inline.cjs +2 -0
  146. package/dist/content/pagination/pagination.css?inline.cjs.map +1 -0
  147. package/dist/content/pagination/pagination.css?inline.js +6 -0
  148. package/dist/content/pagination/pagination.css?inline.js.map +1 -0
  149. package/dist/content/pagination/pagination.d.ts +61 -0
  150. package/dist/content/pagination/pagination.d.ts.map +1 -0
  151. package/dist/content/separator/separator.css?inline.cjs +2 -0
  152. package/dist/content/separator/separator.css?inline.cjs.map +1 -0
  153. package/dist/content/separator/separator.css?inline.js +6 -0
  154. package/dist/content/separator/separator.css?inline.js.map +1 -0
  155. package/dist/content/separator/separator.d.ts +38 -0
  156. package/dist/content/separator/separator.d.ts.map +1 -0
  157. package/dist/content/table/table.css?inline.cjs +2 -0
  158. package/dist/content/table/table.css?inline.cjs.map +1 -0
  159. package/dist/content/table/table.css?inline.js +6 -0
  160. package/dist/content/table/table.css?inline.js.map +1 -0
  161. package/dist/content/table/table.d.ts +76 -0
  162. package/dist/content/table/table.d.ts.map +1 -0
  163. package/dist/content/text/text.css?inline.cjs +2 -0
  164. package/dist/content/text/text.css?inline.cjs.map +1 -0
  165. package/dist/content/text/text.css?inline.js +6 -0
  166. package/dist/content/text/text.css?inline.js.map +1 -0
  167. package/dist/content/text/text.d.ts +55 -0
  168. package/dist/content/text/text.d.ts.map +1 -0
  169. package/dist/copy-command.cjs +17 -0
  170. package/dist/copy-command.cjs.map +1 -0
  171. package/dist/copy-command.js +55 -0
  172. package/dist/copy-command.js.map +1 -0
  173. package/dist/custom-elements.json +12641 -0
  174. package/dist/datagrid.cjs +435 -0
  175. package/dist/datagrid.cjs.map +1 -0
  176. package/dist/datagrid.js +764 -0
  177. package/dist/datagrid.js.map +1 -0
  178. package/dist/date-picker.cjs +133 -0
  179. package/dist/date-picker.cjs.map +1 -0
  180. package/dist/date-picker.js +315 -0
  181. package/dist/date-picker.js.map +1 -0
  182. package/dist/dialog.cjs +28 -0
  183. package/dist/dialog.cjs.map +1 -0
  184. package/dist/dialog.js +88 -0
  185. package/dist/dialog.js.map +1 -0
  186. package/dist/disclosure/accordion/accordion.css?inline.cjs +2 -0
  187. package/dist/disclosure/accordion/accordion.css?inline.cjs.map +1 -0
  188. package/dist/disclosure/accordion/accordion.css?inline.js +6 -0
  189. package/dist/disclosure/accordion/accordion.css?inline.js.map +1 -0
  190. package/dist/disclosure/accordion/accordion.d.ts +62 -0
  191. package/dist/disclosure/accordion/accordion.d.ts.map +1 -0
  192. package/dist/disclosure/accordion-item/accordion-item.css?inline.cjs +2 -0
  193. package/dist/disclosure/accordion-item/accordion-item.css?inline.cjs.map +1 -0
  194. package/dist/disclosure/accordion-item/accordion-item.css?inline.js +6 -0
  195. package/dist/disclosure/accordion-item/accordion-item.css?inline.js.map +1 -0
  196. package/dist/disclosure/accordion-item/accordion-item.d.ts +70 -0
  197. package/dist/disclosure/accordion-item/accordion-item.d.ts.map +1 -0
  198. package/dist/disclosure/index.d.ts +11 -0
  199. package/dist/disclosure/index.d.ts.map +1 -0
  200. package/dist/disclosure/tab-item/tab-item.css?inline.cjs +2 -0
  201. package/dist/disclosure/tab-item/tab-item.css?inline.cjs.map +1 -0
  202. package/dist/disclosure/tab-item/tab-item.css?inline.js +6 -0
  203. package/dist/disclosure/tab-item/tab-item.css?inline.js.map +1 -0
  204. package/dist/disclosure/tab-item/tab-item.d.ts +49 -0
  205. package/dist/disclosure/tab-item/tab-item.d.ts.map +1 -0
  206. package/dist/disclosure/tab-panel/tab-panel.css?inline.cjs +2 -0
  207. package/dist/disclosure/tab-panel/tab-panel.css?inline.cjs.map +1 -0
  208. package/dist/disclosure/tab-panel/tab-panel.css?inline.js +6 -0
  209. package/dist/disclosure/tab-panel/tab-panel.css?inline.js.map +1 -0
  210. package/dist/disclosure/tab-panel/tab-panel.d.ts +33 -0
  211. package/dist/disclosure/tab-panel/tab-panel.d.ts.map +1 -0
  212. package/dist/disclosure/tabs/tabs.css?inline.cjs +2 -0
  213. package/dist/disclosure/tabs/tabs.css?inline.cjs.map +1 -0
  214. package/dist/disclosure/tabs/tabs.css?inline.js +6 -0
  215. package/dist/disclosure/tabs/tabs.css?inline.js.map +1 -0
  216. package/dist/disclosure/tabs/tabs.d.ts +75 -0
  217. package/dist/disclosure/tabs/tabs.d.ts.map +1 -0
  218. package/dist/drawer.cjs +32 -0
  219. package/dist/drawer.cjs.map +1 -0
  220. package/dist/drawer.js +199 -0
  221. package/dist/drawer.js.map +1 -0
  222. package/dist/errors.cjs +2 -0
  223. package/dist/errors.cjs.map +1 -0
  224. package/dist/errors.d.ts +9 -0
  225. package/dist/errors.d.ts.map +1 -0
  226. package/dist/errors.js +13 -0
  227. package/dist/errors.js.map +1 -0
  228. package/dist/feedback/alert/alert.css?inline.cjs +2 -0
  229. package/dist/feedback/alert/alert.css?inline.cjs.map +1 -0
  230. package/dist/feedback/alert/alert.css?inline.js +6 -0
  231. package/dist/feedback/alert/alert.css?inline.js.map +1 -0
  232. package/dist/feedback/alert/alert.d.ts +74 -0
  233. package/dist/feedback/alert/alert.d.ts.map +1 -0
  234. package/dist/feedback/async/async.css?inline.cjs +2 -0
  235. package/dist/feedback/async/async.css?inline.cjs.map +1 -0
  236. package/dist/feedback/async/async.css?inline.js +6 -0
  237. package/dist/feedback/async/async.css?inline.js.map +1 -0
  238. package/dist/feedback/async/async.d.ts +54 -0
  239. package/dist/feedback/async/async.d.ts.map +1 -0
  240. package/dist/feedback/badge/badge.css?inline.cjs +2 -0
  241. package/dist/feedback/badge/badge.css?inline.cjs.map +1 -0
  242. package/dist/feedback/badge/badge.css?inline.js +6 -0
  243. package/dist/feedback/badge/badge.css?inline.js.map +1 -0
  244. package/dist/feedback/badge/badge.d.ts +69 -0
  245. package/dist/feedback/badge/badge.d.ts.map +1 -0
  246. package/dist/feedback/chip/chip.css?inline.cjs +2 -0
  247. package/dist/feedback/chip/chip.css?inline.cjs.map +1 -0
  248. package/dist/feedback/chip/chip.css?inline.js +6 -0
  249. package/dist/feedback/chip/chip.css?inline.js.map +1 -0
  250. package/dist/feedback/chip/chip.d.ts +136 -0
  251. package/dist/feedback/chip/chip.d.ts.map +1 -0
  252. package/dist/feedback/index.d.ts +17 -0
  253. package/dist/feedback/index.d.ts.map +1 -0
  254. package/dist/feedback/password-strength/password-strength.css?inline.cjs +2 -0
  255. package/dist/feedback/password-strength/password-strength.css?inline.cjs.map +1 -0
  256. package/dist/feedback/password-strength/password-strength.css?inline.js +6 -0
  257. package/dist/feedback/password-strength/password-strength.css?inline.js.map +1 -0
  258. package/dist/feedback/password-strength/password-strength.d.ts +66 -0
  259. package/dist/feedback/password-strength/password-strength.d.ts.map +1 -0
  260. package/dist/feedback/progress/progress.css?inline.cjs +2 -0
  261. package/dist/feedback/progress/progress.css?inline.cjs.map +1 -0
  262. package/dist/feedback/progress/progress.css?inline.js +6 -0
  263. package/dist/feedback/progress/progress.css?inline.js.map +1 -0
  264. package/dist/feedback/progress/progress.d.ts +68 -0
  265. package/dist/feedback/progress/progress.d.ts.map +1 -0
  266. package/dist/feedback/skeleton/skeleton.css?inline.cjs +2 -0
  267. package/dist/feedback/skeleton/skeleton.css?inline.cjs.map +1 -0
  268. package/dist/feedback/skeleton/skeleton.css?inline.js +6 -0
  269. package/dist/feedback/skeleton/skeleton.css?inline.js.map +1 -0
  270. package/dist/feedback/skeleton/skeleton.d.ts +63 -0
  271. package/dist/feedback/skeleton/skeleton.d.ts.map +1 -0
  272. package/dist/feedback/toast/index.d.ts +2 -0
  273. package/dist/feedback/toast/index.d.ts.map +1 -0
  274. package/dist/feedback/toast/toast.css?inline.cjs +2 -0
  275. package/dist/feedback/toast/toast.css?inline.cjs.map +1 -0
  276. package/dist/feedback/toast/toast.css?inline.js +6 -0
  277. package/dist/feedback/toast/toast.css?inline.js.map +1 -0
  278. package/dist/feedback/toast/toast.d.ts +127 -0
  279. package/dist/feedback/toast/toast.d.ts.map +1 -0
  280. package/dist/file-input.cjs +70 -0
  281. package/dist/file-input.cjs.map +1 -0
  282. package/dist/file-input.js +209 -0
  283. package/dist/file-input.js.map +1 -0
  284. package/dist/form.cjs +11 -0
  285. package/dist/form.cjs.map +1 -0
  286. package/dist/form.js +56 -0
  287. package/dist/form.js.map +1 -0
  288. package/dist/grid-item.cjs +2 -0
  289. package/dist/grid-item.cjs.map +1 -0
  290. package/dist/grid-item.js +35 -0
  291. package/dist/grid-item.js.map +1 -0
  292. package/dist/grid.cjs +2 -0
  293. package/dist/grid.cjs.map +1 -0
  294. package/dist/grid.js +90 -0
  295. package/dist/grid.js.map +1 -0
  296. package/dist/headless/_internal.d.ts +17 -0
  297. package/dist/headless/_internal.d.ts.map +1 -0
  298. package/dist/headless/announcer.cjs +2 -0
  299. package/dist/headless/announcer.cjs.map +1 -0
  300. package/dist/headless/announcer.d.ts +25 -0
  301. package/dist/headless/announcer.d.ts.map +1 -0
  302. package/dist/headless/announcer.js +24 -0
  303. package/dist/headless/announcer.js.map +1 -0
  304. package/dist/headless/checkable.cjs +2 -0
  305. package/dist/headless/checkable.cjs.map +1 -0
  306. package/dist/headless/checkable.d.ts +42 -0
  307. package/dist/headless/checkable.d.ts.map +1 -0
  308. package/dist/headless/checkable.js +36 -0
  309. package/dist/headless/checkable.js.map +1 -0
  310. package/dist/headless/choice-field.cjs +2 -0
  311. package/dist/headless/choice-field.cjs.map +1 -0
  312. package/dist/headless/choice-field.d.ts +36 -0
  313. package/dist/headless/choice-field.d.ts.map +1 -0
  314. package/dist/headless/choice-field.js +42 -0
  315. package/dist/headless/choice-field.js.map +1 -0
  316. package/dist/headless/datagrid.cjs +2 -0
  317. package/dist/headless/datagrid.cjs.map +1 -0
  318. package/dist/headless/datagrid.d.ts +158 -0
  319. package/dist/headless/datagrid.d.ts.map +1 -0
  320. package/dist/headless/datagrid.js +55 -0
  321. package/dist/headless/datagrid.js.map +1 -0
  322. package/dist/headless/date-picker.cjs +2 -0
  323. package/dist/headless/date-picker.cjs.map +1 -0
  324. package/dist/headless/date-picker.d.ts +114 -0
  325. package/dist/headless/date-picker.d.ts.map +1 -0
  326. package/dist/headless/date-picker.js +184 -0
  327. package/dist/headless/date-picker.js.map +1 -0
  328. package/dist/headless/dialog-focus.cjs +2 -0
  329. package/dist/headless/dialog-focus.cjs.map +1 -0
  330. package/dist/headless/dialog-focus.d.ts +40 -0
  331. package/dist/headless/dialog-focus.d.ts.map +1 -0
  332. package/dist/headless/dialog-focus.js +22 -0
  333. package/dist/headless/dialog-focus.js.map +1 -0
  334. package/dist/headless/direction.cjs +2 -0
  335. package/dist/headless/direction.cjs.map +1 -0
  336. package/dist/headless/direction.d.ts +11 -0
  337. package/dist/headless/direction.d.ts.map +1 -0
  338. package/dist/headless/direction.js +14 -0
  339. package/dist/headless/direction.js.map +1 -0
  340. package/dist/headless/field-base.cjs +2 -0
  341. package/dist/headless/field-base.cjs.map +1 -0
  342. package/dist/headless/field-base.d.ts +148 -0
  343. package/dist/headless/field-base.d.ts.map +1 -0
  344. package/dist/headless/field-base.js +46 -0
  345. package/dist/headless/field-base.js.map +1 -0
  346. package/dist/headless/focus-trap.cjs +2 -0
  347. package/dist/headless/focus-trap.cjs.map +1 -0
  348. package/dist/headless/focus-trap.d.ts +45 -0
  349. package/dist/headless/focus-trap.d.ts.map +1 -0
  350. package/dist/headless/focus-trap.js +51 -0
  351. package/dist/headless/focus-trap.js.map +1 -0
  352. package/dist/headless/focus.cjs +2 -0
  353. package/dist/headless/focus.cjs.map +1 -0
  354. package/dist/headless/focus.d.ts +34 -0
  355. package/dist/headless/focus.d.ts.map +1 -0
  356. package/dist/headless/focus.js +34 -0
  357. package/dist/headless/focus.js.map +1 -0
  358. package/dist/headless/index.d.ts +28 -0
  359. package/dist/headless/index.d.ts.map +1 -0
  360. package/dist/headless/keyboard.cjs +2 -0
  361. package/dist/headless/keyboard.cjs.map +1 -0
  362. package/dist/headless/keyboard.d.ts +52 -0
  363. package/dist/headless/keyboard.d.ts.map +1 -0
  364. package/dist/headless/keyboard.js +29 -0
  365. package/dist/headless/keyboard.js.map +1 -0
  366. package/dist/headless/light-dom.cjs +2 -0
  367. package/dist/headless/light-dom.cjs.map +1 -0
  368. package/dist/headless/light-dom.d.ts +12 -0
  369. package/dist/headless/light-dom.d.ts.map +1 -0
  370. package/dist/headless/light-dom.js +6 -0
  371. package/dist/headless/light-dom.js.map +1 -0
  372. package/dist/headless/nav.cjs +2 -0
  373. package/dist/headless/nav.cjs.map +1 -0
  374. package/dist/headless/nav.d.ts +66 -0
  375. package/dist/headless/nav.d.ts.map +1 -0
  376. package/dist/headless/nav.js +115 -0
  377. package/dist/headless/nav.js.map +1 -0
  378. package/dist/headless/numbers.cjs +2 -0
  379. package/dist/headless/numbers.cjs.map +1 -0
  380. package/dist/headless/numbers.d.ts +14 -0
  381. package/dist/headless/numbers.d.ts.map +1 -0
  382. package/dist/headless/numbers.js +9 -0
  383. package/dist/headless/numbers.js.map +1 -0
  384. package/dist/headless/option-list.cjs +2 -0
  385. package/dist/headless/option-list.cjs.map +1 -0
  386. package/dist/headless/option-list.d.ts +107 -0
  387. package/dist/headless/option-list.d.ts.map +1 -0
  388. package/dist/headless/option-list.js +66 -0
  389. package/dist/headless/option-list.js.map +1 -0
  390. package/dist/headless/ore.cjs +2 -0
  391. package/dist/headless/ore.cjs.map +1 -0
  392. package/dist/headless/ore.d.ts +20 -0
  393. package/dist/headless/ore.d.ts.map +1 -0
  394. package/dist/headless/ore.js +9 -0
  395. package/dist/headless/ore.js.map +1 -0
  396. package/dist/headless/overlay.cjs +2 -0
  397. package/dist/headless/overlay.cjs.map +1 -0
  398. package/dist/headless/overlay.d.ts +62 -0
  399. package/dist/headless/overlay.d.ts.map +1 -0
  400. package/dist/headless/overlay.js +29 -0
  401. package/dist/headless/overlay.js.map +1 -0
  402. package/dist/headless/paginated-list.cjs +2 -0
  403. package/dist/headless/paginated-list.cjs.map +1 -0
  404. package/dist/headless/paginated-list.d.ts +42 -0
  405. package/dist/headless/paginated-list.d.ts.map +1 -0
  406. package/dist/headless/paginated-list.js +34 -0
  407. package/dist/headless/paginated-list.js.map +1 -0
  408. package/dist/headless/parse.cjs +2 -0
  409. package/dist/headless/parse.cjs.map +1 -0
  410. package/dist/headless/parse.d.ts +15 -0
  411. package/dist/headless/parse.d.ts.map +1 -0
  412. package/dist/headless/parse.js +9 -0
  413. package/dist/headless/parse.js.map +1 -0
  414. package/dist/headless/positioner.cjs +2 -0
  415. package/dist/headless/positioner.cjs.map +1 -0
  416. package/dist/headless/positioner.d.ts +40 -0
  417. package/dist/headless/positioner.d.ts.map +1 -0
  418. package/dist/headless/positioner.js +38 -0
  419. package/dist/headless/positioner.js.map +1 -0
  420. package/dist/headless/selection-control.cjs +2 -0
  421. package/dist/headless/selection-control.cjs.map +1 -0
  422. package/dist/headless/selection-control.d.ts +30 -0
  423. package/dist/headless/selection-control.d.ts.map +1 -0
  424. package/dist/headless/selection-control.js +44 -0
  425. package/dist/headless/selection-control.js.map +1 -0
  426. package/dist/headless/signals.cjs +2 -0
  427. package/dist/headless/signals.cjs.map +1 -0
  428. package/dist/headless/signals.d.ts +20 -0
  429. package/dist/headless/signals.d.ts.map +1 -0
  430. package/dist/headless/signals.js +12 -0
  431. package/dist/headless/signals.js.map +1 -0
  432. package/dist/headless/slider.cjs +2 -0
  433. package/dist/headless/slider.cjs.map +1 -0
  434. package/dist/headless/slider.d.ts +28 -0
  435. package/dist/headless/slider.d.ts.map +1 -0
  436. package/dist/headless/slider.js +40 -0
  437. package/dist/headless/slider.js.map +1 -0
  438. package/dist/headless/sort-control.cjs +2 -0
  439. package/dist/headless/sort-control.cjs.map +1 -0
  440. package/dist/headless/sort-control.d.ts +22 -0
  441. package/dist/headless/sort-control.d.ts.map +1 -0
  442. package/dist/headless/sort-control.js +36 -0
  443. package/dist/headless/sort-control.js.map +1 -0
  444. package/dist/headless/spinner.cjs +2 -0
  445. package/dist/headless/spinner.cjs.map +1 -0
  446. package/dist/headless/spinner.d.ts +19 -0
  447. package/dist/headless/spinner.d.ts.map +1 -0
  448. package/dist/headless/spinner.js +52 -0
  449. package/dist/headless/spinner.js.map +1 -0
  450. package/dist/headless/swipe.cjs +2 -0
  451. package/dist/headless/swipe.cjs.map +1 -0
  452. package/dist/headless/swipe.d.ts +38 -0
  453. package/dist/headless/swipe.d.ts.map +1 -0
  454. package/dist/headless/swipe.js +58 -0
  455. package/dist/headless/swipe.js.map +1 -0
  456. package/dist/headless/text-field.cjs +2 -0
  457. package/dist/headless/text-field.cjs.map +1 -0
  458. package/dist/headless/text-field.d.ts +45 -0
  459. package/dist/headless/text-field.d.ts.map +1 -0
  460. package/dist/headless/text-field.js +41 -0
  461. package/dist/headless/text-field.js.map +1 -0
  462. package/dist/headless/typeahead.cjs +2 -0
  463. package/dist/headless/typeahead.cjs.map +1 -0
  464. package/dist/headless/typeahead.d.ts +53 -0
  465. package/dist/headless/typeahead.d.ts.map +1 -0
  466. package/dist/headless/typeahead.js +23 -0
  467. package/dist/headless/typeahead.js.map +1 -0
  468. package/dist/headless.cjs +1 -0
  469. package/dist/headless.js +26 -0
  470. package/dist/icon.cjs +2 -0
  471. package/dist/icon.cjs.map +1 -0
  472. package/dist/icon.js +87 -0
  473. package/dist/icon.js.map +1 -0
  474. package/dist/index.cjs +1 -0
  475. package/dist/index.d.ts +9 -0
  476. package/dist/index.d.ts.map +1 -0
  477. package/dist/index.js +61 -0
  478. package/dist/input.cjs +67 -0
  479. package/dist/input.cjs.map +1 -0
  480. package/dist/input.js +184 -0
  481. package/dist/input.js.map +1 -0
  482. package/dist/inputs/button/button.css?inline.cjs +2 -0
  483. package/dist/inputs/button/button.css?inline.cjs.map +1 -0
  484. package/dist/inputs/button/button.css?inline.js +6 -0
  485. package/dist/inputs/button/button.css?inline.js.map +1 -0
  486. package/dist/inputs/button/button.d.ts +85 -0
  487. package/dist/inputs/button/button.d.ts.map +1 -0
  488. package/dist/inputs/button-group/button-group.css?inline.cjs +2 -0
  489. package/dist/inputs/button-group/button-group.css?inline.cjs.map +1 -0
  490. package/dist/inputs/button-group/button-group.css?inline.js +6 -0
  491. package/dist/inputs/button-group/button-group.css?inline.js.map +1 -0
  492. package/dist/inputs/button-group/button-group.d.ts +64 -0
  493. package/dist/inputs/button-group/button-group.d.ts.map +1 -0
  494. package/dist/inputs/calendar/calendar.css?inline.cjs +2 -0
  495. package/dist/inputs/calendar/calendar.css?inline.cjs.map +1 -0
  496. package/dist/inputs/calendar/calendar.css?inline.js +6 -0
  497. package/dist/inputs/calendar/calendar.css?inline.js.map +1 -0
  498. package/dist/inputs/calendar/calendar.d.ts +134 -0
  499. package/dist/inputs/calendar/calendar.d.ts.map +1 -0
  500. package/dist/inputs/checkbox/checkbox.css?inline.cjs +2 -0
  501. package/dist/inputs/checkbox/checkbox.css?inline.cjs.map +1 -0
  502. package/dist/inputs/checkbox/checkbox.css?inline.js +6 -0
  503. package/dist/inputs/checkbox/checkbox.css?inline.js.map +1 -0
  504. package/dist/inputs/checkbox/checkbox.d.ts +60 -0
  505. package/dist/inputs/checkbox/checkbox.d.ts.map +1 -0
  506. package/dist/inputs/checkbox-group/checkbox-group.css?inline.cjs +2 -0
  507. package/dist/inputs/checkbox-group/checkbox-group.css?inline.cjs.map +1 -0
  508. package/dist/inputs/checkbox-group/checkbox-group.css?inline.js +6 -0
  509. package/dist/inputs/checkbox-group/checkbox-group.css?inline.js.map +1 -0
  510. package/dist/inputs/checkbox-group/checkbox-group.d.ts +75 -0
  511. package/dist/inputs/checkbox-group/checkbox-group.d.ts.map +1 -0
  512. package/dist/inputs/combobox/combobox-options.cjs +2 -0
  513. package/dist/inputs/combobox/combobox-options.cjs.map +1 -0
  514. package/dist/inputs/combobox/combobox-options.d.ts +6 -0
  515. package/dist/inputs/combobox/combobox-options.d.ts.map +1 -0
  516. package/dist/inputs/combobox/combobox-options.js +26 -0
  517. package/dist/inputs/combobox/combobox-options.js.map +1 -0
  518. package/dist/inputs/combobox/combobox.css?inline.cjs +2 -0
  519. package/dist/inputs/combobox/combobox.css?inline.cjs.map +1 -0
  520. package/dist/inputs/combobox/combobox.css?inline.js +6 -0
  521. package/dist/inputs/combobox/combobox.css?inline.js.map +1 -0
  522. package/dist/inputs/combobox/combobox.d.ts +45 -0
  523. package/dist/inputs/combobox/combobox.d.ts.map +1 -0
  524. package/dist/inputs/combobox/combobox.types.d.ts +45 -0
  525. package/dist/inputs/combobox/combobox.types.d.ts.map +1 -0
  526. package/dist/inputs/datagrid/datagrid-column.cjs +2 -0
  527. package/dist/inputs/datagrid/datagrid-column.cjs.map +1 -0
  528. package/dist/inputs/datagrid/datagrid-column.d.ts +7 -0
  529. package/dist/inputs/datagrid/datagrid-column.d.ts.map +1 -0
  530. package/dist/inputs/datagrid/datagrid-column.js +31 -0
  531. package/dist/inputs/datagrid/datagrid-column.js.map +1 -0
  532. package/dist/inputs/datagrid/datagrid-controls.cjs +2 -0
  533. package/dist/inputs/datagrid/datagrid-controls.cjs.map +1 -0
  534. package/dist/inputs/datagrid/datagrid-controls.d.ts +98 -0
  535. package/dist/inputs/datagrid/datagrid-controls.d.ts.map +1 -0
  536. package/dist/inputs/datagrid/datagrid-controls.js +147 -0
  537. package/dist/inputs/datagrid/datagrid-controls.js.map +1 -0
  538. package/dist/inputs/datagrid/datagrid-nav.cjs +2 -0
  539. package/dist/inputs/datagrid/datagrid-nav.cjs.map +1 -0
  540. package/dist/inputs/datagrid/datagrid-nav.d.ts +33 -0
  541. package/dist/inputs/datagrid/datagrid-nav.d.ts.map +1 -0
  542. package/dist/inputs/datagrid/datagrid-nav.js +51 -0
  543. package/dist/inputs/datagrid/datagrid-nav.js.map +1 -0
  544. package/dist/inputs/datagrid/datagrid.css?inline.cjs +2 -0
  545. package/dist/inputs/datagrid/datagrid.css?inline.cjs.map +1 -0
  546. package/dist/inputs/datagrid/datagrid.css?inline.js +6 -0
  547. package/dist/inputs/datagrid/datagrid.css?inline.js.map +1 -0
  548. package/dist/inputs/datagrid/datagrid.d.ts +302 -0
  549. package/dist/inputs/datagrid/datagrid.d.ts.map +1 -0
  550. package/dist/inputs/date-picker/date-picker.css?inline.cjs +2 -0
  551. package/dist/inputs/date-picker/date-picker.css?inline.cjs.map +1 -0
  552. package/dist/inputs/date-picker/date-picker.css?inline.js +6 -0
  553. package/dist/inputs/date-picker/date-picker.css?inline.js.map +1 -0
  554. package/dist/inputs/date-picker/date-picker.d.ts +112 -0
  555. package/dist/inputs/date-picker/date-picker.d.ts.map +1 -0
  556. package/dist/inputs/file-input/file-input.css?inline.cjs +2 -0
  557. package/dist/inputs/file-input/file-input.css?inline.cjs.map +1 -0
  558. package/dist/inputs/file-input/file-input.css?inline.js +6 -0
  559. package/dist/inputs/file-input/file-input.css?inline.js.map +1 -0
  560. package/dist/inputs/file-input/file-input.d.ts +90 -0
  561. package/dist/inputs/file-input/file-input.d.ts.map +1 -0
  562. package/dist/inputs/form/form.css?inline.cjs +2 -0
  563. package/dist/inputs/form/form.css?inline.cjs.map +1 -0
  564. package/dist/inputs/form/form.css?inline.js +6 -0
  565. package/dist/inputs/form/form.css?inline.js.map +1 -0
  566. package/dist/inputs/form/form.d.ts +59 -0
  567. package/dist/inputs/form/form.d.ts.map +1 -0
  568. package/dist/inputs/index.d.ts +47 -0
  569. package/dist/inputs/index.d.ts.map +1 -0
  570. package/dist/inputs/input/input.css?inline.cjs +2 -0
  571. package/dist/inputs/input/input.css?inline.cjs.map +1 -0
  572. package/dist/inputs/input/input.css?inline.js +6 -0
  573. package/dist/inputs/input/input.css?inline.js.map +1 -0
  574. package/dist/inputs/input/input.d.ts +96 -0
  575. package/dist/inputs/input/input.d.ts.map +1 -0
  576. package/dist/inputs/number-input/number-input.css?inline.cjs +2 -0
  577. package/dist/inputs/number-input/number-input.css?inline.cjs.map +1 -0
  578. package/dist/inputs/number-input/number-input.css?inline.js +6 -0
  579. package/dist/inputs/number-input/number-input.css?inline.js.map +1 -0
  580. package/dist/inputs/number-input/number-input.d.ts +102 -0
  581. package/dist/inputs/number-input/number-input.d.ts.map +1 -0
  582. package/dist/inputs/otp-input/otp-input.css?inline.cjs +2 -0
  583. package/dist/inputs/otp-input/otp-input.css?inline.cjs.map +1 -0
  584. package/dist/inputs/otp-input/otp-input.css?inline.js +6 -0
  585. package/dist/inputs/otp-input/otp-input.css?inline.js.map +1 -0
  586. package/dist/inputs/otp-input/otp-input.d.ts +82 -0
  587. package/dist/inputs/otp-input/otp-input.d.ts.map +1 -0
  588. package/dist/inputs/radio/radio.css?inline.cjs +2 -0
  589. package/dist/inputs/radio/radio.css?inline.cjs.map +1 -0
  590. package/dist/inputs/radio/radio.css?inline.js +6 -0
  591. package/dist/inputs/radio/radio.css?inline.js.map +1 -0
  592. package/dist/inputs/radio/radio.d.ts +56 -0
  593. package/dist/inputs/radio/radio.d.ts.map +1 -0
  594. package/dist/inputs/radio-group/radio-group.css?inline.cjs +2 -0
  595. package/dist/inputs/radio-group/radio-group.css?inline.cjs.map +1 -0
  596. package/dist/inputs/radio-group/radio-group.css?inline.js +6 -0
  597. package/dist/inputs/radio-group/radio-group.css?inline.js.map +1 -0
  598. package/dist/inputs/radio-group/radio-group.d.ts +74 -0
  599. package/dist/inputs/radio-group/radio-group.d.ts.map +1 -0
  600. package/dist/inputs/rating/rating.css?inline.cjs +2 -0
  601. package/dist/inputs/rating/rating.css?inline.cjs.map +1 -0
  602. package/dist/inputs/rating/rating.css?inline.js +6 -0
  603. package/dist/inputs/rating/rating.css?inline.js.map +1 -0
  604. package/dist/inputs/rating/rating.d.ts +68 -0
  605. package/dist/inputs/rating/rating.d.ts.map +1 -0
  606. package/dist/inputs/select/select.css?inline.cjs +2 -0
  607. package/dist/inputs/select/select.css?inline.cjs.map +1 -0
  608. package/dist/inputs/select/select.css?inline.js +6 -0
  609. package/dist/inputs/select/select.css?inline.js.map +1 -0
  610. package/dist/inputs/select/select.d.ts +89 -0
  611. package/dist/inputs/select/select.d.ts.map +1 -0
  612. package/dist/inputs/shared/field-binding.cjs +2 -0
  613. package/dist/inputs/shared/field-binding.cjs.map +1 -0
  614. package/dist/inputs/shared/field-binding.d.ts +31 -0
  615. package/dist/inputs/shared/field-binding.d.ts.map +1 -0
  616. package/dist/inputs/shared/field-binding.js +31 -0
  617. package/dist/inputs/shared/field-binding.js.map +1 -0
  618. package/dist/inputs/shared/form-context.cjs +2 -0
  619. package/dist/inputs/shared/form-context.cjs.map +1 -0
  620. package/dist/inputs/shared/form-context.d.ts +49 -0
  621. package/dist/inputs/shared/form-context.d.ts.map +1 -0
  622. package/dist/inputs/shared/form-context.js +15 -0
  623. package/dist/inputs/shared/form-context.js.map +1 -0
  624. package/dist/inputs/shared/index.d.ts +5 -0
  625. package/dist/inputs/shared/index.d.ts.map +1 -0
  626. package/dist/inputs/shared/templates.cjs +11 -0
  627. package/dist/inputs/shared/templates.cjs.map +1 -0
  628. package/dist/inputs/shared/templates.d.ts +13 -0
  629. package/dist/inputs/shared/templates.d.ts.map +1 -0
  630. package/dist/inputs/shared/templates.js +18 -0
  631. package/dist/inputs/shared/templates.js.map +1 -0
  632. package/dist/inputs/shared/use-form-action.cjs +2 -0
  633. package/dist/inputs/shared/use-form-action.cjs.map +1 -0
  634. package/dist/inputs/shared/use-form-action.d.ts +17 -0
  635. package/dist/inputs/shared/use-form-action.d.ts.map +1 -0
  636. package/dist/inputs/shared/use-form-action.js +19 -0
  637. package/dist/inputs/shared/use-form-action.js.map +1 -0
  638. package/dist/inputs/slider/slider.css?inline.cjs +2 -0
  639. package/dist/inputs/slider/slider.css?inline.cjs.map +1 -0
  640. package/dist/inputs/slider/slider.css?inline.js +6 -0
  641. package/dist/inputs/slider/slider.css?inline.js.map +1 -0
  642. package/dist/inputs/slider/slider.d.ts +95 -0
  643. package/dist/inputs/slider/slider.d.ts.map +1 -0
  644. package/dist/inputs/switch/switch.css?inline.cjs +2 -0
  645. package/dist/inputs/switch/switch.css?inline.cjs.map +1 -0
  646. package/dist/inputs/switch/switch.css?inline.js +6 -0
  647. package/dist/inputs/switch/switch.css?inline.js.map +1 -0
  648. package/dist/inputs/switch/switch.d.ts +56 -0
  649. package/dist/inputs/switch/switch.d.ts.map +1 -0
  650. package/dist/inputs/textarea/textarea.css?inline.cjs +2 -0
  651. package/dist/inputs/textarea/textarea.css?inline.cjs.map +1 -0
  652. package/dist/inputs/textarea/textarea.css?inline.js +6 -0
  653. package/dist/inputs/textarea/textarea.css?inline.js.map +1 -0
  654. package/dist/inputs/textarea/textarea.d.ts +91 -0
  655. package/dist/inputs/textarea/textarea.d.ts.map +1 -0
  656. package/dist/inputs/time-picker/time-picker.css?inline.cjs +2 -0
  657. package/dist/inputs/time-picker/time-picker.css?inline.cjs.map +1 -0
  658. package/dist/inputs/time-picker/time-picker.css?inline.js +6 -0
  659. package/dist/inputs/time-picker/time-picker.css?inline.js.map +1 -0
  660. package/dist/inputs/time-picker/time-picker.d.ts +103 -0
  661. package/dist/inputs/time-picker/time-picker.d.ts.map +1 -0
  662. package/dist/layout/box/box.css?inline.cjs +2 -0
  663. package/dist/layout/box/box.css?inline.cjs.map +1 -0
  664. package/dist/layout/box/box.css?inline.js +6 -0
  665. package/dist/layout/box/box.css?inline.js.map +1 -0
  666. package/dist/layout/box/box.d.ts +52 -0
  667. package/dist/layout/box/box.d.ts.map +1 -0
  668. package/dist/layout/grid/grid.css?inline.cjs +2 -0
  669. package/dist/layout/grid/grid.css?inline.cjs.map +1 -0
  670. package/dist/layout/grid/grid.css?inline.js +6 -0
  671. package/dist/layout/grid/grid.css?inline.js.map +1 -0
  672. package/dist/layout/grid/grid.d.ts +105 -0
  673. package/dist/layout/grid/grid.d.ts.map +1 -0
  674. package/dist/layout/grid-item/grid-item.css?inline.cjs +2 -0
  675. package/dist/layout/grid-item/grid-item.css?inline.cjs.map +1 -0
  676. package/dist/layout/grid-item/grid-item.css?inline.js +6 -0
  677. package/dist/layout/grid-item/grid-item.css?inline.js.map +1 -0
  678. package/dist/layout/grid-item/grid-item.d.ts +54 -0
  679. package/dist/layout/grid-item/grid-item.d.ts.map +1 -0
  680. package/dist/layout/index.d.ts +11 -0
  681. package/dist/layout/index.d.ts.map +1 -0
  682. package/dist/layout/navbar/navbar.css?inline.cjs +2 -0
  683. package/dist/layout/navbar/navbar.css?inline.cjs.map +1 -0
  684. package/dist/layout/navbar/navbar.css?inline.js +6 -0
  685. package/dist/layout/navbar/navbar.css?inline.js.map +1 -0
  686. package/dist/layout/navbar/navbar.d.ts +153 -0
  687. package/dist/layout/navbar/navbar.d.ts.map +1 -0
  688. package/dist/layout/sidebar/sidebar-group.css?inline.cjs +2 -0
  689. package/dist/layout/sidebar/sidebar-group.css?inline.cjs.map +1 -0
  690. package/dist/layout/sidebar/sidebar-group.css?inline.js +6 -0
  691. package/dist/layout/sidebar/sidebar-group.css?inline.js.map +1 -0
  692. package/dist/layout/sidebar/sidebar-item.css?inline.cjs +2 -0
  693. package/dist/layout/sidebar/sidebar-item.css?inline.cjs.map +1 -0
  694. package/dist/layout/sidebar/sidebar-item.css?inline.js +6 -0
  695. package/dist/layout/sidebar/sidebar-item.css?inline.js.map +1 -0
  696. package/dist/layout/sidebar/sidebar.css?inline.cjs +2 -0
  697. package/dist/layout/sidebar/sidebar.css?inline.cjs.map +1 -0
  698. package/dist/layout/sidebar/sidebar.css?inline.js +6 -0
  699. package/dist/layout/sidebar/sidebar.css?inline.js.map +1 -0
  700. package/dist/layout/sidebar/sidebar.d.ts +226 -0
  701. package/dist/layout/sidebar/sidebar.d.ts.map +1 -0
  702. package/dist/menu.cjs +30 -0
  703. package/dist/menu.cjs.map +1 -0
  704. package/dist/menu.js +197 -0
  705. package/dist/menu.js.map +1 -0
  706. package/dist/navbar.cjs +68 -0
  707. package/dist/navbar.cjs.map +1 -0
  708. package/dist/navbar.js +283 -0
  709. package/dist/navbar.js.map +1 -0
  710. package/dist/number-input.cjs +40 -0
  711. package/dist/number-input.cjs.map +1 -0
  712. package/dist/number-input.js +141 -0
  713. package/dist/number-input.js.map +1 -0
  714. package/dist/ore/dist/_dev.cjs +2 -0
  715. package/dist/ore/dist/_dev.cjs.map +1 -0
  716. package/dist/ore/dist/_dev.js +12 -0
  717. package/dist/ore/dist/_dev.js.map +1 -0
  718. package/dist/ore/dist/aria.cjs +2 -0
  719. package/dist/ore/dist/aria.cjs.map +1 -0
  720. package/dist/ore/dist/aria.js +37 -0
  721. package/dist/ore/dist/aria.js.map +1 -0
  722. package/dist/ore/dist/base-element.cjs +2 -0
  723. package/dist/ore/dist/base-element.cjs.map +1 -0
  724. package/dist/ore/dist/base-element.js +146 -0
  725. package/dist/ore/dist/base-element.js.map +1 -0
  726. package/dist/ore/dist/context-bag.cjs +2 -0
  727. package/dist/ore/dist/context-bag.cjs.map +1 -0
  728. package/dist/ore/dist/context-bag.js +28 -0
  729. package/dist/ore/dist/context-bag.js.map +1 -0
  730. package/dist/ore/dist/context.cjs +2 -0
  731. package/dist/ore/dist/context.cjs.map +1 -0
  732. package/dist/ore/dist/context.js +38 -0
  733. package/dist/ore/dist/context.js.map +1 -0
  734. package/dist/ore/dist/define.cjs +2 -0
  735. package/dist/ore/dist/define.cjs.map +1 -0
  736. package/dist/ore/dist/define.js +27 -0
  737. package/dist/ore/dist/define.js.map +1 -0
  738. package/dist/ore/dist/directives/classMap.cjs +1 -0
  739. package/dist/ore/dist/directives/classMap.js +1 -0
  740. package/dist/ore/dist/directives/each.cjs +1 -0
  741. package/dist/ore/dist/directives/each.js +5 -0
  742. package/dist/ore/dist/directives/live.cjs +2 -0
  743. package/dist/ore/dist/directives/live.cjs.map +1 -0
  744. package/dist/ore/dist/directives/live.js +6 -0
  745. package/dist/ore/dist/directives/live.js.map +1 -0
  746. package/dist/ore/dist/directives/model.cjs +1 -0
  747. package/dist/ore/dist/directives/model.js +3 -0
  748. package/dist/ore/dist/directives/raw.cjs +2 -0
  749. package/dist/ore/dist/directives/raw.cjs.map +1 -0
  750. package/dist/ore/dist/directives/raw.js +35 -0
  751. package/dist/ore/dist/directives/raw.js.map +1 -0
  752. package/dist/ore/dist/directives/styleMap.cjs +2 -0
  753. package/dist/ore/dist/directives/styleMap.cjs.map +1 -0
  754. package/dist/ore/dist/directives/styleMap.js +20 -0
  755. package/dist/ore/dist/directives/styleMap.js.map +1 -0
  756. package/dist/ore/dist/directives/when.cjs +2 -0
  757. package/dist/ore/dist/directives/when.cjs.map +1 -0
  758. package/dist/ore/dist/directives/when.js +33 -0
  759. package/dist/ore/dist/directives/when.js.map +1 -0
  760. package/dist/ore/dist/directives.cjs +1 -0
  761. package/dist/ore/dist/directives.js +8 -0
  762. package/dist/ore/dist/errors.cjs +3 -0
  763. package/dist/ore/dist/errors.cjs.map +1 -0
  764. package/dist/ore/dist/errors.js +41 -0
  765. package/dist/ore/dist/errors.js.map +1 -0
  766. package/dist/ore/dist/host-bind.cjs +2 -0
  767. package/dist/ore/dist/host-bind.cjs.map +1 -0
  768. package/dist/ore/dist/host-bind.js +60 -0
  769. package/dist/ore/dist/host-bind.js.map +1 -0
  770. package/dist/ore/dist/observers/intersection-observe.cjs +2 -0
  771. package/dist/ore/dist/observers/intersection-observe.cjs.map +1 -0
  772. package/dist/ore/dist/observers/intersection-observe.js +12 -0
  773. package/dist/ore/dist/observers/intersection-observe.js.map +1 -0
  774. package/dist/ore/dist/observers/media-observe.cjs +1 -0
  775. package/dist/ore/dist/observers/media-observe.js +1 -0
  776. package/dist/ore/dist/observers/mutation-observe.cjs +1 -0
  777. package/dist/ore/dist/observers/mutation-observe.js +1 -0
  778. package/dist/ore/dist/observers/resize-observe.cjs +2 -0
  779. package/dist/ore/dist/observers/resize-observe.cjs.map +1 -0
  780. package/dist/ore/dist/observers/resize-observe.js +20 -0
  781. package/dist/ore/dist/observers/resize-observe.js.map +1 -0
  782. package/dist/ore/dist/observers.cjs +1 -0
  783. package/dist/ore/dist/observers.js +5 -0
  784. package/dist/ore/dist/props.cjs +2 -0
  785. package/dist/ore/dist/props.cjs.map +1 -0
  786. package/dist/ore/dist/props.js +54 -0
  787. package/dist/ore/dist/props.js.map +1 -0
  788. package/dist/ore/dist/runtime.cjs +2 -0
  789. package/dist/ore/dist/runtime.cjs.map +1 -0
  790. package/dist/ore/dist/runtime.js +33 -0
  791. package/dist/ore/dist/runtime.js.map +1 -0
  792. package/dist/ore/dist/slots.cjs +2 -0
  793. package/dist/ore/dist/slots.cjs.map +1 -0
  794. package/dist/ore/dist/slots.js +61 -0
  795. package/dist/ore/dist/slots.js.map +1 -0
  796. package/dist/ore/dist/testing/flush.cjs +2 -0
  797. package/dist/ore/dist/testing/flush.cjs.map +1 -0
  798. package/dist/ore/dist/testing/flush.js +11 -0
  799. package/dist/ore/dist/testing/flush.js.map +1 -0
  800. package/dist/ore/dist/testing/mount.cjs +2 -0
  801. package/dist/ore/dist/testing/mount.cjs.map +1 -0
  802. package/dist/ore/dist/testing/mount.js +94 -0
  803. package/dist/ore/dist/testing/mount.js.map +1 -0
  804. package/dist/ore/dist/testing/query.cjs +2 -0
  805. package/dist/ore/dist/testing/query.cjs.map +1 -0
  806. package/dist/ore/dist/testing/query.js +12 -0
  807. package/dist/ore/dist/testing/query.js.map +1 -0
  808. package/dist/ore/dist/testing/render-hook.cjs +1 -0
  809. package/dist/ore/dist/testing/render-hook.js +4 -0
  810. package/dist/ore/dist/testing/testing.cjs +1 -0
  811. package/dist/ore/dist/testing/testing.js +4 -0
  812. package/dist/ore/dist/testing/wait.cjs +1 -0
  813. package/dist/ore/dist/testing/wait.js +1 -0
  814. package/dist/ore/dist/testing.cjs +1 -0
  815. package/dist/ore/dist/testing.js +6 -0
  816. package/dist/ore/dist/types/bindings.cjs +2 -0
  817. package/dist/ore/dist/types/bindings.cjs.map +1 -0
  818. package/dist/ore/dist/types/bindings.js +15 -0
  819. package/dist/ore/dist/types/bindings.js.map +1 -0
  820. package/dist/ore/dist/types.cjs +2 -0
  821. package/dist/ore/dist/types.cjs.map +1 -0
  822. package/dist/ore/dist/types.js +15 -0
  823. package/dist/ore/dist/types.js.map +1 -0
  824. package/dist/ore/dist/utils/aria.cjs +2 -0
  825. package/dist/ore/dist/utils/aria.cjs.map +1 -0
  826. package/dist/ore/dist/utils/aria.js +6 -0
  827. package/dist/ore/dist/utils/aria.js.map +1 -0
  828. package/dist/ore/dist/utils/css.cjs +2 -0
  829. package/dist/ore/dist/utils/css.cjs.map +1 -0
  830. package/dist/ore/dist/utils/css.js +18 -0
  831. package/dist/ore/dist/utils/css.js.map +1 -0
  832. package/dist/ore/dist/utils/dom.cjs +2 -0
  833. package/dist/ore/dist/utils/dom.cjs.map +1 -0
  834. package/dist/ore/dist/utils/dom.js +47 -0
  835. package/dist/ore/dist/utils/dom.js.map +1 -0
  836. package/dist/ore/dist/utils/emit.cjs +2 -0
  837. package/dist/ore/dist/utils/emit.cjs.map +1 -0
  838. package/dist/ore/dist/utils/emit.js +16 -0
  839. package/dist/ore/dist/utils/emit.js.map +1 -0
  840. package/dist/ore/dist/utils/id.cjs +2 -0
  841. package/dist/ore/dist/utils/id.cjs.map +1 -0
  842. package/dist/ore/dist/utils/id.js +4 -0
  843. package/dist/ore/dist/utils/id.js.map +1 -0
  844. package/dist/otp-input.cjs +21 -0
  845. package/dist/otp-input.cjs.map +1 -0
  846. package/dist/otp-input.js +145 -0
  847. package/dist/otp-input.js.map +1 -0
  848. package/dist/overlay/dialog/dialog.css?inline.cjs +2 -0
  849. package/dist/overlay/dialog/dialog.css?inline.cjs.map +1 -0
  850. package/dist/overlay/dialog/dialog.css?inline.js +6 -0
  851. package/dist/overlay/dialog/dialog.css?inline.js.map +1 -0
  852. package/dist/overlay/dialog/dialog.d.ts +108 -0
  853. package/dist/overlay/dialog/dialog.d.ts.map +1 -0
  854. package/dist/overlay/drawer/drawer.css?inline.cjs +2 -0
  855. package/dist/overlay/drawer/drawer.css?inline.cjs.map +1 -0
  856. package/dist/overlay/drawer/drawer.css?inline.js +6 -0
  857. package/dist/overlay/drawer/drawer.css?inline.js.map +1 -0
  858. package/dist/overlay/drawer/drawer.d.ts +111 -0
  859. package/dist/overlay/drawer/drawer.d.ts.map +1 -0
  860. package/dist/overlay/index.d.ts +11 -0
  861. package/dist/overlay/index.d.ts.map +1 -0
  862. package/dist/overlay/menu/menu-item.css?inline.cjs +2 -0
  863. package/dist/overlay/menu/menu-item.css?inline.cjs.map +1 -0
  864. package/dist/overlay/menu/menu-item.css?inline.js +6 -0
  865. package/dist/overlay/menu/menu-item.css?inline.js.map +1 -0
  866. package/dist/overlay/menu/menu-separator.css?inline.cjs +2 -0
  867. package/dist/overlay/menu/menu-separator.css?inline.cjs.map +1 -0
  868. package/dist/overlay/menu/menu-separator.css?inline.js +6 -0
  869. package/dist/overlay/menu/menu-separator.css?inline.js.map +1 -0
  870. package/dist/overlay/menu/menu.css?inline.cjs +2 -0
  871. package/dist/overlay/menu/menu.css?inline.cjs.map +1 -0
  872. package/dist/overlay/menu/menu.css?inline.js +6 -0
  873. package/dist/overlay/menu/menu.css?inline.js.map +1 -0
  874. package/dist/overlay/menu/menu.d.ts +110 -0
  875. package/dist/overlay/menu/menu.d.ts.map +1 -0
  876. package/dist/overlay/popover/popover.css?inline.cjs +2 -0
  877. package/dist/overlay/popover/popover.css?inline.cjs.map +1 -0
  878. package/dist/overlay/popover/popover.css?inline.js +6 -0
  879. package/dist/overlay/popover/popover.css?inline.js.map +1 -0
  880. package/dist/overlay/popover/popover.d.ts +56 -0
  881. package/dist/overlay/popover/popover.d.ts.map +1 -0
  882. package/dist/overlay/shared/await-exit.cjs +2 -0
  883. package/dist/overlay/shared/await-exit.cjs.map +1 -0
  884. package/dist/overlay/shared/await-exit.d.ts +14 -0
  885. package/dist/overlay/shared/await-exit.d.ts.map +1 -0
  886. package/dist/overlay/shared/await-exit.js +18 -0
  887. package/dist/overlay/shared/await-exit.js.map +1 -0
  888. package/dist/overlay/shared/background-lock.cjs +2 -0
  889. package/dist/overlay/shared/background-lock.cjs.map +1 -0
  890. package/dist/overlay/shared/background-lock.d.ts +22 -0
  891. package/dist/overlay/shared/background-lock.d.ts.map +1 -0
  892. package/dist/overlay/shared/background-lock.js +25 -0
  893. package/dist/overlay/shared/background-lock.js.map +1 -0
  894. package/dist/overlay/shared/use-dialog.cjs +2 -0
  895. package/dist/overlay/shared/use-dialog.cjs.map +1 -0
  896. package/dist/overlay/shared/use-dialog.d.ts +76 -0
  897. package/dist/overlay/shared/use-dialog.d.ts.map +1 -0
  898. package/dist/overlay/shared/use-dialog.js +92 -0
  899. package/dist/overlay/shared/use-dialog.js.map +1 -0
  900. package/dist/overlay/shared/use-floating-trigger.cjs +2 -0
  901. package/dist/overlay/shared/use-floating-trigger.cjs.map +1 -0
  902. package/dist/overlay/shared/use-floating-trigger.d.ts +67 -0
  903. package/dist/overlay/shared/use-floating-trigger.d.ts.map +1 -0
  904. package/dist/overlay/shared/use-floating-trigger.js +128 -0
  905. package/dist/overlay/shared/use-floating-trigger.js.map +1 -0
  906. package/dist/overlay/tooltip/tooltip.css?inline.cjs +2 -0
  907. package/dist/overlay/tooltip/tooltip.css?inline.cjs.map +1 -0
  908. package/dist/overlay/tooltip/tooltip.css?inline.js +6 -0
  909. package/dist/overlay/tooltip/tooltip.css?inline.js.map +1 -0
  910. package/dist/overlay/tooltip/tooltip.d.ts +72 -0
  911. package/dist/overlay/tooltip/tooltip.d.ts.map +1 -0
  912. package/dist/pagination.cjs +63 -0
  913. package/dist/pagination.cjs.map +1 -0
  914. package/dist/pagination.js +113 -0
  915. package/dist/pagination.js.map +1 -0
  916. package/dist/password-strength.cjs +19 -0
  917. package/dist/password-strength.cjs.map +1 -0
  918. package/dist/password-strength.js +69 -0
  919. package/dist/password-strength.js.map +1 -0
  920. package/dist/popover.cjs +16 -0
  921. package/dist/popover.cjs.map +1 -0
  922. package/dist/popover.js +81 -0
  923. package/dist/popover.js.map +1 -0
  924. package/dist/progress.cjs +46 -0
  925. package/dist/progress.cjs.map +1 -0
  926. package/dist/progress.js +96 -0
  927. package/dist/progress.js.map +1 -0
  928. package/dist/radio-group.cjs +25 -0
  929. package/dist/radio-group.cjs.map +1 -0
  930. package/dist/radio-group.js +145 -0
  931. package/dist/radio-group.js.map +1 -0
  932. package/dist/radio.cjs +10 -0
  933. package/dist/radio.cjs.map +1 -0
  934. package/dist/radio.js +146 -0
  935. package/dist/radio.js.map +1 -0
  936. package/dist/rating.cjs +28 -0
  937. package/dist/rating.cjs.map +1 -0
  938. package/dist/rating.js +123 -0
  939. package/dist/rating.js.map +1 -0
  940. package/dist/refine.cjs +2705 -0
  941. package/dist/refine.cjs.map +1 -0
  942. package/dist/refine.iife.js +2705 -0
  943. package/dist/refine.iife.js.map +1 -0
  944. package/dist/refine.js +2705 -0
  945. package/dist/refine.js.map +1 -0
  946. package/dist/select.cjs +79 -0
  947. package/dist/select.cjs.map +1 -0
  948. package/dist/select.js +289 -0
  949. package/dist/select.js.map +1 -0
  950. package/dist/separator.cjs +27 -0
  951. package/dist/separator.cjs.map +1 -0
  952. package/dist/separator.js +47 -0
  953. package/dist/separator.js.map +1 -0
  954. package/dist/shared/index.d.ts +14 -0
  955. package/dist/shared/index.d.ts.map +1 -0
  956. package/dist/shared/prop-bundles.cjs +2 -0
  957. package/dist/shared/prop-bundles.cjs.map +1 -0
  958. package/dist/shared/prop-bundles.d.ts +45 -0
  959. package/dist/shared/prop-bundles.d.ts.map +1 -0
  960. package/dist/shared/prop-bundles.js +13 -0
  961. package/dist/shared/prop-bundles.js.map +1 -0
  962. package/dist/shared/size-presets.cjs +2 -0
  963. package/dist/shared/size-presets.cjs.map +1 -0
  964. package/dist/shared/size-presets.d.ts +101 -0
  965. package/dist/shared/size-presets.d.ts.map +1 -0
  966. package/dist/shared/size-presets.js +96 -0
  967. package/dist/shared/size-presets.js.map +1 -0
  968. package/dist/shared/types.d.ts +76 -0
  969. package/dist/shared/types.d.ts.map +1 -0
  970. package/dist/sidebar.cjs +123 -0
  971. package/dist/sidebar.cjs.map +1 -0
  972. package/dist/sidebar.js +344 -0
  973. package/dist/sidebar.js.map +1 -0
  974. package/dist/skeleton.cjs +10 -0
  975. package/dist/skeleton.cjs.map +1 -0
  976. package/dist/skeleton.js +59 -0
  977. package/dist/skeleton.js.map +1 -0
  978. package/dist/slider.cjs +27 -0
  979. package/dist/slider.cjs.map +1 -0
  980. package/dist/slider.js +219 -0
  981. package/dist/slider.js.map +1 -0
  982. package/dist/styles/animation.css +94 -0
  983. package/dist/styles/index.cjs +2 -0
  984. package/dist/styles/index.cjs.map +1 -0
  985. package/dist/styles/index.d.ts +41 -0
  986. package/dist/styles/index.d.ts.map +1 -0
  987. package/dist/styles/index.js +24 -0
  988. package/dist/styles/index.js.map +1 -0
  989. package/dist/styles/layer.css +19 -0
  990. package/dist/styles/mixins/accessibility.css.cjs +51 -0
  991. package/dist/styles/mixins/accessibility.css.cjs.map +1 -0
  992. package/dist/styles/mixins/accessibility.css.d.ts +80 -0
  993. package/dist/styles/mixins/accessibility.css.d.ts.map +1 -0
  994. package/dist/styles/mixins/accessibility.css.js +56 -0
  995. package/dist/styles/mixins/accessibility.css.js.map +1 -0
  996. package/dist/styles/mixins/animation.css.cjs +133 -0
  997. package/dist/styles/mixins/animation.css.cjs.map +1 -0
  998. package/dist/styles/mixins/animation.css.d.ts +43 -0
  999. package/dist/styles/mixins/animation.css.d.ts.map +1 -0
  1000. package/dist/styles/mixins/animation.css.js +166 -0
  1001. package/dist/styles/mixins/animation.css.js.map +1 -0
  1002. package/dist/styles/mixins/shape.css.cjs +66 -0
  1003. package/dist/styles/mixins/shape.css.cjs.map +1 -0
  1004. package/dist/styles/mixins/shape.css.d.ts +96 -0
  1005. package/dist/styles/mixins/shape.css.d.ts.map +1 -0
  1006. package/dist/styles/mixins/shape.css.js +98 -0
  1007. package/dist/styles/mixins/shape.css.js.map +1 -0
  1008. package/dist/styles/mixins/states.css.cjs +37 -0
  1009. package/dist/styles/mixins/states.css.cjs.map +1 -0
  1010. package/dist/styles/mixins/states.css.d.ts +27 -0
  1011. package/dist/styles/mixins/states.css.d.ts.map +1 -0
  1012. package/dist/styles/mixins/states.css.js +44 -0
  1013. package/dist/styles/mixins/states.css.js.map +1 -0
  1014. package/dist/styles/mixins/table-base.css.cjs +94 -0
  1015. package/dist/styles/mixins/table-base.css.cjs.map +1 -0
  1016. package/dist/styles/mixins/table-base.css.d.ts +24 -0
  1017. package/dist/styles/mixins/table-base.css.d.ts.map +1 -0
  1018. package/dist/styles/mixins/table-base.css.js +99 -0
  1019. package/dist/styles/mixins/table-base.css.js.map +1 -0
  1020. package/dist/styles/mixins/theme.css.cjs +80 -0
  1021. package/dist/styles/mixins/theme.css.cjs.map +1 -0
  1022. package/dist/styles/mixins/theme.css.d.ts +77 -0
  1023. package/dist/styles/mixins/theme.css.d.ts.map +1 -0
  1024. package/dist/styles/mixins/theme.css.js +98 -0
  1025. package/dist/styles/mixins/theme.css.js.map +1 -0
  1026. package/dist/styles/mixins/variants.css.cjs +55 -0
  1027. package/dist/styles/mixins/variants.css.cjs.map +1 -0
  1028. package/dist/styles/mixins/variants.css.d.ts +22 -0
  1029. package/dist/styles/mixins/variants.css.d.ts.map +1 -0
  1030. package/dist/styles/mixins/variants.css.js +60 -0
  1031. package/dist/styles/mixins/variants.css.js.map +1 -0
  1032. package/dist/styles/preflight.css +239 -0
  1033. package/dist/styles/styles.css +5 -0
  1034. package/dist/styles/theme.css +553 -0
  1035. package/dist/switch.cjs +10 -0
  1036. package/dist/switch.cjs.map +1 -0
  1037. package/dist/switch.js +79 -0
  1038. package/dist/switch.js.map +1 -0
  1039. package/dist/tab-item.cjs +17 -0
  1040. package/dist/tab-item.cjs.map +1 -0
  1041. package/dist/tab-item.js +62 -0
  1042. package/dist/tab-item.js.map +1 -0
  1043. package/dist/tab-panel.cjs +14 -0
  1044. package/dist/tab-panel.cjs.map +1 -0
  1045. package/dist/tab-panel.js +61 -0
  1046. package/dist/tab-panel.js.map +1 -0
  1047. package/dist/table.cjs +2 -0
  1048. package/dist/table.cjs.map +1 -0
  1049. package/dist/table.js +101 -0
  1050. package/dist/table.js.map +1 -0
  1051. package/dist/tabs.cjs +17 -0
  1052. package/dist/tabs.cjs.map +1 -0
  1053. package/dist/tabs.js +126 -0
  1054. package/dist/tabs.js.map +1 -0
  1055. package/dist/testing/index.d.ts +233 -0
  1056. package/dist/testing/index.d.ts.map +1 -0
  1057. package/dist/testing.cjs +2 -0
  1058. package/dist/testing.cjs.map +1 -0
  1059. package/dist/testing.js +44 -0
  1060. package/dist/testing.js.map +1 -0
  1061. package/dist/text.cjs +2 -0
  1062. package/dist/text.cjs.map +1 -0
  1063. package/dist/text.js +34 -0
  1064. package/dist/text.js.map +1 -0
  1065. package/dist/textarea.cjs +33 -0
  1066. package/dist/textarea.cjs.map +1 -0
  1067. package/dist/textarea.js +137 -0
  1068. package/dist/textarea.js.map +1 -0
  1069. package/dist/time-picker.cjs +98 -0
  1070. package/dist/time-picker.cjs.map +1 -0
  1071. package/dist/time-picker.js +261 -0
  1072. package/dist/time-picker.js.map +1 -0
  1073. package/dist/toast.cjs +69 -0
  1074. package/dist/toast.cjs.map +1 -0
  1075. package/dist/toast.js +316 -0
  1076. package/dist/toast.js.map +1 -0
  1077. package/dist/tooltip.cjs +15 -0
  1078. package/dist/tooltip.cjs.map +1 -0
  1079. package/dist/tooltip.js +121 -0
  1080. package/dist/tooltip.js.map +1 -0
  1081. package/dist/types/index.d.ts +2 -0
  1082. package/dist/types/index.d.ts.map +1 -0
  1083. package/dist/utils/css.cjs +2 -0
  1084. package/dist/utils/css.cjs.map +1 -0
  1085. package/dist/utils/css.d.ts +10 -0
  1086. package/dist/utils/css.d.ts.map +1 -0
  1087. package/dist/utils/css.js +10 -0
  1088. package/dist/utils/css.js.map +1 -0
  1089. package/dist/utils/index.d.ts +3 -0
  1090. package/dist/utils/index.d.ts.map +1 -0
  1091. package/dist/utils/link.cjs +2 -0
  1092. package/dist/utils/link.cjs.map +1 -0
  1093. package/dist/utils/link.d.ts +44 -0
  1094. package/dist/utils/link.d.ts.map +1 -0
  1095. package/dist/utils/link.js +19 -0
  1096. package/dist/utils/link.js.map +1 -0
  1097. package/package.json +464 -0
@@ -0,0 +1,45 @@
1
+ import type { ChoiceChangeDetail, DropdownCloseReason, OverlayOpenDetail } from '../../headless';
2
+ import type { SelectableFieldProps } from '../../shared';
3
+ import type { VisualVariant } from '../../types';
4
+ export type OreComboboxEvents = {
5
+ change: ChoiceChangeDetail;
6
+ close: {
7
+ reason: DropdownCloseReason;
8
+ };
9
+ open: OverlayOpenDetail;
10
+ search: {
11
+ query: string;
12
+ };
13
+ };
14
+ export type ComboboxOptionInput = {
15
+ disabled?: boolean;
16
+ iconEl?: Element | null;
17
+ label?: string;
18
+ value: string;
19
+ };
20
+ export type ComboboxOptionItem = {
21
+ disabled: boolean;
22
+ iconEl: Element | null;
23
+ label: string;
24
+ value: string;
25
+ };
26
+ export type OreComboboxProps = Omit<SelectableFieldProps<Exclude<VisualVariant, 'text' | 'frost'>>, 'label-placement' | 'value'> & {
27
+ /** Automatically close the dropdown after selecting an option (even in multiple mode) */
28
+ autoclose?: boolean;
29
+ /** Allow typing a new value to create a new option */
30
+ creatable?: boolean;
31
+ 'label-placement'?: 'outside' | 'inset';
32
+ /** Show loading state in the dropdown */
33
+ loading?: boolean;
34
+ multiple?: boolean;
35
+ 'no-filter'?: boolean;
36
+ options?: ComboboxOptionInput[];
37
+ value?: string | string[];
38
+ };
39
+ export type OreComboboxOptionProps = {
40
+ disabled?: boolean;
41
+ /** Explicit label text; falls back to the element's text content. */
42
+ label?: string;
43
+ value?: string;
44
+ };
45
+ //# sourceMappingURL=combobox.types.d.ts.map
@@ -0,0 +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,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"}
@@ -0,0 +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;
2
+ //# sourceMappingURL=datagrid-column.cjs.map
@@ -0,0 +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"}
@@ -0,0 +1,7 @@
1
+ import type { DataGridColumn } from '../../headless';
2
+ export declare const COLUMN_TAG: "ore-column";
3
+ /** Attributes observed by the column MutationObserver in ore-datagrid. */
4
+ export declare const COLUMN_OBSERVED_ATTRS: readonly ["key", "label", "sortable", "resizable", "align", "width", "header-label"];
5
+ /** Parse all `<ore-column>` direct children of `host` into DataGridColumn descriptors. */
6
+ export declare function parseColumnChildren(host: HTMLElement): DataGridColumn[];
7
+ //# sourceMappingURL=datagrid-column.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,31 @@
1
+ import { warn as e } from "../../_dev.js";
2
+ //#region src/inputs/datagrid/datagrid-column.ts
3
+ customElements.get("ore-column") || customElements.define("ore-column", class extends HTMLElement {
4
+ connectedCallback() {
5
+ this.getAttribute("key") || e("ore-column: missing required `key` attribute"), this.getAttribute("label") || e("ore-column: missing required `label` attribute");
6
+ }
7
+ });
8
+ var t = "ore-column", n = [
9
+ "key",
10
+ "label",
11
+ "sortable",
12
+ "resizable",
13
+ "align",
14
+ "width",
15
+ "header-label"
16
+ ];
17
+ function r(e) {
18
+ return Array.from(e.querySelectorAll(":scope > ore-column")).map((e) => ({
19
+ align: e.getAttribute("align") ?? void 0,
20
+ headerLabel: e.getAttribute("header-label") ?? void 0,
21
+ key: e.getAttribute("key") ?? "",
22
+ label: e.getAttribute("label") ?? "",
23
+ resizable: e.hasAttribute("resizable"),
24
+ sortable: e.hasAttribute("sortable"),
25
+ width: e.getAttribute("width") ?? void 0
26
+ }));
27
+ }
28
+ //#endregion
29
+ export { n as COLUMN_OBSERVED_ATTRS, t as COLUMN_TAG, r as parseColumnChildren };
30
+
31
+ //# sourceMappingURL=datagrid-column.js.map
@@ -0,0 +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"}
@@ -0,0 +1,2 @@
1
+ let e=require("@vielzeug/ripple");var t=[{label:`Contains`,value:`contains`},{label:`Equals`,value:`equals`},{label:`Greater than`,value:`gt`},{label:`Less than`,value:`lt`}],n=n=>{let r=(0,e.signal)(``),i=(0,e.signal)(!1),a=(0,e.signal)(new Set),o=(0,e.signal)(new Set),s=(0,e.signal)(new Map),c=(0,e.computed)(()=>{let e=new Set((n.filterOptions.value??[]).map(e=>e.key)),t=[...o.value].filter(t=>!e.has(t));if(!t.length)return new Map;let r=n.rows.value,i=new Map;for(let e of t){let t=new Set,n=[];for(let i of r){let r=i[e],a=r==null?``:String(r);t.has(a)||(t.add(a),n.push({label:a||`(empty)`,value:a}))}i.set(e,n)}return i}),l=(0,e.computed)(()=>{let e=n.filterOptions.value??[],r=new Set(e.map(e=>e.key)),i=[...o.value].filter(e=>!r.has(e)).map(e=>({key:e,label:n.columns.value.find(t=>t.key===e)?.label??e,operators:t,options:c.value.get(e)??[]}));return[...e.map(e=>({...e,operators:e.operators??t})),...i]});(0,e.watch)((0,e.computed)(()=>new Set(n.columns.value.map(e=>e.key))),e=>{let t=new Set([...o.value].filter(t=>e.has(t)));t.size!==o.value.size&&(o.value=t);let n=new Map([...s.value].filter(([t])=>e.has(t)));n.size!==s.value.size&&(s.value=n)},{immediate:!1});let u=(0,e.computed)(()=>{let e=n.rows.value,t=r.value.trim().toLowerCase();return t?e.filter(e=>Object.values(e).some(e=>e!=null&&String(e).toLowerCase().includes(t))):e});return{activateFilterKey:e=>{o.value.has(e)||(o.value=new Set([...o.value,e]))},clearAllFilters:()=>{o.value=new Set,s.value=new Map},filterDefs:l,filteredRows:(0,e.computed)(()=>{let e=u.value,t=s.value;if(!t.size)return e;let r=new Set(n.columns.value.map(e=>e.key));return e.filter(e=>{for(let[n,i]of t){if(!i.values.size||!r.has(n))continue;let t=e[n],a=t==null?``:String(t);if(i.operator===`equals`){if(!i.values.has(a))return!1}else if(i.operator===`contains`){if(![...i.values].some(e=>a.toLowerCase().includes(e.toLowerCase())))return!1}else if(i.operator===`gt`||i.operator===`lt`){let e=parseFloat(a),t=[...i.values].map(parseFloat).filter(e=>!isNaN(e));if(!t.length)continue;if(i.operator===`gt`){if(!t.some(t=>e>t))return!1}else if(!t.some(t=>e<t))return!1}}return!0})}),filterValues:s,hiddenColumns:a,removeFilter:e=>{let t=new Set(o.value);t.delete(e),o.value=t;let n=new Map(s.value);n.delete(e),s.value=n},resetFilters:()=>{o.value=new Set,s.value=new Map},resetSearch:()=>{r.value=``,i.value=!1},searchActive:i,searchQuery:r,setActiveFilterKeys:e=>{let t=new Set(e);o.value=t;let n=new Map(s.value),r=!1;for(let e of n.keys())t.has(e)||(n.delete(e),r=!0);r&&(s.value=n)},setFilter:(e,t)=>{let n=new Map(s.value);if(t.length===0)n.delete(e);else{let r=n.get(e);n.set(e,{operator:r?.operator??`contains`,values:new Set(t)})}s.value=n},setFilterOperator:(e,t)=>{let n=new Map(s.value),r=n.get(e);r&&(n.set(e,{...r,operator:t}),s.value=n)},setSearchQuery:e=>{r.value=e},toggleColumnVisibility:e=>{let t=new Set(a.value);t.has(e)?t.delete(e):t.add(e),a.value=t},toggleSearch:()=>{i.value&&(r.value=``),i.value=!i.value}}};exports.createDataGridControls=n;
2
+ //# sourceMappingURL=datagrid-controls.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datagrid-controls.cjs","names":[],"sources":["../../../src/inputs/datagrid/datagrid-controls.ts"],"sourcesContent":["import { computed, signal, type Readable, watch } from '@vielzeug/ripple';\n\nimport type { DataGridColumn } from '../../headless';\n\n// ── Types ──────────────────────────────────────────────────────────────────────\n\n/**\n * A single filter option definition — the available choices shown in the filter picker\n * for one column. When `filterOptions` is not provided on the grid, options are\n * auto-derived from the current row data.\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 /** Unique identifier for this view. */\n id: string;\n /** Display label shown in the tab. */\n label: string;\n};\n\nexport type DataGridControlsOptions = {\n /** Reactive column definitions — used to auto-derive filter options and prune stale state. */\n columns: Readable<DataGridColumn[]>;\n /**\n * Pre-defined filter option definitions per column key.\n * When set, these replace auto-derived options for matching keys.\n */\n filterOptions: Readable<FilterOption[] | undefined>;\n /** Reactive row data — searched and filtered to produce `filteredRows`. */\n rows: Readable<Record<string, unknown>[]>;\n};\n\nexport type DataGridControlsHandle = {\n /** Add a column key to the active filter set (makes its rule appear in the UI). */\n activateFilterKey(key: string): void;\n /** Clear all active filter rules and values. */\n clearAllFilters(): void;\n /**\n * Merged filter option definitions (provided + user-activated auto-derived).\n * A key's presence means its filter rule is visible in the UI.\n */\n readonly filterDefs: Readable<FilterOption[]>;\n /**\n * Rows after applying search and filter. Pass this as the `items` source\n * to the table control so the headless module owns the full data pipeline.\n */\n readonly filteredRows: Readable<Record<string, unknown>[]>;\n /** Unified filter state: column key → filter rule (operator + values). */\n readonly filterValues: Readable<Map<string, FilterRule>>;\n /** Set of column keys hidden by the user. */\n readonly hiddenColumns: Readable<Set<string>>;\n /** Remove a column's filter rule and clear its selected values. */\n removeFilter(key: string): void;\n /** Clear all active filter rules and values. Alias for clearAllFilters, provided for symmetry with resetSearch. */\n resetFilters(): void;\n /** Clear search state (query + active flag). Column visibility is a persistent preference and is never reset. */\n resetSearch(): void;\n /** Whether the inline search input is currently open. */\n readonly searchActive: Readable<boolean>;\n /** Current text search query. */\n readonly searchQuery: Readable<string>;\n /** Set the active filter keys at once, pruning stale values. */\n setActiveFilterKeys(keys: string[]): void;\n /** Apply or update a multi-select filter for a column. Pass [] to clear that column's values. */\n setFilter(key: string, values: string[]): void;\n /** Update the operator for a specific filter rule. */\n setFilterOperator(key: string, operator: FilterOperator): void;\n /** Set the raw search query text directly. */\n setSearchQuery(q: string): void;\n /** Toggle a column's visibility. */\n toggleColumnVisibility(key: string): void;\n /** Toggle search open/closed. Clears the query on close. */\n toggleSearch(): void;\n};\n\n// ── Implementation ─────────────────────────────────────────────────────────────\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 * Headless controls for ore-datagrid: search, filter, column visibility, and derived rows.\n *\n * Design notes:\n * - Filter state uses two signals: activeFilterKeys (Set) drives filterDefs and\n * the filter rule DOM; filterValues (Map) tracks selected values per key.\n * Separating them prevents filterDefs from recomputing on value changes, which\n * would otherwise destroy and recreate the combobox mid-interaction.\n * - colOptions is computed lazily — only for columns with active filter rules,\n * so the common case (no active filters) costs O(0) row iterations.\n * - filteredRows is derived here (not in the component) so the full data pipeline\n * lives in one place and can be unit-tested end-to-end.\n */\nexport const createDataGridControls = (options: DataGridControlsOptions): DataGridControlsHandle => {\n const searchQuery = signal('');\n const searchActive = signal(false);\n const hiddenColumns = signal(new Set<string>());\n\n // Two-signal filter state: activeFilterKeys tracks which rules exist (drives\n // filterDefs / DOM structure); filterValues tracks selected values per key.\n // Separating them prevents filterDefs from recomputing — and the filter rule\n // DOM from being torn down — every time a value is selected.\n const activeFilterKeys = signal(new Set<string>());\n const filterValues = signal(new Map<string, FilterRule>());\n\n // Derive options only for columns that have an active filter rule and are not\n // covered by externally-provided filterOptions. Lazy: O(activeRules × rows).\n const colOptions = computed(() => {\n const externalKeys = new Set((options.filterOptions.value ?? []).map((f) => f.key));\n const activeKeys = [...activeFilterKeys.value].filter((k) => !externalKeys.has(k));\n\n if (!activeKeys.length) return new Map<string, { label: string; value: string }[]>();\n\n const rows = options.rows.value;\n const map = new Map<string, { label: string; value: string }[]>();\n\n for (const key of activeKeys) {\n const seen = new Set<string>();\n const opts: { label: string; value: string }[] = [];\n\n for (const row of rows) {\n const v = row[key];\n const s = v == null ? '' : String(v);\n\n if (!seen.has(s)) {\n seen.add(s);\n opts.push({ label: s || '(empty)', value: s });\n }\n }\n\n map.set(key, opts);\n }\n\n return map;\n });\n\n // Merge provided filter options with auto-derived ones for active keys.\n // Depends only on activeFilterKeys (not filterValues) so adding/removing a\n // value does not tear down the filter rule DOM.\n const filterDefs = computed<FilterOption[]>(() => {\n const provided = options.filterOptions.value ?? [];\n const providedKeys = new Set(provided.map((f) => f.key));\n const derived = [...activeFilterKeys.value]\n .filter((k) => !providedKeys.has(k))\n .map((k) => {\n const col = options.columns.value.find((c) => c.key === k);\n\n return {\n key: k,\n label: col?.label ?? k,\n operators: DEFAULT_OPERATORS,\n options: colOptions.value.get(k) ?? [],\n };\n });\n\n return [...provided.map((f) => ({ ...f, operators: f.operators ?? DEFAULT_OPERATORS })), ...derived];\n });\n\n // Prune stale filter rules when columns are removed.\n watch(\n computed(() => new Set(options.columns.value.map((c) => c.key))),\n (keySet) => {\n const prunedKeys = new Set([...activeFilterKeys.value].filter((k) => keySet.has(k)));\n\n if (prunedKeys.size !== activeFilterKeys.value.size) activeFilterKeys.value = prunedKeys;\n\n const prunedValues = new Map([...filterValues.value].filter(([k]) => keySet.has(k)));\n\n if (prunedValues.size !== filterValues.value.size) filterValues.value = prunedValues;\n },\n { immediate: false },\n );\n\n // Full data pipeline: search then filter. Lives here so the headless module\n // owns the complete input→output contract and can be tested end-to-end.\n const searchedRows = computed(() => {\n const rows = options.rows.value;\n const q = searchQuery.value.trim().toLowerCase();\n\n if (!q) return rows;\n\n return rows.filter((row) => Object.values(row).some((v) => v != null && String(v).toLowerCase().includes(q)));\n });\n\n const filteredRows = computed(() => {\n const rows = searchedRows.value;\n const fv = filterValues.value;\n\n if (!fv.size) return rows;\n\n const currentKeys = new Set(options.columns.value.map((c) => c.key));\n\n return rows.filter((row) => {\n for (const [key, rule] of fv) {\n if (!rule.values.size || !currentKeys.has(key)) continue;\n\n const cell = row[key];\n const cellValue = cell == null ? '' : String(cell);\n\n if (rule.operator === 'equals') {\n if (!rule.values.has(cellValue)) return false;\n } else if (rule.operator === 'contains') {\n if (![...rule.values].some((v) => cellValue.toLowerCase().includes(v.toLowerCase()))) return false;\n } else if (rule.operator === 'gt' || rule.operator === 'lt') {\n const num = parseFloat(cellValue);\n const targets = [...rule.values].map(parseFloat).filter((n) => !isNaN(n));\n\n if (!targets.length) continue;\n\n if (rule.operator === 'gt') {\n if (!targets.some((t) => num > t)) return false;\n } else {\n if (!targets.some((t) => num < t)) return false;\n }\n }\n }\n\n return true;\n });\n });\n\n const setFilter = (key: string, values: string[]): void => {\n const next = new Map(filterValues.value);\n\n if (values.length === 0) {\n next.delete(key);\n } else {\n const existing = next.get(key);\n\n next.set(key, { operator: existing?.operator ?? 'contains', values: new Set(values) });\n }\n\n filterValues.value = next;\n };\n\n const setFilterOperator = (key: string, operator: FilterOperator): void => {\n const next = new Map(filterValues.value);\n const existing = next.get(key);\n\n if (existing) {\n next.set(key, { ...existing, operator });\n\n filterValues.value = next;\n }\n };\n\n const activateFilterKey = (key: string): void => {\n if (activeFilterKeys.value.has(key)) return;\n\n activeFilterKeys.value = new Set([...activeFilterKeys.value, key]);\n };\n\n const removeFilter = (key: string): void => {\n const nextKeys = new Set(activeFilterKeys.value);\n\n nextKeys.delete(key);\n activeFilterKeys.value = nextKeys;\n\n const nextValues = new Map(filterValues.value);\n\n nextValues.delete(key);\n filterValues.value = nextValues;\n };\n\n const clearAllFilters = (): void => {\n activeFilterKeys.value = new Set();\n filterValues.value = new Map();\n };\n\n const setSearchQuery = (q: string): void => {\n searchQuery.value = q;\n };\n\n const setActiveFilterKeys = (keys: string[]): void => {\n const nextKeys = new Set(keys);\n\n activeFilterKeys.value = nextKeys;\n\n // Prune values for keys that are no longer active.\n const nextValues = new Map(filterValues.value);\n let changed = false;\n\n for (const k of nextValues.keys()) {\n if (!nextKeys.has(k)) {\n nextValues.delete(k);\n changed = true;\n }\n }\n\n if (changed) filterValues.value = nextValues;\n };\n\n const toggleColumnVisibility = (key: string): void => {\n const next = new Set(hiddenColumns.value);\n\n if (next.has(key)) {\n next.delete(key);\n } else {\n next.add(key);\n }\n\n hiddenColumns.value = next;\n };\n\n const toggleSearch = (): void => {\n if (searchActive.value) searchQuery.value = '';\n\n searchActive.value = !searchActive.value;\n };\n\n const resetSearch = (): void => {\n searchQuery.value = '';\n searchActive.value = false;\n };\n\n const resetFilters = (): void => {\n activeFilterKeys.value = new Set();\n filterValues.value = new Map();\n };\n\n return {\n activateFilterKey,\n clearAllFilters,\n filterDefs,\n filteredRows,\n filterValues,\n hiddenColumns,\n removeFilter,\n resetFilters,\n resetSearch,\n searchActive,\n searchQuery,\n setActiveFilterKeys,\n setFilter,\n setFilterOperator,\n setSearchQuery,\n toggleColumnVisibility,\n toggleSearch,\n };\n};\n"],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ import { type Readable } from '@vielzeug/ripple';
2
+ import type { DataGridColumn } from '../../headless';
3
+ /**
4
+ * A single filter option definition — the available choices shown in the filter picker
5
+ * for one column. When `filterOptions` is not provided on the grid, options are
6
+ * auto-derived from the current row data.
7
+ */
8
+ export type FilterOption = {
9
+ key: string;
10
+ label: string;
11
+ operators?: {
12
+ label: string;
13
+ value: string;
14
+ }[];
15
+ options: {
16
+ label?: string;
17
+ value: string;
18
+ }[];
19
+ };
20
+ export type FilterOperator = 'contains' | 'equals' | 'gt' | 'lt';
21
+ export type FilterRule = {
22
+ operator: FilterOperator;
23
+ values: Set<string>;
24
+ };
25
+ export type DataGridView = {
26
+ /** Unique identifier for this view. */
27
+ id: string;
28
+ /** Display label shown in the tab. */
29
+ label: string;
30
+ };
31
+ export type DataGridControlsOptions = {
32
+ /** Reactive column definitions — used to auto-derive filter options and prune stale state. */
33
+ columns: Readable<DataGridColumn[]>;
34
+ /**
35
+ * Pre-defined filter option definitions per column key.
36
+ * When set, these replace auto-derived options for matching keys.
37
+ */
38
+ filterOptions: Readable<FilterOption[] | undefined>;
39
+ /** Reactive row data — searched and filtered to produce `filteredRows`. */
40
+ rows: Readable<Record<string, unknown>[]>;
41
+ };
42
+ export type DataGridControlsHandle = {
43
+ /** Add a column key to the active filter set (makes its rule appear in the UI). */
44
+ activateFilterKey(key: string): void;
45
+ /** Clear all active filter rules and values. */
46
+ clearAllFilters(): void;
47
+ /**
48
+ * Merged filter option definitions (provided + user-activated auto-derived).
49
+ * A key's presence means its filter rule is visible in the UI.
50
+ */
51
+ readonly filterDefs: Readable<FilterOption[]>;
52
+ /**
53
+ * Rows after applying search and filter. Pass this as the `items` source
54
+ * to the table control so the headless module owns the full data pipeline.
55
+ */
56
+ readonly filteredRows: Readable<Record<string, unknown>[]>;
57
+ /** Unified filter state: column key → filter rule (operator + values). */
58
+ readonly filterValues: Readable<Map<string, FilterRule>>;
59
+ /** Set of column keys hidden by the user. */
60
+ readonly hiddenColumns: Readable<Set<string>>;
61
+ /** Remove a column's filter rule and clear its selected values. */
62
+ removeFilter(key: string): void;
63
+ /** Clear all active filter rules and values. Alias for clearAllFilters, provided for symmetry with resetSearch. */
64
+ resetFilters(): void;
65
+ /** Clear search state (query + active flag). Column visibility is a persistent preference and is never reset. */
66
+ resetSearch(): void;
67
+ /** Whether the inline search input is currently open. */
68
+ readonly searchActive: Readable<boolean>;
69
+ /** Current text search query. */
70
+ readonly searchQuery: Readable<string>;
71
+ /** Set the active filter keys at once, pruning stale values. */
72
+ setActiveFilterKeys(keys: string[]): void;
73
+ /** Apply or update a multi-select filter for a column. Pass [] to clear that column's values. */
74
+ setFilter(key: string, values: string[]): void;
75
+ /** Update the operator for a specific filter rule. */
76
+ setFilterOperator(key: string, operator: FilterOperator): void;
77
+ /** Set the raw search query text directly. */
78
+ setSearchQuery(q: string): void;
79
+ /** Toggle a column's visibility. */
80
+ toggleColumnVisibility(key: string): void;
81
+ /** Toggle search open/closed. Clears the query on close. */
82
+ toggleSearch(): void;
83
+ };
84
+ /**
85
+ * Headless controls for ore-datagrid: search, filter, column visibility, and derived rows.
86
+ *
87
+ * Design notes:
88
+ * - Filter state uses two signals: activeFilterKeys (Set) drives filterDefs and
89
+ * the filter rule DOM; filterValues (Map) tracks selected values per key.
90
+ * Separating them prevents filterDefs from recomputing on value changes, which
91
+ * would otherwise destroy and recreate the combobox mid-interaction.
92
+ * - colOptions is computed lazily — only for columns with active filter rules,
93
+ * so the common case (no active filters) costs O(0) row iterations.
94
+ * - filteredRows is derived here (not in the component) so the full data pipeline
95
+ * lives in one place and can be unit-tested end-to-end.
96
+ */
97
+ export declare const createDataGridControls: (options: DataGridControlsOptions) => DataGridControlsHandle;
98
+ //# sourceMappingURL=datagrid-controls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datagrid-controls.d.ts","sourceRoot":"","sources":["../../../src/inputs/datagrid/datagrid-controls.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ import { computed as e, signal as t, watch as n } from "@vielzeug/ripple";
2
+ //#region src/inputs/datagrid/datagrid-controls.ts
3
+ var r = [
4
+ {
5
+ label: "Contains",
6
+ value: "contains"
7
+ },
8
+ {
9
+ label: "Equals",
10
+ value: "equals"
11
+ },
12
+ {
13
+ label: "Greater than",
14
+ value: "gt"
15
+ },
16
+ {
17
+ label: "Less than",
18
+ value: "lt"
19
+ }
20
+ ], i = (i) => {
21
+ let a = t(""), o = t(!1), s = t(/* @__PURE__ */ new Set()), c = t(/* @__PURE__ */ new Set()), l = t(/* @__PURE__ */ new Map()), u = e(() => {
22
+ let e = new Set((i.filterOptions.value ?? []).map((e) => e.key)), t = [...c.value].filter((t) => !e.has(t));
23
+ if (!t.length) return /* @__PURE__ */ new Map();
24
+ let n = i.rows.value, r = /* @__PURE__ */ new Map();
25
+ for (let e of t) {
26
+ let t = /* @__PURE__ */ new Set(), i = [];
27
+ for (let r of n) {
28
+ let n = r[e], a = n == null ? "" : String(n);
29
+ t.has(a) || (t.add(a), i.push({
30
+ label: a || "(empty)",
31
+ value: a
32
+ }));
33
+ }
34
+ r.set(e, i);
35
+ }
36
+ return r;
37
+ }), d = e(() => {
38
+ let e = i.filterOptions.value ?? [], t = new Set(e.map((e) => e.key)), n = [...c.value].filter((e) => !t.has(e)).map((e) => ({
39
+ key: e,
40
+ label: i.columns.value.find((t) => t.key === e)?.label ?? e,
41
+ operators: r,
42
+ options: u.value.get(e) ?? []
43
+ }));
44
+ return [...e.map((e) => ({
45
+ ...e,
46
+ operators: e.operators ?? r
47
+ })), ...n];
48
+ });
49
+ n(e(() => new Set(i.columns.value.map((e) => e.key))), (e) => {
50
+ let t = new Set([...c.value].filter((t) => e.has(t)));
51
+ t.size !== c.value.size && (c.value = t);
52
+ let n = new Map([...l.value].filter(([t]) => e.has(t)));
53
+ n.size !== l.value.size && (l.value = n);
54
+ }, { immediate: !1 });
55
+ let f = e(() => {
56
+ let e = i.rows.value, t = a.value.trim().toLowerCase();
57
+ return t ? e.filter((e) => Object.values(e).some((e) => e != null && String(e).toLowerCase().includes(t))) : e;
58
+ });
59
+ return {
60
+ activateFilterKey: (e) => {
61
+ c.value.has(e) || (c.value = /* @__PURE__ */ new Set([...c.value, e]));
62
+ },
63
+ clearAllFilters: () => {
64
+ c.value = /* @__PURE__ */ new Set(), l.value = /* @__PURE__ */ new Map();
65
+ },
66
+ filterDefs: d,
67
+ filteredRows: e(() => {
68
+ let e = f.value, t = l.value;
69
+ if (!t.size) return e;
70
+ let n = new Set(i.columns.value.map((e) => e.key));
71
+ return e.filter((e) => {
72
+ for (let [r, i] of t) {
73
+ if (!i.values.size || !n.has(r)) continue;
74
+ let t = e[r], a = t == null ? "" : String(t);
75
+ if (i.operator === "equals") {
76
+ if (!i.values.has(a)) return !1;
77
+ } else if (i.operator === "contains") {
78
+ if (![...i.values].some((e) => a.toLowerCase().includes(e.toLowerCase()))) return !1;
79
+ } else if (i.operator === "gt" || i.operator === "lt") {
80
+ let e = parseFloat(a), t = [...i.values].map(parseFloat).filter((e) => !isNaN(e));
81
+ if (!t.length) continue;
82
+ if (i.operator === "gt") {
83
+ if (!t.some((t) => e > t)) return !1;
84
+ } else if (!t.some((t) => e < t)) return !1;
85
+ }
86
+ }
87
+ return !0;
88
+ });
89
+ }),
90
+ filterValues: l,
91
+ hiddenColumns: s,
92
+ removeFilter: (e) => {
93
+ let t = new Set(c.value);
94
+ t.delete(e), c.value = t;
95
+ let n = new Map(l.value);
96
+ n.delete(e), l.value = n;
97
+ },
98
+ resetFilters: () => {
99
+ c.value = /* @__PURE__ */ new Set(), l.value = /* @__PURE__ */ new Map();
100
+ },
101
+ resetSearch: () => {
102
+ a.value = "", o.value = !1;
103
+ },
104
+ searchActive: o,
105
+ searchQuery: a,
106
+ setActiveFilterKeys: (e) => {
107
+ let t = new Set(e);
108
+ c.value = t;
109
+ let n = new Map(l.value), r = !1;
110
+ for (let e of n.keys()) t.has(e) || (n.delete(e), r = !0);
111
+ r && (l.value = n);
112
+ },
113
+ setFilter: (e, t) => {
114
+ let n = new Map(l.value);
115
+ if (t.length === 0) n.delete(e);
116
+ else {
117
+ let r = n.get(e);
118
+ n.set(e, {
119
+ operator: r?.operator ?? "contains",
120
+ values: new Set(t)
121
+ });
122
+ }
123
+ l.value = n;
124
+ },
125
+ setFilterOperator: (e, t) => {
126
+ let n = new Map(l.value), r = n.get(e);
127
+ r && (n.set(e, {
128
+ ...r,
129
+ operator: t
130
+ }), l.value = n);
131
+ },
132
+ setSearchQuery: (e) => {
133
+ a.value = e;
134
+ },
135
+ toggleColumnVisibility: (e) => {
136
+ let t = new Set(s.value);
137
+ t.has(e) ? t.delete(e) : t.add(e), s.value = t;
138
+ },
139
+ toggleSearch: () => {
140
+ o.value && (a.value = ""), o.value = !o.value;
141
+ }
142
+ };
143
+ };
144
+ //#endregion
145
+ export { i as createDataGridControls };
146
+
147
+ //# sourceMappingURL=datagrid-controls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datagrid-controls.js","names":[],"sources":["../../../src/inputs/datagrid/datagrid-controls.ts"],"sourcesContent":["import { computed, signal, type Readable, watch } from '@vielzeug/ripple';\n\nimport type { DataGridColumn } from '../../headless';\n\n// ── Types ──────────────────────────────────────────────────────────────────────\n\n/**\n * A single filter option definition — the available choices shown in the filter picker\n * for one column. When `filterOptions` is not provided on the grid, options are\n * auto-derived from the current row data.\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 /** Unique identifier for this view. */\n id: string;\n /** Display label shown in the tab. */\n label: string;\n};\n\nexport type DataGridControlsOptions = {\n /** Reactive column definitions — used to auto-derive filter options and prune stale state. */\n columns: Readable<DataGridColumn[]>;\n /**\n * Pre-defined filter option definitions per column key.\n * When set, these replace auto-derived options for matching keys.\n */\n filterOptions: Readable<FilterOption[] | undefined>;\n /** Reactive row data — searched and filtered to produce `filteredRows`. */\n rows: Readable<Record<string, unknown>[]>;\n};\n\nexport type DataGridControlsHandle = {\n /** Add a column key to the active filter set (makes its rule appear in the UI). */\n activateFilterKey(key: string): void;\n /** Clear all active filter rules and values. */\n clearAllFilters(): void;\n /**\n * Merged filter option definitions (provided + user-activated auto-derived).\n * A key's presence means its filter rule is visible in the UI.\n */\n readonly filterDefs: Readable<FilterOption[]>;\n /**\n * Rows after applying search and filter. Pass this as the `items` source\n * to the table control so the headless module owns the full data pipeline.\n */\n readonly filteredRows: Readable<Record<string, unknown>[]>;\n /** Unified filter state: column key → filter rule (operator + values). */\n readonly filterValues: Readable<Map<string, FilterRule>>;\n /** Set of column keys hidden by the user. */\n readonly hiddenColumns: Readable<Set<string>>;\n /** Remove a column's filter rule and clear its selected values. */\n removeFilter(key: string): void;\n /** Clear all active filter rules and values. Alias for clearAllFilters, provided for symmetry with resetSearch. */\n resetFilters(): void;\n /** Clear search state (query + active flag). Column visibility is a persistent preference and is never reset. */\n resetSearch(): void;\n /** Whether the inline search input is currently open. */\n readonly searchActive: Readable<boolean>;\n /** Current text search query. */\n readonly searchQuery: Readable<string>;\n /** Set the active filter keys at once, pruning stale values. */\n setActiveFilterKeys(keys: string[]): void;\n /** Apply or update a multi-select filter for a column. Pass [] to clear that column's values. */\n setFilter(key: string, values: string[]): void;\n /** Update the operator for a specific filter rule. */\n setFilterOperator(key: string, operator: FilterOperator): void;\n /** Set the raw search query text directly. */\n setSearchQuery(q: string): void;\n /** Toggle a column's visibility. */\n toggleColumnVisibility(key: string): void;\n /** Toggle search open/closed. Clears the query on close. */\n toggleSearch(): void;\n};\n\n// ── Implementation ─────────────────────────────────────────────────────────────\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 * Headless controls for ore-datagrid: search, filter, column visibility, and derived rows.\n *\n * Design notes:\n * - Filter state uses two signals: activeFilterKeys (Set) drives filterDefs and\n * the filter rule DOM; filterValues (Map) tracks selected values per key.\n * Separating them prevents filterDefs from recomputing on value changes, which\n * would otherwise destroy and recreate the combobox mid-interaction.\n * - colOptions is computed lazily — only for columns with active filter rules,\n * so the common case (no active filters) costs O(0) row iterations.\n * - filteredRows is derived here (not in the component) so the full data pipeline\n * lives in one place and can be unit-tested end-to-end.\n */\nexport const createDataGridControls = (options: DataGridControlsOptions): DataGridControlsHandle => {\n const searchQuery = signal('');\n const searchActive = signal(false);\n const hiddenColumns = signal(new Set<string>());\n\n // Two-signal filter state: activeFilterKeys tracks which rules exist (drives\n // filterDefs / DOM structure); filterValues tracks selected values per key.\n // Separating them prevents filterDefs from recomputing — and the filter rule\n // DOM from being torn down — every time a value is selected.\n const activeFilterKeys = signal(new Set<string>());\n const filterValues = signal(new Map<string, FilterRule>());\n\n // Derive options only for columns that have an active filter rule and are not\n // covered by externally-provided filterOptions. Lazy: O(activeRules × rows).\n const colOptions = computed(() => {\n const externalKeys = new Set((options.filterOptions.value ?? []).map((f) => f.key));\n const activeKeys = [...activeFilterKeys.value].filter((k) => !externalKeys.has(k));\n\n if (!activeKeys.length) return new Map<string, { label: string; value: string }[]>();\n\n const rows = options.rows.value;\n const map = new Map<string, { label: string; value: string }[]>();\n\n for (const key of activeKeys) {\n const seen = new Set<string>();\n const opts: { label: string; value: string }[] = [];\n\n for (const row of rows) {\n const v = row[key];\n const s = v == null ? '' : String(v);\n\n if (!seen.has(s)) {\n seen.add(s);\n opts.push({ label: s || '(empty)', value: s });\n }\n }\n\n map.set(key, opts);\n }\n\n return map;\n });\n\n // Merge provided filter options with auto-derived ones for active keys.\n // Depends only on activeFilterKeys (not filterValues) so adding/removing a\n // value does not tear down the filter rule DOM.\n const filterDefs = computed<FilterOption[]>(() => {\n const provided = options.filterOptions.value ?? [];\n const providedKeys = new Set(provided.map((f) => f.key));\n const derived = [...activeFilterKeys.value]\n .filter((k) => !providedKeys.has(k))\n .map((k) => {\n const col = options.columns.value.find((c) => c.key === k);\n\n return {\n key: k,\n label: col?.label ?? k,\n operators: DEFAULT_OPERATORS,\n options: colOptions.value.get(k) ?? [],\n };\n });\n\n return [...provided.map((f) => ({ ...f, operators: f.operators ?? DEFAULT_OPERATORS })), ...derived];\n });\n\n // Prune stale filter rules when columns are removed.\n watch(\n computed(() => new Set(options.columns.value.map((c) => c.key))),\n (keySet) => {\n const prunedKeys = new Set([...activeFilterKeys.value].filter((k) => keySet.has(k)));\n\n if (prunedKeys.size !== activeFilterKeys.value.size) activeFilterKeys.value = prunedKeys;\n\n const prunedValues = new Map([...filterValues.value].filter(([k]) => keySet.has(k)));\n\n if (prunedValues.size !== filterValues.value.size) filterValues.value = prunedValues;\n },\n { immediate: false },\n );\n\n // Full data pipeline: search then filter. Lives here so the headless module\n // owns the complete input→output contract and can be tested end-to-end.\n const searchedRows = computed(() => {\n const rows = options.rows.value;\n const q = searchQuery.value.trim().toLowerCase();\n\n if (!q) return rows;\n\n return rows.filter((row) => Object.values(row).some((v) => v != null && String(v).toLowerCase().includes(q)));\n });\n\n const filteredRows = computed(() => {\n const rows = searchedRows.value;\n const fv = filterValues.value;\n\n if (!fv.size) return rows;\n\n const currentKeys = new Set(options.columns.value.map((c) => c.key));\n\n return rows.filter((row) => {\n for (const [key, rule] of fv) {\n if (!rule.values.size || !currentKeys.has(key)) continue;\n\n const cell = row[key];\n const cellValue = cell == null ? '' : String(cell);\n\n if (rule.operator === 'equals') {\n if (!rule.values.has(cellValue)) return false;\n } else if (rule.operator === 'contains') {\n if (![...rule.values].some((v) => cellValue.toLowerCase().includes(v.toLowerCase()))) return false;\n } else if (rule.operator === 'gt' || rule.operator === 'lt') {\n const num = parseFloat(cellValue);\n const targets = [...rule.values].map(parseFloat).filter((n) => !isNaN(n));\n\n if (!targets.length) continue;\n\n if (rule.operator === 'gt') {\n if (!targets.some((t) => num > t)) return false;\n } else {\n if (!targets.some((t) => num < t)) return false;\n }\n }\n }\n\n return true;\n });\n });\n\n const setFilter = (key: string, values: string[]): void => {\n const next = new Map(filterValues.value);\n\n if (values.length === 0) {\n next.delete(key);\n } else {\n const existing = next.get(key);\n\n next.set(key, { operator: existing?.operator ?? 'contains', values: new Set(values) });\n }\n\n filterValues.value = next;\n };\n\n const setFilterOperator = (key: string, operator: FilterOperator): void => {\n const next = new Map(filterValues.value);\n const existing = next.get(key);\n\n if (existing) {\n next.set(key, { ...existing, operator });\n\n filterValues.value = next;\n }\n };\n\n const activateFilterKey = (key: string): void => {\n if (activeFilterKeys.value.has(key)) return;\n\n activeFilterKeys.value = new Set([...activeFilterKeys.value, key]);\n };\n\n const removeFilter = (key: string): void => {\n const nextKeys = new Set(activeFilterKeys.value);\n\n nextKeys.delete(key);\n activeFilterKeys.value = nextKeys;\n\n const nextValues = new Map(filterValues.value);\n\n nextValues.delete(key);\n filterValues.value = nextValues;\n };\n\n const clearAllFilters = (): void => {\n activeFilterKeys.value = new Set();\n filterValues.value = new Map();\n };\n\n const setSearchQuery = (q: string): void => {\n searchQuery.value = q;\n };\n\n const setActiveFilterKeys = (keys: string[]): void => {\n const nextKeys = new Set(keys);\n\n activeFilterKeys.value = nextKeys;\n\n // Prune values for keys that are no longer active.\n const nextValues = new Map(filterValues.value);\n let changed = false;\n\n for (const k of nextValues.keys()) {\n if (!nextKeys.has(k)) {\n nextValues.delete(k);\n changed = true;\n }\n }\n\n if (changed) filterValues.value = nextValues;\n };\n\n const toggleColumnVisibility = (key: string): void => {\n const next = new Set(hiddenColumns.value);\n\n if (next.has(key)) {\n next.delete(key);\n } else {\n next.add(key);\n }\n\n hiddenColumns.value = next;\n };\n\n const toggleSearch = (): void => {\n if (searchActive.value) searchQuery.value = '';\n\n searchActive.value = !searchActive.value;\n };\n\n const resetSearch = (): void => {\n searchQuery.value = '';\n searchActive.value = false;\n };\n\n const resetFilters = (): void => {\n activeFilterKeys.value = new Set();\n filterValues.value = new Map();\n };\n\n return {\n activateFilterKey,\n clearAllFilters,\n filterDefs,\n filteredRows,\n filterValues,\n hiddenColumns,\n removeFilter,\n resetFilters,\n resetSearch,\n searchActive,\n searchQuery,\n setActiveFilterKeys,\n setFilter,\n setFilterOperator,\n setSearchQuery,\n toggleColumnVisibility,\n toggleSearch,\n };\n};\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ let e=require("@vielzeug/ripple");var t=`.dg-td, .dg-th`;function n(e){return Array.from(e.querySelectorAll(`tr`)).map(e=>Array.from(e.querySelectorAll(t))).filter(e=>e.length>0)}function r(r,i){let a=(0,e.signal)({col:0,row:0}),o=e=>{let t=n(i),r=Math.max(0,Math.min(e.row,t.length-1)),o=t[r];if(!o)return;let s=Math.max(0,Math.min(e.col,o.length-1)),c=o[s];if(c){for(let e of t)for(let t of e)t.setAttribute(`tabindex`,`-1`);c.setAttribute(`tabindex`,`0`),c.focus(),a.value={col:s,row:r}}},s=e=>{let r=i.activeElement;if(!r?.matches(t))return;let a=n(i),s=a.findIndex(e=>e.includes(r));if(s===-1)return;let c=a[s].indexOf(r),l=a.length-1,u=a[s].length-1,d=s,f=c;if(e.key===`ArrowRight`)f=c+1;else if(e.key===`ArrowLeft`)f=c-1;else if(e.key===`ArrowDown`)d=s+1;else if(e.key===`ArrowUp`)d=s-1;else if(e.key===`Home`)f=0,e.ctrlKey&&(d=0);else if(e.key===`End`)f=u,e.ctrlKey&&(d=l);else return;e.preventDefault(),o({col:Math.max(0,Math.min(f,(a[Math.max(0,Math.min(d,l))]?.length??1)-1)),row:Math.max(0,Math.min(d,l))})};return r.addEventListener(`keydown`,s),{cleanup:()=>r.removeEventListener(`keydown`,s),handle:{activeCell:a,focusCell:o}}}exports.createGridNav=r;
2
+ //# sourceMappingURL=datagrid-nav.cjs.map
@@ -0,0 +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"}
@@ -0,0 +1,33 @@
1
+ import { type Readable } from '@vielzeug/ripple';
2
+ /** Position in the 2D grid model (0-based row/col indices). */
3
+ export type GridCellPos = {
4
+ col: number;
5
+ row: number;
6
+ };
7
+ /** Handle returned by createGridNav for programmatic control. */
8
+ export type GridNavHandle = {
9
+ /** Current active cell position. Reactive signal. */
10
+ readonly activeCell: Readable<GridCellPos>;
11
+ /**
12
+ * Move focus to a specific cell by position.
13
+ * Clamps to valid grid bounds; no-ops for invalid positions.
14
+ */
15
+ focusCell(pos: GridCellPos): void;
16
+ };
17
+ /**
18
+ * Keyboard navigation for the ARIA grid pattern (roving tabindex).
19
+ *
20
+ * - Arrow keys move focus between cells.
21
+ * - Home/End move to the first/last cell in the row.
22
+ * - Ctrl+Home/Ctrl+End move to the first/last cell in the grid.
23
+ * - Only the active cell has `tabindex="0"`; all others have `"-1"`.
24
+ *
25
+ * @param table - The `.dg-table` element to attach the keydown listener to.
26
+ * @param shadow - The shadow root containing the grid cells.
27
+ * @returns A handle with `focusCell` and a reactive `activeCell` signal, plus a cleanup fn.
28
+ */
29
+ export declare function createGridNav(table: HTMLElement, shadow: ShadowRoot): {
30
+ cleanup: () => void;
31
+ handle: GridNavHandle;
32
+ };
33
+ //# sourceMappingURL=datagrid-nav.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datagrid-nav.d.ts","sourceRoot":"","sources":["../../../src/inputs/datagrid/datagrid-nav.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAU,MAAM,kBAAkB,CAAC;AAIzD,+DAA+D;AAC/D,MAAM,MAAM,WAAW,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,iEAAiE;AACjE,MAAM,MAAM,aAAa,GAAG;IAC1B,qDAAqD;IACrD,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC3C;;;OAGG;IACH,SAAS,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAAC;CACnC,CAAC;AAeF;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,GAAG;IAAE,OAAO,EAAE,MAAM,IAAI,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAoEpH"}
@@ -0,0 +1,51 @@
1
+ import { signal as e } from "@vielzeug/ripple";
2
+ //#region src/inputs/datagrid/datagrid-nav.ts
3
+ var t = ".dg-td, .dg-th";
4
+ function n(e) {
5
+ return Array.from(e.querySelectorAll("tr")).map((e) => Array.from(e.querySelectorAll(t))).filter((e) => e.length > 0);
6
+ }
7
+ function r(r, i) {
8
+ let a = e({
9
+ col: 0,
10
+ row: 0
11
+ }), o = (e) => {
12
+ let t = n(i), r = Math.max(0, Math.min(e.row, t.length - 1)), o = t[r];
13
+ if (!o) return;
14
+ let s = Math.max(0, Math.min(e.col, o.length - 1)), c = o[s];
15
+ if (c) {
16
+ for (let e of t) for (let t of e) t.setAttribute("tabindex", "-1");
17
+ c.setAttribute("tabindex", "0"), c.focus(), a.value = {
18
+ col: s,
19
+ row: r
20
+ };
21
+ }
22
+ }, s = (e) => {
23
+ let r = i.activeElement;
24
+ if (!r?.matches(t)) return;
25
+ let a = n(i), s = a.findIndex((e) => e.includes(r));
26
+ if (s === -1) return;
27
+ let c = a[s].indexOf(r), l = a.length - 1, u = a[s].length - 1, d = s, f = c;
28
+ if (e.key === "ArrowRight") f = c + 1;
29
+ else if (e.key === "ArrowLeft") f = c - 1;
30
+ else if (e.key === "ArrowDown") d = s + 1;
31
+ else if (e.key === "ArrowUp") d = s - 1;
32
+ else if (e.key === "Home") f = 0, e.ctrlKey && (d = 0);
33
+ else if (e.key === "End") f = u, e.ctrlKey && (d = l);
34
+ else return;
35
+ e.preventDefault(), o({
36
+ col: Math.max(0, Math.min(f, (a[Math.max(0, Math.min(d, l))]?.length ?? 1) - 1)),
37
+ row: Math.max(0, Math.min(d, l))
38
+ });
39
+ };
40
+ return r.addEventListener("keydown", s), {
41
+ cleanup: () => r.removeEventListener("keydown", s),
42
+ handle: {
43
+ activeCell: a,
44
+ focusCell: o
45
+ }
46
+ };
47
+ }
48
+ //#endregion
49
+ export { r as createGridNav };
50
+
51
+ //# sourceMappingURL=datagrid-nav.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datagrid-nav.js","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":";;AAoBA,IAAM,IAAgB;AAGtB,SAAS,EAAQ,GAAqC;CACpD,OAAO,MAAM,KAAK,EAAO,iBAA8B,IAAI,CAAC,CAAC,CAC1D,KAAK,MAAO,MAAM,KAAK,EAAG,iBAA8B,CAAa,CAAC,CAAC,CAAC,CACxE,QAAQ,MAAQ,EAAI,SAAS,CAAC;AACnC;AAgBA,SAAgB,EAAc,GAAoB,GAAoE;CACpH,IAAM,IAAa,EAAoB;EAAE,KAAK;EAAG,KAAK;CAAE,CAAC,GAEnD,KAAa,MAA2B;EAC5C,IAAM,IAAO,EAAQ,CAAM,GACrB,IAAS,KAAK,IAAI,GAAG,KAAK,IAAI,EAAI,KAAK,EAAK,SAAS,CAAC,CAAC,GACvD,IAAM,EAAK;EAEjB,IAAI,CAAC,GAAK;EAEV,IAAM,IAAS,KAAK,IAAI,GAAG,KAAK,IAAI,EAAI,KAAK,EAAI,SAAS,CAAC,CAAC,GACtD,IAAS,EAAI;EAEd,OAEL;QAAK,IAAM,KAAK,GACd,KAAK,IAAM,KAAQ,GAAG,EAAK,aAAa,YAAY,IAAI;GAK1D,AAFA,EAAO,aAAa,YAAY,GAAG,GACnC,EAAO,MAAM,GACb,EAAW,QAAQ;IAAE,KAAK;IAAQ,KAAK;GAAO;EALY;CAM5D,GAEM,KAAe,MAA2B;EAC9C,IAAM,IAAS,EAAO;EAEtB,IAAI,CAAC,GAAQ,QAAQ,CAAa,GAAG;EAErC,IAAM,IAAO,EAAQ,CAAM,GACrB,IAAS,EAAK,WAAW,MAAQ,EAAI,SAAS,CAAM,CAAC;EAE3D,IAAI,MAAW,IAAI;EAEnB,IAAM,IAAS,EAAK,EAAO,CAAC,QAAQ,CAAM,GACpC,IAAU,EAAK,SAAS,GACxB,IAAU,EAAK,EAAO,CAAC,SAAS,GAElC,IAAU,GACV,IAAU;EAEd,IAAI,EAAE,QAAQ,cAAc,IAAU,IAAS;OAC1C,IAAI,EAAE,QAAQ,aAAa,IAAU,IAAS;OAC9C,IAAI,EAAE,QAAQ,aAAa,IAAU,IAAS;OAC9C,IAAI,EAAE,QAAQ,WAAW,IAAU,IAAS;OAC5C,IAAI,EAAE,QAAQ,QAGjB,AAFA,IAAU,GAEN,EAAE,YAAS,IAAU;OACpB,IAAI,EAAE,QAAQ,OAGnB,AAFA,IAAU,GAEN,EAAE,YAAS,IAAU;OACpB;EAGP,AADA,EAAE,eAAe,GACjB,EAAU;GACR,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,IAAU,EAAK,KAAK,IAAI,GAAG,KAAK,IAAI,GAAS,CAAO,CAAC,EAAE,EAAE,UAAU,KAAK,CAAC,CAAC;GACpG,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,GAAS,CAAO,CAAC;EAC7C,CAAC;CACH;CAIA,OAFA,EAAM,iBAAiB,WAAW,CAAW,GAEtC;EACL,eAAe,EAAM,oBAAoB,WAAW,CAAW;EAC/D,QAAQ;GAAE;GAAY;EAAU;CAClC;AACF"}