@vielzeug/refine 1.8.0 → 2.0.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 (809) hide show
  1. package/README.md +5 -12
  2. package/dist/_dev.cjs +1 -1
  3. package/dist/_dev.cjs.map +1 -1
  4. package/dist/_dev.js +2 -5
  5. package/dist/_dev.js.map +1 -1
  6. package/dist/_virtual/_rolldown/runtime.cjs +1 -1
  7. package/dist/accordion-item.cjs +26 -24
  8. package/dist/accordion-item.cjs.map +1 -1
  9. package/dist/accordion-item.js +53 -51
  10. package/dist/accordion-item.js.map +1 -1
  11. package/dist/accordion.cjs +3 -1
  12. package/dist/accordion.cjs.map +1 -1
  13. package/dist/accordion.js +5 -3
  14. package/dist/accordion.js.map +1 -1
  15. package/dist/alert.cjs +1 -1
  16. package/dist/alert.cjs.map +1 -1
  17. package/dist/alert.js +1 -1
  18. package/dist/alert.js.map +1 -1
  19. package/dist/async.cjs +4 -2
  20. package/dist/async.cjs.map +1 -1
  21. package/dist/async.js +4 -2
  22. package/dist/async.js.map +1 -1
  23. package/dist/avatar-group.cjs +7 -0
  24. package/dist/avatar-group.cjs.map +1 -0
  25. package/dist/avatar-group.js +34 -0
  26. package/dist/avatar-group.js.map +1 -0
  27. package/dist/avatar.cjs +21 -16
  28. package/dist/avatar.cjs.map +1 -1
  29. package/dist/avatar.js +38 -54
  30. package/dist/avatar.js.map +1 -1
  31. package/dist/badge.cjs +4 -2
  32. package/dist/badge.cjs.map +1 -1
  33. package/dist/badge.js +6 -4
  34. package/dist/badge.js.map +1 -1
  35. package/dist/box.cjs +3 -1
  36. package/dist/box.cjs.map +1 -1
  37. package/dist/box.js +24 -18
  38. package/dist/box.js.map +1 -1
  39. package/dist/breadcrumb.cjs +4 -4
  40. package/dist/breadcrumb.cjs.map +1 -1
  41. package/dist/breadcrumb.js +4 -4
  42. package/dist/breadcrumb.js.map +1 -1
  43. package/dist/button-group.cjs +3 -3
  44. package/dist/button-group.cjs.map +1 -1
  45. package/dist/button-group.js +18 -16
  46. package/dist/button-group.js.map +1 -1
  47. package/dist/button.cjs +16 -12
  48. package/dist/button.cjs.map +1 -1
  49. package/dist/button.js +31 -28
  50. package/dist/button.js.map +1 -1
  51. package/dist/calendar.cjs +94 -69
  52. package/dist/calendar.cjs.map +1 -1
  53. package/dist/calendar.js +131 -98
  54. package/dist/calendar.js.map +1 -1
  55. package/dist/card.cjs +7 -7
  56. package/dist/card.cjs.map +1 -1
  57. package/dist/card.js +53 -49
  58. package/dist/card.js.map +1 -1
  59. package/dist/carousel.cjs +65 -57
  60. package/dist/carousel.cjs.map +1 -1
  61. package/dist/carousel.js +157 -201
  62. package/dist/carousel.js.map +1 -1
  63. package/dist/chat-message.cjs +21 -19
  64. package/dist/chat-message.cjs.map +1 -1
  65. package/dist/chat-message.js +18 -15
  66. package/dist/chat-message.js.map +1 -1
  67. package/dist/checkbox-group.cjs +12 -10
  68. package/dist/checkbox-group.cjs.map +1 -1
  69. package/dist/checkbox-group.js +75 -76
  70. package/dist/checkbox-group.js.map +1 -1
  71. package/dist/checkbox.cjs +4 -4
  72. package/dist/checkbox.cjs.map +1 -1
  73. package/dist/checkbox.js +55 -55
  74. package/dist/checkbox.js.map +1 -1
  75. package/dist/chip.cjs +22 -20
  76. package/dist/chip.cjs.map +1 -1
  77. package/dist/chip.js +15 -12
  78. package/dist/chip.js.map +1 -1
  79. package/dist/code-window.cjs +8 -2
  80. package/dist/code-window.cjs.map +1 -1
  81. package/dist/code-window.js +8 -2
  82. package/dist/code-window.js.map +1 -1
  83. package/dist/combobox.cjs +63 -58
  84. package/dist/combobox.cjs.map +1 -1
  85. package/dist/combobox.js +199 -197
  86. package/dist/combobox.js.map +1 -1
  87. package/dist/command-palette.cjs +49 -29
  88. package/dist/command-palette.cjs.map +1 -1
  89. package/dist/command-palette.js +150 -118
  90. package/dist/command-palette.js.map +1 -1
  91. package/dist/content/avatar/avatar-group.d.ts +33 -0
  92. package/dist/content/avatar/avatar-group.d.ts.map +1 -0
  93. package/dist/content/avatar/avatar.d.ts +0 -32
  94. package/dist/content/avatar/avatar.d.ts.map +1 -1
  95. package/dist/content/card/card.css.cjs +1 -1
  96. package/dist/content/card/card.css.cjs.map +1 -1
  97. package/dist/content/card/card.css.js +1 -1
  98. package/dist/content/card/card.css.js.map +1 -1
  99. package/dist/content/card/card.d.ts.map +1 -1
  100. package/dist/content/carousel/carousel-slide.cjs +3 -1
  101. package/dist/content/carousel/carousel-slide.cjs.map +1 -1
  102. package/dist/content/carousel/carousel-slide.css.cjs +1 -1
  103. package/dist/content/carousel/carousel-slide.css.cjs.map +1 -1
  104. package/dist/content/carousel/carousel-slide.css.js +1 -1
  105. package/dist/content/carousel/carousel-slide.css.js.map +1 -1
  106. package/dist/content/carousel/carousel-slide.js +3 -1
  107. package/dist/content/carousel/carousel-slide.js.map +1 -1
  108. package/dist/content/carousel/carousel.css.cjs +1 -1
  109. package/dist/content/carousel/carousel.css.cjs.map +1 -1
  110. package/dist/content/carousel/carousel.css.js +1 -1
  111. package/dist/content/carousel/carousel.css.js.map +1 -1
  112. package/dist/content/carousel/carousel.d.ts +5 -19
  113. package/dist/content/carousel/carousel.d.ts.map +1 -1
  114. package/dist/content/chat-message/chat-message.d.ts.map +1 -1
  115. package/dist/content/index.d.ts +10 -2
  116. package/dist/content/index.d.ts.map +1 -1
  117. package/dist/content/list/_list-item-reveal.cjs +1 -1
  118. package/dist/content/list/_list-item-reveal.cjs.map +1 -1
  119. package/dist/content/list/_list-item-reveal.d.ts +2 -2
  120. package/dist/content/list/_list-item-reveal.d.ts.map +1 -1
  121. package/dist/content/list/_list-item-reveal.js +2 -2
  122. package/dist/content/list/_list-item-reveal.js.map +1 -1
  123. package/dist/content/list/list.d.ts.map +1 -1
  124. package/dist/content/marquee/index.d.ts +2 -0
  125. package/dist/content/marquee/index.d.ts.map +1 -0
  126. package/dist/content/marquee/marquee.css.cjs +2 -0
  127. package/dist/content/marquee/marquee.css.cjs.map +1 -0
  128. package/dist/content/marquee/marquee.css.js +6 -0
  129. package/dist/content/marquee/marquee.css.js.map +1 -0
  130. package/dist/content/marquee/marquee.d.ts +44 -0
  131. package/dist/content/marquee/marquee.d.ts.map +1 -0
  132. package/dist/content/stepper/_is-step-navigable.cjs +2 -0
  133. package/dist/content/stepper/_is-step-navigable.cjs.map +1 -0
  134. package/dist/content/stepper/_is-step-navigable.d.ts +14 -0
  135. package/dist/content/stepper/_is-step-navigable.d.ts.map +1 -0
  136. package/dist/content/stepper/_is-step-navigable.js +8 -0
  137. package/dist/content/stepper/_is-step-navigable.js.map +1 -0
  138. package/dist/content/stepper/step.css.cjs +2 -0
  139. package/dist/content/stepper/step.css.cjs.map +1 -0
  140. package/dist/content/stepper/step.css.js +6 -0
  141. package/dist/content/stepper/step.css.js.map +1 -0
  142. package/dist/content/stepper/step.d.ts +63 -0
  143. package/dist/content/stepper/step.d.ts.map +1 -0
  144. package/dist/content/stepper/stepper.css.cjs +2 -0
  145. package/dist/content/stepper/stepper.css.cjs.map +1 -0
  146. package/dist/content/stepper/stepper.css.js +6 -0
  147. package/dist/content/stepper/stepper.css.js.map +1 -0
  148. package/dist/content/stepper/stepper.d.ts +88 -0
  149. package/dist/content/stepper/stepper.d.ts.map +1 -0
  150. package/dist/copy-command.cjs +9 -3
  151. package/dist/copy-command.cjs.map +1 -1
  152. package/dist/copy-command.js +9 -3
  153. package/dist/copy-command.js.map +1 -1
  154. package/dist/{headless → core}/_internal.d.ts +3 -5
  155. package/dist/core/_internal.d.ts.map +1 -0
  156. package/dist/core/announcer.cjs.map +1 -0
  157. package/dist/core/announcer.d.ts.map +1 -0
  158. package/dist/{headless → core}/announcer.js +1 -1
  159. package/dist/core/announcer.js.map +1 -0
  160. package/dist/core/aria-reflection.cjs.map +1 -0
  161. package/dist/core/aria-reflection.d.ts.map +1 -0
  162. package/dist/{headless → core}/aria-reflection.js +1 -1
  163. package/dist/core/aria-reflection.js.map +1 -0
  164. package/dist/core/auto-resize.cjs.map +1 -0
  165. package/dist/core/auto-resize.d.ts.map +1 -0
  166. package/dist/{headless → core}/auto-resize.js +1 -1
  167. package/dist/core/auto-resize.js.map +1 -0
  168. package/dist/core/checkable.cjs.map +1 -0
  169. package/dist/core/checkable.d.ts.map +1 -0
  170. package/dist/{headless → core}/checkable.js +1 -1
  171. package/dist/core/checkable.js.map +1 -0
  172. package/dist/core/choice-field.cjs +2 -0
  173. package/dist/core/choice-field.cjs.map +1 -0
  174. package/dist/core/choice-field.d.ts.map +1 -0
  175. package/dist/{headless → core}/choice-field.js +3 -2
  176. package/dist/core/choice-field.js.map +1 -0
  177. package/dist/core/composer.cjs.map +1 -0
  178. package/dist/core/composer.d.ts.map +1 -0
  179. package/dist/{headless → core}/composer.js +1 -1
  180. package/dist/core/composer.js.map +1 -0
  181. package/dist/{headless → core}/date-picker.cjs +1 -1
  182. package/dist/core/date-picker.cjs.map +1 -0
  183. package/dist/core/date-picker.d.ts.map +1 -0
  184. package/dist/{headless → core}/date-picker.js +3 -3
  185. package/dist/core/date-picker.js.map +1 -0
  186. package/dist/core/direction.cjs.map +1 -0
  187. package/dist/core/direction.d.ts.map +1 -0
  188. package/dist/{headless → core}/direction.js +1 -1
  189. package/dist/core/direction.js.map +1 -0
  190. package/dist/core/field-base.cjs +2 -0
  191. package/dist/core/field-base.cjs.map +1 -0
  192. package/dist/{headless → core}/field-base.d.ts +3 -3
  193. package/dist/core/field-base.d.ts.map +1 -0
  194. package/dist/core/field-base.js +66 -0
  195. package/dist/core/field-base.js.map +1 -0
  196. package/dist/core/focus.cjs.map +1 -0
  197. package/dist/core/focus.d.ts.map +1 -0
  198. package/dist/{headless → core}/focus.js +1 -1
  199. package/dist/core/focus.js.map +1 -0
  200. package/dist/{headless → core}/index.d.ts +7 -6
  201. package/dist/core/index.d.ts.map +1 -0
  202. package/dist/{headless → core}/keyboard.cjs +1 -1
  203. package/dist/core/keyboard.cjs.map +1 -0
  204. package/dist/core/keyboard.d.ts.map +1 -0
  205. package/dist/{headless → core}/keyboard.js +2 -2
  206. package/dist/core/keyboard.js.map +1 -0
  207. package/dist/core/light-dom.cjs.map +1 -0
  208. package/dist/core/light-dom.d.ts.map +1 -0
  209. package/dist/{headless → core}/light-dom.js +1 -1
  210. package/dist/core/light-dom.js.map +1 -0
  211. package/dist/core/nav.cjs.map +1 -0
  212. package/dist/core/nav.d.ts.map +1 -0
  213. package/dist/{headless → core}/nav.js +1 -1
  214. package/dist/core/nav.js.map +1 -0
  215. package/dist/core/numbers.cjs.map +1 -0
  216. package/dist/core/numbers.d.ts.map +1 -0
  217. package/dist/{headless → core}/numbers.js +1 -1
  218. package/dist/core/numbers.js.map +1 -0
  219. package/dist/core/option-list.cjs +2 -0
  220. package/dist/core/option-list.cjs.map +1 -0
  221. package/dist/core/option-list.d.ts +49 -0
  222. package/dist/core/option-list.d.ts.map +1 -0
  223. package/dist/core/option-list.js +65 -0
  224. package/dist/core/option-list.js.map +1 -0
  225. package/dist/core/ore.cjs.map +1 -0
  226. package/dist/{headless → core}/ore.d.ts +2 -2
  227. package/dist/core/ore.d.ts.map +1 -0
  228. package/dist/{headless → core}/ore.js +1 -1
  229. package/dist/core/ore.js.map +1 -0
  230. package/dist/core/overlay.cjs +2 -0
  231. package/dist/core/overlay.cjs.map +1 -0
  232. package/dist/core/overlay.d.ts +41 -0
  233. package/dist/core/overlay.d.ts.map +1 -0
  234. package/dist/core/overlay.js +17 -0
  235. package/dist/core/overlay.js.map +1 -0
  236. package/dist/core/paginated-list.d.ts.map +1 -0
  237. package/dist/core/parse.cjs.map +1 -0
  238. package/dist/core/parse.d.ts.map +1 -0
  239. package/dist/{headless → core}/parse.js +1 -1
  240. package/dist/core/parse.js.map +1 -0
  241. package/dist/core/positioner.cjs +2 -0
  242. package/dist/core/positioner.cjs.map +1 -0
  243. package/dist/core/positioner.d.ts.map +1 -0
  244. package/dist/{headless → core}/positioner.js +7 -7
  245. package/dist/core/positioner.js.map +1 -0
  246. package/dist/core/ref-callback.cjs +2 -0
  247. package/dist/core/ref-callback.cjs.map +1 -0
  248. package/dist/core/ref-callback.d.ts.map +1 -0
  249. package/dist/{headless → core}/ref-callback.js +2 -2
  250. package/dist/core/ref-callback.js.map +1 -0
  251. package/dist/core/signals.cjs +2 -0
  252. package/dist/core/signals.cjs.map +1 -0
  253. package/dist/core/signals.d.ts.map +1 -0
  254. package/dist/{headless → core}/signals.js +3 -2
  255. package/dist/core/signals.js.map +1 -0
  256. package/dist/core/slider.cjs +2 -0
  257. package/dist/core/slider.cjs.map +1 -0
  258. package/dist/core/slider.d.ts.map +1 -0
  259. package/dist/{headless → core}/slider.js +3 -3
  260. package/dist/{headless/slider.cjs.map → core/slider.js.map} +1 -1
  261. package/dist/core/spinner.cjs +2 -0
  262. package/dist/core/spinner.cjs.map +1 -0
  263. package/dist/core/spinner.d.ts.map +1 -0
  264. package/dist/{headless → core}/spinner.js +3 -3
  265. package/dist/{headless/spinner.cjs.map → core/spinner.js.map} +1 -1
  266. package/dist/core/swipe.cjs.map +1 -0
  267. package/dist/core/swipe.d.ts.map +1 -0
  268. package/dist/{headless → core}/swipe.js +1 -1
  269. package/dist/core/swipe.js.map +1 -0
  270. package/dist/core/text-field.cjs.map +1 -0
  271. package/dist/core/text-field.d.ts.map +1 -0
  272. package/dist/{headless → core}/text-field.js +1 -1
  273. package/dist/core/text-field.js.map +1 -0
  274. package/dist/core/typeahead.cjs.map +1 -0
  275. package/dist/core/typeahead.d.ts.map +1 -0
  276. package/dist/{headless → core}/typeahead.js +1 -1
  277. package/dist/core/typeahead.js.map +1 -0
  278. package/dist/custom-elements.json +6076 -5592
  279. package/dist/datagrid.cjs +320 -271
  280. package/dist/datagrid.cjs.map +1 -1
  281. package/dist/datagrid.js +483 -429
  282. package/dist/datagrid.js.map +1 -1
  283. package/dist/date-picker.cjs +77 -62
  284. package/dist/date-picker.cjs.map +1 -1
  285. package/dist/date-picker.js +169 -146
  286. package/dist/date-picker.js.map +1 -1
  287. package/dist/dialog.cjs +3 -3
  288. package/dist/dialog.cjs.map +1 -1
  289. package/dist/dialog.js +18 -7
  290. package/dist/dialog.js.map +1 -1
  291. package/dist/disclosure/tabs/tabs.d.ts.map +1 -1
  292. package/dist/drawer.cjs +5 -5
  293. package/dist/drawer.cjs.map +1 -1
  294. package/dist/drawer.js +52 -47
  295. package/dist/drawer.js.map +1 -1
  296. package/dist/errors.cjs.map +1 -1
  297. package/dist/errors.js.map +1 -1
  298. package/dist/feedback/chip/chip.d.ts.map +1 -1
  299. package/dist/feedback/skeleton/skeleton.d.ts.map +1 -1
  300. package/dist/feedback/toast/index.d.ts +1 -1
  301. package/dist/feedback/toast/index.d.ts.map +1 -1
  302. package/dist/feedback/toast/toast.d.ts +16 -68
  303. package/dist/feedback/toast/toast.d.ts.map +1 -1
  304. package/dist/feedback/typing-indicator/typing-indicator.d.ts +1 -1
  305. package/dist/file-input.cjs +111 -78
  306. package/dist/file-input.cjs.map +1 -1
  307. package/dist/file-input.js +220 -183
  308. package/dist/file-input.js.map +1 -1
  309. package/dist/grid-item.cjs +3 -1
  310. package/dist/grid-item.cjs.map +1 -1
  311. package/dist/grid-item.js +3 -1
  312. package/dist/grid-item.js.map +1 -1
  313. package/dist/grid.cjs +3 -1
  314. package/dist/grid.cjs.map +1 -1
  315. package/dist/grid.js +6 -5
  316. package/dist/grid.js.map +1 -1
  317. package/dist/icon.cjs +5 -1
  318. package/dist/icon.cjs.map +1 -1
  319. package/dist/icon.js +50 -46
  320. package/dist/icon.js.map +1 -1
  321. package/dist/index.cjs +1 -1
  322. package/dist/index.d.ts +7 -8
  323. package/dist/index.d.ts.map +1 -1
  324. package/dist/index.js +2 -67
  325. package/dist/input.cjs +44 -40
  326. package/dist/input.cjs.map +1 -1
  327. package/dist/input.js +132 -130
  328. package/dist/input.js.map +1 -1
  329. package/dist/inputs/button-group/button-group.css.cjs +1 -1
  330. package/dist/inputs/button-group/button-group.css.cjs.map +1 -1
  331. package/dist/inputs/button-group/button-group.css.js +1 -1
  332. package/dist/inputs/button-group/button-group.css.js.map +1 -1
  333. package/dist/inputs/button-group/button-group.d.ts +6 -3
  334. package/dist/inputs/button-group/button-group.d.ts.map +1 -1
  335. package/dist/inputs/checkbox/checkbox.d.ts +6 -5
  336. package/dist/inputs/checkbox/checkbox.d.ts.map +1 -1
  337. package/dist/inputs/checkbox-group/checkbox-group.d.ts +1 -1
  338. package/dist/inputs/checkbox-group/checkbox-group.d.ts.map +1 -1
  339. package/dist/inputs/combobox/combobox.d.ts +4 -2
  340. package/dist/inputs/combobox/combobox.d.ts.map +1 -1
  341. package/dist/inputs/combobox/combobox.types.d.ts +5 -7
  342. package/dist/inputs/combobox/combobox.types.d.ts.map +1 -1
  343. package/dist/inputs/datagrid/datagrid-column.cjs +1 -1
  344. package/dist/inputs/datagrid/datagrid-column.cjs.map +1 -1
  345. package/dist/inputs/datagrid/datagrid-column.d.ts +1 -1
  346. package/dist/inputs/datagrid/datagrid-column.d.ts.map +1 -1
  347. package/dist/inputs/datagrid/datagrid-column.js +5 -5
  348. package/dist/inputs/datagrid/datagrid-column.js.map +1 -1
  349. package/dist/inputs/datagrid/datagrid-model.cjs +2 -0
  350. package/dist/inputs/datagrid/datagrid-model.cjs.map +1 -0
  351. package/dist/inputs/datagrid/datagrid-model.d.ts +101 -0
  352. package/dist/inputs/datagrid/datagrid-model.d.ts.map +1 -0
  353. package/dist/inputs/datagrid/datagrid-model.js +202 -0
  354. package/dist/inputs/datagrid/datagrid-model.js.map +1 -0
  355. package/dist/inputs/datagrid/datagrid-nav.cjs.map +1 -1
  356. package/dist/inputs/datagrid/datagrid.d.ts +44 -45
  357. package/dist/inputs/datagrid/datagrid.d.ts.map +1 -1
  358. package/dist/inputs/date-picker/date-picker.d.ts +4 -4
  359. package/dist/inputs/date-picker/date-picker.d.ts.map +1 -1
  360. package/dist/inputs/file-input/file-input-upload.cjs +1 -1
  361. package/dist/inputs/file-input/file-input-upload.cjs.map +1 -1
  362. package/dist/inputs/file-input/file-input-upload.d.ts.map +1 -1
  363. package/dist/inputs/file-input/file-input-upload.js +6 -3
  364. package/dist/inputs/file-input/file-input-upload.js.map +1 -1
  365. package/dist/inputs/file-input/file-input.d.ts.map +1 -1
  366. package/dist/inputs/index.d.ts +0 -4
  367. package/dist/inputs/index.d.ts.map +1 -1
  368. package/dist/inputs/input/input.d.ts +4 -10
  369. package/dist/inputs/input/input.d.ts.map +1 -1
  370. package/dist/inputs/message-composer/message-composer.d.ts +6 -10
  371. package/dist/inputs/message-composer/message-composer.d.ts.map +1 -1
  372. package/dist/inputs/number-input/number-input.d.ts +4 -10
  373. package/dist/inputs/number-input/number-input.d.ts.map +1 -1
  374. package/dist/inputs/otp-input/otp-input.d.ts +4 -6
  375. package/dist/inputs/otp-input/otp-input.d.ts.map +1 -1
  376. package/dist/inputs/radio/radio.d.ts +4 -3
  377. package/dist/inputs/radio/radio.d.ts.map +1 -1
  378. package/dist/inputs/radio-group/radio-group.d.ts +1 -1
  379. package/dist/inputs/radio-group/radio-group.d.ts.map +1 -1
  380. package/dist/inputs/rating/rating.d.ts +4 -5
  381. package/dist/inputs/rating/rating.d.ts.map +1 -1
  382. package/dist/inputs/select/select.d.ts +7 -9
  383. package/dist/inputs/select/select.d.ts.map +1 -1
  384. package/dist/inputs/shared/field-binding.cjs.map +1 -1
  385. package/dist/inputs/shared/field-binding.d.ts +1 -1
  386. package/dist/inputs/shared/field-binding.js.map +1 -1
  387. package/dist/inputs/shared/index.d.ts +0 -1
  388. package/dist/inputs/shared/index.d.ts.map +1 -1
  389. package/dist/inputs/shared/native-field-event.cjs +2 -0
  390. package/dist/inputs/shared/native-field-event.cjs.map +1 -0
  391. package/dist/inputs/shared/native-field-event.d.ts +6 -0
  392. package/dist/inputs/shared/native-field-event.d.ts.map +1 -0
  393. package/dist/inputs/shared/native-field-event.js +29 -0
  394. package/dist/inputs/shared/native-field-event.js.map +1 -0
  395. package/dist/inputs/shared/templates.cjs +18 -12
  396. package/dist/inputs/shared/templates.cjs.map +1 -1
  397. package/dist/inputs/shared/templates.d.ts +1 -1
  398. package/dist/inputs/shared/templates.d.ts.map +1 -1
  399. package/dist/inputs/shared/templates.js +19 -13
  400. package/dist/inputs/shared/templates.js.map +1 -1
  401. package/dist/inputs/slider/slider.css.cjs +1 -1
  402. package/dist/inputs/slider/slider.css.cjs.map +1 -1
  403. package/dist/inputs/slider/slider.css.js +1 -1
  404. package/dist/inputs/slider/slider.css.js.map +1 -1
  405. package/dist/inputs/slider/slider.d.ts +7 -10
  406. package/dist/inputs/slider/slider.d.ts.map +1 -1
  407. package/dist/inputs/switch/switch.d.ts +4 -3
  408. package/dist/inputs/switch/switch.d.ts.map +1 -1
  409. package/dist/inputs/textarea/textarea.d.ts +4 -10
  410. package/dist/inputs/textarea/textarea.d.ts.map +1 -1
  411. package/dist/inputs/time-picker/time-picker.d.ts +4 -4
  412. package/dist/inputs/time-picker/time-picker.d.ts.map +1 -1
  413. package/dist/layout/box/box.d.ts.map +1 -1
  414. package/dist/layout/navbar/navbar.css.cjs +1 -1
  415. package/dist/layout/navbar/navbar.css.cjs.map +1 -1
  416. package/dist/layout/navbar/navbar.css.js +1 -1
  417. package/dist/layout/navbar/navbar.css.js.map +1 -1
  418. package/dist/layout/navbar/navbar.d.ts +10 -0
  419. package/dist/layout/navbar/navbar.d.ts.map +1 -1
  420. package/dist/layout/sidebar/sidebar-item.css.cjs +1 -1
  421. package/dist/layout/sidebar/sidebar-item.css.cjs.map +1 -1
  422. package/dist/layout/sidebar/sidebar-item.css.js +1 -1
  423. package/dist/layout/sidebar/sidebar-item.css.js.map +1 -1
  424. package/dist/layout/sidebar/sidebar.css.cjs +1 -1
  425. package/dist/layout/sidebar/sidebar.css.cjs.map +1 -1
  426. package/dist/layout/sidebar/sidebar.css.js +1 -1
  427. package/dist/layout/sidebar/sidebar.css.js.map +1 -1
  428. package/dist/layout/sidebar/sidebar.d.ts.map +1 -1
  429. package/dist/list-item.cjs +2 -2
  430. package/dist/list-item.cjs.map +1 -1
  431. package/dist/list-item.js +4 -4
  432. package/dist/list-item.js.map +1 -1
  433. package/dist/list.cjs +3 -1
  434. package/dist/list.cjs.map +1 -1
  435. package/dist/list.js +28 -25
  436. package/dist/list.js.map +1 -1
  437. package/dist/marquee.cjs +32 -0
  438. package/dist/marquee.cjs.map +1 -0
  439. package/dist/marquee.js +93 -0
  440. package/dist/marquee.js.map +1 -0
  441. package/dist/menu.cjs +7 -7
  442. package/dist/menu.cjs.map +1 -1
  443. package/dist/menu.js +135 -103
  444. package/dist/menu.js.map +1 -1
  445. package/dist/message-composer.cjs +33 -31
  446. package/dist/message-composer.cjs.map +1 -1
  447. package/dist/message-composer.js +123 -123
  448. package/dist/message-composer.js.map +1 -1
  449. package/dist/navbar.cjs +17 -15
  450. package/dist/navbar.cjs.map +1 -1
  451. package/dist/navbar.js +108 -89
  452. package/dist/navbar.js.map +1 -1
  453. package/dist/number-input.cjs +19 -19
  454. package/dist/number-input.cjs.map +1 -1
  455. package/dist/number-input.js +94 -97
  456. package/dist/number-input.js.map +1 -1
  457. package/dist/otp-input.cjs +15 -13
  458. package/dist/otp-input.cjs.map +1 -1
  459. package/dist/otp-input.js +83 -82
  460. package/dist/otp-input.js.map +1 -1
  461. package/dist/overlay/command-palette/command-palette.d.ts +2 -2
  462. package/dist/overlay/command-palette/command-palette.d.ts.map +1 -1
  463. package/dist/overlay/command-palette/command-palette.types.d.ts +4 -5
  464. package/dist/overlay/command-palette/command-palette.types.d.ts.map +1 -1
  465. package/dist/overlay/dialog/dialog.d.ts +7 -6
  466. package/dist/overlay/dialog/dialog.d.ts.map +1 -1
  467. package/dist/overlay/drawer/drawer.d.ts +7 -10
  468. package/dist/overlay/drawer/drawer.d.ts.map +1 -1
  469. package/dist/overlay/index.d.ts +1 -1
  470. package/dist/overlay/index.d.ts.map +1 -1
  471. package/dist/overlay/menu/menu.d.ts +9 -7
  472. package/dist/overlay/menu/menu.d.ts.map +1 -1
  473. package/dist/overlay/popover/popover.d.ts +6 -11
  474. package/dist/overlay/popover/popover.d.ts.map +1 -1
  475. package/dist/overlay/shared/await-exit.cjs +1 -1
  476. package/dist/overlay/shared/await-exit.cjs.map +1 -1
  477. package/dist/overlay/shared/await-exit.js +1 -1
  478. package/dist/overlay/shared/await-exit.js.map +1 -1
  479. package/dist/overlay/shared/use-dialog.cjs +1 -1
  480. package/dist/overlay/shared/use-dialog.cjs.map +1 -1
  481. package/dist/overlay/shared/use-dialog.d.ts +13 -3
  482. package/dist/overlay/shared/use-dialog.d.ts.map +1 -1
  483. package/dist/overlay/shared/use-dialog.js +80 -72
  484. package/dist/overlay/shared/use-dialog.js.map +1 -1
  485. package/dist/overlay/shared/use-floating-trigger.cjs +1 -1
  486. package/dist/overlay/shared/use-floating-trigger.cjs.map +1 -1
  487. package/dist/overlay/shared/use-floating-trigger.d.ts +3 -1
  488. package/dist/overlay/shared/use-floating-trigger.d.ts.map +1 -1
  489. package/dist/overlay/shared/use-floating-trigger.js +64 -70
  490. package/dist/overlay/shared/use-floating-trigger.js.map +1 -1
  491. package/dist/overlay/tooltip/tooltip.d.ts +9 -0
  492. package/dist/overlay/tooltip/tooltip.d.ts.map +1 -1
  493. package/dist/pagination.cjs +69 -55
  494. package/dist/pagination.cjs.map +1 -1
  495. package/dist/pagination.js +70 -56
  496. package/dist/pagination.js.map +1 -1
  497. package/dist/password-strength.cjs +6 -4
  498. package/dist/password-strength.cjs.map +1 -1
  499. package/dist/password-strength.js +6 -4
  500. package/dist/password-strength.js.map +1 -1
  501. package/dist/popover.cjs +4 -4
  502. package/dist/popover.cjs.map +1 -1
  503. package/dist/popover.js +28 -17
  504. package/dist/popover.js.map +1 -1
  505. package/dist/progress.cjs +25 -17
  506. package/dist/progress.cjs.map +1 -1
  507. package/dist/progress.js +26 -18
  508. package/dist/progress.js.map +1 -1
  509. package/dist/radio-group.cjs +14 -12
  510. package/dist/radio-group.cjs.map +1 -1
  511. package/dist/radio-group.js +88 -89
  512. package/dist/radio-group.js.map +1 -1
  513. package/dist/radio.cjs +4 -4
  514. package/dist/radio.cjs.map +1 -1
  515. package/dist/radio.js +90 -90
  516. package/dist/radio.js.map +1 -1
  517. package/dist/rating.cjs +18 -16
  518. package/dist/rating.cjs.map +1 -1
  519. package/dist/rating.js +69 -69
  520. package/dist/rating.js.map +1 -1
  521. package/dist/refine.cjs +1669 -1324
  522. package/dist/refine.cjs.map +1 -1
  523. package/dist/refine.iife.js +1656 -1311
  524. package/dist/refine.iife.js.map +1 -1
  525. package/dist/refine.js +1759 -1414
  526. package/dist/refine.js.map +1 -1
  527. package/dist/register.d.ts +21 -0
  528. package/dist/register.d.ts.map +1 -0
  529. package/dist/select.cjs +59 -51
  530. package/dist/select.cjs.map +1 -1
  531. package/dist/select.js +189 -182
  532. package/dist/select.js.map +1 -1
  533. package/dist/separator.cjs +9 -9
  534. package/dist/separator.cjs.map +1 -1
  535. package/dist/separator.js +9 -9
  536. package/dist/separator.js.map +1 -1
  537. package/dist/shared/index.d.ts +1 -1
  538. package/dist/shared/prop-bundles.cjs +1 -1
  539. package/dist/shared/prop-bundles.cjs.map +1 -1
  540. package/dist/shared/prop-bundles.js +4 -2
  541. package/dist/shared/prop-bundles.js.map +1 -1
  542. package/dist/shared/size-presets.cjs +1 -1
  543. package/dist/shared/size-presets.cjs.map +1 -1
  544. package/dist/shared/size-presets.d.ts +3 -0
  545. package/dist/shared/size-presets.d.ts.map +1 -1
  546. package/dist/shared/size-presets.js +4 -1
  547. package/dist/shared/size-presets.js.map +1 -1
  548. package/dist/sidebar.cjs +8 -8
  549. package/dist/sidebar.cjs.map +1 -1
  550. package/dist/sidebar.js +25 -25
  551. package/dist/sidebar.js.map +1 -1
  552. package/dist/skeleton.cjs +4 -6
  553. package/dist/skeleton.cjs.map +1 -1
  554. package/dist/skeleton.js +21 -22
  555. package/dist/skeleton.js.map +1 -1
  556. package/dist/slider.cjs +14 -14
  557. package/dist/slider.cjs.map +1 -1
  558. package/dist/slider.js +160 -168
  559. package/dist/slider.js.map +1 -1
  560. package/dist/step.cjs +47 -0
  561. package/dist/step.cjs.map +1 -0
  562. package/dist/step.js +127 -0
  563. package/dist/step.js.map +1 -0
  564. package/dist/stepper.cjs +8 -0
  565. package/dist/stepper.cjs.map +1 -0
  566. package/dist/stepper.js +101 -0
  567. package/dist/stepper.js.map +1 -0
  568. package/dist/styles/index.d.ts +0 -28
  569. package/dist/styles/index.d.ts.map +1 -1
  570. package/dist/styles/mixins/shape.css.cjs +2 -2
  571. package/dist/styles/mixins/shape.css.cjs.map +1 -1
  572. package/dist/styles/mixins/shape.css.js +6 -6
  573. package/dist/styles/mixins/shape.css.js.map +1 -1
  574. package/dist/styles/tokens.css +4 -0
  575. package/dist/switch.cjs +4 -4
  576. package/dist/switch.cjs.map +1 -1
  577. package/dist/switch.js +44 -44
  578. package/dist/switch.js.map +1 -1
  579. package/dist/tab-item.cjs +3 -3
  580. package/dist/tab-item.cjs.map +1 -1
  581. package/dist/tab-item.js +24 -24
  582. package/dist/tab-item.js.map +1 -1
  583. package/dist/tab-panel.cjs +7 -5
  584. package/dist/tab-panel.cjs.map +1 -1
  585. package/dist/tab-panel.js +14 -12
  586. package/dist/tab-panel.js.map +1 -1
  587. package/dist/table.cjs +3 -1
  588. package/dist/table.cjs.map +1 -1
  589. package/dist/table.js +3 -1
  590. package/dist/table.js.map +1 -1
  591. package/dist/tabs.cjs +6 -6
  592. package/dist/tabs.cjs.map +1 -1
  593. package/dist/tabs.js +30 -29
  594. package/dist/tabs.js.map +1 -1
  595. package/dist/text.cjs +3 -1
  596. package/dist/text.cjs.map +1 -1
  597. package/dist/text.js +3 -1
  598. package/dist/text.js.map +1 -1
  599. package/dist/textarea.cjs +22 -22
  600. package/dist/textarea.cjs.map +1 -1
  601. package/dist/textarea.js +110 -112
  602. package/dist/textarea.js.map +1 -1
  603. package/dist/time-picker.cjs +69 -61
  604. package/dist/time-picker.cjs.map +1 -1
  605. package/dist/time-picker.js +146 -132
  606. package/dist/time-picker.js.map +1 -1
  607. package/dist/toast.cjs +22 -22
  608. package/dist/toast.cjs.map +1 -1
  609. package/dist/toast.js +280 -173
  610. package/dist/toast.js.map +1 -1
  611. package/dist/tooltip.cjs +5 -5
  612. package/dist/tooltip.cjs.map +1 -1
  613. package/dist/tooltip.js +61 -51
  614. package/dist/tooltip.js.map +1 -1
  615. package/dist/typing-indicator.cjs +1 -1
  616. package/dist/typing-indicator.cjs.map +1 -1
  617. package/dist/typing-indicator.js +5 -5
  618. package/dist/typing-indicator.js.map +1 -1
  619. package/dist/utils/link.cjs.map +1 -1
  620. package/dist/utils/link.d.ts +2 -2
  621. package/package.json +235 -121
  622. package/dist/form.cjs +0 -11
  623. package/dist/form.cjs.map +0 -1
  624. package/dist/form.js +0 -59
  625. package/dist/form.js.map +0 -1
  626. package/dist/headless/_internal.d.ts.map +0 -1
  627. package/dist/headless/announcer.cjs.map +0 -1
  628. package/dist/headless/announcer.d.ts.map +0 -1
  629. package/dist/headless/announcer.js.map +0 -1
  630. package/dist/headless/aria-reflection.cjs.map +0 -1
  631. package/dist/headless/aria-reflection.d.ts.map +0 -1
  632. package/dist/headless/aria-reflection.js.map +0 -1
  633. package/dist/headless/auto-resize.cjs.map +0 -1
  634. package/dist/headless/auto-resize.d.ts.map +0 -1
  635. package/dist/headless/auto-resize.js.map +0 -1
  636. package/dist/headless/checkable.cjs.map +0 -1
  637. package/dist/headless/checkable.d.ts.map +0 -1
  638. package/dist/headless/checkable.js.map +0 -1
  639. package/dist/headless/choice-field.cjs +0 -2
  640. package/dist/headless/choice-field.cjs.map +0 -1
  641. package/dist/headless/choice-field.d.ts.map +0 -1
  642. package/dist/headless/choice-field.js.map +0 -1
  643. package/dist/headless/composer.cjs.map +0 -1
  644. package/dist/headless/composer.d.ts.map +0 -1
  645. package/dist/headless/composer.js.map +0 -1
  646. package/dist/headless/datagrid.cjs +0 -2
  647. package/dist/headless/datagrid.cjs.map +0 -1
  648. package/dist/headless/datagrid.d.ts +0 -158
  649. package/dist/headless/datagrid.d.ts.map +0 -1
  650. package/dist/headless/datagrid.js +0 -55
  651. package/dist/headless/datagrid.js.map +0 -1
  652. package/dist/headless/date-picker.cjs.map +0 -1
  653. package/dist/headless/date-picker.d.ts.map +0 -1
  654. package/dist/headless/date-picker.js.map +0 -1
  655. package/dist/headless/direction.cjs.map +0 -1
  656. package/dist/headless/direction.d.ts.map +0 -1
  657. package/dist/headless/direction.js.map +0 -1
  658. package/dist/headless/field-base.cjs +0 -2
  659. package/dist/headless/field-base.cjs.map +0 -1
  660. package/dist/headless/field-base.d.ts.map +0 -1
  661. package/dist/headless/field-base.js +0 -72
  662. package/dist/headless/field-base.js.map +0 -1
  663. package/dist/headless/focus.cjs.map +0 -1
  664. package/dist/headless/focus.d.ts.map +0 -1
  665. package/dist/headless/focus.js.map +0 -1
  666. package/dist/headless/index.d.ts.map +0 -1
  667. package/dist/headless/keyboard.cjs.map +0 -1
  668. package/dist/headless/keyboard.d.ts.map +0 -1
  669. package/dist/headless/keyboard.js.map +0 -1
  670. package/dist/headless/light-dom.cjs.map +0 -1
  671. package/dist/headless/light-dom.d.ts.map +0 -1
  672. package/dist/headless/light-dom.js.map +0 -1
  673. package/dist/headless/nav.cjs.map +0 -1
  674. package/dist/headless/nav.d.ts.map +0 -1
  675. package/dist/headless/nav.js.map +0 -1
  676. package/dist/headless/numbers.cjs.map +0 -1
  677. package/dist/headless/numbers.d.ts.map +0 -1
  678. package/dist/headless/numbers.js.map +0 -1
  679. package/dist/headless/option-list.cjs +0 -2
  680. package/dist/headless/option-list.cjs.map +0 -1
  681. package/dist/headless/option-list.d.ts +0 -107
  682. package/dist/headless/option-list.d.ts.map +0 -1
  683. package/dist/headless/option-list.js +0 -66
  684. package/dist/headless/option-list.js.map +0 -1
  685. package/dist/headless/ore.cjs.map +0 -1
  686. package/dist/headless/ore.d.ts.map +0 -1
  687. package/dist/headless/ore.js.map +0 -1
  688. package/dist/headless/overlay.cjs +0 -2
  689. package/dist/headless/overlay.cjs.map +0 -1
  690. package/dist/headless/overlay.d.ts +0 -64
  691. package/dist/headless/overlay.d.ts.map +0 -1
  692. package/dist/headless/overlay.js +0 -32
  693. package/dist/headless/overlay.js.map +0 -1
  694. package/dist/headless/paginated-list.cjs +0 -2
  695. package/dist/headless/paginated-list.cjs.map +0 -1
  696. package/dist/headless/paginated-list.d.ts.map +0 -1
  697. package/dist/headless/paginated-list.js +0 -34
  698. package/dist/headless/paginated-list.js.map +0 -1
  699. package/dist/headless/parse.cjs.map +0 -1
  700. package/dist/headless/parse.d.ts.map +0 -1
  701. package/dist/headless/parse.js.map +0 -1
  702. package/dist/headless/positioner.cjs +0 -2
  703. package/dist/headless/positioner.cjs.map +0 -1
  704. package/dist/headless/positioner.d.ts.map +0 -1
  705. package/dist/headless/positioner.js.map +0 -1
  706. package/dist/headless/ref-callback.cjs +0 -2
  707. package/dist/headless/ref-callback.cjs.map +0 -1
  708. package/dist/headless/ref-callback.d.ts.map +0 -1
  709. package/dist/headless/ref-callback.js.map +0 -1
  710. package/dist/headless/selection-control.cjs +0 -2
  711. package/dist/headless/selection-control.cjs.map +0 -1
  712. package/dist/headless/selection-control.d.ts +0 -30
  713. package/dist/headless/selection-control.d.ts.map +0 -1
  714. package/dist/headless/selection-control.js +0 -44
  715. package/dist/headless/selection-control.js.map +0 -1
  716. package/dist/headless/signals.cjs +0 -2
  717. package/dist/headless/signals.cjs.map +0 -1
  718. package/dist/headless/signals.d.ts.map +0 -1
  719. package/dist/headless/signals.js.map +0 -1
  720. package/dist/headless/slider.cjs +0 -2
  721. package/dist/headless/slider.d.ts.map +0 -1
  722. package/dist/headless/slider.js.map +0 -1
  723. package/dist/headless/sort-control.cjs +0 -2
  724. package/dist/headless/sort-control.cjs.map +0 -1
  725. package/dist/headless/sort-control.d.ts +0 -22
  726. package/dist/headless/sort-control.d.ts.map +0 -1
  727. package/dist/headless/sort-control.js +0 -36
  728. package/dist/headless/sort-control.js.map +0 -1
  729. package/dist/headless/spinner.cjs +0 -2
  730. package/dist/headless/spinner.d.ts.map +0 -1
  731. package/dist/headless/spinner.js.map +0 -1
  732. package/dist/headless/swipe.cjs.map +0 -1
  733. package/dist/headless/swipe.d.ts.map +0 -1
  734. package/dist/headless/swipe.js.map +0 -1
  735. package/dist/headless/text-field.cjs.map +0 -1
  736. package/dist/headless/text-field.d.ts.map +0 -1
  737. package/dist/headless/text-field.js.map +0 -1
  738. package/dist/headless/typeahead.cjs.map +0 -1
  739. package/dist/headless/typeahead.d.ts.map +0 -1
  740. package/dist/headless/typeahead.js.map +0 -1
  741. package/dist/headless.cjs +0 -1
  742. package/dist/headless.js +0 -30
  743. package/dist/inputs/datagrid/datagrid-controls.cjs +0 -2
  744. package/dist/inputs/datagrid/datagrid-controls.cjs.map +0 -1
  745. package/dist/inputs/datagrid/datagrid-controls.d.ts +0 -98
  746. package/dist/inputs/datagrid/datagrid-controls.d.ts.map +0 -1
  747. package/dist/inputs/datagrid/datagrid-controls.js +0 -147
  748. package/dist/inputs/datagrid/datagrid-controls.js.map +0 -1
  749. package/dist/inputs/form/form.css.cjs +0 -2
  750. package/dist/inputs/form/form.css.cjs.map +0 -1
  751. package/dist/inputs/form/form.css.js +0 -6
  752. package/dist/inputs/form/form.css.js.map +0 -1
  753. package/dist/inputs/form/form.d.ts +0 -59
  754. package/dist/inputs/form/form.d.ts.map +0 -1
  755. package/dist/inputs/shared/form-context.cjs +0 -2
  756. package/dist/inputs/shared/form-context.cjs.map +0 -1
  757. package/dist/inputs/shared/form-context.d.ts +0 -55
  758. package/dist/inputs/shared/form-context.d.ts.map +0 -1
  759. package/dist/inputs/shared/form-context.js +0 -15
  760. package/dist/inputs/shared/form-context.js.map +0 -1
  761. package/dist/styles/index.cjs +0 -2
  762. package/dist/styles/index.cjs.map +0 -1
  763. package/dist/styles/index.js +0 -25
  764. package/dist/styles/index.js.map +0 -1
  765. package/dist/styles/styles.css +0 -5
  766. package/dist/testing/index.d.ts +0 -188
  767. package/dist/testing/index.d.ts.map +0 -1
  768. package/dist/testing.cjs +0 -2
  769. package/dist/testing.cjs.map +0 -1
  770. package/dist/testing.js +0 -26
  771. package/dist/testing.js.map +0 -1
  772. /package/dist/{headless → core}/announcer.cjs +0 -0
  773. /package/dist/{headless → core}/announcer.d.ts +0 -0
  774. /package/dist/{headless → core}/aria-reflection.cjs +0 -0
  775. /package/dist/{headless → core}/aria-reflection.d.ts +0 -0
  776. /package/dist/{headless → core}/auto-resize.cjs +0 -0
  777. /package/dist/{headless → core}/auto-resize.d.ts +0 -0
  778. /package/dist/{headless → core}/checkable.cjs +0 -0
  779. /package/dist/{headless → core}/checkable.d.ts +0 -0
  780. /package/dist/{headless → core}/choice-field.d.ts +0 -0
  781. /package/dist/{headless → core}/composer.cjs +0 -0
  782. /package/dist/{headless → core}/composer.d.ts +0 -0
  783. /package/dist/{headless → core}/date-picker.d.ts +0 -0
  784. /package/dist/{headless → core}/direction.cjs +0 -0
  785. /package/dist/{headless → core}/direction.d.ts +0 -0
  786. /package/dist/{headless → core}/focus.cjs +0 -0
  787. /package/dist/{headless → core}/focus.d.ts +0 -0
  788. /package/dist/{headless → core}/keyboard.d.ts +0 -0
  789. /package/dist/{headless → core}/light-dom.cjs +0 -0
  790. /package/dist/{headless → core}/light-dom.d.ts +0 -0
  791. /package/dist/{headless → core}/nav.cjs +0 -0
  792. /package/dist/{headless → core}/nav.d.ts +0 -0
  793. /package/dist/{headless → core}/numbers.cjs +0 -0
  794. /package/dist/{headless → core}/numbers.d.ts +0 -0
  795. /package/dist/{headless → core}/ore.cjs +0 -0
  796. /package/dist/{headless → core}/paginated-list.d.ts +0 -0
  797. /package/dist/{headless → core}/parse.cjs +0 -0
  798. /package/dist/{headless → core}/parse.d.ts +0 -0
  799. /package/dist/{headless → core}/positioner.d.ts +0 -0
  800. /package/dist/{headless → core}/ref-callback.d.ts +0 -0
  801. /package/dist/{headless → core}/signals.d.ts +0 -0
  802. /package/dist/{headless → core}/slider.d.ts +0 -0
  803. /package/dist/{headless → core}/spinner.d.ts +0 -0
  804. /package/dist/{headless → core}/swipe.cjs +0 -0
  805. /package/dist/{headless → core}/swipe.d.ts +0 -0
  806. /package/dist/{headless → core}/text-field.cjs +0 -0
  807. /package/dist/{headless → core}/text-field.d.ts +0 -0
  808. /package/dist/{headless → core}/typeahead.cjs +0 -0
  809. /package/dist/{headless → core}/typeahead.d.ts +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"selection-control.d.ts","sourceRoot":"","sources":["../../src/headless/selection-control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,QAAQ,EAAU,MAAM,kBAAkB,CAAC;AAEnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,MAAM,MAAM,uBAAuB,CAAC,CAAC,IAAI;IACvC,qDAAqD;IACrD,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAC/B,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;IAChD,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC;IACrB,qDAAqD;IACrD,aAAa,EAAE,MAAM,aAAa,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,yBAAyB;IACzB,cAAc,IAAI,IAAI,CAAC;IACvB,kDAAkD;IAClD,aAAa,IAAI,OAAO,CAAC;IACzB,2CAA2C;IAC3C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,iFAAiF;IACjF,SAAS,IAAI,IAAI,CAAC;IAClB,2EAA2E;IAC3E,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IACrD,oDAAoD;IACpD,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACtC,yCAAyC;IACzC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,CAAC,EAAE,SAAS,uBAAuB,CAAC,CAAC,CAAC,KAAG,gBA0E/E,CAAC"}
@@ -1,44 +0,0 @@
1
- import { computed as e, signal as t } from "@vielzeug/ripple";
2
- //#region src/headless/selection-control.ts
3
- var n = (n) => {
4
- let r = t(/* @__PURE__ */ new Set()), i = (e) => r.value.has(e), a = () => {
5
- let e = n.pageItems();
6
- return e.length ? e.every((e) => r.value.has(n.getRowKey(e))) : !1;
7
- }, o = (e) => {
8
- r.value = e, n.onSelectionChange?.(e);
9
- };
10
- return {
11
- clearSelection: () => {
12
- o(/* @__PURE__ */ new Set());
13
- },
14
- isAllSelected: a,
15
- isSelected: i,
16
- selectAll: () => {
17
- if (n.selectionMode() !== "multi") return;
18
- let e = n.pageItems();
19
- if (a()) {
20
- let t = new Set(r.value);
21
- for (let r of e) t.delete(n.getRowKey(r));
22
- o(t);
23
- } else {
24
- let t = new Set(r.value);
25
- for (let r of e) t.add(n.getRowKey(r));
26
- o(t);
27
- }
28
- },
29
- selectedKeys: e(() => new Set(r.value)),
30
- setSelection: (e) => {
31
- o(new Set(e));
32
- },
33
- toggleRow: (e) => {
34
- let t = n.selectionMode();
35
- if (t === "none") return;
36
- let i = new Set(r.value);
37
- i.has(e) ? i.delete(e) : (t === "single" && i.clear(), i.add(e)), o(i);
38
- }
39
- };
40
- };
41
- //#endregion
42
- export { n as createSelectionControl };
43
-
44
- //# sourceMappingURL=selection-control.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"selection-control.js","names":[],"sources":["../../src/headless/selection-control.ts"],"sourcesContent":["import { computed, type Readable, signal } from '@vielzeug/ripple';\n\nimport type { SelectionMode } from './datagrid';\n\n// ── Selection control ─────────────────────────────────────────────────────────\n\nexport type SelectionControlOptions<T> = {\n /** Returns a unique string key for each row item. */\n getRowKey: (item: T) => string;\n /** Called when selection changes. Receives the full set of selected keys. */\n onSelectionChange?: (keys: Set<string>) => void;\n /** Returns the current page items reactively. */\n pageItems: () => T[];\n /** Returns the current selection mode reactively. */\n selectionMode: () => SelectionMode;\n};\n\nexport type SelectionControl = {\n /** Deselect all rows. */\n clearSelection(): void;\n /** Whether all current-page rows are selected. */\n isAllSelected(): boolean;\n /** Whether a given row key is selected. */\n isSelected(key: string): boolean;\n /** Select (or deselect if already all selected) all rows on the current page. */\n selectAll(): void;\n /** Current selected row keys. Reactive signal. Returns a snapshot copy. */\n readonly selectedKeys: Readable<ReadonlySet<string>>;\n /** Set the selection to an explicit set of keys. */\n setSelection(keys: Set<string>): void;\n /** Toggle selection for a single row. */\n toggleRow(key: string): void;\n};\n\nexport const createSelectionControl = <T>(options: SelectionControlOptions<T>): SelectionControl => {\n const _selectedKeys = signal<Set<string>>(new Set());\n\n const isSelected = (key: string): boolean => _selectedKeys.value.has(key);\n\n const isAllSelected = (): boolean => {\n const page = options.pageItems();\n\n if (!page.length) return false;\n\n return page.every((item) => _selectedKeys.value.has(options.getRowKey(item)));\n };\n\n const _commitSelection = (next: Set<string>): void => {\n _selectedKeys.value = next;\n options.onSelectionChange?.(next);\n };\n\n const toggleRow = (key: string): void => {\n const mode = options.selectionMode();\n\n if (mode === 'none') return;\n\n const next = new Set(_selectedKeys.value);\n\n if (next.has(key)) {\n next.delete(key);\n } else if (mode === 'single') {\n next.clear();\n next.add(key);\n } else {\n next.add(key);\n }\n\n _commitSelection(next);\n };\n\n const selectAll = (): void => {\n if (options.selectionMode() !== 'multi') return;\n\n const page = options.pageItems();\n\n if (isAllSelected()) {\n const next = new Set(_selectedKeys.value);\n\n for (const item of page) next.delete(options.getRowKey(item));\n\n _commitSelection(next);\n } else {\n const next = new Set(_selectedKeys.value);\n\n for (const item of page) next.add(options.getRowKey(item));\n\n _commitSelection(next);\n }\n };\n\n const clearSelection = (): void => {\n _commitSelection(new Set());\n };\n\n const setSelection = (keys: Set<string>): void => {\n _commitSelection(new Set(keys));\n };\n\n return {\n clearSelection,\n isAllSelected,\n isSelected,\n selectAll,\n selectedKeys: computed(() => new Set(_selectedKeys.value)),\n setSelection,\n toggleRow,\n };\n};\n"],"mappings":";;AAkCA,IAAa,KAA6B,MAA0D;CAClG,IAAM,IAAgB,kBAAoB,IAAI,IAAI,CAAC,GAE7C,KAAc,MAAyB,EAAc,MAAM,IAAI,CAAG,GAElE,UAA+B;EACnC,IAAM,IAAO,EAAQ,UAAU;EAI/B,OAFK,EAAK,SAEH,EAAK,OAAO,MAAS,EAAc,MAAM,IAAI,EAAQ,UAAU,CAAI,CAAC,CAAC,IAFnD;CAG3B,GAEM,KAAoB,MAA4B;EAEpD,AADA,EAAc,QAAQ,GACtB,EAAQ,oBAAoB,CAAI;CAClC;CAiDA,OAAO;EACL,sBATiC;GACjC,kBAAiB,IAAI,IAAI,CAAC;EAC5B;EAQE;EACA;EACA,iBAhC4B;GAC5B,IAAI,EAAQ,cAAc,MAAM,SAAS;GAEzC,IAAM,IAAO,EAAQ,UAAU;GAE/B,IAAI,EAAc,GAAG;IACnB,IAAM,IAAO,IAAI,IAAI,EAAc,KAAK;IAExC,KAAK,IAAM,KAAQ,GAAM,EAAK,OAAO,EAAQ,UAAU,CAAI,CAAC;IAE5D,EAAiB,CAAI;GACvB,OAAO;IACL,IAAM,IAAO,IAAI,IAAI,EAAc,KAAK;IAExC,KAAK,IAAM,KAAQ,GAAM,EAAK,IAAI,EAAQ,UAAU,CAAI,CAAC;IAEzD,EAAiB,CAAI;GACvB;EACF;EAeE,cAAc,QAAe,IAAI,IAAI,EAAc,KAAK,CAAC;EACzD,eAVoB,MAA4B;GAChD,EAAiB,IAAI,IAAI,CAAI,CAAC;EAChC;EASE,YAtDiB,MAAsB;GACvC,IAAM,IAAO,EAAQ,cAAc;GAEnC,IAAI,MAAS,QAAQ;GAErB,IAAM,IAAO,IAAI,IAAI,EAAc,KAAK;GAWxC,AATI,EAAK,IAAI,CAAG,IACd,EAAK,OAAO,CAAG,KACN,MAAS,YAClB,EAAK,MAAM,GAGX,EAAK,IAAI,CAAG,IAGd,EAAiB,CAAI;EACvB;CAsCA;AACF"}
@@ -1,2 +0,0 @@
1
- let e=require("@vielzeug/ripple");var t=(t,n,r=e=>e)=>{let i=(0,e.signal)((0,e.untrack)(()=>r(t.value))),a=(0,e.watch)(t,e=>{i.value=r(e)});return n&&n.addEventListener(`abort`,()=>a.dispose(),{once:!0}),i};exports.syncedSignal=t;
2
- //# sourceMappingURL=signals.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"signals.cjs","names":[],"sources":["../../src/headless/signals.ts"],"sourcesContent":["import { type Readable, signal, type Signal, untrack, watch } from '@vielzeug/ripple';\n\n// ── syncedSignal ──────────────────────────────────────────────────────────────\n\n/**\n * Creates a local writable `Signal<T>` that stays in sync with an external\n * `Reactive<T>`. When `abortSignal` is provided the watcher subscription\n * is disposed automatically on abort; otherwise the caller is responsible for\n * disposal.\n *\n * Initialised synchronously via `untrack` so the first render never reads a\n * stale value. The optional `transform` coerces each incoming value (e.g.\n * `Boolean`, `String`).\n *\n * @example\n * ```ts\n * const value = syncedSignal(options.value, options.signal, (v) => String(v ?? ''));\n * // Without lifecycle signal (test / non-component context):\n * const value = syncedSignal(source);\n * ```\n */\nexport const syncedSignal = <TIn, TOut = TIn>(\n source: Readable<TIn>,\n abortSignal?: AbortSignal,\n transform: (value: TIn) => TOut = (v) => v as unknown as TOut,\n): Signal<TOut> => {\n const local = signal<TOut>(untrack(() => transform(source.value)));\n const sub = watch(source, (v) => {\n local.value = transform(v);\n });\n\n if (abortSignal) {\n abortSignal.addEventListener('abort', () => sub.dispose(), { once: true });\n }\n\n return local;\n};\n"],"mappings":"kCAqBA,IAAa,GACX,EACA,EACA,EAAmC,GAAM,IACxB,CACjB,IAAM,GAAA,EAAA,EAAA,OAAA,EAAA,EAAA,EAAA,QAAA,KAAmC,EAAU,EAAO,KAAK,CAAC,CAAC,EAC3D,GAAA,EAAA,EAAA,MAAA,CAAY,EAAS,GAAM,CAC/B,EAAM,MAAQ,EAAU,CAAC,CAC3B,CAAC,EAMD,OAJI,GACF,EAAY,iBAAiB,YAAe,EAAI,QAAQ,EAAG,CAAE,KAAM,EAAK,CAAC,EAGpE,CACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../src/headless/signals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAU,KAAK,MAAM,EAAkB,MAAM,kBAAkB,CAAC;AAItF;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,YAAY,GAAI,GAAG,EAAE,IAAI,GAAG,GAAG,EAC1C,QAAQ,QAAQ,CAAC,GAAG,CAAC,EACrB,cAAc,WAAW,EACzB,YAAW,CAAC,KAAK,EAAE,GAAG,KAAK,IAAkC,KAC5D,MAAM,CAAC,IAAI,CAWb,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"signals.js","names":[],"sources":["../../src/headless/signals.ts"],"sourcesContent":["import { type Readable, signal, type Signal, untrack, watch } from '@vielzeug/ripple';\n\n// ── syncedSignal ──────────────────────────────────────────────────────────────\n\n/**\n * Creates a local writable `Signal<T>` that stays in sync with an external\n * `Reactive<T>`. When `abortSignal` is provided the watcher subscription\n * is disposed automatically on abort; otherwise the caller is responsible for\n * disposal.\n *\n * Initialised synchronously via `untrack` so the first render never reads a\n * stale value. The optional `transform` coerces each incoming value (e.g.\n * `Boolean`, `String`).\n *\n * @example\n * ```ts\n * const value = syncedSignal(options.value, options.signal, (v) => String(v ?? ''));\n * // Without lifecycle signal (test / non-component context):\n * const value = syncedSignal(source);\n * ```\n */\nexport const syncedSignal = <TIn, TOut = TIn>(\n source: Readable<TIn>,\n abortSignal?: AbortSignal,\n transform: (value: TIn) => TOut = (v) => v as unknown as TOut,\n): Signal<TOut> => {\n const local = signal<TOut>(untrack(() => transform(source.value)));\n const sub = watch(source, (v) => {\n local.value = transform(v);\n });\n\n if (abortSignal) {\n abortSignal.addEventListener('abort', () => sub.dispose(), { once: true });\n }\n\n return local;\n};\n"],"mappings":";;AAqBA,IAAa,KACX,GACA,GACA,KAAmC,MAAM,MACxB;CACjB,IAAM,IAAQ,EAAa,QAAc,EAAU,EAAO,KAAK,CAAC,CAAC,GAC3D,IAAM,EAAM,IAAS,MAAM;EAC/B,EAAM,QAAQ,EAAU,CAAC;CAC3B,CAAC;CAMD,OAJI,KACF,EAAY,iBAAiB,eAAe,EAAI,QAAQ,GAAG,EAAE,MAAM,GAAK,CAAC,GAGpE;AACT"}
@@ -1,2 +0,0 @@
1
- const e=require("./numbers.cjs");let t=require("@vielzeug/arsenal");var n=n=>{let r=()=>e.toFiniteNumberOr(n.min?.value,0),i=()=>e.toFiniteNumberOr(n.max?.value,100),a=()=>e.toPositiveStep(n.step?.value,1),o=n=>{let a=r(),o=i();return(0,t.clamp)(e.toFiniteNumberOr(n,a),a,o)},s=t=>{let n=r();return o(Math.round(e.toFiniteNumberOr(t,n)/a())*a())},c=t=>{let n=r(),a=i(),o=e.toFiniteNumberOr(t,n);return a<=n?0:(o-n)/(a-n)*100},l=(e,t)=>{if(t.width<=0)return s(r());let n=Math.max(0,Math.min(1,(e-t.left)/t.width)),a=r(),o=i();return s(a+n*(o-a))},u=(t,n)=>{let s=e.toFiniteNumberOr(n,r());return t===`ArrowRight`||t===`ArrowUp`?o(s+a()):t===`ArrowLeft`||t===`ArrowDown`?o(s-a()):t===`Home`?r():t===`End`?i():null};return{clamp:o,fromClientX:l,handleKeydown:(e,t,r)=>{if(n.disabled?.value||n.readonly?.value)return!1;let i=u(e.key,t);return i===null?!1:(e.preventDefault(),r(i),!0)},max:i,min:r,nextFromKey:u,snap:s,toPercent:c}};exports.createSliderControl=n;
2
- //# sourceMappingURL=slider.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"slider.d.ts","sourceRoot":"","sources":["../../src/headless/slider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAQjD,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,EAAE,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IACzC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;IAC5C,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;IAC5C,QAAQ,CAAC,EAAE,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IACzC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACjC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC;IAChF;;;;OAIG;IACH,aAAa,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,OAAO,CAAC;IAC1G,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC7D,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAChC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACtC,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,SAAS,oBAAoB,KAAG,aAkEnE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"slider.js","names":[],"sources":["../../src/headless/slider.ts"],"sourcesContent":["import type { Readable } from '@vielzeug/ripple';\n\nimport { clamp as clampRange } from '@vielzeug/arsenal';\n\nimport { toFiniteNumberOr, toPositiveStep } from './numbers';\n\n// ── Slider control ────────────────────────────────────────────────────────────\n\nexport type SliderControlOptions = {\n disabled?: Readable<boolean | undefined>;\n max?: Readable<number | string | undefined>;\n min?: Readable<number | string | undefined>;\n readonly?: Readable<boolean | undefined>;\n step?: Readable<number | string | undefined>;\n};\n\nexport type SliderControl = {\n clamp: (value: number) => number;\n fromClientX: (clientX: number, rect: { left: number; width: number }) => number;\n /**\n * Handles keyboard navigation for a slider input.\n * When the slider is disabled or readonly, the event is ignored and `false` is returned.\n * @returns `true` when the event was handled and `onCommit` was called, `false` otherwise.\n */\n handleKeydown: (event: KeyboardEvent, currentValue: number, onCommit: (value: number) => void) => boolean;\n max: () => number;\n min: () => number;\n nextFromKey: (key: string, current: number) => number | null;\n snap: (value: number) => number;\n toPercent: (value: number) => number;\n};\n\nexport const createSliderControl = (options: SliderControlOptions): SliderControl => {\n const min = (): number => toFiniteNumberOr(options.min?.value, 0);\n const max = (): number => toFiniteNumberOr(options.max?.value, 100);\n const step = (): number => toPositiveStep(options.step?.value, 1);\n\n const clamp = (value: number): number => {\n const minValue = min();\n const maxValue = max();\n\n return clampRange(toFiniteNumberOr(value, minValue), minValue, maxValue);\n };\n\n const snap = (value: number): number => {\n const minValue = min();\n\n return clamp(Math.round(toFiniteNumberOr(value, minValue) / step()) * step());\n };\n\n const toPercent = (value: number): number => {\n const minValue = min();\n const maxValue = max();\n const normalized = toFiniteNumberOr(value, minValue);\n\n if (maxValue <= minValue) return 0;\n\n return ((normalized - minValue) / (maxValue - minValue)) * 100;\n };\n\n const fromClientX = (clientX: number, rect: { left: number; width: number }): number => {\n if (rect.width <= 0) return snap(min());\n\n const pct = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width));\n const minValue = min();\n const maxValue = max();\n\n return snap(minValue + pct * (maxValue - minValue));\n };\n\n const nextFromKey = (key: string, current: number): number | null => {\n const normalized = toFiniteNumberOr(current, min());\n\n if (key === 'ArrowRight' || key === 'ArrowUp') return clamp(normalized + step());\n\n if (key === 'ArrowLeft' || key === 'ArrowDown') return clamp(normalized - step());\n\n if (key === 'Home') return min();\n\n if (key === 'End') return max();\n\n return null;\n };\n\n const handleKeydown = (event: KeyboardEvent, currentValue: number, onCommit: (value: number) => void): boolean => {\n if (options.disabled?.value || options.readonly?.value) return false;\n\n const next = nextFromKey(event.key, currentValue);\n\n if (next === null) return false;\n\n event.preventDefault();\n onCommit(next);\n\n return true;\n };\n\n return { clamp, fromClientX, handleKeydown, max, min, nextFromKey, snap, toPercent };\n};\n"],"mappings":";;;AAgCA,IAAa,KAAuB,MAAiD;CACnF,IAAM,UAAoB,EAAiB,EAAQ,KAAK,OAAO,CAAC,GAC1D,UAAoB,EAAiB,EAAQ,KAAK,OAAO,GAAG,GAC5D,UAAqB,EAAe,EAAQ,MAAM,OAAO,CAAC,GAE1D,KAAS,MAA0B;EACvC,IAAM,IAAW,EAAI,GACf,IAAW,EAAI;EAErB,OAAO,EAAW,EAAiB,GAAO,CAAQ,GAAG,GAAU,CAAQ;CACzE,GAEM,KAAQ,MAA0B;EACtC,IAAM,IAAW,EAAI;EAErB,OAAO,EAAM,KAAK,MAAM,EAAiB,GAAO,CAAQ,IAAI,EAAK,CAAC,IAAI,EAAK,CAAC;CAC9E,GAEM,KAAa,MAA0B;EAC3C,IAAM,IAAW,EAAI,GACf,IAAW,EAAI,GACf,IAAa,EAAiB,GAAO,CAAQ;EAInD,OAFI,KAAY,IAAiB,KAExB,IAAa,MAAa,IAAW,KAAa;CAC7D,GAEM,KAAe,GAAiB,MAAkD;EACtF,IAAI,EAAK,SAAS,GAAG,OAAO,EAAK,EAAI,CAAC;EAEtC,IAAM,IAAM,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,IAAU,EAAK,QAAQ,EAAK,KAAK,CAAC,GACjE,IAAW,EAAI,GACf,IAAW,EAAI;EAErB,OAAO,EAAK,IAAW,KAAO,IAAW,EAAS;CACpD,GAEM,KAAe,GAAa,MAAmC;EACnE,IAAM,IAAa,EAAiB,GAAS,EAAI,CAAC;EAUlD,OARI,MAAQ,gBAAgB,MAAQ,YAAkB,EAAM,IAAa,EAAK,CAAC,IAE3E,MAAQ,eAAe,MAAQ,cAAoB,EAAM,IAAa,EAAK,CAAC,IAE5E,MAAQ,SAAe,EAAI,IAE3B,MAAQ,QAAc,EAAI,IAEvB;CACT;CAeA,OAAO;EAAE,OAAA;EAAO;EAAa,gBAbN,GAAsB,GAAsB,MAA+C;GAChH,IAAI,EAAQ,UAAU,SAAS,EAAQ,UAAU,OAAO,OAAO;GAE/D,IAAM,IAAO,EAAY,EAAM,KAAK,CAAY;GAOhD,OALI,MAAS,OAAa,MAE1B,EAAM,eAAe,GACrB,EAAS,CAAI,GAEN;EACT;EAE4C;EAAK;EAAK;EAAa;EAAM;CAAU;AACrF"}
@@ -1,2 +0,0 @@
1
- let e=require("@vielzeug/ripple");var t=t=>{let n=t.items,r=(0,e.signal)(``),i=(0,e.signal)(`none`),a=(0,e.computed)(()=>({direction:i.value,key:r.value}));return{sortBy:e=>{r.value===e?i.value===`asc`?i.value=`desc`:i.value===`desc`&&(r.value=``,i.value=`none`):(r.value=e,i.value=`asc`),t.onSortChange?.({direction:i.value,key:r.value})},sortedItems:(0,e.computed)(()=>{let e=n.value,a=r.value,o=i.value;if(!a||o===`none`)return e;let s=t.columns().find(e=>e.key===a);return e.slice().sort((e,t)=>{let n=s?.sortValue?s.sortValue(e):e[a],r=s?.sortValue?s.sortValue(t):t[a],i=typeof n==`number`&&typeof r==`number`?n-r:String(n??``).localeCompare(String(r??``));return o===`asc`?i:-i})}),sortState:a,sortTo:(e,n)=>{n===`none`?(r.value=``,i.value=`none`):(r.value=e,i.value=n),t.onSortChange?.({direction:i.value,key:r.value})}}};exports.createSortControl=t;
2
- //# sourceMappingURL=sort-control.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sort-control.cjs","names":[],"sources":["../../src/headless/sort-control.ts"],"sourcesContent":["import { computed, type Readable, signal } from '@vielzeug/ripple';\n\nimport type { DataGridColumn, SortDirection, SortState } from './datagrid';\n\n// ── Sort control ──────────────────────────────────────────────────────────────\n\nexport type SortControlOptions<T> = {\n /** Returns the current column definitions reactively. */\n columns: () => DataGridColumn<T>[];\n /** The reactive list of items to sort. */\n items: Readable<T[]>;\n /** Called when sort state changes. */\n onSortChange?: (sort: SortState) => void;\n};\n\nexport type SortControl<T> = {\n /** Sort by the given column key — cycles asc → desc → none. */\n sortBy(key: string): void;\n /** Sorted version of the provided items. Reactive signal. */\n readonly sortedItems: Readable<T[]>;\n /** Current sort state. Reactive signal. */\n readonly sortState: Readable<SortState>;\n /** Set sort to an explicit key and direction. Passing `'none'` clears the sort. */\n sortTo(key: string, direction: SortDirection): void;\n};\n\nexport const createSortControl = <T>(options: SortControlOptions<T>): SortControl<T> => {\n const items = options.items;\n const _sortKey = signal<string>('');\n const _sortDir = signal<SortDirection>('none');\n\n const sortState = computed<SortState>(() => ({ direction: _sortDir.value, key: _sortKey.value }));\n\n const sortedItems = computed<T[]>(() => {\n const all = items.value;\n const key = _sortKey.value;\n const dir = _sortDir.value;\n\n if (!key || dir === 'none') return all;\n\n const col = options.columns().find((c) => c.key === key);\n\n return all.slice().sort((a, b) => {\n const av = col?.sortValue ? col.sortValue(a) : ((a as Record<string, unknown>)[key] as number | string);\n const bv = col?.sortValue ? col.sortValue(b) : ((b as Record<string, unknown>)[key] as number | string);\n const cmp =\n typeof av === 'number' && typeof bv === 'number' ? av - bv : String(av ?? '').localeCompare(String(bv ?? ''));\n\n return dir === 'asc' ? cmp : -cmp;\n });\n });\n\n const sortBy = (key: string): void => {\n if (_sortKey.value !== key) {\n _sortKey.value = key;\n _sortDir.value = 'asc';\n } else if (_sortDir.value === 'asc') {\n _sortDir.value = 'desc';\n } else if (_sortDir.value === 'desc') {\n _sortKey.value = '';\n _sortDir.value = 'none';\n }\n\n options.onSortChange?.({ direction: _sortDir.value, key: _sortKey.value });\n };\n\n const sortTo = (key: string, direction: SortDirection): void => {\n if (direction === 'none') {\n _sortKey.value = '';\n _sortDir.value = 'none';\n } else {\n _sortKey.value = key;\n _sortDir.value = direction;\n }\n\n options.onSortChange?.({ direction: _sortDir.value, key: _sortKey.value });\n };\n\n return { sortBy, sortedItems, sortState, sortTo };\n};\n"],"mappings":"kCA0BA,IAAa,EAAwB,GAAmD,CACtF,IAAM,EAAQ,EAAQ,MAChB,GAAA,EAAA,EAAA,OAAA,CAA0B,EAAE,EAC5B,GAAA,EAAA,EAAA,OAAA,CAAiC,MAAM,EAEvC,GAAA,EAAA,EAAA,SAAA,MAAuC,CAAE,UAAW,EAAS,MAAO,IAAK,EAAS,KAAM,EAAE,EA+ChG,MAAO,CAAE,OA1BO,GAAsB,CAChC,EAAS,QAAU,EAGZ,EAAS,QAAU,MAC5B,EAAS,MAAQ,OACR,EAAS,QAAU,SAC5B,EAAS,MAAQ,GACjB,EAAS,MAAQ,SANjB,EAAS,MAAQ,EACjB,EAAS,MAAQ,OAQnB,EAAQ,eAAe,CAAE,UAAW,EAAS,MAAO,IAAK,EAAS,KAAM,CAAC,CAC3E,EAciB,aA7CX,EAAA,EAAA,SAAA,KAAkC,CACtC,IAAM,EAAM,EAAM,MACZ,EAAM,EAAS,MACf,EAAM,EAAS,MAErB,GAAI,CAAC,GAAO,IAAQ,OAAQ,OAAO,EAEnC,IAAM,EAAM,EAAQ,QAAQ,CAAC,CAAC,KAAM,GAAM,EAAE,MAAQ,CAAG,EAEvD,OAAO,EAAI,MAAM,CAAC,CAAC,MAAM,EAAG,IAAM,CAChC,IAAM,EAAK,GAAK,UAAY,EAAI,UAAU,CAAC,EAAM,EAA8B,GACzE,EAAK,GAAK,UAAY,EAAI,UAAU,CAAC,EAAM,EAA8B,GACzE,EACJ,OAAO,GAAO,UAAY,OAAO,GAAO,SAAW,EAAK,EAAK,OAAO,GAAM,EAAE,CAAC,CAAC,cAAc,OAAO,GAAM,EAAE,CAAC,EAE9G,OAAO,IAAQ,MAAQ,EAAM,CAAC,CAChC,CAAC,CACH,CA4BiB,EAAa,YAAW,QAZzB,EAAa,IAAmC,CAC1D,IAAc,QAChB,EAAS,MAAQ,GACjB,EAAS,MAAQ,SAEjB,EAAS,MAAQ,EACjB,EAAS,MAAQ,GAGnB,EAAQ,eAAe,CAAE,UAAW,EAAS,MAAO,IAAK,EAAS,KAAM,CAAC,CAC3E,CAEgD,CAClD"}
@@ -1,22 +0,0 @@
1
- import { type Readable } from '@vielzeug/ripple';
2
- import type { DataGridColumn, SortDirection, SortState } from './datagrid';
3
- export type SortControlOptions<T> = {
4
- /** Returns the current column definitions reactively. */
5
- columns: () => DataGridColumn<T>[];
6
- /** The reactive list of items to sort. */
7
- items: Readable<T[]>;
8
- /** Called when sort state changes. */
9
- onSortChange?: (sort: SortState) => void;
10
- };
11
- export type SortControl<T> = {
12
- /** Sort by the given column key — cycles asc → desc → none. */
13
- sortBy(key: string): void;
14
- /** Sorted version of the provided items. Reactive signal. */
15
- readonly sortedItems: Readable<T[]>;
16
- /** Current sort state. Reactive signal. */
17
- readonly sortState: Readable<SortState>;
18
- /** Set sort to an explicit key and direction. Passing `'none'` clears the sort. */
19
- sortTo(key: string, direction: SortDirection): void;
20
- };
21
- export declare const createSortControl: <T>(options: SortControlOptions<T>) => SortControl<T>;
22
- //# sourceMappingURL=sort-control.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sort-control.d.ts","sourceRoot":"","sources":["../../src/headless/sort-control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,QAAQ,EAAU,MAAM,kBAAkB,CAAC;AAEnE,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAI3E,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI;IAClC,yDAAyD;IACzD,OAAO,EAAE,MAAM,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IACnC,0CAA0C;IAC1C,KAAK,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IACrB,sCAAsC;IACtC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC3B,+DAA+D;IAC/D,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,6DAA6D;IAC7D,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IACpC,2CAA2C;IAC3C,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IACxC,mFAAmF;IACnF,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,GAAG,IAAI,CAAC;CACrD,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,CAAC,EAAE,SAAS,kBAAkB,CAAC,CAAC,CAAC,KAAG,WAAW,CAAC,CAAC,CAqDlF,CAAC"}
@@ -1,36 +0,0 @@
1
- import { computed as e, signal as t } from "@vielzeug/ripple";
2
- //#region src/headless/sort-control.ts
3
- var n = (n) => {
4
- let r = n.items, i = t(""), a = t("none"), o = e(() => ({
5
- direction: a.value,
6
- key: i.value
7
- }));
8
- return {
9
- sortBy: (e) => {
10
- i.value === e ? a.value === "asc" ? a.value = "desc" : a.value === "desc" && (i.value = "", a.value = "none") : (i.value = e, a.value = "asc"), n.onSortChange?.({
11
- direction: a.value,
12
- key: i.value
13
- });
14
- },
15
- sortedItems: e(() => {
16
- let e = r.value, t = i.value, o = a.value;
17
- if (!t || o === "none") return e;
18
- let s = n.columns().find((e) => e.key === t);
19
- return e.slice().sort((e, n) => {
20
- let r = s?.sortValue ? s.sortValue(e) : e[t], i = s?.sortValue ? s.sortValue(n) : n[t], a = typeof r == "number" && typeof i == "number" ? r - i : String(r ?? "").localeCompare(String(i ?? ""));
21
- return o === "asc" ? a : -a;
22
- });
23
- }),
24
- sortState: o,
25
- sortTo: (e, t) => {
26
- t === "none" ? (i.value = "", a.value = "none") : (i.value = e, a.value = t), n.onSortChange?.({
27
- direction: a.value,
28
- key: i.value
29
- });
30
- }
31
- };
32
- };
33
- //#endregion
34
- export { n as createSortControl };
35
-
36
- //# sourceMappingURL=sort-control.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sort-control.js","names":[],"sources":["../../src/headless/sort-control.ts"],"sourcesContent":["import { computed, type Readable, signal } from '@vielzeug/ripple';\n\nimport type { DataGridColumn, SortDirection, SortState } from './datagrid';\n\n// ── Sort control ──────────────────────────────────────────────────────────────\n\nexport type SortControlOptions<T> = {\n /** Returns the current column definitions reactively. */\n columns: () => DataGridColumn<T>[];\n /** The reactive list of items to sort. */\n items: Readable<T[]>;\n /** Called when sort state changes. */\n onSortChange?: (sort: SortState) => void;\n};\n\nexport type SortControl<T> = {\n /** Sort by the given column key — cycles asc → desc → none. */\n sortBy(key: string): void;\n /** Sorted version of the provided items. Reactive signal. */\n readonly sortedItems: Readable<T[]>;\n /** Current sort state. Reactive signal. */\n readonly sortState: Readable<SortState>;\n /** Set sort to an explicit key and direction. Passing `'none'` clears the sort. */\n sortTo(key: string, direction: SortDirection): void;\n};\n\nexport const createSortControl = <T>(options: SortControlOptions<T>): SortControl<T> => {\n const items = options.items;\n const _sortKey = signal<string>('');\n const _sortDir = signal<SortDirection>('none');\n\n const sortState = computed<SortState>(() => ({ direction: _sortDir.value, key: _sortKey.value }));\n\n const sortedItems = computed<T[]>(() => {\n const all = items.value;\n const key = _sortKey.value;\n const dir = _sortDir.value;\n\n if (!key || dir === 'none') return all;\n\n const col = options.columns().find((c) => c.key === key);\n\n return all.slice().sort((a, b) => {\n const av = col?.sortValue ? col.sortValue(a) : ((a as Record<string, unknown>)[key] as number | string);\n const bv = col?.sortValue ? col.sortValue(b) : ((b as Record<string, unknown>)[key] as number | string);\n const cmp =\n typeof av === 'number' && typeof bv === 'number' ? av - bv : String(av ?? '').localeCompare(String(bv ?? ''));\n\n return dir === 'asc' ? cmp : -cmp;\n });\n });\n\n const sortBy = (key: string): void => {\n if (_sortKey.value !== key) {\n _sortKey.value = key;\n _sortDir.value = 'asc';\n } else if (_sortDir.value === 'asc') {\n _sortDir.value = 'desc';\n } else if (_sortDir.value === 'desc') {\n _sortKey.value = '';\n _sortDir.value = 'none';\n }\n\n options.onSortChange?.({ direction: _sortDir.value, key: _sortKey.value });\n };\n\n const sortTo = (key: string, direction: SortDirection): void => {\n if (direction === 'none') {\n _sortKey.value = '';\n _sortDir.value = 'none';\n } else {\n _sortKey.value = key;\n _sortDir.value = direction;\n }\n\n options.onSortChange?.({ direction: _sortDir.value, key: _sortKey.value });\n };\n\n return { sortBy, sortedItems, sortState, sortTo };\n};\n"],"mappings":";;AA0BA,IAAa,KAAwB,MAAmD;CACtF,IAAM,IAAQ,EAAQ,OAChB,IAAW,EAAe,EAAE,GAC5B,IAAW,EAAsB,MAAM,GAEvC,IAAY,SAA2B;EAAE,WAAW,EAAS;EAAO,KAAK,EAAS;CAAM,EAAE;CA+ChG,OAAO;EAAE,SA1BO,MAAsB;GAWpC,AAVI,EAAS,UAAU,IAGZ,EAAS,UAAU,QAC5B,EAAS,QAAQ,SACR,EAAS,UAAU,WAC5B,EAAS,QAAQ,IACjB,EAAS,QAAQ,WANjB,EAAS,QAAQ,GACjB,EAAS,QAAQ,QAQnB,EAAQ,eAAe;IAAE,WAAW,EAAS;IAAO,KAAK,EAAS;GAAM,CAAC;EAC3E;EAciB,aA7CG,QAAoB;GACtC,IAAM,IAAM,EAAM,OACZ,IAAM,EAAS,OACf,IAAM,EAAS;GAErB,IAAI,CAAC,KAAO,MAAQ,QAAQ,OAAO;GAEnC,IAAM,IAAM,EAAQ,QAAQ,CAAC,CAAC,MAAM,MAAM,EAAE,QAAQ,CAAG;GAEvD,OAAO,EAAI,MAAM,CAAC,CAAC,MAAM,GAAG,MAAM;IAChC,IAAM,IAAK,GAAK,YAAY,EAAI,UAAU,CAAC,IAAM,EAA8B,IACzE,IAAK,GAAK,YAAY,EAAI,UAAU,CAAC,IAAM,EAA8B,IACzE,IACJ,OAAO,KAAO,YAAY,OAAO,KAAO,WAAW,IAAK,IAAK,OAAO,KAAM,EAAE,CAAC,CAAC,cAAc,OAAO,KAAM,EAAE,CAAC;IAE9G,OAAO,MAAQ,QAAQ,IAAM,CAAC;GAChC,CAAC;EACH,CA4BiB;EAAa;EAAW,SAZzB,GAAa,MAAmC;GAS9D,AARI,MAAc,UAChB,EAAS,QAAQ,IACjB,EAAS,QAAQ,WAEjB,EAAS,QAAQ,GACjB,EAAS,QAAQ,IAGnB,EAAQ,eAAe;IAAE,WAAW,EAAS;IAAO,KAAK,EAAS;GAAM,CAAC;EAC3E;CAEgD;AAClD"}
@@ -1,2 +0,0 @@
1
- const e=require("./keyboard.cjs"),t=require("./numbers.cjs");let n=require("@vielzeug/arsenal");var r=r=>{let i=()=>!!r.disabled?.value||!!r.readonly?.value,a=()=>t.toFiniteNumber(r.min?.value),o=()=>t.toFiniteNumber(r.max?.value),s=e=>(0,n.clamp)(e,a(),o()),c=()=>t.toPositiveStep(r.step?.value,1),l=()=>{let e=c();return t.toPositiveStep(r.largeStep?.value,e*10)},u=()=>r.parse()??a()??0,d=(e,t)=>{if(e==null){r.commit(null,t);return}r.commit(s(e),t)},f=(e,t)=>{i()||d(u()+e,t)};return{atMax:()=>{let e=r.parse(),t=o();return e!=null&&t!=null&&e>=t},atMin:()=>{let e=r.parse(),t=a();return e!=null&&t!=null&&e<=t},handleKeydown:t=>i()?!1:e.dispatchKeyboardAction(t,{keymap:{ArrowDown:()=>f(-c(),t),ArrowUp:()=>f(c(),t),End:()=>{let e=o();if(e==null)return!1;d(e,t)},Home:()=>{let e=a();if(e==null)return!1;d(e,t)},PageDown:()=>f(-l(),t),PageUp:()=>f(l(),t)},preventDefault:`after`}),incrementBy:f}};exports.createSpinnerControl=r;
2
- //# sourceMappingURL=spinner.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/headless/spinner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAOjD,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,aAAa,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IAC9D,QAAQ,CAAC,EAAE,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;IAClD,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;IAC5C,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;IAC5C,KAAK,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IACzC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,OAAO,CAAC;IACrB,aAAa,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC;IACjD,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;CAC7D,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,SAAS,qBAAqB,KAAG,cAmGrE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"spinner.js","names":[],"sources":["../../src/headless/spinner.ts"],"sourcesContent":["import type { Readable } from '@vielzeug/ripple';\n\nimport { clamp as clampRange } from '@vielzeug/arsenal';\n\nimport { dispatchKeyboardAction } from './keyboard';\nimport { toFiniteNumber, toPositiveStep } from './numbers';\n\nexport type SpinnerControlOptions = {\n commit: (value: number | null, originalEvent?: Event) => void;\n disabled?: Readable<boolean | undefined>;\n largeStep?: Readable<number | string | undefined>;\n max?: Readable<number | string | undefined>;\n min?: Readable<number | string | undefined>;\n parse: () => number | null;\n readonly?: Readable<boolean | undefined>;\n step?: Readable<number | string | undefined>;\n};\n\nexport type SpinnerControl = {\n atMax: () => boolean;\n atMin: () => boolean;\n handleKeydown: (event: KeyboardEvent) => boolean;\n incrementBy: (delta: number, originalEvent?: Event) => void;\n};\n\nexport const createSpinnerControl = (options: SpinnerControlOptions): SpinnerControl => {\n const isBlocked = (): boolean => Boolean(options.disabled?.value) || Boolean(options.readonly?.value);\n\n const min = (): number | undefined => {\n return toFiniteNumber(options.min?.value);\n };\n\n const max = (): number | undefined => {\n return toFiniteNumber(options.max?.value);\n };\n\n const clamp = (value: number): number => {\n return clampRange(value, min(), max());\n };\n\n const step = (): number => toPositiveStep(options.step?.value, 1);\n\n const largeStep = (): number => {\n const s = step();\n\n return toPositiveStep(options.largeStep?.value, s * 10);\n };\n\n const currentOrFallback = (): number => {\n const parsed = options.parse();\n\n if (parsed != null) return parsed;\n\n const minValue = min();\n\n if (minValue != null) return minValue;\n\n return 0;\n };\n\n const commit = (value: number | null, originalEvent?: Event): void => {\n if (value == null) {\n options.commit(null, originalEvent);\n\n return;\n }\n\n options.commit(clamp(value), originalEvent);\n };\n\n const incrementBy = (delta: number, originalEvent?: Event): void => {\n if (isBlocked()) return;\n\n commit(currentOrFallback() + delta, originalEvent);\n };\n\n const atMin = (): boolean => {\n const parsed = options.parse();\n const minValue = min();\n\n return parsed != null && minValue != null && parsed <= minValue;\n };\n\n const atMax = (): boolean => {\n const parsed = options.parse();\n const maxValue = max();\n\n return parsed != null && maxValue != null && parsed >= maxValue;\n };\n\n const handleKeydown = (event: KeyboardEvent): boolean => {\n if (isBlocked()) return false;\n\n return dispatchKeyboardAction(event, {\n keymap: {\n ArrowDown: () => incrementBy(-step(), event),\n ArrowUp: () => incrementBy(step(), event),\n End: () => {\n const maxValue = max();\n\n if (maxValue == null) return false;\n\n commit(maxValue, event);\n },\n Home: () => {\n const minValue = min();\n\n if (minValue == null) return false;\n\n commit(minValue, event);\n },\n PageDown: () => incrementBy(-largeStep(), event),\n PageUp: () => incrementBy(largeStep(), event),\n },\n preventDefault: 'after',\n });\n };\n\n return {\n atMax,\n atMin,\n handleKeydown,\n incrementBy,\n };\n};\n"],"mappings":";;;;AAyBA,IAAa,KAAwB,MAAmD;CACtF,IAAM,UAA2B,EAAQ,EAAQ,UAAU,SAAU,EAAQ,EAAQ,UAAU,OAEzF,UACG,EAAe,EAAQ,KAAK,KAAK,GAGpC,UACG,EAAe,EAAQ,KAAK,KAAK,GAGpC,KAAS,MACN,EAAW,GAAO,EAAI,GAAG,EAAI,CAAC,GAGjC,UAAqB,EAAe,EAAQ,MAAM,OAAO,CAAC,GAE1D,UAA0B;EAC9B,IAAM,IAAI,EAAK;EAEf,OAAO,EAAe,EAAQ,WAAW,OAAO,IAAI,EAAE;CACxD,GAEM,UACW,EAAQ,MAEnB,KAEa,EAEb,KAEG,GAGH,KAAU,GAAsB,MAAgC;EACpE,IAAI,KAAS,MAAM;GACjB,EAAQ,OAAO,MAAM,CAAa;GAElC;EACF;EAEA,EAAQ,OAAO,EAAM,CAAK,GAAG,CAAa;CAC5C,GAEM,KAAe,GAAe,MAAgC;EAC9D,EAAU,KAEd,EAAO,EAAkB,IAAI,GAAO,CAAa;CACnD;CA4CA,OAAO;EACL,aApC2B;GAC3B,IAAM,IAAS,EAAQ,MAAM,GACvB,IAAW,EAAI;GAErB,OAAO,KAAU,QAAQ,KAAY,QAAQ,KAAU;EACzD;EAgCE,aA5C2B;GAC3B,IAAM,IAAS,EAAQ,MAAM,GACvB,IAAW,EAAI;GAErB,OAAO,KAAU,QAAQ,KAAY,QAAQ,KAAU;EACzD;EAwCE,gBA/BqB,MACjB,EAAU,IAAU,KAEjB,EAAuB,GAAO;GACnC,QAAQ;IACN,iBAAiB,EAAY,CAAC,EAAK,GAAG,CAAK;IAC3C,eAAe,EAAY,EAAK,GAAG,CAAK;IACxC,WAAW;KACT,IAAM,IAAW,EAAI;KAErB,IAAI,KAAY,MAAM,OAAO;KAE7B,EAAO,GAAU,CAAK;IACxB;IACA,YAAY;KACV,IAAM,IAAW,EAAI;KAErB,IAAI,KAAY,MAAM,OAAO;KAE7B,EAAO,GAAU,CAAK;IACxB;IACA,gBAAgB,EAAY,CAAC,EAAU,GAAG,CAAK;IAC/C,cAAc,EAAY,EAAU,GAAG,CAAK;GAC9C;GACA,gBAAgB;EAClB,CAAC;EAOD;CACF;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"swipe.cjs","names":[],"sources":["../../src/headless/swipe.ts"],"sourcesContent":["import type { Readable } from '@vielzeug/ripple';\n\nexport type SwipeAxis = 'x' | 'y';\n\nexport type SwipeControlDetail = {\n axis: SwipeAxis;\n current: number;\n distance: number;\n event: PointerEvent;\n pointerId: number;\n progress: number;\n start: number;\n threshold: number;\n};\n\nexport type SwipeControlOptions = {\n axis?: () => SwipeAxis;\n captureTarget?: (event: PointerEvent) => HTMLElement | null;\n disabled?: Readable<boolean | undefined>;\n /** Called when the platform interrupts an in-flight swipe (`pointercancel`). */\n onCancel?: (detail: SwipeControlDetail) => void;\n onCommit?: (detail: SwipeControlDetail) => void;\n onMove?: (detail: SwipeControlDetail) => void;\n /** Called when the pointer is released (`pointerup`) without crossing the commit threshold. */\n onRelease?: (detail: SwipeControlDetail) => void;\n onStart?: (detail: SwipeControlDetail) => void;\n shouldCommit?: (detail: SwipeControlDetail) => boolean;\n threshold?: () => number;\n};\n\nexport type SwipeControl = {\n [Symbol.dispose](): void;\n /** Cancel any in-flight swipe and clean up internal state. */\n dispose: () => void;\n /** `true` after `dispose()` has been called. */\n readonly disposed: boolean;\n handlePointerCancel: (event: PointerEvent) => boolean;\n handlePointerDown: (event: PointerEvent) => boolean;\n handlePointerMove: (event: PointerEvent) => boolean;\n handlePointerUp: (event: PointerEvent) => boolean;\n isActive: () => boolean;\n};\n\ntype ActiveSwipe = {\n axis: SwipeAxis;\n pointerId: number;\n start: number;\n threshold: number;\n};\n\nconst resolveAxis = (options: SwipeControlOptions): SwipeAxis => options.axis?.() ?? 'x';\n\nconst resolveThreshold = (options: SwipeControlOptions): number => {\n const threshold = options.threshold?.() ?? 48;\n\n return Number.isFinite(threshold) && threshold > 0 ? threshold : 1;\n};\n\nconst getCoordinate = (event: PointerEvent, axis: SwipeAxis): number => {\n return axis === 'x' ? event.clientX : event.clientY;\n};\n\nconst defaultCaptureTarget = (event: PointerEvent): HTMLElement | null => {\n if (event.currentTarget instanceof HTMLElement) return event.currentTarget;\n\n if (event.target instanceof HTMLElement) return event.target;\n\n return null;\n};\n\nexport const createSwipeControl = (options: SwipeControlOptions): SwipeControl => {\n let active: ActiveSwipe | null = null;\n let disposed = false;\n\n const isDisabled = (): boolean => Boolean(options.disabled?.value);\n\n const reset = (): void => {\n active = null;\n };\n\n const dispose = (): void => {\n disposed = true;\n reset();\n };\n\n const matchesPointer = (event: PointerEvent): boolean => {\n return active?.pointerId === event.pointerId;\n };\n\n const createDetail = (event: PointerEvent): SwipeControlDetail | null => {\n if (!active) return null;\n\n const current = getCoordinate(event, active.axis);\n const distance = current - active.start;\n\n return {\n axis: active.axis,\n current,\n distance,\n event,\n pointerId: active.pointerId,\n progress: Math.min(Math.abs(distance) / active.threshold, 1),\n start: active.start,\n threshold: active.threshold,\n };\n };\n\n const handlePointerDown = (event: PointerEvent): boolean => {\n if (disposed || active || isDisabled()) return false;\n\n const axis = resolveAxis(options);\n\n active = {\n axis,\n pointerId: event.pointerId,\n start: getCoordinate(event, axis),\n threshold: resolveThreshold(options),\n };\n\n const captureTarget =\n typeof options.captureTarget === 'function' ? options.captureTarget(event) : defaultCaptureTarget(event);\n\n captureTarget?.setPointerCapture?.(event.pointerId);\n\n const detail = createDetail(event);\n\n if (detail) options.onStart?.(detail);\n\n return true;\n };\n\n const handlePointerMove = (event: PointerEvent): boolean => {\n if (!active || !matchesPointer(event)) return false;\n\n const detail = createDetail(event);\n\n if (!detail) return false;\n\n options.onMove?.(detail);\n\n const shouldCommit = options.shouldCommit?.(detail) ?? Math.abs(detail.distance) >= detail.threshold;\n\n if (!shouldCommit) return true;\n\n reset();\n options.onCommit?.(detail);\n\n return true;\n };\n\n const handlePointerUp = (event: PointerEvent): boolean => {\n if (!active || !matchesPointer(event)) return false;\n\n const detail = createDetail(event);\n\n reset();\n\n if (detail) options.onRelease?.(detail);\n\n return true;\n };\n\n const handlePointerCancel = (event: PointerEvent): boolean => {\n if (!active || !matchesPointer(event)) return false;\n\n const detail = createDetail(event);\n\n reset();\n\n if (detail) options.onCancel?.(detail);\n\n return true;\n };\n\n return {\n dispose,\n get disposed() {\n return disposed;\n },\n handlePointerCancel,\n handlePointerDown,\n handlePointerMove,\n handlePointerUp,\n isActive: () => active != null,\n [Symbol.dispose]: dispose,\n };\n};\n"],"mappings":"AAkDA,IAAM,EAAe,GAA4C,EAAQ,OAAO,GAAK,IAE/E,EAAoB,GAAyC,CACjE,IAAM,EAAY,EAAQ,YAAY,GAAK,GAE3C,OAAO,OAAO,SAAS,CAAS,GAAK,EAAY,EAAI,EAAY,CACnE,EAEM,GAAiB,EAAqB,IACnC,IAAS,IAAM,EAAM,QAAU,EAAM,QAGxC,EAAwB,GACxB,EAAM,yBAAyB,YAAoB,EAAM,cAEzD,EAAM,kBAAkB,YAAoB,EAAM,OAE/C,KAGI,EAAsB,GAA+C,CAChF,IAAI,EAA6B,KAC7B,EAAW,GAET,MAA4B,EAAQ,EAAQ,UAAU,MAEtD,MAAoB,CACxB,EAAS,IACX,EAEM,MAAsB,CAC1B,EAAW,GACX,EAAM,CACR,EAEM,EAAkB,GACf,GAAQ,YAAc,EAAM,UAG/B,EAAgB,GAAmD,CACvE,GAAI,CAAC,EAAQ,OAAO,KAEpB,IAAM,EAAU,EAAc,EAAO,EAAO,IAAI,EAC1C,EAAW,EAAU,EAAO,MAElC,MAAO,CACL,KAAM,EAAO,KACb,UACA,WACA,QACA,UAAW,EAAO,UAClB,SAAU,KAAK,IAAI,KAAK,IAAI,CAAQ,EAAI,EAAO,UAAW,CAAC,EAC3D,MAAO,EAAO,MACd,UAAW,EAAO,SACpB,CACF,EAqEA,MAAO,CACL,UACA,IAAI,UAAW,CACb,OAAO,CACT,EACA,oBAjB2B,GAAiC,CAC5D,GAAI,CAAC,GAAU,CAAC,EAAe,CAAK,EAAG,MAAO,GAE9C,IAAM,EAAS,EAAa,CAAK,EAMjC,OAJA,EAAM,EAEF,GAAQ,EAAQ,WAAW,CAAM,EAE9B,EACT,EAQE,kBAzEyB,GAAiC,CAC1D,GAAI,GAAY,GAAU,EAAW,EAAG,MAAO,GAE/C,IAAM,EAAO,EAAY,CAAO,EAEhC,EAAS,CACP,OACA,UAAW,EAAM,UACjB,MAAO,EAAc,EAAO,CAAI,EAChC,UAAW,EAAiB,CAAO,CACrC,GAGE,OAAO,EAAQ,eAAkB,WAAa,EAAQ,cAAc,CAAK,EAAI,EAAqB,CAAK,EAAA,EAE1F,oBAAoB,EAAM,SAAS,EAElD,IAAM,EAAS,EAAa,CAAK,EAIjC,OAFI,GAAQ,EAAQ,UAAU,CAAM,EAE7B,EACT,EAoDE,kBAlDyB,GAAiC,CAC1D,GAAI,CAAC,GAAU,CAAC,EAAe,CAAK,EAAG,MAAO,GAE9C,IAAM,EAAS,EAAa,CAAK,EAajC,OAXK,GAEL,EAAQ,SAAS,CAAM,EAEF,EAAQ,eAAe,CAAM,GAAK,KAAK,IAAI,EAAO,QAAQ,GAAK,EAAO,WAI3F,EAAM,EACN,EAAQ,WAAW,CAAM,EAElB,IALmB,IANN,EAYtB,EAkCE,gBAhCuB,GAAiC,CACxD,GAAI,CAAC,GAAU,CAAC,EAAe,CAAK,EAAG,MAAO,GAE9C,IAAM,EAAS,EAAa,CAAK,EAMjC,OAJA,EAAM,EAEF,GAAQ,EAAQ,YAAY,CAAM,EAE/B,EACT,EAuBE,aAAgB,GAAU,MACzB,OAAO,SAAU,CACpB,CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"swipe.d.ts","sourceRoot":"","sources":["../../src/headless/swipe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,CAAC;AAElC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,YAAY,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,CAAC,EAAE,MAAM,SAAS,CAAC;IACvB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,WAAW,GAAG,IAAI,CAAC;IAC5D,QAAQ,CAAC,EAAE,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IACzC,gFAAgF;IAChF,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAChD,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC9C,+FAA+F;IAC/F,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACjD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC/C,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,OAAO,CAAC;IACvD,SAAS,CAAC,EAAE,MAAM,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;IACzB,8DAA8D;IAC9D,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,gDAAgD;IAChD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,mBAAmB,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC;IACtD,iBAAiB,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC;IACpD,iBAAiB,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC;IACpD,eAAe,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC;IAClD,QAAQ,EAAE,MAAM,OAAO,CAAC;CACzB,CAAC;AA6BF,eAAO,MAAM,kBAAkB,GAAI,SAAS,mBAAmB,KAAG,YAoHjE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"swipe.js","names":[],"sources":["../../src/headless/swipe.ts"],"sourcesContent":["import type { Readable } from '@vielzeug/ripple';\n\nexport type SwipeAxis = 'x' | 'y';\n\nexport type SwipeControlDetail = {\n axis: SwipeAxis;\n current: number;\n distance: number;\n event: PointerEvent;\n pointerId: number;\n progress: number;\n start: number;\n threshold: number;\n};\n\nexport type SwipeControlOptions = {\n axis?: () => SwipeAxis;\n captureTarget?: (event: PointerEvent) => HTMLElement | null;\n disabled?: Readable<boolean | undefined>;\n /** Called when the platform interrupts an in-flight swipe (`pointercancel`). */\n onCancel?: (detail: SwipeControlDetail) => void;\n onCommit?: (detail: SwipeControlDetail) => void;\n onMove?: (detail: SwipeControlDetail) => void;\n /** Called when the pointer is released (`pointerup`) without crossing the commit threshold. */\n onRelease?: (detail: SwipeControlDetail) => void;\n onStart?: (detail: SwipeControlDetail) => void;\n shouldCommit?: (detail: SwipeControlDetail) => boolean;\n threshold?: () => number;\n};\n\nexport type SwipeControl = {\n [Symbol.dispose](): void;\n /** Cancel any in-flight swipe and clean up internal state. */\n dispose: () => void;\n /** `true` after `dispose()` has been called. */\n readonly disposed: boolean;\n handlePointerCancel: (event: PointerEvent) => boolean;\n handlePointerDown: (event: PointerEvent) => boolean;\n handlePointerMove: (event: PointerEvent) => boolean;\n handlePointerUp: (event: PointerEvent) => boolean;\n isActive: () => boolean;\n};\n\ntype ActiveSwipe = {\n axis: SwipeAxis;\n pointerId: number;\n start: number;\n threshold: number;\n};\n\nconst resolveAxis = (options: SwipeControlOptions): SwipeAxis => options.axis?.() ?? 'x';\n\nconst resolveThreshold = (options: SwipeControlOptions): number => {\n const threshold = options.threshold?.() ?? 48;\n\n return Number.isFinite(threshold) && threshold > 0 ? threshold : 1;\n};\n\nconst getCoordinate = (event: PointerEvent, axis: SwipeAxis): number => {\n return axis === 'x' ? event.clientX : event.clientY;\n};\n\nconst defaultCaptureTarget = (event: PointerEvent): HTMLElement | null => {\n if (event.currentTarget instanceof HTMLElement) return event.currentTarget;\n\n if (event.target instanceof HTMLElement) return event.target;\n\n return null;\n};\n\nexport const createSwipeControl = (options: SwipeControlOptions): SwipeControl => {\n let active: ActiveSwipe | null = null;\n let disposed = false;\n\n const isDisabled = (): boolean => Boolean(options.disabled?.value);\n\n const reset = (): void => {\n active = null;\n };\n\n const dispose = (): void => {\n disposed = true;\n reset();\n };\n\n const matchesPointer = (event: PointerEvent): boolean => {\n return active?.pointerId === event.pointerId;\n };\n\n const createDetail = (event: PointerEvent): SwipeControlDetail | null => {\n if (!active) return null;\n\n const current = getCoordinate(event, active.axis);\n const distance = current - active.start;\n\n return {\n axis: active.axis,\n current,\n distance,\n event,\n pointerId: active.pointerId,\n progress: Math.min(Math.abs(distance) / active.threshold, 1),\n start: active.start,\n threshold: active.threshold,\n };\n };\n\n const handlePointerDown = (event: PointerEvent): boolean => {\n if (disposed || active || isDisabled()) return false;\n\n const axis = resolveAxis(options);\n\n active = {\n axis,\n pointerId: event.pointerId,\n start: getCoordinate(event, axis),\n threshold: resolveThreshold(options),\n };\n\n const captureTarget =\n typeof options.captureTarget === 'function' ? options.captureTarget(event) : defaultCaptureTarget(event);\n\n captureTarget?.setPointerCapture?.(event.pointerId);\n\n const detail = createDetail(event);\n\n if (detail) options.onStart?.(detail);\n\n return true;\n };\n\n const handlePointerMove = (event: PointerEvent): boolean => {\n if (!active || !matchesPointer(event)) return false;\n\n const detail = createDetail(event);\n\n if (!detail) return false;\n\n options.onMove?.(detail);\n\n const shouldCommit = options.shouldCommit?.(detail) ?? Math.abs(detail.distance) >= detail.threshold;\n\n if (!shouldCommit) return true;\n\n reset();\n options.onCommit?.(detail);\n\n return true;\n };\n\n const handlePointerUp = (event: PointerEvent): boolean => {\n if (!active || !matchesPointer(event)) return false;\n\n const detail = createDetail(event);\n\n reset();\n\n if (detail) options.onRelease?.(detail);\n\n return true;\n };\n\n const handlePointerCancel = (event: PointerEvent): boolean => {\n if (!active || !matchesPointer(event)) return false;\n\n const detail = createDetail(event);\n\n reset();\n\n if (detail) options.onCancel?.(detail);\n\n return true;\n };\n\n return {\n dispose,\n get disposed() {\n return disposed;\n },\n handlePointerCancel,\n handlePointerDown,\n handlePointerMove,\n handlePointerUp,\n isActive: () => active != null,\n [Symbol.dispose]: dispose,\n };\n};\n"],"mappings":";AAkDA,IAAM,KAAe,MAA4C,EAAQ,OAAO,KAAK,KAE/E,KAAoB,MAAyC;CACjE,IAAM,IAAY,EAAQ,YAAY,KAAK;CAE3C,OAAO,OAAO,SAAS,CAAS,KAAK,IAAY,IAAI,IAAY;AACnE,GAEM,KAAiB,GAAqB,MACnC,MAAS,MAAM,EAAM,UAAU,EAAM,SAGxC,KAAwB,MACxB,EAAM,yBAAyB,cAAoB,EAAM,gBAEzD,EAAM,kBAAkB,cAAoB,EAAM,SAE/C,MAGI,KAAsB,MAA+C;CAChF,IAAI,IAA6B,MAC7B,IAAW,IAET,UAA4B,EAAQ,EAAQ,UAAU,OAEtD,UAAoB;EACxB,IAAS;CACX,GAEM,UAAsB;EAE1B,AADA,IAAW,IACX,EAAM;CACR,GAEM,KAAkB,MACf,GAAQ,cAAc,EAAM,WAG/B,KAAgB,MAAmD;EACvE,IAAI,CAAC,GAAQ,OAAO;EAEpB,IAAM,IAAU,EAAc,GAAO,EAAO,IAAI,GAC1C,IAAW,IAAU,EAAO;EAElC,OAAO;GACL,MAAM,EAAO;GACb;GACA;GACA;GACA,WAAW,EAAO;GAClB,UAAU,KAAK,IAAI,KAAK,IAAI,CAAQ,IAAI,EAAO,WAAW,CAAC;GAC3D,OAAO,EAAO;GACd,WAAW,EAAO;EACpB;CACF;CAqEA,OAAO;EACL;EACA,IAAI,WAAW;GACb,OAAO;EACT;EACA,sBAjB2B,MAAiC;GAC5D,IAAI,CAAC,KAAU,CAAC,EAAe,CAAK,GAAG,OAAO;GAE9C,IAAM,IAAS,EAAa,CAAK;GAMjC,OAJA,EAAM,GAEF,KAAQ,EAAQ,WAAW,CAAM,GAE9B;EACT;EAQE,oBAzEyB,MAAiC;GAC1D,IAAI,KAAY,KAAU,EAAW,GAAG,OAAO;GAE/C,IAAM,IAAO,EAAY,CAAO;GAYhC,AAVA,IAAS;IACP;IACA,WAAW,EAAM;IACjB,OAAO,EAAc,GAAO,CAAI;IAChC,WAAW,EAAiB,CAAO;GACrC,IAGE,OAAO,EAAQ,iBAAkB,aAAa,EAAQ,cAAc,CAAK,IAAI,EAAqB,CAAK,EAAA,EAE1F,oBAAoB,EAAM,SAAS;GAElD,IAAM,IAAS,EAAa,CAAK;GAIjC,OAFI,KAAQ,EAAQ,UAAU,CAAM,GAE7B;EACT;EAoDE,oBAlDyB,MAAiC;GAC1D,IAAI,CAAC,KAAU,CAAC,EAAe,CAAK,GAAG,OAAO;GAE9C,IAAM,IAAS,EAAa,CAAK;GAajC,OAXK,KAEL,EAAQ,SAAS,CAAM,GAEF,EAAQ,eAAe,CAAM,KAAK,KAAK,IAAI,EAAO,QAAQ,KAAK,EAAO,aAI3F,EAAM,GACN,EAAQ,WAAW,CAAM,GAElB,MALmB,MANN;EAYtB;EAkCE,kBAhCuB,MAAiC;GACxD,IAAI,CAAC,KAAU,CAAC,EAAe,CAAK,GAAG,OAAO;GAE9C,IAAM,IAAS,EAAa,CAAK;GAMjC,OAJA,EAAM,GAEF,KAAQ,EAAQ,YAAY,CAAM,GAE/B;EACT;EAuBE,gBAAgB,KAAU;GACzB,OAAO,UAAU;CACpB;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"text-field.cjs","names":[],"sources":["../../src/headless/text-field.ts"],"sourcesContent":["import { computed, type Readable, type Signal } from '@vielzeug/ripple';\n\nimport { type CounterState, createCounterState, createField, type FieldHandle, type FieldOptions } from './field-base';\nimport { syncedSignal } from './signals';\n\n// ── Text field ────────────────────────────────────────────────────────────────\n\n/** Detach function returned by `wire()`. Call to remove element listeners. */\nexport type TextFieldDetach = () => void;\n\nexport type TextFieldOptions = FieldOptions & {\n maxLength?: Readable<number | undefined>;\n /**\n * Called synchronously before value extraction on every input event.\n * Use only for DOM side-effects (e.g. auto-resize measurement) that must\n * run before the reactive value is updated.\n */\n onBeforeInput?: (event: Event) => void;\n onBlur?: (event: FocusEvent) => void;\n onChange?: (event: Event, value: string) => void;\n onFocus?: (event: FocusEvent) => void;\n onInput?: (event: Event, value: string) => void;\n /**\n * Bars the field from constraint validation while true — matches the native HTML rule that a\n * `readonly` field is never a candidate for constraint validation (a `readonly required`\n * field is always valid, per spec), so `validity`/`validationMessage` don't feed a false\n * `valueMissing` into `useField()` just because a read-only field happens to be blank.\n */\n readonly?: Readable<boolean | undefined>;\n /** Marks a blank value invalid — feeds `validity`/`validationMessage` (see below). */\n required?: Readable<boolean | undefined>;\n /** Message for the blank+required case. Defaults to `'This field is required.'`. */\n requiredMessage?: Readable<string | undefined>;\n /** `AbortSignal` from the component lifecycle. The internal value-sync watcher is disposed on abort. */\n signal: AbortSignal;\n value: Readable<string | undefined>;\n};\n\nexport type TextFieldHandle = FieldHandle & {\n /**\n * Registers the real form field handle (the return value of `useField()`) so that\n * `triggerValidation()` — called internally on blur/change — can call its\n * `reportValidity()`. `useField()` itself needs `value` (below) to exist first, so this\n * is a two-step wiring rather than a constructor option:\n *\n * ```ts\n * const tf = createTextField({ value: props.value, ... });\n * const formField = useField({ value: tf.value, ... });\n * tf.attachFormField(formField);\n * ```\n */\n attachFormField: (formField: { reportValidity(): void }) => void;\n /** Clears the field value and fires synthetic input/change events. */\n clear: (event?: Event) => void;\n /**\n * Reactive counter state. Non-null when `maxLength` was provided; `null` otherwise.\n * Components should only render a counter element when this is non-null.\n */\n counter: Readable<CounterState> | null;\n /**\n * Restores the value to whatever the `value` option currently holds (native form\n * `reset()` semantics: a `<input>` reverts to its *current* `value` content attribute,\n * not a frozen snapshot from element creation — so setting the attribute programmatically\n * after mount changes what a later reset reverts to). Wire into `useField({ onReset: tf.reset })`.\n */\n reset: () => void;\n /** Reactive validation message paired with `validity`. Empty string when valid. */\n validationMessage: Readable<string>;\n /**\n * Reactive `ValidityStateFlags` — `{ valueMissing: true }` while `required` and blank,\n * `null` (valid) otherwise. Pass straight to `useField({ validity: tf.validity })`.\n */\n validity: Readable<ValidityStateFlags | null>;\n /** The local mutable field value (two-way bound to the input element via `wire()`). */\n value: Signal<string>;\n /**\n * Attaches event listeners to the underlying input or textarea element.\n *\n * When `signal` is provided, the listeners are detached automatically when\n * the signal's controller calls `abort()`. Without a signal the returned\n * `TextFieldDetach` must be called manually.\n *\n * Safe to call multiple times — each call attaches a fresh set of listeners\n * and returns a distinct detach function. Calling detach multiple times is\n * a no-op (guarded internally).\n */\n wire: (el: HTMLInputElement | HTMLTextAreaElement, signal?: AbortSignal) => TextFieldDetach;\n};\n\nconst isBlank = (value: string): boolean => value.trim() === '';\nconst toFieldValue = (v: string | undefined): string => String(v ?? '');\n\nexport const createTextField = (options: TextFieldOptions): TextFieldHandle => {\n const value = syncedSignal(options.value, options.signal, toFieldValue);\n\n const field = createField(options);\n const counter = options.maxLength ? createCounterState({ maxLength: options.maxLength, value }) : null;\n\n const validity = computed<ValidityStateFlags | null>(() =>\n !options.readonly?.value && options.required?.value && isBlank(value.value) ? { valueMissing: true } : null,\n );\n const validationMessage = computed(() =>\n validity.value ? options.requiredMessage?.value || 'This field is required.' : '',\n );\n\n const reset = (): void => {\n value.value = toFieldValue(options.value.value);\n field.triggerValidation('change');\n };\n\n const clear = (event?: Event): void => {\n event?.preventDefault?.();\n value.value = '';\n options.onInput?.(event ?? new InputEvent('input', { bubbles: true }), '');\n options.onChange?.(event ?? new Event('change', { bubbles: true }), '');\n field.triggerValidation('change');\n };\n\n const wire = (element: HTMLInputElement | HTMLTextAreaElement, signal?: AbortSignal): TextFieldDetach => {\n const cleanups: Array<() => void> = [];\n const on = (type: string, handler: EventListener): void => {\n element.addEventListener(type, handler);\n cleanups.push(() => element.removeEventListener(type, handler));\n };\n\n if (options.onFocus) {\n on('focus', (e) => options.onFocus!(e as FocusEvent));\n }\n\n on('input', (e) => {\n e.stopPropagation();\n options.onBeforeInput?.(e);\n value.value = element.value;\n options.onInput?.(e, element.value);\n });\n\n on('change', (e) => {\n e.stopPropagation();\n value.value = element.value;\n options.onChange?.(e, element.value);\n field.triggerValidation('change');\n });\n\n on('blur', (e) => {\n options.onBlur?.(e as FocusEvent);\n field.triggerValidation('blur');\n });\n\n let detached = false;\n const detach = (): void => {\n if (detached) return;\n\n detached = true;\n for (const dispose of cleanups) dispose();\n };\n\n signal?.addEventListener('abort', detach, { once: true });\n\n return detach;\n };\n\n return { ...field, clear, counter, reset, validationMessage, validity, value, wire };\n};\n"],"mappings":"iGAyFA,IAAM,EAAW,GAA2B,EAAM,KAAK,IAAM,GACvD,EAAgB,GAAkC,OAAO,GAAK,EAAE,EAEzD,EAAmB,GAA+C,CAC7E,IAAM,EAAQ,EAAA,aAAa,EAAQ,MAAO,EAAQ,OAAQ,CAAY,EAEhE,EAAQ,EAAA,YAAY,CAAO,EAC3B,EAAU,EAAQ,UAAY,EAAA,mBAAmB,CAAE,UAAW,EAAQ,UAAW,OAAM,CAAC,EAAI,KAE5F,GAAA,EAAA,EAAA,SAAA,KACJ,CAAC,EAAQ,UAAU,OAAS,EAAQ,UAAU,OAAS,EAAQ,EAAM,KAAK,EAAI,CAAE,aAAc,EAAK,EAAI,IACzG,EACM,GAAA,EAAA,EAAA,SAAA,KACJ,EAAS,MAAQ,EAAQ,iBAAiB,OAAS,0BAA4B,EACjF,EAEM,MAAoB,CACxB,EAAM,MAAQ,EAAa,EAAQ,MAAM,KAAK,EAC9C,EAAM,kBAAkB,QAAQ,CAClC,EAEM,EAAS,GAAwB,CACrC,GAAO,iBAAiB,EACxB,EAAM,MAAQ,GACd,EAAQ,UAAU,GAAS,IAAI,WAAW,QAAS,CAAE,QAAS,EAAK,CAAC,EAAG,EAAE,EACzE,EAAQ,WAAW,GAAS,IAAI,MAAM,SAAU,CAAE,QAAS,EAAK,CAAC,EAAG,EAAE,EACtE,EAAM,kBAAkB,QAAQ,CAClC,EAEM,GAAQ,EAAiD,IAA0C,CACvG,IAAM,EAA8B,CAAC,EAC/B,GAAM,EAAc,IAAiC,CACzD,EAAQ,iBAAiB,EAAM,CAAO,EACtC,EAAS,SAAW,EAAQ,oBAAoB,EAAM,CAAO,CAAC,CAChE,EAEI,EAAQ,SACV,EAAG,QAAU,GAAM,EAAQ,QAAS,CAAe,CAAC,EAGtD,EAAG,QAAU,GAAM,CACjB,EAAE,gBAAgB,EAClB,EAAQ,gBAAgB,CAAC,EACzB,EAAM,MAAQ,EAAQ,MACtB,EAAQ,UAAU,EAAG,EAAQ,KAAK,CACpC,CAAC,EAED,EAAG,SAAW,GAAM,CAClB,EAAE,gBAAgB,EAClB,EAAM,MAAQ,EAAQ,MACtB,EAAQ,WAAW,EAAG,EAAQ,KAAK,EACnC,EAAM,kBAAkB,QAAQ,CAClC,CAAC,EAED,EAAG,OAAS,GAAM,CAChB,EAAQ,SAAS,CAAe,EAChC,EAAM,kBAAkB,MAAM,CAChC,CAAC,EAED,IAAI,EAAW,GACT,MAAqB,CACrB,MAEJ,GAAW,GACX,IAAK,IAAM,KAAW,EAAU,EAAQ,CAD7B,CAEb,EAIA,OAFA,GAAQ,iBAAiB,QAAS,EAAQ,CAAE,KAAM,EAAK,CAAC,EAEjD,CACT,EAEA,MAAO,CAAE,GAAG,EAAO,QAAO,UAAS,QAAO,oBAAmB,WAAU,QAAO,MAAK,CACrF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"text-field.d.ts","sourceRoot":"","sources":["../../src/headless/text-field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,QAAQ,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAExE,OAAO,EAAE,KAAK,YAAY,EAAmC,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAKvH,8EAA8E;AAC9E,MAAM,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC;AAEzC,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG;IAC5C,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACvC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IACzC,sFAAsF;IACtF,QAAQ,CAAC,EAAE,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IACzC,oFAAoF;IACpF,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC/C,wGAAwG;IACxG,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG;IAC1C;;;;;;;;;;;OAWG;IACH,eAAe,EAAE,CAAC,SAAS,EAAE;QAAE,cAAc,IAAI,IAAI,CAAA;KAAE,KAAK,IAAI,CAAC;IACjE,sEAAsE;IACtE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IAC/B;;;OAGG;IACH,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;IACvC;;;;;OAKG;IACH,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,mFAAmF;IACnF,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACpC;;;OAGG;IACH,QAAQ,EAAE,QAAQ,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IAC9C,uFAAuF;IACvF,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACtB;;;;;;;;;;OAUG;IACH,IAAI,EAAE,CAAC,EAAE,EAAE,gBAAgB,GAAG,mBAAmB,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,eAAe,CAAC;CAC7F,CAAC;AAKF,eAAO,MAAM,eAAe,GAAI,SAAS,gBAAgB,KAAG,eAsE3D,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"text-field.js","names":[],"sources":["../../src/headless/text-field.ts"],"sourcesContent":["import { computed, type Readable, type Signal } from '@vielzeug/ripple';\n\nimport { type CounterState, createCounterState, createField, type FieldHandle, type FieldOptions } from './field-base';\nimport { syncedSignal } from './signals';\n\n// ── Text field ────────────────────────────────────────────────────────────────\n\n/** Detach function returned by `wire()`. Call to remove element listeners. */\nexport type TextFieldDetach = () => void;\n\nexport type TextFieldOptions = FieldOptions & {\n maxLength?: Readable<number | undefined>;\n /**\n * Called synchronously before value extraction on every input event.\n * Use only for DOM side-effects (e.g. auto-resize measurement) that must\n * run before the reactive value is updated.\n */\n onBeforeInput?: (event: Event) => void;\n onBlur?: (event: FocusEvent) => void;\n onChange?: (event: Event, value: string) => void;\n onFocus?: (event: FocusEvent) => void;\n onInput?: (event: Event, value: string) => void;\n /**\n * Bars the field from constraint validation while true — matches the native HTML rule that a\n * `readonly` field is never a candidate for constraint validation (a `readonly required`\n * field is always valid, per spec), so `validity`/`validationMessage` don't feed a false\n * `valueMissing` into `useField()` just because a read-only field happens to be blank.\n */\n readonly?: Readable<boolean | undefined>;\n /** Marks a blank value invalid — feeds `validity`/`validationMessage` (see below). */\n required?: Readable<boolean | undefined>;\n /** Message for the blank+required case. Defaults to `'This field is required.'`. */\n requiredMessage?: Readable<string | undefined>;\n /** `AbortSignal` from the component lifecycle. The internal value-sync watcher is disposed on abort. */\n signal: AbortSignal;\n value: Readable<string | undefined>;\n};\n\nexport type TextFieldHandle = FieldHandle & {\n /**\n * Registers the real form field handle (the return value of `useField()`) so that\n * `triggerValidation()` — called internally on blur/change — can call its\n * `reportValidity()`. `useField()` itself needs `value` (below) to exist first, so this\n * is a two-step wiring rather than a constructor option:\n *\n * ```ts\n * const tf = createTextField({ value: props.value, ... });\n * const formField = useField({ value: tf.value, ... });\n * tf.attachFormField(formField);\n * ```\n */\n attachFormField: (formField: { reportValidity(): void }) => void;\n /** Clears the field value and fires synthetic input/change events. */\n clear: (event?: Event) => void;\n /**\n * Reactive counter state. Non-null when `maxLength` was provided; `null` otherwise.\n * Components should only render a counter element when this is non-null.\n */\n counter: Readable<CounterState> | null;\n /**\n * Restores the value to whatever the `value` option currently holds (native form\n * `reset()` semantics: a `<input>` reverts to its *current* `value` content attribute,\n * not a frozen snapshot from element creation — so setting the attribute programmatically\n * after mount changes what a later reset reverts to). Wire into `useField({ onReset: tf.reset })`.\n */\n reset: () => void;\n /** Reactive validation message paired with `validity`. Empty string when valid. */\n validationMessage: Readable<string>;\n /**\n * Reactive `ValidityStateFlags` — `{ valueMissing: true }` while `required` and blank,\n * `null` (valid) otherwise. Pass straight to `useField({ validity: tf.validity })`.\n */\n validity: Readable<ValidityStateFlags | null>;\n /** The local mutable field value (two-way bound to the input element via `wire()`). */\n value: Signal<string>;\n /**\n * Attaches event listeners to the underlying input or textarea element.\n *\n * When `signal` is provided, the listeners are detached automatically when\n * the signal's controller calls `abort()`. Without a signal the returned\n * `TextFieldDetach` must be called manually.\n *\n * Safe to call multiple times — each call attaches a fresh set of listeners\n * and returns a distinct detach function. Calling detach multiple times is\n * a no-op (guarded internally).\n */\n wire: (el: HTMLInputElement | HTMLTextAreaElement, signal?: AbortSignal) => TextFieldDetach;\n};\n\nconst isBlank = (value: string): boolean => value.trim() === '';\nconst toFieldValue = (v: string | undefined): string => String(v ?? '');\n\nexport const createTextField = (options: TextFieldOptions): TextFieldHandle => {\n const value = syncedSignal(options.value, options.signal, toFieldValue);\n\n const field = createField(options);\n const counter = options.maxLength ? createCounterState({ maxLength: options.maxLength, value }) : null;\n\n const validity = computed<ValidityStateFlags | null>(() =>\n !options.readonly?.value && options.required?.value && isBlank(value.value) ? { valueMissing: true } : null,\n );\n const validationMessage = computed(() =>\n validity.value ? options.requiredMessage?.value || 'This field is required.' : '',\n );\n\n const reset = (): void => {\n value.value = toFieldValue(options.value.value);\n field.triggerValidation('change');\n };\n\n const clear = (event?: Event): void => {\n event?.preventDefault?.();\n value.value = '';\n options.onInput?.(event ?? new InputEvent('input', { bubbles: true }), '');\n options.onChange?.(event ?? new Event('change', { bubbles: true }), '');\n field.triggerValidation('change');\n };\n\n const wire = (element: HTMLInputElement | HTMLTextAreaElement, signal?: AbortSignal): TextFieldDetach => {\n const cleanups: Array<() => void> = [];\n const on = (type: string, handler: EventListener): void => {\n element.addEventListener(type, handler);\n cleanups.push(() => element.removeEventListener(type, handler));\n };\n\n if (options.onFocus) {\n on('focus', (e) => options.onFocus!(e as FocusEvent));\n }\n\n on('input', (e) => {\n e.stopPropagation();\n options.onBeforeInput?.(e);\n value.value = element.value;\n options.onInput?.(e, element.value);\n });\n\n on('change', (e) => {\n e.stopPropagation();\n value.value = element.value;\n options.onChange?.(e, element.value);\n field.triggerValidation('change');\n });\n\n on('blur', (e) => {\n options.onBlur?.(e as FocusEvent);\n field.triggerValidation('blur');\n });\n\n let detached = false;\n const detach = (): void => {\n if (detached) return;\n\n detached = true;\n for (const dispose of cleanups) dispose();\n };\n\n signal?.addEventListener('abort', detach, { once: true });\n\n return detach;\n };\n\n return { ...field, clear, counter, reset, validationMessage, validity, value, wire };\n};\n"],"mappings":";;;;AAyFA,IAAM,KAAW,MAA2B,EAAM,KAAK,MAAM,IACvD,KAAgB,MAAkC,OAAO,KAAK,EAAE,GAEzD,KAAmB,MAA+C;CAC7E,IAAM,IAAQ,EAAa,EAAQ,OAAO,EAAQ,QAAQ,CAAY,GAEhE,IAAQ,EAAY,CAAO,GAC3B,IAAU,EAAQ,YAAY,EAAmB;EAAE,WAAW,EAAQ;EAAW;CAAM,CAAC,IAAI,MAE5F,IAAW,QACf,CAAC,EAAQ,UAAU,SAAS,EAAQ,UAAU,SAAS,EAAQ,EAAM,KAAK,IAAI,EAAE,cAAc,GAAK,IAAI,IACzG,GACM,IAAoB,QACxB,EAAS,QAAQ,EAAQ,iBAAiB,SAAS,4BAA4B,EACjF,GAEM,UAAoB;EAExB,AADA,EAAM,QAAQ,EAAa,EAAQ,MAAM,KAAK,GAC9C,EAAM,kBAAkB,QAAQ;CAClC,GAEM,KAAS,MAAwB;EAKrC,AAJA,GAAO,iBAAiB,GACxB,EAAM,QAAQ,IACd,EAAQ,UAAU,KAAS,IAAI,WAAW,SAAS,EAAE,SAAS,GAAK,CAAC,GAAG,EAAE,GACzE,EAAQ,WAAW,KAAS,IAAI,MAAM,UAAU,EAAE,SAAS,GAAK,CAAC,GAAG,EAAE,GACtE,EAAM,kBAAkB,QAAQ;CAClC,GAEM,KAAQ,GAAiD,MAA0C;EACvG,IAAM,IAA8B,CAAC,GAC/B,KAAM,GAAc,MAAiC;GAEzD,AADA,EAAQ,iBAAiB,GAAM,CAAO,GACtC,EAAS,WAAW,EAAQ,oBAAoB,GAAM,CAAO,CAAC;EAChE;EAoBA,AAlBI,EAAQ,WACV,EAAG,UAAU,MAAM,EAAQ,QAAS,CAAe,CAAC,GAGtD,EAAG,UAAU,MAAM;GAIjB,AAHA,EAAE,gBAAgB,GAClB,EAAQ,gBAAgB,CAAC,GACzB,EAAM,QAAQ,EAAQ,OACtB,EAAQ,UAAU,GAAG,EAAQ,KAAK;EACpC,CAAC,GAED,EAAG,WAAW,MAAM;GAIlB,AAHA,EAAE,gBAAgB,GAClB,EAAM,QAAQ,EAAQ,OACtB,EAAQ,WAAW,GAAG,EAAQ,KAAK,GACnC,EAAM,kBAAkB,QAAQ;EAClC,CAAC,GAED,EAAG,SAAS,MAAM;GAEhB,AADA,EAAQ,SAAS,CAAe,GAChC,EAAM,kBAAkB,MAAM;EAChC,CAAC;EAED,IAAI,IAAW,IACT,UAAqB;GACrB,QAEJ;QAAW;IACX,KAAK,IAAM,KAAW,GAAU,EAAQ;GAD7B;EAEb;EAIA,OAFA,GAAQ,iBAAiB,SAAS,GAAQ,EAAE,MAAM,GAAK,CAAC,GAEjD;CACT;CAEA,OAAO;EAAE,GAAG;EAAO;EAAO;EAAS;EAAO;EAAmB;EAAU;EAAO;CAAK;AACrF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"typeahead.cjs","names":[],"sources":["../../src/headless/typeahead.ts"],"sourcesContent":["// ── Typeahead ─────────────────────────────────────────────────────────────────\n// Standalone typeahead primitive: accumulates printable keystrokes, then finds\n// the first enabled item whose label starts with the buffer.\n//\n// Extracted from nav.ts so it can be reused independently (e.g. combobox input).\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport type TypeaheadOptions<T> = {\n /**\n * Milliseconds of inactivity before the buffer resets.\n * ARIA APG recommended window. Default: `500`.\n */\n delay?: number;\n /** Returns the current focused index (used to search forward from current + 1). */\n getIndex: () => number;\n /** Returns a plain-text label for the item at `index`. */\n getItemLabel: (item: T, index: number) => string;\n /** Returns all items in the current list. */\n getItems: () => T[];\n /** Returns `true` for items that should be skipped during typeahead search. */\n isItemDisabled?: (item: T, index: number) => boolean;\n /** Called when typeahead navigation lands on an item. */\n onNavigate: (index: number, event: KeyboardEvent) => void;\n /**\n * When provided, the pending reset timer is cancelled automatically when the\n * signal aborts (e.g. when the owning component disconnects).\n */\n signal?: AbortSignal;\n};\n\nexport type Typeahead = {\n /**\n * Process a keyboard event. Returns `true` if the event was consumed by\n * typeahead (a printable character matched or was buffered).\n */\n handleKeydown(event: KeyboardEvent): boolean;\n /** Reset the buffer immediately. Call on list close to clear stale input. */\n reset(): void;\n};\n\n// ── Implementation ────────────────────────────────────────────────────────────\n\n/**\n * Creates a standalone typeahead handler for keyboard-navigable lists.\n *\n * Accumulates printable keystrokes into a buffer; on each keystroke searches\n * for the first enabled item whose label starts with the buffer. Cycles past\n * the current item on repeated same-character presses. Buffer resets after\n * `delay` ms of inactivity (default 500 — the ARIA APG recommended window).\n *\n * @example\n * ```ts\n * const typeahead = createTypeahead({\n * getIndex: () => focusedIndex,\n * getItemLabel: (item) => item.label,\n * getItems: () => items,\n * onNavigate: (index) => { focusedIndex = index; },\n * });\n *\n * listEl.addEventListener('keydown', (e) => typeahead.handleKeydown(e));\n * ```\n */\nexport const createTypeahead = <T>(options: TypeaheadOptions<T>): Typeahead => {\n const delay = options.delay ?? 500;\n let _buffer = '';\n let _timer: ReturnType<typeof setTimeout> | null = null;\n\n const reset = (): void => {\n _buffer = '';\n\n if (_timer !== null) {\n clearTimeout(_timer);\n _timer = null;\n }\n };\n\n options.signal?.addEventListener('abort', reset, { once: true });\n\n const handleKeydown = (event: KeyboardEvent): boolean => {\n // Single printable character only; exclude modifier combos.\n if (event.key.length !== 1 || event.ctrlKey || event.altKey || event.metaKey) return false;\n\n _buffer += event.key.toLowerCase();\n\n if (_timer !== null) clearTimeout(_timer);\n\n _timer = setTimeout(reset, delay);\n\n const items = options.getItems();\n const current = options.getIndex();\n const startAfter = current >= 0 ? current + 1 : 0;\n\n for (let n = 0; n < items.length; n++) {\n const i = (startAfter + n) % items.length;\n\n if (options.isItemDisabled?.(items[i], i)) continue;\n\n if (options.getItemLabel(items[i], i).toLowerCase().startsWith(_buffer)) {\n options.onNavigate(i, event);\n\n return true;\n }\n }\n\n return false;\n };\n\n return { handleKeydown, reset };\n};\n"],"mappings":"AA+DA,IAAa,EAAsB,GAA4C,CAC7E,IAAM,EAAQ,EAAQ,OAAS,IAC3B,EAAU,GACV,EAA+C,KAE7C,MAAoB,CACxB,EAAU,GAEN,IAAW,OACb,aAAa,CAAM,EACnB,EAAS,KAEb,EAiCA,OA/BA,EAAQ,QAAQ,iBAAiB,QAAS,EAAO,CAAE,KAAM,EAAK,CAAC,EA+BxD,CAAE,cA7Bc,GAAkC,CAEvD,GAAI,EAAM,IAAI,SAAW,GAAK,EAAM,SAAW,EAAM,QAAU,EAAM,QAAS,MAAO,GAErF,GAAW,EAAM,IAAI,YAAY,EAE7B,IAAW,MAAM,aAAa,CAAM,EAExC,EAAS,WAAW,EAAO,CAAK,EAEhC,IAAM,EAAQ,EAAQ,SAAS,EACzB,EAAU,EAAQ,SAAS,EAC3B,EAAa,GAAW,EAAI,EAAU,EAAI,EAEhD,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACrC,IAAM,GAAK,EAAa,GAAK,EAAM,OAE/B,MAAQ,iBAAiB,EAAM,GAAI,CAAC,GAEpC,EAAQ,aAAa,EAAM,GAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,CAAO,EAGpE,OAFA,EAAQ,WAAW,EAAG,CAAK,EAEpB,EAEX,CAEA,MAAO,EACT,EAEwB,OAAM,CAChC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"typeahead.d.ts","sourceRoot":"","sources":["../../src/headless/typeahead.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI;IAChC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mFAAmF;IACnF,QAAQ,EAAE,MAAM,MAAM,CAAC;IACvB,0DAA0D;IAC1D,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACjD,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;IACpB,+EAA+E;IAC/E,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACrD,yDAAyD;IACzD,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC1D;;;OAGG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB;;;OAGG;IACH,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC;IAC7C,6EAA6E;IAC7E,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAIF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,EAAE,SAAS,gBAAgB,CAAC,CAAC,CAAC,KAAG,SA8CjE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"typeahead.js","names":[],"sources":["../../src/headless/typeahead.ts"],"sourcesContent":["// ── Typeahead ─────────────────────────────────────────────────────────────────\n// Standalone typeahead primitive: accumulates printable keystrokes, then finds\n// the first enabled item whose label starts with the buffer.\n//\n// Extracted from nav.ts so it can be reused independently (e.g. combobox input).\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport type TypeaheadOptions<T> = {\n /**\n * Milliseconds of inactivity before the buffer resets.\n * ARIA APG recommended window. Default: `500`.\n */\n delay?: number;\n /** Returns the current focused index (used to search forward from current + 1). */\n getIndex: () => number;\n /** Returns a plain-text label for the item at `index`. */\n getItemLabel: (item: T, index: number) => string;\n /** Returns all items in the current list. */\n getItems: () => T[];\n /** Returns `true` for items that should be skipped during typeahead search. */\n isItemDisabled?: (item: T, index: number) => boolean;\n /** Called when typeahead navigation lands on an item. */\n onNavigate: (index: number, event: KeyboardEvent) => void;\n /**\n * When provided, the pending reset timer is cancelled automatically when the\n * signal aborts (e.g. when the owning component disconnects).\n */\n signal?: AbortSignal;\n};\n\nexport type Typeahead = {\n /**\n * Process a keyboard event. Returns `true` if the event was consumed by\n * typeahead (a printable character matched or was buffered).\n */\n handleKeydown(event: KeyboardEvent): boolean;\n /** Reset the buffer immediately. Call on list close to clear stale input. */\n reset(): void;\n};\n\n// ── Implementation ────────────────────────────────────────────────────────────\n\n/**\n * Creates a standalone typeahead handler for keyboard-navigable lists.\n *\n * Accumulates printable keystrokes into a buffer; on each keystroke searches\n * for the first enabled item whose label starts with the buffer. Cycles past\n * the current item on repeated same-character presses. Buffer resets after\n * `delay` ms of inactivity (default 500 — the ARIA APG recommended window).\n *\n * @example\n * ```ts\n * const typeahead = createTypeahead({\n * getIndex: () => focusedIndex,\n * getItemLabel: (item) => item.label,\n * getItems: () => items,\n * onNavigate: (index) => { focusedIndex = index; },\n * });\n *\n * listEl.addEventListener('keydown', (e) => typeahead.handleKeydown(e));\n * ```\n */\nexport const createTypeahead = <T>(options: TypeaheadOptions<T>): Typeahead => {\n const delay = options.delay ?? 500;\n let _buffer = '';\n let _timer: ReturnType<typeof setTimeout> | null = null;\n\n const reset = (): void => {\n _buffer = '';\n\n if (_timer !== null) {\n clearTimeout(_timer);\n _timer = null;\n }\n };\n\n options.signal?.addEventListener('abort', reset, { once: true });\n\n const handleKeydown = (event: KeyboardEvent): boolean => {\n // Single printable character only; exclude modifier combos.\n if (event.key.length !== 1 || event.ctrlKey || event.altKey || event.metaKey) return false;\n\n _buffer += event.key.toLowerCase();\n\n if (_timer !== null) clearTimeout(_timer);\n\n _timer = setTimeout(reset, delay);\n\n const items = options.getItems();\n const current = options.getIndex();\n const startAfter = current >= 0 ? current + 1 : 0;\n\n for (let n = 0; n < items.length; n++) {\n const i = (startAfter + n) % items.length;\n\n if (options.isItemDisabled?.(items[i], i)) continue;\n\n if (options.getItemLabel(items[i], i).toLowerCase().startsWith(_buffer)) {\n options.onNavigate(i, event);\n\n return true;\n }\n }\n\n return false;\n };\n\n return { handleKeydown, reset };\n};\n"],"mappings":";AA+DA,IAAa,KAAsB,MAA4C;CAC7E,IAAM,IAAQ,EAAQ,SAAS,KAC3B,IAAU,IACV,IAA+C,MAE7C,UAAoB;EAGxB,AAFA,IAAU,IAEN,MAAW,SACb,aAAa,CAAM,GACnB,IAAS;CAEb;CAiCA,OA/BA,EAAQ,QAAQ,iBAAiB,SAAS,GAAO,EAAE,MAAM,GAAK,CAAC,GA+BxD;EAAE,gBA7Bc,MAAkC;GAEvD,IAAI,EAAM,IAAI,WAAW,KAAK,EAAM,WAAW,EAAM,UAAU,EAAM,SAAS,OAAO;GAMrF,AAJA,KAAW,EAAM,IAAI,YAAY,GAE7B,MAAW,QAAM,aAAa,CAAM,GAExC,IAAS,WAAW,GAAO,CAAK;GAEhC,IAAM,IAAQ,EAAQ,SAAS,GACzB,IAAU,EAAQ,SAAS,GAC3B,IAAa,KAAW,IAAI,IAAU,IAAI;GAEhD,KAAK,IAAI,IAAI,GAAG,IAAI,EAAM,QAAQ,KAAK;IACrC,IAAM,KAAK,IAAa,KAAK,EAAM;IAE/B,OAAQ,iBAAiB,EAAM,IAAI,CAAC,KAEpC,EAAQ,aAAa,EAAM,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,CAAO,GAGpE,OAFA,EAAQ,WAAW,GAAG,CAAK,GAEpB;GAEX;GAEA,OAAO;EACT;EAEwB;CAAM;AAChC"}
package/dist/headless.cjs DELETED
@@ -1 +0,0 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./headless/ore.cjs"),t=require("./headless/auto-resize.cjs"),n=require("./headless/ref-callback.cjs"),r=require("./headless/aria-reflection.cjs"),i=require("./headless/field-base.cjs"),a=require("./headless/signals.cjs"),o=require("./headless/text-field.cjs"),s=require("./headless/choice-field.cjs"),c=require("./headless/keyboard.cjs"),l=require("./headless/checkable.cjs"),u=require("./headless/composer.cjs"),d=require("./headless/typeahead.cjs"),f=require("./headless/nav.cjs"),p=require("./headless/overlay.cjs"),m=require("./headless/direction.cjs"),h=require("./headless/positioner.cjs"),g=require("./headless/option-list.cjs"),_=require("./headless/paginated-list.cjs"),v=require("./headless/numbers.cjs"),y=require("./headless/spinner.cjs"),b=require("./headless/slider.cjs"),x=require("./headless/swipe.cjs"),S=require("./headless/announcer.cjs"),C=require("./headless/date-picker.cjs"),w=require("./headless/light-dom.cjs"),T=require("./headless/selection-control.cjs"),E=require("./headless/sort-control.cjs"),D=require("./headless/datagrid.cjs"),O=require("./headless/parse.cjs");exports.announce=S.announce,exports.bindRefCallback=n.bindRefCallback,exports.counterClassName=i.counterClassName,exports.createAssistiveState=i.createAssistiveState,exports.createAutoResize=t.createAutoResize,exports.createCheckable=l.createCheckable,exports.createChoiceField=s.createChoiceField,exports.createComposerControl=u.createComposerControl,exports.createDataGridControl=D.createDataGridControl,exports.createDatePickerControl=C.createDatePickerControl,exports.createDirtyTracker=i.createDirtyTracker,exports.createDropdownPositioner=h.createDropdownPositioner,exports.createErrorHelperState=i.createErrorHelperState,exports.createField=i.createField,exports.createInteraction=c.createInteraction,exports.createLabelState=i.createLabelState,exports.createListControl=f.createListControl,exports.createOptionList=g.createOptionList,exports.createOverlayControl=p.createOverlayControl,exports.createPaginatedList=_.createPaginatedList,exports.createSelectionControl=T.createSelectionControl,exports.createSliderControl=b.createSliderControl,exports.createSortControl=E.createSortControl,exports.createSpinnerControl=y.createSpinnerControl,exports.createSwipeControl=x.createSwipeControl,exports.createTextField=o.createTextField,exports.createTypeahead=d.createTypeahead,exports.dispatchKeyboardAction=c.dispatchKeyboardAction,exports.elementDirection=m.elementDirection,exports.formatDisplayDate=C.formatDisplayDate,exports.getChoiceLabel=w.getChoiceLabel,exports.getLightChildrenByTag=w.getLightChildrenByTag,exports.lifecycleSignal=e.lifecycleSignal,exports.parseIso=C.parseIso,exports.parseStringTriggers=O.parseStringTriggers,exports.setAriaReflection=r.setAriaReflection,exports.syncedSignal=a.syncedSignal,exports.toFiniteNumber=v.toFiniteNumber,exports.toFiniteNumberOr=v.toFiniteNumberOr,exports.toIsoString=C.toIsoString,exports.toPositiveStep=v.toPositiveStep;
package/dist/headless.js DELETED
@@ -1,30 +0,0 @@
1
- import { lifecycleSignal as e } from "./headless/ore.js";
2
- import { createAutoResize as t } from "./headless/auto-resize.js";
3
- import { bindRefCallback as n } from "./headless/ref-callback.js";
4
- import { setAriaReflection as r } from "./headless/aria-reflection.js";
5
- import { counterClassName as i, createAssistiveState as a, createDirtyTracker as o, createErrorHelperState as s, createField as c, createLabelState as l } from "./headless/field-base.js";
6
- import { syncedSignal as u } from "./headless/signals.js";
7
- import { createTextField as d } from "./headless/text-field.js";
8
- import { createChoiceField as f } from "./headless/choice-field.js";
9
- import { createInteraction as p, dispatchKeyboardAction as m } from "./headless/keyboard.js";
10
- import { createCheckable as h } from "./headless/checkable.js";
11
- import { createComposerControl as g } from "./headless/composer.js";
12
- import { createTypeahead as _ } from "./headless/typeahead.js";
13
- import { createListControl as v } from "./headless/nav.js";
14
- import { createOverlayControl as y } from "./headless/overlay.js";
15
- import { elementDirection as b } from "./headless/direction.js";
16
- import { createDropdownPositioner as x } from "./headless/positioner.js";
17
- import { createOptionList as S } from "./headless/option-list.js";
18
- import { createPaginatedList as C } from "./headless/paginated-list.js";
19
- import { toFiniteNumber as w, toFiniteNumberOr as T, toPositiveStep as E } from "./headless/numbers.js";
20
- import { createSpinnerControl as D } from "./headless/spinner.js";
21
- import { createSliderControl as O } from "./headless/slider.js";
22
- import { createSwipeControl as k } from "./headless/swipe.js";
23
- import { announce as A } from "./headless/announcer.js";
24
- import { createDatePickerControl as j, formatDisplayDate as M, parseIso as N, toIsoString as P } from "./headless/date-picker.js";
25
- import { getChoiceLabel as F, getLightChildrenByTag as I } from "./headless/light-dom.js";
26
- import { createSelectionControl as L } from "./headless/selection-control.js";
27
- import { createSortControl as R } from "./headless/sort-control.js";
28
- import { createDataGridControl as z } from "./headless/datagrid.js";
29
- import { parseStringTriggers as B } from "./headless/parse.js";
30
- export { A as announce, n as bindRefCallback, i as counterClassName, a as createAssistiveState, t as createAutoResize, h as createCheckable, f as createChoiceField, g as createComposerControl, z as createDataGridControl, j as createDatePickerControl, o as createDirtyTracker, x as createDropdownPositioner, s as createErrorHelperState, c as createField, p as createInteraction, l as createLabelState, v as createListControl, S as createOptionList, y as createOverlayControl, C as createPaginatedList, L as createSelectionControl, O as createSliderControl, R as createSortControl, D as createSpinnerControl, k as createSwipeControl, d as createTextField, _ as createTypeahead, m as dispatchKeyboardAction, b as elementDirection, M as formatDisplayDate, F as getChoiceLabel, I as getLightChildrenByTag, e as lifecycleSignal, N as parseIso, B as parseStringTriggers, r as setAriaReflection, u as syncedSignal, w as toFiniteNumber, T as toFiniteNumberOr, P as toIsoString, E as toPositiveStep };
@@ -1,2 +0,0 @@
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
@@ -1 +0,0 @@
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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"}
@@ -1,98 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"datagrid-controls.d.ts","sourceRoot":"","sources":["../../../src/inputs/datagrid/datagrid-controls.ts"],"names":[],"mappings":"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"}