@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,107 +0,0 @@
1
- import { type Readable } from '@vielzeug/ripple';
2
- import { type ListKeyAction, type ListNavigationAction } from './nav';
3
- import { type DialogCloseReason, type OverlayOpenReason } from './overlay';
4
- import { type DropdownPositionerOptions } from './positioner';
5
- export type BaseOptionItem = object;
6
- /** Placement-only options for the dropdown positioner (getFloating/getReference are injected from the option-list). */
7
- export type PlacementOptions = Omit<DropdownPositionerOptions, 'getFloating' | 'getReference'>;
8
- export type OptionListOptions<T extends BaseOptionItem> = {
9
- /** Returns the element used as the outside-click boundary. */
10
- getBoundary: () => HTMLElement | null;
11
- /**
12
- * Returns the currently focused option element for scroll-into-view.
13
- * When omitted, `scrollFocusedIntoView()` is a no-op.
14
- */
15
- getFocusedOptionElement?: () => HTMLElement | null;
16
- /**
17
- * Returns a plain-text label for the item at `index`.
18
- * When provided, the list control supports typeahead.
19
- */
20
- getItemLabel?: (item: T, index: number) => string;
21
- /** Returns the current list items. */
22
- getItems: () => T[];
23
- /**
24
- * Derives a stable `id` for the option at `index`.
25
- * When provided, `aria-activedescendant` is reactively set on the trigger element
26
- * to reflect the currently focused option (WAI-ARIA listbox / combobox pattern).
27
- */
28
- getOptionId?: (index: number) => string;
29
- /** Returns the floating panel element. */
30
- getPanel: () => HTMLElement | null;
31
- /** Returns the reference (trigger anchor) element for positioning. */
32
- getReference: () => HTMLElement | null;
33
- /** Returns the trigger element. Focus is restored here on close. */
34
- getTrigger?: () => HTMLElement | null;
35
- /** Returns `true` when all interactions should be suppressed (e.g. the host is disabled). */
36
- isDisabled?: () => boolean;
37
- isItemDisabled?: (item: T, index: number) => boolean;
38
- /** Override default keyboard bindings for navigation actions. */
39
- keys?: Partial<Record<ListNavigationAction, string[]>>;
40
- /** Whether list navigation wraps around at the first/last item. Default: `true`. */
41
- loop?: boolean;
42
- /** Called when the list closes. */
43
- onClose?: (reason: DialogCloseReason) => void;
44
- /**
45
- * Called when keyboard navigation lands on an item.
46
- * `event` is the originating `KeyboardEvent`, or `undefined` for programmatic navigation.
47
- */
48
- onNavigate?: (action: ListKeyAction, index: number, event?: KeyboardEvent) => void;
49
- /** Called when the list opens. */
50
- onOpen?: (reason: OverlayOpenReason) => void;
51
- /**
52
- * Restricts keyboard navigation direction for the option list.
53
- * Defaults to `'vertical'` when omitted (up/down arrow keys).
54
- */
55
- orientation?: 'both' | 'horizontal' | 'vertical';
56
- /** Placement and sizing options for the floating dropdown. */
57
- positioning?: PlacementOptions;
58
- /** Whether focus is restored to the trigger on close. Default: inferred from `restoreFocus`. */
59
- restoreFocus?: boolean | (() => boolean);
60
- /** `AbortSignal` from the component lifecycle. Disposes subscriptions and removes event listeners on abort. */
61
- signal: AbortSignal;
62
- };
63
- export type OptionListHandle<T extends BaseOptionItem> = {
64
- /** Reactive `aria-activedescendant` value. `null` when no option is focused or the list is closed. */
65
- readonly ariaActiveDescendant: Readable<string | null>;
66
- /** Reactive `aria-expanded` value as string (`'true'` / `'false'`). */
67
- readonly ariaExpanded: Readable<string>;
68
- close(reason?: DialogCloseReason): void;
69
- /**
70
- * Focused item index (read-only). Write via `set(index)` to update through
71
- * the list control — this ensures scroll-into-view and disabled-item checks.
72
- */
73
- readonly focusedIndex: Readable<number>;
74
- getActiveItem(): T | undefined;
75
- handleKeydown(event: KeyboardEvent): boolean;
76
- /** Open state (read-only). Mutate via `open()`, `close()`, or `toggle()`. */
77
- readonly isOpen: Readable<boolean>;
78
- /**
79
- * Programmatically navigate to a named position. Always fires `onNavigate`
80
- * (scroll-into-view, aria-activedescendant update).
81
- * Returns the resolved index, or `-1` if no enabled item was found.
82
- */
83
- navigate(action: ListNavigationAction): number;
84
- open(reason?: OverlayOpenReason): void;
85
- scrollFocusedIntoView(): void;
86
- /**
87
- * Set focus to the item at `index`. Returns the resolved index.
88
- * Pass a negative index to clear focus (same as `reset()`).
89
- */
90
- set(index: number): number;
91
- /**
92
- * Toggles open state.
93
- * - Opens with `openReason` (default `'click'`).
94
- * - Closes with `closeReason` (default `'trigger'`).
95
- */
96
- toggle(openReason?: OverlayOpenReason, closeReason?: DialogCloseReason): void;
97
- /** Imperatively re-run dropdown positioning (e.g. after filter changes list height). */
98
- updatePosition(): void;
99
- };
100
- /**
101
- * Shared headless primitive for dropdown option lists (select, combobox, menu).
102
- *
103
- * Owns `isOpen`, `focusedIndex`, the dropdown positioner, list navigation, and
104
- * overlay wiring. Composes overlay.ts + nav.ts into a single complete API.
105
- */
106
- export declare const createOptionList: <T extends BaseOptionItem>(options: OptionListOptions<T>) => OptionListHandle<T>;
107
- //# sourceMappingURL=option-list.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"option-list.d.ts","sourceRoot":"","sources":["../../src/headless/option-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,QAAQ,EAAU,MAAM,kBAAkB,CAAC;AAGnE,OAAO,EAAqB,KAAK,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,OAAO,CAAC;AACzF,OAAO,EAAwB,KAAK,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACjG,OAAO,EAA4B,KAAK,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAIxF,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AAEpC,uHAAuH;AACvH,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,yBAAyB,EAAE,aAAa,GAAG,cAAc,CAAC,CAAC;AAE/F,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,cAAc,IAAI;IACxD,8DAA8D;IAC9D,WAAW,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACtC;;;OAGG;IACH,uBAAuB,CAAC,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACnD;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAClD,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;IACpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACnC,sEAAsE;IACtE,YAAY,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACvC,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACtC,6FAA6F;IAC7F,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACrD,iEAAiE;IACjE,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACvD,oFAAoF;IACpF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,mCAAmC;IACnC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC9C;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IACnF,kCAAkC;IAClC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC7C;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,UAAU,CAAC;IACjD,8DAA8D;IAC9D,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,gGAAgG;IAChG,YAAY,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC;IACzC,+GAA+G;IAC/G,MAAM,EAAE,WAAW,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,cAAc,IAAI;IACvD,sGAAsG;IACtG,QAAQ,CAAC,oBAAoB,EAAE,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACvD,uEAAuE;IACvE,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxC,KAAK,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACxC;;;OAGG;IACH,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxC,aAAa,IAAI,CAAC,GAAG,SAAS,CAAC;IAC/B,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC;IAC7C,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACvC,qBAAqB,IAAI,IAAI,CAAC;IAC9B;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,EAAE,iBAAiB,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC9E,wFAAwF;IACxF,cAAc,IAAI,IAAI,CAAC;CACxB,CAAC;AAIF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,cAAc,EAAE,SAAS,iBAAiB,CAAC,CAAC,CAAC,KAAG,gBAAgB,CAAC,CAAC,CAkG5G,CAAC"}
@@ -1,66 +0,0 @@
1
- import { RefineConfigError as e } from "../errors.js";
2
- import { createListControl as t } from "./nav.js";
3
- import { createOverlayControl as n } from "./overlay.js";
4
- import { createDropdownPositioner as r } from "./positioner.js";
5
- import { computed as i, signal as a } from "@vielzeug/ripple";
6
- //#region src/headless/option-list.ts
7
- var o = (o) => {
8
- if (typeof o.getBoundary != "function") throw new e("createOptionList: getBoundary is required");
9
- if (typeof o.getPanel != "function") throw new e("createOptionList: getPanel is required");
10
- if (typeof o.getReference != "function") throw new e("createOptionList: getReference is required");
11
- let s = a(!1), c = i(() => String(s.value)), l = r({
12
- ...o.positioning,
13
- getFloating: o.getPanel,
14
- getReference: o.getReference
15
- }), u = () => {
16
- o.getFocusedOptionElement?.()?.scrollIntoView({ block: "nearest" });
17
- }, d = t({
18
- disabled: i(() => !s.value),
19
- getItemLabel: o.getItemLabel,
20
- getItems: o.getItems,
21
- isItemDisabled: o.isItemDisabled,
22
- keys: o.keys,
23
- loop: o.loop ?? !0,
24
- onNavigate: (e, t, n) => {
25
- u(), t >= 0 && o.onNavigate?.(e, t, n);
26
- },
27
- orientation: o.orientation,
28
- signal: o.signal
29
- }), f = i(() => {
30
- let e = d.focusedIndex.value;
31
- return o.getOptionId && s.value && e >= 0 ? o.getOptionId(e) : null;
32
- }), p = n({
33
- getBoundary: o.getBoundary,
34
- getPanel: o.getPanel,
35
- getTrigger: o.getTrigger,
36
- isDisabled: o.isDisabled,
37
- isOpen: () => s.value,
38
- onClose: o.onClose,
39
- onOpen: o.onOpen,
40
- positioner: l,
41
- restoreFocus: o.restoreFocus,
42
- setOpen: (e) => {
43
- s.value = e, e || d.reset();
44
- },
45
- signal: o.signal
46
- });
47
- return {
48
- ariaActiveDescendant: f,
49
- ariaExpanded: c,
50
- close: (e) => p.close(e),
51
- focusedIndex: d.focusedIndex,
52
- getActiveItem: d.getActiveItem,
53
- handleKeydown: (e) => s.value ? e.key === "Escape" ? (e.preventDefault(), p.close("escape"), !0) : d.handleKeydown(e) : !1,
54
- isOpen: s,
55
- navigate: d.navigate,
56
- open: (e) => p.open(e),
57
- scrollFocusedIntoView: u,
58
- set: d.set,
59
- toggle: (e, t) => p.toggle(e, t),
60
- updatePosition: l.update
61
- };
62
- };
63
- //#endregion
64
- export { o as createOptionList };
65
-
66
- //# sourceMappingURL=option-list.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"option-list.js","names":[],"sources":["../../src/headless/option-list.ts"],"sourcesContent":["import { computed, type Readable, signal } from '@vielzeug/ripple';\n\nimport { RefineConfigError } from '../errors';\nimport { createListControl, type ListKeyAction, type ListNavigationAction } from './nav';\nimport { createOverlayControl, type DialogCloseReason, type OverlayOpenReason } from './overlay';\nimport { createDropdownPositioner, type DropdownPositionerOptions } from './positioner';\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport type BaseOptionItem = object;\n\n/** Placement-only options for the dropdown positioner (getFloating/getReference are injected from the option-list). */\nexport type PlacementOptions = Omit<DropdownPositionerOptions, 'getFloating' | 'getReference'>;\n\nexport type OptionListOptions<T extends BaseOptionItem> = {\n /** Returns the element used as the outside-click boundary. */\n getBoundary: () => HTMLElement | null;\n /**\n * Returns the currently focused option element for scroll-into-view.\n * When omitted, `scrollFocusedIntoView()` is a no-op.\n */\n getFocusedOptionElement?: () => HTMLElement | null;\n /**\n * Returns a plain-text label for the item at `index`.\n * When provided, the list control supports typeahead.\n */\n getItemLabel?: (item: T, index: number) => string;\n /** Returns the current list items. */\n getItems: () => T[];\n /**\n * Derives a stable `id` for the option at `index`.\n * When provided, `aria-activedescendant` is reactively set on the trigger element\n * to reflect the currently focused option (WAI-ARIA listbox / combobox pattern).\n */\n getOptionId?: (index: number) => string;\n /** Returns the floating panel element. */\n getPanel: () => HTMLElement | null;\n /** Returns the reference (trigger anchor) element for positioning. */\n getReference: () => HTMLElement | null;\n /** Returns the trigger element. Focus is restored here on close. */\n getTrigger?: () => HTMLElement | null;\n /** Returns `true` when all interactions should be suppressed (e.g. the host is disabled). */\n isDisabled?: () => boolean;\n isItemDisabled?: (item: T, index: number) => boolean;\n /** Override default keyboard bindings for navigation actions. */\n keys?: Partial<Record<ListNavigationAction, string[]>>;\n /** Whether list navigation wraps around at the first/last item. Default: `true`. */\n loop?: boolean;\n /** Called when the list closes. */\n onClose?: (reason: DialogCloseReason) => void;\n /**\n * Called when keyboard navigation lands on an item.\n * `event` is the originating `KeyboardEvent`, or `undefined` for programmatic navigation.\n */\n onNavigate?: (action: ListKeyAction, index: number, event?: KeyboardEvent) => void;\n /** Called when the list opens. */\n onOpen?: (reason: OverlayOpenReason) => void;\n /**\n * Restricts keyboard navigation direction for the option list.\n * Defaults to `'vertical'` when omitted (up/down arrow keys).\n */\n orientation?: 'both' | 'horizontal' | 'vertical';\n /** Placement and sizing options for the floating dropdown. */\n positioning?: PlacementOptions;\n /** Whether focus is restored to the trigger on close. Default: inferred from `restoreFocus`. */\n restoreFocus?: boolean | (() => boolean);\n /** `AbortSignal` from the component lifecycle. Disposes subscriptions and removes event listeners on abort. */\n signal: AbortSignal;\n};\n\nexport type OptionListHandle<T extends BaseOptionItem> = {\n /** Reactive `aria-activedescendant` value. `null` when no option is focused or the list is closed. */\n readonly ariaActiveDescendant: Readable<string | null>;\n /** Reactive `aria-expanded` value as string (`'true'` / `'false'`). */\n readonly ariaExpanded: Readable<string>;\n close(reason?: DialogCloseReason): void;\n /**\n * Focused item index (read-only). Write via `set(index)` to update through\n * the list control — this ensures scroll-into-view and disabled-item checks.\n */\n readonly focusedIndex: Readable<number>;\n getActiveItem(): T | undefined;\n handleKeydown(event: KeyboardEvent): boolean;\n /** Open state (read-only). Mutate via `open()`, `close()`, or `toggle()`. */\n readonly isOpen: Readable<boolean>;\n /**\n * Programmatically navigate to a named position. Always fires `onNavigate`\n * (scroll-into-view, aria-activedescendant update).\n * Returns the resolved index, or `-1` if no enabled item was found.\n */\n navigate(action: ListNavigationAction): number;\n open(reason?: OverlayOpenReason): void;\n scrollFocusedIntoView(): void;\n /**\n * Set focus to the item at `index`. Returns the resolved index.\n * Pass a negative index to clear focus (same as `reset()`).\n */\n set(index: number): number;\n /**\n * Toggles open state.\n * - Opens with `openReason` (default `'click'`).\n * - Closes with `closeReason` (default `'trigger'`).\n */\n toggle(openReason?: OverlayOpenReason, closeReason?: DialogCloseReason): void;\n /** Imperatively re-run dropdown positioning (e.g. after filter changes list height). */\n updatePosition(): void;\n};\n\n// ── Factory ───────────────────────────────────────────────────────────────────\n\n/**\n * Shared headless primitive for dropdown option lists (select, combobox, menu).\n *\n * Owns `isOpen`, `focusedIndex`, the dropdown positioner, list navigation, and\n * overlay wiring. Composes overlay.ts + nav.ts into a single complete API.\n */\nexport const createOptionList = <T extends BaseOptionItem>(options: OptionListOptions<T>): OptionListHandle<T> => {\n if (typeof options.getBoundary !== 'function') {\n throw new RefineConfigError('createOptionList: getBoundary is required');\n }\n\n if (typeof options.getPanel !== 'function') {\n throw new RefineConfigError('createOptionList: getPanel is required');\n }\n\n if (typeof options.getReference !== 'function') {\n throw new RefineConfigError('createOptionList: getReference is required');\n }\n\n const isOpen = signal(false);\n\n const ariaExpanded = computed(() => String(isOpen.value));\n\n const positioner = createDropdownPositioner({\n ...options.positioning,\n getFloating: options.getPanel,\n getReference: options.getReference,\n });\n\n const scrollFocusedIntoView = (): void => {\n options.getFocusedOptionElement?.()?.scrollIntoView({ block: 'nearest' });\n };\n\n const list = createListControl<T>({\n disabled: computed(() => !isOpen.value),\n getItemLabel: options.getItemLabel,\n getItems: options.getItems,\n isItemDisabled: options.isItemDisabled,\n keys: options.keys,\n loop: options.loop ?? true,\n onNavigate: (action, index, event) => {\n scrollFocusedIntoView();\n\n if (index >= 0) options.onNavigate?.(action, index, event);\n },\n orientation: options.orientation,\n signal: options.signal,\n });\n\n const ariaActiveDescendant = computed<string | null>(() => {\n const idx = list.focusedIndex.value;\n\n return options.getOptionId && isOpen.value && idx >= 0 ? options.getOptionId(idx) : null;\n });\n\n const overlay = createOverlayControl({\n getBoundary: options.getBoundary,\n getPanel: options.getPanel,\n getTrigger: options.getTrigger,\n isDisabled: options.isDisabled,\n isOpen: () => isOpen.value,\n onClose: options.onClose,\n onOpen: options.onOpen,\n positioner,\n restoreFocus: options.restoreFocus,\n setOpen: (next) => {\n isOpen.value = next;\n\n if (!next) list.reset();\n },\n signal: options.signal,\n });\n\n // Built-in Escape key handling: prevents each consumer from duplicating the\n // close-on-escape pattern. Fires only when the list is open; returns `true`\n // so callers know the event was handled and can stop further processing.\n const handleKeydown = (event: KeyboardEvent): boolean => {\n if (!isOpen.value) return false;\n\n if (event.key === 'Escape') {\n event.preventDefault();\n overlay.close('escape');\n\n return true;\n }\n\n return list.handleKeydown(event);\n };\n\n return {\n ariaActiveDescendant,\n ariaExpanded,\n close: (reason) => overlay.close(reason),\n focusedIndex: list.focusedIndex,\n getActiveItem: list.getActiveItem,\n handleKeydown,\n isOpen,\n navigate: list.navigate,\n open: (reason) => overlay.open(reason),\n scrollFocusedIntoView,\n set: list.set,\n toggle: (openReason, closeReason) => overlay.toggle(openReason, closeReason),\n updatePosition: positioner.update,\n };\n};\n"],"mappings":";;;;;;AAoHA,IAAa,KAA8C,MAAuD;CAChH,IAAI,OAAO,EAAQ,eAAgB,YACjC,MAAM,IAAI,EAAkB,2CAA2C;CAGzE,IAAI,OAAO,EAAQ,YAAa,YAC9B,MAAM,IAAI,EAAkB,wCAAwC;CAGtE,IAAI,OAAO,EAAQ,gBAAiB,YAClC,MAAM,IAAI,EAAkB,4CAA4C;CAG1E,IAAM,IAAS,EAAO,EAAK,GAErB,IAAe,QAAe,OAAO,EAAO,KAAK,CAAC,GAElD,IAAa,EAAyB;EAC1C,GAAG,EAAQ;EACX,aAAa,EAAQ;EACrB,cAAc,EAAQ;CACxB,CAAC,GAEK,UAAoC;EACxC,EAAQ,0BAA0B,CAAC,EAAE,eAAe,EAAE,OAAO,UAAU,CAAC;CAC1E,GAEM,IAAO,EAAqB;EAChC,UAAU,QAAe,CAAC,EAAO,KAAK;EACtC,cAAc,EAAQ;EACtB,UAAU,EAAQ;EAClB,gBAAgB,EAAQ;EACxB,MAAM,EAAQ;EACd,MAAM,EAAQ,QAAQ;EACtB,aAAa,GAAQ,GAAO,MAAU;GAGpC,AAFA,EAAsB,GAElB,KAAS,KAAG,EAAQ,aAAa,GAAQ,GAAO,CAAK;EAC3D;EACA,aAAa,EAAQ;EACrB,QAAQ,EAAQ;CAClB,CAAC,GAEK,IAAuB,QAA8B;EACzD,IAAM,IAAM,EAAK,aAAa;EAE9B,OAAO,EAAQ,eAAe,EAAO,SAAS,KAAO,IAAI,EAAQ,YAAY,CAAG,IAAI;CACtF,CAAC,GAEK,IAAU,EAAqB;EACnC,aAAa,EAAQ;EACrB,UAAU,EAAQ;EAClB,YAAY,EAAQ;EACpB,YAAY,EAAQ;EACpB,cAAc,EAAO;EACrB,SAAS,EAAQ;EACjB,QAAQ,EAAQ;EAChB;EACA,cAAc,EAAQ;EACtB,UAAU,MAAS;GAGjB,AAFA,EAAO,QAAQ,GAEV,KAAM,EAAK,MAAM;EACxB;EACA,QAAQ,EAAQ;CAClB,CAAC;CAkBD,OAAO;EACL;EACA;EACA,QAAQ,MAAW,EAAQ,MAAM,CAAM;EACvC,cAAc,EAAK;EACnB,eAAe,EAAK;EACpB,gBAnBqB,MAChB,EAAO,QAER,EAAM,QAAQ,YAChB,EAAM,eAAe,GACrB,EAAQ,MAAM,QAAQ,GAEf,MAGF,EAAK,cAAc,CAAK,IATL;EAmB1B;EACA,UAAU,EAAK;EACf,OAAO,MAAW,EAAQ,KAAK,CAAM;EACrC;EACA,KAAK,EAAK;EACV,SAAS,GAAY,MAAgB,EAAQ,OAAO,GAAY,CAAW;EAC3E,gBAAgB,EAAW;CAC7B;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ore.cjs","names":[],"sources":["../../src/headless/ore.ts"],"sourcesContent":["// ── Ore adapter ─────────────────────────────────────────────────────────────\n// Utilities that bridge Ore's component lifecycle with the headless\n// primitives' `AbortSignal`-based lifecycle contract.\n\n/**\n * Creates an `AbortSignal` tied to the component's Ore lifecycle.\n *\n * Call once at the top of a `setup()` function and pass the resulting signal\n * as the required `signal` option to any stateful headless primitive\n * (`createTextField`, `createCheckable`, `createOptionList`, etc.).\n *\n * When Ore disconnects the component, `onCleanup` fires, aborting the\n * signal and triggering cleanup in every primitive that received it.\n *\n * @example\n * ```ts\n * setup(props, { el }) {\n * const signal = lifecycleSignal(onCleanup);\n * const tf = createTextField({ ..., signal });\n * }\n * ```\n */\nexport const lifecycleSignal = (onCleanup: (fn: () => void) => void): AbortSignal => {\n const controller = new AbortController();\n\n onCleanup(() => controller.abort());\n\n return controller.signal;\n};\n"],"mappings":"AAsBA,IAAa,EAAmB,GAAqD,CACnF,IAAM,EAAa,IAAI,gBAIvB,OAFA,MAAgB,EAAW,MAAM,CAAC,EAE3B,EAAW,MACpB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ore.d.ts","sourceRoot":"","sources":["../../src/headless/ore.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,eAAe,GAAI,WAAW,CAAC,EAAE,EAAE,MAAM,IAAI,KAAK,IAAI,KAAG,WAMrE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ore.js","names":[],"sources":["../../src/headless/ore.ts"],"sourcesContent":["// ── Ore adapter ─────────────────────────────────────────────────────────────\n// Utilities that bridge Ore's component lifecycle with the headless\n// primitives' `AbortSignal`-based lifecycle contract.\n\n/**\n * Creates an `AbortSignal` tied to the component's Ore lifecycle.\n *\n * Call once at the top of a `setup()` function and pass the resulting signal\n * as the required `signal` option to any stateful headless primitive\n * (`createTextField`, `createCheckable`, `createOptionList`, etc.).\n *\n * When Ore disconnects the component, `onCleanup` fires, aborting the\n * signal and triggering cleanup in every primitive that received it.\n *\n * @example\n * ```ts\n * setup(props, { el }) {\n * const signal = lifecycleSignal(onCleanup);\n * const tf = createTextField({ ..., signal });\n * }\n * ```\n */\nexport const lifecycleSignal = (onCleanup: (fn: () => void) => void): AbortSignal => {\n const controller = new AbortController();\n\n onCleanup(() => controller.abort());\n\n return controller.signal;\n};\n"],"mappings":";AAsBA,IAAa,KAAmB,MAAqD;CACnF,IAAM,IAAa,IAAI,gBAAgB;CAIvC,OAFA,QAAgB,EAAW,MAAM,CAAC,GAE3B,EAAW;AACpB"}
@@ -1,2 +0,0 @@
1
- var e=e=>{let t=null,n=()=>typeof e.restoreFocus==`function`?e.restoreFocus():e.restoreFocus??!0,r=t=>{if(!e.isOpen())return;let n=t.composedPath?.()??[],r=e.getBoundary(),i=e.getPanel?.()??null,a=n[0]??t.target,s=a instanceof Node?a:null,c=n.some(e=>e===r||e===i),l=s?(r?.contains(s)??!1)||(i?.contains(s)??!1):!1;!c&&!l&&o(`outsideClick`)},i=e=>{e?document.addEventListener(`pointerdown`,r,{capture:!0}):document.removeEventListener(`pointerdown`,r,{capture:!0})},a=(n=`programmatic`)=>{e.isDisabled?.()||e.isOpen()||(e.setOpen(!0,n),i(!0),e.positioner&&(e.positioner.update(),t=e.positioner.startAutoUpdate?.()??null),e.onOpen?.(n))},o=(r=`programmatic`,a,o=!1)=>{e.isOpen()&&(e.setOpen(!1,r),i(!1),t&&=(t(),null),(a??n())&&e.getTrigger?.()?.focus(),o||e.onClose?.(r))},s=(t=`click`,n=`trigger`)=>{e.isOpen()?o(n):a(t)},c=!1,l=()=>{c||(c=!0,e.isOpen()&&o(`programmatic`,!1,!0),i(!1),t&&=(t(),null))};return e.signal.addEventListener(`abort`,l,{once:!0}),{close:o,dispose:l,get disposed(){return c},open:a,[Symbol.dispose]:l,toggle:s}};exports.createOverlayControl=e;
2
- //# sourceMappingURL=overlay.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"overlay.cjs","names":[],"sources":["../../src/headless/overlay.ts"],"sourcesContent":["import type { OverlayPositioner } from './positioner';\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\n/**\n * Why an overlay was opened.\n * - `'click'` — user clicked the trigger element\n * - `'focus'` — focus entered the trigger (tooltip, popover)\n * - `'hover'` — pointer entered the trigger (tooltip)\n * - `'keyboard'` — keyboard shortcut or Enter/Space on a trigger\n * - `'programmatic'` — opened via the JS API without a user gesture\n * - `'trigger'` — opened via the Invoker Commands API (`command=\"show-modal\"`)\n */\nexport type OverlayOpenReason = 'click' | 'focus' | 'hover' | 'keyboard' | 'programmatic' | 'trigger';\n\n/** Close reasons valid for modal dialogs (includes 'swipe' for drawer). */\nexport type DialogCloseReason = 'escape' | 'outsideClick' | 'programmatic' | 'swipe' | 'trigger';\n/** Close reasons valid for dropdown overlays (no swipe). */\nexport type DropdownCloseReason = Exclude<DialogCloseReason, 'swipe'>;\n\n/** Detail shape for overlay open events emitted by components. */\nexport type OverlayOpenDetail = { reason: OverlayOpenReason };\n/** Detail shape for overlay close events emitted by components. */\nexport type OverlayCloseDetail = { reason: DialogCloseReason };\n\nexport type { OverlayPositioner };\n\nexport type OverlayControlOptions = {\n getBoundary: () => HTMLElement | null;\n getPanel?: () => HTMLElement | null;\n getTrigger?: () => HTMLElement | null;\n isDisabled?: () => boolean;\n isOpen: () => boolean;\n onClose?: (reason: DialogCloseReason) => void;\n onOpen?: (reason: OverlayOpenReason) => void;\n positioner?: OverlayPositioner;\n restoreFocus?: boolean | (() => boolean);\n setOpen: (next: boolean, reason: OverlayOpenReason | DialogCloseReason) => void;\n /** `AbortSignal` from the component lifecycle. `dispose()` is called automatically on abort. */\n signal: AbortSignal;\n};\n\nexport type OverlayControl = {\n [Symbol.dispose](): void;\n /**\n * Closes the overlay.\n * @param reason — why it's closing (default `'programmatic'`)\n * @param restoreFocus — override per-call focus restoration (default: uses `restoreFocus` option)\n */\n close(reason?: DialogCloseReason, restoreFocus?: boolean): void;\n /** Tears down the overlay: closes silently and removes all event listeners. */\n dispose(): void;\n /** `true` after `dispose()` has been called. */\n readonly disposed: boolean;\n /**\n * Opens the overlay.\n * @param reason — why it's opening (default `'programmatic'`)\n */\n open(reason?: OverlayOpenReason): void;\n /**\n * Toggles open state.\n * - Opens with `openReason` (default `'click'`).\n * - Closes with `closeReason` (default `'trigger'`).\n */\n toggle(openReason?: OverlayOpenReason, closeReason?: DialogCloseReason): void;\n};\n\n// ── Factory ───────────────────────────────────────────────────────────────────\nexport const createOverlayControl = (options: OverlayControlOptions): OverlayControl => {\n let positionerCleanup: (() => void) | null = null;\n\n const shouldRestoreFocus = (): boolean => {\n if (typeof options.restoreFocus === 'function') return options.restoreFocus();\n\n return options.restoreFocus ?? true;\n };\n\n // Per-instance outside-pointer listener registered directly on document.\n // Uses 'pointerdown' instead of 'click' so that tapping empty/non-interactive\n // areas on iOS Safari (which does not synthesize 'click' for those targets)\n // still dismisses the overlay.\n // No shared multiplexer needed — max ~3 overlays can be open concurrently.\n const clickListener = (event: Event): void => {\n if (!options.isOpen()) return;\n\n const path = (event as Event & { composedPath?: () => EventTarget[] }).composedPath?.() ?? [];\n const boundary = options.getBoundary();\n const panel = options.getPanel?.() ?? null;\n const target = (path[0] ?? event.target) as EventTarget | null;\n const nodeTarget = target instanceof Node ? target : null;\n const insideByPath = path.some((entry) => entry === boundary || entry === panel);\n const insideByContainment = nodeTarget\n ? (boundary?.contains(nodeTarget) ?? false) || (panel?.contains(nodeTarget) ?? false)\n : false;\n\n if (!insideByPath && !insideByContainment) close('outsideClick');\n };\n\n const registerClickListener = (active: boolean): void => {\n if (active) {\n document.addEventListener('pointerdown', clickListener, { capture: true });\n } else {\n document.removeEventListener('pointerdown', clickListener, { capture: true });\n }\n };\n\n const open = (reason: OverlayOpenReason = 'programmatic'): void => {\n if (options.isDisabled?.() || options.isOpen()) return;\n\n options.setOpen(true, reason);\n registerClickListener(true);\n\n if (options.positioner) {\n options.positioner.update();\n positionerCleanup = options.positioner.startAutoUpdate?.() ?? null;\n }\n\n options.onOpen?.(reason);\n };\n\n const close = (reason: DialogCloseReason = 'programmatic', restoreFocus?: boolean, silent = false): void => {\n if (!options.isOpen()) return;\n\n options.setOpen(false, reason);\n registerClickListener(false);\n\n if (positionerCleanup) {\n positionerCleanup();\n positionerCleanup = null;\n }\n\n const restore = restoreFocus ?? shouldRestoreFocus();\n\n if (restore) options.getTrigger?.()?.focus();\n\n if (!silent) options.onClose?.(reason);\n };\n\n const toggle = (openReason: OverlayOpenReason = 'click', closeReason: DialogCloseReason = 'trigger'): void => {\n if (options.isOpen()) {\n close(closeReason);\n } else {\n open(openReason);\n }\n };\n\n let disposed = false;\n\n const dispose = (): void => {\n if (disposed) return;\n\n disposed = true;\n\n // Close silently — teardown should not fire onClose callbacks.\n if (options.isOpen()) close('programmatic', false, true);\n\n registerClickListener(false);\n\n if (positionerCleanup) {\n positionerCleanup();\n positionerCleanup = null;\n }\n };\n\n options.signal.addEventListener('abort', dispose, { once: true });\n\n return {\n close,\n dispose,\n get disposed() {\n return disposed;\n },\n open,\n [Symbol.dispose]: dispose,\n toggle,\n };\n};\n"],"mappings":"AAoEA,IAAa,EAAwB,GAAmD,CACtF,IAAI,EAAyC,KAEvC,MACA,OAAO,EAAQ,cAAiB,WAAmB,EAAQ,aAAa,EAErE,EAAQ,cAAgB,GAQ3B,EAAiB,GAAuB,CAC5C,GAAI,CAAC,EAAQ,OAAO,EAAG,OAEvB,IAAM,EAAQ,EAAyD,eAAe,GAAK,CAAC,EACtF,EAAW,EAAQ,YAAY,EAC/B,EAAQ,EAAQ,WAAW,GAAK,KAChC,EAAU,EAAK,IAAM,EAAM,OAC3B,EAAa,aAAkB,KAAO,EAAS,KAC/C,EAAe,EAAK,KAAM,GAAU,IAAU,GAAY,IAAU,CAAK,EACzE,EAAsB,GACvB,GAAU,SAAS,CAAU,GAAK,MAAW,GAAO,SAAS,CAAU,GAAK,IAC7E,GAEA,CAAC,GAAgB,CAAC,GAAqB,EAAM,cAAc,CACjE,EAEM,EAAyB,GAA0B,CACnD,EACF,SAAS,iBAAiB,cAAe,EAAe,CAAE,QAAS,EAAK,CAAC,EAEzE,SAAS,oBAAoB,cAAe,EAAe,CAAE,QAAS,EAAK,CAAC,CAEhF,EAEM,GAAQ,EAA4B,iBAAyB,CAC7D,EAAQ,aAAa,GAAK,EAAQ,OAAO,IAE7C,EAAQ,QAAQ,GAAM,CAAM,EAC5B,EAAsB,EAAI,EAEtB,EAAQ,aACV,EAAQ,WAAW,OAAO,EAC1B,EAAoB,EAAQ,WAAW,kBAAkB,GAAK,MAGhE,EAAQ,SAAS,CAAM,EACzB,EAEM,GAAS,EAA4B,eAAgB,EAAwB,EAAS,KAAgB,CACrG,EAAQ,OAAO,IAEpB,EAAQ,QAAQ,GAAO,CAAM,EAC7B,EAAsB,EAAK,EAE3B,AAEE,KADA,EAAkB,EACE,OAGN,GAAgB,EAAmB,IAEtC,EAAQ,aAAa,CAAC,EAAE,MAAM,EAEtC,GAAQ,EAAQ,UAAU,CAAM,EACvC,EAEM,GAAU,EAAgC,QAAS,EAAiC,YAAoB,CACxG,EAAQ,OAAO,EACjB,EAAM,CAAW,EAEjB,EAAK,CAAU,CAEnB,EAEI,EAAW,GAET,MAAsB,CACtB,IAEJ,EAAW,GAGP,EAAQ,OAAO,GAAG,EAAM,eAAgB,GAAO,EAAI,EAEvD,EAAsB,EAAK,EAE3B,AAEE,KADA,EAAkB,EACE,MAExB,EAIA,OAFA,EAAQ,OAAO,iBAAiB,QAAS,EAAS,CAAE,KAAM,EAAK,CAAC,EAEzD,CACL,QACA,UACA,IAAI,UAAW,CACb,OAAO,CACT,EACA,QACC,OAAO,SAAU,EAClB,QACF,CACF"}
@@ -1,64 +0,0 @@
1
- import type { OverlayPositioner } from './positioner';
2
- /**
3
- * Why an overlay was opened.
4
- * - `'click'` — user clicked the trigger element
5
- * - `'focus'` — focus entered the trigger (tooltip, popover)
6
- * - `'hover'` — pointer entered the trigger (tooltip)
7
- * - `'keyboard'` — keyboard shortcut or Enter/Space on a trigger
8
- * - `'programmatic'` — opened via the JS API without a user gesture
9
- * - `'trigger'` — opened via the Invoker Commands API (`command="show-modal"`)
10
- */
11
- export type OverlayOpenReason = 'click' | 'focus' | 'hover' | 'keyboard' | 'programmatic' | 'trigger';
12
- /** Close reasons valid for modal dialogs (includes 'swipe' for drawer). */
13
- export type DialogCloseReason = 'escape' | 'outsideClick' | 'programmatic' | 'swipe' | 'trigger';
14
- /** Close reasons valid for dropdown overlays (no swipe). */
15
- export type DropdownCloseReason = Exclude<DialogCloseReason, 'swipe'>;
16
- /** Detail shape for overlay open events emitted by components. */
17
- export type OverlayOpenDetail = {
18
- reason: OverlayOpenReason;
19
- };
20
- /** Detail shape for overlay close events emitted by components. */
21
- export type OverlayCloseDetail = {
22
- reason: DialogCloseReason;
23
- };
24
- export type { OverlayPositioner };
25
- export type OverlayControlOptions = {
26
- getBoundary: () => HTMLElement | null;
27
- getPanel?: () => HTMLElement | null;
28
- getTrigger?: () => HTMLElement | null;
29
- isDisabled?: () => boolean;
30
- isOpen: () => boolean;
31
- onClose?: (reason: DialogCloseReason) => void;
32
- onOpen?: (reason: OverlayOpenReason) => void;
33
- positioner?: OverlayPositioner;
34
- restoreFocus?: boolean | (() => boolean);
35
- setOpen: (next: boolean, reason: OverlayOpenReason | DialogCloseReason) => void;
36
- /** `AbortSignal` from the component lifecycle. `dispose()` is called automatically on abort. */
37
- signal: AbortSignal;
38
- };
39
- export type OverlayControl = {
40
- [Symbol.dispose](): void;
41
- /**
42
- * Closes the overlay.
43
- * @param reason — why it's closing (default `'programmatic'`)
44
- * @param restoreFocus — override per-call focus restoration (default: uses `restoreFocus` option)
45
- */
46
- close(reason?: DialogCloseReason, restoreFocus?: boolean): void;
47
- /** Tears down the overlay: closes silently and removes all event listeners. */
48
- dispose(): void;
49
- /** `true` after `dispose()` has been called. */
50
- readonly disposed: boolean;
51
- /**
52
- * Opens the overlay.
53
- * @param reason — why it's opening (default `'programmatic'`)
54
- */
55
- open(reason?: OverlayOpenReason): void;
56
- /**
57
- * Toggles open state.
58
- * - Opens with `openReason` (default `'click'`).
59
- * - Closes with `closeReason` (default `'trigger'`).
60
- */
61
- toggle(openReason?: OverlayOpenReason, closeReason?: DialogCloseReason): void;
62
- };
63
- export declare const createOverlayControl: (options: OverlayControlOptions) => OverlayControl;
64
- //# sourceMappingURL=overlay.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../src/headless/overlay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAItD;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,cAAc,GAAG,SAAS,CAAC;AAEtG,2EAA2E;AAC3E,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,cAAc,GAAG,cAAc,GAAG,OAAO,GAAG,SAAS,CAAC;AACjG,4DAA4D;AAC5D,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;AAEtE,kEAAkE;AAClE,MAAM,MAAM,iBAAiB,GAAG;IAAE,MAAM,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAC9D,mEAAmE;AACnE,MAAM,MAAM,kBAAkB,GAAG;IAAE,MAAM,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAE/D,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAElC,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC;IAC3B,MAAM,EAAE,MAAM,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC9C,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC7C,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,YAAY,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC;IACzC,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,KAAK,IAAI,CAAC;IAChF,gGAAgG;IAChG,MAAM,EAAE,WAAW,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;IACzB;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,EAAE,iBAAiB,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAChE,+EAA+E;IAC/E,OAAO,IAAI,IAAI,CAAC;IAChB,gDAAgD;IAChD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,IAAI,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACvC;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,EAAE,iBAAiB,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;CAC/E,CAAC;AAGF,eAAO,MAAM,oBAAoB,GAAI,SAAS,qBAAqB,KAAG,cA4GrE,CAAC"}
@@ -1,32 +0,0 @@
1
- //#region src/headless/overlay.ts
2
- var e = (e) => {
3
- let t = null, n = () => typeof e.restoreFocus == "function" ? e.restoreFocus() : e.restoreFocus ?? !0, r = (t) => {
4
- if (!e.isOpen()) return;
5
- let n = t.composedPath?.() ?? [], r = e.getBoundary(), i = e.getPanel?.() ?? null, a = n[0] ?? t.target, s = a instanceof Node ? a : null, c = n.some((e) => e === r || e === i), l = s ? (r?.contains(s) ?? !1) || (i?.contains(s) ?? !1) : !1;
6
- !c && !l && o("outsideClick");
7
- }, i = (e) => {
8
- e ? document.addEventListener("pointerdown", r, { capture: !0 }) : document.removeEventListener("pointerdown", r, { capture: !0 });
9
- }, a = (n = "programmatic") => {
10
- e.isDisabled?.() || e.isOpen() || (e.setOpen(!0, n), i(!0), e.positioner && (e.positioner.update(), t = e.positioner.startAutoUpdate?.() ?? null), e.onOpen?.(n));
11
- }, o = (r = "programmatic", a, o = !1) => {
12
- e.isOpen() && (e.setOpen(!1, r), i(!1), t &&= (t(), null), (a ?? n()) && e.getTrigger?.()?.focus(), o || e.onClose?.(r));
13
- }, s = (t = "click", n = "trigger") => {
14
- e.isOpen() ? o(n) : a(t);
15
- }, c = !1, l = () => {
16
- c || (c = !0, e.isOpen() && o("programmatic", !1, !0), i(!1), t &&= (t(), null));
17
- };
18
- return e.signal.addEventListener("abort", l, { once: !0 }), {
19
- close: o,
20
- dispose: l,
21
- get disposed() {
22
- return c;
23
- },
24
- open: a,
25
- [Symbol.dispose]: l,
26
- toggle: s
27
- };
28
- };
29
- //#endregion
30
- export { e as createOverlayControl };
31
-
32
- //# sourceMappingURL=overlay.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"overlay.js","names":[],"sources":["../../src/headless/overlay.ts"],"sourcesContent":["import type { OverlayPositioner } from './positioner';\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\n/**\n * Why an overlay was opened.\n * - `'click'` — user clicked the trigger element\n * - `'focus'` — focus entered the trigger (tooltip, popover)\n * - `'hover'` — pointer entered the trigger (tooltip)\n * - `'keyboard'` — keyboard shortcut or Enter/Space on a trigger\n * - `'programmatic'` — opened via the JS API without a user gesture\n * - `'trigger'` — opened via the Invoker Commands API (`command=\"show-modal\"`)\n */\nexport type OverlayOpenReason = 'click' | 'focus' | 'hover' | 'keyboard' | 'programmatic' | 'trigger';\n\n/** Close reasons valid for modal dialogs (includes 'swipe' for drawer). */\nexport type DialogCloseReason = 'escape' | 'outsideClick' | 'programmatic' | 'swipe' | 'trigger';\n/** Close reasons valid for dropdown overlays (no swipe). */\nexport type DropdownCloseReason = Exclude<DialogCloseReason, 'swipe'>;\n\n/** Detail shape for overlay open events emitted by components. */\nexport type OverlayOpenDetail = { reason: OverlayOpenReason };\n/** Detail shape for overlay close events emitted by components. */\nexport type OverlayCloseDetail = { reason: DialogCloseReason };\n\nexport type { OverlayPositioner };\n\nexport type OverlayControlOptions = {\n getBoundary: () => HTMLElement | null;\n getPanel?: () => HTMLElement | null;\n getTrigger?: () => HTMLElement | null;\n isDisabled?: () => boolean;\n isOpen: () => boolean;\n onClose?: (reason: DialogCloseReason) => void;\n onOpen?: (reason: OverlayOpenReason) => void;\n positioner?: OverlayPositioner;\n restoreFocus?: boolean | (() => boolean);\n setOpen: (next: boolean, reason: OverlayOpenReason | DialogCloseReason) => void;\n /** `AbortSignal` from the component lifecycle. `dispose()` is called automatically on abort. */\n signal: AbortSignal;\n};\n\nexport type OverlayControl = {\n [Symbol.dispose](): void;\n /**\n * Closes the overlay.\n * @param reason — why it's closing (default `'programmatic'`)\n * @param restoreFocus — override per-call focus restoration (default: uses `restoreFocus` option)\n */\n close(reason?: DialogCloseReason, restoreFocus?: boolean): void;\n /** Tears down the overlay: closes silently and removes all event listeners. */\n dispose(): void;\n /** `true` after `dispose()` has been called. */\n readonly disposed: boolean;\n /**\n * Opens the overlay.\n * @param reason — why it's opening (default `'programmatic'`)\n */\n open(reason?: OverlayOpenReason): void;\n /**\n * Toggles open state.\n * - Opens with `openReason` (default `'click'`).\n * - Closes with `closeReason` (default `'trigger'`).\n */\n toggle(openReason?: OverlayOpenReason, closeReason?: DialogCloseReason): void;\n};\n\n// ── Factory ───────────────────────────────────────────────────────────────────\nexport const createOverlayControl = (options: OverlayControlOptions): OverlayControl => {\n let positionerCleanup: (() => void) | null = null;\n\n const shouldRestoreFocus = (): boolean => {\n if (typeof options.restoreFocus === 'function') return options.restoreFocus();\n\n return options.restoreFocus ?? true;\n };\n\n // Per-instance outside-pointer listener registered directly on document.\n // Uses 'pointerdown' instead of 'click' so that tapping empty/non-interactive\n // areas on iOS Safari (which does not synthesize 'click' for those targets)\n // still dismisses the overlay.\n // No shared multiplexer needed — max ~3 overlays can be open concurrently.\n const clickListener = (event: Event): void => {\n if (!options.isOpen()) return;\n\n const path = (event as Event & { composedPath?: () => EventTarget[] }).composedPath?.() ?? [];\n const boundary = options.getBoundary();\n const panel = options.getPanel?.() ?? null;\n const target = (path[0] ?? event.target) as EventTarget | null;\n const nodeTarget = target instanceof Node ? target : null;\n const insideByPath = path.some((entry) => entry === boundary || entry === panel);\n const insideByContainment = nodeTarget\n ? (boundary?.contains(nodeTarget) ?? false) || (panel?.contains(nodeTarget) ?? false)\n : false;\n\n if (!insideByPath && !insideByContainment) close('outsideClick');\n };\n\n const registerClickListener = (active: boolean): void => {\n if (active) {\n document.addEventListener('pointerdown', clickListener, { capture: true });\n } else {\n document.removeEventListener('pointerdown', clickListener, { capture: true });\n }\n };\n\n const open = (reason: OverlayOpenReason = 'programmatic'): void => {\n if (options.isDisabled?.() || options.isOpen()) return;\n\n options.setOpen(true, reason);\n registerClickListener(true);\n\n if (options.positioner) {\n options.positioner.update();\n positionerCleanup = options.positioner.startAutoUpdate?.() ?? null;\n }\n\n options.onOpen?.(reason);\n };\n\n const close = (reason: DialogCloseReason = 'programmatic', restoreFocus?: boolean, silent = false): void => {\n if (!options.isOpen()) return;\n\n options.setOpen(false, reason);\n registerClickListener(false);\n\n if (positionerCleanup) {\n positionerCleanup();\n positionerCleanup = null;\n }\n\n const restore = restoreFocus ?? shouldRestoreFocus();\n\n if (restore) options.getTrigger?.()?.focus();\n\n if (!silent) options.onClose?.(reason);\n };\n\n const toggle = (openReason: OverlayOpenReason = 'click', closeReason: DialogCloseReason = 'trigger'): void => {\n if (options.isOpen()) {\n close(closeReason);\n } else {\n open(openReason);\n }\n };\n\n let disposed = false;\n\n const dispose = (): void => {\n if (disposed) return;\n\n disposed = true;\n\n // Close silently — teardown should not fire onClose callbacks.\n if (options.isOpen()) close('programmatic', false, true);\n\n registerClickListener(false);\n\n if (positionerCleanup) {\n positionerCleanup();\n positionerCleanup = null;\n }\n };\n\n options.signal.addEventListener('abort', dispose, { once: true });\n\n return {\n close,\n dispose,\n get disposed() {\n return disposed;\n },\n open,\n [Symbol.dispose]: dispose,\n toggle,\n };\n};\n"],"mappings":";AAoEA,IAAa,KAAwB,MAAmD;CACtF,IAAI,IAAyC,MAEvC,UACA,OAAO,EAAQ,gBAAiB,aAAmB,EAAQ,aAAa,IAErE,EAAQ,gBAAgB,IAQ3B,KAAiB,MAAuB;EAC5C,IAAI,CAAC,EAAQ,OAAO,GAAG;EAEvB,IAAM,IAAQ,EAAyD,eAAe,KAAK,CAAC,GACtF,IAAW,EAAQ,YAAY,GAC/B,IAAQ,EAAQ,WAAW,KAAK,MAChC,IAAU,EAAK,MAAM,EAAM,QAC3B,IAAa,aAAkB,OAAO,IAAS,MAC/C,IAAe,EAAK,MAAM,MAAU,MAAU,KAAY,MAAU,CAAK,GACzE,IAAsB,KACvB,GAAU,SAAS,CAAU,KAAK,QAAW,GAAO,SAAS,CAAU,KAAK,MAC7E;EAEJ,AAAI,CAAC,KAAgB,CAAC,KAAqB,EAAM,cAAc;CACjE,GAEM,KAAyB,MAA0B;EACvD,AAAI,IACF,SAAS,iBAAiB,eAAe,GAAe,EAAE,SAAS,GAAK,CAAC,IAEzE,SAAS,oBAAoB,eAAe,GAAe,EAAE,SAAS,GAAK,CAAC;CAEhF,GAEM,KAAQ,IAA4B,mBAAyB;EAC7D,EAAQ,aAAa,KAAK,EAAQ,OAAO,MAE7C,EAAQ,QAAQ,IAAM,CAAM,GAC5B,EAAsB,EAAI,GAEtB,EAAQ,eACV,EAAQ,WAAW,OAAO,GAC1B,IAAoB,EAAQ,WAAW,kBAAkB,KAAK,OAGhE,EAAQ,SAAS,CAAM;CACzB,GAEM,KAAS,IAA4B,gBAAgB,GAAwB,IAAS,OAAgB;EACrG,EAAQ,OAAO,MAEpB,EAAQ,QAAQ,IAAO,CAAM,GAC7B,EAAsB,EAAK,GAE3B,AAEE,OADA,EAAkB,GACE,QAGN,KAAgB,EAAmB,MAEtC,EAAQ,aAAa,CAAC,EAAE,MAAM,GAEtC,KAAQ,EAAQ,UAAU,CAAM;CACvC,GAEM,KAAU,IAAgC,SAAS,IAAiC,cAAoB;EAC5G,AAAI,EAAQ,OAAO,IACjB,EAAM,CAAW,IAEjB,EAAK,CAAU;CAEnB,GAEI,IAAW,IAET,UAAsB;EACtB,MAEJ,IAAW,IAGP,EAAQ,OAAO,KAAG,EAAM,gBAAgB,IAAO,EAAI,GAEvD,EAAsB,EAAK,GAE3B,AAEE,OADA,EAAkB,GACE;CAExB;CAIA,OAFA,EAAQ,OAAO,iBAAiB,SAAS,GAAS,EAAE,MAAM,GAAK,CAAC,GAEzD;EACL;EACA;EACA,IAAI,WAAW;GACb,OAAO;EACT;EACA;GACC,OAAO,UAAU;EAClB;CACF;AACF"}
@@ -1,2 +0,0 @@
1
- let e=require("@vielzeug/ripple");var t=t=>{let n=(0,e.signal)(0),r=()=>{let e=t.pageSize;return e===void 0?10:typeof e==`number`?e:e.value??10},i=(0,e.computed)(()=>Math.ceil(t.getItems().length/r())),a=(0,e.computed)(()=>i.value===0?-1:Math.min(n.value,i.value-1)),o=(0,e.computed)(()=>{let e=a.value,n=r(),i=e*n;return t.getItems().slice(i,i+n)});return{goTo:e=>{Number.isFinite(e)&&(n.value=Math.max(0,e))},hasNext:(0,e.computed)(()=>i.value>0&&a.value<i.value-1),hasPrev:(0,e.computed)(()=>a.value>0),next:()=>{i.value>0&&a.value<i.value-1&&(n.value=a.value+1)},pageCount:i,pageIndex:a,pageItems:o,prev:()=>{a.value>0&&(n.value=a.value-1)},reset:()=>{n.value=0}}};exports.createPaginatedList=t;
2
- //# sourceMappingURL=paginated-list.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"paginated-list.cjs","names":[],"sources":["../../src/headless/paginated-list.ts"],"sourcesContent":["import { computed, type Readable, signal } from '@vielzeug/ripple';\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport type PaginatedListOptions<T> = {\n /** All items to paginate. Can be a reactive signal accessor. */\n getItems: () => T[];\n /** Number of items per page. Defaults to 10. */\n pageSize?: Readable<number> | number;\n};\n\nexport type PaginatedListHandle<T> = {\n /** Navigate to an absolute page index (clamped). */\n goTo(index: number): void;\n /** Whether there is a next page. */\n readonly hasNext: Readable<boolean>;\n /** Whether there is a previous page. */\n readonly hasPrev: Readable<boolean>;\n\n /** Navigate to the next page. No-op on last page. */\n next(): void;\n /** Total number of pages. */\n readonly pageCount: Readable<number>;\n /** Current 0-based page index. */\n readonly pageIndex: Readable<number>;\n /** Items visible on the current page. */\n readonly pageItems: Readable<T[]>;\n /** Navigate to the previous page. No-op on first page. */\n prev(): void;\n /** Reset to the first page. */\n reset(): void;\n};\n\n// ── Implementation ────────────────────────────────────────────────────────────\n\n/**\n * Reactive pagination state for a list of items.\n *\n * Decoupled from option rendering so it can be used with any sorted/filtered\n * item array (e.g., the `filteredOptions` signal in combobox).\n *\n * @example\n * ```ts\n * const paged = createPaginatedList({ getItems: () => allOptions.value, pageSize: 20 });\n * // render paged.pageItems.value\n * // navigation: paged.next(), paged.prev(), paged.goTo(0)\n * ```\n */\nexport const createPaginatedList = <T>(options: PaginatedListOptions<T>): PaginatedListHandle<T> => {\n const pageIndex = signal(0);\n const resolvedPageSize = (): number => {\n const ps = options.pageSize;\n\n if (ps === undefined) return 10;\n\n return typeof ps === 'number' ? ps : (ps.value ?? 10);\n };\n\n const pageCount = computed(() => Math.ceil(options.getItems().length / resolvedPageSize()));\n\n // Clamp page index when total page count shrinks (e.g. after filter change).\n // When pageCount is 0 (empty list), safePage returns -1 to signal no valid page.\n const safePage = computed(() => (pageCount.value === 0 ? -1 : Math.min(pageIndex.value, pageCount.value - 1)));\n\n const pageItems = computed(() => {\n const pg = safePage.value;\n const size = resolvedPageSize();\n const start = pg * size;\n\n return options.getItems().slice(start, start + size);\n });\n\n const goTo = (index: number): void => {\n // Lower-bound guard only — safePage handles the upper-bound clamp reactively\n // so that any subsequent pageCount reduction is also handled automatically.\n // Guard against NaN/Infinity (e.g. parseInt() failures) which Math.max propagates silently.\n if (!Number.isFinite(index)) return;\n\n pageIndex.value = Math.max(0, index);\n };\n\n const next = (): void => {\n if (pageCount.value > 0 && safePage.value < pageCount.value - 1) pageIndex.value = safePage.value + 1;\n };\n\n const prev = (): void => {\n if (safePage.value > 0) pageIndex.value = safePage.value - 1;\n };\n\n const reset = (): void => {\n pageIndex.value = 0;\n };\n\n const hasNext = computed(() => pageCount.value > 0 && safePage.value < pageCount.value - 1);\n const hasPrev = computed(() => safePage.value > 0);\n\n return {\n goTo,\n hasNext,\n hasPrev,\n next,\n pageCount,\n pageIndex: safePage,\n pageItems,\n prev,\n reset,\n };\n};\n"],"mappings":"kCAgDA,IAAa,EAA0B,GAA6D,CAClG,IAAM,GAAA,EAAA,EAAA,OAAA,CAAmB,CAAC,EACpB,MAAiC,CACrC,IAAM,EAAK,EAAQ,SAInB,OAFI,IAAO,IAAA,GAAkB,GAEtB,OAAO,GAAO,SAAW,EAAM,EAAG,OAAS,EACpD,EAEM,GAAA,EAAA,EAAA,SAAA,KAA2B,KAAK,KAAK,EAAQ,SAAS,CAAC,CAAC,OAAS,EAAiB,CAAC,CAAC,EAIpF,GAAA,EAAA,EAAA,SAAA,KAA2B,EAAU,QAAU,EAAI,GAAK,KAAK,IAAI,EAAU,MAAO,EAAU,MAAQ,CAAC,CAAE,EAEvG,GAAA,EAAA,EAAA,SAAA,KAA2B,CAC/B,IAAM,EAAK,EAAS,MACd,EAAO,EAAiB,EACxB,EAAQ,EAAK,EAEnB,OAAO,EAAQ,SAAS,CAAC,CAAC,MAAM,EAAO,EAAQ,CAAI,CACrD,CAAC,EA0BD,MAAO,CACL,KAzBY,GAAwB,CAI/B,OAAO,SAAS,CAAK,IAE1B,EAAU,MAAQ,KAAK,IAAI,EAAG,CAAK,EACrC,EAmBE,SAAA,EAAA,EAAA,SAAA,KAL6B,EAAU,MAAQ,GAAK,EAAS,MAAQ,EAAU,MAAQ,CAKvF,EACA,SAAA,EAAA,EAAA,SAAA,KAL6B,EAAS,MAAQ,CAK9C,EACA,SAnBuB,CACnB,EAAU,MAAQ,GAAK,EAAS,MAAQ,EAAU,MAAQ,IAAG,EAAU,MAAQ,EAAS,MAAQ,EACtG,EAkBE,YACA,UAAW,EACX,YACA,SAnBuB,CACnB,EAAS,MAAQ,IAAG,EAAU,MAAQ,EAAS,MAAQ,EAC7D,EAkBE,UAhBwB,CACxB,EAAU,MAAQ,CACpB,CAeA,CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"paginated-list.d.ts","sourceRoot":"","sources":["../../src/headless/paginated-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,QAAQ,EAAU,MAAM,kBAAkB,CAAC;AAInE,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAAI;IACpC,gEAAgE;IAChE,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;IACpB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI;IACnC,oDAAoD;IACpD,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,oCAAoC;IACpC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACpC,wCAAwC;IACxC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAEpC,qDAAqD;IACrD,IAAI,IAAI,IAAI,CAAC;IACb,6BAA6B;IAC7B,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrC,kCAAkC;IAClC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrC,yCAAyC;IACzC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IAClC,0DAA0D;IAC1D,IAAI,IAAI,IAAI,CAAC;IACb,+BAA+B;IAC/B,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAIF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mBAAmB,GAAI,CAAC,EAAE,SAAS,oBAAoB,CAAC,CAAC,CAAC,KAAG,mBAAmB,CAAC,CAAC,CA2D9F,CAAC"}
@@ -1,34 +0,0 @@
1
- import { computed as e, signal as t } from "@vielzeug/ripple";
2
- //#region src/headless/paginated-list.ts
3
- var n = (n) => {
4
- let r = t(0), i = () => {
5
- let e = n.pageSize;
6
- return e === void 0 ? 10 : typeof e == "number" ? e : e.value ?? 10;
7
- }, a = e(() => Math.ceil(n.getItems().length / i())), o = e(() => a.value === 0 ? -1 : Math.min(r.value, a.value - 1)), s = e(() => {
8
- let e = o.value, t = i(), r = e * t;
9
- return n.getItems().slice(r, r + t);
10
- });
11
- return {
12
- goTo: (e) => {
13
- Number.isFinite(e) && (r.value = Math.max(0, e));
14
- },
15
- hasNext: e(() => a.value > 0 && o.value < a.value - 1),
16
- hasPrev: e(() => o.value > 0),
17
- next: () => {
18
- a.value > 0 && o.value < a.value - 1 && (r.value = o.value + 1);
19
- },
20
- pageCount: a,
21
- pageIndex: o,
22
- pageItems: s,
23
- prev: () => {
24
- o.value > 0 && (r.value = o.value - 1);
25
- },
26
- reset: () => {
27
- r.value = 0;
28
- }
29
- };
30
- };
31
- //#endregion
32
- export { n as createPaginatedList };
33
-
34
- //# sourceMappingURL=paginated-list.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"paginated-list.js","names":[],"sources":["../../src/headless/paginated-list.ts"],"sourcesContent":["import { computed, type Readable, signal } from '@vielzeug/ripple';\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport type PaginatedListOptions<T> = {\n /** All items to paginate. Can be a reactive signal accessor. */\n getItems: () => T[];\n /** Number of items per page. Defaults to 10. */\n pageSize?: Readable<number> | number;\n};\n\nexport type PaginatedListHandle<T> = {\n /** Navigate to an absolute page index (clamped). */\n goTo(index: number): void;\n /** Whether there is a next page. */\n readonly hasNext: Readable<boolean>;\n /** Whether there is a previous page. */\n readonly hasPrev: Readable<boolean>;\n\n /** Navigate to the next page. No-op on last page. */\n next(): void;\n /** Total number of pages. */\n readonly pageCount: Readable<number>;\n /** Current 0-based page index. */\n readonly pageIndex: Readable<number>;\n /** Items visible on the current page. */\n readonly pageItems: Readable<T[]>;\n /** Navigate to the previous page. No-op on first page. */\n prev(): void;\n /** Reset to the first page. */\n reset(): void;\n};\n\n// ── Implementation ────────────────────────────────────────────────────────────\n\n/**\n * Reactive pagination state for a list of items.\n *\n * Decoupled from option rendering so it can be used with any sorted/filtered\n * item array (e.g., the `filteredOptions` signal in combobox).\n *\n * @example\n * ```ts\n * const paged = createPaginatedList({ getItems: () => allOptions.value, pageSize: 20 });\n * // render paged.pageItems.value\n * // navigation: paged.next(), paged.prev(), paged.goTo(0)\n * ```\n */\nexport const createPaginatedList = <T>(options: PaginatedListOptions<T>): PaginatedListHandle<T> => {\n const pageIndex = signal(0);\n const resolvedPageSize = (): number => {\n const ps = options.pageSize;\n\n if (ps === undefined) return 10;\n\n return typeof ps === 'number' ? ps : (ps.value ?? 10);\n };\n\n const pageCount = computed(() => Math.ceil(options.getItems().length / resolvedPageSize()));\n\n // Clamp page index when total page count shrinks (e.g. after filter change).\n // When pageCount is 0 (empty list), safePage returns -1 to signal no valid page.\n const safePage = computed(() => (pageCount.value === 0 ? -1 : Math.min(pageIndex.value, pageCount.value - 1)));\n\n const pageItems = computed(() => {\n const pg = safePage.value;\n const size = resolvedPageSize();\n const start = pg * size;\n\n return options.getItems().slice(start, start + size);\n });\n\n const goTo = (index: number): void => {\n // Lower-bound guard only — safePage handles the upper-bound clamp reactively\n // so that any subsequent pageCount reduction is also handled automatically.\n // Guard against NaN/Infinity (e.g. parseInt() failures) which Math.max propagates silently.\n if (!Number.isFinite(index)) return;\n\n pageIndex.value = Math.max(0, index);\n };\n\n const next = (): void => {\n if (pageCount.value > 0 && safePage.value < pageCount.value - 1) pageIndex.value = safePage.value + 1;\n };\n\n const prev = (): void => {\n if (safePage.value > 0) pageIndex.value = safePage.value - 1;\n };\n\n const reset = (): void => {\n pageIndex.value = 0;\n };\n\n const hasNext = computed(() => pageCount.value > 0 && safePage.value < pageCount.value - 1);\n const hasPrev = computed(() => safePage.value > 0);\n\n return {\n goTo,\n hasNext,\n hasPrev,\n next,\n pageCount,\n pageIndex: safePage,\n pageItems,\n prev,\n reset,\n };\n};\n"],"mappings":";;AAgDA,IAAa,KAA0B,MAA6D;CAClG,IAAM,IAAY,EAAO,CAAC,GACpB,UAAiC;EACrC,IAAM,IAAK,EAAQ;EAInB,OAFI,MAAO,KAAA,IAAkB,KAEtB,OAAO,KAAO,WAAW,IAAM,EAAG,SAAS;CACpD,GAEM,IAAY,QAAe,KAAK,KAAK,EAAQ,SAAS,CAAC,CAAC,SAAS,EAAiB,CAAC,CAAC,GAIpF,IAAW,QAAgB,EAAU,UAAU,IAAI,KAAK,KAAK,IAAI,EAAU,OAAO,EAAU,QAAQ,CAAC,CAAE,GAEvG,IAAY,QAAe;EAC/B,IAAM,IAAK,EAAS,OACd,IAAO,EAAiB,GACxB,IAAQ,IAAK;EAEnB,OAAO,EAAQ,SAAS,CAAC,CAAC,MAAM,GAAO,IAAQ,CAAI;CACrD,CAAC;CA0BD,OAAO;EACL,OAzBY,MAAwB;GAI/B,OAAO,SAAS,CAAK,MAE1B,EAAU,QAAQ,KAAK,IAAI,GAAG,CAAK;EACrC;EAmBE,SALc,QAAe,EAAU,QAAQ,KAAK,EAAS,QAAQ,EAAU,QAAQ,CAKvF;EACA,SALc,QAAe,EAAS,QAAQ,CAK9C;EACA,YAnBuB;GACvB,AAAI,EAAU,QAAQ,KAAK,EAAS,QAAQ,EAAU,QAAQ,MAAG,EAAU,QAAQ,EAAS,QAAQ;EACtG;EAkBE;EACA,WAAW;EACX;EACA,YAnBuB;GACvB,AAAI,EAAS,QAAQ,MAAG,EAAU,QAAQ,EAAS,QAAQ;EAC7D;EAkBE,aAhBwB;GACxB,EAAU,QAAQ;EACpB;CAeA;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse.cjs","names":[],"sources":["../../src/headless/parse.ts"],"sourcesContent":["// ── Trigger string parser ─────────────────────────────────────────────────────\n\n/**\n * Parses a comma-separated trigger string into a typed array, filtering against\n * a valid set and falling back to `defaults` when the input is empty or invalid.\n *\n * Used by tooltip and popover to normalise their `trigger` prop values.\n *\n * @example\n * ```ts\n * const VALID = new Set(['click', 'hover', 'focus'] as const);\n * parseStringTriggers('hover,focus', VALID, ['click']); // → ['hover', 'focus']\n * parseStringTriggers('', VALID, ['click']); // → ['click']\n * ```\n */\nexport const parseStringTriggers = <T extends string>(\n value: string | null | undefined,\n valid: ReadonlySet<T>,\n defaults: T[],\n): T[] => {\n const parsed = String(value ?? '')\n .split(',')\n .map((t) => t.trim())\n .filter((t): t is T => valid.has(t as T));\n\n return parsed.length > 0 ? parsed : [...defaults];\n};\n"],"mappings":"AAeA,IAAa,GACX,EACA,EACA,IACQ,CACR,IAAM,EAAS,OAAO,GAAS,EAAE,CAAC,CAC/B,MAAM,GAAG,CAAC,CACV,IAAK,GAAM,EAAE,KAAK,CAAC,CAAC,CACpB,OAAQ,GAAc,EAAM,IAAI,CAAM,CAAC,EAE1C,OAAO,EAAO,OAAS,EAAI,EAAS,CAAC,GAAG,CAAQ,CAClD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/headless/parse.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mBAAmB,GAAI,CAAC,SAAS,MAAM,EAClD,OAAO,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,OAAO,WAAW,CAAC,CAAC,CAAC,EACrB,UAAU,CAAC,EAAE,KACZ,CAAC,EAOH,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse.js","names":[],"sources":["../../src/headless/parse.ts"],"sourcesContent":["// ── Trigger string parser ─────────────────────────────────────────────────────\n\n/**\n * Parses a comma-separated trigger string into a typed array, filtering against\n * a valid set and falling back to `defaults` when the input is empty or invalid.\n *\n * Used by tooltip and popover to normalise their `trigger` prop values.\n *\n * @example\n * ```ts\n * const VALID = new Set(['click', 'hover', 'focus'] as const);\n * parseStringTriggers('hover,focus', VALID, ['click']); // → ['hover', 'focus']\n * parseStringTriggers('', VALID, ['click']); // → ['click']\n * ```\n */\nexport const parseStringTriggers = <T extends string>(\n value: string | null | undefined,\n valid: ReadonlySet<T>,\n defaults: T[],\n): T[] => {\n const parsed = String(value ?? '')\n .split(',')\n .map((t) => t.trim())\n .filter((t): t is T => valid.has(t as T));\n\n return parsed.length > 0 ? parsed : [...defaults];\n};\n"],"mappings":";AAeA,IAAa,KACX,GACA,GACA,MACQ;CACR,IAAM,IAAS,OAAO,KAAS,EAAE,CAAC,CAC/B,MAAM,GAAG,CAAC,CACV,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC,CACpB,QAAQ,MAAc,EAAM,IAAI,CAAM,CAAC;CAE1C,OAAO,EAAO,SAAS,IAAI,IAAS,CAAC,GAAG,CAAQ;AAClD"}
@@ -1,2 +0,0 @@
1
- const e=require("./direction.cjs");let t=require("@vielzeug/orbit");var n=e=>e.endsWith(`-start`)?e.replace(`-start`,`-end`):e.endsWith(`-end`)?e.replace(`-end`,`-start`):e;function r({boundary:r,getDir:i,getFloating:a,getPlacement:o,getReference:s,matchWidth:c=!0,offsetPx:l=0,padding:u=6}){function d(){let t=o?.()??`bottom-start`;return(i?.()??e.elementDirection(s()))===`rtl`?n(t):t}function f(){let e=s(),n=a();if(!e||!n)return;let i=d(),o=(0,t.computePosition)(e,n,{boundary:r??(0,t.getClippingAncestorRect)(n),middleware:[...l?[(0,t.offset)(l)]:[],(0,t.flip)({padding:u}),(0,t.shift)({padding:u}),...c?[(0,t.size)({padding:u})]:[]],placement:i});n.style.left=`${o.x}px`,n.style.top=`${o.y}px`;let f=n.style.transition,p=n.style.transform;n.style.transition=`none`,n.style.transform=`none`;let m=n.getBoundingClientRect(),h=o.x-m.left,g=o.y-m.top;n.style.transition=f,n.style.transform=p,(h!==0||g!==0)&&(n.style.left=`${o.x+h}px`,n.style.top=`${o.y+g}px`),c&&(n.style.width=`${e.getBoundingClientRect().width}px`)}function p(){let e=s(),n=a();return!e||!n?()=>{}:(0,t.autoUpdate)(e,n,f)}return{floating:a,reference:s,startAutoUpdate:p,update:f}}exports.createDropdownPositioner=r;
2
- //# sourceMappingURL=positioner.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"positioner.cjs","names":[],"sources":["../../src/headless/positioner.ts"],"sourcesContent":["import {\n autoUpdate,\n computePosition,\n flip,\n getClippingAncestorRect,\n offset,\n type Placement,\n type Rect,\n shift,\n size,\n} from '@vielzeug/orbit';\n\nimport { elementDirection } from './direction';\n\n// ── Overlay positioner contract ──────────────────────────────────────────────\n\nexport type OverlayPositioner = {\n floating: () => HTMLElement | null;\n reference: () => HTMLElement | null;\n /** Start continuous position auto-updates. Returns a stop function. */\n startAutoUpdate?: () => () => void;\n update: () => void;\n};\n\n// ── Dropdown positioner ───────────────────────────────────────────────────────\n\nexport type DropdownPositionerOptions = {\n /**\n * Clipping boundary for flip/shift/size — the edges the dropdown must stay within.\n * Defaults to the nearest ancestor that actually clips content (`overflow:\n * hidden|auto|scroll|clip`, e.g. a dialog panel), auto-detected per update via\n * `getClippingAncestorRect()`, intersected with the viewport. Without this, flip/shift only\n * avoid the full page viewport — a dropdown can be \"in view\" by that measure while still\n * visibly overhanging a much smaller container it's actually nested in. Pass an explicit\n * boundary to override auto-detection.\n */\n boundary?: Element | Rect;\n /**\n * Returns the text direction used for placement mirroring. Defaults to the resolved\n * direction of the reference element (nearest `dir=\"ltr\"|\"rtl\"` ancestor, falling back to\n * computed style) — most callers never need to pass this explicitly.\n */\n getDir?: () => 'ltr' | 'rtl';\n /** Getter for the floating (dropdown panel) element. */\n getFloating: () => HTMLElement | null;\n /** Getter for the current placement. Defaults to 'bottom-start' (RTL-aware: flips to 'bottom-end'). */\n getPlacement?: () => Placement;\n /** Getter for the reference (trigger) element. */\n getReference: () => HTMLElement | null;\n /** Whether to match the floating element width to the reference. Default: true */\n matchWidth?: boolean;\n /** Additional offset in pixels between reference and floating element. Default: 0 */\n offsetPx?: number;\n /** Padding (px) used by flip, shift, and size middleware. Default: 6 */\n padding?: number;\n};\n\n/** Mirrors a start/end placement for RTL layouts. */\nconst rtlPlacement = (p: Placement): Placement => {\n if (p.endsWith('-start')) return p.replace('-start', '-end') as Placement;\n\n if (p.endsWith('-end')) return p.replace('-end', '-start') as Placement;\n\n return p;\n};\n\n/**\n * Creates an Orbit-powered positioner for dropdown overlays (select, combobox, menu).\n *\n * Uses flip + shift + optional width-matching middleware. Supports continuous\n * auto-update for repositioning on scroll or resize.\n *\n * RTL-aware: start/end placements are automatically mirrored so dropdowns open on the\n * correct side, based on `getDir` (or the reference element's resolved direction when\n * `getDir` is omitted).\n */\nexport function createDropdownPositioner({\n boundary,\n getDir,\n getFloating,\n getPlacement,\n getReference,\n matchWidth = true,\n offsetPx = 0,\n padding = 6,\n}: DropdownPositionerOptions): OverlayPositioner {\n function resolvedPlacement(): Placement {\n const base = getPlacement?.() ?? 'bottom-start';\n const dir = getDir?.() ?? elementDirection(getReference());\n\n return dir === 'rtl' ? rtlPlacement(base) : base;\n }\n\n function updatePosition(): void {\n const ref = getReference();\n const floating = getFloating();\n\n if (!ref || !floating) return;\n\n const placement = resolvedPlacement();\n // Defaults to `undefined` (meaning \"auto-detect\"), not the detected value itself —\n // re-running the detection on every update (rather than once, at positioner-creation time)\n // matters because the dialog/scroll-container an instance is rendered into can change\n // across opens (e.g. the same `<ore-select>` reused in different dialogs), and the detected\n // ancestor's own rect can change between opens even when it's the same element (a resized\n // dialog).\n const resolvedBoundary = boundary ?? getClippingAncestorRect(floating);\n\n const result = computePosition(ref, floating, {\n boundary: resolvedBoundary,\n middleware: [\n ...(offsetPx ? [offset(offsetPx)] : []),\n flip({ padding }),\n shift({ padding }),\n ...(matchWidth ? [size({ padding })] : []),\n ],\n placement,\n });\n\n floating.style.left = `${result.x}px`;\n floating.style.top = `${result.y}px`;\n\n // `computePosition()` assumes `left`/`top` resolve relative to the viewport (correct for\n // `position: fixed`) — true almost always, but not when some ancestor establishes a\n // containing block for fixed descendants (a non-`none` `transform`, even a visually-identity\n // one left over from an entrance transition that never resets to `none` at rest is a real,\n // easy-to-hit case — a modal dialog's panel, say). Analytically detecting *that* ancestor via\n // `getContainingBlock()` and pre-subtracting its rect turned out to be unreliable in\n // practice: browsers don't apply the \"ancestor transform traps fixed descendants\" rule\n // uniformly across every element nested under it in every case we tested — some floating\n // elements in the exact same subtree needed the correction and some didn't, for reasons we\n // couldn't fully pin down. Measuring what actually happened after writing `left`/`top`\n // and correcting only the observed gap sidesteps that: it's a no-op when the browser already\n // put the element where asked, and it fixes the same class of bug the moment there's a real\n // mismatch, regardless of which specific ancestor (if any) turns out to be responsible.\n //\n // The measurement itself must not be fooled by the floating element's *own* transform,\n // though: dropdowns/popovers here all use a `transform: translateY(...)` entrance transition\n // driven by a `[data-open]` attribute + `@starting-style` — right at open, before the\n // transition has visibly progressed, `getBoundingClientRect()` can still reflect that\n // starting offset (a handful of px, matching `--overlay-enter-translate-y`), which this\n // correction would otherwise misread as a permanent ancestor-driven mismatch and bake in\n // forever. Temporarily neutralizing the floating element's own transform for the measurement\n // (and restoring it before anything paints, so there's no visible flash) isolates the\n // correction to ancestor-driven offsets only, which is the only thing it's meant to fix.\n const prevTransition = floating.style.transition;\n const prevTransform = floating.style.transform;\n\n floating.style.transition = 'none';\n floating.style.transform = 'none';\n\n const actual = floating.getBoundingClientRect();\n const deltaX = result.x - actual.left;\n const deltaY = result.y - actual.top;\n\n floating.style.transition = prevTransition;\n floating.style.transform = prevTransform;\n\n if (deltaX !== 0 || deltaY !== 0) {\n floating.style.left = `${result.x + deltaX}px`;\n floating.style.top = `${result.y + deltaY}px`;\n }\n\n if (matchWidth) {\n floating.style.width = `${ref.getBoundingClientRect().width}px`;\n }\n }\n\n function startAutoUpdate(): () => void {\n const ref = getReference();\n const floating = getFloating();\n\n if (!ref || !floating) return () => {};\n\n return autoUpdate(ref, floating, updatePosition);\n }\n\n return { floating: getFloating, reference: getReference, startAutoUpdate, update: updatePosition };\n}\n"],"mappings":"oEA0DA,IAAM,EAAgB,GAChB,EAAE,SAAS,QAAQ,EAAU,EAAE,QAAQ,SAAU,MAAM,EAEvD,EAAE,SAAS,MAAM,EAAU,EAAE,QAAQ,OAAQ,QAAQ,EAElD,EAaT,SAAgB,EAAyB,CACvC,WACA,SACA,cACA,eACA,eACA,aAAa,GACb,WAAW,EACX,UAAU,GACqC,CAC/C,SAAS,GAA+B,CACtC,IAAM,EAAO,IAAe,GAAK,eAGjC,OAFY,IAAS,GAAK,EAAA,iBAAiB,EAAa,CAAC,KAE1C,MAAQ,EAAa,CAAI,EAAI,CAC9C,CAEA,SAAS,GAAuB,CAC9B,IAAM,EAAM,EAAa,EACnB,EAAW,EAAY,EAE7B,GAAI,CAAC,GAAO,CAAC,EAAU,OAEvB,IAAM,EAAY,EAAkB,EAS9B,GAAA,EAAA,EAAA,gBAAA,CAAyB,EAAK,EAAU,CAC5C,SAHuB,IAAA,EAAA,EAAA,wBAAA,CAAoC,CAAQ,EAInE,WAAY,CACV,GAAI,EAAW,EAAA,EAAA,EAAA,OAAA,CAAQ,CAAQ,CAAC,EAAI,CAAC,aAChC,CAAE,SAAQ,CAAC,cACV,CAAE,SAAQ,CAAC,EACjB,GAAI,EAAa,EAAA,EAAA,EAAA,KAAA,CAAM,CAAE,SAAQ,CAAC,CAAC,EAAI,CAAC,CAC1C,EACA,WACF,CAAC,EAED,EAAS,MAAM,KAAO,GAAG,EAAO,EAAE,IAClC,EAAS,MAAM,IAAM,GAAG,EAAO,EAAE,IAyBjC,IAAM,EAAiB,EAAS,MAAM,WAChC,EAAgB,EAAS,MAAM,UAErC,EAAS,MAAM,WAAa,OAC5B,EAAS,MAAM,UAAY,OAE3B,IAAM,EAAS,EAAS,sBAAsB,EACxC,EAAS,EAAO,EAAI,EAAO,KAC3B,EAAS,EAAO,EAAI,EAAO,IAEjC,EAAS,MAAM,WAAa,EAC5B,EAAS,MAAM,UAAY,GAEvB,IAAW,GAAK,IAAW,KAC7B,EAAS,MAAM,KAAO,GAAG,EAAO,EAAI,EAAO,IAC3C,EAAS,MAAM,IAAM,GAAG,EAAO,EAAI,EAAO,KAGxC,IACF,EAAS,MAAM,MAAQ,GAAG,EAAI,sBAAsB,CAAC,CAAC,MAAM,IAEhE,CAEA,SAAS,GAA8B,CACrC,IAAM,EAAM,EAAa,EACnB,EAAW,EAAY,EAI7B,MAFI,CAAC,GAAO,CAAC,MAAuB,CAAC,GAErC,EAAA,EAAA,WAAA,CAAkB,EAAK,EAAU,CAAc,CACjD,CAEA,MAAO,CAAE,SAAU,EAAa,UAAW,EAAc,kBAAiB,OAAQ,CAAe,CACnG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"positioner.d.ts","sourceRoot":"","sources":["../../src/headless/positioner.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,SAAS,EACd,KAAK,IAAI,EAGV,MAAM,iBAAiB,CAAC;AAMzB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACnC,SAAS,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACpC,uEAAuE;IACvE,eAAe,CAAC,EAAE,MAAM,MAAM,IAAI,CAAC;IACnC,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC;AAIF,MAAM,MAAM,yBAAyB,GAAG;IACtC;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,KAAK,GAAG,KAAK,CAAC;IAC7B,wDAAwD;IACxD,WAAW,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACtC,uGAAuG;IACvG,YAAY,CAAC,EAAE,MAAM,SAAS,CAAC;IAC/B,kDAAkD;IAClD,YAAY,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACvC,kFAAkF;IAClF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAWF;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,QAAQ,EACR,MAAM,EACN,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,UAAiB,EACjB,QAAY,EACZ,OAAW,GACZ,EAAE,yBAAyB,GAAG,iBAAiB,CA6F/C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"positioner.js","names":[],"sources":["../../src/headless/positioner.ts"],"sourcesContent":["import {\n autoUpdate,\n computePosition,\n flip,\n getClippingAncestorRect,\n offset,\n type Placement,\n type Rect,\n shift,\n size,\n} from '@vielzeug/orbit';\n\nimport { elementDirection } from './direction';\n\n// ── Overlay positioner contract ──────────────────────────────────────────────\n\nexport type OverlayPositioner = {\n floating: () => HTMLElement | null;\n reference: () => HTMLElement | null;\n /** Start continuous position auto-updates. Returns a stop function. */\n startAutoUpdate?: () => () => void;\n update: () => void;\n};\n\n// ── Dropdown positioner ───────────────────────────────────────────────────────\n\nexport type DropdownPositionerOptions = {\n /**\n * Clipping boundary for flip/shift/size — the edges the dropdown must stay within.\n * Defaults to the nearest ancestor that actually clips content (`overflow:\n * hidden|auto|scroll|clip`, e.g. a dialog panel), auto-detected per update via\n * `getClippingAncestorRect()`, intersected with the viewport. Without this, flip/shift only\n * avoid the full page viewport — a dropdown can be \"in view\" by that measure while still\n * visibly overhanging a much smaller container it's actually nested in. Pass an explicit\n * boundary to override auto-detection.\n */\n boundary?: Element | Rect;\n /**\n * Returns the text direction used for placement mirroring. Defaults to the resolved\n * direction of the reference element (nearest `dir=\"ltr\"|\"rtl\"` ancestor, falling back to\n * computed style) — most callers never need to pass this explicitly.\n */\n getDir?: () => 'ltr' | 'rtl';\n /** Getter for the floating (dropdown panel) element. */\n getFloating: () => HTMLElement | null;\n /** Getter for the current placement. Defaults to 'bottom-start' (RTL-aware: flips to 'bottom-end'). */\n getPlacement?: () => Placement;\n /** Getter for the reference (trigger) element. */\n getReference: () => HTMLElement | null;\n /** Whether to match the floating element width to the reference. Default: true */\n matchWidth?: boolean;\n /** Additional offset in pixels between reference and floating element. Default: 0 */\n offsetPx?: number;\n /** Padding (px) used by flip, shift, and size middleware. Default: 6 */\n padding?: number;\n};\n\n/** Mirrors a start/end placement for RTL layouts. */\nconst rtlPlacement = (p: Placement): Placement => {\n if (p.endsWith('-start')) return p.replace('-start', '-end') as Placement;\n\n if (p.endsWith('-end')) return p.replace('-end', '-start') as Placement;\n\n return p;\n};\n\n/**\n * Creates an Orbit-powered positioner for dropdown overlays (select, combobox, menu).\n *\n * Uses flip + shift + optional width-matching middleware. Supports continuous\n * auto-update for repositioning on scroll or resize.\n *\n * RTL-aware: start/end placements are automatically mirrored so dropdowns open on the\n * correct side, based on `getDir` (or the reference element's resolved direction when\n * `getDir` is omitted).\n */\nexport function createDropdownPositioner({\n boundary,\n getDir,\n getFloating,\n getPlacement,\n getReference,\n matchWidth = true,\n offsetPx = 0,\n padding = 6,\n}: DropdownPositionerOptions): OverlayPositioner {\n function resolvedPlacement(): Placement {\n const base = getPlacement?.() ?? 'bottom-start';\n const dir = getDir?.() ?? elementDirection(getReference());\n\n return dir === 'rtl' ? rtlPlacement(base) : base;\n }\n\n function updatePosition(): void {\n const ref = getReference();\n const floating = getFloating();\n\n if (!ref || !floating) return;\n\n const placement = resolvedPlacement();\n // Defaults to `undefined` (meaning \"auto-detect\"), not the detected value itself —\n // re-running the detection on every update (rather than once, at positioner-creation time)\n // matters because the dialog/scroll-container an instance is rendered into can change\n // across opens (e.g. the same `<ore-select>` reused in different dialogs), and the detected\n // ancestor's own rect can change between opens even when it's the same element (a resized\n // dialog).\n const resolvedBoundary = boundary ?? getClippingAncestorRect(floating);\n\n const result = computePosition(ref, floating, {\n boundary: resolvedBoundary,\n middleware: [\n ...(offsetPx ? [offset(offsetPx)] : []),\n flip({ padding }),\n shift({ padding }),\n ...(matchWidth ? [size({ padding })] : []),\n ],\n placement,\n });\n\n floating.style.left = `${result.x}px`;\n floating.style.top = `${result.y}px`;\n\n // `computePosition()` assumes `left`/`top` resolve relative to the viewport (correct for\n // `position: fixed`) — true almost always, but not when some ancestor establishes a\n // containing block for fixed descendants (a non-`none` `transform`, even a visually-identity\n // one left over from an entrance transition that never resets to `none` at rest is a real,\n // easy-to-hit case — a modal dialog's panel, say). Analytically detecting *that* ancestor via\n // `getContainingBlock()` and pre-subtracting its rect turned out to be unreliable in\n // practice: browsers don't apply the \"ancestor transform traps fixed descendants\" rule\n // uniformly across every element nested under it in every case we tested — some floating\n // elements in the exact same subtree needed the correction and some didn't, for reasons we\n // couldn't fully pin down. Measuring what actually happened after writing `left`/`top`\n // and correcting only the observed gap sidesteps that: it's a no-op when the browser already\n // put the element where asked, and it fixes the same class of bug the moment there's a real\n // mismatch, regardless of which specific ancestor (if any) turns out to be responsible.\n //\n // The measurement itself must not be fooled by the floating element's *own* transform,\n // though: dropdowns/popovers here all use a `transform: translateY(...)` entrance transition\n // driven by a `[data-open]` attribute + `@starting-style` — right at open, before the\n // transition has visibly progressed, `getBoundingClientRect()` can still reflect that\n // starting offset (a handful of px, matching `--overlay-enter-translate-y`), which this\n // correction would otherwise misread as a permanent ancestor-driven mismatch and bake in\n // forever. Temporarily neutralizing the floating element's own transform for the measurement\n // (and restoring it before anything paints, so there's no visible flash) isolates the\n // correction to ancestor-driven offsets only, which is the only thing it's meant to fix.\n const prevTransition = floating.style.transition;\n const prevTransform = floating.style.transform;\n\n floating.style.transition = 'none';\n floating.style.transform = 'none';\n\n const actual = floating.getBoundingClientRect();\n const deltaX = result.x - actual.left;\n const deltaY = result.y - actual.top;\n\n floating.style.transition = prevTransition;\n floating.style.transform = prevTransform;\n\n if (deltaX !== 0 || deltaY !== 0) {\n floating.style.left = `${result.x + deltaX}px`;\n floating.style.top = `${result.y + deltaY}px`;\n }\n\n if (matchWidth) {\n floating.style.width = `${ref.getBoundingClientRect().width}px`;\n }\n }\n\n function startAutoUpdate(): () => void {\n const ref = getReference();\n const floating = getFloating();\n\n if (!ref || !floating) return () => {};\n\n return autoUpdate(ref, floating, updatePosition);\n }\n\n return { floating: getFloating, reference: getReference, startAutoUpdate, update: updatePosition };\n}\n"],"mappings":";;;AA0DA,IAAM,KAAgB,MAChB,EAAE,SAAS,QAAQ,IAAU,EAAE,QAAQ,UAAU,MAAM,IAEvD,EAAE,SAAS,MAAM,IAAU,EAAE,QAAQ,QAAQ,QAAQ,IAElD;AAaT,SAAgB,EAAyB,EACvC,aACA,WACA,gBACA,iBACA,iBACA,gBAAa,IACb,cAAW,GACX,aAAU,KACqC;CAC/C,SAAS,IAA+B;EACtC,IAAM,IAAO,IAAe,KAAK;EAGjC,QAFY,IAAS,KAAK,EAAiB,EAAa,CAAC,OAE1C,QAAQ,EAAa,CAAI,IAAI;CAC9C;CAEA,SAAS,IAAuB;EAC9B,IAAM,IAAM,EAAa,GACnB,IAAW,EAAY;EAE7B,IAAI,CAAC,KAAO,CAAC,GAAU;EAEvB,IAAM,IAAY,EAAkB,GAS9B,IAAS,EAAgB,GAAK,GAAU;GAC5C,UAHuB,KAAY,EAAwB,CAAQ;GAInE,YAAY;IACV,GAAI,IAAW,CAAC,EAAO,CAAQ,CAAC,IAAI,CAAC;IACrC,EAAK,EAAE,WAAQ,CAAC;IAChB,EAAM,EAAE,WAAQ,CAAC;IACjB,GAAI,IAAa,CAAC,EAAK,EAAE,WAAQ,CAAC,CAAC,IAAI,CAAC;GAC1C;GACA;EACF,CAAC;EAGD,AADA,EAAS,MAAM,OAAO,GAAG,EAAO,EAAE,KAClC,EAAS,MAAM,MAAM,GAAG,EAAO,EAAE;EAyBjC,IAAM,IAAiB,EAAS,MAAM,YAChC,IAAgB,EAAS,MAAM;EAGrC,AADA,EAAS,MAAM,aAAa,QAC5B,EAAS,MAAM,YAAY;EAE3B,IAAM,IAAS,EAAS,sBAAsB,GACxC,IAAS,EAAO,IAAI,EAAO,MAC3B,IAAS,EAAO,IAAI,EAAO;EAUjC,AARA,EAAS,MAAM,aAAa,GAC5B,EAAS,MAAM,YAAY,IAEvB,MAAW,KAAK,MAAW,OAC7B,EAAS,MAAM,OAAO,GAAG,EAAO,IAAI,EAAO,KAC3C,EAAS,MAAM,MAAM,GAAG,EAAO,IAAI,EAAO,MAGxC,MACF,EAAS,MAAM,QAAQ,GAAG,EAAI,sBAAsB,CAAC,CAAC,MAAM;CAEhE;CAEA,SAAS,IAA8B;EACrC,IAAM,IAAM,EAAa,GACnB,IAAW,EAAY;EAI7B,OAFI,CAAC,KAAO,CAAC,UAAuB,CAAC,IAE9B,EAAW,GAAK,GAAU,CAAc;CACjD;CAEA,OAAO;EAAE,UAAU;EAAa,WAAW;EAAc;EAAiB,QAAQ;CAAe;AACnG"}
@@ -1,2 +0,0 @@
1
- let e=require("@vielzeug/ripple");var t=(t,n)=>{t.value?.(n);let r=(0,e.watch)(t,e=>e?.(n));return()=>{r.dispose(),t.value?.(null)}};exports.bindRefCallback=t;
2
- //# sourceMappingURL=ref-callback.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ref-callback.cjs","names":[],"sources":["../../src/headless/ref-callback.ts"],"sourcesContent":["import type { Readable } from '@vielzeug/ripple';\n\nimport { watch } from '@vielzeug/ripple';\n\n/** Shape every `ref` prop in this package uses — a JS-only escape hatch to the live element. */\nexport type RefCallback<T> = ((el: T | null) => void) | null | undefined;\n\n/**\n * Forwards a mounted element to a JS-only `ref` callback prop, and keeps forwarding to a\n * *new* callback if the prop is set again after mount (e.g. a parent sets it via a ref\n * callback after render, rather than at initial mount). Every text-entry-style component\n * with a `ref` escape-hatch prop (`ore-input`, `ore-textarea`, `ore-message-composer`,\n * `ore-file-input`) wires this identically — call it once from inside `onElement()`, alongside\n * whatever else that element needs wired.\n *\n * @example\n * ```ts\n * onElement(fieldRef, (el) => {\n * const unwireField = tf.wire(el);\n * const unwireRef = bindRefCallback(props.ref, el);\n *\n * return () => {\n * unwireField();\n * unwireRef();\n * };\n * });\n * ```\n */\nexport const bindRefCallback = <T extends Element>(ref: Readable<RefCallback<T>>, el: T): (() => void) => {\n // Immediate fire for when the prop is already set on mount.\n ref.value?.(el);\n\n const sub = watch(ref, (cb) => cb?.(el));\n\n return () => {\n sub.dispose();\n ref.value?.(null);\n };\n};\n"],"mappings":"kCA4BA,IAAa,GAAsC,EAA+B,IAAwB,CAExG,EAAI,QAAQ,CAAE,EAEd,IAAM,GAAA,EAAA,EAAA,MAAA,CAAY,EAAM,GAAO,IAAK,CAAE,CAAC,EAEvC,UAAa,CACX,EAAI,QAAQ,EACZ,EAAI,QAAQ,IAAI,CAClB,CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ref-callback.d.ts","sourceRoot":"","sources":["../../src/headless/ref-callback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAIjD,gGAAgG;AAChG,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,SAAS,OAAO,EAAE,KAAK,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAG,CAAC,MAAM,IAAI,CAUpG,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ref-callback.js","names":[],"sources":["../../src/headless/ref-callback.ts"],"sourcesContent":["import type { Readable } from '@vielzeug/ripple';\n\nimport { watch } from '@vielzeug/ripple';\n\n/** Shape every `ref` prop in this package uses — a JS-only escape hatch to the live element. */\nexport type RefCallback<T> = ((el: T | null) => void) | null | undefined;\n\n/**\n * Forwards a mounted element to a JS-only `ref` callback prop, and keeps forwarding to a\n * *new* callback if the prop is set again after mount (e.g. a parent sets it via a ref\n * callback after render, rather than at initial mount). Every text-entry-style component\n * with a `ref` escape-hatch prop (`ore-input`, `ore-textarea`, `ore-message-composer`,\n * `ore-file-input`) wires this identically — call it once from inside `onElement()`, alongside\n * whatever else that element needs wired.\n *\n * @example\n * ```ts\n * onElement(fieldRef, (el) => {\n * const unwireField = tf.wire(el);\n * const unwireRef = bindRefCallback(props.ref, el);\n *\n * return () => {\n * unwireField();\n * unwireRef();\n * };\n * });\n * ```\n */\nexport const bindRefCallback = <T extends Element>(ref: Readable<RefCallback<T>>, el: T): (() => void) => {\n // Immediate fire for when the prop is already set on mount.\n ref.value?.(el);\n\n const sub = watch(ref, (cb) => cb?.(el));\n\n return () => {\n sub.dispose();\n ref.value?.(null);\n };\n};\n"],"mappings":";;AA4BA,IAAa,KAAsC,GAA+B,MAAwB;CAExG,EAAI,QAAQ,CAAE;CAEd,IAAM,IAAM,EAAM,IAAM,MAAO,IAAK,CAAE,CAAC;CAEvC,aAAa;EAEX,AADA,EAAI,QAAQ,GACZ,EAAI,QAAQ,IAAI;CAClB;AACF"}
@@ -1,2 +0,0 @@
1
- let e=require("@vielzeug/ripple");var t=t=>{let n=(0,e.signal)(new Set),r=e=>n.value.has(e),i=()=>{let e=t.pageItems();return e.length?e.every(e=>n.value.has(t.getRowKey(e))):!1},a=e=>{n.value=e,t.onSelectionChange?.(e)};return{clearSelection:()=>{a(new Set)},isAllSelected:i,isSelected:r,selectAll:()=>{if(t.selectionMode()!==`multi`)return;let e=t.pageItems();if(i()){let r=new Set(n.value);for(let n of e)r.delete(t.getRowKey(n));a(r)}else{let r=new Set(n.value);for(let n of e)r.add(t.getRowKey(n));a(r)}},selectedKeys:(0,e.computed)(()=>new Set(n.value)),setSelection:e=>{a(new Set(e))},toggleRow:e=>{let r=t.selectionMode();if(r===`none`)return;let i=new Set(n.value);i.has(e)?i.delete(e):(r===`single`&&i.clear(),i.add(e)),a(i)}}};exports.createSelectionControl=t;
2
- //# sourceMappingURL=selection-control.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"selection-control.cjs","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":"kCAkCA,IAAa,EAA6B,GAA0D,CAClG,IAAM,GAAA,EAAA,EAAA,OAAA,CAAoC,IAAI,GAAK,EAE7C,EAAc,GAAyB,EAAc,MAAM,IAAI,CAAG,EAElE,MAA+B,CACnC,IAAM,EAAO,EAAQ,UAAU,EAI/B,OAFK,EAAK,OAEH,EAAK,MAAO,GAAS,EAAc,MAAM,IAAI,EAAQ,UAAU,CAAI,CAAC,CAAC,EAFnD,EAG3B,EAEM,EAAoB,GAA4B,CACpD,EAAc,MAAQ,EACtB,EAAQ,oBAAoB,CAAI,CAClC,EAiDA,MAAO,CACL,mBATiC,CACjC,EAAiB,IAAI,GAAK,CAC5B,EAQE,gBACA,aACA,cAhC4B,CAC5B,GAAI,EAAQ,cAAc,IAAM,QAAS,OAEzC,IAAM,EAAO,EAAQ,UAAU,EAE/B,GAAI,EAAc,EAAG,CACnB,IAAM,EAAO,IAAI,IAAI,EAAc,KAAK,EAExC,IAAK,IAAM,KAAQ,EAAM,EAAK,OAAO,EAAQ,UAAU,CAAI,CAAC,EAE5D,EAAiB,CAAI,CACvB,KAAO,CACL,IAAM,EAAO,IAAI,IAAI,EAAc,KAAK,EAExC,IAAK,IAAM,KAAQ,EAAM,EAAK,IAAI,EAAQ,UAAU,CAAI,CAAC,EAEzD,EAAiB,CAAI,CACvB,CACF,EAeE,cAAA,EAAA,EAAA,SAAA,KAA6B,IAAI,IAAI,EAAc,KAAK,CAAC,EACzD,aAVoB,GAA4B,CAChD,EAAiB,IAAI,IAAI,CAAI,CAAC,CAChC,EASE,UAtDiB,GAAsB,CACvC,IAAM,EAAO,EAAQ,cAAc,EAEnC,GAAI,IAAS,OAAQ,OAErB,IAAM,EAAO,IAAI,IAAI,EAAc,KAAK,EAEpC,EAAK,IAAI,CAAG,EACd,EAAK,OAAO,CAAG,GACN,IAAS,UAClB,EAAK,MAAM,EAGX,EAAK,IAAI,CAAG,GAGd,EAAiB,CAAI,CACvB,CAsCA,CACF"}
@@ -1,30 +0,0 @@
1
- import { type Readable } from '@vielzeug/ripple';
2
- import type { SelectionMode } from './datagrid';
3
- export type SelectionControlOptions<T> = {
4
- /** Returns a unique string key for each row item. */
5
- getRowKey: (item: T) => string;
6
- /** Called when selection changes. Receives the full set of selected keys. */
7
- onSelectionChange?: (keys: Set<string>) => void;
8
- /** Returns the current page items reactively. */
9
- pageItems: () => T[];
10
- /** Returns the current selection mode reactively. */
11
- selectionMode: () => SelectionMode;
12
- };
13
- export type SelectionControl = {
14
- /** Deselect all rows. */
15
- clearSelection(): void;
16
- /** Whether all current-page rows are selected. */
17
- isAllSelected(): boolean;
18
- /** Whether a given row key is selected. */
19
- isSelected(key: string): boolean;
20
- /** Select (or deselect if already all selected) all rows on the current page. */
21
- selectAll(): void;
22
- /** Current selected row keys. Reactive signal. Returns a snapshot copy. */
23
- readonly selectedKeys: Readable<ReadonlySet<string>>;
24
- /** Set the selection to an explicit set of keys. */
25
- setSelection(keys: Set<string>): void;
26
- /** Toggle selection for a single row. */
27
- toggleRow(key: string): void;
28
- };
29
- export declare const createSelectionControl: <T>(options: SelectionControlOptions<T>) => SelectionControl;
30
- //# sourceMappingURL=selection-control.d.ts.map