@vielzeug/refine 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1097) hide show
  1. package/README.md +89 -0
  2. package/dist/_dev.cjs +2 -0
  3. package/dist/_dev.cjs.map +1 -0
  4. package/dist/_dev.d.ts +2 -0
  5. package/dist/_dev.d.ts.map +1 -0
  6. package/dist/_dev.js +9 -0
  7. package/dist/_dev.js.map +1 -0
  8. package/dist/_virtual/_rolldown/runtime.cjs +1 -0
  9. package/dist/accordion-item.cjs +26 -0
  10. package/dist/accordion-item.cjs.map +1 -0
  11. package/dist/accordion-item.js +124 -0
  12. package/dist/accordion-item.js.map +1 -0
  13. package/dist/accordion.cjs +2 -0
  14. package/dist/accordion.cjs.map +1 -0
  15. package/dist/accordion.js +47 -0
  16. package/dist/accordion.js.map +1 -0
  17. package/dist/alert.cjs +36 -0
  18. package/dist/alert.cjs.map +1 -0
  19. package/dist/alert.js +93 -0
  20. package/dist/alert.js.map +1 -0
  21. package/dist/async.cjs +55 -0
  22. package/dist/async.cjs.map +1 -0
  23. package/dist/async.js +99 -0
  24. package/dist/async.js.map +1 -0
  25. package/dist/avatar.cjs +18 -0
  26. package/dist/avatar.cjs.map +1 -0
  27. package/dist/avatar.js +108 -0
  28. package/dist/avatar.js.map +1 -0
  29. package/dist/badge.cjs +7 -0
  30. package/dist/badge.cjs.map +1 -0
  31. package/dist/badge.js +65 -0
  32. package/dist/badge.js.map +1 -0
  33. package/dist/box.cjs +2 -0
  34. package/dist/box.cjs.map +1 -0
  35. package/dist/box.js +31 -0
  36. package/dist/box.js.map +1 -0
  37. package/dist/breadcrumb.cjs +21 -0
  38. package/dist/breadcrumb.cjs.map +1 -0
  39. package/dist/breadcrumb.js +57 -0
  40. package/dist/breadcrumb.js.map +1 -0
  41. package/dist/button-group.cjs +6 -0
  42. package/dist/button-group.cjs.map +1 -0
  43. package/dist/button-group.js +33 -0
  44. package/dist/button-group.js.map +1 -0
  45. package/dist/button.cjs +18 -0
  46. package/dist/button.cjs.map +1 -0
  47. package/dist/button.js +124 -0
  48. package/dist/button.js.map +1 -0
  49. package/dist/calendar.cjs +126 -0
  50. package/dist/calendar.cjs.map +1 -0
  51. package/dist/calendar.js +300 -0
  52. package/dist/calendar.js.map +1 -0
  53. package/dist/card.cjs +23 -0
  54. package/dist/card.cjs.map +1 -0
  55. package/dist/card.js +87 -0
  56. package/dist/card.js.map +1 -0
  57. package/dist/carousel.cjs +61 -0
  58. package/dist/carousel.cjs.map +1 -0
  59. package/dist/carousel.js +280 -0
  60. package/dist/carousel.js.map +1 -0
  61. package/dist/checkbox-group.cjs +18 -0
  62. package/dist/checkbox-group.cjs.map +1 -0
  63. package/dist/checkbox-group.js +118 -0
  64. package/dist/checkbox-group.js.map +1 -0
  65. package/dist/checkbox.cjs +11 -0
  66. package/dist/checkbox.cjs.map +1 -0
  67. package/dist/checkbox.js +88 -0
  68. package/dist/checkbox.js.map +1 -0
  69. package/dist/chip.cjs +42 -0
  70. package/dist/chip.cjs.map +1 -0
  71. package/dist/chip.js +133 -0
  72. package/dist/chip.js.map +1 -0
  73. package/dist/code-window.cjs +19 -0
  74. package/dist/code-window.cjs.map +1 -0
  75. package/dist/code-window.js +41 -0
  76. package/dist/code-window.js.map +1 -0
  77. package/dist/combobox.cjs +103 -0
  78. package/dist/combobox.cjs.map +1 -0
  79. package/dist/combobox.js +444 -0
  80. package/dist/combobox.js.map +1 -0
  81. package/dist/content/avatar/avatar-group.css?inline.cjs +2 -0
  82. package/dist/content/avatar/avatar-group.css?inline.cjs.map +1 -0
  83. package/dist/content/avatar/avatar-group.css?inline.js +6 -0
  84. package/dist/content/avatar/avatar-group.css?inline.js.map +1 -0
  85. package/dist/content/avatar/avatar.css?inline.cjs +2 -0
  86. package/dist/content/avatar/avatar.css?inline.cjs.map +1 -0
  87. package/dist/content/avatar/avatar.css?inline.js +6 -0
  88. package/dist/content/avatar/avatar.css?inline.js.map +1 -0
  89. package/dist/content/avatar/avatar.d.ts +88 -0
  90. package/dist/content/avatar/avatar.d.ts.map +1 -0
  91. package/dist/content/breadcrumb/breadcrumb-item.css?inline.cjs +2 -0
  92. package/dist/content/breadcrumb/breadcrumb-item.css?inline.cjs.map +1 -0
  93. package/dist/content/breadcrumb/breadcrumb-item.css?inline.js +6 -0
  94. package/dist/content/breadcrumb/breadcrumb-item.css?inline.js.map +1 -0
  95. package/dist/content/breadcrumb/breadcrumb.css?inline.cjs +2 -0
  96. package/dist/content/breadcrumb/breadcrumb.css?inline.cjs.map +1 -0
  97. package/dist/content/breadcrumb/breadcrumb.css?inline.js +6 -0
  98. package/dist/content/breadcrumb/breadcrumb.css?inline.js.map +1 -0
  99. package/dist/content/breadcrumb/breadcrumb.d.ts +57 -0
  100. package/dist/content/breadcrumb/breadcrumb.d.ts.map +1 -0
  101. package/dist/content/card/card.css?inline.cjs +2 -0
  102. package/dist/content/card/card.css?inline.cjs.map +1 -0
  103. package/dist/content/card/card.css?inline.js +6 -0
  104. package/dist/content/card/card.css?inline.js.map +1 -0
  105. package/dist/content/card/card.d.ts +74 -0
  106. package/dist/content/card/card.d.ts.map +1 -0
  107. package/dist/content/carousel/carousel-slide.cjs +2 -0
  108. package/dist/content/carousel/carousel-slide.cjs.map +1 -0
  109. package/dist/content/carousel/carousel-slide.css?inline.cjs +2 -0
  110. package/dist/content/carousel/carousel-slide.css?inline.cjs.map +1 -0
  111. package/dist/content/carousel/carousel-slide.css?inline.js +6 -0
  112. package/dist/content/carousel/carousel-slide.css?inline.js.map +1 -0
  113. package/dist/content/carousel/carousel-slide.d.ts +2 -0
  114. package/dist/content/carousel/carousel-slide.d.ts.map +1 -0
  115. package/dist/content/carousel/carousel-slide.js +18 -0
  116. package/dist/content/carousel/carousel-slide.js.map +1 -0
  117. package/dist/content/carousel/carousel.css?inline.cjs +2 -0
  118. package/dist/content/carousel/carousel.css?inline.cjs.map +1 -0
  119. package/dist/content/carousel/carousel.css?inline.js +6 -0
  120. package/dist/content/carousel/carousel.css?inline.js.map +1 -0
  121. package/dist/content/carousel/carousel.d.ts +110 -0
  122. package/dist/content/carousel/carousel.d.ts.map +1 -0
  123. package/dist/content/carousel/index.d.ts +3 -0
  124. package/dist/content/carousel/index.d.ts.map +1 -0
  125. package/dist/content/code-window/code-window.css?inline.cjs +2 -0
  126. package/dist/content/code-window/code-window.css?inline.cjs.map +1 -0
  127. package/dist/content/code-window/code-window.css?inline.js +6 -0
  128. package/dist/content/code-window/code-window.css?inline.js.map +1 -0
  129. package/dist/content/code-window/code-window.d.ts +61 -0
  130. package/dist/content/code-window/code-window.d.ts.map +1 -0
  131. package/dist/content/copy-command/copy-command.css?inline.cjs +2 -0
  132. package/dist/content/copy-command/copy-command.css?inline.cjs.map +1 -0
  133. package/dist/content/copy-command/copy-command.css?inline.js +6 -0
  134. package/dist/content/copy-command/copy-command.css?inline.js.map +1 -0
  135. package/dist/content/copy-command/copy-command.d.ts +66 -0
  136. package/dist/content/copy-command/copy-command.d.ts.map +1 -0
  137. package/dist/content/icon/icon.css?inline.cjs +2 -0
  138. package/dist/content/icon/icon.css?inline.cjs.map +1 -0
  139. package/dist/content/icon/icon.css?inline.js +6 -0
  140. package/dist/content/icon/icon.css?inline.js.map +1 -0
  141. package/dist/content/icon/icon.d.ts +45 -0
  142. package/dist/content/icon/icon.d.ts.map +1 -0
  143. package/dist/content/index.d.ts +23 -0
  144. package/dist/content/index.d.ts.map +1 -0
  145. package/dist/content/pagination/pagination.css?inline.cjs +2 -0
  146. package/dist/content/pagination/pagination.css?inline.cjs.map +1 -0
  147. package/dist/content/pagination/pagination.css?inline.js +6 -0
  148. package/dist/content/pagination/pagination.css?inline.js.map +1 -0
  149. package/dist/content/pagination/pagination.d.ts +61 -0
  150. package/dist/content/pagination/pagination.d.ts.map +1 -0
  151. package/dist/content/separator/separator.css?inline.cjs +2 -0
  152. package/dist/content/separator/separator.css?inline.cjs.map +1 -0
  153. package/dist/content/separator/separator.css?inline.js +6 -0
  154. package/dist/content/separator/separator.css?inline.js.map +1 -0
  155. package/dist/content/separator/separator.d.ts +38 -0
  156. package/dist/content/separator/separator.d.ts.map +1 -0
  157. package/dist/content/table/table.css?inline.cjs +2 -0
  158. package/dist/content/table/table.css?inline.cjs.map +1 -0
  159. package/dist/content/table/table.css?inline.js +6 -0
  160. package/dist/content/table/table.css?inline.js.map +1 -0
  161. package/dist/content/table/table.d.ts +76 -0
  162. package/dist/content/table/table.d.ts.map +1 -0
  163. package/dist/content/text/text.css?inline.cjs +2 -0
  164. package/dist/content/text/text.css?inline.cjs.map +1 -0
  165. package/dist/content/text/text.css?inline.js +6 -0
  166. package/dist/content/text/text.css?inline.js.map +1 -0
  167. package/dist/content/text/text.d.ts +55 -0
  168. package/dist/content/text/text.d.ts.map +1 -0
  169. package/dist/copy-command.cjs +17 -0
  170. package/dist/copy-command.cjs.map +1 -0
  171. package/dist/copy-command.js +55 -0
  172. package/dist/copy-command.js.map +1 -0
  173. package/dist/custom-elements.json +12641 -0
  174. package/dist/datagrid.cjs +435 -0
  175. package/dist/datagrid.cjs.map +1 -0
  176. package/dist/datagrid.js +764 -0
  177. package/dist/datagrid.js.map +1 -0
  178. package/dist/date-picker.cjs +133 -0
  179. package/dist/date-picker.cjs.map +1 -0
  180. package/dist/date-picker.js +315 -0
  181. package/dist/date-picker.js.map +1 -0
  182. package/dist/dialog.cjs +28 -0
  183. package/dist/dialog.cjs.map +1 -0
  184. package/dist/dialog.js +88 -0
  185. package/dist/dialog.js.map +1 -0
  186. package/dist/disclosure/accordion/accordion.css?inline.cjs +2 -0
  187. package/dist/disclosure/accordion/accordion.css?inline.cjs.map +1 -0
  188. package/dist/disclosure/accordion/accordion.css?inline.js +6 -0
  189. package/dist/disclosure/accordion/accordion.css?inline.js.map +1 -0
  190. package/dist/disclosure/accordion/accordion.d.ts +62 -0
  191. package/dist/disclosure/accordion/accordion.d.ts.map +1 -0
  192. package/dist/disclosure/accordion-item/accordion-item.css?inline.cjs +2 -0
  193. package/dist/disclosure/accordion-item/accordion-item.css?inline.cjs.map +1 -0
  194. package/dist/disclosure/accordion-item/accordion-item.css?inline.js +6 -0
  195. package/dist/disclosure/accordion-item/accordion-item.css?inline.js.map +1 -0
  196. package/dist/disclosure/accordion-item/accordion-item.d.ts +70 -0
  197. package/dist/disclosure/accordion-item/accordion-item.d.ts.map +1 -0
  198. package/dist/disclosure/index.d.ts +11 -0
  199. package/dist/disclosure/index.d.ts.map +1 -0
  200. package/dist/disclosure/tab-item/tab-item.css?inline.cjs +2 -0
  201. package/dist/disclosure/tab-item/tab-item.css?inline.cjs.map +1 -0
  202. package/dist/disclosure/tab-item/tab-item.css?inline.js +6 -0
  203. package/dist/disclosure/tab-item/tab-item.css?inline.js.map +1 -0
  204. package/dist/disclosure/tab-item/tab-item.d.ts +49 -0
  205. package/dist/disclosure/tab-item/tab-item.d.ts.map +1 -0
  206. package/dist/disclosure/tab-panel/tab-panel.css?inline.cjs +2 -0
  207. package/dist/disclosure/tab-panel/tab-panel.css?inline.cjs.map +1 -0
  208. package/dist/disclosure/tab-panel/tab-panel.css?inline.js +6 -0
  209. package/dist/disclosure/tab-panel/tab-panel.css?inline.js.map +1 -0
  210. package/dist/disclosure/tab-panel/tab-panel.d.ts +33 -0
  211. package/dist/disclosure/tab-panel/tab-panel.d.ts.map +1 -0
  212. package/dist/disclosure/tabs/tabs.css?inline.cjs +2 -0
  213. package/dist/disclosure/tabs/tabs.css?inline.cjs.map +1 -0
  214. package/dist/disclosure/tabs/tabs.css?inline.js +6 -0
  215. package/dist/disclosure/tabs/tabs.css?inline.js.map +1 -0
  216. package/dist/disclosure/tabs/tabs.d.ts +75 -0
  217. package/dist/disclosure/tabs/tabs.d.ts.map +1 -0
  218. package/dist/drawer.cjs +32 -0
  219. package/dist/drawer.cjs.map +1 -0
  220. package/dist/drawer.js +199 -0
  221. package/dist/drawer.js.map +1 -0
  222. package/dist/errors.cjs +2 -0
  223. package/dist/errors.cjs.map +1 -0
  224. package/dist/errors.d.ts +9 -0
  225. package/dist/errors.d.ts.map +1 -0
  226. package/dist/errors.js +13 -0
  227. package/dist/errors.js.map +1 -0
  228. package/dist/feedback/alert/alert.css?inline.cjs +2 -0
  229. package/dist/feedback/alert/alert.css?inline.cjs.map +1 -0
  230. package/dist/feedback/alert/alert.css?inline.js +6 -0
  231. package/dist/feedback/alert/alert.css?inline.js.map +1 -0
  232. package/dist/feedback/alert/alert.d.ts +74 -0
  233. package/dist/feedback/alert/alert.d.ts.map +1 -0
  234. package/dist/feedback/async/async.css?inline.cjs +2 -0
  235. package/dist/feedback/async/async.css?inline.cjs.map +1 -0
  236. package/dist/feedback/async/async.css?inline.js +6 -0
  237. package/dist/feedback/async/async.css?inline.js.map +1 -0
  238. package/dist/feedback/async/async.d.ts +54 -0
  239. package/dist/feedback/async/async.d.ts.map +1 -0
  240. package/dist/feedback/badge/badge.css?inline.cjs +2 -0
  241. package/dist/feedback/badge/badge.css?inline.cjs.map +1 -0
  242. package/dist/feedback/badge/badge.css?inline.js +6 -0
  243. package/dist/feedback/badge/badge.css?inline.js.map +1 -0
  244. package/dist/feedback/badge/badge.d.ts +69 -0
  245. package/dist/feedback/badge/badge.d.ts.map +1 -0
  246. package/dist/feedback/chip/chip.css?inline.cjs +2 -0
  247. package/dist/feedback/chip/chip.css?inline.cjs.map +1 -0
  248. package/dist/feedback/chip/chip.css?inline.js +6 -0
  249. package/dist/feedback/chip/chip.css?inline.js.map +1 -0
  250. package/dist/feedback/chip/chip.d.ts +136 -0
  251. package/dist/feedback/chip/chip.d.ts.map +1 -0
  252. package/dist/feedback/index.d.ts +17 -0
  253. package/dist/feedback/index.d.ts.map +1 -0
  254. package/dist/feedback/password-strength/password-strength.css?inline.cjs +2 -0
  255. package/dist/feedback/password-strength/password-strength.css?inline.cjs.map +1 -0
  256. package/dist/feedback/password-strength/password-strength.css?inline.js +6 -0
  257. package/dist/feedback/password-strength/password-strength.css?inline.js.map +1 -0
  258. package/dist/feedback/password-strength/password-strength.d.ts +66 -0
  259. package/dist/feedback/password-strength/password-strength.d.ts.map +1 -0
  260. package/dist/feedback/progress/progress.css?inline.cjs +2 -0
  261. package/dist/feedback/progress/progress.css?inline.cjs.map +1 -0
  262. package/dist/feedback/progress/progress.css?inline.js +6 -0
  263. package/dist/feedback/progress/progress.css?inline.js.map +1 -0
  264. package/dist/feedback/progress/progress.d.ts +68 -0
  265. package/dist/feedback/progress/progress.d.ts.map +1 -0
  266. package/dist/feedback/skeleton/skeleton.css?inline.cjs +2 -0
  267. package/dist/feedback/skeleton/skeleton.css?inline.cjs.map +1 -0
  268. package/dist/feedback/skeleton/skeleton.css?inline.js +6 -0
  269. package/dist/feedback/skeleton/skeleton.css?inline.js.map +1 -0
  270. package/dist/feedback/skeleton/skeleton.d.ts +63 -0
  271. package/dist/feedback/skeleton/skeleton.d.ts.map +1 -0
  272. package/dist/feedback/toast/index.d.ts +2 -0
  273. package/dist/feedback/toast/index.d.ts.map +1 -0
  274. package/dist/feedback/toast/toast.css?inline.cjs +2 -0
  275. package/dist/feedback/toast/toast.css?inline.cjs.map +1 -0
  276. package/dist/feedback/toast/toast.css?inline.js +6 -0
  277. package/dist/feedback/toast/toast.css?inline.js.map +1 -0
  278. package/dist/feedback/toast/toast.d.ts +127 -0
  279. package/dist/feedback/toast/toast.d.ts.map +1 -0
  280. package/dist/file-input.cjs +70 -0
  281. package/dist/file-input.cjs.map +1 -0
  282. package/dist/file-input.js +209 -0
  283. package/dist/file-input.js.map +1 -0
  284. package/dist/form.cjs +11 -0
  285. package/dist/form.cjs.map +1 -0
  286. package/dist/form.js +56 -0
  287. package/dist/form.js.map +1 -0
  288. package/dist/grid-item.cjs +2 -0
  289. package/dist/grid-item.cjs.map +1 -0
  290. package/dist/grid-item.js +35 -0
  291. package/dist/grid-item.js.map +1 -0
  292. package/dist/grid.cjs +2 -0
  293. package/dist/grid.cjs.map +1 -0
  294. package/dist/grid.js +90 -0
  295. package/dist/grid.js.map +1 -0
  296. package/dist/headless/_internal.d.ts +17 -0
  297. package/dist/headless/_internal.d.ts.map +1 -0
  298. package/dist/headless/announcer.cjs +2 -0
  299. package/dist/headless/announcer.cjs.map +1 -0
  300. package/dist/headless/announcer.d.ts +25 -0
  301. package/dist/headless/announcer.d.ts.map +1 -0
  302. package/dist/headless/announcer.js +24 -0
  303. package/dist/headless/announcer.js.map +1 -0
  304. package/dist/headless/checkable.cjs +2 -0
  305. package/dist/headless/checkable.cjs.map +1 -0
  306. package/dist/headless/checkable.d.ts +42 -0
  307. package/dist/headless/checkable.d.ts.map +1 -0
  308. package/dist/headless/checkable.js +36 -0
  309. package/dist/headless/checkable.js.map +1 -0
  310. package/dist/headless/choice-field.cjs +2 -0
  311. package/dist/headless/choice-field.cjs.map +1 -0
  312. package/dist/headless/choice-field.d.ts +36 -0
  313. package/dist/headless/choice-field.d.ts.map +1 -0
  314. package/dist/headless/choice-field.js +42 -0
  315. package/dist/headless/choice-field.js.map +1 -0
  316. package/dist/headless/datagrid.cjs +2 -0
  317. package/dist/headless/datagrid.cjs.map +1 -0
  318. package/dist/headless/datagrid.d.ts +158 -0
  319. package/dist/headless/datagrid.d.ts.map +1 -0
  320. package/dist/headless/datagrid.js +55 -0
  321. package/dist/headless/datagrid.js.map +1 -0
  322. package/dist/headless/date-picker.cjs +2 -0
  323. package/dist/headless/date-picker.cjs.map +1 -0
  324. package/dist/headless/date-picker.d.ts +114 -0
  325. package/dist/headless/date-picker.d.ts.map +1 -0
  326. package/dist/headless/date-picker.js +184 -0
  327. package/dist/headless/date-picker.js.map +1 -0
  328. package/dist/headless/dialog-focus.cjs +2 -0
  329. package/dist/headless/dialog-focus.cjs.map +1 -0
  330. package/dist/headless/dialog-focus.d.ts +40 -0
  331. package/dist/headless/dialog-focus.d.ts.map +1 -0
  332. package/dist/headless/dialog-focus.js +22 -0
  333. package/dist/headless/dialog-focus.js.map +1 -0
  334. package/dist/headless/direction.cjs +2 -0
  335. package/dist/headless/direction.cjs.map +1 -0
  336. package/dist/headless/direction.d.ts +11 -0
  337. package/dist/headless/direction.d.ts.map +1 -0
  338. package/dist/headless/direction.js +14 -0
  339. package/dist/headless/direction.js.map +1 -0
  340. package/dist/headless/field-base.cjs +2 -0
  341. package/dist/headless/field-base.cjs.map +1 -0
  342. package/dist/headless/field-base.d.ts +148 -0
  343. package/dist/headless/field-base.d.ts.map +1 -0
  344. package/dist/headless/field-base.js +46 -0
  345. package/dist/headless/field-base.js.map +1 -0
  346. package/dist/headless/focus-trap.cjs +2 -0
  347. package/dist/headless/focus-trap.cjs.map +1 -0
  348. package/dist/headless/focus-trap.d.ts +45 -0
  349. package/dist/headless/focus-trap.d.ts.map +1 -0
  350. package/dist/headless/focus-trap.js +51 -0
  351. package/dist/headless/focus-trap.js.map +1 -0
  352. package/dist/headless/focus.cjs +2 -0
  353. package/dist/headless/focus.cjs.map +1 -0
  354. package/dist/headless/focus.d.ts +34 -0
  355. package/dist/headless/focus.d.ts.map +1 -0
  356. package/dist/headless/focus.js +34 -0
  357. package/dist/headless/focus.js.map +1 -0
  358. package/dist/headless/index.d.ts +28 -0
  359. package/dist/headless/index.d.ts.map +1 -0
  360. package/dist/headless/keyboard.cjs +2 -0
  361. package/dist/headless/keyboard.cjs.map +1 -0
  362. package/dist/headless/keyboard.d.ts +52 -0
  363. package/dist/headless/keyboard.d.ts.map +1 -0
  364. package/dist/headless/keyboard.js +29 -0
  365. package/dist/headless/keyboard.js.map +1 -0
  366. package/dist/headless/light-dom.cjs +2 -0
  367. package/dist/headless/light-dom.cjs.map +1 -0
  368. package/dist/headless/light-dom.d.ts +12 -0
  369. package/dist/headless/light-dom.d.ts.map +1 -0
  370. package/dist/headless/light-dom.js +6 -0
  371. package/dist/headless/light-dom.js.map +1 -0
  372. package/dist/headless/nav.cjs +2 -0
  373. package/dist/headless/nav.cjs.map +1 -0
  374. package/dist/headless/nav.d.ts +66 -0
  375. package/dist/headless/nav.d.ts.map +1 -0
  376. package/dist/headless/nav.js +115 -0
  377. package/dist/headless/nav.js.map +1 -0
  378. package/dist/headless/numbers.cjs +2 -0
  379. package/dist/headless/numbers.cjs.map +1 -0
  380. package/dist/headless/numbers.d.ts +14 -0
  381. package/dist/headless/numbers.d.ts.map +1 -0
  382. package/dist/headless/numbers.js +9 -0
  383. package/dist/headless/numbers.js.map +1 -0
  384. package/dist/headless/option-list.cjs +2 -0
  385. package/dist/headless/option-list.cjs.map +1 -0
  386. package/dist/headless/option-list.d.ts +107 -0
  387. package/dist/headless/option-list.d.ts.map +1 -0
  388. package/dist/headless/option-list.js +66 -0
  389. package/dist/headless/option-list.js.map +1 -0
  390. package/dist/headless/ore.cjs +2 -0
  391. package/dist/headless/ore.cjs.map +1 -0
  392. package/dist/headless/ore.d.ts +20 -0
  393. package/dist/headless/ore.d.ts.map +1 -0
  394. package/dist/headless/ore.js +9 -0
  395. package/dist/headless/ore.js.map +1 -0
  396. package/dist/headless/overlay.cjs +2 -0
  397. package/dist/headless/overlay.cjs.map +1 -0
  398. package/dist/headless/overlay.d.ts +62 -0
  399. package/dist/headless/overlay.d.ts.map +1 -0
  400. package/dist/headless/overlay.js +29 -0
  401. package/dist/headless/overlay.js.map +1 -0
  402. package/dist/headless/paginated-list.cjs +2 -0
  403. package/dist/headless/paginated-list.cjs.map +1 -0
  404. package/dist/headless/paginated-list.d.ts +42 -0
  405. package/dist/headless/paginated-list.d.ts.map +1 -0
  406. package/dist/headless/paginated-list.js +34 -0
  407. package/dist/headless/paginated-list.js.map +1 -0
  408. package/dist/headless/parse.cjs +2 -0
  409. package/dist/headless/parse.cjs.map +1 -0
  410. package/dist/headless/parse.d.ts +15 -0
  411. package/dist/headless/parse.d.ts.map +1 -0
  412. package/dist/headless/parse.js +9 -0
  413. package/dist/headless/parse.js.map +1 -0
  414. package/dist/headless/positioner.cjs +2 -0
  415. package/dist/headless/positioner.cjs.map +1 -0
  416. package/dist/headless/positioner.d.ts +40 -0
  417. package/dist/headless/positioner.d.ts.map +1 -0
  418. package/dist/headless/positioner.js +38 -0
  419. package/dist/headless/positioner.js.map +1 -0
  420. package/dist/headless/selection-control.cjs +2 -0
  421. package/dist/headless/selection-control.cjs.map +1 -0
  422. package/dist/headless/selection-control.d.ts +30 -0
  423. package/dist/headless/selection-control.d.ts.map +1 -0
  424. package/dist/headless/selection-control.js +44 -0
  425. package/dist/headless/selection-control.js.map +1 -0
  426. package/dist/headless/signals.cjs +2 -0
  427. package/dist/headless/signals.cjs.map +1 -0
  428. package/dist/headless/signals.d.ts +20 -0
  429. package/dist/headless/signals.d.ts.map +1 -0
  430. package/dist/headless/signals.js +12 -0
  431. package/dist/headless/signals.js.map +1 -0
  432. package/dist/headless/slider.cjs +2 -0
  433. package/dist/headless/slider.cjs.map +1 -0
  434. package/dist/headless/slider.d.ts +28 -0
  435. package/dist/headless/slider.d.ts.map +1 -0
  436. package/dist/headless/slider.js +40 -0
  437. package/dist/headless/slider.js.map +1 -0
  438. package/dist/headless/sort-control.cjs +2 -0
  439. package/dist/headless/sort-control.cjs.map +1 -0
  440. package/dist/headless/sort-control.d.ts +22 -0
  441. package/dist/headless/sort-control.d.ts.map +1 -0
  442. package/dist/headless/sort-control.js +36 -0
  443. package/dist/headless/sort-control.js.map +1 -0
  444. package/dist/headless/spinner.cjs +2 -0
  445. package/dist/headless/spinner.cjs.map +1 -0
  446. package/dist/headless/spinner.d.ts +19 -0
  447. package/dist/headless/spinner.d.ts.map +1 -0
  448. package/dist/headless/spinner.js +52 -0
  449. package/dist/headless/spinner.js.map +1 -0
  450. package/dist/headless/swipe.cjs +2 -0
  451. package/dist/headless/swipe.cjs.map +1 -0
  452. package/dist/headless/swipe.d.ts +38 -0
  453. package/dist/headless/swipe.d.ts.map +1 -0
  454. package/dist/headless/swipe.js +58 -0
  455. package/dist/headless/swipe.js.map +1 -0
  456. package/dist/headless/text-field.cjs +2 -0
  457. package/dist/headless/text-field.cjs.map +1 -0
  458. package/dist/headless/text-field.d.ts +45 -0
  459. package/dist/headless/text-field.d.ts.map +1 -0
  460. package/dist/headless/text-field.js +41 -0
  461. package/dist/headless/text-field.js.map +1 -0
  462. package/dist/headless/typeahead.cjs +2 -0
  463. package/dist/headless/typeahead.cjs.map +1 -0
  464. package/dist/headless/typeahead.d.ts +53 -0
  465. package/dist/headless/typeahead.d.ts.map +1 -0
  466. package/dist/headless/typeahead.js +23 -0
  467. package/dist/headless/typeahead.js.map +1 -0
  468. package/dist/headless.cjs +1 -0
  469. package/dist/headless.js +26 -0
  470. package/dist/icon.cjs +2 -0
  471. package/dist/icon.cjs.map +1 -0
  472. package/dist/icon.js +87 -0
  473. package/dist/icon.js.map +1 -0
  474. package/dist/index.cjs +1 -0
  475. package/dist/index.d.ts +9 -0
  476. package/dist/index.d.ts.map +1 -0
  477. package/dist/index.js +61 -0
  478. package/dist/input.cjs +67 -0
  479. package/dist/input.cjs.map +1 -0
  480. package/dist/input.js +184 -0
  481. package/dist/input.js.map +1 -0
  482. package/dist/inputs/button/button.css?inline.cjs +2 -0
  483. package/dist/inputs/button/button.css?inline.cjs.map +1 -0
  484. package/dist/inputs/button/button.css?inline.js +6 -0
  485. package/dist/inputs/button/button.css?inline.js.map +1 -0
  486. package/dist/inputs/button/button.d.ts +85 -0
  487. package/dist/inputs/button/button.d.ts.map +1 -0
  488. package/dist/inputs/button-group/button-group.css?inline.cjs +2 -0
  489. package/dist/inputs/button-group/button-group.css?inline.cjs.map +1 -0
  490. package/dist/inputs/button-group/button-group.css?inline.js +6 -0
  491. package/dist/inputs/button-group/button-group.css?inline.js.map +1 -0
  492. package/dist/inputs/button-group/button-group.d.ts +64 -0
  493. package/dist/inputs/button-group/button-group.d.ts.map +1 -0
  494. package/dist/inputs/calendar/calendar.css?inline.cjs +2 -0
  495. package/dist/inputs/calendar/calendar.css?inline.cjs.map +1 -0
  496. package/dist/inputs/calendar/calendar.css?inline.js +6 -0
  497. package/dist/inputs/calendar/calendar.css?inline.js.map +1 -0
  498. package/dist/inputs/calendar/calendar.d.ts +134 -0
  499. package/dist/inputs/calendar/calendar.d.ts.map +1 -0
  500. package/dist/inputs/checkbox/checkbox.css?inline.cjs +2 -0
  501. package/dist/inputs/checkbox/checkbox.css?inline.cjs.map +1 -0
  502. package/dist/inputs/checkbox/checkbox.css?inline.js +6 -0
  503. package/dist/inputs/checkbox/checkbox.css?inline.js.map +1 -0
  504. package/dist/inputs/checkbox/checkbox.d.ts +60 -0
  505. package/dist/inputs/checkbox/checkbox.d.ts.map +1 -0
  506. package/dist/inputs/checkbox-group/checkbox-group.css?inline.cjs +2 -0
  507. package/dist/inputs/checkbox-group/checkbox-group.css?inline.cjs.map +1 -0
  508. package/dist/inputs/checkbox-group/checkbox-group.css?inline.js +6 -0
  509. package/dist/inputs/checkbox-group/checkbox-group.css?inline.js.map +1 -0
  510. package/dist/inputs/checkbox-group/checkbox-group.d.ts +75 -0
  511. package/dist/inputs/checkbox-group/checkbox-group.d.ts.map +1 -0
  512. package/dist/inputs/combobox/combobox-options.cjs +2 -0
  513. package/dist/inputs/combobox/combobox-options.cjs.map +1 -0
  514. package/dist/inputs/combobox/combobox-options.d.ts +6 -0
  515. package/dist/inputs/combobox/combobox-options.d.ts.map +1 -0
  516. package/dist/inputs/combobox/combobox-options.js +26 -0
  517. package/dist/inputs/combobox/combobox-options.js.map +1 -0
  518. package/dist/inputs/combobox/combobox.css?inline.cjs +2 -0
  519. package/dist/inputs/combobox/combobox.css?inline.cjs.map +1 -0
  520. package/dist/inputs/combobox/combobox.css?inline.js +6 -0
  521. package/dist/inputs/combobox/combobox.css?inline.js.map +1 -0
  522. package/dist/inputs/combobox/combobox.d.ts +45 -0
  523. package/dist/inputs/combobox/combobox.d.ts.map +1 -0
  524. package/dist/inputs/combobox/combobox.types.d.ts +45 -0
  525. package/dist/inputs/combobox/combobox.types.d.ts.map +1 -0
  526. package/dist/inputs/datagrid/datagrid-column.cjs +2 -0
  527. package/dist/inputs/datagrid/datagrid-column.cjs.map +1 -0
  528. package/dist/inputs/datagrid/datagrid-column.d.ts +7 -0
  529. package/dist/inputs/datagrid/datagrid-column.d.ts.map +1 -0
  530. package/dist/inputs/datagrid/datagrid-column.js +31 -0
  531. package/dist/inputs/datagrid/datagrid-column.js.map +1 -0
  532. package/dist/inputs/datagrid/datagrid-controls.cjs +2 -0
  533. package/dist/inputs/datagrid/datagrid-controls.cjs.map +1 -0
  534. package/dist/inputs/datagrid/datagrid-controls.d.ts +98 -0
  535. package/dist/inputs/datagrid/datagrid-controls.d.ts.map +1 -0
  536. package/dist/inputs/datagrid/datagrid-controls.js +147 -0
  537. package/dist/inputs/datagrid/datagrid-controls.js.map +1 -0
  538. package/dist/inputs/datagrid/datagrid-nav.cjs +2 -0
  539. package/dist/inputs/datagrid/datagrid-nav.cjs.map +1 -0
  540. package/dist/inputs/datagrid/datagrid-nav.d.ts +33 -0
  541. package/dist/inputs/datagrid/datagrid-nav.d.ts.map +1 -0
  542. package/dist/inputs/datagrid/datagrid-nav.js +51 -0
  543. package/dist/inputs/datagrid/datagrid-nav.js.map +1 -0
  544. package/dist/inputs/datagrid/datagrid.css?inline.cjs +2 -0
  545. package/dist/inputs/datagrid/datagrid.css?inline.cjs.map +1 -0
  546. package/dist/inputs/datagrid/datagrid.css?inline.js +6 -0
  547. package/dist/inputs/datagrid/datagrid.css?inline.js.map +1 -0
  548. package/dist/inputs/datagrid/datagrid.d.ts +302 -0
  549. package/dist/inputs/datagrid/datagrid.d.ts.map +1 -0
  550. package/dist/inputs/date-picker/date-picker.css?inline.cjs +2 -0
  551. package/dist/inputs/date-picker/date-picker.css?inline.cjs.map +1 -0
  552. package/dist/inputs/date-picker/date-picker.css?inline.js +6 -0
  553. package/dist/inputs/date-picker/date-picker.css?inline.js.map +1 -0
  554. package/dist/inputs/date-picker/date-picker.d.ts +112 -0
  555. package/dist/inputs/date-picker/date-picker.d.ts.map +1 -0
  556. package/dist/inputs/file-input/file-input.css?inline.cjs +2 -0
  557. package/dist/inputs/file-input/file-input.css?inline.cjs.map +1 -0
  558. package/dist/inputs/file-input/file-input.css?inline.js +6 -0
  559. package/dist/inputs/file-input/file-input.css?inline.js.map +1 -0
  560. package/dist/inputs/file-input/file-input.d.ts +90 -0
  561. package/dist/inputs/file-input/file-input.d.ts.map +1 -0
  562. package/dist/inputs/form/form.css?inline.cjs +2 -0
  563. package/dist/inputs/form/form.css?inline.cjs.map +1 -0
  564. package/dist/inputs/form/form.css?inline.js +6 -0
  565. package/dist/inputs/form/form.css?inline.js.map +1 -0
  566. package/dist/inputs/form/form.d.ts +59 -0
  567. package/dist/inputs/form/form.d.ts.map +1 -0
  568. package/dist/inputs/index.d.ts +47 -0
  569. package/dist/inputs/index.d.ts.map +1 -0
  570. package/dist/inputs/input/input.css?inline.cjs +2 -0
  571. package/dist/inputs/input/input.css?inline.cjs.map +1 -0
  572. package/dist/inputs/input/input.css?inline.js +6 -0
  573. package/dist/inputs/input/input.css?inline.js.map +1 -0
  574. package/dist/inputs/input/input.d.ts +96 -0
  575. package/dist/inputs/input/input.d.ts.map +1 -0
  576. package/dist/inputs/number-input/number-input.css?inline.cjs +2 -0
  577. package/dist/inputs/number-input/number-input.css?inline.cjs.map +1 -0
  578. package/dist/inputs/number-input/number-input.css?inline.js +6 -0
  579. package/dist/inputs/number-input/number-input.css?inline.js.map +1 -0
  580. package/dist/inputs/number-input/number-input.d.ts +102 -0
  581. package/dist/inputs/number-input/number-input.d.ts.map +1 -0
  582. package/dist/inputs/otp-input/otp-input.css?inline.cjs +2 -0
  583. package/dist/inputs/otp-input/otp-input.css?inline.cjs.map +1 -0
  584. package/dist/inputs/otp-input/otp-input.css?inline.js +6 -0
  585. package/dist/inputs/otp-input/otp-input.css?inline.js.map +1 -0
  586. package/dist/inputs/otp-input/otp-input.d.ts +82 -0
  587. package/dist/inputs/otp-input/otp-input.d.ts.map +1 -0
  588. package/dist/inputs/radio/radio.css?inline.cjs +2 -0
  589. package/dist/inputs/radio/radio.css?inline.cjs.map +1 -0
  590. package/dist/inputs/radio/radio.css?inline.js +6 -0
  591. package/dist/inputs/radio/radio.css?inline.js.map +1 -0
  592. package/dist/inputs/radio/radio.d.ts +56 -0
  593. package/dist/inputs/radio/radio.d.ts.map +1 -0
  594. package/dist/inputs/radio-group/radio-group.css?inline.cjs +2 -0
  595. package/dist/inputs/radio-group/radio-group.css?inline.cjs.map +1 -0
  596. package/dist/inputs/radio-group/radio-group.css?inline.js +6 -0
  597. package/dist/inputs/radio-group/radio-group.css?inline.js.map +1 -0
  598. package/dist/inputs/radio-group/radio-group.d.ts +74 -0
  599. package/dist/inputs/radio-group/radio-group.d.ts.map +1 -0
  600. package/dist/inputs/rating/rating.css?inline.cjs +2 -0
  601. package/dist/inputs/rating/rating.css?inline.cjs.map +1 -0
  602. package/dist/inputs/rating/rating.css?inline.js +6 -0
  603. package/dist/inputs/rating/rating.css?inline.js.map +1 -0
  604. package/dist/inputs/rating/rating.d.ts +68 -0
  605. package/dist/inputs/rating/rating.d.ts.map +1 -0
  606. package/dist/inputs/select/select.css?inline.cjs +2 -0
  607. package/dist/inputs/select/select.css?inline.cjs.map +1 -0
  608. package/dist/inputs/select/select.css?inline.js +6 -0
  609. package/dist/inputs/select/select.css?inline.js.map +1 -0
  610. package/dist/inputs/select/select.d.ts +89 -0
  611. package/dist/inputs/select/select.d.ts.map +1 -0
  612. package/dist/inputs/shared/field-binding.cjs +2 -0
  613. package/dist/inputs/shared/field-binding.cjs.map +1 -0
  614. package/dist/inputs/shared/field-binding.d.ts +31 -0
  615. package/dist/inputs/shared/field-binding.d.ts.map +1 -0
  616. package/dist/inputs/shared/field-binding.js +31 -0
  617. package/dist/inputs/shared/field-binding.js.map +1 -0
  618. package/dist/inputs/shared/form-context.cjs +2 -0
  619. package/dist/inputs/shared/form-context.cjs.map +1 -0
  620. package/dist/inputs/shared/form-context.d.ts +49 -0
  621. package/dist/inputs/shared/form-context.d.ts.map +1 -0
  622. package/dist/inputs/shared/form-context.js +15 -0
  623. package/dist/inputs/shared/form-context.js.map +1 -0
  624. package/dist/inputs/shared/index.d.ts +5 -0
  625. package/dist/inputs/shared/index.d.ts.map +1 -0
  626. package/dist/inputs/shared/templates.cjs +11 -0
  627. package/dist/inputs/shared/templates.cjs.map +1 -0
  628. package/dist/inputs/shared/templates.d.ts +13 -0
  629. package/dist/inputs/shared/templates.d.ts.map +1 -0
  630. package/dist/inputs/shared/templates.js +18 -0
  631. package/dist/inputs/shared/templates.js.map +1 -0
  632. package/dist/inputs/shared/use-form-action.cjs +2 -0
  633. package/dist/inputs/shared/use-form-action.cjs.map +1 -0
  634. package/dist/inputs/shared/use-form-action.d.ts +17 -0
  635. package/dist/inputs/shared/use-form-action.d.ts.map +1 -0
  636. package/dist/inputs/shared/use-form-action.js +19 -0
  637. package/dist/inputs/shared/use-form-action.js.map +1 -0
  638. package/dist/inputs/slider/slider.css?inline.cjs +2 -0
  639. package/dist/inputs/slider/slider.css?inline.cjs.map +1 -0
  640. package/dist/inputs/slider/slider.css?inline.js +6 -0
  641. package/dist/inputs/slider/slider.css?inline.js.map +1 -0
  642. package/dist/inputs/slider/slider.d.ts +95 -0
  643. package/dist/inputs/slider/slider.d.ts.map +1 -0
  644. package/dist/inputs/switch/switch.css?inline.cjs +2 -0
  645. package/dist/inputs/switch/switch.css?inline.cjs.map +1 -0
  646. package/dist/inputs/switch/switch.css?inline.js +6 -0
  647. package/dist/inputs/switch/switch.css?inline.js.map +1 -0
  648. package/dist/inputs/switch/switch.d.ts +56 -0
  649. package/dist/inputs/switch/switch.d.ts.map +1 -0
  650. package/dist/inputs/textarea/textarea.css?inline.cjs +2 -0
  651. package/dist/inputs/textarea/textarea.css?inline.cjs.map +1 -0
  652. package/dist/inputs/textarea/textarea.css?inline.js +6 -0
  653. package/dist/inputs/textarea/textarea.css?inline.js.map +1 -0
  654. package/dist/inputs/textarea/textarea.d.ts +91 -0
  655. package/dist/inputs/textarea/textarea.d.ts.map +1 -0
  656. package/dist/inputs/time-picker/time-picker.css?inline.cjs +2 -0
  657. package/dist/inputs/time-picker/time-picker.css?inline.cjs.map +1 -0
  658. package/dist/inputs/time-picker/time-picker.css?inline.js +6 -0
  659. package/dist/inputs/time-picker/time-picker.css?inline.js.map +1 -0
  660. package/dist/inputs/time-picker/time-picker.d.ts +103 -0
  661. package/dist/inputs/time-picker/time-picker.d.ts.map +1 -0
  662. package/dist/layout/box/box.css?inline.cjs +2 -0
  663. package/dist/layout/box/box.css?inline.cjs.map +1 -0
  664. package/dist/layout/box/box.css?inline.js +6 -0
  665. package/dist/layout/box/box.css?inline.js.map +1 -0
  666. package/dist/layout/box/box.d.ts +52 -0
  667. package/dist/layout/box/box.d.ts.map +1 -0
  668. package/dist/layout/grid/grid.css?inline.cjs +2 -0
  669. package/dist/layout/grid/grid.css?inline.cjs.map +1 -0
  670. package/dist/layout/grid/grid.css?inline.js +6 -0
  671. package/dist/layout/grid/grid.css?inline.js.map +1 -0
  672. package/dist/layout/grid/grid.d.ts +105 -0
  673. package/dist/layout/grid/grid.d.ts.map +1 -0
  674. package/dist/layout/grid-item/grid-item.css?inline.cjs +2 -0
  675. package/dist/layout/grid-item/grid-item.css?inline.cjs.map +1 -0
  676. package/dist/layout/grid-item/grid-item.css?inline.js +6 -0
  677. package/dist/layout/grid-item/grid-item.css?inline.js.map +1 -0
  678. package/dist/layout/grid-item/grid-item.d.ts +54 -0
  679. package/dist/layout/grid-item/grid-item.d.ts.map +1 -0
  680. package/dist/layout/index.d.ts +11 -0
  681. package/dist/layout/index.d.ts.map +1 -0
  682. package/dist/layout/navbar/navbar.css?inline.cjs +2 -0
  683. package/dist/layout/navbar/navbar.css?inline.cjs.map +1 -0
  684. package/dist/layout/navbar/navbar.css?inline.js +6 -0
  685. package/dist/layout/navbar/navbar.css?inline.js.map +1 -0
  686. package/dist/layout/navbar/navbar.d.ts +153 -0
  687. package/dist/layout/navbar/navbar.d.ts.map +1 -0
  688. package/dist/layout/sidebar/sidebar-group.css?inline.cjs +2 -0
  689. package/dist/layout/sidebar/sidebar-group.css?inline.cjs.map +1 -0
  690. package/dist/layout/sidebar/sidebar-group.css?inline.js +6 -0
  691. package/dist/layout/sidebar/sidebar-group.css?inline.js.map +1 -0
  692. package/dist/layout/sidebar/sidebar-item.css?inline.cjs +2 -0
  693. package/dist/layout/sidebar/sidebar-item.css?inline.cjs.map +1 -0
  694. package/dist/layout/sidebar/sidebar-item.css?inline.js +6 -0
  695. package/dist/layout/sidebar/sidebar-item.css?inline.js.map +1 -0
  696. package/dist/layout/sidebar/sidebar.css?inline.cjs +2 -0
  697. package/dist/layout/sidebar/sidebar.css?inline.cjs.map +1 -0
  698. package/dist/layout/sidebar/sidebar.css?inline.js +6 -0
  699. package/dist/layout/sidebar/sidebar.css?inline.js.map +1 -0
  700. package/dist/layout/sidebar/sidebar.d.ts +226 -0
  701. package/dist/layout/sidebar/sidebar.d.ts.map +1 -0
  702. package/dist/menu.cjs +30 -0
  703. package/dist/menu.cjs.map +1 -0
  704. package/dist/menu.js +197 -0
  705. package/dist/menu.js.map +1 -0
  706. package/dist/navbar.cjs +68 -0
  707. package/dist/navbar.cjs.map +1 -0
  708. package/dist/navbar.js +283 -0
  709. package/dist/navbar.js.map +1 -0
  710. package/dist/number-input.cjs +40 -0
  711. package/dist/number-input.cjs.map +1 -0
  712. package/dist/number-input.js +141 -0
  713. package/dist/number-input.js.map +1 -0
  714. package/dist/ore/dist/_dev.cjs +2 -0
  715. package/dist/ore/dist/_dev.cjs.map +1 -0
  716. package/dist/ore/dist/_dev.js +12 -0
  717. package/dist/ore/dist/_dev.js.map +1 -0
  718. package/dist/ore/dist/aria.cjs +2 -0
  719. package/dist/ore/dist/aria.cjs.map +1 -0
  720. package/dist/ore/dist/aria.js +37 -0
  721. package/dist/ore/dist/aria.js.map +1 -0
  722. package/dist/ore/dist/base-element.cjs +2 -0
  723. package/dist/ore/dist/base-element.cjs.map +1 -0
  724. package/dist/ore/dist/base-element.js +146 -0
  725. package/dist/ore/dist/base-element.js.map +1 -0
  726. package/dist/ore/dist/context-bag.cjs +2 -0
  727. package/dist/ore/dist/context-bag.cjs.map +1 -0
  728. package/dist/ore/dist/context-bag.js +28 -0
  729. package/dist/ore/dist/context-bag.js.map +1 -0
  730. package/dist/ore/dist/context.cjs +2 -0
  731. package/dist/ore/dist/context.cjs.map +1 -0
  732. package/dist/ore/dist/context.js +38 -0
  733. package/dist/ore/dist/context.js.map +1 -0
  734. package/dist/ore/dist/define.cjs +2 -0
  735. package/dist/ore/dist/define.cjs.map +1 -0
  736. package/dist/ore/dist/define.js +27 -0
  737. package/dist/ore/dist/define.js.map +1 -0
  738. package/dist/ore/dist/directives/classMap.cjs +1 -0
  739. package/dist/ore/dist/directives/classMap.js +1 -0
  740. package/dist/ore/dist/directives/each.cjs +1 -0
  741. package/dist/ore/dist/directives/each.js +5 -0
  742. package/dist/ore/dist/directives/live.cjs +2 -0
  743. package/dist/ore/dist/directives/live.cjs.map +1 -0
  744. package/dist/ore/dist/directives/live.js +6 -0
  745. package/dist/ore/dist/directives/live.js.map +1 -0
  746. package/dist/ore/dist/directives/model.cjs +1 -0
  747. package/dist/ore/dist/directives/model.js +3 -0
  748. package/dist/ore/dist/directives/raw.cjs +2 -0
  749. package/dist/ore/dist/directives/raw.cjs.map +1 -0
  750. package/dist/ore/dist/directives/raw.js +35 -0
  751. package/dist/ore/dist/directives/raw.js.map +1 -0
  752. package/dist/ore/dist/directives/styleMap.cjs +2 -0
  753. package/dist/ore/dist/directives/styleMap.cjs.map +1 -0
  754. package/dist/ore/dist/directives/styleMap.js +20 -0
  755. package/dist/ore/dist/directives/styleMap.js.map +1 -0
  756. package/dist/ore/dist/directives/when.cjs +2 -0
  757. package/dist/ore/dist/directives/when.cjs.map +1 -0
  758. package/dist/ore/dist/directives/when.js +33 -0
  759. package/dist/ore/dist/directives/when.js.map +1 -0
  760. package/dist/ore/dist/directives.cjs +1 -0
  761. package/dist/ore/dist/directives.js +8 -0
  762. package/dist/ore/dist/errors.cjs +3 -0
  763. package/dist/ore/dist/errors.cjs.map +1 -0
  764. package/dist/ore/dist/errors.js +41 -0
  765. package/dist/ore/dist/errors.js.map +1 -0
  766. package/dist/ore/dist/host-bind.cjs +2 -0
  767. package/dist/ore/dist/host-bind.cjs.map +1 -0
  768. package/dist/ore/dist/host-bind.js +60 -0
  769. package/dist/ore/dist/host-bind.js.map +1 -0
  770. package/dist/ore/dist/observers/intersection-observe.cjs +2 -0
  771. package/dist/ore/dist/observers/intersection-observe.cjs.map +1 -0
  772. package/dist/ore/dist/observers/intersection-observe.js +12 -0
  773. package/dist/ore/dist/observers/intersection-observe.js.map +1 -0
  774. package/dist/ore/dist/observers/media-observe.cjs +1 -0
  775. package/dist/ore/dist/observers/media-observe.js +1 -0
  776. package/dist/ore/dist/observers/mutation-observe.cjs +1 -0
  777. package/dist/ore/dist/observers/mutation-observe.js +1 -0
  778. package/dist/ore/dist/observers/resize-observe.cjs +2 -0
  779. package/dist/ore/dist/observers/resize-observe.cjs.map +1 -0
  780. package/dist/ore/dist/observers/resize-observe.js +20 -0
  781. package/dist/ore/dist/observers/resize-observe.js.map +1 -0
  782. package/dist/ore/dist/observers.cjs +1 -0
  783. package/dist/ore/dist/observers.js +5 -0
  784. package/dist/ore/dist/props.cjs +2 -0
  785. package/dist/ore/dist/props.cjs.map +1 -0
  786. package/dist/ore/dist/props.js +54 -0
  787. package/dist/ore/dist/props.js.map +1 -0
  788. package/dist/ore/dist/runtime.cjs +2 -0
  789. package/dist/ore/dist/runtime.cjs.map +1 -0
  790. package/dist/ore/dist/runtime.js +33 -0
  791. package/dist/ore/dist/runtime.js.map +1 -0
  792. package/dist/ore/dist/slots.cjs +2 -0
  793. package/dist/ore/dist/slots.cjs.map +1 -0
  794. package/dist/ore/dist/slots.js +61 -0
  795. package/dist/ore/dist/slots.js.map +1 -0
  796. package/dist/ore/dist/testing/flush.cjs +2 -0
  797. package/dist/ore/dist/testing/flush.cjs.map +1 -0
  798. package/dist/ore/dist/testing/flush.js +11 -0
  799. package/dist/ore/dist/testing/flush.js.map +1 -0
  800. package/dist/ore/dist/testing/mount.cjs +2 -0
  801. package/dist/ore/dist/testing/mount.cjs.map +1 -0
  802. package/dist/ore/dist/testing/mount.js +94 -0
  803. package/dist/ore/dist/testing/mount.js.map +1 -0
  804. package/dist/ore/dist/testing/query.cjs +2 -0
  805. package/dist/ore/dist/testing/query.cjs.map +1 -0
  806. package/dist/ore/dist/testing/query.js +12 -0
  807. package/dist/ore/dist/testing/query.js.map +1 -0
  808. package/dist/ore/dist/testing/render-hook.cjs +1 -0
  809. package/dist/ore/dist/testing/render-hook.js +4 -0
  810. package/dist/ore/dist/testing/testing.cjs +1 -0
  811. package/dist/ore/dist/testing/testing.js +4 -0
  812. package/dist/ore/dist/testing/wait.cjs +1 -0
  813. package/dist/ore/dist/testing/wait.js +1 -0
  814. package/dist/ore/dist/testing.cjs +1 -0
  815. package/dist/ore/dist/testing.js +6 -0
  816. package/dist/ore/dist/types/bindings.cjs +2 -0
  817. package/dist/ore/dist/types/bindings.cjs.map +1 -0
  818. package/dist/ore/dist/types/bindings.js +15 -0
  819. package/dist/ore/dist/types/bindings.js.map +1 -0
  820. package/dist/ore/dist/types.cjs +2 -0
  821. package/dist/ore/dist/types.cjs.map +1 -0
  822. package/dist/ore/dist/types.js +15 -0
  823. package/dist/ore/dist/types.js.map +1 -0
  824. package/dist/ore/dist/utils/aria.cjs +2 -0
  825. package/dist/ore/dist/utils/aria.cjs.map +1 -0
  826. package/dist/ore/dist/utils/aria.js +6 -0
  827. package/dist/ore/dist/utils/aria.js.map +1 -0
  828. package/dist/ore/dist/utils/css.cjs +2 -0
  829. package/dist/ore/dist/utils/css.cjs.map +1 -0
  830. package/dist/ore/dist/utils/css.js +18 -0
  831. package/dist/ore/dist/utils/css.js.map +1 -0
  832. package/dist/ore/dist/utils/dom.cjs +2 -0
  833. package/dist/ore/dist/utils/dom.cjs.map +1 -0
  834. package/dist/ore/dist/utils/dom.js +47 -0
  835. package/dist/ore/dist/utils/dom.js.map +1 -0
  836. package/dist/ore/dist/utils/emit.cjs +2 -0
  837. package/dist/ore/dist/utils/emit.cjs.map +1 -0
  838. package/dist/ore/dist/utils/emit.js +16 -0
  839. package/dist/ore/dist/utils/emit.js.map +1 -0
  840. package/dist/ore/dist/utils/id.cjs +2 -0
  841. package/dist/ore/dist/utils/id.cjs.map +1 -0
  842. package/dist/ore/dist/utils/id.js +4 -0
  843. package/dist/ore/dist/utils/id.js.map +1 -0
  844. package/dist/otp-input.cjs +21 -0
  845. package/dist/otp-input.cjs.map +1 -0
  846. package/dist/otp-input.js +145 -0
  847. package/dist/otp-input.js.map +1 -0
  848. package/dist/overlay/dialog/dialog.css?inline.cjs +2 -0
  849. package/dist/overlay/dialog/dialog.css?inline.cjs.map +1 -0
  850. package/dist/overlay/dialog/dialog.css?inline.js +6 -0
  851. package/dist/overlay/dialog/dialog.css?inline.js.map +1 -0
  852. package/dist/overlay/dialog/dialog.d.ts +108 -0
  853. package/dist/overlay/dialog/dialog.d.ts.map +1 -0
  854. package/dist/overlay/drawer/drawer.css?inline.cjs +2 -0
  855. package/dist/overlay/drawer/drawer.css?inline.cjs.map +1 -0
  856. package/dist/overlay/drawer/drawer.css?inline.js +6 -0
  857. package/dist/overlay/drawer/drawer.css?inline.js.map +1 -0
  858. package/dist/overlay/drawer/drawer.d.ts +111 -0
  859. package/dist/overlay/drawer/drawer.d.ts.map +1 -0
  860. package/dist/overlay/index.d.ts +11 -0
  861. package/dist/overlay/index.d.ts.map +1 -0
  862. package/dist/overlay/menu/menu-item.css?inline.cjs +2 -0
  863. package/dist/overlay/menu/menu-item.css?inline.cjs.map +1 -0
  864. package/dist/overlay/menu/menu-item.css?inline.js +6 -0
  865. package/dist/overlay/menu/menu-item.css?inline.js.map +1 -0
  866. package/dist/overlay/menu/menu-separator.css?inline.cjs +2 -0
  867. package/dist/overlay/menu/menu-separator.css?inline.cjs.map +1 -0
  868. package/dist/overlay/menu/menu-separator.css?inline.js +6 -0
  869. package/dist/overlay/menu/menu-separator.css?inline.js.map +1 -0
  870. package/dist/overlay/menu/menu.css?inline.cjs +2 -0
  871. package/dist/overlay/menu/menu.css?inline.cjs.map +1 -0
  872. package/dist/overlay/menu/menu.css?inline.js +6 -0
  873. package/dist/overlay/menu/menu.css?inline.js.map +1 -0
  874. package/dist/overlay/menu/menu.d.ts +110 -0
  875. package/dist/overlay/menu/menu.d.ts.map +1 -0
  876. package/dist/overlay/popover/popover.css?inline.cjs +2 -0
  877. package/dist/overlay/popover/popover.css?inline.cjs.map +1 -0
  878. package/dist/overlay/popover/popover.css?inline.js +6 -0
  879. package/dist/overlay/popover/popover.css?inline.js.map +1 -0
  880. package/dist/overlay/popover/popover.d.ts +56 -0
  881. package/dist/overlay/popover/popover.d.ts.map +1 -0
  882. package/dist/overlay/shared/await-exit.cjs +2 -0
  883. package/dist/overlay/shared/await-exit.cjs.map +1 -0
  884. package/dist/overlay/shared/await-exit.d.ts +14 -0
  885. package/dist/overlay/shared/await-exit.d.ts.map +1 -0
  886. package/dist/overlay/shared/await-exit.js +18 -0
  887. package/dist/overlay/shared/await-exit.js.map +1 -0
  888. package/dist/overlay/shared/background-lock.cjs +2 -0
  889. package/dist/overlay/shared/background-lock.cjs.map +1 -0
  890. package/dist/overlay/shared/background-lock.d.ts +22 -0
  891. package/dist/overlay/shared/background-lock.d.ts.map +1 -0
  892. package/dist/overlay/shared/background-lock.js +25 -0
  893. package/dist/overlay/shared/background-lock.js.map +1 -0
  894. package/dist/overlay/shared/use-dialog.cjs +2 -0
  895. package/dist/overlay/shared/use-dialog.cjs.map +1 -0
  896. package/dist/overlay/shared/use-dialog.d.ts +76 -0
  897. package/dist/overlay/shared/use-dialog.d.ts.map +1 -0
  898. package/dist/overlay/shared/use-dialog.js +92 -0
  899. package/dist/overlay/shared/use-dialog.js.map +1 -0
  900. package/dist/overlay/shared/use-floating-trigger.cjs +2 -0
  901. package/dist/overlay/shared/use-floating-trigger.cjs.map +1 -0
  902. package/dist/overlay/shared/use-floating-trigger.d.ts +67 -0
  903. package/dist/overlay/shared/use-floating-trigger.d.ts.map +1 -0
  904. package/dist/overlay/shared/use-floating-trigger.js +128 -0
  905. package/dist/overlay/shared/use-floating-trigger.js.map +1 -0
  906. package/dist/overlay/tooltip/tooltip.css?inline.cjs +2 -0
  907. package/dist/overlay/tooltip/tooltip.css?inline.cjs.map +1 -0
  908. package/dist/overlay/tooltip/tooltip.css?inline.js +6 -0
  909. package/dist/overlay/tooltip/tooltip.css?inline.js.map +1 -0
  910. package/dist/overlay/tooltip/tooltip.d.ts +72 -0
  911. package/dist/overlay/tooltip/tooltip.d.ts.map +1 -0
  912. package/dist/pagination.cjs +63 -0
  913. package/dist/pagination.cjs.map +1 -0
  914. package/dist/pagination.js +113 -0
  915. package/dist/pagination.js.map +1 -0
  916. package/dist/password-strength.cjs +19 -0
  917. package/dist/password-strength.cjs.map +1 -0
  918. package/dist/password-strength.js +69 -0
  919. package/dist/password-strength.js.map +1 -0
  920. package/dist/popover.cjs +16 -0
  921. package/dist/popover.cjs.map +1 -0
  922. package/dist/popover.js +81 -0
  923. package/dist/popover.js.map +1 -0
  924. package/dist/progress.cjs +46 -0
  925. package/dist/progress.cjs.map +1 -0
  926. package/dist/progress.js +96 -0
  927. package/dist/progress.js.map +1 -0
  928. package/dist/radio-group.cjs +25 -0
  929. package/dist/radio-group.cjs.map +1 -0
  930. package/dist/radio-group.js +145 -0
  931. package/dist/radio-group.js.map +1 -0
  932. package/dist/radio.cjs +10 -0
  933. package/dist/radio.cjs.map +1 -0
  934. package/dist/radio.js +146 -0
  935. package/dist/radio.js.map +1 -0
  936. package/dist/rating.cjs +28 -0
  937. package/dist/rating.cjs.map +1 -0
  938. package/dist/rating.js +123 -0
  939. package/dist/rating.js.map +1 -0
  940. package/dist/refine.cjs +2705 -0
  941. package/dist/refine.cjs.map +1 -0
  942. package/dist/refine.iife.js +2705 -0
  943. package/dist/refine.iife.js.map +1 -0
  944. package/dist/refine.js +2705 -0
  945. package/dist/refine.js.map +1 -0
  946. package/dist/select.cjs +79 -0
  947. package/dist/select.cjs.map +1 -0
  948. package/dist/select.js +289 -0
  949. package/dist/select.js.map +1 -0
  950. package/dist/separator.cjs +27 -0
  951. package/dist/separator.cjs.map +1 -0
  952. package/dist/separator.js +47 -0
  953. package/dist/separator.js.map +1 -0
  954. package/dist/shared/index.d.ts +14 -0
  955. package/dist/shared/index.d.ts.map +1 -0
  956. package/dist/shared/prop-bundles.cjs +2 -0
  957. package/dist/shared/prop-bundles.cjs.map +1 -0
  958. package/dist/shared/prop-bundles.d.ts +45 -0
  959. package/dist/shared/prop-bundles.d.ts.map +1 -0
  960. package/dist/shared/prop-bundles.js +13 -0
  961. package/dist/shared/prop-bundles.js.map +1 -0
  962. package/dist/shared/size-presets.cjs +2 -0
  963. package/dist/shared/size-presets.cjs.map +1 -0
  964. package/dist/shared/size-presets.d.ts +101 -0
  965. package/dist/shared/size-presets.d.ts.map +1 -0
  966. package/dist/shared/size-presets.js +96 -0
  967. package/dist/shared/size-presets.js.map +1 -0
  968. package/dist/shared/types.d.ts +76 -0
  969. package/dist/shared/types.d.ts.map +1 -0
  970. package/dist/sidebar.cjs +123 -0
  971. package/dist/sidebar.cjs.map +1 -0
  972. package/dist/sidebar.js +344 -0
  973. package/dist/sidebar.js.map +1 -0
  974. package/dist/skeleton.cjs +10 -0
  975. package/dist/skeleton.cjs.map +1 -0
  976. package/dist/skeleton.js +59 -0
  977. package/dist/skeleton.js.map +1 -0
  978. package/dist/slider.cjs +27 -0
  979. package/dist/slider.cjs.map +1 -0
  980. package/dist/slider.js +219 -0
  981. package/dist/slider.js.map +1 -0
  982. package/dist/styles/animation.css +94 -0
  983. package/dist/styles/index.cjs +2 -0
  984. package/dist/styles/index.cjs.map +1 -0
  985. package/dist/styles/index.d.ts +41 -0
  986. package/dist/styles/index.d.ts.map +1 -0
  987. package/dist/styles/index.js +24 -0
  988. package/dist/styles/index.js.map +1 -0
  989. package/dist/styles/layer.css +19 -0
  990. package/dist/styles/mixins/accessibility.css.cjs +51 -0
  991. package/dist/styles/mixins/accessibility.css.cjs.map +1 -0
  992. package/dist/styles/mixins/accessibility.css.d.ts +80 -0
  993. package/dist/styles/mixins/accessibility.css.d.ts.map +1 -0
  994. package/dist/styles/mixins/accessibility.css.js +56 -0
  995. package/dist/styles/mixins/accessibility.css.js.map +1 -0
  996. package/dist/styles/mixins/animation.css.cjs +133 -0
  997. package/dist/styles/mixins/animation.css.cjs.map +1 -0
  998. package/dist/styles/mixins/animation.css.d.ts +43 -0
  999. package/dist/styles/mixins/animation.css.d.ts.map +1 -0
  1000. package/dist/styles/mixins/animation.css.js +166 -0
  1001. package/dist/styles/mixins/animation.css.js.map +1 -0
  1002. package/dist/styles/mixins/shape.css.cjs +66 -0
  1003. package/dist/styles/mixins/shape.css.cjs.map +1 -0
  1004. package/dist/styles/mixins/shape.css.d.ts +96 -0
  1005. package/dist/styles/mixins/shape.css.d.ts.map +1 -0
  1006. package/dist/styles/mixins/shape.css.js +98 -0
  1007. package/dist/styles/mixins/shape.css.js.map +1 -0
  1008. package/dist/styles/mixins/states.css.cjs +37 -0
  1009. package/dist/styles/mixins/states.css.cjs.map +1 -0
  1010. package/dist/styles/mixins/states.css.d.ts +27 -0
  1011. package/dist/styles/mixins/states.css.d.ts.map +1 -0
  1012. package/dist/styles/mixins/states.css.js +44 -0
  1013. package/dist/styles/mixins/states.css.js.map +1 -0
  1014. package/dist/styles/mixins/table-base.css.cjs +94 -0
  1015. package/dist/styles/mixins/table-base.css.cjs.map +1 -0
  1016. package/dist/styles/mixins/table-base.css.d.ts +24 -0
  1017. package/dist/styles/mixins/table-base.css.d.ts.map +1 -0
  1018. package/dist/styles/mixins/table-base.css.js +99 -0
  1019. package/dist/styles/mixins/table-base.css.js.map +1 -0
  1020. package/dist/styles/mixins/theme.css.cjs +80 -0
  1021. package/dist/styles/mixins/theme.css.cjs.map +1 -0
  1022. package/dist/styles/mixins/theme.css.d.ts +77 -0
  1023. package/dist/styles/mixins/theme.css.d.ts.map +1 -0
  1024. package/dist/styles/mixins/theme.css.js +98 -0
  1025. package/dist/styles/mixins/theme.css.js.map +1 -0
  1026. package/dist/styles/mixins/variants.css.cjs +55 -0
  1027. package/dist/styles/mixins/variants.css.cjs.map +1 -0
  1028. package/dist/styles/mixins/variants.css.d.ts +22 -0
  1029. package/dist/styles/mixins/variants.css.d.ts.map +1 -0
  1030. package/dist/styles/mixins/variants.css.js +60 -0
  1031. package/dist/styles/mixins/variants.css.js.map +1 -0
  1032. package/dist/styles/preflight.css +239 -0
  1033. package/dist/styles/styles.css +5 -0
  1034. package/dist/styles/theme.css +553 -0
  1035. package/dist/switch.cjs +10 -0
  1036. package/dist/switch.cjs.map +1 -0
  1037. package/dist/switch.js +79 -0
  1038. package/dist/switch.js.map +1 -0
  1039. package/dist/tab-item.cjs +17 -0
  1040. package/dist/tab-item.cjs.map +1 -0
  1041. package/dist/tab-item.js +62 -0
  1042. package/dist/tab-item.js.map +1 -0
  1043. package/dist/tab-panel.cjs +14 -0
  1044. package/dist/tab-panel.cjs.map +1 -0
  1045. package/dist/tab-panel.js +61 -0
  1046. package/dist/tab-panel.js.map +1 -0
  1047. package/dist/table.cjs +2 -0
  1048. package/dist/table.cjs.map +1 -0
  1049. package/dist/table.js +101 -0
  1050. package/dist/table.js.map +1 -0
  1051. package/dist/tabs.cjs +17 -0
  1052. package/dist/tabs.cjs.map +1 -0
  1053. package/dist/tabs.js +126 -0
  1054. package/dist/tabs.js.map +1 -0
  1055. package/dist/testing/index.d.ts +233 -0
  1056. package/dist/testing/index.d.ts.map +1 -0
  1057. package/dist/testing.cjs +2 -0
  1058. package/dist/testing.cjs.map +1 -0
  1059. package/dist/testing.js +44 -0
  1060. package/dist/testing.js.map +1 -0
  1061. package/dist/text.cjs +2 -0
  1062. package/dist/text.cjs.map +1 -0
  1063. package/dist/text.js +34 -0
  1064. package/dist/text.js.map +1 -0
  1065. package/dist/textarea.cjs +33 -0
  1066. package/dist/textarea.cjs.map +1 -0
  1067. package/dist/textarea.js +137 -0
  1068. package/dist/textarea.js.map +1 -0
  1069. package/dist/time-picker.cjs +98 -0
  1070. package/dist/time-picker.cjs.map +1 -0
  1071. package/dist/time-picker.js +261 -0
  1072. package/dist/time-picker.js.map +1 -0
  1073. package/dist/toast.cjs +69 -0
  1074. package/dist/toast.cjs.map +1 -0
  1075. package/dist/toast.js +316 -0
  1076. package/dist/toast.js.map +1 -0
  1077. package/dist/tooltip.cjs +15 -0
  1078. package/dist/tooltip.cjs.map +1 -0
  1079. package/dist/tooltip.js +121 -0
  1080. package/dist/tooltip.js.map +1 -0
  1081. package/dist/types/index.d.ts +2 -0
  1082. package/dist/types/index.d.ts.map +1 -0
  1083. package/dist/utils/css.cjs +2 -0
  1084. package/dist/utils/css.cjs.map +1 -0
  1085. package/dist/utils/css.d.ts +10 -0
  1086. package/dist/utils/css.d.ts.map +1 -0
  1087. package/dist/utils/css.js +10 -0
  1088. package/dist/utils/css.js.map +1 -0
  1089. package/dist/utils/index.d.ts +3 -0
  1090. package/dist/utils/index.d.ts.map +1 -0
  1091. package/dist/utils/link.cjs +2 -0
  1092. package/dist/utils/link.cjs.map +1 -0
  1093. package/dist/utils/link.d.ts +44 -0
  1094. package/dist/utils/link.d.ts.map +1 -0
  1095. package/dist/utils/link.js +19 -0
  1096. package/dist/utils/link.js.map +1 -0
  1097. package/package.json +464 -0
package/dist/toast.js ADDED
@@ -0,0 +1,316 @@
1
+ import { reducedMotionMixin as e } from "./styles/mixins/accessibility.css.js";
2
+ import { warn as t } from "./_dev.js";
3
+ import { createSwipeControl as n } from "./headless/swipe.js";
4
+ import r from "./feedback/toast/toast.css?inline.js";
5
+ import { define as i, html as a, prop as o, ref as s } from "@vielzeug/ore";
6
+ import { computed as c, signal as l, watch as u } from "@vielzeug/ripple";
7
+ import { uuid as d } from "@vielzeug/arsenal";
8
+ //#region src/feedback/toast/toast.ts
9
+ var f = 300;
10
+ function p(e, t) {
11
+ return e.actions?.length ? a`
12
+ <div slot="actions" class="toast-actions">
13
+ ${e.actions.map((n) => a`
14
+ <ore-button
15
+ size="sm"
16
+ color=${n.color || e.color || "primary"}
17
+ variant=${n.variant || "solid"}
18
+ @click=${() => {
19
+ n.onClick?.(), t();
20
+ }}
21
+ >${n.label}</ore-button
22
+ >
23
+ `)}
24
+ </div>
25
+ ` : "";
26
+ }
27
+ var m = "ore-toast";
28
+ i(m, {
29
+ props: {
30
+ max: o.number(5),
31
+ position: o.oneOf([
32
+ "top-left",
33
+ "top-center",
34
+ "top-right",
35
+ "bottom-left",
36
+ "bottom-center",
37
+ "bottom-right"
38
+ ], "bottom-right")
39
+ },
40
+ setup(e, { el: t, emit: r, onCleanup: i, onMounted: o }) {
41
+ let m = l([]), h = s(), g = /* @__PURE__ */ new Map(), _ = l(!1), v = l(!1), y = c(() => _.value || v.value), b = (e, t) => {
42
+ m.value = m.value.map((n) => n.id === e ? {
43
+ ...n,
44
+ ...t
45
+ } : n);
46
+ }, x = (e) => m.value.find((t) => t.id === e), S = (e) => (e instanceof Event ? e.currentTarget : e).querySelector(".toast-inner"), C = (e) => (e.timer && clearTimeout(e.timer.timeoutId), {
47
+ ...e,
48
+ timer: null
49
+ }), w = (e, t) => {
50
+ if (t <= 0) return;
51
+ let n = setTimeout(() => A(e), t);
52
+ b(e, { timer: {
53
+ remaining: t,
54
+ startedAt: Date.now(),
55
+ timeoutId: n
56
+ } });
57
+ }, T = () => {
58
+ m.value = m.value.map((e) => e.timer ? (clearTimeout(e.timer.timeoutId), {
59
+ ...e,
60
+ timer: {
61
+ ...e.timer,
62
+ remaining: Math.max(0, e.timer.remaining - (Date.now() - e.timer.startedAt))
63
+ }
64
+ }) : e);
65
+ }, E = () => {
66
+ for (let e of m.value) {
67
+ if (!e.timer || e.timer.remaining <= 0) continue;
68
+ let t = setTimeout(() => A(e.id), e.timer.remaining);
69
+ b(e.id, { timer: {
70
+ ...e.timer,
71
+ startedAt: Date.now(),
72
+ timeoutId: t
73
+ } });
74
+ }
75
+ };
76
+ u(y, (e) => {
77
+ e ? T() : E();
78
+ });
79
+ let D = (e) => {
80
+ let t = ({ event: e }) => {
81
+ let t = S(e);
82
+ t && (t.style.transition = "", t.style.transform = "", t.style.opacity = "");
83
+ };
84
+ return n({
85
+ axis: () => "x",
86
+ captureTarget: () => null,
87
+ disabled: c(() => !(x(e)?.dismissible ?? !0)),
88
+ onCancel: t,
89
+ onCommit: ({ distance: t, event: n }) => {
90
+ let r = S(n);
91
+ if (!r) return;
92
+ let i = t >= 0 ? 1 : -1, a = window.matchMedia("(prefers-reduced-motion: reduce)").matches, o = () => O(e);
93
+ if (a) {
94
+ r.style.opacity = "0", o();
95
+ return;
96
+ }
97
+ r.style.transition = "transform 0.22s ease-out, opacity 0.22s ease-out", r.offsetWidth, r.style.transform = `translateX(${i * 120}%)`, r.style.opacity = "0";
98
+ let s = (e) => {
99
+ e.target !== r || e.propertyName !== "transform" || (r.removeEventListener("transitionend", s), clearTimeout(c), o());
100
+ }, c = setTimeout(() => {
101
+ r.removeEventListener("transitionend", s), o();
102
+ }, 300);
103
+ r.addEventListener("transitionend", s);
104
+ },
105
+ onMove: ({ distance: e, event: t }) => {
106
+ let n = S(t);
107
+ n && (n.style.transition = "none", n.style.transform = `translateX(${e}px)`, n.style.opacity = String(Math.max(0, 1 - Math.abs(e) / 200)));
108
+ },
109
+ onRelease: t
110
+ });
111
+ }, O = (e) => {
112
+ let t = x(e);
113
+ t?.timer && clearTimeout(t.timer.timeoutId), g.delete(e), m.value = m.value.filter((t) => t.id !== e), t?.onDismiss?.(), r("dismiss", { id: e });
114
+ }, k = (t) => {
115
+ let n = t.id || d(), i = e.max?.value ?? 5, a = m.value.filter((e) => e.phase !== "exiting"), o = a.length - (i - 1);
116
+ if (o > 0) for (let e of a.slice(0, o)) A(e.id);
117
+ let s = {
118
+ dismissible: !0,
119
+ duration: 5e3,
120
+ ...t,
121
+ id: n,
122
+ phase: "entering",
123
+ timer: null
124
+ };
125
+ return g.set(n, D(n)), m.value = [...m.value, s], r("add", { id: n }), requestAnimationFrame(() => {
126
+ x(n)?.phase === "entering" && b(n, { phase: "active" });
127
+ }), s.duration > 0 && w(n, s.duration), n;
128
+ }, A = (e) => {
129
+ let t = x(e);
130
+ if (!t || t.phase === "exiting") return;
131
+ b(e, {
132
+ ...C(t),
133
+ phase: "exiting"
134
+ });
135
+ let n = h.value?.querySelector(`[data-toast-id="${e}"] .toast-inner`);
136
+ n?.offsetHeight;
137
+ let r = !1, i = () => {
138
+ r || (r = !0, O(e));
139
+ }, a = n ? parseFloat(getComputedStyle(n).transitionDuration) * 1e3 : NaN, o = setTimeout(i, (Number.isFinite(a) && a > 0 ? a : f) + 50), s = (t) => {
140
+ t.target?.closest?.(`[data-toast-id="${e}"]`) && (h.value?.removeEventListener("transitionend", s), clearTimeout(o), i());
141
+ };
142
+ h.value?.addEventListener("transitionend", s);
143
+ }, j = (e, t) => {
144
+ let n = x(e);
145
+ if (!n) return;
146
+ let r = t.duration === void 0 ? n : C(n);
147
+ b(e, {
148
+ ...r,
149
+ ...t,
150
+ id: e
151
+ }), t.duration !== void 0 && t.duration > 0 && w(e, t.duration);
152
+ }, M = () => {
153
+ for (let e of m.value) e.phase !== "exiting" && A(e.id);
154
+ }, N = (e) => e.urgency ?? (e.color === "error" ? "assertive" : "polite"), P = c(() => m.value.filter((e) => N(e) === "polite")), F = c(() => m.value.filter((e) => N(e) === "assertive"));
155
+ i(() => {
156
+ for (let e of m.value) e.timer && clearTimeout(e.timer.timeoutId);
157
+ g.clear();
158
+ });
159
+ let I = (e) => {
160
+ let t = () => A(e.id);
161
+ return a`
162
+ <div
163
+ class="toast-wrapper"
164
+ data-toast-id=${e.id}
165
+ part="toast-wrapper"
166
+ @pointerdown=${(t) => g.get(e.id)?.handlePointerDown(t)}
167
+ @pointermove=${(t) => g.get(e.id)?.handlePointerMove(t)}
168
+ @pointerup=${(t) => g.get(e.id)?.handlePointerUp(t)}
169
+ @pointercancel=${(t) => g.get(e.id)?.handlePointerCancel(t)}>
170
+ <div class="${() => `toast-inner${e.phase === "active" ? "" : ` ${e.phase}`}`}" part="toast-inner">
171
+ <ore-alert
172
+ color=${e.color || (e.urgency === "assertive" ? "error" : "primary")}
173
+ variant=${e.variant || "solid"}
174
+ size=${e.size || "md"}
175
+ rounded=${e.rounded || "md"}
176
+ ?horizontal=${e.horizontal}
177
+ heading=${e.heading || ""}
178
+ ?dismissible=${e.dismissible !== !1}
179
+ @dismiss=${t}>
180
+ ${e.meta ? a`<span slot="meta">${e.meta}</span>` : ""} ${e.message}
181
+ ${p(e, t)}
182
+ </ore-alert>
183
+ </div>
184
+ </div>
185
+ `;
186
+ };
187
+ return o(() => {
188
+ let e = t;
189
+ e.add = k, e.clear = M, e.dismiss = A, e.update = j;
190
+ }), a`
191
+ <div
192
+ class="toast-container"
193
+ ref=${h}
194
+ @pointerenter=${() => {
195
+ _.value = !0, t.classList.add("hovered");
196
+ }}
197
+ @pointerleave=${() => {
198
+ _.value = !1, t.classList.remove("hovered");
199
+ }}
200
+ @focusin=${() => {
201
+ v.value = !0;
202
+ }}
203
+ @focusout=${() => {
204
+ v.value = !1;
205
+ }}
206
+ part="container">
207
+ <!-- Polite live region: normal informational toasts -->
208
+ <div
209
+ role="region"
210
+ aria-live="polite"
211
+ aria-relevant="additions removals"
212
+ aria-atomic="false"
213
+ aria-label="Notifications"
214
+ class="toast-live-region">
215
+ ${() => P.value.map(I)}
216
+ </div>
217
+ <!-- Assertive live region: critical errors that interrupt immediately -->
218
+ <div
219
+ role="region"
220
+ aria-live="assertive"
221
+ aria-relevant="additions removals"
222
+ aria-atomic="false"
223
+ aria-label="Critical notifications"
224
+ class="toast-live-region">
225
+ ${() => F.value.map(I)}
226
+ </div>
227
+ <slot></slot>
228
+ </div>
229
+ `;
230
+ },
231
+ styles: [e, r]
232
+ });
233
+ function h(e = document.body) {
234
+ let n = null, r = !1, i = null, a = () => n?.isConnected ? n : (n = (e instanceof Element, e).querySelector("ore-toast"), n || (n = document.createElement("ore-toast"), i &&= (i.position && n.setAttribute("position", i.position), i.max != null && n.setAttribute("max", String(i.max)), null), e.appendChild(n)), r = !0, n), o = {
235
+ add(e) {
236
+ return a().add(e);
237
+ },
238
+ clear() {
239
+ a().clear();
240
+ },
241
+ configure(e) {
242
+ if (r) {
243
+ t("toast.configure() called after the container was already created; options ignored.");
244
+ return;
245
+ }
246
+ i = {
247
+ ...i,
248
+ ...e
249
+ };
250
+ },
251
+ dismiss(e) {
252
+ a().dismiss(e);
253
+ },
254
+ error(e, t) {
255
+ return o.add({
256
+ color: "error",
257
+ ...t,
258
+ message: e
259
+ });
260
+ },
261
+ info(e, t) {
262
+ return o.add({
263
+ color: "info",
264
+ ...t,
265
+ message: e
266
+ });
267
+ },
268
+ async promise(e, t) {
269
+ let n = o.add({
270
+ color: "primary",
271
+ dismissible: !1,
272
+ duration: 0,
273
+ message: t.loading
274
+ });
275
+ try {
276
+ let r = await e;
277
+ return o.update(n, {
278
+ color: "success",
279
+ dismissible: !0,
280
+ duration: 5e3,
281
+ message: typeof t.success == "function" ? t.success(r) : t.success
282
+ }), r;
283
+ } catch (e) {
284
+ throw o.update(n, {
285
+ color: "error",
286
+ dismissible: !0,
287
+ duration: 5e3,
288
+ message: typeof t.error == "function" ? t.error(e) : t.error
289
+ }), e;
290
+ }
291
+ },
292
+ success(e, t) {
293
+ return o.add({
294
+ color: "success",
295
+ ...t,
296
+ message: e
297
+ });
298
+ },
299
+ update(e, t) {
300
+ a().update(e, t);
301
+ },
302
+ warning(e, t) {
303
+ return o.add({
304
+ color: "warning",
305
+ ...t,
306
+ message: e
307
+ });
308
+ }
309
+ };
310
+ return o;
311
+ }
312
+ var g = h();
313
+ //#endregion
314
+ export { m as TOAST_TAG, h as createToastService, g as toast };
315
+
316
+ //# sourceMappingURL=toast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toast.js","names":[],"sources":["../src/feedback/toast/toast.ts"],"sourcesContent":["import { uuid } from '@vielzeug/arsenal';\nimport { define, html, prop, ref } from '@vielzeug/ore';\nimport { computed, signal, watch } from '@vielzeug/ripple';\n\nimport type { SwipeControl } from '../../headless';\nimport type { ComponentSize, RoundedSize, ThemeColor } from '../../types';\n\nimport { warn } from '../../_dev';\nimport { createSwipeControl } from '../../headless';\nimport { reducedMotionMixin } from '../../styles';\nimport componentStyles from './toast.css?inline';\n\n// ---------------------------------------------------------------------------\n// NOTE: Architecture\n//\n// Each toast has two DOM layers:\n// .toast-wrapper — layout / stacking / grid positioning (no animation)\n// .toast-inner — animation target (opacity fade in/out)\n//\n// This separation means stacking rules (nth-last-child, hover) and animation\n// rules never fight over the same element. No !important needed anywhere.\n//\n// State: a single signal<ToastEntry[]> owns all per-toast state (data, phase,\n// timer). There are no parallel Sets or Maps tracking lifecycle separately.\n//\n// Exit animation: .toast-inner.exiting fades opacity → 0.\n// The wrapper stays in-flow during the fade so the grid doesn't snap shut.\n// After transitionend (or TOAST_EXIT_MS fallback), finalize() removes the\n// toast from the entries array which removes the wrapper from the DOM.\n//\n// Swipe gesture animates .toast-inner (not .toast-wrapper) to avoid\n// polluting the wrapper's transition state used by the exit animation.\n// Swipe commit calls finalizeRemoval() directly — it owns the animation,\n// so the normal removeToast() path is not involved.\n//\n// Close button: owned by the toast template, not ore-alert. ore-alert renders\n// content only. This keeps ore-alert a pure presentational component with no\n// animation lifecycle coupling.\n//\n// Max eviction: when adding would exceed max, oldest non-exiting toasts are\n// dismissed via removeToast() — animated, with onDismiss callback + event.\n//\n// Dismiss queue: removed. Each toast exits independently in parallel.\n// ---------------------------------------------------------------------------\n\n/** Duration (ms) of the CSS opacity exit transition on .toast-inner.\n * Must match the value in toast.css: `transition: opacity 300ms`. */\nconst TOAST_EXIT_MS = 300;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type OreToastEvents = {\n add: { id: string };\n dismiss: { id: string };\n};\n\nexport type OreToastProps = {\n max?: number;\n position?: 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';\n};\n\n/** Individual toast notification */\nexport type ToastItem = {\n actions?: Array<{\n color?: ThemeColor;\n label: string;\n onClick?: () => void;\n variant?: 'solid' | 'flat' | 'bordered';\n }>;\n color?: ThemeColor;\n dismissible?: boolean;\n /** Auto-dismiss delay in ms. Set to 0 for persistent toasts (default: 5000) */\n duration?: number;\n heading?: string;\n /** Show message and actions side-by-side (horizontal layout) */\n horizontal?: boolean;\n /** Auto-generated via crypto.randomUUID() if omitted */\n id?: string;\n message: string;\n /** Metadata text (e.g. timestamp) shown in the alert meta slot */\n meta?: string;\n /** Called after the toast is fully dismissed and removed */\n onDismiss?: () => void;\n rounded?: RoundedSize | '';\n size?: ComponentSize;\n /**\n * Urgency level for screen readers.\n * - `'polite'` (default): announced after the user finishes their current action.\n * - `'assertive'`: interrupts the user immediately. Use only for critical errors.\n */\n urgency?: 'polite' | 'assertive';\n variant?: 'solid' | 'flat' | 'bordered';\n};\n\ntype ToastPhase = 'entering' | 'active' | 'exiting';\n\ntype ToastTimer = {\n remaining: number;\n startedAt: number;\n timeoutId: ReturnType<typeof setTimeout>;\n};\n\n/** Internal: a ToastItem that has been normalized and given a lifecycle phase. */\ntype ToastEntry = Required<Pick<ToastItem, 'dismissible' | 'duration' | 'id'>> &\n Omit<ToastItem, 'dismissible' | 'duration' | 'id'> & {\n id: string;\n phase: ToastPhase;\n timer: ToastTimer | null;\n };\n\n/** Public API of the ore-toast element */\nexport interface ToastElement extends HTMLElement {\n add: (toast: ToastItem) => string;\n clear: () => void;\n dismiss: (id: string) => void;\n update: (id: string, updates: Partial<ToastItem>) => void;\n}\n\n// ─── Component ───────────────────────────────────────────────────────────────\n\n/**\n * An accessible toast stack with polite/assertive live regions and hover expansion.\n * Stacks up to 3 notifications with a 3D effect.\n *\n * @element ore-toast\n *\n * @attr {string} position - 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right'\n * @attr {number} max - Max toasts in DOM at once (default: 5)\n *\n * @fires add - When a toast is added `{ id }`\n * @fires dismiss - When a toast is dismissed `{ id }`\n *\n * @slot - Manually placed `ore-alert` elements\n *\n * @cssprop --toast-position - Position type (default: fixed)\n * @cssprop --toast-inset-top - Top inset\n * @cssprop --toast-inset-bottom - Bottom inset\n * @cssprop --toast-inset-left - Left inset\n * @cssprop --toast-inset-right - Right inset\n * @cssprop --toast-z-index - Z-index (default: 9999)\n * @cssprop --toast-max-width - Max width (default: 400px)\n * @cssprop --toast-gap - Gap between expanded toasts (default: 0.5rem)\n * @cssprop --toast-exit-duration - Exit animation duration (default: 300ms)\n *\n * @example\n * ```html\n * <!-- Declarative: place once in HTML -->\n * <ore-toast position=\"bottom-right\"></ore-toast>\n *\n * <!-- Programmatic: use the singleton service -->\n * <script type=\"module\">\n * import { toast } from '@vielzeug/refine';\n * toast.success('Changes saved!');\n * </script>\n * ```\n */\n\n/** Renders the action buttons for a toast entry. */\nfunction renderToastActions(entry: ToastEntry, onDismiss: () => void) {\n if (!entry.actions?.length) return '';\n\n return html`\n <div slot=\"actions\" class=\"toast-actions\">\n ${entry.actions.map(\n (action) => html`\n <ore-button\n size=\"sm\"\n color=${action.color || entry.color || 'primary'}\n variant=${action.variant || 'solid'}\n @click=${() => {\n action.onClick?.();\n onDismiss();\n }}\n >${action.label}</ore-button\n >\n `,\n )}\n </div>\n `;\n}\n\nexport const TOAST_TAG = 'ore-toast' as const;\ndefine<OreToastProps, OreToastEvents>(TOAST_TAG, {\n props: {\n max: prop.number(5),\n position: prop.oneOf(\n ['top-left', 'top-center', 'top-right', 'bottom-left', 'bottom-center', 'bottom-right'] as const,\n 'bottom-right',\n ),\n },\n setup(props, { el, emit, onCleanup, onMounted }) {\n // Single source of truth for all toast state.\n const entries = signal<ToastEntry[]>([]);\n const containerRef = ref<HTMLDivElement>();\n\n // Per-toast swipe-to-dismiss controls (keyed by id, cleaned up in finalizeRemoval).\n const swipeControls = new Map<string, SwipeControl>();\n\n // Pause state is reactive so computed derivations and watches can observe it.\n const hoverPaused = signal(false);\n const focusPaused = signal(false);\n const paused = computed(() => hoverPaused.value || focusPaused.value);\n\n // ── Helpers ────────────────────────────────────────────────────────────\n\n const updateEntry = (id: string, patch: Partial<ToastEntry>) => {\n entries.value = entries.value.map((e) => (e.id === id ? { ...e, ...patch } : e));\n };\n\n const getEntry = (id: string) => entries.value.find((e) => e.id === id);\n\n const getInner = (wrapperOrEvent: HTMLElement | Event): HTMLElement | null => {\n const wrapper = wrapperOrEvent instanceof Event ? (wrapperOrEvent.currentTarget as HTMLElement) : wrapperOrEvent;\n\n return wrapper.querySelector<HTMLElement>('.toast-inner');\n };\n\n // ── Timer management ───────────────────────────────────────────────────\n\n const clearEntryTimer = (entry: ToastEntry): ToastEntry => {\n if (entry.timer) clearTimeout(entry.timer.timeoutId);\n\n return { ...entry, timer: null };\n };\n\n const scheduleTimer = (id: string, remaining: number) => {\n if (remaining <= 0) return;\n\n const timeoutId = setTimeout(() => removeToast(id), remaining);\n\n updateEntry(id, { timer: { remaining, startedAt: Date.now(), timeoutId } });\n };\n\n const pauseTimers = () => {\n entries.value = entries.value.map((e) => {\n if (!e.timer) return e;\n\n clearTimeout(e.timer.timeoutId);\n\n return {\n ...e,\n timer: { ...e.timer, remaining: Math.max(0, e.timer.remaining - (Date.now() - e.timer.startedAt)) },\n };\n });\n };\n\n const resumeTimers = () => {\n for (const e of entries.value) {\n if (!e.timer || e.timer.remaining <= 0) continue;\n\n const timeoutId = setTimeout(() => removeToast(e.id), e.timer.remaining);\n\n updateEntry(e.id, { timer: { ...e.timer, startedAt: Date.now(), timeoutId } });\n }\n };\n\n // Watch reactive pause state — automatically pauses/resumes all timers.\n watch(paused, (isPaused) => {\n if (isPaused) pauseTimers();\n else resumeTimers();\n });\n\n // ── Swipe gesture ──────────────────────────────────────────────────────\n // Animates .toast-inner to avoid polluting the wrapper transition state.\n // On commit, calls finalizeRemoval() directly (swipe owns the animation).\n\n const createToastSwipe = (id: string): SwipeControl => {\n // Same reset behavior whether the swipe was interrupted by the platform\n // (onCancel) or simply released without crossing the commit threshold\n // (onRelease) — the toast snaps back to rest either way.\n const resetSwipeStyles = ({ event }: { event: PointerEvent }): void => {\n const inner = getInner(event);\n\n if (!inner) return;\n\n inner.style.transition = '';\n inner.style.transform = '';\n inner.style.opacity = '';\n };\n\n return createSwipeControl({\n axis: () => 'x',\n // Do not capture pointers for toast swipe gestures; capture can steal\n // close-button clicks when the gesture does not move.\n captureTarget: () => null,\n disabled: computed(() => !(getEntry(id)?.dismissible ?? true)),\n onCancel: resetSwipeStyles,\n onCommit: ({ distance, event }) => {\n const inner = getInner(event);\n\n if (!inner) return;\n\n const dir = distance >= 0 ? 1 : -1;\n const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n const finish = () => finalizeRemoval(id);\n\n if (reducedMotion) {\n inner.style.opacity = '0';\n finish();\n\n return;\n }\n\n inner.style.transition = 'transform 0.22s ease-out, opacity 0.22s ease-out';\n void inner.offsetWidth;\n inner.style.transform = `translateX(${dir * 120}%)`;\n inner.style.opacity = '0';\n\n const onTransitionEnd = (e: TransitionEvent) => {\n if (e.target !== inner || e.propertyName !== 'transform') return;\n\n inner.removeEventListener('transitionend', onTransitionEnd);\n clearTimeout(fallback);\n finish();\n };\n\n const fallback = setTimeout(() => {\n inner.removeEventListener('transitionend', onTransitionEnd);\n finish();\n }, 300);\n\n inner.addEventListener('transitionend', onTransitionEnd);\n },\n onMove: ({ distance, event }) => {\n const inner = getInner(event);\n\n if (!inner) return;\n\n inner.style.transition = 'none';\n inner.style.transform = `translateX(${distance}px)`;\n inner.style.opacity = String(Math.max(0, 1 - Math.abs(distance) / 200));\n },\n onRelease: resetSwipeStyles,\n });\n };\n\n // ── Toast lifecycle ────────────────────────────────────────────────────\n\n /** Remove all per-entry resources and fire callbacks. Does not animate. */\n const finalizeRemoval = (id: string) => {\n const entry = getEntry(id);\n\n // Clean up timer and swipe control before removing from signal.\n if (entry?.timer) clearTimeout(entry.timer.timeoutId);\n\n swipeControls.delete(id);\n entries.value = entries.value.filter((e) => e.id !== id);\n entry?.onDismiss?.();\n emit('dismiss', { id });\n };\n\n const addToast = (item: ToastItem): string => {\n const id = item.id || uuid();\n const maxToasts = props.max?.value ?? 5;\n\n // Evict oldest non-exiting toasts to stay within max — animated, with callbacks.\n const active = entries.value.filter((e) => e.phase !== 'exiting');\n const overflow = active.length - (maxToasts - 1);\n\n if (overflow > 0) {\n for (const evicted of active.slice(0, overflow)) removeToast(evicted.id);\n }\n\n const entry: ToastEntry = {\n dismissible: true,\n duration: 5000,\n ...item,\n id,\n phase: 'entering',\n timer: null,\n };\n\n swipeControls.set(id, createToastSwipe(id));\n entries.value = [...entries.value, entry];\n emit('add', { id });\n\n requestAnimationFrame(() => {\n // Guard: if the toast was dismissed before this rAF fired (e.g. evicted\n // by max), do not overwrite its exiting phase back to active.\n if (getEntry(id)?.phase === 'entering') updateEntry(id, { phase: 'active' });\n });\n\n if (entry.duration > 0) scheduleTimer(id, entry.duration);\n\n return id;\n };\n\n const removeToast = (id: string) => {\n const entry = getEntry(id);\n\n // Already animating out or not found — ignore.\n if (!entry || entry.phase === 'exiting') return;\n\n // Clear the auto-dismiss timer: the user (or max-eviction) is dismissing now.\n updateEntry(id, { ...clearEntryTimer(entry), phase: 'exiting' });\n\n // Force a layout flush on the current inner element (if in DOM now) so the\n // browser snapshots the current opacity as the animation start value.\n const innerEl = containerRef.value?.querySelector<HTMLElement>(`[data-toast-id=\"${id}\"] .toast-inner`);\n\n void innerEl?.offsetHeight;\n\n let done = false;\n const onDone = () => {\n if (done) return;\n\n done = true;\n finalizeRemoval(id);\n };\n\n // TOAST_EXIT_MS is the built-in default, matching the CSS opacity transition's own\n // default. Read the *actual* computed duration so a consumer-customized\n // `--toast-exit-duration` doesn't get cut off by a shorter hardcoded fallback.\n // Fallback fires if transitionend never arrives (jsdom, reduced-motion, etc.).\n const computedExitMs = innerEl ? parseFloat(getComputedStyle(innerEl).transitionDuration) * 1000 : NaN;\n const exitMs = Number.isFinite(computedExitMs) && computedExitMs > 0 ? computedExitMs : TOAST_EXIT_MS;\n const fallback = setTimeout(onDone, exitMs + 50);\n\n // Listen on the container with event delegation so we are immune to\n // ore re-rendering the entries list (e.g. rAF phase transitions that\n // rebuild DOM after our listener would have been set up).\n // transitionend bubbles, so it reaches the container regardless of which\n // generation of .toast-inner element fires it.\n const onTransitionEnd = (e: TransitionEvent) => {\n const wrapper = (e.target as HTMLElement | null)?.closest?.(`[data-toast-id=\"${id}\"]`);\n\n if (!wrapper) return;\n\n containerRef.value?.removeEventListener('transitionend', onTransitionEnd);\n clearTimeout(fallback);\n onDone();\n };\n\n containerRef.value?.addEventListener('transitionend', onTransitionEnd);\n };\n\n const updateToast = (id: string, updates: Partial<ToastItem>) => {\n const entry = getEntry(id);\n\n if (!entry) return;\n\n const cleared = updates.duration !== undefined ? clearEntryTimer(entry) : entry;\n\n updateEntry(id, { ...cleared, ...updates, id });\n\n if (updates.duration !== undefined && updates.duration > 0) scheduleTimer(id, updates.duration);\n };\n\n const clearAll = () => {\n // Fire all removals concurrently — parallel fades are visually correct.\n for (const e of entries.value) {\n if (e.phase !== 'exiting') removeToast(e.id);\n }\n };\n\n // ── Derived lists for live regions ─────────────────────────────────────\n\n const urgencyOf = (e: ToastEntry) => e.urgency ?? (e.color === 'error' ? 'assertive' : 'polite');\n const politeEntries = computed(() => entries.value.filter((e) => urgencyOf(e) === 'polite'));\n const assertiveEntries = computed(() => entries.value.filter((e) => urgencyOf(e) === 'assertive'));\n\n // ── Cleanup on disconnect ──────────────────────────────────────────────\n\n onCleanup(() => {\n for (const e of entries.value) {\n if (e.timer) clearTimeout(e.timer.timeoutId);\n }\n\n swipeControls.clear();\n });\n\n // ── Template ───────────────────────────────────────────────────────────\n\n const renderEntry = (entry: ToastEntry) => {\n const dismiss = () => removeToast(entry.id);\n\n return html`\n <div\n class=\"toast-wrapper\"\n data-toast-id=${entry.id}\n part=\"toast-wrapper\"\n @pointerdown=${(e: PointerEvent) => swipeControls.get(entry.id)?.handlePointerDown(e)}\n @pointermove=${(e: PointerEvent) => swipeControls.get(entry.id)?.handlePointerMove(e)}\n @pointerup=${(e: PointerEvent) => swipeControls.get(entry.id)?.handlePointerUp(e)}\n @pointercancel=${(e: PointerEvent) => swipeControls.get(entry.id)?.handlePointerCancel(e)}>\n <div class=\"${() => `toast-inner${entry.phase !== 'active' ? ` ${entry.phase}` : ''}`}\" part=\"toast-inner\">\n <ore-alert\n color=${entry.color || (entry.urgency === 'assertive' ? 'error' : 'primary')}\n variant=${entry.variant || 'solid'}\n size=${entry.size || 'md'}\n rounded=${entry.rounded || 'md'}\n ?horizontal=${entry.horizontal}\n heading=${entry.heading || ''}\n ?dismissible=${entry.dismissible !== false}\n @dismiss=${dismiss}>\n ${entry.meta ? html`<span slot=\"meta\">${entry.meta}</span>` : ''} ${entry.message}\n ${renderToastActions(entry, dismiss)}\n </ore-alert>\n </div>\n </div>\n `;\n };\n\n // Expose imperative API directly on mount — calls made before mount are\n // safe because ore mounts synchronously on connectedCallback.\n onMounted(() => {\n const toastEl = el as ToastElement;\n\n toastEl.add = addToast;\n toastEl.clear = clearAll;\n toastEl.dismiss = removeToast;\n toastEl.update = updateToast;\n });\n\n return html`\n <div\n class=\"toast-container\"\n ref=${containerRef}\n @pointerenter=${() => {\n hoverPaused.value = true;\n el.classList.add('hovered');\n }}\n @pointerleave=${() => {\n hoverPaused.value = false;\n el.classList.remove('hovered');\n }}\n @focusin=${() => {\n focusPaused.value = true;\n }}\n @focusout=${() => {\n focusPaused.value = false;\n }}\n part=\"container\">\n <!-- Polite live region: normal informational toasts -->\n <div\n role=\"region\"\n aria-live=\"polite\"\n aria-relevant=\"additions removals\"\n aria-atomic=\"false\"\n aria-label=\"Notifications\"\n class=\"toast-live-region\">\n ${() => politeEntries.value.map(renderEntry)}\n </div>\n <!-- Assertive live region: critical errors that interrupt immediately -->\n <div\n role=\"region\"\n aria-live=\"assertive\"\n aria-relevant=\"additions removals\"\n aria-atomic=\"false\"\n aria-label=\"Critical notifications\"\n class=\"toast-live-region\">\n ${() => assertiveEntries.value.map(renderEntry)}\n </div>\n <slot></slot>\n </div>\n `;\n },\n styles: [reducedMotionMixin, componentStyles],\n});\n\n// ─── Toast service ────────────────────────────────────────────────────────────\n\nexport type ToastServiceConfig = OreToastProps;\n\nexport interface ToastService {\n /** Add a toast and return its id */\n add(item: ToastItem): string;\n /** Dismiss all toasts (animated, in parallel) */\n clear(): void;\n /**\n * Configure the auto-created container.\n * Has no effect if called after the first `add()` — logs a dev warning in that case.\n */\n configure(config: ToastServiceConfig): void;\n /** Dismiss a toast by id (animated) */\n dismiss(id: string): void;\n /** Shortcut: error toast with red color (assertive live region) */\n error(message: string, opts?: Partial<ToastItem>): string;\n /** Shortcut: info toast */\n info(message: string, opts?: Partial<ToastItem>): string;\n /**\n * Shows a loading toast tied to a promise.\n * Updates to success/error when the promise settles.\n */\n promise<T>(\n promise: Promise<T>,\n messages: {\n error: string | ((err: unknown) => string);\n loading: string;\n success: string | ((data: T) => string);\n },\n ): Promise<T>;\n /** Shortcut: success toast with green color */\n success(message: string, opts?: Partial<ToastItem>): string;\n /** Update an existing toast in-place */\n update(id: string, updates: Partial<ToastItem>): void;\n /** Shortcut: warning toast */\n warning(message: string, opts?: Partial<ToastItem>): string;\n}\n\n/**\n * Creates a scoped toast service backed by an `ore-toast` element.\n *\n * The service lazily creates an `<ore-toast>` element inside `root` on first\n * use. Pass a custom root to scope notifications to a sub-tree (e.g. a drawer),\n * or use the pre-built `toast` singleton which targets `document.body`.\n *\n * @example\n * ```ts\n * // Scoped instance\n * const drawerToast = createToastService(drawerEl);\n * drawerToast.success('Saved inside drawer');\n *\n * // The default singleton\n * import { toast } from '@vielzeug/refine';\n * toast.success('Saved!');\n * ```\n */\nexport function createToastService(root: ParentNode = document.body): ToastService {\n let host: ToastElement | null = null;\n let configured = false;\n let pendingConfig: ToastServiceConfig | null = null;\n\n const getHost = (): ToastElement => {\n if (host?.isConnected) return host;\n\n // Re-use an existing element in the root (supports declarative placement).\n host = (root instanceof Element ? root : (root as Document | ShadowRoot)).querySelector<ToastElement>('ore-toast');\n\n if (!host) {\n host = document.createElement('ore-toast') as ToastElement;\n\n if (pendingConfig) {\n if (pendingConfig.position) host.setAttribute('position', pendingConfig.position);\n\n if (pendingConfig.max != null) host.setAttribute('max', String(pendingConfig.max));\n\n pendingConfig = null;\n }\n\n (root as Element | Document).appendChild(host);\n }\n\n configured = true;\n\n return host;\n };\n\n const service: ToastService = {\n add(item) {\n return getHost().add(item);\n },\n\n clear() {\n getHost().clear();\n },\n\n configure(config) {\n if (configured) {\n warn('toast.configure() called after the container was already created; options ignored.');\n\n return;\n }\n\n pendingConfig = { ...pendingConfig, ...config };\n },\n\n dismiss(id) {\n getHost().dismiss(id);\n },\n\n error(message, opts) {\n return service.add({ color: 'error', ...opts, message });\n },\n\n info(message, opts) {\n return service.add({ color: 'info', ...opts, message });\n },\n\n async promise(promise, messages) {\n const id = service.add({ color: 'primary', dismissible: false, duration: 0, message: messages.loading });\n\n try {\n const data = await promise;\n\n service.update(id, {\n color: 'success',\n dismissible: true,\n duration: 5000,\n message: typeof messages.success === 'function' ? messages.success(data) : messages.success,\n });\n\n return data;\n } catch (err) {\n service.update(id, {\n color: 'error',\n dismissible: true,\n duration: 5000,\n message: typeof messages.error === 'function' ? messages.error(err) : messages.error,\n });\n throw err;\n }\n },\n\n success(message, opts) {\n return service.add({ color: 'success', ...opts, message });\n },\n\n update(id, updates) {\n getHost().update(id, updates);\n },\n\n warning(message, opts) {\n return service.add({ color: 'warning', ...opts, message });\n },\n };\n\n return service;\n}\n\n/**\n * Singleton toast service — finds or creates a single `<ore-toast>` on `document.body`.\n *\n * @example\n * ```ts\n * import { toast } from '@vielzeug/refine';\n *\n * toast.success('Changes saved!');\n * toast.error('Upload failed', { duration: 0 });\n *\n * const id = toast.add({ message: 'Uploading…', duration: 0, dismissible: false });\n * toast.update(id, { message: 'Done!', color: 'success', duration: 3000, dismissible: true });\n *\n * await toast.promise(uploadFile(), {\n * loading: 'Uploading…',\n * success: (url) => `Uploaded to ${url}`,\n * error: 'Upload failed',\n * });\n * ```\n */\nexport const toast: ToastService = createToastService();\n"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./styles/mixins/theme.css.cjs"),t=require("./shared/prop-bundles.cjs"),n=require("./headless/parse.cjs"),r=require("./overlay/shared/use-floating-trigger.cjs"),i=require("./overlay/tooltip/tooltip.css?inline.cjs");let a=require("@vielzeug/ore"),o=require("@vielzeug/ripple");var s=4,c=[`hover`,`focus`],l=new Set([`click`,`focus`,`hover`]),u=e=>{if(e==null||e.trim()===``)return 0;let t=Number(e);return Number.isFinite(t)&&t>=0?t:0},d=e=>e==null?void 0:e===``||e===`true`,f=e=>n.parseStringTriggers(e,l,c),p=`ore-tooltip`;(0,a.define)(p,{props:{...t.sizableBundle,...t.disablableBundle,"close-delay":{default:0,parse:u},content:a.prop.string(),delay:{default:0,parse:u},open:{default:void 0,parse:d},placement:a.prop.oneOf([`top`,`bottom`,`left`,`right`],`top`),trigger:a.prop.string(`hover,focus`),variant:a.prop.string()},setup(e,{aria:t,el:n,onCleanup:i,onMounted:c,slots:l}){let u=n.shadowRoot,d=(0,o.computed)(()=>!!e.disabled.value),p=(0,o.computed)(()=>e.open.value!==void 0),m=(0,o.signal)(`top`),h=(0,a.createStableId)(`tooltip`),g=(0,o.computed)(()=>f(e.trigger.value)),_=null,v=null,y=null,b=()=>{v&&=(clearTimeout(v),null)},x=()=>{y&&=(clearTimeout(y),null)},S=r.useFloatingTrigger({bindTriggerAria:e=>t(e,{describedby:()=>h}),disabled:d,getPanel:()=>_,offset:8,onCleanup:i,onPlacementChange:e=>{let t=e.split(`-`)[0];m.value=t,t===`left`&&_&&(_.style.left=`${parseFloat(_.style.left)-s}px`)},openProp:e.open,placement:(0,o.computed)(()=>e.placement.value),slot:()=>u?.querySelector(`slot:not([name])`)??null,slotElements:l.elements(),triggers:(0,o.computed)(()=>[])});function C(){if(p.value||d.value||!e.content.value&&!l.has(`content`).value)return;x(),b();let t=Number(e.delay.value)||0;t>0?v=setTimeout(()=>{v=null,S.open(`hover`),S.updatePosition()},t):(S.open(`hover`),S.updatePosition())}function w(){if(p.value)return;b();let t=Number(e[`close-delay`].value)||0;t>0?(x(),y=setTimeout(()=>{y=null,S.close(`trigger`)},t)):S.close(`trigger`)}return c(()=>{let e=u?.querySelector(`slot:not([name])`),t=[],n=(e,n,r)=>{e.addEventListener(n,r),t.push(()=>e.removeEventListener(n,r))},r=()=>{for(let e of t)e();t=[];let r=e?.assignedElements({flatten:!0})[0];if(!r)return;let i=g.value;i.includes(`hover`)&&(n(r,`pointerenter`,C),n(r,`pointerleave`,w)),i.includes(`focus`)&&(n(r,`focusin`,C),n(r,`focusout`,w)),i.includes(`click`)&&n(r,`click`,()=>S.visible.value?w():C())};e?.addEventListener(`slotchange`,r),r();let i=S.mount();return()=>{e?.removeEventListener(`slotchange`,r);for(let e of t)e();b(),x(),i()}}),a.html`
2
+ <slot></slot>
3
+ <div
4
+ class="tooltip"
5
+ part="tooltip"
6
+ id="${h}"
7
+ role="tooltip"
8
+ popover="manual"
9
+ ref=${e=>{_=e}}
10
+ :data-placement="${m}"
11
+ :aria-hidden="${()=>String(!S.visible.value)}">
12
+ <slot name="content"><span class="tooltip-text">${e.content}</span></slot>
13
+ </div>
14
+ `},styles:[e.forcedColorsMixin,i.default]}),exports.TOOLTIP_TAG=p;
15
+ //# sourceMappingURL=tooltip.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip.cjs","names":[],"sources":["../src/overlay/tooltip/tooltip.ts"],"sourcesContent":["import type { Placement } from '@vielzeug/orbit';\n\nimport { createStableId, define, html, prop } from '@vielzeug/ore';\nimport { computed, signal } from '@vielzeug/ripple';\n\nimport type { ComponentSize } from '../../types';\n\nimport { parseStringTriggers } from '../../headless';\nimport { disablableBundle, sizableBundle } from '../../shared';\nimport { forcedColorsMixin } from '../../styles';\nimport { useFloatingTrigger } from '../shared/use-floating-trigger';\nimport styles from './tooltip.css?inline';\n\ntype TooltipPlacement = 'top' | 'bottom' | 'left' | 'right';\ntype TooltipTrigger = 'click' | 'focus' | 'hover';\n\nconst LEFT_GAP_COMPENSATION = 4;\nconst DEFAULT_TOOLTIP_TRIGGERS: TooltipTrigger[] = ['hover', 'focus'];\nconst VALID_TOOLTIP_TRIGGERS = new Set<TooltipTrigger>(['click', 'focus', 'hover']);\n\nconst parseDelayMs = (value: string | null): number => {\n if (value == null || value.trim() === '') return 0;\n\n const parsed = Number(value);\n\n return Number.isFinite(parsed) && parsed >= 0 ? parsed : 0;\n};\n\nconst parseOptionalBool = (value: string | null): boolean | undefined =>\n value == null ? undefined : value === '' || value === 'true';\n\nconst normalizeTriggers = (value: string | null | undefined): TooltipTrigger[] =>\n parseStringTriggers(value, VALID_TOOLTIP_TRIGGERS, DEFAULT_TOOLTIP_TRIGGERS);\n\n/** Tooltip component properties */\nexport type OreTooltipProps = {\n /** Hide delay in ms */\n 'close-delay'?: number;\n /** Tooltip text content */\n content?: string;\n /** Show delay in ms */\n delay?: number;\n /** Disable the tooltip */\n disabled?: boolean;\n /** Controlled open state */\n open?: boolean;\n /** Preferred placement relative to trigger */\n placement?: TooltipPlacement;\n /** Tooltip size */\n size?: ComponentSize;\n /** Which trigger(s) show/hide the tooltip */\n trigger?: string;\n /** Visual variant */\n variant?: 'dark' | 'light';\n};\n\n/**\n * A lightweight tooltip shown on hover/focus/click relative to the slotted trigger.\n *\n * @element ore-tooltip\n *\n * @attr {string} content - Tooltip text content\n * @attr {string} placement - 'top' | 'bottom' | 'left' | 'right' (default: 'top')\n * @attr {string} trigger - 'hover' | 'focus' | 'click' or comma-separated combination\n * @attr {number} delay - Show delay in milliseconds (default: 0)\n * @attr {string} size - Size: 'sm' | 'md' | 'lg'\n * @attr {string} variant - 'dark' (default) | 'light'\n * @attr {boolean} disabled - Disable the tooltip\n *\n * @slot - Trigger element that the tooltip is anchored to\n * @slot content - Complex tooltip content (overrides the `content` attribute)\n *\n * @cssprop --tooltip-max-width - Max width of the tooltip bubble\n *\n * @part tooltip - Tooltip container.\n * @example\n * ```html\n * <!-- Simple text tooltip -->\n * <ore-tooltip content=\"Copy to clipboard\">\n * <button>Copy</button>\n * </ore-tooltip>\n *\n * <!-- Placement and delay -->\n * <ore-tooltip content=\"Save your work\" placement=\"right\" delay=\"300\">\n * <ore-icon name=\"save\"></ore-icon>\n * </ore-tooltip>\n *\n * <!-- Hover + focus trigger -->\n * <ore-tooltip content=\"Required field\" trigger=\"hover,focus\" placement=\"top\">\n * <ore-input label=\"Email\" type=\"email\"></ore-input>\n * </ore-tooltip>\n *\n * <!-- Rich content slot -->\n * <ore-tooltip>\n * <ore-button>Help</ore-button>\n * <div slot=\"content\">\n * <strong>Keyboard shortcuts</strong>\n * <p>Press Ctrl+S to save.</p>\n * </div>\n * </ore-tooltip>\n * ```\n */\nexport const TOOLTIP_TAG = 'ore-tooltip' as const;\ndefine<OreTooltipProps>(TOOLTIP_TAG, {\n props: {\n ...sizableBundle,\n ...disablableBundle,\n 'close-delay': { default: 0, parse: parseDelayMs },\n content: prop.string(),\n delay: { default: 0, parse: parseDelayMs },\n open: { default: undefined as boolean | undefined, parse: parseOptionalBool },\n placement: prop.oneOf(['top', 'bottom', 'left', 'right'] as const, 'top'),\n trigger: prop.string('hover,focus'),\n variant: prop.string<'dark' | 'light'>(),\n },\n setup(props, { aria, el, onCleanup, onMounted, slots }) {\n const shadowRoot = el.shadowRoot;\n const isDisabled = computed(() => Boolean(props.disabled.value));\n const isControlled = computed(() => props.open.value !== undefined);\n const activePlacement = signal<TooltipPlacement>('top');\n const tooltipId = createStableId('tooltip');\n const triggers = computed<TooltipTrigger[]>(() => normalizeTriggers(props.trigger.value));\n let tooltipEl: HTMLElement | null = null;\n let showTimer: ReturnType<typeof setTimeout> | null = null;\n let hideTimer: ReturnType<typeof setTimeout> | null = null;\n\n const clearShowTimer = (): void => {\n if (!showTimer) return;\n\n clearTimeout(showTimer);\n showTimer = null;\n };\n const clearHideTimer = (): void => {\n if (!hideTimer) return;\n\n clearTimeout(hideTimer);\n hideTimer = null;\n };\n\n const floating = useFloatingTrigger({\n bindTriggerAria: (triggerEl) => aria(triggerEl, { describedby: () => tooltipId }),\n disabled: isDisabled,\n getPanel: () => tooltipEl,\n offset: 8,\n onCleanup,\n onPlacementChange: (p) => {\n const side = p.split('-')[0] as TooltipPlacement;\n\n activePlacement.value = side;\n\n if (side === 'left' && tooltipEl) {\n tooltipEl.style.left = `${parseFloat(tooltipEl.style.left) - LEFT_GAP_COMPENSATION}px`;\n }\n },\n openProp: props.open as typeof props.open & { value: boolean | undefined },\n placement: computed(() => props.placement.value as Placement),\n slot: () => shadowRoot?.querySelector<HTMLSlotElement>('slot:not([name])') ?? null,\n slotElements: slots.elements(),\n triggers: computed(() => [] as TooltipTrigger[]),\n });\n\n function show(): void {\n if (isControlled.value) return;\n\n if (isDisabled.value || (!props.content.value && !slots.has('content').value)) return;\n\n clearHideTimer();\n clearShowTimer();\n\n const delay = Number(props.delay.value) || 0;\n\n if (delay > 0) {\n showTimer = setTimeout(() => {\n showTimer = null;\n floating.open('hover');\n floating.updatePosition();\n }, delay);\n } else {\n floating.open('hover');\n floating.updatePosition();\n }\n }\n\n function hide(): void {\n if (isControlled.value) return;\n\n clearShowTimer();\n\n const closeDelay = Number(props['close-delay'].value) || 0;\n\n if (closeDelay > 0) {\n clearHideTimer();\n hideTimer = setTimeout(() => {\n hideTimer = null;\n floating.close('trigger');\n }, closeDelay);\n } else {\n floating.close('trigger');\n }\n }\n\n onMounted(() => {\n // Manually bind trigger events so we can wrap show/hide with delay timers.\n // useFloatingTrigger handles ARIA, positioning, controlled mode, and keyboard dismiss.\n const triggerSlot = shadowRoot?.querySelector<HTMLSlotElement>('slot:not([name])');\n let eventCleanups: Array<() => void> = [];\n\n const addEvent = (target: EventTarget, event: string, handler: EventListener): void => {\n target.addEventListener(event, handler);\n eventCleanups.push(() => target.removeEventListener(event, handler));\n };\n\n const bindTriggerEvents = (): void => {\n for (const cleanup of eventCleanups) cleanup();\n eventCleanups = [];\n\n const triggerEl = triggerSlot?.assignedElements({ flatten: true })[0] as HTMLElement | undefined;\n\n if (!triggerEl) return;\n\n const t = triggers.value;\n\n if (t.includes('hover')) {\n addEvent(triggerEl, 'pointerenter', show);\n addEvent(triggerEl, 'pointerleave', hide);\n }\n\n if (t.includes('focus')) {\n addEvent(triggerEl, 'focusin', show);\n addEvent(triggerEl, 'focusout', hide);\n }\n\n if (t.includes('click')) {\n addEvent(triggerEl, 'click', () => (floating.visible.value ? hide() : show()));\n }\n };\n\n triggerSlot?.addEventListener('slotchange', bindTriggerEvents);\n bindTriggerEvents();\n\n const destroyFloating = floating.mount();\n\n return () => {\n triggerSlot?.removeEventListener('slotchange', bindTriggerEvents);\n for (const cleanup of eventCleanups) cleanup();\n clearShowTimer();\n clearHideTimer();\n destroyFloating();\n };\n });\n\n return html`\n <slot></slot>\n <div\n class=\"tooltip\"\n part=\"tooltip\"\n id=\"${tooltipId}\"\n role=\"tooltip\"\n popover=\"manual\"\n ref=${(ref: HTMLElement) => {\n tooltipEl = ref;\n }}\n :data-placement=\"${activePlacement}\"\n :aria-hidden=\"${() => String(!floating.visible.value)}\">\n <slot name=\"content\"><span class=\"tooltip-text\">${props.content}</span></slot>\n </div>\n `;\n },\n styles: [forcedColorsMixin, styles],\n});\n"],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ import { forcedColorsMixin as e } from "./styles/mixins/theme.css.js";
2
+ import { disablableBundle as t, sizableBundle as n } from "./shared/prop-bundles.js";
3
+ import { parseStringTriggers as r } from "./headless/parse.js";
4
+ import { useFloatingTrigger as i } from "./overlay/shared/use-floating-trigger.js";
5
+ import a from "./overlay/tooltip/tooltip.css?inline.js";
6
+ import { createStableId as o, define as s, html as c, prop as l } from "@vielzeug/ore";
7
+ import { computed as u, signal as d } from "@vielzeug/ripple";
8
+ //#region src/overlay/tooltip/tooltip.ts
9
+ var f = 4, p = ["hover", "focus"], m = /* @__PURE__ */ new Set([
10
+ "click",
11
+ "focus",
12
+ "hover"
13
+ ]), h = (e) => {
14
+ if (e == null || e.trim() === "") return 0;
15
+ let t = Number(e);
16
+ return Number.isFinite(t) && t >= 0 ? t : 0;
17
+ }, g = (e) => e == null ? void 0 : e === "" || e === "true", _ = (e) => r(e, m, p), v = "ore-tooltip";
18
+ s(v, {
19
+ props: {
20
+ ...n,
21
+ ...t,
22
+ "close-delay": {
23
+ default: 0,
24
+ parse: h
25
+ },
26
+ content: l.string(),
27
+ delay: {
28
+ default: 0,
29
+ parse: h
30
+ },
31
+ open: {
32
+ default: void 0,
33
+ parse: g
34
+ },
35
+ placement: l.oneOf([
36
+ "top",
37
+ "bottom",
38
+ "left",
39
+ "right"
40
+ ], "top"),
41
+ trigger: l.string("hover,focus"),
42
+ variant: l.string()
43
+ },
44
+ setup(e, { aria: t, el: n, onCleanup: r, onMounted: a, slots: s }) {
45
+ let l = n.shadowRoot, p = u(() => !!e.disabled.value), m = u(() => e.open.value !== void 0), h = d("top"), g = o("tooltip"), v = u(() => _(e.trigger.value)), y = null, b = null, x = null, S = () => {
46
+ b &&= (clearTimeout(b), null);
47
+ }, C = () => {
48
+ x &&= (clearTimeout(x), null);
49
+ }, w = i({
50
+ bindTriggerAria: (e) => t(e, { describedby: () => g }),
51
+ disabled: p,
52
+ getPanel: () => y,
53
+ offset: 8,
54
+ onCleanup: r,
55
+ onPlacementChange: (e) => {
56
+ let t = e.split("-")[0];
57
+ h.value = t, t === "left" && y && (y.style.left = `${parseFloat(y.style.left) - f}px`);
58
+ },
59
+ openProp: e.open,
60
+ placement: u(() => e.placement.value),
61
+ slot: () => l?.querySelector("slot:not([name])") ?? null,
62
+ slotElements: s.elements(),
63
+ triggers: u(() => [])
64
+ });
65
+ function T() {
66
+ if (m.value || p.value || !e.content.value && !s.has("content").value) return;
67
+ C(), S();
68
+ let t = Number(e.delay.value) || 0;
69
+ t > 0 ? b = setTimeout(() => {
70
+ b = null, w.open("hover"), w.updatePosition();
71
+ }, t) : (w.open("hover"), w.updatePosition());
72
+ }
73
+ function E() {
74
+ if (m.value) return;
75
+ S();
76
+ let t = Number(e["close-delay"].value) || 0;
77
+ t > 0 ? (C(), x = setTimeout(() => {
78
+ x = null, w.close("trigger");
79
+ }, t)) : w.close("trigger");
80
+ }
81
+ return a(() => {
82
+ let e = l?.querySelector("slot:not([name])"), t = [], n = (e, n, r) => {
83
+ e.addEventListener(n, r), t.push(() => e.removeEventListener(n, r));
84
+ }, r = () => {
85
+ for (let e of t) e();
86
+ t = [];
87
+ let r = e?.assignedElements({ flatten: !0 })[0];
88
+ if (!r) return;
89
+ let i = v.value;
90
+ i.includes("hover") && (n(r, "pointerenter", T), n(r, "pointerleave", E)), i.includes("focus") && (n(r, "focusin", T), n(r, "focusout", E)), i.includes("click") && n(r, "click", () => w.visible.value ? E() : T());
91
+ };
92
+ e?.addEventListener("slotchange", r), r();
93
+ let i = w.mount();
94
+ return () => {
95
+ e?.removeEventListener("slotchange", r);
96
+ for (let e of t) e();
97
+ S(), C(), i();
98
+ };
99
+ }), c`
100
+ <slot></slot>
101
+ <div
102
+ class="tooltip"
103
+ part="tooltip"
104
+ id="${g}"
105
+ role="tooltip"
106
+ popover="manual"
107
+ ref=${(e) => {
108
+ y = e;
109
+ }}
110
+ :data-placement="${h}"
111
+ :aria-hidden="${() => String(!w.visible.value)}">
112
+ <slot name="content"><span class="tooltip-text">${e.content}</span></slot>
113
+ </div>
114
+ `;
115
+ },
116
+ styles: [e, a]
117
+ });
118
+ //#endregion
119
+ export { v as TOOLTIP_TAG };
120
+
121
+ //# sourceMappingURL=tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip.js","names":[],"sources":["../src/overlay/tooltip/tooltip.ts"],"sourcesContent":["import type { Placement } from '@vielzeug/orbit';\n\nimport { createStableId, define, html, prop } from '@vielzeug/ore';\nimport { computed, signal } from '@vielzeug/ripple';\n\nimport type { ComponentSize } from '../../types';\n\nimport { parseStringTriggers } from '../../headless';\nimport { disablableBundle, sizableBundle } from '../../shared';\nimport { forcedColorsMixin } from '../../styles';\nimport { useFloatingTrigger } from '../shared/use-floating-trigger';\nimport styles from './tooltip.css?inline';\n\ntype TooltipPlacement = 'top' | 'bottom' | 'left' | 'right';\ntype TooltipTrigger = 'click' | 'focus' | 'hover';\n\nconst LEFT_GAP_COMPENSATION = 4;\nconst DEFAULT_TOOLTIP_TRIGGERS: TooltipTrigger[] = ['hover', 'focus'];\nconst VALID_TOOLTIP_TRIGGERS = new Set<TooltipTrigger>(['click', 'focus', 'hover']);\n\nconst parseDelayMs = (value: string | null): number => {\n if (value == null || value.trim() === '') return 0;\n\n const parsed = Number(value);\n\n return Number.isFinite(parsed) && parsed >= 0 ? parsed : 0;\n};\n\nconst parseOptionalBool = (value: string | null): boolean | undefined =>\n value == null ? undefined : value === '' || value === 'true';\n\nconst normalizeTriggers = (value: string | null | undefined): TooltipTrigger[] =>\n parseStringTriggers(value, VALID_TOOLTIP_TRIGGERS, DEFAULT_TOOLTIP_TRIGGERS);\n\n/** Tooltip component properties */\nexport type OreTooltipProps = {\n /** Hide delay in ms */\n 'close-delay'?: number;\n /** Tooltip text content */\n content?: string;\n /** Show delay in ms */\n delay?: number;\n /** Disable the tooltip */\n disabled?: boolean;\n /** Controlled open state */\n open?: boolean;\n /** Preferred placement relative to trigger */\n placement?: TooltipPlacement;\n /** Tooltip size */\n size?: ComponentSize;\n /** Which trigger(s) show/hide the tooltip */\n trigger?: string;\n /** Visual variant */\n variant?: 'dark' | 'light';\n};\n\n/**\n * A lightweight tooltip shown on hover/focus/click relative to the slotted trigger.\n *\n * @element ore-tooltip\n *\n * @attr {string} content - Tooltip text content\n * @attr {string} placement - 'top' | 'bottom' | 'left' | 'right' (default: 'top')\n * @attr {string} trigger - 'hover' | 'focus' | 'click' or comma-separated combination\n * @attr {number} delay - Show delay in milliseconds (default: 0)\n * @attr {string} size - Size: 'sm' | 'md' | 'lg'\n * @attr {string} variant - 'dark' (default) | 'light'\n * @attr {boolean} disabled - Disable the tooltip\n *\n * @slot - Trigger element that the tooltip is anchored to\n * @slot content - Complex tooltip content (overrides the `content` attribute)\n *\n * @cssprop --tooltip-max-width - Max width of the tooltip bubble\n *\n * @part tooltip - Tooltip container.\n * @example\n * ```html\n * <!-- Simple text tooltip -->\n * <ore-tooltip content=\"Copy to clipboard\">\n * <button>Copy</button>\n * </ore-tooltip>\n *\n * <!-- Placement and delay -->\n * <ore-tooltip content=\"Save your work\" placement=\"right\" delay=\"300\">\n * <ore-icon name=\"save\"></ore-icon>\n * </ore-tooltip>\n *\n * <!-- Hover + focus trigger -->\n * <ore-tooltip content=\"Required field\" trigger=\"hover,focus\" placement=\"top\">\n * <ore-input label=\"Email\" type=\"email\"></ore-input>\n * </ore-tooltip>\n *\n * <!-- Rich content slot -->\n * <ore-tooltip>\n * <ore-button>Help</ore-button>\n * <div slot=\"content\">\n * <strong>Keyboard shortcuts</strong>\n * <p>Press Ctrl+S to save.</p>\n * </div>\n * </ore-tooltip>\n * ```\n */\nexport const TOOLTIP_TAG = 'ore-tooltip' as const;\ndefine<OreTooltipProps>(TOOLTIP_TAG, {\n props: {\n ...sizableBundle,\n ...disablableBundle,\n 'close-delay': { default: 0, parse: parseDelayMs },\n content: prop.string(),\n delay: { default: 0, parse: parseDelayMs },\n open: { default: undefined as boolean | undefined, parse: parseOptionalBool },\n placement: prop.oneOf(['top', 'bottom', 'left', 'right'] as const, 'top'),\n trigger: prop.string('hover,focus'),\n variant: prop.string<'dark' | 'light'>(),\n },\n setup(props, { aria, el, onCleanup, onMounted, slots }) {\n const shadowRoot = el.shadowRoot;\n const isDisabled = computed(() => Boolean(props.disabled.value));\n const isControlled = computed(() => props.open.value !== undefined);\n const activePlacement = signal<TooltipPlacement>('top');\n const tooltipId = createStableId('tooltip');\n const triggers = computed<TooltipTrigger[]>(() => normalizeTriggers(props.trigger.value));\n let tooltipEl: HTMLElement | null = null;\n let showTimer: ReturnType<typeof setTimeout> | null = null;\n let hideTimer: ReturnType<typeof setTimeout> | null = null;\n\n const clearShowTimer = (): void => {\n if (!showTimer) return;\n\n clearTimeout(showTimer);\n showTimer = null;\n };\n const clearHideTimer = (): void => {\n if (!hideTimer) return;\n\n clearTimeout(hideTimer);\n hideTimer = null;\n };\n\n const floating = useFloatingTrigger({\n bindTriggerAria: (triggerEl) => aria(triggerEl, { describedby: () => tooltipId }),\n disabled: isDisabled,\n getPanel: () => tooltipEl,\n offset: 8,\n onCleanup,\n onPlacementChange: (p) => {\n const side = p.split('-')[0] as TooltipPlacement;\n\n activePlacement.value = side;\n\n if (side === 'left' && tooltipEl) {\n tooltipEl.style.left = `${parseFloat(tooltipEl.style.left) - LEFT_GAP_COMPENSATION}px`;\n }\n },\n openProp: props.open as typeof props.open & { value: boolean | undefined },\n placement: computed(() => props.placement.value as Placement),\n slot: () => shadowRoot?.querySelector<HTMLSlotElement>('slot:not([name])') ?? null,\n slotElements: slots.elements(),\n triggers: computed(() => [] as TooltipTrigger[]),\n });\n\n function show(): void {\n if (isControlled.value) return;\n\n if (isDisabled.value || (!props.content.value && !slots.has('content').value)) return;\n\n clearHideTimer();\n clearShowTimer();\n\n const delay = Number(props.delay.value) || 0;\n\n if (delay > 0) {\n showTimer = setTimeout(() => {\n showTimer = null;\n floating.open('hover');\n floating.updatePosition();\n }, delay);\n } else {\n floating.open('hover');\n floating.updatePosition();\n }\n }\n\n function hide(): void {\n if (isControlled.value) return;\n\n clearShowTimer();\n\n const closeDelay = Number(props['close-delay'].value) || 0;\n\n if (closeDelay > 0) {\n clearHideTimer();\n hideTimer = setTimeout(() => {\n hideTimer = null;\n floating.close('trigger');\n }, closeDelay);\n } else {\n floating.close('trigger');\n }\n }\n\n onMounted(() => {\n // Manually bind trigger events so we can wrap show/hide with delay timers.\n // useFloatingTrigger handles ARIA, positioning, controlled mode, and keyboard dismiss.\n const triggerSlot = shadowRoot?.querySelector<HTMLSlotElement>('slot:not([name])');\n let eventCleanups: Array<() => void> = [];\n\n const addEvent = (target: EventTarget, event: string, handler: EventListener): void => {\n target.addEventListener(event, handler);\n eventCleanups.push(() => target.removeEventListener(event, handler));\n };\n\n const bindTriggerEvents = (): void => {\n for (const cleanup of eventCleanups) cleanup();\n eventCleanups = [];\n\n const triggerEl = triggerSlot?.assignedElements({ flatten: true })[0] as HTMLElement | undefined;\n\n if (!triggerEl) return;\n\n const t = triggers.value;\n\n if (t.includes('hover')) {\n addEvent(triggerEl, 'pointerenter', show);\n addEvent(triggerEl, 'pointerleave', hide);\n }\n\n if (t.includes('focus')) {\n addEvent(triggerEl, 'focusin', show);\n addEvent(triggerEl, 'focusout', hide);\n }\n\n if (t.includes('click')) {\n addEvent(triggerEl, 'click', () => (floating.visible.value ? hide() : show()));\n }\n };\n\n triggerSlot?.addEventListener('slotchange', bindTriggerEvents);\n bindTriggerEvents();\n\n const destroyFloating = floating.mount();\n\n return () => {\n triggerSlot?.removeEventListener('slotchange', bindTriggerEvents);\n for (const cleanup of eventCleanups) cleanup();\n clearShowTimer();\n clearHideTimer();\n destroyFloating();\n };\n });\n\n return html`\n <slot></slot>\n <div\n class=\"tooltip\"\n part=\"tooltip\"\n id=\"${tooltipId}\"\n role=\"tooltip\"\n popover=\"manual\"\n ref=${(ref: HTMLElement) => {\n tooltipEl = ref;\n }}\n :data-placement=\"${activePlacement}\"\n :aria-hidden=\"${() => String(!floating.visible.value)}\">\n <slot name=\"content\"><span class=\"tooltip-text\">${props.content}</span></slot>\n </div>\n `;\n },\n styles: [forcedColorsMixin, styles],\n});\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from '../shared';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAEA,cAAc,WAAW,CAAC"}
@@ -0,0 +1,2 @@
1
+ function e(e){if(!e)return null;let t=e.trim();return/[;{}\n\r]/.test(t)?null:/^-?(\d+(\.\d+)?)(px|em|rem|%|vh|vw|vmin|vmax|dvh|dvw|svh|svw|ch|ex|lh|rlh|cm|mm|in|pt|pc|fr|s|ms|deg|rad|turn)$/.test(t)||/^(0|auto|none|inherit|initial|unset|revert)$/.test(t)||/^(var|calc|env|clamp|min|max)\([^;{}]*\)$/.test(t)?t:null}exports.safeCSSLength=e;
2
+ //# sourceMappingURL=css.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css.cjs","names":[],"sources":["../../src/utils/css.ts"],"sourcesContent":["/**\n * Validates that a string is a safe CSS length value before injecting it\n * into a CSS custom property. Accepts standard length units, percentages,\n * CSS keywords, and `calc()`/`var()` expressions without embedded semicolons,\n * curly braces, or other CSS injection vectors.\n *\n * @returns The trimmed value if safe, `null` otherwise.\n */\nexport function safeCSSLength(value: string | null | undefined): string | null {\n if (!value) return null;\n\n const v = value.trim();\n\n // Block CSS injection sequences (parens excluded — needed by var()/calc())\n if (/[;{}\\n\\r]/.test(v)) return null;\n\n // Allow: numbers with units, %, keywords, var(--token), calc(...), env(...)\n if (\n /^-?(\\d+(\\.\\d+)?)(px|em|rem|%|vh|vw|vmin|vmax|dvh|dvw|svh|svw|ch|ex|lh|rlh|cm|mm|in|pt|pc|fr|s|ms|deg|rad|turn)$/.test(\n v,\n )\n )\n return v;\n\n if (/^(0|auto|none|inherit|initial|unset|revert)$/.test(v)) return v;\n\n // Allow CSS function expressions: var(--token), calc(...), env(...), clamp(...), min(...), max(...)\n // Tightened pattern: must match the whole value and inner parens must close properly.\n if (/^(var|calc|env|clamp|min|max)\\([^;{}]*\\)$/.test(v)) return v;\n\n return null;\n}\n"],"mappings":"AAQA,SAAgB,EAAc,EAAiD,CAC7E,GAAI,CAAC,EAAO,OAAO,KAEnB,IAAM,EAAI,EAAM,KAAK,EAmBrB,MAhBI,YAAY,KAAK,CAAC,EAAU,KAI9B,kHAAkH,KAChH,CACF,GAIE,+CAA+C,KAAK,CAAC,GAIrD,4CAA4C,KAAK,CAAC,EAAU,EAEzD,IACT"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Validates that a string is a safe CSS length value before injecting it
3
+ * into a CSS custom property. Accepts standard length units, percentages,
4
+ * CSS keywords, and `calc()`/`var()` expressions without embedded semicolons,
5
+ * curly braces, or other CSS injection vectors.
6
+ *
7
+ * @returns The trimmed value if safe, `null` otherwise.
8
+ */
9
+ export declare function safeCSSLength(value: string | null | undefined): string | null;
10
+ //# sourceMappingURL=css.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css.d.ts","sourceRoot":"","sources":["../../src/utils/css.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAuB7E"}
@@ -0,0 +1,10 @@
1
+ //#region src/utils/css.ts
2
+ function e(e) {
3
+ if (!e) return null;
4
+ let t = e.trim();
5
+ return /[;{}\n\r]/.test(t) ? null : /^-?(\d+(\.\d+)?)(px|em|rem|%|vh|vw|vmin|vmax|dvh|dvw|svh|svw|ch|ex|lh|rlh|cm|mm|in|pt|pc|fr|s|ms|deg|rad|turn)$/.test(t) || /^(0|auto|none|inherit|initial|unset|revert)$/.test(t) || /^(var|calc|env|clamp|min|max)\([^;{}]*\)$/.test(t) ? t : null;
6
+ }
7
+ //#endregion
8
+ export { e as safeCSSLength };
9
+
10
+ //# sourceMappingURL=css.js.map