@vielzeug/refine 2.0.3 → 2.1.2

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 (521) hide show
  1. package/dist/accordion-item.cjs +1 -1
  2. package/dist/accordion-item.cjs.map +1 -1
  3. package/dist/accordion-item.js +1 -1
  4. package/dist/accordion-item.js.map +1 -1
  5. package/dist/accordion.cjs +1 -1
  6. package/dist/accordion.cjs.map +1 -1
  7. package/dist/accordion.js +1 -1
  8. package/dist/accordion.js.map +1 -1
  9. package/dist/alert.cjs.map +1 -1
  10. package/dist/alert.js.map +1 -1
  11. package/dist/async.cjs.map +1 -1
  12. package/dist/async.js.map +1 -1
  13. package/dist/avatar-group.cjs.map +1 -1
  14. package/dist/avatar-group.js.map +1 -1
  15. package/dist/avatar.cjs +6 -6
  16. package/dist/avatar.cjs.map +1 -1
  17. package/dist/avatar.js +1 -2
  18. package/dist/avatar.js.map +1 -1
  19. package/dist/badge.cjs.map +1 -1
  20. package/dist/badge.js.map +1 -1
  21. package/dist/box.cjs.map +1 -1
  22. package/dist/box.js.map +1 -1
  23. package/dist/breadcrumb.cjs +3 -3
  24. package/dist/breadcrumb.cjs.map +1 -1
  25. package/dist/breadcrumb.js +4 -4
  26. package/dist/breadcrumb.js.map +1 -1
  27. package/dist/button-group.cjs +1 -1
  28. package/dist/button-group.cjs.map +1 -1
  29. package/dist/button-group.js +0 -1
  30. package/dist/button-group.js.map +1 -1
  31. package/dist/button.cjs.map +1 -1
  32. package/dist/button.js.map +1 -1
  33. package/dist/calendar.cjs.map +1 -1
  34. package/dist/calendar.js.map +1 -1
  35. package/dist/card.cjs +7 -7
  36. package/dist/card.cjs.map +1 -1
  37. package/dist/card.js +27 -27
  38. package/dist/card.js.map +1 -1
  39. package/dist/carousel.cjs +20 -20
  40. package/dist/carousel.cjs.map +1 -1
  41. package/dist/carousel.js +7 -8
  42. package/dist/carousel.js.map +1 -1
  43. package/dist/chat-message.cjs +10 -10
  44. package/dist/chat-message.cjs.map +1 -1
  45. package/dist/chat-message.js +1 -2
  46. package/dist/chat-message.js.map +1 -1
  47. package/dist/checkbox-group.cjs +7 -7
  48. package/dist/checkbox-group.cjs.map +1 -1
  49. package/dist/checkbox-group.js +26 -26
  50. package/dist/checkbox-group.js.map +1 -1
  51. package/dist/checkbox.cjs +2 -2
  52. package/dist/checkbox.cjs.map +1 -1
  53. package/dist/checkbox.js +33 -33
  54. package/dist/checkbox.js.map +1 -1
  55. package/dist/chip.cjs +16 -16
  56. package/dist/chip.cjs.map +1 -1
  57. package/dist/chip.js +1 -2
  58. package/dist/chip.js.map +1 -1
  59. package/dist/combobox.cjs +28 -28
  60. package/dist/combobox.cjs.map +1 -1
  61. package/dist/combobox.js +211 -211
  62. package/dist/combobox.js.map +1 -1
  63. package/dist/command-palette.cjs +21 -21
  64. package/dist/command-palette.cjs.map +1 -1
  65. package/dist/command-palette.js +27 -28
  66. package/dist/command-palette.js.map +1 -1
  67. package/dist/content/avatar/avatar.css.cjs +1 -1
  68. package/dist/content/avatar/avatar.css.js +1 -1
  69. package/dist/content/avatar/avatar.d.ts.map +1 -1
  70. package/dist/content/breadcrumb/breadcrumb.d.ts.map +1 -1
  71. package/dist/content/card/card.css.cjs +1 -1
  72. package/dist/content/card/card.css.cjs.map +1 -1
  73. package/dist/content/card/card.css.js +1 -1
  74. package/dist/content/card/card.css.js.map +1 -1
  75. package/dist/content/card/card.d.ts.map +1 -1
  76. package/dist/content/carousel/carousel-slide.cjs.map +1 -1
  77. package/dist/content/carousel/carousel-slide.js.map +1 -1
  78. package/dist/content/carousel/carousel.css.cjs +1 -1
  79. package/dist/content/carousel/carousel.css.cjs.map +1 -1
  80. package/dist/content/carousel/carousel.css.js +1 -1
  81. package/dist/content/carousel/carousel.css.js.map +1 -1
  82. package/dist/content/carousel/carousel.d.ts.map +1 -1
  83. package/dist/content/carousel/index.d.ts +1 -1
  84. package/dist/content/carousel/index.d.ts.map +1 -1
  85. package/dist/content/chat-message/chat-message.css.cjs +1 -1
  86. package/dist/content/chat-message/chat-message.css.js +1 -1
  87. package/dist/content/chat-message/chat-message.d.ts.map +1 -1
  88. package/dist/content/code-window/code-window.css.cjs +1 -1
  89. package/dist/content/code-window/code-window.css.js +1 -1
  90. package/dist/content/copy-command/copy-command.css.cjs +1 -1
  91. package/dist/content/copy-command/copy-command.css.js +1 -1
  92. package/dist/content/copy-command/copy-command.d.ts.map +1 -1
  93. package/dist/content/index.d.ts +22 -22
  94. package/dist/content/index.d.ts.map +1 -1
  95. package/dist/content/list/_list-item-reveal.cjs.map +1 -1
  96. package/dist/content/list/_list-item-reveal.d.ts +1 -1
  97. package/dist/content/list/_list-item-reveal.d.ts.map +1 -1
  98. package/dist/content/list/_list-item-reveal.js.map +1 -1
  99. package/dist/content/list/list-item.css.cjs +1 -1
  100. package/dist/content/list/list-item.css.cjs.map +1 -1
  101. package/dist/content/list/list-item.css.js +1 -1
  102. package/dist/content/list/list-item.css.js.map +1 -1
  103. package/dist/content/list/list.d.ts.map +1 -1
  104. package/dist/content/marquee/marquee.css.cjs +1 -1
  105. package/dist/content/marquee/marquee.css.js +1 -1
  106. package/dist/content/pagination/pagination.css.cjs +1 -1
  107. package/dist/content/pagination/pagination.css.js +1 -1
  108. package/dist/content/pagination/pagination.d.ts.map +1 -1
  109. package/dist/content/separator/separator.css.cjs +1 -1
  110. package/dist/content/separator/separator.css.js +1 -1
  111. package/dist/content/separator/separator.d.ts.map +1 -1
  112. package/dist/content/stepper/step.css.cjs.map +1 -1
  113. package/dist/content/stepper/step.css.js.map +1 -1
  114. package/dist/content/stepper/stepper.d.ts.map +1 -1
  115. package/dist/content/table/table.css.cjs +1 -1
  116. package/dist/content/table/table.css.js +1 -1
  117. package/dist/content/text/text.css.cjs +1 -1
  118. package/dist/content/text/text.css.cjs.map +1 -1
  119. package/dist/content/text/text.css.js +1 -1
  120. package/dist/content/text/text.css.js.map +1 -1
  121. package/dist/content/text/text.d.ts +1 -1
  122. package/dist/content/text/text.d.ts.map +1 -1
  123. package/dist/copy-command.cjs.map +1 -1
  124. package/dist/copy-command.js.map +1 -1
  125. package/dist/core/checkable.cjs +1 -1
  126. package/dist/core/checkable.cjs.map +1 -1
  127. package/dist/core/checkable.d.ts.map +1 -1
  128. package/dist/core/checkable.js +4 -4
  129. package/dist/core/checkable.js.map +1 -1
  130. package/dist/core/choice-field.cjs +1 -1
  131. package/dist/core/choice-field.cjs.map +1 -1
  132. package/dist/core/choice-field.d.ts.map +1 -1
  133. package/dist/core/choice-field.js +1 -2
  134. package/dist/core/choice-field.js.map +1 -1
  135. package/dist/core/date-picker.cjs +1 -1
  136. package/dist/core/date-picker.cjs.map +1 -1
  137. package/dist/core/date-picker.d.ts.map +1 -1
  138. package/dist/core/date-picker.js +3 -3
  139. package/dist/core/date-picker.js.map +1 -1
  140. package/dist/core/index.d.ts +17 -17
  141. package/dist/core/index.d.ts.map +1 -1
  142. package/dist/core/option-list.cjs +1 -1
  143. package/dist/core/option-list.cjs.map +1 -1
  144. package/dist/core/option-list.d.ts.map +1 -1
  145. package/dist/core/option-list.js +4 -4
  146. package/dist/core/option-list.js.map +1 -1
  147. package/dist/core/overlay.cjs.map +1 -1
  148. package/dist/core/overlay.d.ts +2 -2
  149. package/dist/core/overlay.d.ts.map +1 -1
  150. package/dist/core/overlay.js.map +1 -1
  151. package/dist/core/positioner.cjs +1 -1
  152. package/dist/core/positioner.cjs.map +1 -1
  153. package/dist/core/positioner.d.ts +6 -1
  154. package/dist/core/positioner.d.ts.map +1 -1
  155. package/dist/core/positioner.js +11 -11
  156. package/dist/core/positioner.js.map +1 -1
  157. package/dist/core/ref-callback.cjs +1 -1
  158. package/dist/core/ref-callback.cjs.map +1 -1
  159. package/dist/core/ref-callback.d.ts.map +1 -1
  160. package/dist/core/ref-callback.js +1 -1
  161. package/dist/core/ref-callback.js.map +1 -1
  162. package/dist/core/signals.cjs +1 -1
  163. package/dist/core/signals.cjs.map +1 -1
  164. package/dist/core/signals.d.ts.map +1 -1
  165. package/dist/core/signals.js +1 -2
  166. package/dist/core/signals.js.map +1 -1
  167. package/dist/core/slider.cjs.map +1 -1
  168. package/dist/core/slider.d.ts.map +1 -1
  169. package/dist/core/slider.js.map +1 -1
  170. package/dist/core/spinner.cjs.map +1 -1
  171. package/dist/core/spinner.d.ts.map +1 -1
  172. package/dist/core/spinner.js.map +1 -1
  173. package/dist/core/text-field.cjs +1 -1
  174. package/dist/core/text-field.cjs.map +1 -1
  175. package/dist/core/text-field.js +1 -1
  176. package/dist/core/text-field.js.map +1 -1
  177. package/dist/custom-elements.json +4926 -4678
  178. package/dist/datagrid.cjs +114 -114
  179. package/dist/datagrid.cjs.map +1 -1
  180. package/dist/datagrid.js +42 -43
  181. package/dist/datagrid.js.map +1 -1
  182. package/dist/date-picker.cjs.map +1 -1
  183. package/dist/date-picker.js.map +1 -1
  184. package/dist/dialog.cjs.map +1 -1
  185. package/dist/dialog.js.map +1 -1
  186. package/dist/disclosure/accordion/accordion.d.ts.map +1 -1
  187. package/dist/disclosure/accordion-item/accordion-item.css.cjs +1 -1
  188. package/dist/disclosure/accordion-item/accordion-item.css.cjs.map +1 -1
  189. package/dist/disclosure/accordion-item/accordion-item.css.js +1 -1
  190. package/dist/disclosure/accordion-item/accordion-item.css.js.map +1 -1
  191. package/dist/disclosure/index.d.ts +6 -6
  192. package/dist/disclosure/index.d.ts.map +1 -1
  193. package/dist/disclosure/tab-item/tab-item.css.cjs.map +1 -1
  194. package/dist/disclosure/tab-item/tab-item.css.js.map +1 -1
  195. package/dist/disclosure/tab-item/tab-item.d.ts.map +1 -1
  196. package/dist/disclosure/tabs/tabs.css.cjs +1 -1
  197. package/dist/disclosure/tabs/tabs.css.cjs.map +1 -1
  198. package/dist/disclosure/tabs/tabs.css.js +1 -1
  199. package/dist/disclosure/tabs/tabs.css.js.map +1 -1
  200. package/dist/disclosure/tabs/tabs.d.ts.map +1 -1
  201. package/dist/drawer.cjs +5 -5
  202. package/dist/drawer.cjs.map +1 -1
  203. package/dist/drawer.js +26 -26
  204. package/dist/drawer.js.map +1 -1
  205. package/dist/feedback/alert/alert.css.cjs +1 -1
  206. package/dist/feedback/alert/alert.css.js +1 -1
  207. package/dist/feedback/async/async.d.ts +1 -1
  208. package/dist/feedback/async/async.d.ts.map +1 -1
  209. package/dist/feedback/badge/badge.css.cjs +1 -1
  210. package/dist/feedback/badge/badge.css.js +1 -1
  211. package/dist/feedback/badge/badge.d.ts.map +1 -1
  212. package/dist/feedback/chip/chip.css.cjs.map +1 -1
  213. package/dist/feedback/chip/chip.css.js.map +1 -1
  214. package/dist/feedback/chip/chip.d.ts.map +1 -1
  215. package/dist/feedback/index.d.ts +12 -12
  216. package/dist/feedback/index.d.ts.map +1 -1
  217. package/dist/feedback/progress/progress.d.ts.map +1 -1
  218. package/dist/feedback/skeleton/skeleton.d.ts.map +1 -1
  219. package/dist/feedback/toast/index.d.ts +1 -1
  220. package/dist/feedback/toast/index.d.ts.map +1 -1
  221. package/dist/feedback/toast/toast.css.cjs +1 -1
  222. package/dist/feedback/toast/toast.css.cjs.map +1 -1
  223. package/dist/feedback/toast/toast.css.js +1 -1
  224. package/dist/feedback/toast/toast.css.js.map +1 -1
  225. package/dist/feedback/toast/toast.d.ts +1 -1
  226. package/dist/feedback/toast/toast.d.ts.map +1 -1
  227. package/dist/feedback/typing-indicator/typing-indicator.d.ts.map +1 -1
  228. package/dist/file-input.cjs +67 -67
  229. package/dist/file-input.cjs.map +1 -1
  230. package/dist/file-input.js +129 -130
  231. package/dist/file-input.js.map +1 -1
  232. package/dist/frameworks/elements.d.ts +86 -0
  233. package/dist/frameworks/react.d.ts +18 -0
  234. package/dist/frameworks/vue.d.ts +16 -0
  235. package/dist/grid.cjs.map +1 -1
  236. package/dist/grid.js.map +1 -1
  237. package/dist/icon.cjs.map +1 -1
  238. package/dist/icon.js.map +1 -1
  239. package/dist/input.cjs +21 -21
  240. package/dist/input.cjs.map +1 -1
  241. package/dist/input.js +58 -58
  242. package/dist/input.js.map +1 -1
  243. package/dist/inputs/button/button.css.cjs +1 -1
  244. package/dist/inputs/button/button.css.cjs.map +1 -1
  245. package/dist/inputs/button/button.css.js +1 -1
  246. package/dist/inputs/button/button.css.js.map +1 -1
  247. package/dist/inputs/button/button.d.ts.map +1 -1
  248. package/dist/inputs/button-group/button-group.css.cjs.map +1 -1
  249. package/dist/inputs/button-group/button-group.css.js.map +1 -1
  250. package/dist/inputs/button-group/button-group.d.ts +1 -1
  251. package/dist/inputs/button-group/button-group.d.ts.map +1 -1
  252. package/dist/inputs/calendar/calendar.css.cjs +1 -1
  253. package/dist/inputs/calendar/calendar.css.cjs.map +1 -1
  254. package/dist/inputs/calendar/calendar.css.js +1 -1
  255. package/dist/inputs/calendar/calendar.css.js.map +1 -1
  256. package/dist/inputs/calendar/calendar.d.ts.map +1 -1
  257. package/dist/inputs/checkbox/checkbox.css.cjs +1 -1
  258. package/dist/inputs/checkbox/checkbox.css.js +1 -1
  259. package/dist/inputs/checkbox/checkbox.d.ts.map +1 -1
  260. package/dist/inputs/checkbox-group/checkbox-group.d.ts +1 -1
  261. package/dist/inputs/checkbox-group/checkbox-group.d.ts.map +1 -1
  262. package/dist/inputs/combobox/combobox.css.cjs +1 -1
  263. package/dist/inputs/combobox/combobox.css.js +1 -1
  264. package/dist/inputs/combobox/combobox.d.ts.map +1 -1
  265. package/dist/inputs/datagrid/datagrid-column.cjs.map +1 -1
  266. package/dist/inputs/datagrid/datagrid-column.d.ts.map +1 -1
  267. package/dist/inputs/datagrid/datagrid-column.js.map +1 -1
  268. package/dist/inputs/datagrid/datagrid-model.cjs +1 -1
  269. package/dist/inputs/datagrid/datagrid-model.cjs.map +1 -1
  270. package/dist/inputs/datagrid/datagrid-model.d.ts.map +1 -1
  271. package/dist/inputs/datagrid/datagrid-model.js +1 -2
  272. package/dist/inputs/datagrid/datagrid-model.js.map +1 -1
  273. package/dist/inputs/datagrid/datagrid.css.cjs +1 -1
  274. package/dist/inputs/datagrid/datagrid.css.cjs.map +1 -1
  275. package/dist/inputs/datagrid/datagrid.css.js +1 -1
  276. package/dist/inputs/datagrid/datagrid.css.js.map +1 -1
  277. package/dist/inputs/datagrid/datagrid.d.ts +1 -1
  278. package/dist/inputs/datagrid/datagrid.d.ts.map +1 -1
  279. package/dist/inputs/date-picker/date-picker.css.cjs +1 -1
  280. package/dist/inputs/date-picker/date-picker.css.cjs.map +1 -1
  281. package/dist/inputs/date-picker/date-picker.css.js +1 -1
  282. package/dist/inputs/date-picker/date-picker.css.js.map +1 -1
  283. package/dist/inputs/date-picker/date-picker.d.ts.map +1 -1
  284. package/dist/inputs/file-input/file-input-upload.cjs +1 -1
  285. package/dist/inputs/file-input/file-input-upload.cjs.map +1 -1
  286. package/dist/inputs/file-input/file-input-upload.d.ts.map +1 -1
  287. package/dist/inputs/file-input/file-input-upload.js +2 -3
  288. package/dist/inputs/file-input/file-input-upload.js.map +1 -1
  289. package/dist/inputs/file-input/file-input.css.cjs +1 -1
  290. package/dist/inputs/file-input/file-input.css.js +1 -1
  291. package/dist/inputs/file-input/file-input.d.ts.map +1 -1
  292. package/dist/inputs/index.d.ts +28 -28
  293. package/dist/inputs/index.d.ts.map +1 -1
  294. package/dist/inputs/input/input.css.cjs +1 -1
  295. package/dist/inputs/input/input.css.js +1 -1
  296. package/dist/inputs/input/input.d.ts.map +1 -1
  297. package/dist/inputs/message-composer/message-composer.css.cjs +1 -1
  298. package/dist/inputs/message-composer/message-composer.css.js +1 -1
  299. package/dist/inputs/message-composer/message-composer.d.ts +1 -1
  300. package/dist/inputs/message-composer/message-composer.d.ts.map +1 -1
  301. package/dist/inputs/number-input/number-input.d.ts.map +1 -1
  302. package/dist/inputs/otp-input/otp-input.d.ts.map +1 -1
  303. package/dist/inputs/radio/radio.css.cjs +1 -1
  304. package/dist/inputs/radio/radio.css.js +1 -1
  305. package/dist/inputs/radio/radio.d.ts.map +1 -1
  306. package/dist/inputs/radio-group/radio-group.d.ts +2 -2
  307. package/dist/inputs/radio-group/radio-group.d.ts.map +1 -1
  308. package/dist/inputs/rating/rating.d.ts.map +1 -1
  309. package/dist/inputs/select/select.css.cjs +1 -1
  310. package/dist/inputs/select/select.css.js +1 -1
  311. package/dist/inputs/select/select.d.ts.map +1 -1
  312. package/dist/inputs/shared/field-binding.cjs.map +1 -1
  313. package/dist/inputs/shared/field-binding.d.ts.map +1 -1
  314. package/dist/inputs/shared/field-binding.js.map +1 -1
  315. package/dist/inputs/shared/templates.cjs.map +1 -1
  316. package/dist/inputs/shared/templates.d.ts.map +1 -1
  317. package/dist/inputs/shared/templates.js.map +1 -1
  318. package/dist/inputs/slider/slider.d.ts.map +1 -1
  319. package/dist/inputs/switch/switch.css.cjs +1 -1
  320. package/dist/inputs/switch/switch.css.js +1 -1
  321. package/dist/inputs/switch/switch.d.ts.map +1 -1
  322. package/dist/inputs/textarea/textarea.css.cjs +1 -1
  323. package/dist/inputs/textarea/textarea.css.js +1 -1
  324. package/dist/inputs/textarea/textarea.d.ts.map +1 -1
  325. package/dist/inputs/time-picker/time-picker.css.cjs +1 -1
  326. package/dist/inputs/time-picker/time-picker.css.cjs.map +1 -1
  327. package/dist/inputs/time-picker/time-picker.css.js +1 -1
  328. package/dist/inputs/time-picker/time-picker.css.js.map +1 -1
  329. package/dist/inputs/time-picker/time-picker.d.ts.map +1 -1
  330. package/dist/layout/box/box.d.ts.map +1 -1
  331. package/dist/layout/grid/grid.d.ts.map +1 -1
  332. package/dist/layout/index.d.ts +6 -6
  333. package/dist/layout/index.d.ts.map +1 -1
  334. package/dist/layout/navbar/navbar.css.cjs +1 -1
  335. package/dist/layout/navbar/navbar.css.js +1 -1
  336. package/dist/layout/navbar/navbar.d.ts.map +1 -1
  337. package/dist/layout/sidebar/sidebar-group.css.cjs +1 -1
  338. package/dist/layout/sidebar/sidebar-group.css.cjs.map +1 -1
  339. package/dist/layout/sidebar/sidebar-group.css.js +1 -1
  340. package/dist/layout/sidebar/sidebar-group.css.js.map +1 -1
  341. package/dist/layout/sidebar/sidebar.css.cjs +1 -1
  342. package/dist/layout/sidebar/sidebar.css.cjs.map +1 -1
  343. package/dist/layout/sidebar/sidebar.css.js +1 -1
  344. package/dist/layout/sidebar/sidebar.css.js.map +1 -1
  345. package/dist/layout/sidebar/sidebar.d.ts.map +1 -1
  346. package/dist/list-item.cjs.map +1 -1
  347. package/dist/list-item.js.map +1 -1
  348. package/dist/list.cjs +2 -2
  349. package/dist/list.cjs.map +1 -1
  350. package/dist/list.js +15 -16
  351. package/dist/list.js.map +1 -1
  352. package/dist/marquee.cjs +1 -1
  353. package/dist/marquee.cjs.map +1 -1
  354. package/dist/marquee.js +1 -1
  355. package/dist/marquee.js.map +1 -1
  356. package/dist/menu.cjs +5 -5
  357. package/dist/menu.cjs.map +1 -1
  358. package/dist/menu.js +40 -41
  359. package/dist/menu.js.map +1 -1
  360. package/dist/message-composer.cjs +16 -16
  361. package/dist/message-composer.cjs.map +1 -1
  362. package/dist/message-composer.js +61 -61
  363. package/dist/message-composer.js.map +1 -1
  364. package/dist/navbar.cjs +9 -9
  365. package/dist/navbar.cjs.map +1 -1
  366. package/dist/navbar.js +1 -2
  367. package/dist/navbar.js.map +1 -1
  368. package/dist/navigation-menu.cjs +11 -0
  369. package/dist/navigation-menu.cjs.map +1 -0
  370. package/dist/navigation-menu.js +138 -0
  371. package/dist/navigation-menu.js.map +1 -0
  372. package/dist/number-input.cjs +24 -24
  373. package/dist/number-input.cjs.map +1 -1
  374. package/dist/number-input.js +41 -42
  375. package/dist/number-input.js.map +1 -1
  376. package/dist/otp-input.cjs +13 -13
  377. package/dist/otp-input.cjs.map +1 -1
  378. package/dist/otp-input.js +32 -33
  379. package/dist/otp-input.js.map +1 -1
  380. package/dist/overlay/command-palette/command-palette-items.cjs.map +1 -1
  381. package/dist/overlay/command-palette/command-palette-items.d.ts.map +1 -1
  382. package/dist/overlay/command-palette/command-palette-items.js.map +1 -1
  383. package/dist/overlay/command-palette/command-palette.css.cjs +1 -1
  384. package/dist/overlay/command-palette/command-palette.css.cjs.map +1 -1
  385. package/dist/overlay/command-palette/command-palette.css.js +1 -1
  386. package/dist/overlay/command-palette/command-palette.css.js.map +1 -1
  387. package/dist/overlay/command-palette/command-palette.d.ts.map +1 -1
  388. package/dist/overlay/dialog/dialog.css.cjs +1 -1
  389. package/dist/overlay/dialog/dialog.css.js +1 -1
  390. package/dist/overlay/dialog/dialog.d.ts.map +1 -1
  391. package/dist/overlay/drawer/drawer.css.cjs +1 -1
  392. package/dist/overlay/drawer/drawer.css.js +1 -1
  393. package/dist/overlay/drawer/drawer.d.ts +2 -2
  394. package/dist/overlay/drawer/drawer.d.ts.map +1 -1
  395. package/dist/overlay/index.d.ts +7 -5
  396. package/dist/overlay/index.d.ts.map +1 -1
  397. package/dist/overlay/menu/menu.css.cjs +1 -1
  398. package/dist/overlay/menu/menu.css.js +1 -1
  399. package/dist/overlay/menu/menu.d.ts +2 -2
  400. package/dist/overlay/menu/menu.d.ts.map +1 -1
  401. package/dist/overlay/navigation-menu/navigation-menu-item.css.cjs +2 -0
  402. package/dist/overlay/navigation-menu/navigation-menu-item.css.cjs.map +1 -0
  403. package/dist/overlay/navigation-menu/navigation-menu-item.css.js +6 -0
  404. package/dist/overlay/navigation-menu/navigation-menu-item.css.js.map +1 -0
  405. package/dist/overlay/navigation-menu/navigation-menu-panel.css.cjs +2 -0
  406. package/dist/overlay/navigation-menu/navigation-menu-panel.css.cjs.map +1 -0
  407. package/dist/overlay/navigation-menu/navigation-menu-panel.css.js +6 -0
  408. package/dist/overlay/navigation-menu/navigation-menu-panel.css.js.map +1 -0
  409. package/dist/overlay/navigation-menu/navigation-menu.css.cjs +2 -0
  410. package/dist/overlay/navigation-menu/navigation-menu.css.cjs.map +1 -0
  411. package/dist/overlay/navigation-menu/navigation-menu.css.js +6 -0
  412. package/dist/overlay/navigation-menu/navigation-menu.css.js.map +1 -0
  413. package/dist/overlay/navigation-menu/navigation-menu.d.ts +75 -0
  414. package/dist/overlay/navigation-menu/navigation-menu.d.ts.map +1 -0
  415. package/dist/overlay/popover/popover.d.ts +1 -1
  416. package/dist/overlay/popover/popover.d.ts.map +1 -1
  417. package/dist/overlay/shared/use-dialog.cjs +1 -1
  418. package/dist/overlay/shared/use-dialog.cjs.map +1 -1
  419. package/dist/overlay/shared/use-dialog.d.ts.map +1 -1
  420. package/dist/overlay/shared/use-dialog.js +4 -5
  421. package/dist/overlay/shared/use-dialog.js.map +1 -1
  422. package/dist/overlay/shared/use-floating-trigger.cjs +1 -1
  423. package/dist/overlay/shared/use-floating-trigger.cjs.map +1 -1
  424. package/dist/overlay/shared/use-floating-trigger.d.ts.map +1 -1
  425. package/dist/overlay/shared/use-floating-trigger.js +1 -2
  426. package/dist/overlay/shared/use-floating-trigger.js.map +1 -1
  427. package/dist/overlay/tooltip/tooltip.d.ts +1 -1
  428. package/dist/overlay/tooltip/tooltip.d.ts.map +1 -1
  429. package/dist/pagination.cjs.map +1 -1
  430. package/dist/pagination.js.map +1 -1
  431. package/dist/popover.cjs +1 -1
  432. package/dist/popover.cjs.map +1 -1
  433. package/dist/popover.js +0 -1
  434. package/dist/popover.js.map +1 -1
  435. package/dist/progress.cjs.map +1 -1
  436. package/dist/progress.js.map +1 -1
  437. package/dist/radio-group.cjs +5 -5
  438. package/dist/radio-group.cjs.map +1 -1
  439. package/dist/radio-group.js +26 -27
  440. package/dist/radio-group.js.map +1 -1
  441. package/dist/radio.cjs +2 -2
  442. package/dist/radio.cjs.map +1 -1
  443. package/dist/radio.js +41 -41
  444. package/dist/radio.js.map +1 -1
  445. package/dist/rating.cjs +4 -4
  446. package/dist/rating.cjs.map +1 -1
  447. package/dist/rating.js +36 -36
  448. package/dist/rating.js.map +1 -1
  449. package/dist/refine.cjs +692 -683
  450. package/dist/refine.cjs.map +1 -1
  451. package/dist/refine.iife.js +692 -683
  452. package/dist/refine.iife.js.map +1 -1
  453. package/dist/refine.js +743 -734
  454. package/dist/refine.js.map +1 -1
  455. package/dist/select.cjs +42 -42
  456. package/dist/select.cjs.map +1 -1
  457. package/dist/select.js +146 -147
  458. package/dist/select.js.map +1 -1
  459. package/dist/separator.cjs.map +1 -1
  460. package/dist/separator.js.map +1 -1
  461. package/dist/sidebar.cjs +17 -17
  462. package/dist/sidebar.cjs.map +1 -1
  463. package/dist/sidebar.js +7 -8
  464. package/dist/sidebar.js.map +1 -1
  465. package/dist/skeleton.cjs +3 -3
  466. package/dist/skeleton.cjs.map +1 -1
  467. package/dist/skeleton.js +1 -2
  468. package/dist/skeleton.js.map +1 -1
  469. package/dist/slider.cjs +12 -12
  470. package/dist/slider.cjs.map +1 -1
  471. package/dist/slider.js +54 -55
  472. package/dist/slider.js.map +1 -1
  473. package/dist/step.cjs.map +1 -1
  474. package/dist/step.js.map +1 -1
  475. package/dist/stepper.cjs +2 -2
  476. package/dist/stepper.cjs.map +1 -1
  477. package/dist/stepper.js +8 -7
  478. package/dist/stepper.js.map +1 -1
  479. package/dist/styles/index.d.ts +2 -2
  480. package/dist/styles/index.d.ts.map +1 -1
  481. package/dist/styles/preflight.css +1 -1
  482. package/dist/styles/theme.css +15 -30
  483. package/dist/switch.cjs +3 -3
  484. package/dist/switch.cjs.map +1 -1
  485. package/dist/switch.js +28 -28
  486. package/dist/switch.js.map +1 -1
  487. package/dist/tab-item.cjs +2 -2
  488. package/dist/tab-item.cjs.map +1 -1
  489. package/dist/tab-item.js +21 -21
  490. package/dist/tab-item.js.map +1 -1
  491. package/dist/tab-panel.cjs +2 -2
  492. package/dist/tab-panel.cjs.map +1 -1
  493. package/dist/tab-panel.js +9 -9
  494. package/dist/tab-panel.js.map +1 -1
  495. package/dist/table.cjs +1 -1
  496. package/dist/table.cjs.map +1 -1
  497. package/dist/table.js +1 -1
  498. package/dist/table.js.map +1 -1
  499. package/dist/tabs.cjs +6 -6
  500. package/dist/tabs.cjs.map +1 -1
  501. package/dist/tabs.js +14 -15
  502. package/dist/tabs.js.map +1 -1
  503. package/dist/text.cjs.map +1 -1
  504. package/dist/text.js.map +1 -1
  505. package/dist/textarea.cjs +11 -11
  506. package/dist/textarea.cjs.map +1 -1
  507. package/dist/textarea.js +59 -59
  508. package/dist/textarea.js.map +1 -1
  509. package/dist/time-picker.cjs.map +1 -1
  510. package/dist/time-picker.js.map +1 -1
  511. package/dist/toast.cjs +16 -16
  512. package/dist/toast.cjs.map +1 -1
  513. package/dist/toast.js +20 -21
  514. package/dist/toast.js.map +1 -1
  515. package/dist/tooltip.cjs.map +1 -1
  516. package/dist/tooltip.js.map +1 -1
  517. package/dist/typing-indicator.cjs +1 -1
  518. package/dist/typing-indicator.cjs.map +1 -1
  519. package/dist/typing-indicator.js +1 -1
  520. package/dist/typing-indicator.js.map +1 -1
  521. package/package.json +104 -78
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip.cjs","names":[],"sources":["../src/overlay/tooltip/tooltip.ts"],"sourcesContent":["import type { Placement } from '@vielzeug/orbit';\n\nimport {\n createStableId,\n define,\n html,\n prop,\n bind,\n getHost,\n onCleanup,\n onMounted,\n useEmit,\n useSlots,\n} from '@vielzeug/ore';\nimport { computed, signal } from '@vielzeug/ripple';\n\nimport type { ComponentSize } from '../../types';\n\nimport { type OverlayOpenChangeDetail, type OverlayOpenReason, parseStringTriggers } from '../../core';\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 OreTooltipEvents = {\n 'open-change': OverlayOpenChangeDetail;\n};\n\nexport type OreTooltipProps = {\n /** Hide delay in ms */\n 'close-delay'?: number;\n /** Tooltip text content */\n content?: string;\n /** Initial uncontrolled open state. Ignored when `open` is set. */\n 'default-open'?: boolean;\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 {boolean} open - Controlled open state\n * @attr {boolean} default-open - Initial uncontrolled open state\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 * @fires open-change - Fired when the tooltip state changes. detail: { open, reason }\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 'default-open': prop.bool(false),\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) {\n const el = getHost();\n const emit = useEmit<OreTooltipEvents>();\n const slots = useSlots();\n\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) => bind({ aria: { describedby: () => tooltipId } }, { target: triggerEl }),\n defaultOpen: props['default-open'],\n disabled: isDisabled,\n getPanel: () => tooltipEl,\n offset: 8,\n onCleanup,\n onClose: (reason) => emit('open-change', { open: false, reason }),\n onOpen: (reason) => emit('open-change', { open: true, reason }),\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(reason: OverlayOpenReason = 'hover'): 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(reason);\n floating.updatePosition();\n }, delay);\n } else {\n floating.open(reason);\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('hover'));\n addEvent(triggerEl, 'pointerleave', hide);\n }\n\n if (t.includes('focus')) {\n addEvent(triggerEl, 'focusin', () => show('focus'));\n addEvent(triggerEl, 'focusout', hide);\n }\n\n if (t.includes('click')) {\n addEvent(triggerEl, 'click', () => (floating.visible.value ? hide() : show('click')));\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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"}
1
+ {"version":3,"file":"tooltip.cjs","names":[],"sources":["../src/overlay/tooltip/tooltip.ts"],"sourcesContent":["import type { Placement } from '@vielzeug/orbit';\n\nimport {\n bind,\n createStableId,\n define,\n getHost,\n html,\n onCleanup,\n onMounted,\n prop,\n useEmit,\n useSlots,\n} from '@vielzeug/ore';\nimport { computed, signal } from '@vielzeug/ripple';\nimport { type OverlayOpenChangeDetail, type OverlayOpenReason, parseStringTriggers } from '../../core';\nimport { disablableBundle, sizableBundle } from '../../shared';\nimport { forcedColorsMixin } from '../../styles';\nimport type { ComponentSize } from '../../types';\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 OreTooltipEvents = {\n 'open-change': OverlayOpenChangeDetail;\n};\n\nexport type OreTooltipProps = {\n /** Hide delay in ms */\n 'close-delay'?: number;\n /** Tooltip text content */\n content?: string;\n /** Initial uncontrolled open state. Ignored when `open` is set. */\n 'default-open'?: boolean;\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 {boolean} open - Controlled open state\n * @attr {boolean} default-open - Initial uncontrolled open state\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 * @fires open-change - Fired when the tooltip state changes. detail: { open, reason }\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 'default-open': prop.bool(false),\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) {\n const el = getHost();\n const emit = useEmit<OreTooltipEvents>();\n const slots = useSlots();\n\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) => bind({ aria: { describedby: () => tooltipId } }, { target: triggerEl }),\n defaultOpen: props['default-open'],\n disabled: isDisabled,\n getPanel: () => tooltipEl,\n offset: 8,\n onCleanup,\n onClose: (reason) => emit('open-change', { open: false, reason }),\n onOpen: (reason) => emit('open-change', { open: true, reason }),\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(reason: OverlayOpenReason = 'hover'): 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(reason);\n floating.updatePosition();\n }, delay);\n } else {\n floating.open(reason);\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('hover'));\n addEvent(triggerEl, 'pointerleave', hide);\n }\n\n if (t.includes('focus')) {\n addEvent(triggerEl, 'focusin', () => show('focus'));\n addEvent(triggerEl, 'focusout', hide);\n }\n\n if (t.includes('click')) {\n addEvent(triggerEl, 'click', () => (floating.visible.value ? hide() : show('click')));\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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip.js","names":[],"sources":["../src/overlay/tooltip/tooltip.ts"],"sourcesContent":["import type { Placement } from '@vielzeug/orbit';\n\nimport {\n createStableId,\n define,\n html,\n prop,\n bind,\n getHost,\n onCleanup,\n onMounted,\n useEmit,\n useSlots,\n} from '@vielzeug/ore';\nimport { computed, signal } from '@vielzeug/ripple';\n\nimport type { ComponentSize } from '../../types';\n\nimport { type OverlayOpenChangeDetail, type OverlayOpenReason, parseStringTriggers } from '../../core';\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 OreTooltipEvents = {\n 'open-change': OverlayOpenChangeDetail;\n};\n\nexport type OreTooltipProps = {\n /** Hide delay in ms */\n 'close-delay'?: number;\n /** Tooltip text content */\n content?: string;\n /** Initial uncontrolled open state. Ignored when `open` is set. */\n 'default-open'?: boolean;\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 {boolean} open - Controlled open state\n * @attr {boolean} default-open - Initial uncontrolled open state\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 * @fires open-change - Fired when the tooltip state changes. detail: { open, reason }\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 'default-open': prop.bool(false),\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) {\n const el = getHost();\n const emit = useEmit<OreTooltipEvents>();\n const slots = useSlots();\n\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) => bind({ aria: { describedby: () => tooltipId } }, { target: triggerEl }),\n defaultOpen: props['default-open'],\n disabled: isDisabled,\n getPanel: () => tooltipEl,\n offset: 8,\n onCleanup,\n onClose: (reason) => emit('open-change', { open: false, reason }),\n onOpen: (reason) => emit('open-change', { open: true, reason }),\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(reason: OverlayOpenReason = 'hover'): 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(reason);\n floating.updatePosition();\n }, delay);\n } else {\n floating.open(reason);\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('hover'));\n addEvent(triggerEl, 'pointerleave', hide);\n }\n\n if (t.includes('focus')) {\n addEvent(triggerEl, 'focusin', () => show('focus'));\n addEvent(triggerEl, 'focusout', hide);\n }\n\n if (t.includes('click')) {\n addEvent(triggerEl, 'click', () => (floating.visible.value ? hide() : show('click')));\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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"}
1
+ {"version":3,"file":"tooltip.js","names":[],"sources":["../src/overlay/tooltip/tooltip.ts"],"sourcesContent":["import type { Placement } from '@vielzeug/orbit';\n\nimport {\n bind,\n createStableId,\n define,\n getHost,\n html,\n onCleanup,\n onMounted,\n prop,\n useEmit,\n useSlots,\n} from '@vielzeug/ore';\nimport { computed, signal } from '@vielzeug/ripple';\nimport { type OverlayOpenChangeDetail, type OverlayOpenReason, parseStringTriggers } from '../../core';\nimport { disablableBundle, sizableBundle } from '../../shared';\nimport { forcedColorsMixin } from '../../styles';\nimport type { ComponentSize } from '../../types';\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 OreTooltipEvents = {\n 'open-change': OverlayOpenChangeDetail;\n};\n\nexport type OreTooltipProps = {\n /** Hide delay in ms */\n 'close-delay'?: number;\n /** Tooltip text content */\n content?: string;\n /** Initial uncontrolled open state. Ignored when `open` is set. */\n 'default-open'?: boolean;\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 {boolean} open - Controlled open state\n * @attr {boolean} default-open - Initial uncontrolled open state\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 * @fires open-change - Fired when the tooltip state changes. detail: { open, reason }\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 'default-open': prop.bool(false),\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) {\n const el = getHost();\n const emit = useEmit<OreTooltipEvents>();\n const slots = useSlots();\n\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) => bind({ aria: { describedby: () => tooltipId } }, { target: triggerEl }),\n defaultOpen: props['default-open'],\n disabled: isDisabled,\n getPanel: () => tooltipEl,\n offset: 8,\n onCleanup,\n onClose: (reason) => emit('open-change', { open: false, reason }),\n onOpen: (reason) => emit('open-change', { open: true, reason }),\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(reason: OverlayOpenReason = 'hover'): 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(reason);\n floating.updatePosition();\n }, delay);\n } else {\n floating.open(reason);\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('hover'));\n addEvent(triggerEl, 'pointerleave', hide);\n }\n\n if (t.includes('focus')) {\n addEvent(triggerEl, 'focusin', () => show('focus'));\n addEvent(triggerEl, 'focusout', hide);\n }\n\n if (t.includes('click')) {\n addEvent(triggerEl, 'click', () => (floating.visible.value ? hide() : show('click')));\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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"}
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./styles/mixins/accessibility.css.cjs"),t=require("./styles/mixins/shape.css.cjs"),n=require("./styles/mixins/theme.css.cjs"),r=require("./core/announcer.cjs"),i=require("./shared/prop-bundles.cjs"),a=require("./feedback/typing-indicator/typing-indicator.css.cjs");let o=require("@vielzeug/ore"),s=require("@vielzeug/ripple/watch");var c=`ore-typing-indicator`;(0,o.define)(c,{props:{...i.themableBundle,...i.sizableBundle,label:o.prop.string(`Typing…`)},setup(e){return(0,s.watch)(()=>e.label.value,e=>r.announce(e??``),{immediate:!0}),o.html`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./styles/mixins/accessibility.css.cjs"),t=require("./styles/mixins/shape.css.cjs"),n=require("./styles/mixins/theme.css.cjs"),r=require("./core/announcer.cjs"),i=require("./shared/prop-bundles.cjs"),a=require("./feedback/typing-indicator/typing-indicator.css.cjs");let o=require("@vielzeug/ore"),s=require("@vielzeug/ripple");var c=`ore-typing-indicator`;(0,o.define)(c,{props:{...i.themableBundle,...i.sizableBundle,label:o.prop.string(`Typing…`)},setup(e){return(0,s.watch)(()=>e.label.value,e=>r.announce(e??``),{immediate:!0}),o.html`
2
2
  <span class="dots" part="dots" aria-hidden="true">
3
3
  <span class="dot" part="dot"></span>
4
4
  <span class="dot" part="dot"></span>
@@ -1 +1 @@
1
- {"version":3,"file":"typing-indicator.cjs","names":[],"sources":["../src/feedback/typing-indicator/typing-indicator.ts"],"sourcesContent":["import { define, html, prop } from '@vielzeug/ore';\nimport { watch } from '@vielzeug/ripple/watch';\n\nimport type { ComponentSize, ThemeColor } from '../../types';\n\nimport { announce } from '../../core';\nimport { sizableBundle, themableBundle } from '../../shared';\nimport { colorThemeMixin, reducedMotionMixin, sizeVariantMixin } from '../../styles';\nimport componentStyles from './typing-indicator.css?inline';\n\n/** Typing indicator component properties */\nexport type OreTypingIndicatorProps = {\n /** Theme color for the dots */\n color?: ThemeColor;\n /** Accessible label announced once via a polite live region (default: `\"Typing…\"`) */\n label?: string;\n /** Dot size preset */\n size?: ComponentSize;\n};\n\n/**\n * Three bouncing dots signaling that the other side of a conversation is composing a reply —\n * the moment before any content exists. For a message whose content is already streaming in,\n * use `ore-chat-message`'s `streaming` attribute (a blinking cursor) instead.\n *\n * The dots are decorative (`aria-hidden`) — `label` is the entire accessibility contract,\n * announced through the shared singleton live region (`core/announcer.ts`) rather than a\n * static `aria-live` element in the template. A live region populated in the same paint as\n * its own insertion is unreliable across browsers/screen readers; routing through the shared\n * announcer (pre-existing region, clear-then-set) is the same pattern already used for other\n * transient status messages across this package.\n *\n * @element ore-typing-indicator\n *\n * @attr {string} label - Accessible label announced once via a polite live region (default: \"Typing…\")\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} size - 'sm' | 'md' | 'lg'\n *\n * @cssprop --typing-indicator-color - Dot color\n * @cssprop --typing-indicator-size - Dot diameter\n * @cssprop --typing-indicator-gap - Gap between dots\n *\n * @part dots - Dots container.\n * @part dot - Individual dot element.\n * @example\n * ```html\n * <ore-typing-indicator></ore-typing-indicator>\n * <ore-typing-indicator label=\"Assistant is typing…\" color=\"primary\"></ore-typing-indicator>\n * ```\n */\nexport const TYPING_INDICATOR_TAG = 'ore-typing-indicator' as const;\ndefine<OreTypingIndicatorProps>(TYPING_INDICATOR_TAG, {\n props: {\n ...themableBundle,\n ...sizableBundle,\n label: prop.string('Typing…'),\n },\n setup(props) {\n watch(\n () => props.label.value,\n (label) => announce(label ?? ''),\n { immediate: true },\n );\n\n return html`\n <span class=\"dots\" part=\"dots\" aria-hidden=\"true\">\n <span class=\"dot\" part=\"dot\"></span>\n <span class=\"dot\" part=\"dot\"></span>\n <span class=\"dot\" part=\"dot\"></span>\n </span>\n `;\n },\n styles: [\n colorThemeMixin,\n reducedMotionMixin,\n sizeVariantMixin({\n lg: {\n gap: 'var(--typing-indicator-gap, var(--size-1-5))',\n size: 'var(--typing-indicator-size, var(--size-2-5))',\n },\n md: { gap: 'var(--typing-indicator-gap, var(--size-1))', size: 'var(--typing-indicator-size, var(--size-2))' },\n sm: {\n gap: 'var(--typing-indicator-gap, var(--size-1))',\n size: 'var(--typing-indicator-size, var(--size-1-5))',\n },\n }),\n componentStyles,\n ],\n});\n"],"mappings":"gaAkDA,IAAa,EAAuB,wBACpC,EAAA,EAAA,OAAA,CAAgC,EAAsB,CACpD,MAAO,CACL,GAAG,EAAA,eACH,GAAG,EAAA,cACH,MAAO,EAAA,KAAK,OAAO,SAAS,CAC9B,EACA,MAAM,EAAO,CAOX,OANA,EAAA,EAAA,MAAA,KACQ,EAAM,MAAM,MACjB,GAAU,EAAA,SAAS,GAAS,EAAE,EAC/B,CAAE,UAAW,EAAK,CACpB,EAEO,EAAA,IAAI;;;;;;KAOb,EACA,OAAQ,CACN,EAAA,gBACA,EAAA,mBACA,EAAA,iBAAiB,CACf,GAAI,CACF,IAAK,+CACL,KAAM,+CACR,EACA,GAAI,CAAE,IAAK,6CAA8C,KAAM,6CAA8C,EAC7G,GAAI,CACF,IAAK,6CACL,KAAM,+CACR,CACF,CAAC,EACD,EAAA,OACF,CACF,CAAC"}
1
+ {"version":3,"file":"typing-indicator.cjs","names":[],"sources":["../src/feedback/typing-indicator/typing-indicator.ts"],"sourcesContent":["import { define, html, prop } from '@vielzeug/ore';\nimport { watch } from '@vielzeug/ripple';\nimport { announce } from '../../core';\nimport { sizableBundle, themableBundle } from '../../shared';\nimport { colorThemeMixin, reducedMotionMixin, sizeVariantMixin } from '../../styles';\nimport type { ComponentSize, ThemeColor } from '../../types';\nimport componentStyles from './typing-indicator.css?inline';\n\n/** Typing indicator component properties */\nexport type OreTypingIndicatorProps = {\n /** Theme color for the dots */\n color?: ThemeColor;\n /** Accessible label announced once via a polite live region (default: `\"Typing…\"`) */\n label?: string;\n /** Dot size preset */\n size?: ComponentSize;\n};\n\n/**\n * Three bouncing dots signaling that the other side of a conversation is composing a reply —\n * the moment before any content exists. For a message whose content is already streaming in,\n * use `ore-chat-message`'s `streaming` attribute (a blinking cursor) instead.\n *\n * The dots are decorative (`aria-hidden`) — `label` is the entire accessibility contract,\n * announced through the shared singleton live region (`core/announcer.ts`) rather than a\n * static `aria-live` element in the template. A live region populated in the same paint as\n * its own insertion is unreliable across browsers/screen readers; routing through the shared\n * announcer (pre-existing region, clear-then-set) is the same pattern already used for other\n * transient status messages across this package.\n *\n * @element ore-typing-indicator\n *\n * @attr {string} label - Accessible label announced once via a polite live region (default: \"Typing…\")\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} size - 'sm' | 'md' | 'lg'\n *\n * @cssprop --typing-indicator-color - Dot color\n * @cssprop --typing-indicator-size - Dot diameter\n * @cssprop --typing-indicator-gap - Gap between dots\n *\n * @part dots - Dots container.\n * @part dot - Individual dot element.\n * @example\n * ```html\n * <ore-typing-indicator></ore-typing-indicator>\n * <ore-typing-indicator label=\"Assistant is typing…\" color=\"primary\"></ore-typing-indicator>\n * ```\n */\nexport const TYPING_INDICATOR_TAG = 'ore-typing-indicator' as const;\ndefine<OreTypingIndicatorProps>(TYPING_INDICATOR_TAG, {\n props: {\n ...themableBundle,\n ...sizableBundle,\n label: prop.string('Typing…'),\n },\n setup(props) {\n watch(\n () => props.label.value,\n (label) => announce(label ?? ''),\n { immediate: true },\n );\n\n return html`\n <span class=\"dots\" part=\"dots\" aria-hidden=\"true\">\n <span class=\"dot\" part=\"dot\"></span>\n <span class=\"dot\" part=\"dot\"></span>\n <span class=\"dot\" part=\"dot\"></span>\n </span>\n `;\n },\n styles: [\n colorThemeMixin,\n reducedMotionMixin,\n sizeVariantMixin({\n lg: {\n gap: 'var(--typing-indicator-gap, var(--size-1-5))',\n size: 'var(--typing-indicator-size, var(--size-2-5))',\n },\n md: { gap: 'var(--typing-indicator-gap, var(--size-1))', size: 'var(--typing-indicator-size, var(--size-2))' },\n sm: {\n gap: 'var(--typing-indicator-gap, var(--size-1))',\n size: 'var(--typing-indicator-size, var(--size-1-5))',\n },\n }),\n componentStyles,\n ],\n});\n"],"mappings":"0ZAgDA,IAAa,EAAuB,wBACpC,EAAA,EAAA,OAAA,CAAgC,EAAsB,CACpD,MAAO,CACL,GAAG,EAAA,eACH,GAAG,EAAA,cACH,MAAO,EAAA,KAAK,OAAO,SAAS,CAC9B,EACA,MAAM,EAAO,CAOX,OANA,EAAA,EAAA,MAAA,KACQ,EAAM,MAAM,MACjB,GAAU,EAAA,SAAS,GAAS,EAAE,EAC/B,CAAE,UAAW,EAAK,CACpB,EAEO,EAAA,IAAI;;;;;;KAOb,EACA,OAAQ,CACN,EAAA,gBACA,EAAA,mBACA,EAAA,iBAAiB,CACf,GAAI,CACF,IAAK,+CACL,KAAM,+CACR,EACA,GAAI,CAAE,IAAK,6CAA8C,KAAM,6CAA8C,EAC7G,GAAI,CACF,IAAK,6CACL,KAAM,+CACR,CACF,CAAC,EACD,EAAA,OACF,CACF,CAAC"}
@@ -5,7 +5,7 @@ import { announce as r } from "./core/announcer.js";
5
5
  import { sizableBundle as i, themableBundle as a } from "./shared/prop-bundles.js";
6
6
  import o from "./feedback/typing-indicator/typing-indicator.css.js";
7
7
  import { define as s, html as c, prop as l } from "@vielzeug/ore";
8
- import { watch as u } from "@vielzeug/ripple/watch";
8
+ import { watch as u } from "@vielzeug/ripple";
9
9
  //#region src/feedback/typing-indicator/typing-indicator.ts
10
10
  var d = "ore-typing-indicator";
11
11
  s(d, {
@@ -1 +1 @@
1
- {"version":3,"file":"typing-indicator.js","names":[],"sources":["../src/feedback/typing-indicator/typing-indicator.ts"],"sourcesContent":["import { define, html, prop } from '@vielzeug/ore';\nimport { watch } from '@vielzeug/ripple/watch';\n\nimport type { ComponentSize, ThemeColor } from '../../types';\n\nimport { announce } from '../../core';\nimport { sizableBundle, themableBundle } from '../../shared';\nimport { colorThemeMixin, reducedMotionMixin, sizeVariantMixin } from '../../styles';\nimport componentStyles from './typing-indicator.css?inline';\n\n/** Typing indicator component properties */\nexport type OreTypingIndicatorProps = {\n /** Theme color for the dots */\n color?: ThemeColor;\n /** Accessible label announced once via a polite live region (default: `\"Typing…\"`) */\n label?: string;\n /** Dot size preset */\n size?: ComponentSize;\n};\n\n/**\n * Three bouncing dots signaling that the other side of a conversation is composing a reply —\n * the moment before any content exists. For a message whose content is already streaming in,\n * use `ore-chat-message`'s `streaming` attribute (a blinking cursor) instead.\n *\n * The dots are decorative (`aria-hidden`) — `label` is the entire accessibility contract,\n * announced through the shared singleton live region (`core/announcer.ts`) rather than a\n * static `aria-live` element in the template. A live region populated in the same paint as\n * its own insertion is unreliable across browsers/screen readers; routing through the shared\n * announcer (pre-existing region, clear-then-set) is the same pattern already used for other\n * transient status messages across this package.\n *\n * @element ore-typing-indicator\n *\n * @attr {string} label - Accessible label announced once via a polite live region (default: \"Typing…\")\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} size - 'sm' | 'md' | 'lg'\n *\n * @cssprop --typing-indicator-color - Dot color\n * @cssprop --typing-indicator-size - Dot diameter\n * @cssprop --typing-indicator-gap - Gap between dots\n *\n * @part dots - Dots container.\n * @part dot - Individual dot element.\n * @example\n * ```html\n * <ore-typing-indicator></ore-typing-indicator>\n * <ore-typing-indicator label=\"Assistant is typing…\" color=\"primary\"></ore-typing-indicator>\n * ```\n */\nexport const TYPING_INDICATOR_TAG = 'ore-typing-indicator' as const;\ndefine<OreTypingIndicatorProps>(TYPING_INDICATOR_TAG, {\n props: {\n ...themableBundle,\n ...sizableBundle,\n label: prop.string('Typing…'),\n },\n setup(props) {\n watch(\n () => props.label.value,\n (label) => announce(label ?? ''),\n { immediate: true },\n );\n\n return html`\n <span class=\"dots\" part=\"dots\" aria-hidden=\"true\">\n <span class=\"dot\" part=\"dot\"></span>\n <span class=\"dot\" part=\"dot\"></span>\n <span class=\"dot\" part=\"dot\"></span>\n </span>\n `;\n },\n styles: [\n colorThemeMixin,\n reducedMotionMixin,\n sizeVariantMixin({\n lg: {\n gap: 'var(--typing-indicator-gap, var(--size-1-5))',\n size: 'var(--typing-indicator-size, var(--size-2-5))',\n },\n md: { gap: 'var(--typing-indicator-gap, var(--size-1))', size: 'var(--typing-indicator-size, var(--size-2))' },\n sm: {\n gap: 'var(--typing-indicator-gap, var(--size-1))',\n size: 'var(--typing-indicator-size, var(--size-1-5))',\n },\n }),\n componentStyles,\n ],\n});\n"],"mappings":";;;;;;;;;AAkDA,IAAa,IAAuB;AACpC,EAAgC,GAAsB;CACpD,OAAO;EACL,GAAG;EACH,GAAG;EACH,OAAO,EAAK,OAAO,SAAS;CAC9B;CACA,MAAM,GAAO;EAOX,OANA,QACQ,EAAM,MAAM,QACjB,MAAU,EAAS,KAAS,EAAE,GAC/B,EAAE,WAAW,GAAK,CACpB,GAEO,CAAI;;;;;;;CAOb;CACA,QAAQ;EACN;EACA;EACA,EAAiB;GACf,IAAI;IACF,KAAK;IACL,MAAM;GACR;GACA,IAAI;IAAE,KAAK;IAA8C,MAAM;GAA8C;GAC7G,IAAI;IACF,KAAK;IACL,MAAM;GACR;EACF,CAAC;EACD;CACF;AACF,CAAC"}
1
+ {"version":3,"file":"typing-indicator.js","names":[],"sources":["../src/feedback/typing-indicator/typing-indicator.ts"],"sourcesContent":["import { define, html, prop } from '@vielzeug/ore';\nimport { watch } from '@vielzeug/ripple';\nimport { announce } from '../../core';\nimport { sizableBundle, themableBundle } from '../../shared';\nimport { colorThemeMixin, reducedMotionMixin, sizeVariantMixin } from '../../styles';\nimport type { ComponentSize, ThemeColor } from '../../types';\nimport componentStyles from './typing-indicator.css?inline';\n\n/** Typing indicator component properties */\nexport type OreTypingIndicatorProps = {\n /** Theme color for the dots */\n color?: ThemeColor;\n /** Accessible label announced once via a polite live region (default: `\"Typing…\"`) */\n label?: string;\n /** Dot size preset */\n size?: ComponentSize;\n};\n\n/**\n * Three bouncing dots signaling that the other side of a conversation is composing a reply —\n * the moment before any content exists. For a message whose content is already streaming in,\n * use `ore-chat-message`'s `streaming` attribute (a blinking cursor) instead.\n *\n * The dots are decorative (`aria-hidden`) — `label` is the entire accessibility contract,\n * announced through the shared singleton live region (`core/announcer.ts`) rather than a\n * static `aria-live` element in the template. A live region populated in the same paint as\n * its own insertion is unreliable across browsers/screen readers; routing through the shared\n * announcer (pre-existing region, clear-then-set) is the same pattern already used for other\n * transient status messages across this package.\n *\n * @element ore-typing-indicator\n *\n * @attr {string} label - Accessible label announced once via a polite live region (default: \"Typing…\")\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} size - 'sm' | 'md' | 'lg'\n *\n * @cssprop --typing-indicator-color - Dot color\n * @cssprop --typing-indicator-size - Dot diameter\n * @cssprop --typing-indicator-gap - Gap between dots\n *\n * @part dots - Dots container.\n * @part dot - Individual dot element.\n * @example\n * ```html\n * <ore-typing-indicator></ore-typing-indicator>\n * <ore-typing-indicator label=\"Assistant is typing…\" color=\"primary\"></ore-typing-indicator>\n * ```\n */\nexport const TYPING_INDICATOR_TAG = 'ore-typing-indicator' as const;\ndefine<OreTypingIndicatorProps>(TYPING_INDICATOR_TAG, {\n props: {\n ...themableBundle,\n ...sizableBundle,\n label: prop.string('Typing…'),\n },\n setup(props) {\n watch(\n () => props.label.value,\n (label) => announce(label ?? ''),\n { immediate: true },\n );\n\n return html`\n <span class=\"dots\" part=\"dots\" aria-hidden=\"true\">\n <span class=\"dot\" part=\"dot\"></span>\n <span class=\"dot\" part=\"dot\"></span>\n <span class=\"dot\" part=\"dot\"></span>\n </span>\n `;\n },\n styles: [\n colorThemeMixin,\n reducedMotionMixin,\n sizeVariantMixin({\n lg: {\n gap: 'var(--typing-indicator-gap, var(--size-1-5))',\n size: 'var(--typing-indicator-size, var(--size-2-5))',\n },\n md: { gap: 'var(--typing-indicator-gap, var(--size-1))', size: 'var(--typing-indicator-size, var(--size-2))' },\n sm: {\n gap: 'var(--typing-indicator-gap, var(--size-1))',\n size: 'var(--typing-indicator-size, var(--size-1-5))',\n },\n }),\n componentStyles,\n ],\n});\n"],"mappings":";;;;;;;;;AAgDA,IAAa,IAAuB;AACpC,EAAgC,GAAsB;CACpD,OAAO;EACL,GAAG;EACH,GAAG;EACH,OAAO,EAAK,OAAO,SAAS;CAC9B;CACA,MAAM,GAAO;EAOX,OANA,QACQ,EAAM,MAAM,QACjB,MAAU,EAAS,KAAS,EAAE,GAC/B,EAAE,WAAW,GAAK,CACpB,GAEO,CAAI;;;;;;;CAOb;CACA,QAAQ;EACN;EACA;EACA,EAAiB;GACf,IAAI;IACF,KAAK;IACL,MAAM;GACR;GACA,IAAI;IAAE,KAAK;IAA8C,MAAM;GAA8C;GAC7G,IAAI;IACF,KAAK;IACL,MAAM;GACR;EACF,CAAC;EACD;CACF;AACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vielzeug/refine",
3
- "version": "2.0.3",
3
+ "version": "2.1.2",
4
4
  "description": "Accessible, themeable web components built on Ore custom element primitives",
5
5
  "keywords": [
6
6
  "web-components",
@@ -15,47 +15,26 @@
15
15
  ],
16
16
  "homepage": "https://vielzeug.dev/refine/",
17
17
  "repository": {
18
+ "directory": "packages/refine",
18
19
  "type": "git",
19
- "url": "https://github.com/helmuthdu/vielzeug",
20
- "directory": "packages/refine"
20
+ "url": "https://github.com/helmuthdu/vielzeug"
21
21
  },
22
22
  "bugs": {
23
23
  "url": "https://github.com/helmuthdu/vielzeug/issues"
24
24
  },
25
+ "type": "module",
25
26
  "engines": {
26
27
  "node": ">=22"
27
28
  },
28
- "type": "module",
29
- "customElements": "dist/custom-elements.json",
30
29
  "files": [
31
30
  "dist"
32
31
  ],
33
32
  "types": "./dist/index.d.ts",
34
33
  "exports": {
35
34
  ".": {
36
- "types": "./dist/index.d.ts",
37
35
  "import": "./dist/index.js",
38
- "require": "./dist/index.cjs"
39
- },
40
- "./styles/animation.css": {
41
- "import": "./dist/styles/animation.css",
42
- "default": "./dist/styles/animation.css"
43
- },
44
- "./styles/layers.css": {
45
- "import": "./dist/styles/layer.css",
46
- "default": "./dist/styles/layer.css"
47
- },
48
- "./styles/preflight.css": {
49
- "import": "./dist/styles/preflight.css",
50
- "default": "./dist/styles/preflight.css"
51
- },
52
- "./styles/theme.css": {
53
- "import": "./dist/styles/theme.css",
54
- "default": "./dist/styles/theme.css"
55
- },
56
- "./tokens.css": {
57
- "import": "./dist/styles/tokens.css",
58
- "default": "./dist/styles/tokens.css"
36
+ "require": "./dist/index.cjs",
37
+ "types": "./dist/index.d.ts"
59
38
  },
60
39
  "./accordion": {
61
40
  "import": "./dist/accordion.js",
@@ -192,6 +171,15 @@
192
171
  "require": "./dist/file-input.cjs",
193
172
  "types": "./dist/inputs/file-input/file-input.d.ts"
194
173
  },
174
+ "./frameworks/elements": {
175
+ "types": "./dist/frameworks/elements.d.ts"
176
+ },
177
+ "./frameworks/react": {
178
+ "types": "./dist/frameworks/react.d.ts"
179
+ },
180
+ "./frameworks/vue": {
181
+ "types": "./dist/frameworks/vue.d.ts"
182
+ },
195
183
  "./grid": {
196
184
  "import": "./dist/grid.js",
197
185
  "require": "./dist/grid.cjs",
@@ -242,6 +230,11 @@
242
230
  "require": "./dist/navbar.cjs",
243
231
  "types": "./dist/layout/navbar/navbar.d.ts"
244
232
  },
233
+ "./navigation-menu": {
234
+ "import": "./dist/navigation-menu.js",
235
+ "require": "./dist/navigation-menu.cjs",
236
+ "types": "./dist/overlay/navigation-menu/navigation-menu.d.ts"
237
+ },
245
238
  "./number-input": {
246
239
  "import": "./dist/number-input.js",
247
240
  "require": "./dist/number-input.cjs",
@@ -322,6 +315,22 @@
322
315
  "require": "./dist/stepper.cjs",
323
316
  "types": "./dist/content/stepper/stepper.d.ts"
324
317
  },
318
+ "./styles/animation.css": {
319
+ "default": "./dist/styles/animation.css",
320
+ "import": "./dist/styles/animation.css"
321
+ },
322
+ "./styles/layers.css": {
323
+ "default": "./dist/styles/layer.css",
324
+ "import": "./dist/styles/layer.css"
325
+ },
326
+ "./styles/preflight.css": {
327
+ "default": "./dist/styles/preflight.css",
328
+ "import": "./dist/styles/preflight.css"
329
+ },
330
+ "./styles/theme.css": {
331
+ "default": "./dist/styles/theme.css",
332
+ "import": "./dist/styles/theme.css"
333
+ },
325
334
  "./switch": {
326
335
  "import": "./dist/switch.js",
327
336
  "require": "./dist/switch.cjs",
@@ -367,6 +376,10 @@
367
376
  "require": "./dist/toast.cjs",
368
377
  "types": "./dist/feedback/toast/toast.d.ts"
369
378
  },
379
+ "./tokens.css": {
380
+ "default": "./dist/styles/tokens.css",
381
+ "import": "./dist/styles/tokens.css"
382
+ },
370
383
  "./tooltip": {
371
384
  "import": "./dist/tooltip.js",
372
385
  "require": "./dist/tooltip.cjs",
@@ -378,56 +391,6 @@
378
391
  "types": "./dist/feedback/typing-indicator/typing-indicator.d.ts"
379
392
  }
380
393
  },
381
- "scripts": {
382
- "analyze": "custom-elements-manifest analyze --config scripts/refine-manifest.mjs",
383
- "build": "pnpm run check:theme && pnpm run check:manifest && pnpm run check:css-contract && vite build && pnpm run build:bundle && cp -r src/styles/*.css dist/styles && pnpm run build:types && pnpm run analyze",
384
- "build:types": "tsc -p tsconfig.declarations.json",
385
- "check:css-contract": "node ./scripts/check-css-contract.mjs",
386
- "check:manifest": "node ./scripts/refine-manifest.mjs check-exports",
387
- "check:theme": "node ./scripts/theme-tokens.mjs check",
388
- "dev": "vite",
389
- "fix": "eslint --fix src",
390
- "lint": "eslint src",
391
- "preview": "vite preview",
392
- "sync:exports": "node ./scripts/refine-manifest.mjs sync-exports",
393
- "sync:theme": "node ./scripts/theme-tokens.mjs sync",
394
- "test": "vitest",
395
- "test:e2e": "playwright test",
396
- "build:bundle": "vite build --config vite.bundle.config.ts",
397
- "build:bundle:watch": "vite build --watch --config vite.bundle.config.ts"
398
- },
399
- "dependencies": {
400
- "@vielzeug/arsenal": "2.0.1",
401
- "@vielzeug/assay": "2.0.1",
402
- "@vielzeug/dnd": "2.0.0",
403
- "@vielzeug/keymap": "2.0.0",
404
- "@vielzeug/orbit": "2.0.1",
405
- "@vielzeug/ore": "2.0.3",
406
- "@vielzeug/ripple": "2.1.0",
407
- "@vielzeug/tempo": "2.0.0",
408
- "lucide": "^1.28.0"
409
- },
410
- "devDependencies": {
411
- "@types/node": "^26.1.2",
412
- "@axe-core/playwright": "^4.12.1",
413
- "@custom-elements-manifest/analyzer": "^0.11.0",
414
- "@playwright/test": "^1.62.1",
415
- "@types/culori": "^4.0.1",
416
- "axe-core": "^4.12.1",
417
- "browserslist": "^4.28.7",
418
- "culori": "^4.0.2",
419
- "lightningcss": "^1.33.0",
420
- "prettier": "^3.9.6",
421
- "stylelint": "^17.14.1",
422
- "typescript": "^6.0.3",
423
- "vite": "^8.2.0",
424
- "vitest": "^4.1.10"
425
- },
426
- "sideEffects": [
427
- "./dist/*.js",
428
- "./dist/*.cjs",
429
- "./dist/styles/**"
430
- ],
431
394
  "typesVersions": {
432
395
  "*": {
433
396
  "accordion": [
@@ -511,6 +474,15 @@
511
474
  "file-input": [
512
475
  "dist/inputs/file-input/file-input.d.ts"
513
476
  ],
477
+ "frameworks/elements": [
478
+ "dist/frameworks/elements.d.ts"
479
+ ],
480
+ "frameworks/react": [
481
+ "dist/frameworks/react.d.ts"
482
+ ],
483
+ "frameworks/vue": [
484
+ "dist/frameworks/vue.d.ts"
485
+ ],
514
486
  "grid": [
515
487
  "dist/layout/grid/grid.d.ts"
516
488
  ],
@@ -541,6 +513,9 @@
541
513
  "navbar": [
542
514
  "dist/layout/navbar/navbar.d.ts"
543
515
  ],
516
+ "navigation-menu": [
517
+ "dist/overlay/navigation-menu/navigation-menu.d.ts"
518
+ ],
544
519
  "number-input": [
545
520
  "dist/inputs/number-input/number-input.d.ts"
546
521
  ],
@@ -623,5 +598,56 @@
623
598
  "dist/feedback/typing-indicator/typing-indicator.d.ts"
624
599
  ]
625
600
  }
626
- }
601
+ },
602
+ "sideEffects": [
603
+ "./dist/*.js",
604
+ "./dist/*.cjs",
605
+ "./dist/styles/**"
606
+ ],
607
+ "scripts": {
608
+ "analyze": "custom-elements-manifest analyze --config scripts/refine-manifest.mjs",
609
+ "build": "pnpm run check:theme && pnpm run check:manifest && pnpm run check:css-contract && vite build && pnpm run build:bundle && cp -r src/styles/*.css dist/styles && pnpm run build:types && pnpm run analyze && pnpm run gen:framework-types",
610
+ "build:bundle": "vite build --config vite.bundle.config.ts",
611
+ "build:bundle:watch": "vite build --watch --config vite.bundle.config.ts",
612
+ "build:types": "tsc -p tsconfig.declarations.json",
613
+ "check:css-contract": "node ./scripts/check-css-contract.mjs",
614
+ "check:manifest": "node ./scripts/refine-manifest.mjs check-exports",
615
+ "check:theme": "node ./scripts/theme-tokens.mjs check",
616
+ "dev": "vite",
617
+ "fix": "biome check --write src",
618
+ "gen:framework-types": "node ./scripts/generate-framework-types.mjs",
619
+ "lint": "biome ci src",
620
+ "preview": "vite preview",
621
+ "sync:exports": "node ./scripts/refine-manifest.mjs sync-exports",
622
+ "sync:theme": "node ./scripts/theme-tokens.mjs sync",
623
+ "test": "vitest",
624
+ "test:e2e": "playwright test"
625
+ },
626
+ "dependencies": {
627
+ "@vielzeug/arsenal": "2.0.1",
628
+ "@vielzeug/assay": "2.0.1",
629
+ "@vielzeug/dnd": "2.0.0",
630
+ "@vielzeug/keymap": "2.0.0",
631
+ "@vielzeug/orbit": "2.0.2",
632
+ "@vielzeug/ore": "2.0.5",
633
+ "@vielzeug/ripple": "2.2.0",
634
+ "@vielzeug/tempo": "2.0.0",
635
+ "lucide": "^1.31.0"
636
+ },
637
+ "devDependencies": {
638
+ "@axe-core/playwright": "^4.13.0",
639
+ "@biomejs/biome": "2.5.8",
640
+ "@custom-elements-manifest/analyzer": "^0.11.0",
641
+ "@playwright/test": "^1.62.1",
642
+ "@types/culori": "^4.0.1",
643
+ "@types/node": "^26.2.0",
644
+ "axe-core": "^4.13.0",
645
+ "browserslist": "^4.28.8",
646
+ "culori": "^4.0.2",
647
+ "lightningcss": "^1.33.0",
648
+ "typescript": "^6.0.3",
649
+ "vite": "^8.2.1",
650
+ "vitest": "^4.1.10"
651
+ },
652
+ "customElements": "dist/custom-elements.json"
627
653
  }