@vielzeug/refine 1.1.3 → 1.3.0

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 (768) hide show
  1. package/dist/accordion-item.cjs +4 -4
  2. package/dist/accordion-item.cjs.map +1 -1
  3. package/dist/accordion-item.js +41 -41
  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 +21 -21
  8. package/dist/accordion.js.map +1 -1
  9. package/dist/alert.cjs +5 -5
  10. package/dist/alert.cjs.map +1 -1
  11. package/dist/alert.js +21 -21
  12. package/dist/alert.js.map +1 -1
  13. package/dist/async.cjs +10 -10
  14. package/dist/async.cjs.map +1 -1
  15. package/dist/async.js +27 -27
  16. package/dist/async.js.map +1 -1
  17. package/dist/avatar.cjs +2 -2
  18. package/dist/avatar.cjs.map +1 -1
  19. package/dist/avatar.js +30 -30
  20. package/dist/avatar.js.map +1 -1
  21. package/dist/badge.cjs +1 -1
  22. package/dist/badge.cjs.map +1 -1
  23. package/dist/badge.js +1 -1
  24. package/dist/box.cjs +1 -1
  25. package/dist/box.cjs.map +1 -1
  26. package/dist/box.js +1 -1
  27. package/dist/breadcrumb.cjs +2 -2
  28. package/dist/breadcrumb.cjs.map +1 -1
  29. package/dist/breadcrumb.js +20 -20
  30. package/dist/breadcrumb.js.map +1 -1
  31. package/dist/button-group.cjs +1 -1
  32. package/dist/button-group.cjs.map +1 -1
  33. package/dist/button-group.js +7 -7
  34. package/dist/button-group.js.map +1 -1
  35. package/dist/button.cjs +6 -6
  36. package/dist/button.cjs.map +1 -1
  37. package/dist/button.js +44 -42
  38. package/dist/button.js.map +1 -1
  39. package/dist/calendar.cjs +28 -28
  40. package/dist/calendar.cjs.map +1 -1
  41. package/dist/calendar.js +93 -91
  42. package/dist/calendar.js.map +1 -1
  43. package/dist/card.cjs +6 -6
  44. package/dist/card.cjs.map +1 -1
  45. package/dist/card.js +35 -34
  46. package/dist/card.js.map +1 -1
  47. package/dist/carousel.cjs +19 -19
  48. package/dist/carousel.cjs.map +1 -1
  49. package/dist/carousel.js +111 -111
  50. package/dist/carousel.js.map +1 -1
  51. package/dist/chat-message.cjs +47 -0
  52. package/dist/chat-message.cjs.map +1 -0
  53. package/dist/chat-message.js +121 -0
  54. package/dist/chat-message.js.map +1 -0
  55. package/dist/checkbox-group.cjs +9 -9
  56. package/dist/checkbox-group.cjs.map +1 -1
  57. package/dist/checkbox-group.js +54 -52
  58. package/dist/checkbox-group.js.map +1 -1
  59. package/dist/checkbox.cjs +4 -4
  60. package/dist/checkbox.cjs.map +1 -1
  61. package/dist/checkbox.js +39 -37
  62. package/dist/checkbox.js.map +1 -1
  63. package/dist/chip.cjs +14 -14
  64. package/dist/chip.cjs.map +1 -1
  65. package/dist/chip.js +43 -43
  66. package/dist/chip.js.map +1 -1
  67. package/dist/code-window.cjs +1 -1
  68. package/dist/code-window.cjs.map +1 -1
  69. package/dist/code-window.js +1 -1
  70. package/dist/combobox.cjs +25 -25
  71. package/dist/combobox.cjs.map +1 -1
  72. package/dist/combobox.js +181 -179
  73. package/dist/combobox.js.map +1 -1
  74. package/dist/command-palette.cjs +62 -0
  75. package/dist/command-palette.cjs.map +1 -0
  76. package/dist/command-palette.js +179 -0
  77. package/dist/command-palette.js.map +1 -0
  78. package/dist/content/avatar/{avatar-group.css?inline.cjs → avatar-group.css.cjs} +1 -1
  79. package/dist/content/avatar/avatar-group.css.cjs.map +1 -0
  80. package/dist/content/avatar/{avatar-group.css?inline.js → avatar-group.css.js} +1 -1
  81. package/dist/content/avatar/avatar-group.css.js.map +1 -0
  82. package/dist/content/avatar/{avatar.css?inline.cjs → avatar.css.cjs} +1 -1
  83. package/dist/content/avatar/avatar.css.cjs.map +1 -0
  84. package/dist/content/avatar/{avatar.css?inline.js → avatar.css.js} +1 -1
  85. package/dist/content/avatar/avatar.css.js.map +1 -0
  86. package/dist/content/breadcrumb/{breadcrumb-item.css?inline.cjs → breadcrumb-item.css.cjs} +1 -1
  87. package/dist/content/breadcrumb/breadcrumb-item.css.cjs.map +1 -0
  88. package/dist/content/breadcrumb/{breadcrumb-item.css?inline.js → breadcrumb-item.css.js} +1 -1
  89. package/dist/content/breadcrumb/breadcrumb-item.css.js.map +1 -0
  90. package/dist/content/breadcrumb/{breadcrumb.css?inline.cjs → breadcrumb.css.cjs} +1 -1
  91. package/dist/content/breadcrumb/breadcrumb.css.cjs.map +1 -0
  92. package/dist/content/breadcrumb/{breadcrumb.css?inline.js → breadcrumb.css.js} +1 -1
  93. package/dist/content/breadcrumb/breadcrumb.css.js.map +1 -0
  94. package/dist/content/card/{card.css?inline.cjs → card.css.cjs} +1 -1
  95. package/dist/content/card/card.css.cjs.map +1 -0
  96. package/dist/content/card/{card.css?inline.js → card.css.js} +1 -1
  97. package/dist/content/card/card.css.js.map +1 -0
  98. package/dist/content/carousel/carousel-slide.cjs +1 -1
  99. package/dist/content/carousel/carousel-slide.cjs.map +1 -1
  100. package/dist/content/carousel/{carousel-slide.css?inline.cjs → carousel-slide.css.cjs} +1 -1
  101. package/dist/content/carousel/carousel-slide.css.cjs.map +1 -0
  102. package/dist/content/carousel/{carousel-slide.css?inline.js → carousel-slide.css.js} +1 -1
  103. package/dist/content/carousel/carousel-slide.css.js.map +1 -0
  104. package/dist/content/carousel/carousel-slide.js +7 -7
  105. package/dist/content/carousel/carousel-slide.js.map +1 -1
  106. package/dist/content/carousel/{carousel.css?inline.cjs → carousel.css.cjs} +1 -1
  107. package/dist/content/carousel/carousel.css.cjs.map +1 -0
  108. package/dist/content/carousel/{carousel.css?inline.js → carousel.css.js} +1 -1
  109. package/dist/content/carousel/carousel.css.js.map +1 -0
  110. package/dist/content/chat-message/chat-message.css.cjs +2 -0
  111. package/dist/content/chat-message/chat-message.css.cjs.map +1 -0
  112. package/dist/content/chat-message/chat-message.css.js +6 -0
  113. package/dist/content/chat-message/chat-message.css.js.map +1 -0
  114. package/dist/content/chat-message/chat-message.d.ts +87 -0
  115. package/dist/content/chat-message/chat-message.d.ts.map +1 -0
  116. package/dist/content/code-window/{code-window.css?inline.cjs → code-window.css.cjs} +1 -1
  117. package/dist/content/code-window/code-window.css.cjs.map +1 -0
  118. package/dist/content/code-window/{code-window.css?inline.js → code-window.css.js} +1 -1
  119. package/dist/content/code-window/code-window.css.js.map +1 -0
  120. package/dist/content/copy-command/{copy-command.css?inline.cjs → copy-command.css.cjs} +1 -1
  121. package/dist/content/copy-command/copy-command.css.cjs.map +1 -0
  122. package/dist/content/copy-command/{copy-command.css?inline.js → copy-command.css.js} +1 -1
  123. package/dist/content/copy-command/copy-command.css.js.map +1 -0
  124. package/dist/content/icon/{icon.css?inline.cjs → icon.css.cjs} +1 -1
  125. package/dist/content/icon/icon.css.cjs.map +1 -0
  126. package/dist/content/icon/{icon.css?inline.js → icon.css.js} +1 -1
  127. package/dist/content/icon/icon.css.js.map +1 -0
  128. package/dist/content/index.d.ts +2 -0
  129. package/dist/content/index.d.ts.map +1 -1
  130. package/dist/content/pagination/{pagination.css?inline.cjs → pagination.css.cjs} +1 -1
  131. package/dist/content/pagination/pagination.css.cjs.map +1 -0
  132. package/dist/content/pagination/{pagination.css?inline.js → pagination.css.js} +1 -1
  133. package/dist/content/pagination/pagination.css.js.map +1 -0
  134. package/dist/content/separator/{separator.css?inline.cjs → separator.css.cjs} +1 -1
  135. package/dist/content/separator/separator.css.cjs.map +1 -0
  136. package/dist/content/separator/{separator.css?inline.js → separator.css.js} +1 -1
  137. package/dist/content/separator/separator.css.js.map +1 -0
  138. package/dist/content/table/{table.css?inline.cjs → table.css.cjs} +1 -1
  139. package/dist/content/table/table.css.cjs.map +1 -0
  140. package/dist/content/table/{table.css?inline.js → table.css.js} +1 -1
  141. package/dist/content/table/table.css.js.map +1 -0
  142. package/dist/content/text/{text.css?inline.cjs → text.css.cjs} +1 -1
  143. package/dist/content/text/text.css.cjs.map +1 -0
  144. package/dist/content/text/{text.css?inline.js → text.css.js} +1 -1
  145. package/dist/content/text/text.css.js.map +1 -0
  146. package/dist/copy-command.cjs +5 -5
  147. package/dist/copy-command.cjs.map +1 -1
  148. package/dist/copy-command.js +25 -25
  149. package/dist/copy-command.js.map +1 -1
  150. package/dist/custom-elements.json +4716 -3980
  151. package/dist/datagrid.cjs +109 -109
  152. package/dist/datagrid.cjs.map +1 -1
  153. package/dist/datagrid.js +194 -194
  154. package/dist/datagrid.js.map +1 -1
  155. package/dist/date-picker.cjs +40 -40
  156. package/dist/date-picker.cjs.map +1 -1
  157. package/dist/date-picker.js +116 -114
  158. package/dist/date-picker.js.map +1 -1
  159. package/dist/dialog.cjs +5 -5
  160. package/dist/dialog.cjs.map +1 -1
  161. package/dist/dialog.js +28 -28
  162. package/dist/dialog.js.map +1 -1
  163. package/dist/disclosure/accordion/{accordion.css?inline.cjs → accordion.css.cjs} +1 -1
  164. package/dist/disclosure/accordion/accordion.css.cjs.map +1 -0
  165. package/dist/disclosure/accordion/{accordion.css?inline.js → accordion.css.js} +1 -1
  166. package/dist/disclosure/accordion/accordion.css.js.map +1 -0
  167. package/dist/disclosure/accordion-item/{accordion-item.css?inline.cjs → accordion-item.css.cjs} +1 -1
  168. package/dist/disclosure/accordion-item/accordion-item.css.cjs.map +1 -0
  169. package/dist/disclosure/accordion-item/{accordion-item.css?inline.js → accordion-item.css.js} +1 -1
  170. package/dist/disclosure/accordion-item/accordion-item.css.js.map +1 -0
  171. package/dist/disclosure/tab-item/{tab-item.css?inline.cjs → tab-item.css.cjs} +1 -1
  172. package/dist/disclosure/tab-item/tab-item.css.cjs.map +1 -0
  173. package/dist/disclosure/tab-item/{tab-item.css?inline.js → tab-item.css.js} +1 -1
  174. package/dist/disclosure/tab-item/tab-item.css.js.map +1 -0
  175. package/dist/disclosure/tab-panel/{tab-panel.css?inline.cjs → tab-panel.css.cjs} +1 -1
  176. package/dist/disclosure/tab-panel/tab-panel.css.cjs.map +1 -0
  177. package/dist/disclosure/tab-panel/{tab-panel.css?inline.js → tab-panel.css.js} +1 -1
  178. package/dist/disclosure/tab-panel/tab-panel.css.js.map +1 -0
  179. package/dist/disclosure/tabs/{tabs.css?inline.cjs → tabs.css.cjs} +1 -1
  180. package/dist/disclosure/tabs/tabs.css.cjs.map +1 -0
  181. package/dist/disclosure/tabs/{tabs.css?inline.js → tabs.css.js} +1 -1
  182. package/dist/disclosure/tabs/tabs.css.js.map +1 -0
  183. package/dist/drawer.cjs +9 -9
  184. package/dist/drawer.cjs.map +1 -1
  185. package/dist/drawer.js +80 -80
  186. package/dist/drawer.js.map +1 -1
  187. package/dist/feedback/alert/{alert.css?inline.cjs → alert.css.cjs} +1 -1
  188. package/dist/feedback/alert/alert.css.cjs.map +1 -0
  189. package/dist/feedback/alert/{alert.css?inline.js → alert.css.js} +1 -1
  190. package/dist/feedback/alert/alert.css.js.map +1 -0
  191. package/dist/feedback/async/{async.css?inline.cjs → async.css.cjs} +1 -1
  192. package/dist/feedback/async/async.css.cjs.map +1 -0
  193. package/dist/feedback/async/{async.css?inline.js → async.css.js} +1 -1
  194. package/dist/feedback/async/async.css.js.map +1 -0
  195. package/dist/feedback/badge/{badge.css?inline.cjs → badge.css.cjs} +1 -1
  196. package/dist/feedback/badge/badge.css.cjs.map +1 -0
  197. package/dist/feedback/badge/{badge.css?inline.js → badge.css.js} +1 -1
  198. package/dist/feedback/badge/badge.css.js.map +1 -0
  199. package/dist/feedback/chip/{chip.css?inline.cjs → chip.css.cjs} +1 -1
  200. package/dist/feedback/chip/chip.css.cjs.map +1 -0
  201. package/dist/feedback/chip/{chip.css?inline.js → chip.css.js} +1 -1
  202. package/dist/feedback/chip/chip.css.js.map +1 -0
  203. package/dist/feedback/index.d.ts +2 -0
  204. package/dist/feedback/index.d.ts.map +1 -1
  205. package/dist/feedback/password-strength/{password-strength.css?inline.cjs → password-strength.css.cjs} +1 -1
  206. package/dist/feedback/password-strength/password-strength.css.cjs.map +1 -0
  207. package/dist/feedback/password-strength/{password-strength.css?inline.js → password-strength.css.js} +1 -1
  208. package/dist/feedback/password-strength/password-strength.css.js.map +1 -0
  209. package/dist/feedback/progress/{progress.css?inline.cjs → progress.css.cjs} +1 -1
  210. package/dist/feedback/progress/progress.css.cjs.map +1 -0
  211. package/dist/feedback/progress/{progress.css?inline.js → progress.css.js} +1 -1
  212. package/dist/feedback/progress/progress.css.js.map +1 -0
  213. package/dist/feedback/skeleton/{skeleton.css?inline.cjs → skeleton.css.cjs} +1 -1
  214. package/dist/feedback/skeleton/skeleton.css.cjs.map +1 -0
  215. package/dist/feedback/skeleton/{skeleton.css?inline.js → skeleton.css.js} +1 -1
  216. package/dist/feedback/skeleton/skeleton.css.js.map +1 -0
  217. package/dist/feedback/toast/{toast.css?inline.cjs → toast.css.cjs} +1 -1
  218. package/dist/feedback/toast/toast.css.cjs.map +1 -0
  219. package/dist/feedback/toast/{toast.css?inline.js → toast.css.js} +1 -1
  220. package/dist/feedback/toast/toast.css.js.map +1 -0
  221. package/dist/feedback/toast/toast.d.ts.map +1 -1
  222. package/dist/feedback/typing-indicator/typing-indicator.css.cjs +2 -0
  223. package/dist/feedback/typing-indicator/typing-indicator.css.cjs.map +1 -0
  224. package/dist/feedback/typing-indicator/typing-indicator.css.js +6 -0
  225. package/dist/feedback/typing-indicator/typing-indicator.css.js.map +1 -0
  226. package/dist/feedback/typing-indicator/typing-indicator.d.ts +42 -0
  227. package/dist/feedback/typing-indicator/typing-indicator.d.ts.map +1 -0
  228. package/dist/file-input.cjs +56 -34
  229. package/dist/file-input.cjs.map +1 -1
  230. package/dist/file-input.js +143 -104
  231. package/dist/file-input.js.map +1 -1
  232. package/dist/form.cjs +3 -3
  233. package/dist/form.cjs.map +1 -1
  234. package/dist/form.js +28 -25
  235. package/dist/form.js.map +1 -1
  236. package/dist/grid-item.cjs +1 -1
  237. package/dist/grid-item.cjs.map +1 -1
  238. package/dist/grid-item.js +19 -19
  239. package/dist/grid-item.js.map +1 -1
  240. package/dist/grid.cjs +1 -1
  241. package/dist/grid.cjs.map +1 -1
  242. package/dist/grid.js +48 -48
  243. package/dist/grid.js.map +1 -1
  244. package/dist/icon.cjs +1 -1
  245. package/dist/icon.cjs.map +1 -1
  246. package/dist/icon.js +26 -26
  247. package/dist/icon.js.map +1 -1
  248. package/dist/index.cjs +1 -1
  249. package/dist/index.js +52 -49
  250. package/dist/input.cjs +25 -25
  251. package/dist/input.cjs.map +1 -1
  252. package/dist/input.js +75 -73
  253. package/dist/input.js.map +1 -1
  254. package/dist/inputs/button/{button.css?inline.cjs → button.css.cjs} +1 -1
  255. package/dist/inputs/button/button.css.cjs.map +1 -0
  256. package/dist/inputs/button/{button.css?inline.js → button.css.js} +1 -1
  257. package/dist/inputs/button/button.css.js.map +1 -0
  258. package/dist/inputs/button/button.d.ts.map +1 -1
  259. package/dist/inputs/button-group/{button-group.css?inline.cjs → button-group.css.cjs} +1 -1
  260. package/dist/inputs/button-group/button-group.css.cjs.map +1 -0
  261. package/dist/inputs/button-group/{button-group.css?inline.js → button-group.css.js} +1 -1
  262. package/dist/inputs/button-group/button-group.css.js.map +1 -0
  263. package/dist/inputs/calendar/{calendar.css?inline.cjs → calendar.css.cjs} +1 -1
  264. package/dist/inputs/calendar/calendar.css.cjs.map +1 -0
  265. package/dist/inputs/calendar/{calendar.css?inline.js → calendar.css.js} +1 -1
  266. package/dist/inputs/calendar/calendar.css.js.map +1 -0
  267. package/dist/inputs/calendar/calendar.d.ts.map +1 -1
  268. package/dist/inputs/checkbox/{checkbox.css?inline.cjs → checkbox.css.cjs} +1 -1
  269. package/dist/inputs/checkbox/checkbox.css.cjs.map +1 -0
  270. package/dist/inputs/checkbox/{checkbox.css?inline.js → checkbox.css.js} +1 -1
  271. package/dist/inputs/checkbox/checkbox.css.js.map +1 -0
  272. package/dist/inputs/checkbox/checkbox.d.ts.map +1 -1
  273. package/dist/inputs/checkbox-group/{checkbox-group.css?inline.cjs → checkbox-group.css.cjs} +1 -1
  274. package/dist/inputs/checkbox-group/checkbox-group.css.cjs.map +1 -0
  275. package/dist/inputs/checkbox-group/{checkbox-group.css?inline.js → checkbox-group.css.js} +1 -1
  276. package/dist/inputs/checkbox-group/checkbox-group.css.js.map +1 -0
  277. package/dist/inputs/checkbox-group/checkbox-group.d.ts.map +1 -1
  278. package/dist/inputs/combobox/{combobox.css?inline.cjs → combobox.css.cjs} +1 -1
  279. package/dist/inputs/combobox/combobox.css.cjs.map +1 -0
  280. package/dist/inputs/combobox/{combobox.css?inline.js → combobox.css.js} +1 -1
  281. package/dist/inputs/combobox/combobox.css.js.map +1 -0
  282. package/dist/inputs/combobox/combobox.d.ts.map +1 -1
  283. package/dist/inputs/datagrid/{datagrid.css?inline.cjs → datagrid.css.cjs} +1 -1
  284. package/dist/inputs/datagrid/datagrid.css.cjs.map +1 -0
  285. package/dist/inputs/datagrid/{datagrid.css?inline.js → datagrid.css.js} +1 -1
  286. package/dist/inputs/datagrid/datagrid.css.js.map +1 -0
  287. package/dist/inputs/date-picker/{date-picker.css?inline.cjs → date-picker.css.cjs} +1 -1
  288. package/dist/inputs/date-picker/date-picker.css.cjs.map +1 -0
  289. package/dist/inputs/date-picker/{date-picker.css?inline.js → date-picker.css.js} +1 -1
  290. package/dist/inputs/date-picker/date-picker.css.js.map +1 -0
  291. package/dist/inputs/date-picker/date-picker.d.ts.map +1 -1
  292. package/dist/inputs/file-input/{file-input.css?inline.cjs → file-input.css.cjs} +2 -2
  293. package/dist/inputs/file-input/file-input.css.cjs.map +1 -0
  294. package/dist/inputs/file-input/{file-input.css?inline.js → file-input.css.js} +2 -2
  295. package/dist/inputs/file-input/file-input.css.js.map +1 -0
  296. package/dist/inputs/file-input/file-input.d.ts +9 -0
  297. package/dist/inputs/file-input/file-input.d.ts.map +1 -1
  298. package/dist/inputs/form/{form.css?inline.cjs → form.css.cjs} +1 -1
  299. package/dist/inputs/form/form.css.cjs.map +1 -0
  300. package/dist/inputs/form/{form.css?inline.js → form.css.js} +1 -1
  301. package/dist/inputs/form/form.css.js.map +1 -0
  302. package/dist/inputs/input/{input.css?inline.cjs → input.css.cjs} +1 -1
  303. package/dist/inputs/input/input.css.cjs.map +1 -0
  304. package/dist/inputs/input/{input.css?inline.js → input.css.js} +1 -1
  305. package/dist/inputs/input/input.css.js.map +1 -0
  306. package/dist/inputs/input/input.d.ts.map +1 -1
  307. package/dist/inputs/number-input/{number-input.css?inline.cjs → number-input.css.cjs} +1 -1
  308. package/dist/inputs/number-input/number-input.css.cjs.map +1 -0
  309. package/dist/inputs/number-input/{number-input.css?inline.js → number-input.css.js} +1 -1
  310. package/dist/inputs/number-input/number-input.css.js.map +1 -0
  311. package/dist/inputs/otp-input/{otp-input.css?inline.cjs → otp-input.css.cjs} +1 -1
  312. package/dist/inputs/otp-input/otp-input.css.cjs.map +1 -0
  313. package/dist/inputs/otp-input/{otp-input.css?inline.js → otp-input.css.js} +1 -1
  314. package/dist/inputs/otp-input/otp-input.css.js.map +1 -0
  315. package/dist/inputs/otp-input/otp-input.d.ts.map +1 -1
  316. package/dist/inputs/radio/{radio.css?inline.cjs → radio.css.cjs} +1 -1
  317. package/dist/inputs/radio/radio.css.cjs.map +1 -0
  318. package/dist/inputs/radio/{radio.css?inline.js → radio.css.js} +1 -1
  319. package/dist/inputs/radio/radio.css.js.map +1 -0
  320. package/dist/inputs/radio/radio.d.ts.map +1 -1
  321. package/dist/inputs/radio-group/{radio-group.css?inline.cjs → radio-group.css.cjs} +1 -1
  322. package/dist/inputs/radio-group/radio-group.css.cjs.map +1 -0
  323. package/dist/inputs/radio-group/{radio-group.css?inline.js → radio-group.css.js} +1 -1
  324. package/dist/inputs/radio-group/radio-group.css.js.map +1 -0
  325. package/dist/inputs/radio-group/radio-group.d.ts.map +1 -1
  326. package/dist/inputs/rating/{rating.css?inline.cjs → rating.css.cjs} +1 -1
  327. package/dist/inputs/rating/rating.css.cjs.map +1 -0
  328. package/dist/inputs/rating/{rating.css?inline.js → rating.css.js} +1 -1
  329. package/dist/inputs/rating/rating.css.js.map +1 -0
  330. package/dist/inputs/rating/rating.d.ts.map +1 -1
  331. package/dist/inputs/select/{select.css?inline.cjs → select.css.cjs} +1 -1
  332. package/dist/inputs/select/select.css.cjs.map +1 -0
  333. package/dist/inputs/select/{select.css?inline.js → select.css.js} +1 -1
  334. package/dist/inputs/select/select.css.js.map +1 -0
  335. package/dist/inputs/select/select.d.ts.map +1 -1
  336. package/dist/inputs/shared/field-binding.cjs +1 -1
  337. package/dist/inputs/shared/field-binding.cjs.map +1 -1
  338. package/dist/inputs/shared/field-binding.d.ts +1 -2
  339. package/dist/inputs/shared/field-binding.d.ts.map +1 -1
  340. package/dist/inputs/shared/field-binding.js +3 -2
  341. package/dist/inputs/shared/field-binding.js.map +1 -1
  342. package/dist/inputs/shared/form-context.cjs +1 -1
  343. package/dist/inputs/shared/form-context.cjs.map +1 -1
  344. package/dist/inputs/shared/form-context.d.ts +4 -4
  345. package/dist/inputs/shared/form-context.d.ts.map +1 -1
  346. package/dist/inputs/shared/form-context.js +10 -10
  347. package/dist/inputs/shared/form-context.js.map +1 -1
  348. package/dist/inputs/slider/{slider.css?inline.cjs → slider.css.cjs} +1 -1
  349. package/dist/inputs/slider/slider.css.cjs.map +1 -0
  350. package/dist/inputs/slider/{slider.css?inline.js → slider.css.js} +1 -1
  351. package/dist/inputs/slider/slider.css.js.map +1 -0
  352. package/dist/inputs/slider/slider.d.ts.map +1 -1
  353. package/dist/inputs/switch/{switch.css?inline.cjs → switch.css.cjs} +1 -1
  354. package/dist/inputs/switch/switch.css.cjs.map +1 -0
  355. package/dist/inputs/switch/{switch.css?inline.js → switch.css.js} +1 -1
  356. package/dist/inputs/switch/switch.css.js.map +1 -0
  357. package/dist/inputs/switch/switch.d.ts.map +1 -1
  358. package/dist/inputs/textarea/{textarea.css?inline.cjs → textarea.css.cjs} +1 -1
  359. package/dist/inputs/textarea/textarea.css.cjs.map +1 -0
  360. package/dist/inputs/textarea/{textarea.css?inline.js → textarea.css.js} +1 -1
  361. package/dist/inputs/textarea/textarea.css.js.map +1 -0
  362. package/dist/inputs/textarea/textarea.d.ts.map +1 -1
  363. package/dist/inputs/time-picker/{time-picker.css?inline.cjs → time-picker.css.cjs} +1 -1
  364. package/dist/inputs/time-picker/time-picker.css.cjs.map +1 -0
  365. package/dist/inputs/time-picker/{time-picker.css?inline.js → time-picker.css.js} +1 -1
  366. package/dist/inputs/time-picker/time-picker.css.js.map +1 -0
  367. package/dist/inputs/time-picker/time-picker.d.ts.map +1 -1
  368. package/dist/keymap/dist/_dev.cjs +2 -0
  369. package/dist/keymap/dist/_dev.cjs.map +1 -0
  370. package/dist/keymap/dist/_dev.js +4 -0
  371. package/dist/keymap/dist/_dev.js.map +1 -0
  372. package/dist/keymap/dist/format.cjs +1 -0
  373. package/dist/keymap/dist/format.js +1 -0
  374. package/dist/keymap/dist/index.cjs +1 -0
  375. package/dist/keymap/dist/index.js +4 -0
  376. package/dist/keymap/dist/keymap.cjs +2 -0
  377. package/dist/keymap/dist/keymap.cjs.map +1 -0
  378. package/dist/keymap/dist/keymap.js +221 -0
  379. package/dist/keymap/dist/keymap.js.map +1 -0
  380. package/dist/keymap/dist/layer.cjs +1 -0
  381. package/dist/keymap/dist/layer.js +1 -0
  382. package/dist/layout/box/{box.css?inline.cjs → box.css.cjs} +1 -1
  383. package/dist/layout/box/box.css.cjs.map +1 -0
  384. package/dist/layout/box/{box.css?inline.js → box.css.js} +1 -1
  385. package/dist/layout/box/box.css.js.map +1 -0
  386. package/dist/layout/grid/{grid.css?inline.cjs → grid.css.cjs} +1 -1
  387. package/dist/layout/grid/grid.css.cjs.map +1 -0
  388. package/dist/layout/grid/{grid.css?inline.js → grid.css.js} +1 -1
  389. package/dist/layout/grid/grid.css.js.map +1 -0
  390. package/dist/layout/grid-item/{grid-item.css?inline.cjs → grid-item.css.cjs} +1 -1
  391. package/dist/layout/grid-item/grid-item.css.cjs.map +1 -0
  392. package/dist/layout/grid-item/{grid-item.css?inline.js → grid-item.css.js} +1 -1
  393. package/dist/layout/grid-item/grid-item.css.js.map +1 -0
  394. package/dist/layout/navbar/{navbar.css?inline.cjs → navbar.css.cjs} +1 -1
  395. package/dist/layout/navbar/navbar.css.cjs.map +1 -0
  396. package/dist/layout/navbar/{navbar.css?inline.js → navbar.css.js} +1 -1
  397. package/dist/layout/navbar/navbar.css.js.map +1 -0
  398. package/dist/layout/navbar/navbar.d.ts.map +1 -1
  399. package/dist/layout/sidebar/{sidebar-group.css?inline.cjs → sidebar-group.css.cjs} +1 -1
  400. package/dist/layout/sidebar/sidebar-group.css.cjs.map +1 -0
  401. package/dist/layout/sidebar/{sidebar-group.css?inline.js → sidebar-group.css.js} +1 -1
  402. package/dist/layout/sidebar/sidebar-group.css.js.map +1 -0
  403. package/dist/layout/sidebar/{sidebar-item.css?inline.cjs → sidebar-item.css.cjs} +1 -1
  404. package/dist/layout/sidebar/sidebar-item.css.cjs.map +1 -0
  405. package/dist/layout/sidebar/{sidebar-item.css?inline.js → sidebar-item.css.js} +1 -1
  406. package/dist/layout/sidebar/sidebar-item.css.js.map +1 -0
  407. package/dist/layout/sidebar/{sidebar.css?inline.cjs → sidebar.css.cjs} +1 -1
  408. package/dist/layout/sidebar/sidebar.css.cjs.map +1 -0
  409. package/dist/layout/sidebar/{sidebar.css?inline.js → sidebar.css.js} +1 -1
  410. package/dist/layout/sidebar/sidebar.css.js.map +1 -0
  411. package/dist/layout/sidebar/sidebar.d.ts.map +1 -1
  412. package/dist/menu.cjs +5 -5
  413. package/dist/menu.cjs.map +1 -1
  414. package/dist/menu.js +85 -85
  415. package/dist/menu.js.map +1 -1
  416. package/dist/navbar.cjs +15 -15
  417. package/dist/navbar.cjs.map +1 -1
  418. package/dist/navbar.js +127 -127
  419. package/dist/navbar.js.map +1 -1
  420. package/dist/number-input.cjs +11 -11
  421. package/dist/number-input.cjs.map +1 -1
  422. package/dist/number-input.js +69 -69
  423. package/dist/number-input.js.map +1 -1
  424. package/dist/ore/dist/_dev.cjs.map +1 -1
  425. package/dist/ore/dist/_dev.js.map +1 -1
  426. package/dist/ore/dist/base-element.cjs +1 -1
  427. package/dist/ore/dist/base-element.cjs.map +1 -1
  428. package/dist/ore/dist/base-element.js +37 -35
  429. package/dist/ore/dist/base-element.js.map +1 -1
  430. package/dist/ore/dist/context.cjs +1 -1
  431. package/dist/ore/dist/context.cjs.map +1 -1
  432. package/dist/ore/dist/context.js +6 -33
  433. package/dist/ore/dist/context.js.map +1 -1
  434. package/dist/ore/dist/define.cjs.map +1 -1
  435. package/dist/ore/dist/define.js.map +1 -1
  436. package/dist/ore/dist/directives/raw.cjs +1 -1
  437. package/dist/ore/dist/directives/raw.cjs.map +1 -1
  438. package/dist/ore/dist/directives/raw.js +20 -17
  439. package/dist/ore/dist/directives/raw.js.map +1 -1
  440. package/dist/ore/dist/directives/when.cjs +1 -1
  441. package/dist/ore/dist/directives/when.cjs.map +1 -1
  442. package/dist/ore/dist/directives/when.js +29 -24
  443. package/dist/ore/dist/directives/when.js.map +1 -1
  444. package/dist/ore/dist/errors.cjs +2 -2
  445. package/dist/ore/dist/errors.cjs.map +1 -1
  446. package/dist/ore/dist/errors.js +12 -3
  447. package/dist/ore/dist/errors.js.map +1 -1
  448. package/dist/ore/dist/forms/context.cjs +2 -0
  449. package/dist/ore/dist/forms/context.cjs.map +1 -0
  450. package/dist/ore/dist/forms/context.js +6 -0
  451. package/dist/ore/dist/forms/context.js.map +1 -0
  452. package/dist/ore/dist/forms/field.cjs +2 -0
  453. package/dist/ore/dist/forms/field.cjs.map +1 -0
  454. package/dist/ore/dist/forms/field.js +35 -0
  455. package/dist/ore/dist/forms/field.js.map +1 -0
  456. package/dist/ore/dist/forms.cjs +1 -0
  457. package/dist/ore/dist/forms.js +3 -0
  458. package/dist/ore/dist/props.cjs +1 -1
  459. package/dist/ore/dist/props.cjs.map +1 -1
  460. package/dist/ore/dist/props.js +29 -27
  461. package/dist/ore/dist/props.js.map +1 -1
  462. package/dist/ore/dist/runtime.cjs +1 -1
  463. package/dist/ore/dist/runtime.cjs.map +1 -1
  464. package/dist/ore/dist/runtime.js +13 -23
  465. package/dist/ore/dist/runtime.js.map +1 -1
  466. package/dist/ore/dist/testing/render-hook.cjs +1 -1
  467. package/dist/ore/dist/testing/render-hook.js +0 -1
  468. package/dist/ore/dist/utils/dom.cjs +1 -1
  469. package/dist/ore/dist/utils/dom.cjs.map +1 -1
  470. package/dist/ore/dist/utils/dom.js +2 -6
  471. package/dist/ore/dist/utils/dom.js.map +1 -1
  472. package/dist/otp-input.cjs +9 -9
  473. package/dist/otp-input.cjs.map +1 -1
  474. package/dist/otp-input.js +70 -68
  475. package/dist/otp-input.js.map +1 -1
  476. package/dist/overlay/command-palette/command-palette-items.cjs +2 -0
  477. package/dist/overlay/command-palette/command-palette-items.cjs.map +1 -0
  478. package/dist/overlay/command-palette/command-palette-items.d.ts +22 -0
  479. package/dist/overlay/command-palette/command-palette-items.d.ts.map +1 -0
  480. package/dist/overlay/command-palette/command-palette-items.js +55 -0
  481. package/dist/overlay/command-palette/command-palette-items.js.map +1 -0
  482. package/dist/overlay/command-palette/command-palette.css.cjs +2 -0
  483. package/dist/overlay/command-palette/command-palette.css.cjs.map +1 -0
  484. package/dist/overlay/command-palette/command-palette.css.js +6 -0
  485. package/dist/overlay/command-palette/command-palette.css.js.map +1 -0
  486. package/dist/overlay/command-palette/command-palette.d.ts +72 -0
  487. package/dist/overlay/command-palette/command-palette.d.ts.map +1 -0
  488. package/dist/overlay/command-palette/command-palette.types.d.ts +76 -0
  489. package/dist/overlay/command-palette/command-palette.types.d.ts.map +1 -0
  490. package/dist/overlay/dialog/{dialog.css?inline.cjs → dialog.css.cjs} +1 -1
  491. package/dist/overlay/dialog/dialog.css.cjs.map +1 -0
  492. package/dist/overlay/dialog/{dialog.css?inline.js → dialog.css.js} +1 -1
  493. package/dist/overlay/dialog/dialog.css.js.map +1 -0
  494. package/dist/overlay/drawer/{drawer.css?inline.cjs → drawer.css.cjs} +1 -1
  495. package/dist/overlay/drawer/drawer.css.cjs.map +1 -0
  496. package/dist/overlay/drawer/{drawer.css?inline.js → drawer.css.js} +1 -1
  497. package/dist/overlay/drawer/drawer.css.js.map +1 -0
  498. package/dist/overlay/drawer/drawer.d.ts.map +1 -1
  499. package/dist/overlay/index.d.ts +2 -0
  500. package/dist/overlay/index.d.ts.map +1 -1
  501. package/dist/overlay/menu/{menu-item.css?inline.cjs → menu-item.css.cjs} +1 -1
  502. package/dist/overlay/menu/menu-item.css.cjs.map +1 -0
  503. package/dist/overlay/menu/{menu-item.css?inline.js → menu-item.css.js} +1 -1
  504. package/dist/overlay/menu/menu-item.css.js.map +1 -0
  505. package/dist/overlay/menu/{menu-separator.css?inline.cjs → menu-separator.css.cjs} +1 -1
  506. package/dist/overlay/menu/menu-separator.css.cjs.map +1 -0
  507. package/dist/overlay/menu/{menu-separator.css?inline.js → menu-separator.css.js} +1 -1
  508. package/dist/overlay/menu/menu-separator.css.js.map +1 -0
  509. package/dist/overlay/menu/{menu.css?inline.cjs → menu.css.cjs} +1 -1
  510. package/dist/overlay/menu/menu.css.cjs.map +1 -0
  511. package/dist/overlay/menu/{menu.css?inline.js → menu.css.js} +1 -1
  512. package/dist/overlay/menu/menu.css.js.map +1 -0
  513. package/dist/overlay/menu/menu.d.ts.map +1 -1
  514. package/dist/overlay/popover/{popover.css?inline.cjs → popover.css.cjs} +1 -1
  515. package/dist/overlay/popover/popover.css.cjs.map +1 -0
  516. package/dist/overlay/popover/{popover.css?inline.js → popover.css.js} +1 -1
  517. package/dist/overlay/popover/popover.css.js.map +1 -0
  518. package/dist/overlay/popover/popover.d.ts.map +1 -1
  519. package/dist/overlay/tooltip/{tooltip.css?inline.cjs → tooltip.css.cjs} +1 -1
  520. package/dist/overlay/tooltip/tooltip.css.cjs.map +1 -0
  521. package/dist/overlay/tooltip/{tooltip.css?inline.js → tooltip.css.js} +1 -1
  522. package/dist/overlay/tooltip/tooltip.css.js.map +1 -0
  523. package/dist/pagination.cjs +12 -12
  524. package/dist/pagination.cjs.map +1 -1
  525. package/dist/pagination.js +39 -38
  526. package/dist/pagination.js.map +1 -1
  527. package/dist/password-strength.cjs +8 -8
  528. package/dist/password-strength.cjs.map +1 -1
  529. package/dist/password-strength.js +34 -34
  530. package/dist/password-strength.js.map +1 -1
  531. package/dist/popover.cjs +4 -4
  532. package/dist/popover.cjs.map +1 -1
  533. package/dist/popover.js +30 -30
  534. package/dist/popover.js.map +1 -1
  535. package/dist/progress.cjs +1 -1
  536. package/dist/progress.cjs.map +1 -1
  537. package/dist/progress.js +30 -30
  538. package/dist/progress.js.map +1 -1
  539. package/dist/radio-group.cjs +11 -11
  540. package/dist/radio-group.cjs.map +1 -1
  541. package/dist/radio-group.js +67 -63
  542. package/dist/radio-group.js.map +1 -1
  543. package/dist/radio.cjs +4 -4
  544. package/dist/radio.cjs.map +1 -1
  545. package/dist/radio.js +69 -67
  546. package/dist/radio.js.map +1 -1
  547. package/dist/rating.cjs +4 -4
  548. package/dist/rating.cjs.map +1 -1
  549. package/dist/rating.js +57 -55
  550. package/dist/rating.js.map +1 -1
  551. package/dist/refine.cjs +753 -620
  552. package/dist/refine.cjs.map +1 -1
  553. package/dist/refine.iife.js +742 -609
  554. package/dist/refine.iife.js.map +1 -1
  555. package/dist/refine.js +777 -644
  556. package/dist/refine.js.map +1 -1
  557. package/dist/select.cjs +37 -37
  558. package/dist/select.cjs.map +1 -1
  559. package/dist/select.js +130 -128
  560. package/dist/select.js.map +1 -1
  561. package/dist/separator.cjs +1 -1
  562. package/dist/separator.cjs.map +1 -1
  563. package/dist/separator.js +1 -1
  564. package/dist/sidebar.cjs +22 -22
  565. package/dist/sidebar.cjs.map +1 -1
  566. package/dist/sidebar.js +135 -135
  567. package/dist/sidebar.js.map +1 -1
  568. package/dist/skeleton.cjs +2 -2
  569. package/dist/skeleton.cjs.map +1 -1
  570. package/dist/skeleton.js +28 -28
  571. package/dist/skeleton.js.map +1 -1
  572. package/dist/slider.cjs +13 -13
  573. package/dist/slider.cjs.map +1 -1
  574. package/dist/slider.js +142 -140
  575. package/dist/slider.js.map +1 -1
  576. package/dist/switch.cjs +4 -4
  577. package/dist/switch.cjs.map +1 -1
  578. package/dist/switch.js +35 -33
  579. package/dist/switch.js.map +1 -1
  580. package/dist/tab-item.cjs +5 -5
  581. package/dist/tab-item.cjs.map +1 -1
  582. package/dist/tab-item.js +25 -25
  583. package/dist/tab-item.js.map +1 -1
  584. package/dist/tab-panel.cjs +6 -6
  585. package/dist/tab-panel.cjs.map +1 -1
  586. package/dist/tab-panel.js +24 -24
  587. package/dist/tab-panel.js.map +1 -1
  588. package/dist/table.cjs +1 -1
  589. package/dist/table.cjs.map +1 -1
  590. package/dist/table.js +36 -35
  591. package/dist/table.js.map +1 -1
  592. package/dist/tabs.cjs +3 -3
  593. package/dist/tabs.cjs.map +1 -1
  594. package/dist/tabs.js +61 -61
  595. package/dist/tabs.js.map +1 -1
  596. package/dist/text.cjs +1 -1
  597. package/dist/text.cjs.map +1 -1
  598. package/dist/text.js +16 -16
  599. package/dist/text.js.map +1 -1
  600. package/dist/textarea.cjs +15 -15
  601. package/dist/textarea.cjs.map +1 -1
  602. package/dist/textarea.js +67 -65
  603. package/dist/textarea.js.map +1 -1
  604. package/dist/time-picker.cjs +31 -31
  605. package/dist/time-picker.cjs.map +1 -1
  606. package/dist/time-picker.js +115 -113
  607. package/dist/time-picker.js.map +1 -1
  608. package/dist/toast.cjs +14 -14
  609. package/dist/toast.cjs.map +1 -1
  610. package/dist/toast.js +85 -85
  611. package/dist/toast.js.map +1 -1
  612. package/dist/tooltip.cjs +5 -5
  613. package/dist/tooltip.cjs.map +1 -1
  614. package/dist/tooltip.js +55 -55
  615. package/dist/tooltip.js.map +1 -1
  616. package/dist/typing-indicator.cjs +8 -0
  617. package/dist/typing-indicator.cjs.map +1 -0
  618. package/dist/typing-indicator.js +49 -0
  619. package/dist/typing-indicator.js.map +1 -0
  620. package/package.json +21 -2
  621. package/dist/content/avatar/avatar-group.css?inline.cjs.map +0 -1
  622. package/dist/content/avatar/avatar-group.css?inline.js.map +0 -1
  623. package/dist/content/avatar/avatar.css?inline.cjs.map +0 -1
  624. package/dist/content/avatar/avatar.css?inline.js.map +0 -1
  625. package/dist/content/breadcrumb/breadcrumb-item.css?inline.cjs.map +0 -1
  626. package/dist/content/breadcrumb/breadcrumb-item.css?inline.js.map +0 -1
  627. package/dist/content/breadcrumb/breadcrumb.css?inline.cjs.map +0 -1
  628. package/dist/content/breadcrumb/breadcrumb.css?inline.js.map +0 -1
  629. package/dist/content/card/card.css?inline.cjs.map +0 -1
  630. package/dist/content/card/card.css?inline.js.map +0 -1
  631. package/dist/content/carousel/carousel-slide.css?inline.cjs.map +0 -1
  632. package/dist/content/carousel/carousel-slide.css?inline.js.map +0 -1
  633. package/dist/content/carousel/carousel.css?inline.cjs.map +0 -1
  634. package/dist/content/carousel/carousel.css?inline.js.map +0 -1
  635. package/dist/content/code-window/code-window.css?inline.cjs.map +0 -1
  636. package/dist/content/code-window/code-window.css?inline.js.map +0 -1
  637. package/dist/content/copy-command/copy-command.css?inline.cjs.map +0 -1
  638. package/dist/content/copy-command/copy-command.css?inline.js.map +0 -1
  639. package/dist/content/icon/icon.css?inline.cjs.map +0 -1
  640. package/dist/content/icon/icon.css?inline.js.map +0 -1
  641. package/dist/content/pagination/pagination.css?inline.cjs.map +0 -1
  642. package/dist/content/pagination/pagination.css?inline.js.map +0 -1
  643. package/dist/content/separator/separator.css?inline.cjs.map +0 -1
  644. package/dist/content/separator/separator.css?inline.js.map +0 -1
  645. package/dist/content/table/table.css?inline.cjs.map +0 -1
  646. package/dist/content/table/table.css?inline.js.map +0 -1
  647. package/dist/content/text/text.css?inline.cjs.map +0 -1
  648. package/dist/content/text/text.css?inline.js.map +0 -1
  649. package/dist/disclosure/accordion/accordion.css?inline.cjs.map +0 -1
  650. package/dist/disclosure/accordion/accordion.css?inline.js.map +0 -1
  651. package/dist/disclosure/accordion-item/accordion-item.css?inline.cjs.map +0 -1
  652. package/dist/disclosure/accordion-item/accordion-item.css?inline.js.map +0 -1
  653. package/dist/disclosure/tab-item/tab-item.css?inline.cjs.map +0 -1
  654. package/dist/disclosure/tab-item/tab-item.css?inline.js.map +0 -1
  655. package/dist/disclosure/tab-panel/tab-panel.css?inline.cjs.map +0 -1
  656. package/dist/disclosure/tab-panel/tab-panel.css?inline.js.map +0 -1
  657. package/dist/disclosure/tabs/tabs.css?inline.cjs.map +0 -1
  658. package/dist/disclosure/tabs/tabs.css?inline.js.map +0 -1
  659. package/dist/feedback/alert/alert.css?inline.cjs.map +0 -1
  660. package/dist/feedback/alert/alert.css?inline.js.map +0 -1
  661. package/dist/feedback/async/async.css?inline.cjs.map +0 -1
  662. package/dist/feedback/async/async.css?inline.js.map +0 -1
  663. package/dist/feedback/badge/badge.css?inline.cjs.map +0 -1
  664. package/dist/feedback/badge/badge.css?inline.js.map +0 -1
  665. package/dist/feedback/chip/chip.css?inline.cjs.map +0 -1
  666. package/dist/feedback/chip/chip.css?inline.js.map +0 -1
  667. package/dist/feedback/password-strength/password-strength.css?inline.cjs.map +0 -1
  668. package/dist/feedback/password-strength/password-strength.css?inline.js.map +0 -1
  669. package/dist/feedback/progress/progress.css?inline.cjs.map +0 -1
  670. package/dist/feedback/progress/progress.css?inline.js.map +0 -1
  671. package/dist/feedback/skeleton/skeleton.css?inline.cjs.map +0 -1
  672. package/dist/feedback/skeleton/skeleton.css?inline.js.map +0 -1
  673. package/dist/feedback/toast/toast.css?inline.cjs.map +0 -1
  674. package/dist/feedback/toast/toast.css?inline.js.map +0 -1
  675. package/dist/inputs/button/button.css?inline.cjs.map +0 -1
  676. package/dist/inputs/button/button.css?inline.js.map +0 -1
  677. package/dist/inputs/button-group/button-group.css?inline.cjs.map +0 -1
  678. package/dist/inputs/button-group/button-group.css?inline.js.map +0 -1
  679. package/dist/inputs/calendar/calendar.css?inline.cjs.map +0 -1
  680. package/dist/inputs/calendar/calendar.css?inline.js.map +0 -1
  681. package/dist/inputs/checkbox/checkbox.css?inline.cjs.map +0 -1
  682. package/dist/inputs/checkbox/checkbox.css?inline.js.map +0 -1
  683. package/dist/inputs/checkbox-group/checkbox-group.css?inline.cjs.map +0 -1
  684. package/dist/inputs/checkbox-group/checkbox-group.css?inline.js.map +0 -1
  685. package/dist/inputs/combobox/combobox.css?inline.cjs.map +0 -1
  686. package/dist/inputs/combobox/combobox.css?inline.js.map +0 -1
  687. package/dist/inputs/datagrid/datagrid.css?inline.cjs.map +0 -1
  688. package/dist/inputs/datagrid/datagrid.css?inline.js.map +0 -1
  689. package/dist/inputs/date-picker/date-picker.css?inline.cjs.map +0 -1
  690. package/dist/inputs/date-picker/date-picker.css?inline.js.map +0 -1
  691. package/dist/inputs/file-input/file-input.css?inline.cjs.map +0 -1
  692. package/dist/inputs/file-input/file-input.css?inline.js.map +0 -1
  693. package/dist/inputs/form/form.css?inline.cjs.map +0 -1
  694. package/dist/inputs/form/form.css?inline.js.map +0 -1
  695. package/dist/inputs/input/input.css?inline.cjs.map +0 -1
  696. package/dist/inputs/input/input.css?inline.js.map +0 -1
  697. package/dist/inputs/number-input/number-input.css?inline.cjs.map +0 -1
  698. package/dist/inputs/number-input/number-input.css?inline.js.map +0 -1
  699. package/dist/inputs/otp-input/otp-input.css?inline.cjs.map +0 -1
  700. package/dist/inputs/otp-input/otp-input.css?inline.js.map +0 -1
  701. package/dist/inputs/radio/radio.css?inline.cjs.map +0 -1
  702. package/dist/inputs/radio/radio.css?inline.js.map +0 -1
  703. package/dist/inputs/radio-group/radio-group.css?inline.cjs.map +0 -1
  704. package/dist/inputs/radio-group/radio-group.css?inline.js.map +0 -1
  705. package/dist/inputs/rating/rating.css?inline.cjs.map +0 -1
  706. package/dist/inputs/rating/rating.css?inline.js.map +0 -1
  707. package/dist/inputs/select/select.css?inline.cjs.map +0 -1
  708. package/dist/inputs/select/select.css?inline.js.map +0 -1
  709. package/dist/inputs/slider/slider.css?inline.cjs.map +0 -1
  710. package/dist/inputs/slider/slider.css?inline.js.map +0 -1
  711. package/dist/inputs/switch/switch.css?inline.cjs.map +0 -1
  712. package/dist/inputs/switch/switch.css?inline.js.map +0 -1
  713. package/dist/inputs/textarea/textarea.css?inline.cjs.map +0 -1
  714. package/dist/inputs/textarea/textarea.css?inline.js.map +0 -1
  715. package/dist/inputs/time-picker/time-picker.css?inline.cjs.map +0 -1
  716. package/dist/inputs/time-picker/time-picker.css?inline.js.map +0 -1
  717. package/dist/layout/box/box.css?inline.cjs.map +0 -1
  718. package/dist/layout/box/box.css?inline.js.map +0 -1
  719. package/dist/layout/grid/grid.css?inline.cjs.map +0 -1
  720. package/dist/layout/grid/grid.css?inline.js.map +0 -1
  721. package/dist/layout/grid-item/grid-item.css?inline.cjs.map +0 -1
  722. package/dist/layout/grid-item/grid-item.css?inline.js.map +0 -1
  723. package/dist/layout/navbar/navbar.css?inline.cjs.map +0 -1
  724. package/dist/layout/navbar/navbar.css?inline.js.map +0 -1
  725. package/dist/layout/sidebar/sidebar-group.css?inline.cjs.map +0 -1
  726. package/dist/layout/sidebar/sidebar-group.css?inline.js.map +0 -1
  727. package/dist/layout/sidebar/sidebar-item.css?inline.cjs.map +0 -1
  728. package/dist/layout/sidebar/sidebar-item.css?inline.js.map +0 -1
  729. package/dist/layout/sidebar/sidebar.css?inline.cjs.map +0 -1
  730. package/dist/layout/sidebar/sidebar.css?inline.js.map +0 -1
  731. package/dist/ore/dist/aria.cjs +0 -2
  732. package/dist/ore/dist/aria.cjs.map +0 -1
  733. package/dist/ore/dist/aria.js +0 -37
  734. package/dist/ore/dist/aria.js.map +0 -1
  735. package/dist/ore/dist/context-bag.cjs +0 -2
  736. package/dist/ore/dist/context-bag.cjs.map +0 -1
  737. package/dist/ore/dist/context-bag.js +0 -28
  738. package/dist/ore/dist/context-bag.js.map +0 -1
  739. package/dist/ore/dist/host-bind.cjs +0 -2
  740. package/dist/ore/dist/host-bind.cjs.map +0 -1
  741. package/dist/ore/dist/host-bind.js +0 -60
  742. package/dist/ore/dist/host-bind.js.map +0 -1
  743. package/dist/ore/dist/slots.cjs +0 -2
  744. package/dist/ore/dist/slots.cjs.map +0 -1
  745. package/dist/ore/dist/slots.js +0 -61
  746. package/dist/ore/dist/slots.js.map +0 -1
  747. package/dist/ore/dist/utils/aria.cjs +0 -2
  748. package/dist/ore/dist/utils/aria.cjs.map +0 -1
  749. package/dist/ore/dist/utils/aria.js +0 -6
  750. package/dist/ore/dist/utils/aria.js.map +0 -1
  751. package/dist/ore/dist/utils/emit.cjs +0 -2
  752. package/dist/ore/dist/utils/emit.cjs.map +0 -1
  753. package/dist/ore/dist/utils/emit.js +0 -16
  754. package/dist/ore/dist/utils/emit.js.map +0 -1
  755. package/dist/overlay/dialog/dialog.css?inline.cjs.map +0 -1
  756. package/dist/overlay/dialog/dialog.css?inline.js.map +0 -1
  757. package/dist/overlay/drawer/drawer.css?inline.cjs.map +0 -1
  758. package/dist/overlay/drawer/drawer.css?inline.js.map +0 -1
  759. package/dist/overlay/menu/menu-item.css?inline.cjs.map +0 -1
  760. package/dist/overlay/menu/menu-item.css?inline.js.map +0 -1
  761. package/dist/overlay/menu/menu-separator.css?inline.cjs.map +0 -1
  762. package/dist/overlay/menu/menu-separator.css?inline.js.map +0 -1
  763. package/dist/overlay/menu/menu.css?inline.cjs.map +0 -1
  764. package/dist/overlay/menu/menu.css?inline.js.map +0 -1
  765. package/dist/overlay/popover/popover.css?inline.cjs.map +0 -1
  766. package/dist/overlay/popover/popover.css?inline.js.map +0 -1
  767. package/dist/overlay/tooltip/tooltip.css?inline.cjs.map +0 -1
  768. package/dist/overlay/tooltip/tooltip.css?inline.js.map +0 -1
@@ -1,13 +1,13 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./styles/mixins/accessibility.css.cjs"),t=require("./shared/prop-bundles.cjs"),n=require("./headless/direction.cjs"),r=require("./accordion.cjs"),i=require("./disclosure/accordion-item/accordion-item.css?inline.cjs");let a=require("@vielzeug/ore");var o=`ore-accordion-item`;(0,a.define)(o,{props:{...t.disablableBundle,expanded:a.prop.bool(!1),size:a.prop.string(),variant:a.prop.string()},setup(e,{el:t,emit:i,onMounted:o,watch:s}){let c=(0,a.inject)(r.ACCORDION_CTX);c&&s(()=>{let e=c.size.value,n=c.variant.value;e!==void 0&&t.setAttribute(`size`,e),n!==void 0&&t.setAttribute(`variant`,n)});let l=`accordion-item-title`,u=(0,a.ref)(),d=(0,a.ref)(),f=!1,p=()=>{let e=u.value;!e||e.open||(e.classList.add(`opening`),e.open=!0,t.toggleAttribute(`expanded`,!0),i(`expand`,{expanded:!0,item:t}),requestAnimationFrame(()=>{let t=e.querySelector(`.content-inner`);if(!t){e.classList.remove(`opening`),f=!1;return}let n=()=>{e.classList.remove(`opening`),f=!1},r=t.getAnimations?.().filter(e=>e instanceof CSSTransition)??[];r.length>0?Promise.allSettled(r.map(e=>e.finished)).then(n):n()}))},m=()=>{let e=u.value;if(!e||!e.open||f)return;f=!0,e.classList.add(`closing`);let n=e.querySelector(`.content-inner`),r=()=>{e.classList.remove(`closing`),e.open=!1,t.toggleAttribute(`expanded`,!1),i(`collapse`,{expanded:!1,item:t}),f=!1};if(n){let e=n.getAnimations?.().filter(e=>e instanceof CSSTransition)??[];e.length>0?Promise.allSettled(e.map(e=>e.finished)).then(r):r()}else r()},h=!1,g=0,_=()=>{if(e.disabled.value)return;let t=u.value;t&&(t.open?m():p())},v=e=>{g=e.touches[0]?.clientY??0},y=e=>{Math.abs((e.changedTouches[0]?.clientY??0)-g)>10||(e.preventDefault(),h=!0,_())},b=e=>{if(h){h=!1,e.preventDefault();return}e.preventDefault(),_()},x=()=>{let n=u.value?.open??!1,r=!!e.expanded.value;n&&!r?(t.toggleAttribute(`expanded`,!0),i(`expand`,{expanded:!0,item:t})):!n&&r&&(t.toggleAttribute(`expanded`,!1),i(`collapse`,{expanded:!1,item:t}))};return o(()=>{let e=u.value,r=d.value;if(!e||!r)return;let i=()=>{e.classList.toggle(`rtl`,n.elementDirection(t)===`rtl`)};i();let a=new MutationObserver(e=>{e.some(e=>e.attributeName===`dir`)&&i()});for(let e=t;e;e=e.parentElement)a.observe(e,{attributeFilter:[`dir`],attributes:!0});return e.addEventListener(`toggle`,x),r.addEventListener(`touchstart`,v,{passive:!0}),r.addEventListener(`touchend`,y,{passive:!1}),r.addEventListener(`click`,b),()=>{a.disconnect(),e.removeEventListener(`toggle`,x),r.removeEventListener(`touchstart`,v),r.removeEventListener(`touchend`,y),r.removeEventListener(`click`,b)}}),a.html` <details part="item" ?open="${e.expanded}" ref="${u}">
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./styles/mixins/accessibility.css.cjs"),t=require("./shared/prop-bundles.cjs"),n=require("./headless/direction.cjs"),r=require("./accordion.cjs"),i=require("./disclosure/accordion-item/accordion-item.css.cjs");let a=require("@vielzeug/ore");var o=`ore-accordion-item`;(0,a.define)(o,{props:{...t.disablableBundle,expanded:a.prop.bool(!1),size:a.prop.string(),variant:a.prop.string()},setup(e){let t=(0,a.getHost)(),i=(0,a.useEmit)(),o=a.watchEffect,s=(0,a.inject)(r.ACCORDION_CTX);s&&o(()=>{let e=s.size.value,n=s.variant.value;e!==void 0&&t.setAttribute(`size`,e),n!==void 0&&t.setAttribute(`variant`,n)});let c=`accordion-item-title`,l=(0,a.ref)(),u=(0,a.ref)(),d=!1,f=()=>{let e=l.value;!e||e.open||(e.classList.add(`opening`),e.open=!0,t.toggleAttribute(`expanded`,!0),i(`expand`,{expanded:!0,item:t}),requestAnimationFrame(()=>{let t=e.querySelector(`.content-inner`);if(!t){e.classList.remove(`opening`),d=!1;return}let n=()=>{e.classList.remove(`opening`),d=!1},r=t.getAnimations?.().filter(e=>e instanceof CSSTransition)??[];r.length>0?Promise.allSettled(r.map(e=>e.finished)).then(n):n()}))},p=()=>{let e=l.value;if(!e||!e.open||d)return;d=!0,e.classList.add(`closing`);let n=e.querySelector(`.content-inner`),r=()=>{e.classList.remove(`closing`),e.open=!1,t.toggleAttribute(`expanded`,!1),i(`collapse`,{expanded:!1,item:t}),d=!1};if(n){let e=n.getAnimations?.().filter(e=>e instanceof CSSTransition)??[];e.length>0?Promise.allSettled(e.map(e=>e.finished)).then(r):r()}else r()},m=!1,h=0,g=()=>{if(e.disabled.value)return;let t=l.value;t&&(t.open?p():f())},_=e=>{h=e.touches[0]?.clientY??0},v=e=>{Math.abs((e.changedTouches[0]?.clientY??0)-h)>10||(e.preventDefault(),m=!0,g())},y=e=>{if(m){m=!1,e.preventDefault();return}e.preventDefault(),g()},b=()=>{let n=l.value?.open??!1,r=!!e.expanded.value;n&&!r?(t.toggleAttribute(`expanded`,!0),i(`expand`,{expanded:!0,item:t})):!n&&r&&(t.toggleAttribute(`expanded`,!1),i(`collapse`,{expanded:!1,item:t}))};return(0,a.onMounted)(()=>{let e=l.value,r=u.value;if(!e||!r)return;let i=()=>{e.classList.toggle(`rtl`,n.elementDirection(t)===`rtl`)};i();let a=new MutationObserver(e=>{e.some(e=>e.attributeName===`dir`)&&i()});for(let e=t;e;e=e.parentElement)a.observe(e,{attributeFilter:[`dir`],attributes:!0});return e.addEventListener(`toggle`,b),r.addEventListener(`touchstart`,_,{passive:!0}),r.addEventListener(`touchend`,v,{passive:!1}),r.addEventListener(`click`,y),()=>{a.disconnect(),e.removeEventListener(`toggle`,b),r.removeEventListener(`touchstart`,_),r.removeEventListener(`touchend`,v),r.removeEventListener(`click`,y)}}),a.html` <details part="item" ?open="${e.expanded}" ref="${l}">
2
2
  <summary
3
3
  part="summary"
4
4
  :aria-expanded="${()=>String(e.expanded.value)}"
5
5
  :aria-disabled="${()=>e.disabled.value?`true`:`false`}"
6
6
  :tabindex="${()=>e.disabled.value?`-1`:null}"
7
- ref="${d}">
7
+ ref="${u}">
8
8
  <slot name="prefix"></slot>
9
9
  <div class="header-content" part="header">
10
- <span class="title" part="title" id="${l}">
10
+ <span class="title" part="title" id="${c}">
11
11
  <slot name="title"></slot>
12
12
  </span>
13
13
  <span class="subtitle" part="subtitle">
@@ -17,7 +17,7 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=requi
17
17
  <slot name="suffix"></slot>
18
18
  <ore-icon class="chevron" name="chevron-down" size="20" stroke-width="2" aria-hidden="true"></ore-icon>
19
19
  </summary>
20
- <div class="content-wrapper" part="content" role="region" aria-labelledby="${l}">
20
+ <div class="content-wrapper" part="content" role="region" aria-labelledby="${c}">
21
21
  <div class="content-inner">
22
22
  <slot></slot>
23
23
  </div>
@@ -1 +1 @@
1
- {"version":3,"file":"accordion-item.cjs","names":[],"sources":["../src/disclosure/accordion-item/accordion-item.ts"],"sourcesContent":["import { define, html, inject, prop, ref } from '@vielzeug/ore';\n\nimport type { ComponentSize, SurfaceVariant } from '../../types';\n\nimport '../../content/icon/icon';\nimport { elementDirection } from '../../headless/direction';\nimport { disablableBundle } from '../../shared';\nimport { coarsePointerMixin } from '../../styles';\nimport { ACCORDION_CTX } from '../accordion/accordion';\nimport styles from './accordion-item.css?inline';\n\n/** Accordion item component properties */\n\nexport type OreAccordionItemEvents = {\n collapse: { expanded: boolean; item: HTMLElement };\n expand: { expanded: boolean; item: HTMLElement };\n};\n\nexport type OreAccordionItemProps = {\n /** Disable accordion item interaction */\n disabled?: boolean;\n /** Whether the item is expanded/open */\n expanded?: boolean;\n /** Item size */\n size?: ComponentSize;\n /** Visual style variant */\n variant?: SurfaceVariant;\n};\n\n/**\n * An individual accordion item with expand/collapse functionality using native details/summary.\n *\n * @element ore-accordion-item\n *\n * @attr {boolean} expanded - Whether the item is expanded/open\n * @attr {boolean} disabled - Disable accordion item interaction\n * @attr {string} size - Item size: 'sm' | 'md' | 'lg'\n * @attr {string} variant - Visual variant: 'solid' | 'flat' | 'bordered' | 'outline' | 'ghost' | 'text' | 'glass' | 'frost'\n *\n * @fires expand - Emitted when item expands. detail: { expanded: boolean; item: HTMLElement }\n * @fires collapse - Emitted when item collapses. detail: { expanded: boolean; item: HTMLElement }\n *\n * @slot prefix - Content before the title (e.g., icons)\n * @slot title - Main accordion item title\n * @slot subtitle - Optional subtitle text\n * @slot suffix - Content after the title (e.g., badges)\n * @slot - Accordion item content (shown when expanded)\n *\n * @cssprop --accordion-item-bg - Background color\n * @cssprop --accordion-item-hover-bg - Background color on hover\n * @cssprop --accordion-item-border-color - Border color\n * @cssprop --accordion-item-title-color - Title text color\n * @cssprop --accordion-item-subtitle-color - Subtitle text color\n * @cssprop --accordion-item-body-color - Body text color\n * @cssprop --accordion-item-radius - Border radius\n * @cssprop --accordion-item-transition - Transition duration\n * @cssprop --accordion-item-title - Title font size\n * @cssprop --accordion-item-subtitle-size - Subtitle font size\n * @cssprop --accordion-item-body - Body font size\n * @cssprop --accordion-item-details-padding - Summary/header padding\n * @cssprop --accordion-item-summary-padding - Content padding\n *\n * @part item - Item root element.\n * @part summary - Summary trigger row.\n * @part header - Header container.\n * @part title - Title text element.\n * @part subtitle - Subtitle text element.\n * @part content - Content container.\n * @example\n * ```html\n * <ore-accordion-item><span slot=\"title\">Click to expand</span><p>Content</p></ore-accordion-item>\n * <ore-accordion-item expanded variant=\"bordered\"><span slot=\"title\">Title</span><p>Content</p></ore-accordion-item>\n * ```\n */\n\nexport const ACCORDION_ITEM_TAG = 'ore-accordion-item' as const;\ndefine<OreAccordionItemProps, OreAccordionItemEvents>(ACCORDION_ITEM_TAG, {\n props: {\n ...disablableBundle,\n expanded: prop.bool(false),\n size: prop.string<ComponentSize>(),\n variant: prop.string<SurfaceVariant>(),\n },\n\n setup(props, { el, emit, onMounted, watch }) {\n // Inherit size/variant from a parent ore-accordion when present.\n const accordionCtx = inject(ACCORDION_CTX);\n\n if (accordionCtx) {\n watch(() => {\n const size = accordionCtx.size.value;\n const variant = accordionCtx.variant.value;\n\n if (size !== undefined) el.setAttribute('size', size);\n\n if (variant !== undefined) el.setAttribute('variant', variant);\n });\n }\n\n const titleId = 'accordion-item-title';\n const detailsRef = ref<HTMLDetailsElement>();\n const summaryRef = ref<HTMLElement>();\n let isAnimating = false;\n\n const openItem = () => {\n const details = detailsRef.value;\n\n if (!details || details.open) return;\n\n details.classList.add('opening');\n details.open = true;\n\n el.toggleAttribute('expanded', true);\n emit('expand', { expanded: true, item: el });\n\n requestAnimationFrame(() => {\n const inner = details.querySelector<HTMLElement>('.content-inner');\n\n if (!inner) {\n details.classList.remove('opening');\n isAnimating = false;\n\n return;\n }\n\n const onDone = () => {\n details.classList.remove('opening');\n isAnimating = false;\n };\n const transitions = inner.getAnimations?.().filter((a) => a instanceof CSSTransition) ?? [];\n\n if (transitions.length > 0) {\n Promise.allSettled(transitions.map((a) => a.finished)).then(onDone);\n } else {\n onDone();\n }\n });\n };\n\n const closeItem = () => {\n const details = detailsRef.value;\n\n if (!details || !details.open || isAnimating) return;\n\n isAnimating = true;\n\n details.classList.add('closing');\n\n const inner = details.querySelector<HTMLElement>('.content-inner');\n const onDone = () => {\n details.classList.remove('closing');\n details.open = false;\n el.toggleAttribute('expanded', false);\n emit('collapse', { expanded: false, item: el });\n isAnimating = false;\n };\n\n if (inner) {\n const transitions = inner.getAnimations?.().filter((a) => a instanceof CSSTransition) ?? [];\n\n if (transitions.length > 0) {\n Promise.allSettled(transitions.map((a) => a.finished)).then(onDone);\n } else {\n onDone();\n }\n } else {\n onDone();\n }\n };\n\n let touchHandled = false;\n let touchStartY = 0;\n\n const toggleDetails = () => {\n if (props.disabled.value) return;\n\n const details = detailsRef.value;\n\n if (!details) return;\n\n if (details.open) {\n closeItem();\n } else {\n openItem();\n }\n };\n\n const handleSummaryTouchStart = (e: TouchEvent) => {\n touchStartY = e.touches[0]?.clientY ?? 0;\n };\n\n const handleSummaryTouchEnd = (e: TouchEvent) => {\n const dy = Math.abs((e.changedTouches[0]?.clientY ?? 0) - touchStartY);\n\n if (dy > 10) return;\n\n e.preventDefault();\n touchHandled = true;\n toggleDetails();\n };\n\n const handleSummaryClick = (e: Event) => {\n if (touchHandled) {\n touchHandled = false;\n e.preventDefault();\n\n return;\n }\n\n e.preventDefault();\n toggleDetails();\n };\n\n const handleToggle = () => {\n // Only fires for programmatic open/close (e.g. from accordion parent)\n const isOpen = detailsRef.value?.open ?? false;\n const wasExpanded = Boolean(props.expanded.value);\n\n if (isOpen && !wasExpanded) {\n el.toggleAttribute('expanded', true);\n emit('expand', { expanded: true, item: el });\n } else if (!isOpen && wasExpanded) {\n el.toggleAttribute('expanded', false);\n emit('collapse', { expanded: false, item: el });\n }\n };\n\n onMounted(() => {\n const details = detailsRef.value;\n const summary = summaryRef.value;\n\n if (!details || !summary) return;\n\n // Detect RTL so plain CSS classes can target it (see `elementDirection` for the\n // ancestor-dir / computed-style resolution rule).\n const checkRTL = () => {\n details.classList.toggle('rtl', elementDirection(el) === 'rtl');\n };\n\n // Check initially\n checkRTL();\n\n // Re-check when `dir` changes on this element's own ancestor chain (not the whole\n // document — `elementDirection` only ever looks at `el`'s ancestors, so that's all we\n // need to watch).\n const observer = new MutationObserver((mutations) => {\n const dirChanged = mutations.some((m) => m.attributeName === 'dir');\n\n if (dirChanged) {\n checkRTL();\n }\n });\n\n for (let ancestor: Element | null = el; ancestor; ancestor = ancestor.parentElement) {\n observer.observe(ancestor, { attributeFilter: ['dir'], attributes: true });\n }\n\n details.addEventListener('toggle', handleToggle);\n summary.addEventListener('touchstart', handleSummaryTouchStart, { passive: true });\n summary.addEventListener('touchend', handleSummaryTouchEnd, { passive: false });\n summary.addEventListener('click', handleSummaryClick);\n\n return () => {\n observer.disconnect();\n details.removeEventListener('toggle', handleToggle);\n summary.removeEventListener('touchstart', handleSummaryTouchStart);\n summary.removeEventListener('touchend', handleSummaryTouchEnd);\n summary.removeEventListener('click', handleSummaryClick);\n };\n });\n\n return html` <details part=\"item\" ?open=\"${props.expanded}\" ref=\"${detailsRef}\">\n <summary\n part=\"summary\"\n :aria-expanded=\"${() => String(props.expanded.value)}\"\n :aria-disabled=\"${() => (props.disabled.value ? 'true' : 'false')}\"\n :tabindex=\"${() => (props.disabled.value ? '-1' : null)}\"\n ref=\"${summaryRef}\">\n <slot name=\"prefix\"></slot>\n <div class=\"header-content\" part=\"header\">\n <span class=\"title\" part=\"title\" id=\"${titleId}\">\n <slot name=\"title\"></slot>\n </span>\n <span class=\"subtitle\" part=\"subtitle\">\n <slot name=\"subtitle\"></slot>\n </span>\n </div>\n <slot name=\"suffix\"></slot>\n <ore-icon class=\"chevron\" name=\"chevron-down\" size=\"20\" stroke-width=\"2\" aria-hidden=\"true\"></ore-icon>\n </summary>\n <div class=\"content-wrapper\" part=\"content\" role=\"region\" aria-labelledby=\"${titleId}\">\n <div class=\"content-inner\">\n <slot></slot>\n </div>\n </div>\n </details>`;\n },\n\n styles: [coarsePointerMixin, styles],\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"accordion-item.cjs","names":[],"sources":["../src/disclosure/accordion-item/accordion-item.ts"],"sourcesContent":["import { define, html, inject, prop, ref, getHost, onMounted, useEmit, watchEffect } from '@vielzeug/ore';\n\nimport type { ComponentSize, SurfaceVariant } from '../../types';\n\nimport '../../content/icon/icon';\nimport { elementDirection } from '../../headless/direction';\nimport { disablableBundle } from '../../shared';\nimport { coarsePointerMixin } from '../../styles';\nimport { ACCORDION_CTX } from '../accordion/accordion';\nimport styles from './accordion-item.css?inline';\n\n/** Accordion item component properties */\n\nexport type OreAccordionItemEvents = {\n collapse: { expanded: boolean; item: HTMLElement };\n expand: { expanded: boolean; item: HTMLElement };\n};\n\nexport type OreAccordionItemProps = {\n /** Disable accordion item interaction */\n disabled?: boolean;\n /** Whether the item is expanded/open */\n expanded?: boolean;\n /** Item size */\n size?: ComponentSize;\n /** Visual style variant */\n variant?: SurfaceVariant;\n};\n\n/**\n * An individual accordion item with expand/collapse functionality using native details/summary.\n *\n * @element ore-accordion-item\n *\n * @attr {boolean} expanded - Whether the item is expanded/open\n * @attr {boolean} disabled - Disable accordion item interaction\n * @attr {string} size - Item size: 'sm' | 'md' | 'lg'\n * @attr {string} variant - Visual variant: 'solid' | 'flat' | 'bordered' | 'outline' | 'ghost' | 'text' | 'glass' | 'frost'\n *\n * @fires expand - Emitted when item expands. detail: { expanded: boolean; item: HTMLElement }\n * @fires collapse - Emitted when item collapses. detail: { expanded: boolean; item: HTMLElement }\n *\n * @slot prefix - Content before the title (e.g., icons)\n * @slot title - Main accordion item title\n * @slot subtitle - Optional subtitle text\n * @slot suffix - Content after the title (e.g., badges)\n * @slot - Accordion item content (shown when expanded)\n *\n * @cssprop --accordion-item-bg - Background color\n * @cssprop --accordion-item-hover-bg - Background color on hover\n * @cssprop --accordion-item-border-color - Border color\n * @cssprop --accordion-item-title-color - Title text color\n * @cssprop --accordion-item-subtitle-color - Subtitle text color\n * @cssprop --accordion-item-body-color - Body text color\n * @cssprop --accordion-item-radius - Border radius\n * @cssprop --accordion-item-transition - Transition duration\n * @cssprop --accordion-item-title - Title font size\n * @cssprop --accordion-item-subtitle-size - Subtitle font size\n * @cssprop --accordion-item-body - Body font size\n * @cssprop --accordion-item-details-padding - Summary/header padding\n * @cssprop --accordion-item-summary-padding - Content padding\n *\n * @part item - Item root element.\n * @part summary - Summary trigger row.\n * @part header - Header container.\n * @part title - Title text element.\n * @part subtitle - Subtitle text element.\n * @part content - Content container.\n * @example\n * ```html\n * <ore-accordion-item><span slot=\"title\">Click to expand</span><p>Content</p></ore-accordion-item>\n * <ore-accordion-item expanded variant=\"bordered\"><span slot=\"title\">Title</span><p>Content</p></ore-accordion-item>\n * ```\n */\n\nexport const ACCORDION_ITEM_TAG = 'ore-accordion-item' as const;\ndefine<OreAccordionItemProps>(ACCORDION_ITEM_TAG, {\n props: {\n ...disablableBundle,\n expanded: prop.bool(false),\n size: prop.string<ComponentSize>(),\n variant: prop.string<SurfaceVariant>(),\n },\n\n setup(props) {\n const el = getHost();\n const emit = useEmit<OreAccordionItemEvents>();\n const watch = watchEffect;\n\n // Inherit size/variant from a parent ore-accordion when present.\n const accordionCtx = inject(ACCORDION_CTX);\n\n if (accordionCtx) {\n watch(() => {\n const size = accordionCtx.size.value;\n const variant = accordionCtx.variant.value;\n\n if (size !== undefined) el.setAttribute('size', size);\n\n if (variant !== undefined) el.setAttribute('variant', variant);\n });\n }\n\n const titleId = 'accordion-item-title';\n const detailsRef = ref<HTMLDetailsElement>();\n const summaryRef = ref<HTMLElement>();\n let isAnimating = false;\n\n const openItem = () => {\n const details = detailsRef.value;\n\n if (!details || details.open) return;\n\n details.classList.add('opening');\n details.open = true;\n\n el.toggleAttribute('expanded', true);\n emit('expand', { expanded: true, item: el });\n\n requestAnimationFrame(() => {\n const inner = details.querySelector<HTMLElement>('.content-inner');\n\n if (!inner) {\n details.classList.remove('opening');\n isAnimating = false;\n\n return;\n }\n\n const onDone = () => {\n details.classList.remove('opening');\n isAnimating = false;\n };\n const transitions = inner.getAnimations?.().filter((a) => a instanceof CSSTransition) ?? [];\n\n if (transitions.length > 0) {\n Promise.allSettled(transitions.map((a) => a.finished)).then(onDone);\n } else {\n onDone();\n }\n });\n };\n\n const closeItem = () => {\n const details = detailsRef.value;\n\n if (!details || !details.open || isAnimating) return;\n\n isAnimating = true;\n\n details.classList.add('closing');\n\n const inner = details.querySelector<HTMLElement>('.content-inner');\n const onDone = () => {\n details.classList.remove('closing');\n details.open = false;\n el.toggleAttribute('expanded', false);\n emit('collapse', { expanded: false, item: el });\n isAnimating = false;\n };\n\n if (inner) {\n const transitions = inner.getAnimations?.().filter((a) => a instanceof CSSTransition) ?? [];\n\n if (transitions.length > 0) {\n Promise.allSettled(transitions.map((a) => a.finished)).then(onDone);\n } else {\n onDone();\n }\n } else {\n onDone();\n }\n };\n\n let touchHandled = false;\n let touchStartY = 0;\n\n const toggleDetails = () => {\n if (props.disabled.value) return;\n\n const details = detailsRef.value;\n\n if (!details) return;\n\n if (details.open) {\n closeItem();\n } else {\n openItem();\n }\n };\n\n const handleSummaryTouchStart = (e: TouchEvent) => {\n touchStartY = e.touches[0]?.clientY ?? 0;\n };\n\n const handleSummaryTouchEnd = (e: TouchEvent) => {\n const dy = Math.abs((e.changedTouches[0]?.clientY ?? 0) - touchStartY);\n\n if (dy > 10) return;\n\n e.preventDefault();\n touchHandled = true;\n toggleDetails();\n };\n\n const handleSummaryClick = (e: Event) => {\n if (touchHandled) {\n touchHandled = false;\n e.preventDefault();\n\n return;\n }\n\n e.preventDefault();\n toggleDetails();\n };\n\n const handleToggle = () => {\n // Only fires for programmatic open/close (e.g. from accordion parent)\n const isOpen = detailsRef.value?.open ?? false;\n const wasExpanded = Boolean(props.expanded.value);\n\n if (isOpen && !wasExpanded) {\n el.toggleAttribute('expanded', true);\n emit('expand', { expanded: true, item: el });\n } else if (!isOpen && wasExpanded) {\n el.toggleAttribute('expanded', false);\n emit('collapse', { expanded: false, item: el });\n }\n };\n\n onMounted(() => {\n const details = detailsRef.value;\n const summary = summaryRef.value;\n\n if (!details || !summary) return;\n\n // Detect RTL so plain CSS classes can target it (see `elementDirection` for the\n // ancestor-dir / computed-style resolution rule).\n const checkRTL = () => {\n details.classList.toggle('rtl', elementDirection(el) === 'rtl');\n };\n\n // Check initially\n checkRTL();\n\n // Re-check when `dir` changes on this element's own ancestor chain (not the whole\n // document — `elementDirection` only ever looks at `el`'s ancestors, so that's all we\n // need to watch).\n const observer = new MutationObserver((mutations) => {\n const dirChanged = mutations.some((m) => m.attributeName === 'dir');\n\n if (dirChanged) {\n checkRTL();\n }\n });\n\n for (let ancestor: Element | null = el; ancestor; ancestor = ancestor.parentElement) {\n observer.observe(ancestor, { attributeFilter: ['dir'], attributes: true });\n }\n\n details.addEventListener('toggle', handleToggle);\n summary.addEventListener('touchstart', handleSummaryTouchStart, { passive: true });\n summary.addEventListener('touchend', handleSummaryTouchEnd, { passive: false });\n summary.addEventListener('click', handleSummaryClick);\n\n return () => {\n observer.disconnect();\n details.removeEventListener('toggle', handleToggle);\n summary.removeEventListener('touchstart', handleSummaryTouchStart);\n summary.removeEventListener('touchend', handleSummaryTouchEnd);\n summary.removeEventListener('click', handleSummaryClick);\n };\n });\n\n return html` <details part=\"item\" ?open=\"${props.expanded}\" ref=\"${detailsRef}\">\n <summary\n part=\"summary\"\n :aria-expanded=\"${() => String(props.expanded.value)}\"\n :aria-disabled=\"${() => (props.disabled.value ? 'true' : 'false')}\"\n :tabindex=\"${() => (props.disabled.value ? '-1' : null)}\"\n ref=\"${summaryRef}\">\n <slot name=\"prefix\"></slot>\n <div class=\"header-content\" part=\"header\">\n <span class=\"title\" part=\"title\" id=\"${titleId}\">\n <slot name=\"title\"></slot>\n </span>\n <span class=\"subtitle\" part=\"subtitle\">\n <slot name=\"subtitle\"></slot>\n </span>\n </div>\n <slot name=\"suffix\"></slot>\n <ore-icon class=\"chevron\" name=\"chevron-down\" size=\"20\" stroke-width=\"2\" aria-hidden=\"true\"></ore-icon>\n </summary>\n <div class=\"content-wrapper\" part=\"content\" role=\"region\" aria-labelledby=\"${titleId}\">\n <div class=\"content-inner\">\n <slot></slot>\n </div>\n </div>\n </details>`;\n },\n\n styles: [coarsePointerMixin, styles],\n});\n"],"mappings":"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"}
@@ -2,69 +2,69 @@ import { coarsePointerMixin as e } from "./styles/mixins/accessibility.css.js";
2
2
  import { disablableBundle as t } from "./shared/prop-bundles.js";
3
3
  import { elementDirection as n } from "./headless/direction.js";
4
4
  import { ACCORDION_CTX as r } from "./accordion.js";
5
- import i from "./disclosure/accordion-item/accordion-item.css?inline.js";
6
- import { define as a, html as o, inject as s, prop as c, ref as l } from "@vielzeug/ore";
5
+ import i from "./disclosure/accordion-item/accordion-item.css.js";
6
+ import { define as a, getHost as o, html as s, inject as c, onMounted as l, prop as u, ref as d, useEmit as f, watchEffect as p } from "@vielzeug/ore";
7
7
  //#region src/disclosure/accordion-item/accordion-item.ts
8
- var u = "ore-accordion-item";
9
- a(u, {
8
+ var m = "ore-accordion-item";
9
+ a(m, {
10
10
  props: {
11
11
  ...t,
12
- expanded: c.bool(!1),
13
- size: c.string(),
14
- variant: c.string()
12
+ expanded: u.bool(!1),
13
+ size: u.string(),
14
+ variant: u.string()
15
15
  },
16
- setup(e, { el: t, emit: i, onMounted: a, watch: c }) {
17
- let u = s(r);
18
- u && c(() => {
16
+ setup(e) {
17
+ let t = o(), i = f(), a = p, u = c(r);
18
+ u && a(() => {
19
19
  let e = u.size.value, n = u.variant.value;
20
20
  e !== void 0 && t.setAttribute("size", e), n !== void 0 && t.setAttribute("variant", n);
21
21
  });
22
- let d = "accordion-item-title", f = l(), p = l(), m = !1, h = () => {
23
- let e = f.value;
22
+ let m = "accordion-item-title", h = d(), g = d(), _ = !1, v = () => {
23
+ let e = h.value;
24
24
  !e || e.open || (e.classList.add("opening"), e.open = !0, t.toggleAttribute("expanded", !0), i("expand", {
25
25
  expanded: !0,
26
26
  item: t
27
27
  }), requestAnimationFrame(() => {
28
28
  let t = e.querySelector(".content-inner");
29
29
  if (!t) {
30
- e.classList.remove("opening"), m = !1;
30
+ e.classList.remove("opening"), _ = !1;
31
31
  return;
32
32
  }
33
33
  let n = () => {
34
- e.classList.remove("opening"), m = !1;
34
+ e.classList.remove("opening"), _ = !1;
35
35
  }, r = t.getAnimations?.().filter((e) => e instanceof CSSTransition) ?? [];
36
36
  r.length > 0 ? Promise.allSettled(r.map((e) => e.finished)).then(n) : n();
37
37
  }));
38
- }, g = () => {
39
- let e = f.value;
40
- if (!e || !e.open || m) return;
41
- m = !0, e.classList.add("closing");
38
+ }, y = () => {
39
+ let e = h.value;
40
+ if (!e || !e.open || _) return;
41
+ _ = !0, e.classList.add("closing");
42
42
  let n = e.querySelector(".content-inner"), r = () => {
43
43
  e.classList.remove("closing"), e.open = !1, t.toggleAttribute("expanded", !1), i("collapse", {
44
44
  expanded: !1,
45
45
  item: t
46
- }), m = !1;
46
+ }), _ = !1;
47
47
  };
48
48
  if (n) {
49
49
  let e = n.getAnimations?.().filter((e) => e instanceof CSSTransition) ?? [];
50
50
  e.length > 0 ? Promise.allSettled(e.map((e) => e.finished)).then(r) : r();
51
51
  } else r();
52
- }, _ = !1, v = 0, y = () => {
52
+ }, b = !1, x = 0, S = () => {
53
53
  if (e.disabled.value) return;
54
- let t = f.value;
55
- t && (t.open ? g() : h());
56
- }, b = (e) => {
57
- v = e.touches[0]?.clientY ?? 0;
58
- }, x = (e) => {
59
- Math.abs((e.changedTouches[0]?.clientY ?? 0) - v) > 10 || (e.preventDefault(), _ = !0, y());
60
- }, S = (e) => {
61
- if (_) {
62
- _ = !1, e.preventDefault();
54
+ let t = h.value;
55
+ t && (t.open ? y() : v());
56
+ }, C = (e) => {
57
+ x = e.touches[0]?.clientY ?? 0;
58
+ }, w = (e) => {
59
+ Math.abs((e.changedTouches[0]?.clientY ?? 0) - x) > 10 || (e.preventDefault(), b = !0, S());
60
+ }, T = (e) => {
61
+ if (b) {
62
+ b = !1, e.preventDefault();
63
63
  return;
64
64
  }
65
- e.preventDefault(), y();
66
- }, C = () => {
67
- let n = f.value?.open ?? !1, r = !!e.expanded.value;
65
+ e.preventDefault(), S();
66
+ }, E = () => {
67
+ let n = h.value?.open ?? !1, r = !!e.expanded.value;
68
68
  n && !r ? (t.toggleAttribute("expanded", !0), i("expand", {
69
69
  expanded: !0,
70
70
  item: t
@@ -73,8 +73,8 @@ a(u, {
73
73
  item: t
74
74
  }));
75
75
  };
76
- return a(() => {
77
- let e = f.value, r = p.value;
76
+ return l(() => {
77
+ let e = h.value, r = g.value;
78
78
  if (!e || !r) return;
79
79
  let i = () => {
80
80
  e.classList.toggle("rtl", n(t) === "rtl");
@@ -87,19 +87,19 @@ a(u, {
87
87
  attributeFilter: ["dir"],
88
88
  attributes: !0
89
89
  });
90
- return e.addEventListener("toggle", C), r.addEventListener("touchstart", b, { passive: !0 }), r.addEventListener("touchend", x, { passive: !1 }), r.addEventListener("click", S), () => {
91
- a.disconnect(), e.removeEventListener("toggle", C), r.removeEventListener("touchstart", b), r.removeEventListener("touchend", x), r.removeEventListener("click", S);
90
+ return e.addEventListener("toggle", E), r.addEventListener("touchstart", C, { passive: !0 }), r.addEventListener("touchend", w, { passive: !1 }), r.addEventListener("click", T), () => {
91
+ a.disconnect(), e.removeEventListener("toggle", E), r.removeEventListener("touchstart", C), r.removeEventListener("touchend", w), r.removeEventListener("click", T);
92
92
  };
93
- }), o` <details part="item" ?open="${e.expanded}" ref="${f}">
93
+ }), s` <details part="item" ?open="${e.expanded}" ref="${h}">
94
94
  <summary
95
95
  part="summary"
96
96
  :aria-expanded="${() => String(e.expanded.value)}"
97
97
  :aria-disabled="${() => e.disabled.value ? "true" : "false"}"
98
98
  :tabindex="${() => e.disabled.value ? "-1" : null}"
99
- ref="${p}">
99
+ ref="${g}">
100
100
  <slot name="prefix"></slot>
101
101
  <div class="header-content" part="header">
102
- <span class="title" part="title" id="${d}">
102
+ <span class="title" part="title" id="${m}">
103
103
  <slot name="title"></slot>
104
104
  </span>
105
105
  <span class="subtitle" part="subtitle">
@@ -109,7 +109,7 @@ a(u, {
109
109
  <slot name="suffix"></slot>
110
110
  <ore-icon class="chevron" name="chevron-down" size="20" stroke-width="2" aria-hidden="true"></ore-icon>
111
111
  </summary>
112
- <div class="content-wrapper" part="content" role="region" aria-labelledby="${d}">
112
+ <div class="content-wrapper" part="content" role="region" aria-labelledby="${m}">
113
113
  <div class="content-inner">
114
114
  <slot></slot>
115
115
  </div>
@@ -119,6 +119,6 @@ a(u, {
119
119
  styles: [e, i]
120
120
  });
121
121
  //#endregion
122
- export { u as ACCORDION_ITEM_TAG };
122
+ export { m as ACCORDION_ITEM_TAG };
123
123
 
124
124
  //# sourceMappingURL=accordion-item.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"accordion-item.js","names":[],"sources":["../src/disclosure/accordion-item/accordion-item.ts"],"sourcesContent":["import { define, html, inject, prop, ref } from '@vielzeug/ore';\n\nimport type { ComponentSize, SurfaceVariant } from '../../types';\n\nimport '../../content/icon/icon';\nimport { elementDirection } from '../../headless/direction';\nimport { disablableBundle } from '../../shared';\nimport { coarsePointerMixin } from '../../styles';\nimport { ACCORDION_CTX } from '../accordion/accordion';\nimport styles from './accordion-item.css?inline';\n\n/** Accordion item component properties */\n\nexport type OreAccordionItemEvents = {\n collapse: { expanded: boolean; item: HTMLElement };\n expand: { expanded: boolean; item: HTMLElement };\n};\n\nexport type OreAccordionItemProps = {\n /** Disable accordion item interaction */\n disabled?: boolean;\n /** Whether the item is expanded/open */\n expanded?: boolean;\n /** Item size */\n size?: ComponentSize;\n /** Visual style variant */\n variant?: SurfaceVariant;\n};\n\n/**\n * An individual accordion item with expand/collapse functionality using native details/summary.\n *\n * @element ore-accordion-item\n *\n * @attr {boolean} expanded - Whether the item is expanded/open\n * @attr {boolean} disabled - Disable accordion item interaction\n * @attr {string} size - Item size: 'sm' | 'md' | 'lg'\n * @attr {string} variant - Visual variant: 'solid' | 'flat' | 'bordered' | 'outline' | 'ghost' | 'text' | 'glass' | 'frost'\n *\n * @fires expand - Emitted when item expands. detail: { expanded: boolean; item: HTMLElement }\n * @fires collapse - Emitted when item collapses. detail: { expanded: boolean; item: HTMLElement }\n *\n * @slot prefix - Content before the title (e.g., icons)\n * @slot title - Main accordion item title\n * @slot subtitle - Optional subtitle text\n * @slot suffix - Content after the title (e.g., badges)\n * @slot - Accordion item content (shown when expanded)\n *\n * @cssprop --accordion-item-bg - Background color\n * @cssprop --accordion-item-hover-bg - Background color on hover\n * @cssprop --accordion-item-border-color - Border color\n * @cssprop --accordion-item-title-color - Title text color\n * @cssprop --accordion-item-subtitle-color - Subtitle text color\n * @cssprop --accordion-item-body-color - Body text color\n * @cssprop --accordion-item-radius - Border radius\n * @cssprop --accordion-item-transition - Transition duration\n * @cssprop --accordion-item-title - Title font size\n * @cssprop --accordion-item-subtitle-size - Subtitle font size\n * @cssprop --accordion-item-body - Body font size\n * @cssprop --accordion-item-details-padding - Summary/header padding\n * @cssprop --accordion-item-summary-padding - Content padding\n *\n * @part item - Item root element.\n * @part summary - Summary trigger row.\n * @part header - Header container.\n * @part title - Title text element.\n * @part subtitle - Subtitle text element.\n * @part content - Content container.\n * @example\n * ```html\n * <ore-accordion-item><span slot=\"title\">Click to expand</span><p>Content</p></ore-accordion-item>\n * <ore-accordion-item expanded variant=\"bordered\"><span slot=\"title\">Title</span><p>Content</p></ore-accordion-item>\n * ```\n */\n\nexport const ACCORDION_ITEM_TAG = 'ore-accordion-item' as const;\ndefine<OreAccordionItemProps, OreAccordionItemEvents>(ACCORDION_ITEM_TAG, {\n props: {\n ...disablableBundle,\n expanded: prop.bool(false),\n size: prop.string<ComponentSize>(),\n variant: prop.string<SurfaceVariant>(),\n },\n\n setup(props, { el, emit, onMounted, watch }) {\n // Inherit size/variant from a parent ore-accordion when present.\n const accordionCtx = inject(ACCORDION_CTX);\n\n if (accordionCtx) {\n watch(() => {\n const size = accordionCtx.size.value;\n const variant = accordionCtx.variant.value;\n\n if (size !== undefined) el.setAttribute('size', size);\n\n if (variant !== undefined) el.setAttribute('variant', variant);\n });\n }\n\n const titleId = 'accordion-item-title';\n const detailsRef = ref<HTMLDetailsElement>();\n const summaryRef = ref<HTMLElement>();\n let isAnimating = false;\n\n const openItem = () => {\n const details = detailsRef.value;\n\n if (!details || details.open) return;\n\n details.classList.add('opening');\n details.open = true;\n\n el.toggleAttribute('expanded', true);\n emit('expand', { expanded: true, item: el });\n\n requestAnimationFrame(() => {\n const inner = details.querySelector<HTMLElement>('.content-inner');\n\n if (!inner) {\n details.classList.remove('opening');\n isAnimating = false;\n\n return;\n }\n\n const onDone = () => {\n details.classList.remove('opening');\n isAnimating = false;\n };\n const transitions = inner.getAnimations?.().filter((a) => a instanceof CSSTransition) ?? [];\n\n if (transitions.length > 0) {\n Promise.allSettled(transitions.map((a) => a.finished)).then(onDone);\n } else {\n onDone();\n }\n });\n };\n\n const closeItem = () => {\n const details = detailsRef.value;\n\n if (!details || !details.open || isAnimating) return;\n\n isAnimating = true;\n\n details.classList.add('closing');\n\n const inner = details.querySelector<HTMLElement>('.content-inner');\n const onDone = () => {\n details.classList.remove('closing');\n details.open = false;\n el.toggleAttribute('expanded', false);\n emit('collapse', { expanded: false, item: el });\n isAnimating = false;\n };\n\n if (inner) {\n const transitions = inner.getAnimations?.().filter((a) => a instanceof CSSTransition) ?? [];\n\n if (transitions.length > 0) {\n Promise.allSettled(transitions.map((a) => a.finished)).then(onDone);\n } else {\n onDone();\n }\n } else {\n onDone();\n }\n };\n\n let touchHandled = false;\n let touchStartY = 0;\n\n const toggleDetails = () => {\n if (props.disabled.value) return;\n\n const details = detailsRef.value;\n\n if (!details) return;\n\n if (details.open) {\n closeItem();\n } else {\n openItem();\n }\n };\n\n const handleSummaryTouchStart = (e: TouchEvent) => {\n touchStartY = e.touches[0]?.clientY ?? 0;\n };\n\n const handleSummaryTouchEnd = (e: TouchEvent) => {\n const dy = Math.abs((e.changedTouches[0]?.clientY ?? 0) - touchStartY);\n\n if (dy > 10) return;\n\n e.preventDefault();\n touchHandled = true;\n toggleDetails();\n };\n\n const handleSummaryClick = (e: Event) => {\n if (touchHandled) {\n touchHandled = false;\n e.preventDefault();\n\n return;\n }\n\n e.preventDefault();\n toggleDetails();\n };\n\n const handleToggle = () => {\n // Only fires for programmatic open/close (e.g. from accordion parent)\n const isOpen = detailsRef.value?.open ?? false;\n const wasExpanded = Boolean(props.expanded.value);\n\n if (isOpen && !wasExpanded) {\n el.toggleAttribute('expanded', true);\n emit('expand', { expanded: true, item: el });\n } else if (!isOpen && wasExpanded) {\n el.toggleAttribute('expanded', false);\n emit('collapse', { expanded: false, item: el });\n }\n };\n\n onMounted(() => {\n const details = detailsRef.value;\n const summary = summaryRef.value;\n\n if (!details || !summary) return;\n\n // Detect RTL so plain CSS classes can target it (see `elementDirection` for the\n // ancestor-dir / computed-style resolution rule).\n const checkRTL = () => {\n details.classList.toggle('rtl', elementDirection(el) === 'rtl');\n };\n\n // Check initially\n checkRTL();\n\n // Re-check when `dir` changes on this element's own ancestor chain (not the whole\n // document — `elementDirection` only ever looks at `el`'s ancestors, so that's all we\n // need to watch).\n const observer = new MutationObserver((mutations) => {\n const dirChanged = mutations.some((m) => m.attributeName === 'dir');\n\n if (dirChanged) {\n checkRTL();\n }\n });\n\n for (let ancestor: Element | null = el; ancestor; ancestor = ancestor.parentElement) {\n observer.observe(ancestor, { attributeFilter: ['dir'], attributes: true });\n }\n\n details.addEventListener('toggle', handleToggle);\n summary.addEventListener('touchstart', handleSummaryTouchStart, { passive: true });\n summary.addEventListener('touchend', handleSummaryTouchEnd, { passive: false });\n summary.addEventListener('click', handleSummaryClick);\n\n return () => {\n observer.disconnect();\n details.removeEventListener('toggle', handleToggle);\n summary.removeEventListener('touchstart', handleSummaryTouchStart);\n summary.removeEventListener('touchend', handleSummaryTouchEnd);\n summary.removeEventListener('click', handleSummaryClick);\n };\n });\n\n return html` <details part=\"item\" ?open=\"${props.expanded}\" ref=\"${detailsRef}\">\n <summary\n part=\"summary\"\n :aria-expanded=\"${() => String(props.expanded.value)}\"\n :aria-disabled=\"${() => (props.disabled.value ? 'true' : 'false')}\"\n :tabindex=\"${() => (props.disabled.value ? '-1' : null)}\"\n ref=\"${summaryRef}\">\n <slot name=\"prefix\"></slot>\n <div class=\"header-content\" part=\"header\">\n <span class=\"title\" part=\"title\" id=\"${titleId}\">\n <slot name=\"title\"></slot>\n </span>\n <span class=\"subtitle\" part=\"subtitle\">\n <slot name=\"subtitle\"></slot>\n </span>\n </div>\n <slot name=\"suffix\"></slot>\n <ore-icon class=\"chevron\" name=\"chevron-down\" size=\"20\" stroke-width=\"2\" aria-hidden=\"true\"></ore-icon>\n </summary>\n <div class=\"content-wrapper\" part=\"content\" role=\"region\" aria-labelledby=\"${titleId}\">\n <div class=\"content-inner\">\n <slot></slot>\n </div>\n </div>\n </details>`;\n },\n\n styles: [coarsePointerMixin, styles],\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"accordion-item.js","names":[],"sources":["../src/disclosure/accordion-item/accordion-item.ts"],"sourcesContent":["import { define, html, inject, prop, ref, getHost, onMounted, useEmit, watchEffect } from '@vielzeug/ore';\n\nimport type { ComponentSize, SurfaceVariant } from '../../types';\n\nimport '../../content/icon/icon';\nimport { elementDirection } from '../../headless/direction';\nimport { disablableBundle } from '../../shared';\nimport { coarsePointerMixin } from '../../styles';\nimport { ACCORDION_CTX } from '../accordion/accordion';\nimport styles from './accordion-item.css?inline';\n\n/** Accordion item component properties */\n\nexport type OreAccordionItemEvents = {\n collapse: { expanded: boolean; item: HTMLElement };\n expand: { expanded: boolean; item: HTMLElement };\n};\n\nexport type OreAccordionItemProps = {\n /** Disable accordion item interaction */\n disabled?: boolean;\n /** Whether the item is expanded/open */\n expanded?: boolean;\n /** Item size */\n size?: ComponentSize;\n /** Visual style variant */\n variant?: SurfaceVariant;\n};\n\n/**\n * An individual accordion item with expand/collapse functionality using native details/summary.\n *\n * @element ore-accordion-item\n *\n * @attr {boolean} expanded - Whether the item is expanded/open\n * @attr {boolean} disabled - Disable accordion item interaction\n * @attr {string} size - Item size: 'sm' | 'md' | 'lg'\n * @attr {string} variant - Visual variant: 'solid' | 'flat' | 'bordered' | 'outline' | 'ghost' | 'text' | 'glass' | 'frost'\n *\n * @fires expand - Emitted when item expands. detail: { expanded: boolean; item: HTMLElement }\n * @fires collapse - Emitted when item collapses. detail: { expanded: boolean; item: HTMLElement }\n *\n * @slot prefix - Content before the title (e.g., icons)\n * @slot title - Main accordion item title\n * @slot subtitle - Optional subtitle text\n * @slot suffix - Content after the title (e.g., badges)\n * @slot - Accordion item content (shown when expanded)\n *\n * @cssprop --accordion-item-bg - Background color\n * @cssprop --accordion-item-hover-bg - Background color on hover\n * @cssprop --accordion-item-border-color - Border color\n * @cssprop --accordion-item-title-color - Title text color\n * @cssprop --accordion-item-subtitle-color - Subtitle text color\n * @cssprop --accordion-item-body-color - Body text color\n * @cssprop --accordion-item-radius - Border radius\n * @cssprop --accordion-item-transition - Transition duration\n * @cssprop --accordion-item-title - Title font size\n * @cssprop --accordion-item-subtitle-size - Subtitle font size\n * @cssprop --accordion-item-body - Body font size\n * @cssprop --accordion-item-details-padding - Summary/header padding\n * @cssprop --accordion-item-summary-padding - Content padding\n *\n * @part item - Item root element.\n * @part summary - Summary trigger row.\n * @part header - Header container.\n * @part title - Title text element.\n * @part subtitle - Subtitle text element.\n * @part content - Content container.\n * @example\n * ```html\n * <ore-accordion-item><span slot=\"title\">Click to expand</span><p>Content</p></ore-accordion-item>\n * <ore-accordion-item expanded variant=\"bordered\"><span slot=\"title\">Title</span><p>Content</p></ore-accordion-item>\n * ```\n */\n\nexport const ACCORDION_ITEM_TAG = 'ore-accordion-item' as const;\ndefine<OreAccordionItemProps>(ACCORDION_ITEM_TAG, {\n props: {\n ...disablableBundle,\n expanded: prop.bool(false),\n size: prop.string<ComponentSize>(),\n variant: prop.string<SurfaceVariant>(),\n },\n\n setup(props) {\n const el = getHost();\n const emit = useEmit<OreAccordionItemEvents>();\n const watch = watchEffect;\n\n // Inherit size/variant from a parent ore-accordion when present.\n const accordionCtx = inject(ACCORDION_CTX);\n\n if (accordionCtx) {\n watch(() => {\n const size = accordionCtx.size.value;\n const variant = accordionCtx.variant.value;\n\n if (size !== undefined) el.setAttribute('size', size);\n\n if (variant !== undefined) el.setAttribute('variant', variant);\n });\n }\n\n const titleId = 'accordion-item-title';\n const detailsRef = ref<HTMLDetailsElement>();\n const summaryRef = ref<HTMLElement>();\n let isAnimating = false;\n\n const openItem = () => {\n const details = detailsRef.value;\n\n if (!details || details.open) return;\n\n details.classList.add('opening');\n details.open = true;\n\n el.toggleAttribute('expanded', true);\n emit('expand', { expanded: true, item: el });\n\n requestAnimationFrame(() => {\n const inner = details.querySelector<HTMLElement>('.content-inner');\n\n if (!inner) {\n details.classList.remove('opening');\n isAnimating = false;\n\n return;\n }\n\n const onDone = () => {\n details.classList.remove('opening');\n isAnimating = false;\n };\n const transitions = inner.getAnimations?.().filter((a) => a instanceof CSSTransition) ?? [];\n\n if (transitions.length > 0) {\n Promise.allSettled(transitions.map((a) => a.finished)).then(onDone);\n } else {\n onDone();\n }\n });\n };\n\n const closeItem = () => {\n const details = detailsRef.value;\n\n if (!details || !details.open || isAnimating) return;\n\n isAnimating = true;\n\n details.classList.add('closing');\n\n const inner = details.querySelector<HTMLElement>('.content-inner');\n const onDone = () => {\n details.classList.remove('closing');\n details.open = false;\n el.toggleAttribute('expanded', false);\n emit('collapse', { expanded: false, item: el });\n isAnimating = false;\n };\n\n if (inner) {\n const transitions = inner.getAnimations?.().filter((a) => a instanceof CSSTransition) ?? [];\n\n if (transitions.length > 0) {\n Promise.allSettled(transitions.map((a) => a.finished)).then(onDone);\n } else {\n onDone();\n }\n } else {\n onDone();\n }\n };\n\n let touchHandled = false;\n let touchStartY = 0;\n\n const toggleDetails = () => {\n if (props.disabled.value) return;\n\n const details = detailsRef.value;\n\n if (!details) return;\n\n if (details.open) {\n closeItem();\n } else {\n openItem();\n }\n };\n\n const handleSummaryTouchStart = (e: TouchEvent) => {\n touchStartY = e.touches[0]?.clientY ?? 0;\n };\n\n const handleSummaryTouchEnd = (e: TouchEvent) => {\n const dy = Math.abs((e.changedTouches[0]?.clientY ?? 0) - touchStartY);\n\n if (dy > 10) return;\n\n e.preventDefault();\n touchHandled = true;\n toggleDetails();\n };\n\n const handleSummaryClick = (e: Event) => {\n if (touchHandled) {\n touchHandled = false;\n e.preventDefault();\n\n return;\n }\n\n e.preventDefault();\n toggleDetails();\n };\n\n const handleToggle = () => {\n // Only fires for programmatic open/close (e.g. from accordion parent)\n const isOpen = detailsRef.value?.open ?? false;\n const wasExpanded = Boolean(props.expanded.value);\n\n if (isOpen && !wasExpanded) {\n el.toggleAttribute('expanded', true);\n emit('expand', { expanded: true, item: el });\n } else if (!isOpen && wasExpanded) {\n el.toggleAttribute('expanded', false);\n emit('collapse', { expanded: false, item: el });\n }\n };\n\n onMounted(() => {\n const details = detailsRef.value;\n const summary = summaryRef.value;\n\n if (!details || !summary) return;\n\n // Detect RTL so plain CSS classes can target it (see `elementDirection` for the\n // ancestor-dir / computed-style resolution rule).\n const checkRTL = () => {\n details.classList.toggle('rtl', elementDirection(el) === 'rtl');\n };\n\n // Check initially\n checkRTL();\n\n // Re-check when `dir` changes on this element's own ancestor chain (not the whole\n // document — `elementDirection` only ever looks at `el`'s ancestors, so that's all we\n // need to watch).\n const observer = new MutationObserver((mutations) => {\n const dirChanged = mutations.some((m) => m.attributeName === 'dir');\n\n if (dirChanged) {\n checkRTL();\n }\n });\n\n for (let ancestor: Element | null = el; ancestor; ancestor = ancestor.parentElement) {\n observer.observe(ancestor, { attributeFilter: ['dir'], attributes: true });\n }\n\n details.addEventListener('toggle', handleToggle);\n summary.addEventListener('touchstart', handleSummaryTouchStart, { passive: true });\n summary.addEventListener('touchend', handleSummaryTouchEnd, { passive: false });\n summary.addEventListener('click', handleSummaryClick);\n\n return () => {\n observer.disconnect();\n details.removeEventListener('toggle', handleToggle);\n summary.removeEventListener('touchstart', handleSummaryTouchStart);\n summary.removeEventListener('touchend', handleSummaryTouchEnd);\n summary.removeEventListener('click', handleSummaryClick);\n };\n });\n\n return html` <details part=\"item\" ?open=\"${props.expanded}\" ref=\"${detailsRef}\">\n <summary\n part=\"summary\"\n :aria-expanded=\"${() => String(props.expanded.value)}\"\n :aria-disabled=\"${() => (props.disabled.value ? 'true' : 'false')}\"\n :tabindex=\"${() => (props.disabled.value ? '-1' : null)}\"\n ref=\"${summaryRef}\">\n <slot name=\"prefix\"></slot>\n <div class=\"header-content\" part=\"header\">\n <span class=\"title\" part=\"title\" id=\"${titleId}\">\n <slot name=\"title\"></slot>\n </span>\n <span class=\"subtitle\" part=\"subtitle\">\n <slot name=\"subtitle\"></slot>\n </span>\n </div>\n <slot name=\"suffix\"></slot>\n <ore-icon class=\"chevron\" name=\"chevron-down\" size=\"20\" stroke-width=\"2\" aria-hidden=\"true\"></ore-icon>\n </summary>\n <div class=\"content-wrapper\" part=\"content\" role=\"region\" aria-labelledby=\"${titleId}\">\n <div class=\"content-inner\">\n <slot></slot>\n </div>\n </div>\n </details>`;\n },\n\n styles: [coarsePointerMixin, styles],\n});\n"],"mappings":";;;;;;;AA2EA,IAAa,IAAqB;AAClC,EAA8B,GAAoB;CAChD,OAAO;EACL,GAAG;EACH,UAAU,EAAK,KAAK,EAAK;EACzB,MAAM,EAAK,OAAsB;EACjC,SAAS,EAAK,OAAuB;CACvC;CAEA,MAAM,GAAO;EACX,IAAM,IAAK,EAAQ,GACb,IAAO,EAAgC,GACvC,IAAQ,GAGR,IAAe,EAAO,CAAa;EAEzC,AAAI,KACF,QAAY;GACV,IAAM,IAAO,EAAa,KAAK,OACzB,IAAU,EAAa,QAAQ;GAIrC,AAFI,MAAS,KAAA,KAAW,EAAG,aAAa,QAAQ,CAAI,GAEhD,MAAY,KAAA,KAAW,EAAG,aAAa,WAAW,CAAO;EAC/D,CAAC;EAGH,IAAM,IAAU,wBACV,IAAa,EAAwB,GACrC,IAAa,EAAiB,GAChC,IAAc,IAEZ,UAAiB;GACrB,IAAM,IAAU,EAAW;GAEvB,CAAC,KAAW,EAAQ,SAExB,EAAQ,UAAU,IAAI,SAAS,GAC/B,EAAQ,OAAO,IAEf,EAAG,gBAAgB,YAAY,EAAI,GACnC,EAAK,UAAU;IAAE,UAAU;IAAM,MAAM;GAAG,CAAC,GAE3C,4BAA4B;IAC1B,IAAM,IAAQ,EAAQ,cAA2B,gBAAgB;IAEjE,IAAI,CAAC,GAAO;KAEV,AADA,EAAQ,UAAU,OAAO,SAAS,GAClC,IAAc;KAEd;IACF;IAEA,IAAM,UAAe;KAEnB,AADA,EAAQ,UAAU,OAAO,SAAS,GAClC,IAAc;IAChB,GACM,IAAc,EAAM,gBAAgB,CAAC,CAAC,QAAQ,MAAM,aAAa,aAAa,KAAK,CAAC;IAE1F,AAAI,EAAY,SAAS,IACvB,QAAQ,WAAW,EAAY,KAAK,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAM,IAElE,EAAO;GAEX,CAAC;EACH,GAEM,UAAkB;GACtB,IAAM,IAAU,EAAW;GAE3B,IAAI,CAAC,KAAW,CAAC,EAAQ,QAAQ,GAAa;GAI9C,AAFA,IAAc,IAEd,EAAQ,UAAU,IAAI,SAAS;GAE/B,IAAM,IAAQ,EAAQ,cAA2B,gBAAgB,GAC3D,UAAe;IAKnB,AAJA,EAAQ,UAAU,OAAO,SAAS,GAClC,EAAQ,OAAO,IACf,EAAG,gBAAgB,YAAY,EAAK,GACpC,EAAK,YAAY;KAAE,UAAU;KAAO,MAAM;IAAG,CAAC,GAC9C,IAAc;GAChB;GAEA,IAAI,GAAO;IACT,IAAM,IAAc,EAAM,gBAAgB,CAAC,CAAC,QAAQ,MAAM,aAAa,aAAa,KAAK,CAAC;IAE1F,AAAI,EAAY,SAAS,IACvB,QAAQ,WAAW,EAAY,KAAK,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAM,IAElE,EAAO;GAEX,OACE,EAAO;EAEX,GAEI,IAAe,IACf,IAAc,GAEZ,UAAsB;GAC1B,IAAI,EAAM,SAAS,OAAO;GAE1B,IAAM,IAAU,EAAW;GAEtB,MAED,EAAQ,OACV,EAAU,IAEV,EAAS;EAEb,GAEM,KAA2B,MAAkB;GACjD,IAAc,EAAE,QAAQ,EAAE,EAAE,WAAW;EACzC,GAEM,KAAyB,MAAkB;GACpC,KAAK,KAAK,EAAE,eAAe,EAAE,EAAE,WAAW,KAAK,CAEtD,IAAK,OAET,EAAE,eAAe,GACjB,IAAe,IACf,EAAc;EAChB,GAEM,KAAsB,MAAa;GACvC,IAAI,GAAc;IAEhB,AADA,IAAe,IACf,EAAE,eAAe;IAEjB;GACF;GAGA,AADA,EAAE,eAAe,GACjB,EAAc;EAChB,GAEM,UAAqB;GAEzB,IAAM,IAAS,EAAW,OAAO,QAAQ,IACnC,IAAc,EAAQ,EAAM,SAAS;GAE3C,AAAI,KAAU,CAAC,KACb,EAAG,gBAAgB,YAAY,EAAI,GACnC,EAAK,UAAU;IAAE,UAAU;IAAM,MAAM;GAAG,CAAC,KAClC,CAAC,KAAU,MACpB,EAAG,gBAAgB,YAAY,EAAK,GACpC,EAAK,YAAY;IAAE,UAAU;IAAO,MAAM;GAAG,CAAC;EAElD;EA8CA,OA5CA,QAAgB;GACd,IAAM,IAAU,EAAW,OACrB,IAAU,EAAW;GAE3B,IAAI,CAAC,KAAW,CAAC,GAAS;GAI1B,IAAM,UAAiB;IACrB,EAAQ,UAAU,OAAO,OAAO,EAAiB,CAAE,MAAM,KAAK;GAChE;GAGA,EAAS;GAKT,IAAM,IAAW,IAAI,kBAAkB,MAAc;IAGnD,AAFmB,EAAU,MAAM,MAAM,EAAE,kBAAkB,KAEzD,KACF,EAAS;GAEb,CAAC;GAED,KAAK,IAAI,IAA2B,GAAI,GAAU,IAAW,EAAS,eACpE,EAAS,QAAQ,GAAU;IAAE,iBAAiB,CAAC,KAAK;IAAG,YAAY;GAAK,CAAC;GAQ3E,OALA,EAAQ,iBAAiB,UAAU,CAAY,GAC/C,EAAQ,iBAAiB,cAAc,GAAyB,EAAE,SAAS,GAAK,CAAC,GACjF,EAAQ,iBAAiB,YAAY,GAAuB,EAAE,SAAS,GAAM,CAAC,GAC9E,EAAQ,iBAAiB,SAAS,CAAkB,SAEvC;IAKX,AAJA,EAAS,WAAW,GACpB,EAAQ,oBAAoB,UAAU,CAAY,GAClD,EAAQ,oBAAoB,cAAc,CAAuB,GACjE,EAAQ,oBAAoB,YAAY,CAAqB,GAC7D,EAAQ,oBAAoB,SAAS,CAAkB;GACzD;EACF,CAAC,GAEM,CAAI,gCAAgC,EAAM,SAAS,SAAS,EAAW;;;gCAGlD,OAAO,EAAM,SAAS,KAAK,EAAE;gCAC5B,EAAM,SAAS,QAAQ,SAAS,QAAS;2BAC9C,EAAM,SAAS,QAAQ,OAAO,KAAM;eACjD,EAAW;;;iDAGuB,EAAQ;;;;;;;;;;mFAU0B,EAAQ;;;;;;CAMzF;CAEA,QAAQ,CAAC,GAAoB,CAAM;AACrC,CAAC"}
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./headless/nav.cjs"),t=require("./disclosure/accordion/accordion.css?inline.cjs");let n=require("@vielzeug/ore"),r=require("@vielzeug/ripple");var i=(0,n.createContext)(`AccordionContext`),a=`ore-accordion`;(0,n.define)(a,{props:{selectionMode:n.prop.string(),size:n.prop.string(),variant:n.prop.string()},setup(t,{bind:a,el:o,emit:s,provide:c}){let l=e=>{t.selectionMode.value===`single`&&(o.querySelectorAll(`:scope > ore-accordion-item[expanded]`).forEach(t=>{t!==e&&t.hasAttribute(`expanded`)&&t.removeAttribute(`expanded`)}),s(`change`,{expandedItem:e}))},u=()=>[...o.querySelectorAll(`:scope > ore-accordion-item:not([disabled])`)],d=()=>u().map(e=>e.shadowRoot?.querySelector(`summary`)).filter(Boolean),f=e.createListControl({getItems:()=>u(),loop:!0,onNavigate:(e,t)=>{d()[t]?.focus()}});return c(i,{selectionMode:(0,r.computed)(()=>t.selectionMode.value),size:t.size,variant:t.variant}),a({on:{expand:e=>{let t=e.composedPath().find(e=>e instanceof HTMLElement),n=e.detail?.item??t;!n||n.localName!==`ore-accordion-item`||n.closest(`ore-accordion`)===o&&l(n)},keydown:e=>{let t=d();if(!t.length)return;let n=e.composedPath().find(e=>e instanceof HTMLElement&&e.localName===`summary`),r=n?t.indexOf(n):-1;r!==-1&&(f.set(r),f.handleKeydown(e))}}}),n.html`<slot></slot>`},styles:[t.default]}),exports.ACCORDION_CTX=i,exports.ACCORDION_TAG=a;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./headless/nav.cjs"),t=require("./disclosure/accordion/accordion.css.cjs");let n=require("@vielzeug/ore"),r=require("@vielzeug/ripple");var i=(0,n.createContext)(`AccordionContext`),a=`ore-accordion`;(0,n.define)(a,{props:{selectionMode:n.prop.string(),size:n.prop.string(),variant:n.prop.string()},setup(t){let a=(0,n.getHost)(),o=(0,n.useEmit)(),s=e=>{t.selectionMode.value===`single`&&(a.querySelectorAll(`:scope > ore-accordion-item[expanded]`).forEach(t=>{t!==e&&t.hasAttribute(`expanded`)&&t.removeAttribute(`expanded`)}),o(`change`,{expandedItem:e}))},c=()=>[...a.querySelectorAll(`:scope > ore-accordion-item:not([disabled])`)],l=()=>c().map(e=>e.shadowRoot?.querySelector(`summary`)).filter(Boolean),u=e.createListControl({getItems:()=>c(),loop:!0,onNavigate:(e,t)=>{l()[t]?.focus()}});return(0,n.provide)(i,{selectionMode:(0,r.computed)(()=>t.selectionMode.value),size:t.size,variant:t.variant}),(0,n.bind)({on:{expand:e=>{let t=e.composedPath().find(e=>e instanceof HTMLElement),n=e.detail?.item??t;!n||n.localName!==`ore-accordion-item`||n.closest(`ore-accordion`)===a&&s(n)},keydown:e=>{let t=l();if(!t.length)return;let n=e.composedPath().find(e=>e instanceof HTMLElement&&e.localName===`summary`),r=n?t.indexOf(n):-1;r!==-1&&(u.set(r),u.handleKeydown(e))}}}),n.html`<slot></slot>`},styles:[t.default]}),exports.ACCORDION_CTX=i,exports.ACCORDION_TAG=a;
2
2
  //# sourceMappingURL=accordion.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"accordion.cjs","names":[],"sources":["../src/disclosure/accordion/accordion.ts"],"sourcesContent":["import { createContext, define, html, prop } from '@vielzeug/ore';\nimport { computed, type Readable } from '@vielzeug/ripple';\n\nimport type { ComponentSize, SurfaceVariant } from '../../types';\n\nimport { createListControl } from '../../headless';\nimport styles from './accordion.css?inline';\n\n/** Context provided by ore-accordion to its ore-accordion-item children. */\nexport type AccordionContext = {\n selectionMode: Readable<'single' | 'multiple' | undefined>;\n size: Readable<ComponentSize | undefined>;\n variant: Readable<SurfaceVariant | undefined>;\n};\n/** Injection key for the accordion context. */\nexport const ACCORDION_CTX = createContext<AccordionContext>('AccordionContext');\n\n/** Accordion component properties */\n\nexport type OreAccordionEvents = {\n change: { expandedItem: HTMLElement };\n};\n\nexport type OreAccordionProps = {\n /** Selection mode (single = only one opens, multiple = multiple can be open) */\n selectionMode?: 'single' | 'multiple';\n /** Size for all items (propagated via context) */\n size?: ComponentSize;\n /** Visual variant for all items (propagated via context) */\n variant?: SurfaceVariant;\n};\n\n/**\n * A container for accordion items with single or multiple selection modes.\n *\n * @element ore-accordion\n * @element ore-accordion-item - Child element for each collapsible panel\n *\n * @attr {string} selection-mode - Selection mode: 'single' | 'multiple'\n * @attr {string} size - Size for all items: 'sm' | 'md' | 'lg' (propagated to children)\n * @attr {string} variant - Visual variant: 'solid' | 'flat' | 'bordered' | 'text' | 'glass' | 'frost' (propagated to children)\n *\n * @fires expand - Emitted when an item expands. detail: { expanded: boolean; item: HTMLElement }\n * @fires change - Emitted when selection changes (single mode). detail: { expandedItem: HTMLElement }\n *\n * @slot - `ore-accordion-item` elements\n *\n * @cssprop --accordion-bg - Container background color (solid/flat/glass/frost variants)\n * @cssprop --accordion-border-color - Container border color (solid/flat variants)\n * @cssprop --accordion-divider-color - Divider color between items (text variant)\n * @cssprop --accordion-shadow - Container box shadow\n * @example\n * ```html\n * <ore-accordion selection-mode=\"single\">\n * <ore-accordion-item>\n * <span slot=\"title\">What is Refine?</span>\n * <p>Refine is a headless web component library.</p>\n * </ore-accordion-item>\n * <ore-accordion-item>\n * <span slot=\"title\">How do I install it?</span>\n * <p>Run <code>npm install @vielzeug/refine</code>.</p>\n * </ore-accordion-item>\n * </ore-accordion>\n * <ore-accordion variant=\"bordered\" selection-mode=\"multiple\">\n * <ore-accordion-item expanded><span slot=\"title\">Open by default</span><p>Content</p></ore-accordion-item>\n * </ore-accordion>\n * ```\n */\n\nexport const ACCORDION_TAG = 'ore-accordion' as const;\ndefine<OreAccordionProps, OreAccordionEvents>(ACCORDION_TAG, {\n props: {\n selectionMode: prop.string<'single' | 'multiple'>(),\n size: prop.string<ComponentSize>(),\n variant: prop.string<SurfaceVariant>(),\n },\n\n setup(props, { bind, el, emit, provide }) {\n const handleSelectionMode = (expandedItem: HTMLElement) => {\n if (props.selectionMode.value !== 'single') return;\n\n el.querySelectorAll(':scope > ore-accordion-item[expanded]').forEach((item) => {\n if (item !== expandedItem && item.hasAttribute('expanded')) {\n item.removeAttribute('expanded');\n }\n });\n\n emit('change', { expandedItem });\n };\n\n const getAccordionItems = () => {\n return [...el.querySelectorAll<HTMLElement>(':scope > ore-accordion-item:not([disabled])')];\n };\n\n const getSummaryElements = () => {\n return getAccordionItems()\n .map((item) => item.shadowRoot?.querySelector<HTMLElement>('summary'))\n .filter(Boolean) as HTMLElement[];\n };\n\n const listControl = createListControl({\n getItems: () => getAccordionItems(),\n loop: true,\n onNavigate: (_action, index) => {\n const summaries = getSummaryElements();\n\n summaries[index]?.focus();\n },\n });\n\n provide(ACCORDION_CTX, {\n selectionMode: computed(() => props.selectionMode.value),\n size: props.size,\n variant: props.variant,\n });\n\n // Group-level event and keyboard handling for WAI-ARIA Accordion pattern\n\n bind({\n on: {\n expand: (event: Event) => {\n const eventTarget = event.composedPath().find((node): node is HTMLElement => node instanceof HTMLElement);\n const expandedItem = (event as CustomEvent<{ item?: HTMLElement }>).detail?.item ?? eventTarget;\n\n if (!expandedItem || expandedItem.localName !== 'ore-accordion-item') return;\n\n // Guard: only respond to accordion-items that belong to THIS accordion instance\n if (expandedItem.closest('ore-accordion') !== el) return;\n\n handleSelectionMode(expandedItem);\n },\n keydown: (evt: KeyboardEvent) => {\n const summaries = getSummaryElements();\n\n if (!summaries.length) return;\n\n const activeSummary = evt\n .composedPath()\n .find((node): node is HTMLElement => node instanceof HTMLElement && node.localName === 'summary');\n const focused = activeSummary ? summaries.indexOf(activeSummary) : -1;\n\n if (focused === -1) return; // focus is not on a summary — let native handling proceed\n\n listControl.set(focused);\n listControl.handleKeydown(evt);\n },\n },\n });\n\n return html`<slot></slot>`;\n },\n\n styles: [styles],\n});\n"],"mappings":"mOAeA,IAAa,GAAA,EAAA,EAAA,cAAA,CAAgD,kBAAkB,EAsDlE,EAAgB,6BACiB,EAAe,CAC3D,MAAO,CACL,cAAe,EAAA,KAAK,OAA8B,EAClD,KAAM,EAAA,KAAK,OAAsB,EACjC,QAAS,EAAA,KAAK,OAAuB,CACvC,EAEA,MAAM,EAAO,CAAE,OAAM,KAAI,OAAM,WAAW,CACxC,IAAM,EAAuB,GAA8B,CACrD,EAAM,cAAc,QAAU,WAElC,EAAG,iBAAiB,uCAAuC,CAAC,CAAC,QAAS,GAAS,CACzE,IAAS,GAAgB,EAAK,aAAa,UAAU,GACvD,EAAK,gBAAgB,UAAU,CAEnC,CAAC,EAED,EAAK,SAAU,CAAE,cAAa,CAAC,EACjC,EAEM,MACG,CAAC,GAAG,EAAG,iBAA8B,6CAA6C,CAAC,EAGtF,MACG,EAAkB,CAAC,CACvB,IAAK,GAAS,EAAK,YAAY,cAA2B,SAAS,CAAC,CAAC,CACrE,OAAO,OAAO,EAGb,EAAc,EAAA,kBAAkB,CACpC,aAAgB,EAAkB,EAClC,KAAM,GACN,YAAa,EAAS,IAAU,CAG9B,EAAA,CAAA,CAAU,EAAM,EAAE,MAAM,CAC1B,CACF,CAAC,EAyCD,OAvCA,EAAQ,EAAe,CACrB,eAAA,EAAA,EAAA,SAAA,KAA8B,EAAM,cAAc,KAAK,EACvD,KAAM,EAAM,KACZ,QAAS,EAAM,OACjB,CAAC,EAID,EAAK,CACH,GAAI,CACF,OAAS,GAAiB,CACxB,IAAM,EAAc,EAAM,aAAa,CAAC,CAAC,KAAM,GAA8B,aAAgB,WAAW,EAClG,EAAgB,EAA8C,QAAQ,MAAQ,EAEhF,CAAC,GAAgB,EAAa,YAAc,sBAG5C,EAAa,QAAQ,eAAe,IAAM,GAE9C,EAAoB,CAAY,CAClC,EACA,QAAU,GAAuB,CAC/B,IAAM,EAAY,EAAmB,EAErC,GAAI,CAAC,EAAU,OAAQ,OAEvB,IAAM,EAAgB,EACnB,aAAa,CAAC,CACd,KAAM,GAA8B,aAAgB,aAAe,EAAK,YAAc,SAAS,EAC5F,EAAU,EAAgB,EAAU,QAAQ,CAAa,EAAI,GAE/D,IAAY,KAEhB,EAAY,IAAI,CAAO,EACvB,EAAY,cAAc,CAAG,EAC/B,CACF,CACF,CAAC,EAEM,EAAA,IAAI,eACb,EAEA,OAAQ,CAAC,EAAA,OAAM,CACjB,CAAC"}
1
+ {"version":3,"file":"accordion.cjs","names":[],"sources":["../src/disclosure/accordion/accordion.ts"],"sourcesContent":["import { createContext, define, html, prop, bind, getHost, provide, useEmit } from '@vielzeug/ore';\nimport { computed, type Readable } from '@vielzeug/ripple';\n\nimport type { ComponentSize, SurfaceVariant } from '../../types';\n\nimport { createListControl } from '../../headless';\nimport styles from './accordion.css?inline';\n\n/** Context provided by ore-accordion to its ore-accordion-item children. */\nexport type AccordionContext = {\n selectionMode: Readable<'single' | 'multiple' | undefined>;\n size: Readable<ComponentSize | undefined>;\n variant: Readable<SurfaceVariant | undefined>;\n};\n/** Injection key for the accordion context. */\nexport const ACCORDION_CTX = createContext<AccordionContext>('AccordionContext');\n\n/** Accordion component properties */\n\nexport type OreAccordionEvents = {\n change: { expandedItem: HTMLElement };\n};\n\nexport type OreAccordionProps = {\n /** Selection mode (single = only one opens, multiple = multiple can be open) */\n selectionMode?: 'single' | 'multiple';\n /** Size for all items (propagated via context) */\n size?: ComponentSize;\n /** Visual variant for all items (propagated via context) */\n variant?: SurfaceVariant;\n};\n\n/**\n * A container for accordion items with single or multiple selection modes.\n *\n * @element ore-accordion\n * @element ore-accordion-item - Child element for each collapsible panel\n *\n * @attr {string} selection-mode - Selection mode: 'single' | 'multiple'\n * @attr {string} size - Size for all items: 'sm' | 'md' | 'lg' (propagated to children)\n * @attr {string} variant - Visual variant: 'solid' | 'flat' | 'bordered' | 'text' | 'glass' | 'frost' (propagated to children)\n *\n * @fires expand - Emitted when an item expands. detail: { expanded: boolean; item: HTMLElement }\n * @fires change - Emitted when selection changes (single mode). detail: { expandedItem: HTMLElement }\n *\n * @slot - `ore-accordion-item` elements\n *\n * @cssprop --accordion-bg - Container background color (solid/flat/glass/frost variants)\n * @cssprop --accordion-border-color - Container border color (solid/flat variants)\n * @cssprop --accordion-divider-color - Divider color between items (text variant)\n * @cssprop --accordion-shadow - Container box shadow\n * @example\n * ```html\n * <ore-accordion selection-mode=\"single\">\n * <ore-accordion-item>\n * <span slot=\"title\">What is Refine?</span>\n * <p>Refine is a headless web component library.</p>\n * </ore-accordion-item>\n * <ore-accordion-item>\n * <span slot=\"title\">How do I install it?</span>\n * <p>Run <code>npm install @vielzeug/refine</code>.</p>\n * </ore-accordion-item>\n * </ore-accordion>\n * <ore-accordion variant=\"bordered\" selection-mode=\"multiple\">\n * <ore-accordion-item expanded><span slot=\"title\">Open by default</span><p>Content</p></ore-accordion-item>\n * </ore-accordion>\n * ```\n */\n\nexport const ACCORDION_TAG = 'ore-accordion' as const;\ndefine<OreAccordionProps>(ACCORDION_TAG, {\n props: {\n selectionMode: prop.string<'single' | 'multiple'>(),\n size: prop.string<ComponentSize>(),\n variant: prop.string<SurfaceVariant>(),\n },\n\n setup(props) {\n const el = getHost();\n const emit = useEmit<OreAccordionEvents>();\n\n const handleSelectionMode = (expandedItem: HTMLElement) => {\n if (props.selectionMode.value !== 'single') return;\n\n el.querySelectorAll(':scope > ore-accordion-item[expanded]').forEach((item) => {\n if (item !== expandedItem && item.hasAttribute('expanded')) {\n item.removeAttribute('expanded');\n }\n });\n\n emit('change', { expandedItem });\n };\n\n const getAccordionItems = () => {\n return [...el.querySelectorAll<HTMLElement>(':scope > ore-accordion-item:not([disabled])')];\n };\n\n const getSummaryElements = () => {\n return getAccordionItems()\n .map((item) => item.shadowRoot?.querySelector<HTMLElement>('summary'))\n .filter(Boolean) as HTMLElement[];\n };\n\n const listControl = createListControl({\n getItems: () => getAccordionItems(),\n loop: true,\n onNavigate: (_action, index) => {\n const summaries = getSummaryElements();\n\n summaries[index]?.focus();\n },\n });\n\n provide(ACCORDION_CTX, {\n selectionMode: computed(() => props.selectionMode.value),\n size: props.size,\n variant: props.variant,\n });\n\n // Group-level event and keyboard handling for WAI-ARIA Accordion pattern\n\n bind({\n on: {\n expand: (event: Event) => {\n const eventTarget = event.composedPath().find((node): node is HTMLElement => node instanceof HTMLElement);\n const expandedItem = (event as CustomEvent<{ item?: HTMLElement }>).detail?.item ?? eventTarget;\n\n if (!expandedItem || expandedItem.localName !== 'ore-accordion-item') return;\n\n // Guard: only respond to accordion-items that belong to THIS accordion instance\n if (expandedItem.closest('ore-accordion') !== el) return;\n\n handleSelectionMode(expandedItem);\n },\n keydown: (evt: KeyboardEvent) => {\n const summaries = getSummaryElements();\n\n if (!summaries.length) return;\n\n const activeSummary = evt\n .composedPath()\n .find((node): node is HTMLElement => node instanceof HTMLElement && node.localName === 'summary');\n const focused = activeSummary ? summaries.indexOf(activeSummary) : -1;\n\n if (focused === -1) return; // focus is not on a summary — let native handling proceed\n\n listControl.set(focused);\n listControl.handleKeydown(evt);\n },\n },\n });\n\n return html`<slot></slot>`;\n },\n\n styles: [styles],\n});\n"],"mappings":"4NAeA,IAAa,GAAA,EAAA,EAAA,cAAA,CAAgD,kBAAkB,EAsDlE,EAAgB,6BACH,EAAe,CACvC,MAAO,CACL,cAAe,EAAA,KAAK,OAA8B,EAClD,KAAM,EAAA,KAAK,OAAsB,EACjC,QAAS,EAAA,KAAK,OAAuB,CACvC,EAEA,MAAM,EAAO,CACX,IAAM,GAAA,EAAA,EAAA,QAAA,CAAa,EACb,GAAA,EAAA,EAAA,QAAA,CAAmC,EAEnC,EAAuB,GAA8B,CACrD,EAAM,cAAc,QAAU,WAElC,EAAG,iBAAiB,uCAAuC,CAAC,CAAC,QAAS,GAAS,CACzE,IAAS,GAAgB,EAAK,aAAa,UAAU,GACvD,EAAK,gBAAgB,UAAU,CAEnC,CAAC,EAED,EAAK,SAAU,CAAE,cAAa,CAAC,EACjC,EAEM,MACG,CAAC,GAAG,EAAG,iBAA8B,6CAA6C,CAAC,EAGtF,MACG,EAAkB,CAAC,CACvB,IAAK,GAAS,EAAK,YAAY,cAA2B,SAAS,CAAC,CAAC,CACrE,OAAO,OAAO,EAGb,EAAc,EAAA,kBAAkB,CACpC,aAAgB,EAAkB,EAClC,KAAM,GACN,YAAa,EAAS,IAAU,CAG9B,EAAA,CAAA,CAAU,EAAM,EAAE,MAAM,CAC1B,CACF,CAAC,EAyCD,OAvCA,EAAA,EAAA,QAAA,CAAQ,EAAe,CACrB,eAAA,EAAA,EAAA,SAAA,KAA8B,EAAM,cAAc,KAAK,EACvD,KAAM,EAAM,KACZ,QAAS,EAAM,OACjB,CAAC,GAID,EAAA,EAAA,KAAA,CAAK,CACH,GAAI,CACF,OAAS,GAAiB,CACxB,IAAM,EAAc,EAAM,aAAa,CAAC,CAAC,KAAM,GAA8B,aAAgB,WAAW,EAClG,EAAgB,EAA8C,QAAQ,MAAQ,EAEhF,CAAC,GAAgB,EAAa,YAAc,sBAG5C,EAAa,QAAQ,eAAe,IAAM,GAE9C,EAAoB,CAAY,CAClC,EACA,QAAU,GAAuB,CAC/B,IAAM,EAAY,EAAmB,EAErC,GAAI,CAAC,EAAU,OAAQ,OAEvB,IAAM,EAAgB,EACnB,aAAa,CAAC,CACd,KAAM,GAA8B,aAAgB,aAAe,EAAK,YAAc,SAAS,EAC5F,EAAU,EAAgB,EAAU,QAAQ,CAAa,EAAI,GAE/D,IAAY,KAEhB,EAAY,IAAI,CAAO,EACvB,EAAY,cAAc,CAAG,EAC/B,CACF,CACF,CAAC,EAEM,EAAA,IAAI,eACb,EAEA,OAAQ,CAAC,EAAA,OAAM,CACjB,CAAC"}
package/dist/accordion.js CHANGED
@@ -1,47 +1,47 @@
1
1
  import { createListControl as e } from "./headless/nav.js";
2
- import t from "./disclosure/accordion/accordion.css?inline.js";
3
- import { createContext as n, define as r, html as i, prop as a } from "@vielzeug/ore";
4
- import { computed as o } from "@vielzeug/ripple";
2
+ import t from "./disclosure/accordion/accordion.css.js";
3
+ import { bind as n, createContext as r, define as i, getHost as a, html as o, prop as s, provide as c, useEmit as l } from "@vielzeug/ore";
4
+ import { computed as u } from "@vielzeug/ripple";
5
5
  //#region src/disclosure/accordion/accordion.ts
6
- var s = n("AccordionContext"), c = "ore-accordion";
7
- r(c, {
6
+ var d = r("AccordionContext"), f = "ore-accordion";
7
+ i(f, {
8
8
  props: {
9
- selectionMode: a.string(),
10
- size: a.string(),
11
- variant: a.string()
9
+ selectionMode: s.string(),
10
+ size: s.string(),
11
+ variant: s.string()
12
12
  },
13
- setup(t, { bind: n, el: r, emit: a, provide: c }) {
14
- let l = (e) => {
13
+ setup(t) {
14
+ let r = a(), i = l(), s = (e) => {
15
15
  t.selectionMode.value === "single" && (r.querySelectorAll(":scope > ore-accordion-item[expanded]").forEach((t) => {
16
16
  t !== e && t.hasAttribute("expanded") && t.removeAttribute("expanded");
17
- }), a("change", { expandedItem: e }));
18
- }, u = () => [...r.querySelectorAll(":scope > ore-accordion-item:not([disabled])")], d = () => u().map((e) => e.shadowRoot?.querySelector("summary")).filter(Boolean), f = e({
19
- getItems: () => u(),
17
+ }), i("change", { expandedItem: e }));
18
+ }, f = () => [...r.querySelectorAll(":scope > ore-accordion-item:not([disabled])")], p = () => f().map((e) => e.shadowRoot?.querySelector("summary")).filter(Boolean), m = e({
19
+ getItems: () => f(),
20
20
  loop: !0,
21
21
  onNavigate: (e, t) => {
22
- d()[t]?.focus();
22
+ p()[t]?.focus();
23
23
  }
24
24
  });
25
- return c(s, {
26
- selectionMode: o(() => t.selectionMode.value),
25
+ return c(d, {
26
+ selectionMode: u(() => t.selectionMode.value),
27
27
  size: t.size,
28
28
  variant: t.variant
29
29
  }), n({ on: {
30
30
  expand: (e) => {
31
31
  let t = e.composedPath().find((e) => e instanceof HTMLElement), n = e.detail?.item ?? t;
32
- !n || n.localName !== "ore-accordion-item" || n.closest("ore-accordion") === r && l(n);
32
+ !n || n.localName !== "ore-accordion-item" || n.closest("ore-accordion") === r && s(n);
33
33
  },
34
34
  keydown: (e) => {
35
- let t = d();
35
+ let t = p();
36
36
  if (!t.length) return;
37
37
  let n = e.composedPath().find((e) => e instanceof HTMLElement && e.localName === "summary"), r = n ? t.indexOf(n) : -1;
38
- r !== -1 && (f.set(r), f.handleKeydown(e));
38
+ r !== -1 && (m.set(r), m.handleKeydown(e));
39
39
  }
40
- } }), i`<slot></slot>`;
40
+ } }), o`<slot></slot>`;
41
41
  },
42
42
  styles: [t]
43
43
  });
44
44
  //#endregion
45
- export { s as ACCORDION_CTX, c as ACCORDION_TAG };
45
+ export { d as ACCORDION_CTX, f as ACCORDION_TAG };
46
46
 
47
47
  //# sourceMappingURL=accordion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"accordion.js","names":[],"sources":["../src/disclosure/accordion/accordion.ts"],"sourcesContent":["import { createContext, define, html, prop } from '@vielzeug/ore';\nimport { computed, type Readable } from '@vielzeug/ripple';\n\nimport type { ComponentSize, SurfaceVariant } from '../../types';\n\nimport { createListControl } from '../../headless';\nimport styles from './accordion.css?inline';\n\n/** Context provided by ore-accordion to its ore-accordion-item children. */\nexport type AccordionContext = {\n selectionMode: Readable<'single' | 'multiple' | undefined>;\n size: Readable<ComponentSize | undefined>;\n variant: Readable<SurfaceVariant | undefined>;\n};\n/** Injection key for the accordion context. */\nexport const ACCORDION_CTX = createContext<AccordionContext>('AccordionContext');\n\n/** Accordion component properties */\n\nexport type OreAccordionEvents = {\n change: { expandedItem: HTMLElement };\n};\n\nexport type OreAccordionProps = {\n /** Selection mode (single = only one opens, multiple = multiple can be open) */\n selectionMode?: 'single' | 'multiple';\n /** Size for all items (propagated via context) */\n size?: ComponentSize;\n /** Visual variant for all items (propagated via context) */\n variant?: SurfaceVariant;\n};\n\n/**\n * A container for accordion items with single or multiple selection modes.\n *\n * @element ore-accordion\n * @element ore-accordion-item - Child element for each collapsible panel\n *\n * @attr {string} selection-mode - Selection mode: 'single' | 'multiple'\n * @attr {string} size - Size for all items: 'sm' | 'md' | 'lg' (propagated to children)\n * @attr {string} variant - Visual variant: 'solid' | 'flat' | 'bordered' | 'text' | 'glass' | 'frost' (propagated to children)\n *\n * @fires expand - Emitted when an item expands. detail: { expanded: boolean; item: HTMLElement }\n * @fires change - Emitted when selection changes (single mode). detail: { expandedItem: HTMLElement }\n *\n * @slot - `ore-accordion-item` elements\n *\n * @cssprop --accordion-bg - Container background color (solid/flat/glass/frost variants)\n * @cssprop --accordion-border-color - Container border color (solid/flat variants)\n * @cssprop --accordion-divider-color - Divider color between items (text variant)\n * @cssprop --accordion-shadow - Container box shadow\n * @example\n * ```html\n * <ore-accordion selection-mode=\"single\">\n * <ore-accordion-item>\n * <span slot=\"title\">What is Refine?</span>\n * <p>Refine is a headless web component library.</p>\n * </ore-accordion-item>\n * <ore-accordion-item>\n * <span slot=\"title\">How do I install it?</span>\n * <p>Run <code>npm install @vielzeug/refine</code>.</p>\n * </ore-accordion-item>\n * </ore-accordion>\n * <ore-accordion variant=\"bordered\" selection-mode=\"multiple\">\n * <ore-accordion-item expanded><span slot=\"title\">Open by default</span><p>Content</p></ore-accordion-item>\n * </ore-accordion>\n * ```\n */\n\nexport const ACCORDION_TAG = 'ore-accordion' as const;\ndefine<OreAccordionProps, OreAccordionEvents>(ACCORDION_TAG, {\n props: {\n selectionMode: prop.string<'single' | 'multiple'>(),\n size: prop.string<ComponentSize>(),\n variant: prop.string<SurfaceVariant>(),\n },\n\n setup(props, { bind, el, emit, provide }) {\n const handleSelectionMode = (expandedItem: HTMLElement) => {\n if (props.selectionMode.value !== 'single') return;\n\n el.querySelectorAll(':scope > ore-accordion-item[expanded]').forEach((item) => {\n if (item !== expandedItem && item.hasAttribute('expanded')) {\n item.removeAttribute('expanded');\n }\n });\n\n emit('change', { expandedItem });\n };\n\n const getAccordionItems = () => {\n return [...el.querySelectorAll<HTMLElement>(':scope > ore-accordion-item:not([disabled])')];\n };\n\n const getSummaryElements = () => {\n return getAccordionItems()\n .map((item) => item.shadowRoot?.querySelector<HTMLElement>('summary'))\n .filter(Boolean) as HTMLElement[];\n };\n\n const listControl = createListControl({\n getItems: () => getAccordionItems(),\n loop: true,\n onNavigate: (_action, index) => {\n const summaries = getSummaryElements();\n\n summaries[index]?.focus();\n },\n });\n\n provide(ACCORDION_CTX, {\n selectionMode: computed(() => props.selectionMode.value),\n size: props.size,\n variant: props.variant,\n });\n\n // Group-level event and keyboard handling for WAI-ARIA Accordion pattern\n\n bind({\n on: {\n expand: (event: Event) => {\n const eventTarget = event.composedPath().find((node): node is HTMLElement => node instanceof HTMLElement);\n const expandedItem = (event as CustomEvent<{ item?: HTMLElement }>).detail?.item ?? eventTarget;\n\n if (!expandedItem || expandedItem.localName !== 'ore-accordion-item') return;\n\n // Guard: only respond to accordion-items that belong to THIS accordion instance\n if (expandedItem.closest('ore-accordion') !== el) return;\n\n handleSelectionMode(expandedItem);\n },\n keydown: (evt: KeyboardEvent) => {\n const summaries = getSummaryElements();\n\n if (!summaries.length) return;\n\n const activeSummary = evt\n .composedPath()\n .find((node): node is HTMLElement => node instanceof HTMLElement && node.localName === 'summary');\n const focused = activeSummary ? summaries.indexOf(activeSummary) : -1;\n\n if (focused === -1) return; // focus is not on a summary — let native handling proceed\n\n listControl.set(focused);\n listControl.handleKeydown(evt);\n },\n },\n });\n\n return html`<slot></slot>`;\n },\n\n styles: [styles],\n});\n"],"mappings":";;;;;AAeA,IAAa,IAAgB,EAAgC,kBAAkB,GAsDlE,IAAgB;AAC7B,EAA8C,GAAe;CAC3D,OAAO;EACL,eAAe,EAAK,OAA8B;EAClD,MAAM,EAAK,OAAsB;EACjC,SAAS,EAAK,OAAuB;CACvC;CAEA,MAAM,GAAO,EAAE,SAAM,OAAI,SAAM,cAAW;EACxC,IAAM,KAAuB,MAA8B;GACrD,EAAM,cAAc,UAAU,aAElC,EAAG,iBAAiB,uCAAuC,CAAC,CAAC,SAAS,MAAS;IAC7E,AAAI,MAAS,KAAgB,EAAK,aAAa,UAAU,KACvD,EAAK,gBAAgB,UAAU;GAEnC,CAAC,GAED,EAAK,UAAU,EAAE,gBAAa,CAAC;EACjC,GAEM,UACG,CAAC,GAAG,EAAG,iBAA8B,6CAA6C,CAAC,GAGtF,UACG,EAAkB,CAAC,CACvB,KAAK,MAAS,EAAK,YAAY,cAA2B,SAAS,CAAC,CAAC,CACrE,OAAO,OAAO,GAGb,IAAc,EAAkB;GACpC,gBAAgB,EAAkB;GAClC,MAAM;GACN,aAAa,GAAS,MAAU;IAG9B,EAAA,CAAA,CAAU,EAAM,EAAE,MAAM;GAC1B;EACF,CAAC;EAyCD,OAvCA,EAAQ,GAAe;GACrB,eAAe,QAAe,EAAM,cAAc,KAAK;GACvD,MAAM,EAAM;GACZ,SAAS,EAAM;EACjB,CAAC,GAID,EAAK,EACH,IAAI;GACF,SAAS,MAAiB;IACxB,IAAM,IAAc,EAAM,aAAa,CAAC,CAAC,MAAM,MAA8B,aAAgB,WAAW,GAClG,IAAgB,EAA8C,QAAQ,QAAQ;IAEhF,CAAC,KAAgB,EAAa,cAAc,wBAG5C,EAAa,QAAQ,eAAe,MAAM,KAE9C,EAAoB,CAAY;GAClC;GACA,UAAU,MAAuB;IAC/B,IAAM,IAAY,EAAmB;IAErC,IAAI,CAAC,EAAU,QAAQ;IAEvB,IAAM,IAAgB,EACnB,aAAa,CAAC,CACd,MAAM,MAA8B,aAAgB,eAAe,EAAK,cAAc,SAAS,GAC5F,IAAU,IAAgB,EAAU,QAAQ,CAAa,IAAI;IAE/D,MAAY,OAEhB,EAAY,IAAI,CAAO,GACvB,EAAY,cAAc,CAAG;GAC/B;EACF,EACF,CAAC,GAEM,CAAI;CACb;CAEA,QAAQ,CAAC,CAAM;AACjB,CAAC"}
1
+ {"version":3,"file":"accordion.js","names":[],"sources":["../src/disclosure/accordion/accordion.ts"],"sourcesContent":["import { createContext, define, html, prop, bind, getHost, provide, useEmit } from '@vielzeug/ore';\nimport { computed, type Readable } from '@vielzeug/ripple';\n\nimport type { ComponentSize, SurfaceVariant } from '../../types';\n\nimport { createListControl } from '../../headless';\nimport styles from './accordion.css?inline';\n\n/** Context provided by ore-accordion to its ore-accordion-item children. */\nexport type AccordionContext = {\n selectionMode: Readable<'single' | 'multiple' | undefined>;\n size: Readable<ComponentSize | undefined>;\n variant: Readable<SurfaceVariant | undefined>;\n};\n/** Injection key for the accordion context. */\nexport const ACCORDION_CTX = createContext<AccordionContext>('AccordionContext');\n\n/** Accordion component properties */\n\nexport type OreAccordionEvents = {\n change: { expandedItem: HTMLElement };\n};\n\nexport type OreAccordionProps = {\n /** Selection mode (single = only one opens, multiple = multiple can be open) */\n selectionMode?: 'single' | 'multiple';\n /** Size for all items (propagated via context) */\n size?: ComponentSize;\n /** Visual variant for all items (propagated via context) */\n variant?: SurfaceVariant;\n};\n\n/**\n * A container for accordion items with single or multiple selection modes.\n *\n * @element ore-accordion\n * @element ore-accordion-item - Child element for each collapsible panel\n *\n * @attr {string} selection-mode - Selection mode: 'single' | 'multiple'\n * @attr {string} size - Size for all items: 'sm' | 'md' | 'lg' (propagated to children)\n * @attr {string} variant - Visual variant: 'solid' | 'flat' | 'bordered' | 'text' | 'glass' | 'frost' (propagated to children)\n *\n * @fires expand - Emitted when an item expands. detail: { expanded: boolean; item: HTMLElement }\n * @fires change - Emitted when selection changes (single mode). detail: { expandedItem: HTMLElement }\n *\n * @slot - `ore-accordion-item` elements\n *\n * @cssprop --accordion-bg - Container background color (solid/flat/glass/frost variants)\n * @cssprop --accordion-border-color - Container border color (solid/flat variants)\n * @cssprop --accordion-divider-color - Divider color between items (text variant)\n * @cssprop --accordion-shadow - Container box shadow\n * @example\n * ```html\n * <ore-accordion selection-mode=\"single\">\n * <ore-accordion-item>\n * <span slot=\"title\">What is Refine?</span>\n * <p>Refine is a headless web component library.</p>\n * </ore-accordion-item>\n * <ore-accordion-item>\n * <span slot=\"title\">How do I install it?</span>\n * <p>Run <code>npm install @vielzeug/refine</code>.</p>\n * </ore-accordion-item>\n * </ore-accordion>\n * <ore-accordion variant=\"bordered\" selection-mode=\"multiple\">\n * <ore-accordion-item expanded><span slot=\"title\">Open by default</span><p>Content</p></ore-accordion-item>\n * </ore-accordion>\n * ```\n */\n\nexport const ACCORDION_TAG = 'ore-accordion' as const;\ndefine<OreAccordionProps>(ACCORDION_TAG, {\n props: {\n selectionMode: prop.string<'single' | 'multiple'>(),\n size: prop.string<ComponentSize>(),\n variant: prop.string<SurfaceVariant>(),\n },\n\n setup(props) {\n const el = getHost();\n const emit = useEmit<OreAccordionEvents>();\n\n const handleSelectionMode = (expandedItem: HTMLElement) => {\n if (props.selectionMode.value !== 'single') return;\n\n el.querySelectorAll(':scope > ore-accordion-item[expanded]').forEach((item) => {\n if (item !== expandedItem && item.hasAttribute('expanded')) {\n item.removeAttribute('expanded');\n }\n });\n\n emit('change', { expandedItem });\n };\n\n const getAccordionItems = () => {\n return [...el.querySelectorAll<HTMLElement>(':scope > ore-accordion-item:not([disabled])')];\n };\n\n const getSummaryElements = () => {\n return getAccordionItems()\n .map((item) => item.shadowRoot?.querySelector<HTMLElement>('summary'))\n .filter(Boolean) as HTMLElement[];\n };\n\n const listControl = createListControl({\n getItems: () => getAccordionItems(),\n loop: true,\n onNavigate: (_action, index) => {\n const summaries = getSummaryElements();\n\n summaries[index]?.focus();\n },\n });\n\n provide(ACCORDION_CTX, {\n selectionMode: computed(() => props.selectionMode.value),\n size: props.size,\n variant: props.variant,\n });\n\n // Group-level event and keyboard handling for WAI-ARIA Accordion pattern\n\n bind({\n on: {\n expand: (event: Event) => {\n const eventTarget = event.composedPath().find((node): node is HTMLElement => node instanceof HTMLElement);\n const expandedItem = (event as CustomEvent<{ item?: HTMLElement }>).detail?.item ?? eventTarget;\n\n if (!expandedItem || expandedItem.localName !== 'ore-accordion-item') return;\n\n // Guard: only respond to accordion-items that belong to THIS accordion instance\n if (expandedItem.closest('ore-accordion') !== el) return;\n\n handleSelectionMode(expandedItem);\n },\n keydown: (evt: KeyboardEvent) => {\n const summaries = getSummaryElements();\n\n if (!summaries.length) return;\n\n const activeSummary = evt\n .composedPath()\n .find((node): node is HTMLElement => node instanceof HTMLElement && node.localName === 'summary');\n const focused = activeSummary ? summaries.indexOf(activeSummary) : -1;\n\n if (focused === -1) return; // focus is not on a summary — let native handling proceed\n\n listControl.set(focused);\n listControl.handleKeydown(evt);\n },\n },\n });\n\n return html`<slot></slot>`;\n },\n\n styles: [styles],\n});\n"],"mappings":";;;;;AAeA,IAAa,IAAgB,EAAgC,kBAAkB,GAsDlE,IAAgB;AAC7B,EAA0B,GAAe;CACvC,OAAO;EACL,eAAe,EAAK,OAA8B;EAClD,MAAM,EAAK,OAAsB;EACjC,SAAS,EAAK,OAAuB;CACvC;CAEA,MAAM,GAAO;EACX,IAAM,IAAK,EAAQ,GACb,IAAO,EAA4B,GAEnC,KAAuB,MAA8B;GACrD,EAAM,cAAc,UAAU,aAElC,EAAG,iBAAiB,uCAAuC,CAAC,CAAC,SAAS,MAAS;IAC7E,AAAI,MAAS,KAAgB,EAAK,aAAa,UAAU,KACvD,EAAK,gBAAgB,UAAU;GAEnC,CAAC,GAED,EAAK,UAAU,EAAE,gBAAa,CAAC;EACjC,GAEM,UACG,CAAC,GAAG,EAAG,iBAA8B,6CAA6C,CAAC,GAGtF,UACG,EAAkB,CAAC,CACvB,KAAK,MAAS,EAAK,YAAY,cAA2B,SAAS,CAAC,CAAC,CACrE,OAAO,OAAO,GAGb,IAAc,EAAkB;GACpC,gBAAgB,EAAkB;GAClC,MAAM;GACN,aAAa,GAAS,MAAU;IAG9B,EAAA,CAAA,CAAU,EAAM,EAAE,MAAM;GAC1B;EACF,CAAC;EAyCD,OAvCA,EAAQ,GAAe;GACrB,eAAe,QAAe,EAAM,cAAc,KAAK;GACvD,MAAM,EAAM;GACZ,SAAS,EAAM;EACjB,CAAC,GAID,EAAK,EACH,IAAI;GACF,SAAS,MAAiB;IACxB,IAAM,IAAc,EAAM,aAAa,CAAC,CAAC,MAAM,MAA8B,aAAgB,WAAW,GAClG,IAAgB,EAA8C,QAAQ,QAAQ;IAEhF,CAAC,KAAgB,EAAa,cAAc,wBAG5C,EAAa,QAAQ,eAAe,MAAM,KAE9C,EAAoB,CAAY;GAClC;GACA,UAAU,MAAuB;IAC/B,IAAM,IAAY,EAAmB;IAErC,IAAI,CAAC,EAAU,QAAQ;IAEvB,IAAM,IAAgB,EACnB,aAAa,CAAC,CACd,MAAM,MAA8B,aAAgB,eAAe,EAAK,cAAc,SAAS,GAC5F,IAAU,IAAgB,EAAU,QAAQ,CAAa,IAAI;IAE/D,MAAY,OAEhB,EAAY,IAAI,CAAO,GACvB,EAAY,cAAc,CAAG;GAC/B;EACF,EACF,CAAC,GAEM,CAAI;CACb;CAEA,QAAQ,CAAC,CAAM;AACjB,CAAC"}
package/dist/alert.cjs CHANGED
@@ -1,11 +1,11 @@
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("./shared/prop-bundles.cjs"),i=require("./overlay/shared/await-exit.cjs"),a=require("./feedback/alert/alert.css?inline.cjs");let o=require("@vielzeug/ore");var s=`ore-alert`;(0,o.define)(s,{props:{...r.themableBundle,...r.sizableBundle,...r.roundableBundle,accented:o.prop.bool(!1),dismissible:o.prop.bool(!1),heading:o.prop.string(),horizontal:o.prop.bool(!1),variant:o.prop.string()},setup(e,{bind:t,el:n,emit:r,slots:a}){let s=null,c=e=>{s&&(s.textContent=``,requestAnimationFrame(()=>{s&&(s.textContent=e)}))};return 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("./shared/prop-bundles.cjs"),i=require("./overlay/shared/await-exit.cjs"),a=require("./feedback/alert/alert.css.cjs");let o=require("@vielzeug/ore");var s=`ore-alert`;(0,o.define)(s,{props:{...r.themableBundle,...r.sizableBundle,...r.roundableBundle,accented:o.prop.bool(!1),dismissible:o.prop.bool(!1),heading:o.prop.string(),horizontal:o.prop.bool(!1),variant:o.prop.string()},setup(e){let t=(0,o.getHost)(),n=(0,o.useEmit)(),r=(0,o.useSlots)(),a=null,s=e=>{a&&(a.textContent=``,requestAnimationFrame(()=>{a&&(a.textContent=e)}))};return o.html`
2
2
  <span
3
3
  class="sr-announce"
4
4
  aria-live="polite"
5
5
  aria-atomic="true"
6
- ref="${e=>{s=e}}"></span>
6
+ ref="${e=>{a=e}}"></span>
7
7
  <div class="alert" :role="${()=>e.color.value===`error`?`alert`:`status`}" part="alert">
8
- <span class="icon" part="icon" aria-hidden="true" ?hidden="${()=>!a.has(`icon`).value}">
8
+ <span class="icon" part="icon" aria-hidden="true" ?hidden="${()=>!r.has(`icon`).value}">
9
9
  <slot name="icon"></slot>
10
10
  </span>
11
11
  <div class="header" part="header" ?hidden="${()=>!e.heading.value}">
@@ -19,7 +19,7 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=requi
19
19
  <slot></slot>
20
20
  </div>
21
21
  </div>
22
- <div class="actions" part="actions" ?hidden="${()=>!a.has(`actions`).value}">
22
+ <div class="actions" part="actions" ?hidden="${()=>!r.has(`actions`).value}">
23
23
  <slot name="actions"></slot>
24
24
  </div>
25
25
  <button
@@ -28,7 +28,7 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=requi
28
28
  type="button"
29
29
  aria-label="Dismiss alert"
30
30
  ?hidden="${()=>!e.dismissible.value}"
31
- @click="${t=>{e.dismissible.value&&(n.setAttribute(`dismissing`,``),i.awaitExit(n,()=>{n.removeAttribute(`dismissing`),n.setAttribute(`dismissed`,``),c(`Alert dismissed`),r(`dismiss`,{originalEvent:t})}))}}">
31
+ @click="${r=>{e.dismissible.value&&(t.setAttribute(`dismissing`,``),i.awaitExit(t,()=>{t.removeAttribute(`dismissing`),t.setAttribute(`dismissed`,``),s(`Alert dismissed`),n(`dismiss`,{originalEvent:r})}))}}">
32
32
  <ore-icon name="x" size="16" stroke-width="2.5" aria-hidden="true"></ore-icon>
33
33
  </button>
34
34
  </div>
@@ -1 +1 @@
1
- {"version":3,"file":"alert.cjs","names":[],"sources":["../src/feedback/alert/alert.ts"],"sourcesContent":["import { define, html, prop } from '@vielzeug/ore';\n\nimport type { ComponentSize, RoundedSize, ThemeColor } from '../../types';\n\nimport '../../content/icon/icon';\nimport { awaitExit } from '../../overlay/shared/await-exit';\nimport { roundableBundle, sizableBundle, themableBundle } from '../../shared';\nimport {\n coarsePointerMixin,\n colorThemeMixin,\n forcedColorsMixin,\n reducedMotionMixin,\n roundedVariantMixin,\n sizeVariantMixin,\n} from '../../styles';\nimport componentStyles from './alert.css?inline';\n\nexport type OreAlertEvents = {\n dismiss: { originalEvent: MouseEvent };\n};\n\nexport type OreAlertProps = {\n /** Show a left accent border (for flat/bordered variants) */\n accented?: boolean;\n /** Theme color */\n color?: ThemeColor;\n /** Show a dismissible (×) button */\n dismissible?: boolean;\n /** Heading text shown above the content */\n heading?: string;\n /** Position action buttons to the right instead of below */\n horizontal?: boolean;\n /** Border radius */\n rounded?: RoundedSize | '';\n /** Alert size */\n size?: ComponentSize;\n /** Visual style variant */\n variant?: 'solid' | 'flat' | 'bordered';\n};\n\n/**\n * A status/feedback banner with optional heading, icon slot, and dismiss button.\n *\n * @element ore-alert\n *\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} variant - Visual style: 'flat' | 'solid' | 'bordered'\n * @attr {string} size - Size: 'sm' | 'md' | 'lg'\n * @attr {string} rounded - Border radius: 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | 'full'\n * @attr {string} heading - Bold heading text above the content\n * @attr {boolean} dismissible - Show a close (×) button\n * @attr {boolean} accented - Add a left accent border (flat/bordered only)\n * @attr {boolean} horizontal - Position action buttons to the right instead of below\n *\n * @fires dismiss - Fired when the alert is dismissed. detail: { originalEvent: MouseEvent }\n *\n * @slot - Default slot for the alert message content\n * @slot icon - Icon on the left side\n * @slot meta - Metadata displayed alongside the heading (lighter, right-aligned)\n * @slot actions - Action buttons shown below the message\n *\n * @cssprop --alert-bg - Background color\n * @cssprop --alert-color - Text/icon color\n * @cssprop --alert-border-color - Border color\n * @cssprop --alert-shadow - Box shadow\n * @cssprop --alert-radius - Border radius\n * @cssprop --alert-padding - Padding\n * @cssprop --alert-gap - Gap between icon, body, and close button\n * @cssprop --alert-font-size - Font size\n *\n * @part alert - Alert root container.\n * @part icon - Icon container.\n * @part header - Header container.\n * @part heading - Heading text element.\n * @part meta - Meta text container.\n * @part body - Body content container.\n * @part content - Content container.\n * @part actions - Actions slot container.\n * @part close - Close action control.\n * @example\n * ```html\n * <ore-alert color=\"success\">Your changes have been saved.</ore-alert>\n * <ore-alert color=\"error\" variant=\"solid\" dismissible heading=\"Something went wrong\">\n * Please try again later.\n * </ore-alert>\n * ```\n */\nexport const ALERT_TAG = 'ore-alert' as const;\ndefine<OreAlertProps, OreAlertEvents>(ALERT_TAG, {\n props: {\n ...themableBundle,\n ...sizableBundle,\n ...roundableBundle,\n accented: prop.bool(false),\n dismissible: prop.bool(false),\n heading: prop.string(),\n horizontal: prop.bool(false),\n variant: prop.string<'solid' | 'flat' | 'bordered'>(),\n },\n setup(props, { bind: _bind, el, emit, slots }) {\n let announceEl: HTMLElement | null = null;\n\n const announce = (message: string) => {\n if (!announceEl) return;\n\n announceEl.textContent = '';\n requestAnimationFrame(() => {\n if (announceEl) announceEl.textContent = message;\n });\n };\n\n const handleDismiss = (e: MouseEvent) => {\n if (!props.dismissible.value) return;\n\n el.setAttribute('dismissing', '');\n awaitExit(el, () => {\n el.removeAttribute('dismissing');\n el.setAttribute('dismissed', '');\n announce('Alert dismissed');\n emit('dismiss', { originalEvent: e });\n });\n };\n\n const alertRole = () => (props.color.value === 'error' ? 'alert' : 'status');\n\n return html`\n <span\n class=\"sr-announce\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n ref=\"${(ref: HTMLElement) => {\n announceEl = ref;\n }}\"></span>\n <div class=\"alert\" :role=\"${alertRole}\" part=\"alert\">\n <span class=\"icon\" part=\"icon\" aria-hidden=\"true\" ?hidden=\"${() => !slots.has('icon').value}\">\n <slot name=\"icon\"></slot>\n </span>\n <div class=\"header\" part=\"header\" ?hidden=\"${() => !props.heading.value}\">\n <span class=\"heading\" part=\"heading\">${props.heading}</span>\n <span class=\"meta\" part=\"meta\">\n <slot name=\"meta\"></slot>\n </span>\n </div>\n <div class=\"body\" part=\"body\">\n <div class=\"content\" part=\"content\">\n <slot></slot>\n </div>\n </div>\n <div class=\"actions\" part=\"actions\" ?hidden=\"${() => !slots.has('actions').value}\">\n <slot name=\"actions\"></slot>\n </div>\n <button\n class=\"close\"\n part=\"close\"\n type=\"button\"\n aria-label=\"Dismiss alert\"\n ?hidden=\"${() => !props.dismissible.value}\"\n @click=\"${handleDismiss}\">\n <ore-icon name=\"x\" size=\"16\" stroke-width=\"2.5\" aria-hidden=\"true\"></ore-icon>\n </button>\n </div>\n `;\n },\n styles: [\n colorThemeMixin,\n coarsePointerMixin,\n reducedMotionMixin,\n roundedVariantMixin,\n forcedColorsMixin,\n sizeVariantMixin({\n lg: { '--_padding': 'var(--size-4) var(--size-5)', fontSize: 'var(--text-base)', gap: 'var(--size-3-5)' },\n sm: { '--_padding': 'var(--size-2) var(--size-3)', fontSize: 'var(--text-xs)', gap: 'var(--size-2)' },\n }),\n componentStyles,\n ],\n});\n"],"mappings":"wXAuFA,IAAa,EAAY,yBACa,EAAW,CAC/C,MAAO,CACL,GAAG,EAAA,eACH,GAAG,EAAA,cACH,GAAG,EAAA,gBACH,SAAU,EAAA,KAAK,KAAK,EAAK,EACzB,YAAa,EAAA,KAAK,KAAK,EAAK,EAC5B,QAAS,EAAA,KAAK,OAAO,EACrB,WAAY,EAAA,KAAK,KAAK,EAAK,EAC3B,QAAS,EAAA,KAAK,OAAsC,CACtD,EACA,MAAM,EAAO,CAAE,KAAM,EAAO,KAAI,OAAM,SAAS,CAC7C,IAAI,EAAiC,KAE/B,EAAY,GAAoB,CAC/B,IAEL,EAAW,YAAc,GACzB,0BAA4B,CACtB,IAAY,EAAW,YAAc,EAC3C,CAAC,EACH,EAgBA,MAAO,GAAA,IAAI;;;;;eAKC,GAAqB,CAC3B,EAAa,CACf,EAAE;sCATmB,EAAM,MAAM,QAAU,QAAU,QAAU,SAU3B;yEAC+B,CAAC,EAAM,IAAI,MAAM,CAAC,CAAC,MAAM;;;yDAGzC,CAAC,EAAM,QAAQ,MAAM;iDAC/B,EAAM,QAAQ;;;;;;;;;;2DAUF,CAAC,EAAM,IAAI,SAAS,CAAC,CAAC,MAAM;;;;;;;;yBAQ9D,CAAC,EAAM,YAAY,MAAM;oBA7CzB,GAAkB,CAClC,EAAM,YAAY,QAEvB,EAAG,aAAa,aAAc,EAAE,EAChC,EAAA,UAAU,MAAU,CAClB,EAAG,gBAAgB,YAAY,EAC/B,EAAG,aAAa,YAAa,EAAE,EAC/B,EAAS,iBAAiB,EAC1B,EAAK,UAAW,CAAE,cAAe,CAAE,CAAC,CACtC,CAAC,EACH,EAoC8B;;;;KAKhC,EACA,OAAQ,CACN,EAAA,gBACA,EAAA,mBACA,EAAA,mBACA,EAAA,oBACA,EAAA,kBACA,EAAA,iBAAiB,CACf,GAAI,CAAE,aAAc,8BAA+B,SAAU,mBAAoB,IAAK,iBAAkB,EACxG,GAAI,CAAE,aAAc,8BAA+B,SAAU,iBAAkB,IAAK,eAAgB,CACtG,CAAC,EACD,EAAA,OACF,CACF,CAAC"}
1
+ {"version":3,"file":"alert.cjs","names":[],"sources":["../src/feedback/alert/alert.ts"],"sourcesContent":["import { define, html, prop, getHost, useEmit, useSlots } from '@vielzeug/ore';\n\nimport type { ComponentSize, RoundedSize, ThemeColor } from '../../types';\n\nimport '../../content/icon/icon';\nimport { awaitExit } from '../../overlay/shared/await-exit';\nimport { roundableBundle, sizableBundle, themableBundle } from '../../shared';\nimport {\n coarsePointerMixin,\n colorThemeMixin,\n forcedColorsMixin,\n reducedMotionMixin,\n roundedVariantMixin,\n sizeVariantMixin,\n} from '../../styles';\nimport componentStyles from './alert.css?inline';\n\nexport type OreAlertEvents = {\n dismiss: { originalEvent: MouseEvent };\n};\n\nexport type OreAlertProps = {\n /** Show a left accent border (for flat/bordered variants) */\n accented?: boolean;\n /** Theme color */\n color?: ThemeColor;\n /** Show a dismissible (×) button */\n dismissible?: boolean;\n /** Heading text shown above the content */\n heading?: string;\n /** Position action buttons to the right instead of below */\n horizontal?: boolean;\n /** Border radius */\n rounded?: RoundedSize | '';\n /** Alert size */\n size?: ComponentSize;\n /** Visual style variant */\n variant?: 'solid' | 'flat' | 'bordered';\n};\n\n/**\n * A status/feedback banner with optional heading, icon slot, and dismiss button.\n *\n * @element ore-alert\n *\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} variant - Visual style: 'flat' | 'solid' | 'bordered'\n * @attr {string} size - Size: 'sm' | 'md' | 'lg'\n * @attr {string} rounded - Border radius: 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | 'full'\n * @attr {string} heading - Bold heading text above the content\n * @attr {boolean} dismissible - Show a close (×) button\n * @attr {boolean} accented - Add a left accent border (flat/bordered only)\n * @attr {boolean} horizontal - Position action buttons to the right instead of below\n *\n * @fires dismiss - Fired when the alert is dismissed. detail: { originalEvent: MouseEvent }\n *\n * @slot - Default slot for the alert message content\n * @slot icon - Icon on the left side\n * @slot meta - Metadata displayed alongside the heading (lighter, right-aligned)\n * @slot actions - Action buttons shown below the message\n *\n * @cssprop --alert-bg - Background color\n * @cssprop --alert-color - Text/icon color\n * @cssprop --alert-border-color - Border color\n * @cssprop --alert-shadow - Box shadow\n * @cssprop --alert-radius - Border radius\n * @cssprop --alert-padding - Padding\n * @cssprop --alert-gap - Gap between icon, body, and close button\n * @cssprop --alert-font-size - Font size\n *\n * @part alert - Alert root container.\n * @part icon - Icon container.\n * @part header - Header container.\n * @part heading - Heading text element.\n * @part meta - Meta text container.\n * @part body - Body content container.\n * @part content - Content container.\n * @part actions - Actions slot container.\n * @part close - Close action control.\n * @example\n * ```html\n * <ore-alert color=\"success\">Your changes have been saved.</ore-alert>\n * <ore-alert color=\"error\" variant=\"solid\" dismissible heading=\"Something went wrong\">\n * Please try again later.\n * </ore-alert>\n * ```\n */\nexport const ALERT_TAG = 'ore-alert' as const;\ndefine<OreAlertProps>(ALERT_TAG, {\n props: {\n ...themableBundle,\n ...sizableBundle,\n ...roundableBundle,\n accented: prop.bool(false),\n dismissible: prop.bool(false),\n heading: prop.string(),\n horizontal: prop.bool(false),\n variant: prop.string<'solid' | 'flat' | 'bordered'>(),\n },\n setup(props) {\n const el = getHost();\n const emit = useEmit<OreAlertEvents>();\n const slots = useSlots();\n\n let announceEl: HTMLElement | null = null;\n\n const announce = (message: string) => {\n if (!announceEl) return;\n\n announceEl.textContent = '';\n requestAnimationFrame(() => {\n if (announceEl) announceEl.textContent = message;\n });\n };\n\n const handleDismiss = (e: MouseEvent) => {\n if (!props.dismissible.value) return;\n\n el.setAttribute('dismissing', '');\n awaitExit(el, () => {\n el.removeAttribute('dismissing');\n el.setAttribute('dismissed', '');\n announce('Alert dismissed');\n emit('dismiss', { originalEvent: e });\n });\n };\n\n const alertRole = () => (props.color.value === 'error' ? 'alert' : 'status');\n\n return html`\n <span\n class=\"sr-announce\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n ref=\"${(ref: HTMLElement) => {\n announceEl = ref;\n }}\"></span>\n <div class=\"alert\" :role=\"${alertRole}\" part=\"alert\">\n <span class=\"icon\" part=\"icon\" aria-hidden=\"true\" ?hidden=\"${() => !slots.has('icon').value}\">\n <slot name=\"icon\"></slot>\n </span>\n <div class=\"header\" part=\"header\" ?hidden=\"${() => !props.heading.value}\">\n <span class=\"heading\" part=\"heading\">${props.heading}</span>\n <span class=\"meta\" part=\"meta\">\n <slot name=\"meta\"></slot>\n </span>\n </div>\n <div class=\"body\" part=\"body\">\n <div class=\"content\" part=\"content\">\n <slot></slot>\n </div>\n </div>\n <div class=\"actions\" part=\"actions\" ?hidden=\"${() => !slots.has('actions').value}\">\n <slot name=\"actions\"></slot>\n </div>\n <button\n class=\"close\"\n part=\"close\"\n type=\"button\"\n aria-label=\"Dismiss alert\"\n ?hidden=\"${() => !props.dismissible.value}\"\n @click=\"${handleDismiss}\">\n <ore-icon name=\"x\" size=\"16\" stroke-width=\"2.5\" aria-hidden=\"true\"></ore-icon>\n </button>\n </div>\n `;\n },\n styles: [\n colorThemeMixin,\n coarsePointerMixin,\n reducedMotionMixin,\n roundedVariantMixin,\n forcedColorsMixin,\n sizeVariantMixin({\n lg: { '--_padding': 'var(--size-4) var(--size-5)', fontSize: 'var(--text-base)', gap: 'var(--size-3-5)' },\n sm: { '--_padding': 'var(--size-2) var(--size-3)', fontSize: 'var(--text-xs)', gap: 'var(--size-2)' },\n }),\n componentStyles,\n ],\n});\n"],"mappings":"iXAuFA,IAAa,EAAY,yBACH,EAAW,CAC/B,MAAO,CACL,GAAG,EAAA,eACH,GAAG,EAAA,cACH,GAAG,EAAA,gBACH,SAAU,EAAA,KAAK,KAAK,EAAK,EACzB,YAAa,EAAA,KAAK,KAAK,EAAK,EAC5B,QAAS,EAAA,KAAK,OAAO,EACrB,WAAY,EAAA,KAAK,KAAK,EAAK,EAC3B,QAAS,EAAA,KAAK,OAAsC,CACtD,EACA,MAAM,EAAO,CACX,IAAM,GAAA,EAAA,EAAA,QAAA,CAAa,EACb,GAAA,EAAA,EAAA,QAAA,CAA+B,EAC/B,GAAA,EAAA,EAAA,SAAA,CAAiB,EAEnB,EAAiC,KAE/B,EAAY,GAAoB,CAC/B,IAEL,EAAW,YAAc,GACzB,0BAA4B,CACtB,IAAY,EAAW,YAAc,EAC3C,CAAC,EACH,EAgBA,MAAO,GAAA,IAAI;;;;;eAKC,GAAqB,CAC3B,EAAa,CACf,EAAE;sCATmB,EAAM,MAAM,QAAU,QAAU,QAAU,SAU3B;yEAC+B,CAAC,EAAM,IAAI,MAAM,CAAC,CAAC,MAAM;;;yDAGzC,CAAC,EAAM,QAAQ,MAAM;iDAC/B,EAAM,QAAQ;;;;;;;;;;2DAUF,CAAC,EAAM,IAAI,SAAS,CAAC,CAAC,MAAM;;;;;;;;yBAQ9D,CAAC,EAAM,YAAY,MAAM;oBA7CzB,GAAkB,CAClC,EAAM,YAAY,QAEvB,EAAG,aAAa,aAAc,EAAE,EAChC,EAAA,UAAU,MAAU,CAClB,EAAG,gBAAgB,YAAY,EAC/B,EAAG,aAAa,YAAa,EAAE,EAC/B,EAAS,iBAAiB,EAC1B,EAAK,UAAW,CAAE,cAAe,CAAE,CAAC,CACtC,CAAC,EACH,EAoC8B;;;;KAKhC,EACA,OAAQ,CACN,EAAA,gBACA,EAAA,mBACA,EAAA,mBACA,EAAA,oBACA,EAAA,kBACA,EAAA,iBAAiB,CACf,GAAI,CAAE,aAAc,8BAA+B,SAAU,mBAAoB,IAAK,iBAAkB,EACxG,GAAI,CAAE,aAAc,8BAA+B,SAAU,iBAAkB,IAAK,eAAgB,CACtG,CAAC,EACD,EAAA,OACF,CACF,CAAC"}