@vielzeug/refine 2.0.3 → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (521) hide show
  1. package/dist/accordion-item.cjs +1 -1
  2. package/dist/accordion-item.cjs.map +1 -1
  3. package/dist/accordion-item.js +1 -1
  4. package/dist/accordion-item.js.map +1 -1
  5. package/dist/accordion.cjs +1 -1
  6. package/dist/accordion.cjs.map +1 -1
  7. package/dist/accordion.js +1 -1
  8. package/dist/accordion.js.map +1 -1
  9. package/dist/alert.cjs.map +1 -1
  10. package/dist/alert.js.map +1 -1
  11. package/dist/async.cjs.map +1 -1
  12. package/dist/async.js.map +1 -1
  13. package/dist/avatar-group.cjs.map +1 -1
  14. package/dist/avatar-group.js.map +1 -1
  15. package/dist/avatar.cjs +6 -6
  16. package/dist/avatar.cjs.map +1 -1
  17. package/dist/avatar.js +1 -2
  18. package/dist/avatar.js.map +1 -1
  19. package/dist/badge.cjs.map +1 -1
  20. package/dist/badge.js.map +1 -1
  21. package/dist/box.cjs.map +1 -1
  22. package/dist/box.js.map +1 -1
  23. package/dist/breadcrumb.cjs +3 -3
  24. package/dist/breadcrumb.cjs.map +1 -1
  25. package/dist/breadcrumb.js +4 -4
  26. package/dist/breadcrumb.js.map +1 -1
  27. package/dist/button-group.cjs +1 -1
  28. package/dist/button-group.cjs.map +1 -1
  29. package/dist/button-group.js +0 -1
  30. package/dist/button-group.js.map +1 -1
  31. package/dist/button.cjs.map +1 -1
  32. package/dist/button.js.map +1 -1
  33. package/dist/calendar.cjs.map +1 -1
  34. package/dist/calendar.js.map +1 -1
  35. package/dist/card.cjs +7 -7
  36. package/dist/card.cjs.map +1 -1
  37. package/dist/card.js +27 -27
  38. package/dist/card.js.map +1 -1
  39. package/dist/carousel.cjs +20 -20
  40. package/dist/carousel.cjs.map +1 -1
  41. package/dist/carousel.js +7 -8
  42. package/dist/carousel.js.map +1 -1
  43. package/dist/chat-message.cjs +10 -10
  44. package/dist/chat-message.cjs.map +1 -1
  45. package/dist/chat-message.js +1 -2
  46. package/dist/chat-message.js.map +1 -1
  47. package/dist/checkbox-group.cjs +7 -7
  48. package/dist/checkbox-group.cjs.map +1 -1
  49. package/dist/checkbox-group.js +26 -26
  50. package/dist/checkbox-group.js.map +1 -1
  51. package/dist/checkbox.cjs +2 -2
  52. package/dist/checkbox.cjs.map +1 -1
  53. package/dist/checkbox.js +33 -33
  54. package/dist/checkbox.js.map +1 -1
  55. package/dist/chip.cjs +16 -16
  56. package/dist/chip.cjs.map +1 -1
  57. package/dist/chip.js +1 -2
  58. package/dist/chip.js.map +1 -1
  59. package/dist/combobox.cjs +28 -28
  60. package/dist/combobox.cjs.map +1 -1
  61. package/dist/combobox.js +211 -211
  62. package/dist/combobox.js.map +1 -1
  63. package/dist/command-palette.cjs +21 -21
  64. package/dist/command-palette.cjs.map +1 -1
  65. package/dist/command-palette.js +27 -28
  66. package/dist/command-palette.js.map +1 -1
  67. package/dist/content/avatar/avatar.css.cjs +1 -1
  68. package/dist/content/avatar/avatar.css.js +1 -1
  69. package/dist/content/avatar/avatar.d.ts.map +1 -1
  70. package/dist/content/breadcrumb/breadcrumb.d.ts.map +1 -1
  71. package/dist/content/card/card.css.cjs +1 -1
  72. package/dist/content/card/card.css.cjs.map +1 -1
  73. package/dist/content/card/card.css.js +1 -1
  74. package/dist/content/card/card.css.js.map +1 -1
  75. package/dist/content/card/card.d.ts.map +1 -1
  76. package/dist/content/carousel/carousel-slide.cjs.map +1 -1
  77. package/dist/content/carousel/carousel-slide.js.map +1 -1
  78. package/dist/content/carousel/carousel.css.cjs +1 -1
  79. package/dist/content/carousel/carousel.css.cjs.map +1 -1
  80. package/dist/content/carousel/carousel.css.js +1 -1
  81. package/dist/content/carousel/carousel.css.js.map +1 -1
  82. package/dist/content/carousel/carousel.d.ts.map +1 -1
  83. package/dist/content/carousel/index.d.ts +1 -1
  84. package/dist/content/carousel/index.d.ts.map +1 -1
  85. package/dist/content/chat-message/chat-message.css.cjs +1 -1
  86. package/dist/content/chat-message/chat-message.css.js +1 -1
  87. package/dist/content/chat-message/chat-message.d.ts.map +1 -1
  88. package/dist/content/code-window/code-window.css.cjs +1 -1
  89. package/dist/content/code-window/code-window.css.js +1 -1
  90. package/dist/content/copy-command/copy-command.css.cjs +1 -1
  91. package/dist/content/copy-command/copy-command.css.js +1 -1
  92. package/dist/content/copy-command/copy-command.d.ts.map +1 -1
  93. package/dist/content/index.d.ts +22 -22
  94. package/dist/content/index.d.ts.map +1 -1
  95. package/dist/content/list/_list-item-reveal.cjs.map +1 -1
  96. package/dist/content/list/_list-item-reveal.d.ts +1 -1
  97. package/dist/content/list/_list-item-reveal.d.ts.map +1 -1
  98. package/dist/content/list/_list-item-reveal.js.map +1 -1
  99. package/dist/content/list/list-item.css.cjs +1 -1
  100. package/dist/content/list/list-item.css.cjs.map +1 -1
  101. package/dist/content/list/list-item.css.js +1 -1
  102. package/dist/content/list/list-item.css.js.map +1 -1
  103. package/dist/content/list/list.d.ts.map +1 -1
  104. package/dist/content/marquee/marquee.css.cjs +1 -1
  105. package/dist/content/marquee/marquee.css.js +1 -1
  106. package/dist/content/pagination/pagination.css.cjs +1 -1
  107. package/dist/content/pagination/pagination.css.js +1 -1
  108. package/dist/content/pagination/pagination.d.ts.map +1 -1
  109. package/dist/content/separator/separator.css.cjs +1 -1
  110. package/dist/content/separator/separator.css.js +1 -1
  111. package/dist/content/separator/separator.d.ts.map +1 -1
  112. package/dist/content/stepper/step.css.cjs.map +1 -1
  113. package/dist/content/stepper/step.css.js.map +1 -1
  114. package/dist/content/stepper/stepper.d.ts.map +1 -1
  115. package/dist/content/table/table.css.cjs +1 -1
  116. package/dist/content/table/table.css.js +1 -1
  117. package/dist/content/text/text.css.cjs +1 -1
  118. package/dist/content/text/text.css.cjs.map +1 -1
  119. package/dist/content/text/text.css.js +1 -1
  120. package/dist/content/text/text.css.js.map +1 -1
  121. package/dist/content/text/text.d.ts +1 -1
  122. package/dist/content/text/text.d.ts.map +1 -1
  123. package/dist/copy-command.cjs.map +1 -1
  124. package/dist/copy-command.js.map +1 -1
  125. package/dist/core/checkable.cjs +1 -1
  126. package/dist/core/checkable.cjs.map +1 -1
  127. package/dist/core/checkable.d.ts.map +1 -1
  128. package/dist/core/checkable.js +4 -4
  129. package/dist/core/checkable.js.map +1 -1
  130. package/dist/core/choice-field.cjs +1 -1
  131. package/dist/core/choice-field.cjs.map +1 -1
  132. package/dist/core/choice-field.d.ts.map +1 -1
  133. package/dist/core/choice-field.js +1 -2
  134. package/dist/core/choice-field.js.map +1 -1
  135. package/dist/core/date-picker.cjs +1 -1
  136. package/dist/core/date-picker.cjs.map +1 -1
  137. package/dist/core/date-picker.d.ts.map +1 -1
  138. package/dist/core/date-picker.js +3 -3
  139. package/dist/core/date-picker.js.map +1 -1
  140. package/dist/core/index.d.ts +17 -17
  141. package/dist/core/index.d.ts.map +1 -1
  142. package/dist/core/option-list.cjs +1 -1
  143. package/dist/core/option-list.cjs.map +1 -1
  144. package/dist/core/option-list.d.ts.map +1 -1
  145. package/dist/core/option-list.js +4 -4
  146. package/dist/core/option-list.js.map +1 -1
  147. package/dist/core/overlay.cjs.map +1 -1
  148. package/dist/core/overlay.d.ts +2 -2
  149. package/dist/core/overlay.d.ts.map +1 -1
  150. package/dist/core/overlay.js.map +1 -1
  151. package/dist/core/positioner.cjs +1 -1
  152. package/dist/core/positioner.cjs.map +1 -1
  153. package/dist/core/positioner.d.ts +6 -1
  154. package/dist/core/positioner.d.ts.map +1 -1
  155. package/dist/core/positioner.js +11 -11
  156. package/dist/core/positioner.js.map +1 -1
  157. package/dist/core/ref-callback.cjs +1 -1
  158. package/dist/core/ref-callback.cjs.map +1 -1
  159. package/dist/core/ref-callback.d.ts.map +1 -1
  160. package/dist/core/ref-callback.js +1 -1
  161. package/dist/core/ref-callback.js.map +1 -1
  162. package/dist/core/signals.cjs +1 -1
  163. package/dist/core/signals.cjs.map +1 -1
  164. package/dist/core/signals.d.ts.map +1 -1
  165. package/dist/core/signals.js +1 -2
  166. package/dist/core/signals.js.map +1 -1
  167. package/dist/core/slider.cjs.map +1 -1
  168. package/dist/core/slider.d.ts.map +1 -1
  169. package/dist/core/slider.js.map +1 -1
  170. package/dist/core/spinner.cjs.map +1 -1
  171. package/dist/core/spinner.d.ts.map +1 -1
  172. package/dist/core/spinner.js.map +1 -1
  173. package/dist/core/text-field.cjs +1 -1
  174. package/dist/core/text-field.cjs.map +1 -1
  175. package/dist/core/text-field.js +1 -1
  176. package/dist/core/text-field.js.map +1 -1
  177. package/dist/custom-elements.json +4926 -4678
  178. package/dist/datagrid.cjs +114 -114
  179. package/dist/datagrid.cjs.map +1 -1
  180. package/dist/datagrid.js +42 -43
  181. package/dist/datagrid.js.map +1 -1
  182. package/dist/date-picker.cjs.map +1 -1
  183. package/dist/date-picker.js.map +1 -1
  184. package/dist/dialog.cjs.map +1 -1
  185. package/dist/dialog.js.map +1 -1
  186. package/dist/disclosure/accordion/accordion.d.ts.map +1 -1
  187. package/dist/disclosure/accordion-item/accordion-item.css.cjs +1 -1
  188. package/dist/disclosure/accordion-item/accordion-item.css.cjs.map +1 -1
  189. package/dist/disclosure/accordion-item/accordion-item.css.js +1 -1
  190. package/dist/disclosure/accordion-item/accordion-item.css.js.map +1 -1
  191. package/dist/disclosure/index.d.ts +6 -6
  192. package/dist/disclosure/index.d.ts.map +1 -1
  193. package/dist/disclosure/tab-item/tab-item.css.cjs.map +1 -1
  194. package/dist/disclosure/tab-item/tab-item.css.js.map +1 -1
  195. package/dist/disclosure/tab-item/tab-item.d.ts.map +1 -1
  196. package/dist/disclosure/tabs/tabs.css.cjs +1 -1
  197. package/dist/disclosure/tabs/tabs.css.cjs.map +1 -1
  198. package/dist/disclosure/tabs/tabs.css.js +1 -1
  199. package/dist/disclosure/tabs/tabs.css.js.map +1 -1
  200. package/dist/disclosure/tabs/tabs.d.ts.map +1 -1
  201. package/dist/drawer.cjs +5 -5
  202. package/dist/drawer.cjs.map +1 -1
  203. package/dist/drawer.js +26 -26
  204. package/dist/drawer.js.map +1 -1
  205. package/dist/feedback/alert/alert.css.cjs +1 -1
  206. package/dist/feedback/alert/alert.css.js +1 -1
  207. package/dist/feedback/async/async.d.ts +1 -1
  208. package/dist/feedback/async/async.d.ts.map +1 -1
  209. package/dist/feedback/badge/badge.css.cjs +1 -1
  210. package/dist/feedback/badge/badge.css.js +1 -1
  211. package/dist/feedback/badge/badge.d.ts.map +1 -1
  212. package/dist/feedback/chip/chip.css.cjs.map +1 -1
  213. package/dist/feedback/chip/chip.css.js.map +1 -1
  214. package/dist/feedback/chip/chip.d.ts.map +1 -1
  215. package/dist/feedback/index.d.ts +12 -12
  216. package/dist/feedback/index.d.ts.map +1 -1
  217. package/dist/feedback/progress/progress.d.ts.map +1 -1
  218. package/dist/feedback/skeleton/skeleton.d.ts.map +1 -1
  219. package/dist/feedback/toast/index.d.ts +1 -1
  220. package/dist/feedback/toast/index.d.ts.map +1 -1
  221. package/dist/feedback/toast/toast.css.cjs +1 -1
  222. package/dist/feedback/toast/toast.css.cjs.map +1 -1
  223. package/dist/feedback/toast/toast.css.js +1 -1
  224. package/dist/feedback/toast/toast.css.js.map +1 -1
  225. package/dist/feedback/toast/toast.d.ts +1 -1
  226. package/dist/feedback/toast/toast.d.ts.map +1 -1
  227. package/dist/feedback/typing-indicator/typing-indicator.d.ts.map +1 -1
  228. package/dist/file-input.cjs +67 -67
  229. package/dist/file-input.cjs.map +1 -1
  230. package/dist/file-input.js +129 -130
  231. package/dist/file-input.js.map +1 -1
  232. package/dist/frameworks/elements.d.ts +86 -0
  233. package/dist/frameworks/react.d.ts +18 -0
  234. package/dist/frameworks/vue.d.ts +16 -0
  235. package/dist/grid.cjs.map +1 -1
  236. package/dist/grid.js.map +1 -1
  237. package/dist/icon.cjs.map +1 -1
  238. package/dist/icon.js.map +1 -1
  239. package/dist/input.cjs +21 -21
  240. package/dist/input.cjs.map +1 -1
  241. package/dist/input.js +58 -58
  242. package/dist/input.js.map +1 -1
  243. package/dist/inputs/button/button.css.cjs +1 -1
  244. package/dist/inputs/button/button.css.cjs.map +1 -1
  245. package/dist/inputs/button/button.css.js +1 -1
  246. package/dist/inputs/button/button.css.js.map +1 -1
  247. package/dist/inputs/button/button.d.ts.map +1 -1
  248. package/dist/inputs/button-group/button-group.css.cjs.map +1 -1
  249. package/dist/inputs/button-group/button-group.css.js.map +1 -1
  250. package/dist/inputs/button-group/button-group.d.ts +1 -1
  251. package/dist/inputs/button-group/button-group.d.ts.map +1 -1
  252. package/dist/inputs/calendar/calendar.css.cjs +1 -1
  253. package/dist/inputs/calendar/calendar.css.cjs.map +1 -1
  254. package/dist/inputs/calendar/calendar.css.js +1 -1
  255. package/dist/inputs/calendar/calendar.css.js.map +1 -1
  256. package/dist/inputs/calendar/calendar.d.ts.map +1 -1
  257. package/dist/inputs/checkbox/checkbox.css.cjs +1 -1
  258. package/dist/inputs/checkbox/checkbox.css.js +1 -1
  259. package/dist/inputs/checkbox/checkbox.d.ts.map +1 -1
  260. package/dist/inputs/checkbox-group/checkbox-group.d.ts +1 -1
  261. package/dist/inputs/checkbox-group/checkbox-group.d.ts.map +1 -1
  262. package/dist/inputs/combobox/combobox.css.cjs +1 -1
  263. package/dist/inputs/combobox/combobox.css.js +1 -1
  264. package/dist/inputs/combobox/combobox.d.ts.map +1 -1
  265. package/dist/inputs/datagrid/datagrid-column.cjs.map +1 -1
  266. package/dist/inputs/datagrid/datagrid-column.d.ts.map +1 -1
  267. package/dist/inputs/datagrid/datagrid-column.js.map +1 -1
  268. package/dist/inputs/datagrid/datagrid-model.cjs +1 -1
  269. package/dist/inputs/datagrid/datagrid-model.cjs.map +1 -1
  270. package/dist/inputs/datagrid/datagrid-model.d.ts.map +1 -1
  271. package/dist/inputs/datagrid/datagrid-model.js +1 -2
  272. package/dist/inputs/datagrid/datagrid-model.js.map +1 -1
  273. package/dist/inputs/datagrid/datagrid.css.cjs +1 -1
  274. package/dist/inputs/datagrid/datagrid.css.cjs.map +1 -1
  275. package/dist/inputs/datagrid/datagrid.css.js +1 -1
  276. package/dist/inputs/datagrid/datagrid.css.js.map +1 -1
  277. package/dist/inputs/datagrid/datagrid.d.ts +1 -1
  278. package/dist/inputs/datagrid/datagrid.d.ts.map +1 -1
  279. package/dist/inputs/date-picker/date-picker.css.cjs +1 -1
  280. package/dist/inputs/date-picker/date-picker.css.cjs.map +1 -1
  281. package/dist/inputs/date-picker/date-picker.css.js +1 -1
  282. package/dist/inputs/date-picker/date-picker.css.js.map +1 -1
  283. package/dist/inputs/date-picker/date-picker.d.ts.map +1 -1
  284. package/dist/inputs/file-input/file-input-upload.cjs +1 -1
  285. package/dist/inputs/file-input/file-input-upload.cjs.map +1 -1
  286. package/dist/inputs/file-input/file-input-upload.d.ts.map +1 -1
  287. package/dist/inputs/file-input/file-input-upload.js +2 -3
  288. package/dist/inputs/file-input/file-input-upload.js.map +1 -1
  289. package/dist/inputs/file-input/file-input.css.cjs +1 -1
  290. package/dist/inputs/file-input/file-input.css.js +1 -1
  291. package/dist/inputs/file-input/file-input.d.ts.map +1 -1
  292. package/dist/inputs/index.d.ts +28 -28
  293. package/dist/inputs/index.d.ts.map +1 -1
  294. package/dist/inputs/input/input.css.cjs +1 -1
  295. package/dist/inputs/input/input.css.js +1 -1
  296. package/dist/inputs/input/input.d.ts.map +1 -1
  297. package/dist/inputs/message-composer/message-composer.css.cjs +1 -1
  298. package/dist/inputs/message-composer/message-composer.css.js +1 -1
  299. package/dist/inputs/message-composer/message-composer.d.ts +1 -1
  300. package/dist/inputs/message-composer/message-composer.d.ts.map +1 -1
  301. package/dist/inputs/number-input/number-input.d.ts.map +1 -1
  302. package/dist/inputs/otp-input/otp-input.d.ts.map +1 -1
  303. package/dist/inputs/radio/radio.css.cjs +1 -1
  304. package/dist/inputs/radio/radio.css.js +1 -1
  305. package/dist/inputs/radio/radio.d.ts.map +1 -1
  306. package/dist/inputs/radio-group/radio-group.d.ts +2 -2
  307. package/dist/inputs/radio-group/radio-group.d.ts.map +1 -1
  308. package/dist/inputs/rating/rating.d.ts.map +1 -1
  309. package/dist/inputs/select/select.css.cjs +1 -1
  310. package/dist/inputs/select/select.css.js +1 -1
  311. package/dist/inputs/select/select.d.ts.map +1 -1
  312. package/dist/inputs/shared/field-binding.cjs.map +1 -1
  313. package/dist/inputs/shared/field-binding.d.ts.map +1 -1
  314. package/dist/inputs/shared/field-binding.js.map +1 -1
  315. package/dist/inputs/shared/templates.cjs.map +1 -1
  316. package/dist/inputs/shared/templates.d.ts.map +1 -1
  317. package/dist/inputs/shared/templates.js.map +1 -1
  318. package/dist/inputs/slider/slider.d.ts.map +1 -1
  319. package/dist/inputs/switch/switch.css.cjs +1 -1
  320. package/dist/inputs/switch/switch.css.js +1 -1
  321. package/dist/inputs/switch/switch.d.ts.map +1 -1
  322. package/dist/inputs/textarea/textarea.css.cjs +1 -1
  323. package/dist/inputs/textarea/textarea.css.js +1 -1
  324. package/dist/inputs/textarea/textarea.d.ts.map +1 -1
  325. package/dist/inputs/time-picker/time-picker.css.cjs +1 -1
  326. package/dist/inputs/time-picker/time-picker.css.cjs.map +1 -1
  327. package/dist/inputs/time-picker/time-picker.css.js +1 -1
  328. package/dist/inputs/time-picker/time-picker.css.js.map +1 -1
  329. package/dist/inputs/time-picker/time-picker.d.ts.map +1 -1
  330. package/dist/layout/box/box.d.ts.map +1 -1
  331. package/dist/layout/grid/grid.d.ts.map +1 -1
  332. package/dist/layout/index.d.ts +6 -6
  333. package/dist/layout/index.d.ts.map +1 -1
  334. package/dist/layout/navbar/navbar.css.cjs +1 -1
  335. package/dist/layout/navbar/navbar.css.js +1 -1
  336. package/dist/layout/navbar/navbar.d.ts.map +1 -1
  337. package/dist/layout/sidebar/sidebar-group.css.cjs +1 -1
  338. package/dist/layout/sidebar/sidebar-group.css.cjs.map +1 -1
  339. package/dist/layout/sidebar/sidebar-group.css.js +1 -1
  340. package/dist/layout/sidebar/sidebar-group.css.js.map +1 -1
  341. package/dist/layout/sidebar/sidebar.css.cjs +1 -1
  342. package/dist/layout/sidebar/sidebar.css.cjs.map +1 -1
  343. package/dist/layout/sidebar/sidebar.css.js +1 -1
  344. package/dist/layout/sidebar/sidebar.css.js.map +1 -1
  345. package/dist/layout/sidebar/sidebar.d.ts.map +1 -1
  346. package/dist/list-item.cjs.map +1 -1
  347. package/dist/list-item.js.map +1 -1
  348. package/dist/list.cjs +2 -2
  349. package/dist/list.cjs.map +1 -1
  350. package/dist/list.js +15 -16
  351. package/dist/list.js.map +1 -1
  352. package/dist/marquee.cjs +1 -1
  353. package/dist/marquee.cjs.map +1 -1
  354. package/dist/marquee.js +1 -1
  355. package/dist/marquee.js.map +1 -1
  356. package/dist/menu.cjs +5 -5
  357. package/dist/menu.cjs.map +1 -1
  358. package/dist/menu.js +40 -41
  359. package/dist/menu.js.map +1 -1
  360. package/dist/message-composer.cjs +16 -16
  361. package/dist/message-composer.cjs.map +1 -1
  362. package/dist/message-composer.js +61 -61
  363. package/dist/message-composer.js.map +1 -1
  364. package/dist/navbar.cjs +9 -9
  365. package/dist/navbar.cjs.map +1 -1
  366. package/dist/navbar.js +1 -2
  367. package/dist/navbar.js.map +1 -1
  368. package/dist/navigation-menu.cjs +11 -0
  369. package/dist/navigation-menu.cjs.map +1 -0
  370. package/dist/navigation-menu.js +138 -0
  371. package/dist/navigation-menu.js.map +1 -0
  372. package/dist/number-input.cjs +24 -24
  373. package/dist/number-input.cjs.map +1 -1
  374. package/dist/number-input.js +41 -42
  375. package/dist/number-input.js.map +1 -1
  376. package/dist/otp-input.cjs +13 -13
  377. package/dist/otp-input.cjs.map +1 -1
  378. package/dist/otp-input.js +32 -33
  379. package/dist/otp-input.js.map +1 -1
  380. package/dist/overlay/command-palette/command-palette-items.cjs.map +1 -1
  381. package/dist/overlay/command-palette/command-palette-items.d.ts.map +1 -1
  382. package/dist/overlay/command-palette/command-palette-items.js.map +1 -1
  383. package/dist/overlay/command-palette/command-palette.css.cjs +1 -1
  384. package/dist/overlay/command-palette/command-palette.css.cjs.map +1 -1
  385. package/dist/overlay/command-palette/command-palette.css.js +1 -1
  386. package/dist/overlay/command-palette/command-palette.css.js.map +1 -1
  387. package/dist/overlay/command-palette/command-palette.d.ts.map +1 -1
  388. package/dist/overlay/dialog/dialog.css.cjs +1 -1
  389. package/dist/overlay/dialog/dialog.css.js +1 -1
  390. package/dist/overlay/dialog/dialog.d.ts.map +1 -1
  391. package/dist/overlay/drawer/drawer.css.cjs +1 -1
  392. package/dist/overlay/drawer/drawer.css.js +1 -1
  393. package/dist/overlay/drawer/drawer.d.ts +2 -2
  394. package/dist/overlay/drawer/drawer.d.ts.map +1 -1
  395. package/dist/overlay/index.d.ts +7 -5
  396. package/dist/overlay/index.d.ts.map +1 -1
  397. package/dist/overlay/menu/menu.css.cjs +1 -1
  398. package/dist/overlay/menu/menu.css.js +1 -1
  399. package/dist/overlay/menu/menu.d.ts +2 -2
  400. package/dist/overlay/menu/menu.d.ts.map +1 -1
  401. package/dist/overlay/navigation-menu/navigation-menu-item.css.cjs +2 -0
  402. package/dist/overlay/navigation-menu/navigation-menu-item.css.cjs.map +1 -0
  403. package/dist/overlay/navigation-menu/navigation-menu-item.css.js +6 -0
  404. package/dist/overlay/navigation-menu/navigation-menu-item.css.js.map +1 -0
  405. package/dist/overlay/navigation-menu/navigation-menu-panel.css.cjs +2 -0
  406. package/dist/overlay/navigation-menu/navigation-menu-panel.css.cjs.map +1 -0
  407. package/dist/overlay/navigation-menu/navigation-menu-panel.css.js +6 -0
  408. package/dist/overlay/navigation-menu/navigation-menu-panel.css.js.map +1 -0
  409. package/dist/overlay/navigation-menu/navigation-menu.css.cjs +2 -0
  410. package/dist/overlay/navigation-menu/navigation-menu.css.cjs.map +1 -0
  411. package/dist/overlay/navigation-menu/navigation-menu.css.js +6 -0
  412. package/dist/overlay/navigation-menu/navigation-menu.css.js.map +1 -0
  413. package/dist/overlay/navigation-menu/navigation-menu.d.ts +75 -0
  414. package/dist/overlay/navigation-menu/navigation-menu.d.ts.map +1 -0
  415. package/dist/overlay/popover/popover.d.ts +1 -1
  416. package/dist/overlay/popover/popover.d.ts.map +1 -1
  417. package/dist/overlay/shared/use-dialog.cjs +1 -1
  418. package/dist/overlay/shared/use-dialog.cjs.map +1 -1
  419. package/dist/overlay/shared/use-dialog.d.ts.map +1 -1
  420. package/dist/overlay/shared/use-dialog.js +4 -5
  421. package/dist/overlay/shared/use-dialog.js.map +1 -1
  422. package/dist/overlay/shared/use-floating-trigger.cjs +1 -1
  423. package/dist/overlay/shared/use-floating-trigger.cjs.map +1 -1
  424. package/dist/overlay/shared/use-floating-trigger.d.ts.map +1 -1
  425. package/dist/overlay/shared/use-floating-trigger.js +1 -2
  426. package/dist/overlay/shared/use-floating-trigger.js.map +1 -1
  427. package/dist/overlay/tooltip/tooltip.d.ts +1 -1
  428. package/dist/overlay/tooltip/tooltip.d.ts.map +1 -1
  429. package/dist/pagination.cjs.map +1 -1
  430. package/dist/pagination.js.map +1 -1
  431. package/dist/popover.cjs +1 -1
  432. package/dist/popover.cjs.map +1 -1
  433. package/dist/popover.js +0 -1
  434. package/dist/popover.js.map +1 -1
  435. package/dist/progress.cjs.map +1 -1
  436. package/dist/progress.js.map +1 -1
  437. package/dist/radio-group.cjs +5 -5
  438. package/dist/radio-group.cjs.map +1 -1
  439. package/dist/radio-group.js +26 -27
  440. package/dist/radio-group.js.map +1 -1
  441. package/dist/radio.cjs +2 -2
  442. package/dist/radio.cjs.map +1 -1
  443. package/dist/radio.js +41 -41
  444. package/dist/radio.js.map +1 -1
  445. package/dist/rating.cjs +4 -4
  446. package/dist/rating.cjs.map +1 -1
  447. package/dist/rating.js +36 -36
  448. package/dist/rating.js.map +1 -1
  449. package/dist/refine.cjs +692 -683
  450. package/dist/refine.cjs.map +1 -1
  451. package/dist/refine.iife.js +692 -683
  452. package/dist/refine.iife.js.map +1 -1
  453. package/dist/refine.js +743 -734
  454. package/dist/refine.js.map +1 -1
  455. package/dist/select.cjs +42 -42
  456. package/dist/select.cjs.map +1 -1
  457. package/dist/select.js +146 -147
  458. package/dist/select.js.map +1 -1
  459. package/dist/separator.cjs.map +1 -1
  460. package/dist/separator.js.map +1 -1
  461. package/dist/sidebar.cjs +17 -17
  462. package/dist/sidebar.cjs.map +1 -1
  463. package/dist/sidebar.js +7 -8
  464. package/dist/sidebar.js.map +1 -1
  465. package/dist/skeleton.cjs +3 -3
  466. package/dist/skeleton.cjs.map +1 -1
  467. package/dist/skeleton.js +1 -2
  468. package/dist/skeleton.js.map +1 -1
  469. package/dist/slider.cjs +12 -12
  470. package/dist/slider.cjs.map +1 -1
  471. package/dist/slider.js +54 -55
  472. package/dist/slider.js.map +1 -1
  473. package/dist/step.cjs.map +1 -1
  474. package/dist/step.js.map +1 -1
  475. package/dist/stepper.cjs +2 -2
  476. package/dist/stepper.cjs.map +1 -1
  477. package/dist/stepper.js +8 -7
  478. package/dist/stepper.js.map +1 -1
  479. package/dist/styles/index.d.ts +2 -2
  480. package/dist/styles/index.d.ts.map +1 -1
  481. package/dist/styles/preflight.css +1 -1
  482. package/dist/styles/theme.css +15 -30
  483. package/dist/switch.cjs +3 -3
  484. package/dist/switch.cjs.map +1 -1
  485. package/dist/switch.js +28 -28
  486. package/dist/switch.js.map +1 -1
  487. package/dist/tab-item.cjs +2 -2
  488. package/dist/tab-item.cjs.map +1 -1
  489. package/dist/tab-item.js +21 -21
  490. package/dist/tab-item.js.map +1 -1
  491. package/dist/tab-panel.cjs +2 -2
  492. package/dist/tab-panel.cjs.map +1 -1
  493. package/dist/tab-panel.js +9 -9
  494. package/dist/tab-panel.js.map +1 -1
  495. package/dist/table.cjs +1 -1
  496. package/dist/table.cjs.map +1 -1
  497. package/dist/table.js +1 -1
  498. package/dist/table.js.map +1 -1
  499. package/dist/tabs.cjs +6 -6
  500. package/dist/tabs.cjs.map +1 -1
  501. package/dist/tabs.js +14 -15
  502. package/dist/tabs.js.map +1 -1
  503. package/dist/text.cjs.map +1 -1
  504. package/dist/text.js.map +1 -1
  505. package/dist/textarea.cjs +11 -11
  506. package/dist/textarea.cjs.map +1 -1
  507. package/dist/textarea.js +59 -59
  508. package/dist/textarea.js.map +1 -1
  509. package/dist/time-picker.cjs.map +1 -1
  510. package/dist/time-picker.js.map +1 -1
  511. package/dist/toast.cjs +16 -16
  512. package/dist/toast.cjs.map +1 -1
  513. package/dist/toast.js +20 -21
  514. package/dist/toast.js.map +1 -1
  515. package/dist/tooltip.cjs.map +1 -1
  516. package/dist/tooltip.js.map +1 -1
  517. package/dist/typing-indicator.cjs +1 -1
  518. package/dist/typing-indicator.cjs.map +1 -1
  519. package/dist/typing-indicator.js +1 -1
  520. package/dist/typing-indicator.js.map +1 -1
  521. package/package.json +104 -78
package/dist/select.js CHANGED
@@ -1,18 +1,17 @@
1
- import { lifecycleSignal as e } from "./core/ore.js";
2
- import { createChoiceField as t } from "./core/choice-field.js";
3
- import { reducedMotionMixin as n } from "./styles/mixins/accessibility.css.js";
4
- import { roundedVariantMixin as r } from "./styles/mixins/shape.css.js";
5
- import { colorThemeMixin as i } from "./styles/mixins/theme.css.js";
1
+ import { reducedMotionMixin as e } from "./styles/mixins/accessibility.css.js";
2
+ import { roundedVariantMixin as t } from "./styles/mixins/shape.css.js";
3
+ import { colorThemeMixin as n } from "./styles/mixins/theme.css.js";
4
+ import { createChoiceField as r } from "./core/choice-field.js";
5
+ import { lifecycleSignal as i } from "./core/ore.js";
6
6
  import { createListboxDropdown as a } from "./core/option-list.js";
7
7
  import { disablableBundle as o, loadableBundle as s, roundableBundle as c, sizableBundle as l, themableBundle as u } from "./shared/prop-bundles.js";
8
- import { defineFieldValue as d, dispatchNativeFieldEvent as f, setFieldValue as p } from "./inputs/shared/native-field-event.js";
9
- import m from "./inputs/select/select.css.js";
10
- import { bind as h, define as g, getHost as _, html as v, onCleanup as y, onMounted as b, prop as x, useEmit as S, useField as C, useSlots as w } from "@vielzeug/ore";
11
- import { computed as T, effect as E, signal as D } from "@vielzeug/ripple";
12
- import { watch as O } from "@vielzeug/ripple/watch";
8
+ import { defineFieldValue as d, dispatchNativeFieldEvent as f, setFieldValue as ee } from "./inputs/shared/native-field-event.js";
9
+ import p from "./inputs/select/select.css.js";
10
+ import { bind as m, define as h, getHost as g, html as _, onCleanup as v, onMounted as y, prop as b, useEmit as x, useField as S, useSlots as C } from "@vielzeug/ore";
11
+ import { computed as w, effect as T, signal as E, watch as D } from "@vielzeug/ripple";
13
12
  //#region src/inputs/select/select.ts
14
- var k = "ore-select";
15
- g(k, {
13
+ var O = "ore-select";
14
+ h(O, {
16
15
  formAssociated: !0,
17
16
  props: {
18
17
  ...u,
@@ -20,22 +19,22 @@ g(k, {
20
19
  ...o,
21
20
  ...s,
22
21
  ...c,
23
- error: x.string(),
24
- fullwidth: x.bool(!1),
25
- helper: x.string(),
26
- label: x.string(),
27
- "label-placement": x.oneOf(["inset", "outside"], "inset"),
28
- multiple: x.bool(!1),
29
- name: x.string(),
30
- options: x.json(void 0),
31
- placeholder: x.string(),
32
- required: x.bool(!1),
33
- success: x.bool(!1),
34
- value: x.string(),
35
- variant: x.string()
22
+ error: b.string(),
23
+ fullwidth: b.bool(!1),
24
+ helper: b.string(),
25
+ label: b.string(),
26
+ "label-placement": b.oneOf(["inset", "outside"], "inset"),
27
+ multiple: b.bool(!1),
28
+ name: b.string(),
29
+ options: b.json(void 0),
30
+ placeholder: b.string(),
31
+ required: b.bool(!1),
32
+ success: b.bool(!1),
33
+ value: b.string(),
34
+ variant: b.string()
36
35
  },
37
- setup(n) {
38
- let r = _(), i = S(), o = w(), s = r.shadowRoot, c = D([]), l = T(() => !!n.loading.value);
36
+ setup(e) {
37
+ let t = g(), n = x(), o = C(), s = t.shadowRoot, c = E([]), l = w(() => !!e.loading.value);
39
38
  function u(e) {
40
39
  return {
41
40
  disabled: !!e.disabled,
@@ -44,60 +43,60 @@ g(k, {
44
43
  value: e.value
45
44
  };
46
45
  }
47
- let m = T(() => {
48
- let e = n.options.value;
49
- return Array.isArray(e) ? e.map(u) : c.value;
50
- }), g = null, x = null, k = e(y), A = t({
51
- disabled: n.disabled,
52
- error: n.error,
53
- helper: n.helper,
54
- label: n.label,
55
- labelPlacement: n["label-placement"],
56
- multiple: n.multiple,
46
+ let p = w(() => {
47
+ let t = e.options.value;
48
+ return Array.isArray(t) ? t.map(u) : c.value;
49
+ }), h = null, b = null, O = i(v), k = r({
50
+ disabled: e.disabled,
51
+ error: e.error,
52
+ helper: e.helper,
53
+ label: e.label,
54
+ labelPlacement: e["label-placement"],
55
+ multiple: e.multiple,
57
56
  prefix: "select",
58
- required: n.required,
59
- signal: k,
60
- value: n.value
57
+ required: e.required,
58
+ signal: O,
59
+ value: e.value
61
60
  });
62
- A.attachFormField(C({
63
- disabled: A.disabled,
64
- onReset: A.reset,
61
+ k.attachFormField(S({
62
+ disabled: k.disabled,
63
+ onReset: k.reset,
65
64
  toFormValue: (e) => e,
66
- validationMessage: A.validationMessage,
67
- validity: A.validity,
68
- value: A.formValue
65
+ validationMessage: k.validationMessage,
66
+ validity: k.validity,
67
+ value: k.formValue
69
68
  }));
70
- let j = a({
71
- getBoundary: () => r,
72
- getFocusedOptionElement: () => x?.querySelector("[data-focused]") ?? null,
73
- getItems: () => m.value,
74
- getPanel: () => x,
75
- getReference: () => g,
76
- getTrigger: () => g,
77
- isDisabled: () => A.disabled.value,
69
+ let A = a({
70
+ getBoundary: () => t,
71
+ getFocusedOptionElement: () => b?.querySelector("[data-focused]") ?? null,
72
+ getItems: () => p.value,
73
+ getPanel: () => b,
74
+ getReference: () => h,
75
+ getTrigger: () => h,
76
+ isDisabled: () => k.disabled.value,
78
77
  onClose: (e) => {
79
- i("open-change", {
78
+ n("open-change", {
80
79
  open: !1,
81
80
  reason: e
82
- }), A.triggerValidation("blur");
81
+ }), k.triggerValidation("blur");
83
82
  },
84
- onOpen: (e) => i("open-change", {
83
+ onOpen: (e) => n("open-change", {
85
84
  open: !0,
86
85
  reason: e
87
86
  }),
88
- signal: k
89
- }), { triggerValidation: M } = A, N = A.selectedValues, P = A.disabled;
90
- d(r, () => A.formValue.value, (e) => {
91
- A.setValues(e ? e.split(",") : []);
87
+ signal: O
88
+ }), { triggerValidation: j } = k, M = k.selectedValues, N = k.disabled;
89
+ d(t, () => k.formValue.value, (e) => {
90
+ k.setValues(e ? e.split(",") : []);
92
91
  });
93
- let { fieldId: F } = A, I = `listbox-${F}`, { focusedIndex: L, isOpen: R } = j;
94
- h({ attr: {
95
- "has-error": () => n.error.value ? !0 : void 0,
96
- open: () => R.value ? !0 : void 0,
97
- size: n.size,
98
- variant: n.variant
92
+ let { fieldId: P } = k, F = `listbox-${P}`, { focusedIndex: I, isOpen: L } = A;
93
+ m({ attr: {
94
+ "has-error": () => e.error.value ? !0 : void 0,
95
+ open: () => L.value ? !0 : void 0,
96
+ size: e.size,
97
+ variant: e.variant
99
98
  } });
100
- function z() {
99
+ function R() {
101
100
  let e = s?.querySelector("slot");
102
101
  if (!e) return;
103
102
  let t = e.assignedElements({ flatten: !0 }), n = [];
@@ -122,16 +121,16 @@ g(k, {
122
121
  }
123
122
  c.value = n;
124
123
  }
125
- let B = T(() => {
126
- if (N.value.length === 0) return "";
127
- if (n.multiple.value && N.value.length > 1) return `${N.value.length} selected`;
128
- let e = N.value[0];
129
- return m.value.find((t) => t.value === e)?.label ?? e;
130
- }), V = T(() => n.multiple.value ? N.value.map((e) => ({
131
- label: m.value.find((t) => t.value === e)?.label ?? e,
124
+ let z = w(() => {
125
+ if (M.value.length === 0) return "";
126
+ if (e.multiple.value && M.value.length > 1) return `${M.value.length} selected`;
127
+ let t = M.value[0];
128
+ return p.value.find((e) => e.value === t)?.label ?? t;
129
+ }), B = w(() => e.multiple.value ? M.value.map((e) => ({
130
+ label: p.value.find((t) => t.value === e)?.label ?? e,
132
131
  value: e
133
- })) : []), H = T(() => n.multiple.value && N.value.length > 0), U = T(() => B.value || n.placeholder.value || "");
134
- function W(e) {
132
+ })) : []), V = w(() => e.multiple.value && M.value.length > 0), H = w(() => z.value || e.placeholder.value || "");
133
+ function U(e) {
135
134
  let t = [], n = /* @__PURE__ */ new Map();
136
135
  for (let t of e) {
137
136
  let e = t.group, r = n.get(e);
@@ -151,55 +150,55 @@ g(k, {
151
150
  }
152
151
  return t;
153
152
  }
154
- let G = T(() => W(m.value));
155
- function K() {
156
- p(r, A.formValue.value), f(r, "input"), f(r, "change");
153
+ let W = w(() => U(p.value));
154
+ function G() {
155
+ ee(t, k.formValue.value), f(t, "input"), f(t, "change");
157
156
  }
158
- function ee(e) {
157
+ function te(e) {
159
158
  e.stopPropagation();
160
159
  let t = e.detail?.value;
161
- t !== void 0 && (A.removeValue(t), K(), M("change"));
160
+ t !== void 0 && (k.removeValue(t), G(), j("change"));
162
161
  }
163
- function q(e = "programmatic") {
164
- j.open(e), requestAnimationFrame(() => {
165
- let e = N.value.length > 0 ? m.value.findIndex((e) => e.value === N.value[0]) : -1;
162
+ function K(e = "programmatic") {
163
+ A.open(e), requestAnimationFrame(() => {
164
+ let e = M.value.length > 0 ? p.value.findIndex((e) => e.value === M.value[0]) : -1;
166
165
  if (e >= 0) {
167
- j.set(e);
166
+ A.set(e);
168
167
  return;
169
168
  }
170
- j.navigate("first");
169
+ A.navigate("first");
171
170
  });
172
171
  }
173
- function J(e, t) {
174
- e.disabled || (n.multiple.value ? A.toggleValue(e.value) : (A.selectValue(e.value), j.close()), K(), M("change"));
172
+ function q(t, n) {
173
+ t.disabled || (e.multiple.value ? k.toggleValue(t.value) : (k.selectValue(t.value), A.close()), G(), j("change"));
175
174
  }
176
- function Y(e) {
177
- if (!P.value && !j.handleKeydown(e)) switch (e.key) {
175
+ function J(e) {
176
+ if (!N.value && !A.handleKeydown(e)) switch (e.key) {
178
177
  case " ":
179
178
  case "Enter":
180
- if (e.preventDefault(), R.value) {
181
- let t = L.value, n = m.value;
182
- t >= 0 && t < n.length && J(n[t], e);
183
- } else q("keyboard");
179
+ if (e.preventDefault(), L.value) {
180
+ let t = I.value, n = p.value;
181
+ t >= 0 && t < n.length && q(n[t], e);
182
+ } else K("keyboard");
184
183
  break;
185
- case "Tab": j.close();
184
+ case "Tab": A.close();
186
185
  }
187
186
  }
188
- let X = () => U.value, Z = () => n.label.value ?? "", Q = () => n.placeholder.value ?? "", $ = () => n["label-placement"].value ?? "inset", te = () => n.color?.value ?? void 0, ne = () => n.size?.value ?? void 0, re = () => n.variant?.value ?? void 0, ie = () => n.rounded?.value ?? void 0, ae = () => n.helper.value ?? "", oe = () => n.error.value ?? "", se = () => P.value ? !0 : void 0, ce = () => n.required.value ? !0 : void 0, le = () => n.fullwidth.value ? !0 : void 0, ue = () => P.value ? "-1" : "0";
189
- O(o.elements(), () => z(), { immediate: !0 });
190
- let de = E(() => {
191
- R.value ? x && "showPopover" in x && !x.matches(":popover-open") && x.showPopover() : x && "hidePopover" in x && x.matches(":popover-open") && x.hidePopover();
187
+ let Y = () => H.value, X = () => e.label.value ?? "", Z = () => e.placeholder.value ?? "", Q = () => e["label-placement"].value ?? "inset", ne = () => e.color?.value ?? void 0, re = () => e.size?.value ?? void 0, ie = () => e.variant?.value ?? void 0, ae = () => e.rounded?.value ?? void 0, oe = () => e.helper.value ?? "", $ = () => e.error.value ?? "", se = () => N.value ? !0 : void 0, ce = () => e.required.value ? !0 : void 0, le = () => e.fullwidth.value ? !0 : void 0, ue = () => N.value ? "-1" : "0";
188
+ D(o.elements(), () => R(), { immediate: !0 });
189
+ let de = T(() => {
190
+ L.value ? b && "showPopover" in b && !b.matches(":popover-open") && b.showPopover() : b && "hidePopover" in b && b.matches(":popover-open") && b.hidePopover();
192
191
  });
193
- return y(() => de.dispose()), b(() => {
192
+ return v(() => de.dispose()), y(() => {
194
193
  let e = null, t = null;
195
- return g && (e = (e) => {
196
- e.stopPropagation(), !P.value && (R.value ? j.close("trigger") : q("click"));
194
+ return h && (e = (e) => {
195
+ e.stopPropagation(), !N.value && (L.value ? A.close("trigger") : K("click"));
197
196
  }, t = (e) => {
198
- Y(e);
199
- }, g.addEventListener("click", e), g.addEventListener("keydown", t)), () => {
200
- g && e && g.removeEventListener("click", e), g && t && g.removeEventListener("keydown", t);
197
+ J(e);
198
+ }, h.addEventListener("click", e), h.addEventListener("keydown", t)), () => {
199
+ h && e && h.removeEventListener("click", e), h && t && h.removeEventListener("keydown", t);
201
200
  };
202
- }), v`
201
+ }), _`
203
202
  <slot style="display:none"></slot>
204
203
  <ore-input
205
204
  class="trigger"
@@ -208,38 +207,38 @@ g(k, {
208
207
  tabindex="${ue}"
209
208
  role="combobox"
210
209
  aria-haspopup="listbox"
211
- aria-controls="${I}"
212
- aria-disabled="${() => P.value ? "true" : null}"
213
- aria-expanded="${() => String(R.value)}"
214
- aria-invalid="${() => n.error.value ? "true" : null}"
215
- value="${X}"
216
- label="${Z}"
217
- placeholder="${Q}"
218
- label-placement="${$}"
219
- color="${te}"
220
- size="${ne}"
221
- variant="${re}"
222
- rounded="${ie}"
223
- helper="${ae}"
224
- error="${oe}"
210
+ aria-controls="${F}"
211
+ aria-disabled="${() => N.value ? "true" : null}"
212
+ aria-expanded="${() => String(L.value)}"
213
+ aria-invalid="${() => e.error.value ? "true" : null}"
214
+ value="${Y}"
215
+ label="${X}"
216
+ placeholder="${Z}"
217
+ label-placement="${Q}"
218
+ color="${ne}"
219
+ size="${re}"
220
+ variant="${ie}"
221
+ rounded="${ae}"
222
+ helper="${oe}"
223
+ error="${$}"
225
224
  ?disabled="${se}"
226
225
  ?required="${ce}"
227
226
  ?fullwidth="${le}"
228
- ?success="${() => n.success.value}"
227
+ ?success="${() => e.success.value}"
229
228
  ref="${(e) => {
230
- g = e;
229
+ h = e;
231
230
  }}">
232
- <div slot="prefix" class="chips-row" ?hidden="${() => !H.value}">
233
- ${() => V.value.map((e) => v`
231
+ <div slot="prefix" class="chips-row" ?hidden="${() => !V.value}">
232
+ ${() => B.value.map((t) => _`
234
233
  <ore-chip
235
- value="${e.value}"
236
- label="${e.label}"
234
+ value="${t.value}"
235
+ label="${t.label}"
237
236
  mode="removable"
238
237
  variant="flat"
239
238
  size="sm"
240
- color="${n.color}"
241
- @remove="${ee}">
242
- ${e.label}
239
+ color="${e.color}"
240
+ @remove="${te}">
241
+ ${t.label}
243
242
  </ore-chip>
244
243
  `)}
245
244
  </div>
@@ -254,35 +253,35 @@ g(k, {
254
253
  class="dropdown"
255
254
  part="dropdown"
256
255
  popover="manual"
257
- ?data-open="${R}"
256
+ ?data-open="${L}"
258
257
  role="listbox"
259
- id="${I}"
258
+ id="${F}"
260
259
  aria-label="Options"
261
260
  ref="${(e) => {
262
- x = e;
261
+ b = e;
263
262
  }}">
264
263
  <div class="dropdown-loading" ?hidden="${() => !l.value}">Loading…</div>
265
- <div class="dropdown-empty" ?hidden="${() => l.value || m.value.length > 0}">No options</div>
266
- <div class="options-list" ?hidden="${() => l.value || m.value.length === 0}">
267
- ${() => G.value.map((e) => e.type === "group" ? v`
264
+ <div class="dropdown-empty" ?hidden="${() => l.value || p.value.length > 0}">No options</div>
265
+ <div class="options-list" ?hidden="${() => l.value || p.value.length === 0}">
266
+ ${() => W.value.map((e) => e.type === "group" ? _`
268
267
  <div class="optgroup-label" role="presentation">${e.label}</div>
269
- ` : v`
268
+ ` : _`
270
269
  <div
271
270
  class="option"
272
271
  role="option"
273
- id="${`${F}-opt-${e.idx}`}"
272
+ id="${`${P}-opt-${e.idx}`}"
274
273
  data-option-index="${String(e.idx)}"
275
274
  data-option-value="${e.opt.value}"
276
- aria-selected="${() => String(N.value.includes(e.opt.value))}"
275
+ aria-selected="${() => String(M.value.includes(e.opt.value))}"
277
276
  aria-disabled="${() => String(e.opt.disabled)}"
278
- ?data-focused="${() => L.value === e.idx}"
279
- ?data-selected="${() => N.value.includes(e.opt.value)}"
277
+ ?data-focused="${() => I.value === e.idx}"
278
+ ?data-selected="${() => M.value.includes(e.opt.value)}"
280
279
  ?data-disabled="${() => e.opt.disabled}"
281
280
  @click="${(t) => {
282
- t.stopPropagation(), J(e.opt, t);
281
+ t.stopPropagation(), q(e.opt, t);
283
282
  }}"
284
283
  @pointerenter="${() => {
285
- j.set(e.idx);
284
+ A.set(e.idx);
286
285
  }}">
287
286
  <span>${e.opt.label}</span>
288
287
  <span class="option-check" aria-hidden="true">
@@ -296,13 +295,13 @@ g(k, {
296
295
  },
297
296
  shadow: { delegatesFocus: !0 },
298
297
  styles: [
299
- i,
300
298
  n,
301
- r,
302
- m
299
+ e,
300
+ t,
301
+ p
303
302
  ]
304
303
  });
305
304
  //#endregion
306
- export { k as SELECT_TAG };
305
+ export { O as SELECT_TAG };
307
306
 
308
307
  //# sourceMappingURL=select.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"select.js","names":[],"sources":["../src/inputs/select/select.ts"],"sourcesContent":["import { define, html, prop, bind, getHost, onCleanup, onMounted, useEmit, useSlots } from '@vielzeug/ore';\nimport { useField } from '@vielzeug/ore';\nimport { computed, effect, signal } from '@vielzeug/ripple';\nimport { watch } from '@vielzeug/ripple/watch';\n\nimport type { OverlayOpenChangeDetail, OverlayOpenReason } from '../../core';\nimport type { SelectableFieldProps } from '../../shared';\nimport type { VisualVariant } from '../../types';\n\nimport { lifecycleSignal, createChoiceField, createListboxDropdown } from '../../core';\nimport '../../feedback/chip/chip';\nimport '../../content/icon/icon';\nimport '../input/input';\nimport { disablableBundle, loadableBundle, roundableBundle, sizableBundle, themableBundle } from '../../shared';\nimport { colorThemeMixin, reducedMotionMixin, roundedVariantMixin } from '../../styles';\nimport { defineFieldValue, dispatchNativeFieldEvent, setFieldValue } from '../shared/native-field-event';\nimport componentStyles from './select.css?inline';\n\n// ── Types ─────────────────────────────────────────────────────────────\n\ntype OptionItem = {\n disabled: boolean;\n group?: string;\n label: string;\n value: string;\n};\n\nexport type OreSelectOptionInput = {\n disabled?: boolean;\n group?: string;\n label?: string;\n value: string;\n};\n\ntype FlatRow =\n | {\n idx: number;\n opt: OptionItem;\n type: 'option';\n }\n | {\n label: string;\n type: 'group';\n };\n\n// ── Styles ─────────────────────────────────────────────────────────────\n\n// ── Component Props ─────────────────────────────────────────────────────────────\n\n/** Select component properties */\n\nexport type OreSelectEvents = {\n change: Event;\n input: Event;\n 'open-change': OverlayOpenChangeDetail;\n};\n\nexport type OreSelectProps = SelectableFieldProps<Exclude<VisualVariant, 'text' | 'frost'>> & {\n /** Show loading state in dropdown */\n loading?: boolean;\n /** Allow selecting multiple options */\n multiple?: boolean;\n /** JS options array (alternative to slotted <option> elements) */\n options?: OreSelectOptionInput[];\n /** Mark the field as required */\n required?: boolean;\n};\n\n/**\n * A fully custom form-associated select dropdown with keyboard navigation and ARIA support.\n * Reads `<option>` and `<optgroup>` children from the default slot.\n *\n * @element ore-select\n *\n * @attr {string} label - Label text\n * @attr {string} label-placement - 'inset' | 'outside'\n * @attr {string} value - Current selected value(s) (comma-separated for multiple)\n * @attr {string} placeholder - Placeholder when no option selected\n * @attr {string} name - Form field name\n * @attr {boolean} multiple - Enable multi-select\n * @attr {boolean} disabled - Disable the select\n * @attr {boolean} required - Required field\n * @attr {string} helper - Helper text below the select\n * @attr {string} error - Error message\n * @attr {boolean} success - Show an inline success check icon (suppressed while `error` is set)\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} variant - Visual variant: 'solid' | 'flat' | 'bordered' | 'outline' | 'ghost'\n * @attr {string} size - Component size: 'sm' | 'md' | 'lg'\n * @attr {string} rounded - Border radius: 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | 'full'\n * @attr {boolean} fullwidth - Expand to full width\n *\n * @fires input - Fired when selection changes.\n * @fires change - Fired when selection changes.\n * @fires open-change - Fired when the dropdown state changes. detail: { open, reason }\n *\n * @slot - `<option>` and `<optgroup>` elements\n *\n * @cssprop --select-bg - Background\n * @cssprop --select-border-color - Border color\n * @cssprop --select-radius - Border radius\n * @cssprop --select-padding - Padding\n * @cssprop --select-font-size - Font size\n * @cssprop --select-placeholder-color - Placeholder text color\n *\n * @part trigger - The `ore-input` trigger element that opens the dropdown.\n * @part dropdown - The dropdown listbox panel container.\n *\n * @example\n * ```html\n * <ore-select label=\"Role\" value=\"admin\">\n * <option value=\"admin\">Administrator</option>\n * <option value=\"editor\">Editor</option>\n * <option value=\"viewer\">Viewer</option>\n * </ore-select>\n *\n * <ore-select label=\"Tags\" multiple color=\"primary\">\n * <optgroup label=\"Frontend\">\n * <option value=\"react\">React</option>\n * <option value=\"vue\">Vue</option>\n * </optgroup>\n * <optgroup label=\"Backend\">\n * <option value=\"node\">Node.js</option>\n * </optgroup>\n * </ore-select>\n * ```\n */\nexport const SELECT_TAG = 'ore-select' as const;\ndefine<OreSelectProps>(SELECT_TAG, {\n formAssociated: true,\n props: {\n ...themableBundle,\n ...sizableBundle,\n ...disablableBundle,\n ...loadableBundle,\n ...roundableBundle,\n error: prop.string(),\n fullwidth: prop.bool(false),\n helper: prop.string(),\n label: prop.string(),\n 'label-placement': prop.oneOf(['inset', 'outside'] as const, 'inset'),\n multiple: prop.bool(false),\n name: prop.string(),\n options: prop.json(undefined as OreSelectOptionInput[] | undefined),\n placeholder: prop.string(),\n required: prop.bool(false),\n success: prop.bool(false),\n value: prop.string(),\n variant: prop.string<'flat' | 'solid' | 'bordered' | 'outline' | 'ghost'>(),\n },\n setup(props) {\n const el = getHost();\n const emit = useEmit<OreSelectEvents>();\n const slots = useSlots();\n\n const shadowRoot = el.shadowRoot;\n // ────────────────────────────────────────────────────────────────\n // State & Context\n // ────────────────────────────────────────────────────────────────\n\n const slottedOptions = signal<OptionItem[]>([]);\n const isLoading = computed(() => Boolean(props.loading.value));\n\n // Merged options: explicit prop value overrides slotted options\n function normalizeOption(option: OreSelectOptionInput): OptionItem {\n return {\n disabled: Boolean(option.disabled),\n group: option.group,\n label: option.label ?? option.value,\n value: option.value,\n };\n }\n\n const options = computed(() => {\n const explicitOptions = props.options.value;\n\n return Array.isArray(explicitOptions) ? explicitOptions.map(normalizeOption) : slottedOptions.value;\n });\n let triggerEl: HTMLElement | null = null;\n let dropdownEl: HTMLElement | null = null;\n\n const abortSignal = lifecycleSignal(onCleanup);\n const choice = createChoiceField({\n disabled: props.disabled,\n error: props.error,\n helper: props.helper,\n label: props.label,\n labelPlacement: props['label-placement'],\n multiple: props.multiple,\n prefix: 'select',\n required: props.required,\n signal: abortSignal,\n value: props.value,\n });\n\n choice.attachFormField(\n useField<string>({\n disabled: choice.disabled,\n onReset: choice.reset,\n toFormValue: (v) => v,\n validationMessage: choice.validationMessage,\n validity: choice.validity,\n value: choice.formValue,\n }),\n );\n\n const optionList = createListboxDropdown<OptionItem>({\n getBoundary: () => el,\n getFocusedOptionElement: () => dropdownEl?.querySelector<HTMLElement>('[data-focused]') ?? null,\n getItems: () => options.value,\n getPanel: () => dropdownEl,\n getReference: () => triggerEl,\n getTrigger: () => triggerEl,\n isDisabled: () => choice.disabled.value,\n onClose: (reason) => {\n emit('open-change', { open: false, reason });\n choice.triggerValidation('blur');\n },\n onOpen: (reason) => emit('open-change', { open: true, reason }),\n signal: abortSignal,\n });\n\n const { triggerValidation } = choice;\n const selectedValues = choice.selectedValues;\n const isDisabled = choice.disabled;\n\n defineFieldValue(\n el,\n () => choice.formValue.value,\n (value) => {\n choice.setValues(value ? value.split(',') : []);\n },\n );\n\n const { fieldId: selectId } = choice;\n const listboxId = `listbox-${selectId}`;\n const { focusedIndex, isOpen } = optionList;\n\n // Sync host attributes for CSS hooks\n bind({\n attr: {\n 'has-error': () => (props.error.value ? true : undefined),\n open: () => (isOpen.value ? true : undefined),\n size: props.size,\n variant: props.variant,\n },\n });\n\n // ────────────────────────────────────────────────────────────────\n // Option Reading from Slot\n // ────────────────────────────────────────────────────────────────\n\n function readOptions() {\n const slot = shadowRoot?.querySelector<HTMLSlotElement>('slot');\n\n if (!slot) return;\n\n const assigned = slot.assignedElements({ flatten: true });\n const items: OptionItem[] = [];\n\n for (const el of assigned) {\n if (el.tagName === 'OPTION') {\n const opt = el as HTMLOptionElement;\n\n items.push({ disabled: opt.disabled, label: opt.text || opt.value, value: opt.value });\n } else if (el.tagName === 'OPTGROUP') {\n const group = el as HTMLOptGroupElement;\n const groupLabel = group.label;\n\n for (const child of Array.from(group.querySelectorAll('option'))) {\n const opt = child as HTMLOptionElement;\n\n items.push({ disabled: opt.disabled, group: groupLabel, label: opt.text || opt.value, value: opt.value });\n }\n }\n }\n\n slottedOptions.value = items;\n }\n\n const displayLabel = computed(() => {\n if (selectedValues.value.length === 0) return '';\n\n if (props.multiple.value && selectedValues.value.length > 1) {\n return `${selectedValues.value.length} selected`;\n }\n\n const first = selectedValues.value[0];\n\n return options.value.find((o) => o.value === first)?.label ?? first;\n });\n const selectedChipItems = computed(() => {\n if (!props.multiple.value) return [];\n\n return selectedValues.value.map((value) => ({\n label: options.value.find((o) => o.value === value)?.label ?? value,\n value,\n }));\n });\n const showChips = computed(() => props.multiple.value && selectedValues.value.length > 0);\n const triggerText = computed(() => displayLabel.value || props.placeholder.value || '');\n\n function buildFlatList(opts: OptionItem[]): FlatRow[] {\n const flat: FlatRow[] = [];\n const groups = new Map<string | undefined, OptionItem[]>();\n\n for (const opt of opts) {\n const key = opt.group;\n\n let group = groups.get(key);\n\n if (!group) {\n group = [];\n groups.set(key, group);\n }\n\n group.push(opt);\n }\n\n let globalIdx = 0;\n\n for (const [groupLabel, groupOpts] of groups) {\n if (groupLabel !== undefined) flat.push({ label: groupLabel, type: 'group' });\n\n for (const opt of groupOpts) flat.push({ idx: globalIdx++, opt, type: 'option' });\n }\n\n return flat;\n }\n\n const flatRows = computed(() => buildFlatList(options.value));\n\n function emitChange(): void {\n setFieldValue(el, choice.formValue.value);\n dispatchNativeFieldEvent(el, 'input');\n dispatchNativeFieldEvent(el, 'change');\n }\n\n function removeChip(event: Event): void {\n event.stopPropagation();\n\n const value = (event as CustomEvent<{ value?: string }>).detail?.value;\n\n if (value === undefined) return;\n\n choice.removeValue(value);\n emitChange();\n triggerValidation('change');\n }\n\n function openPopup(reason: OverlayOpenReason = 'programmatic') {\n optionList.open(reason);\n\n requestAnimationFrame(() => {\n const selectedIndex =\n selectedValues.value.length > 0\n ? options.value.findIndex((option) => option.value === selectedValues.value[0])\n : -1;\n\n if (selectedIndex >= 0) {\n optionList.set(selectedIndex);\n\n return;\n }\n\n optionList.navigate('first');\n });\n }\n\n // Selection\n\n function selectOption(opt: OptionItem, _e?: Event) {\n if (opt.disabled) return;\n\n if (props.multiple.value) {\n choice.toggleValue(opt.value);\n } else {\n choice.selectValue(opt.value);\n optionList.close();\n }\n\n emitChange();\n triggerValidation('change');\n }\n\n // Keyboard navigation\n\n function handleTriggerKeydown(e: KeyboardEvent) {\n if (isDisabled.value) return;\n\n // Let optionList handle arrow key navigation\n if (optionList.handleKeydown(e)) return;\n\n switch (e.key) {\n case ' ':\n case 'Enter':\n e.preventDefault();\n\n if (isOpen.value) {\n const idx = focusedIndex.value;\n const opts = options.value;\n\n if (idx >= 0 && idx < opts.length) selectOption(opts[idx], e);\n } else {\n openPopup('keyboard');\n }\n\n break;\n case 'Tab':\n optionList.close();\n break;\n }\n }\n\n // ore-input prop helpers\n const inputValue = () => triggerText.value;\n const inputLabel = () => props.label.value ?? '';\n const inputPlaceholder = () => props.placeholder.value ?? '';\n const inputLabelPlacement = () => props['label-placement'].value ?? 'inset';\n const inputColor = () => props.color?.value ?? undefined;\n const inputSize = () => props.size?.value ?? undefined;\n const inputVariant = () => props.variant?.value ?? undefined;\n const inputRounded = () => props.rounded?.value ?? undefined;\n const inputHelper = () => props.helper.value ?? '';\n const inputError = () => props.error.value ?? '';\n const inputDisabled = () => (isDisabled.value ? true : undefined);\n const inputRequired = () => (props.required.value ? true : undefined);\n const inputFullwidth = () => (props.fullwidth.value ? true : undefined);\n const tabIndexAttr = () => (isDisabled.value ? '-1' : '0');\n\n watch(slots.elements(), () => readOptions(), { immediate: true });\n\n const stopPopoverSync = effect(() => {\n if (isOpen.value) {\n if (dropdownEl && 'showPopover' in dropdownEl && !dropdownEl.matches(':popover-open')) dropdownEl.showPopover();\n } else {\n if (dropdownEl && 'hidePopover' in dropdownEl && dropdownEl.matches(':popover-open')) dropdownEl.hidePopover();\n }\n });\n\n onCleanup(() => stopPopoverSync.dispose());\n\n onMounted(() => {\n let onTriggerClick: ((event: MouseEvent) => void) | null = null;\n let onTriggerKeydown: ((event: KeyboardEvent) => void) | null = null;\n\n if (triggerEl) {\n onTriggerClick = (event: MouseEvent) => {\n event.stopPropagation();\n\n if (isDisabled.value) return;\n\n if (isOpen.value) optionList.close('trigger');\n else openPopup('click');\n };\n onTriggerKeydown = (event: KeyboardEvent) => {\n handleTriggerKeydown(event);\n };\n\n triggerEl.addEventListener('click', onTriggerClick);\n triggerEl.addEventListener('keydown', onTriggerKeydown);\n }\n\n return () => {\n if (triggerEl && onTriggerClick) triggerEl.removeEventListener('click', onTriggerClick);\n\n if (triggerEl && onTriggerKeydown) triggerEl.removeEventListener('keydown', onTriggerKeydown);\n };\n });\n\n return html`\n <slot style=\"display:none\"></slot>\n <ore-input\n class=\"trigger\"\n part=\"trigger\"\n readonly\n tabindex=\"${tabIndexAttr}\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-controls=\"${listboxId}\"\n aria-disabled=\"${() => (isDisabled.value ? 'true' : null)}\"\n aria-expanded=\"${() => String(isOpen.value)}\"\n aria-invalid=\"${() => (props.error.value ? 'true' : null)}\"\n value=\"${inputValue}\"\n label=\"${inputLabel}\"\n placeholder=\"${inputPlaceholder}\"\n label-placement=\"${inputLabelPlacement}\"\n color=\"${inputColor}\"\n size=\"${inputSize}\"\n variant=\"${inputVariant}\"\n rounded=\"${inputRounded}\"\n helper=\"${inputHelper}\"\n error=\"${inputError}\"\n ?disabled=\"${inputDisabled}\"\n ?required=\"${inputRequired}\"\n ?fullwidth=\"${inputFullwidth}\"\n ?success=\"${() => props.success.value}\"\n ref=\"${(el: HTMLElement) => {\n triggerEl = el;\n }}\">\n <div slot=\"prefix\" class=\"chips-row\" ?hidden=\"${() => !showChips.value}\">\n ${() =>\n selectedChipItems.value.map(\n (item) => html`\n <ore-chip\n value=\"${item.value}\"\n label=\"${item.label}\"\n mode=\"removable\"\n variant=\"flat\"\n size=\"sm\"\n color=\"${props.color}\"\n @remove=\"${removeChip}\">\n ${item.label}\n </ore-chip>\n `,\n )}\n </div>\n <span slot=\"suffix\" class=\"trigger-suffix\" aria-hidden=\"true\">\n <span class=\"loader\"></span>\n <span class=\"trigger-icon\">\n <ore-icon name=\"chevron-down\" size=\"14\" stroke-width=\"2\" aria-hidden=\"true\"></ore-icon>\n </span>\n </span>\n </ore-input>\n <div\n class=\"dropdown\"\n part=\"dropdown\"\n popover=\"manual\"\n ?data-open=\"${isOpen}\"\n role=\"listbox\"\n id=\"${listboxId}\"\n aria-label=\"Options\"\n ref=\"${(el: HTMLElement) => {\n dropdownEl = el;\n }}\">\n <div class=\"dropdown-loading\" ?hidden=\"${() => !isLoading.value}\">Loading…</div>\n <div class=\"dropdown-empty\" ?hidden=\"${() => isLoading.value || options.value.length > 0}\">No options</div>\n <div class=\"options-list\" ?hidden=\"${() => isLoading.value || options.value.length === 0}\">\n ${() =>\n flatRows.value.map((row) =>\n row.type === 'group'\n ? html`\n <div class=\"optgroup-label\" role=\"presentation\">${row.label}</div>\n `\n : html`\n <div\n class=\"option\"\n role=\"option\"\n id=\"${`${selectId}-opt-${row.idx}`}\"\n data-option-index=\"${String(row.idx)}\"\n data-option-value=\"${row.opt.value}\"\n aria-selected=\"${() => String(selectedValues.value.includes(row.opt.value))}\"\n aria-disabled=\"${() => String(row.opt.disabled)}\"\n ?data-focused=\"${() => focusedIndex.value === row.idx}\"\n ?data-selected=\"${() => selectedValues.value.includes(row.opt.value)}\"\n ?data-disabled=\"${() => row.opt.disabled}\"\n @click=\"${(e: MouseEvent) => {\n e.stopPropagation();\n selectOption(row.opt, e);\n }}\"\n @pointerenter=\"${() => {\n optionList.set(row.idx);\n }}\">\n <span>${row.opt.label}</span>\n <span class=\"option-check\" aria-hidden=\"true\">\n <ore-icon name=\"check\" size=\"14\" stroke-width=\"2.5\" aria-hidden=\"true\"></ore-icon>\n </span>\n </div>\n `,\n )}\n </div>\n </div>\n `;\n },\n shadow: { delegatesFocus: true },\n styles: [colorThemeMixin, reducedMotionMixin, roundedVariantMixin, componentStyles],\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"select.js","names":[],"sources":["../src/inputs/select/select.ts"],"sourcesContent":["import { bind, define, getHost, html, onCleanup, onMounted, prop, useEmit, useField, useSlots } from '@vielzeug/ore';\nimport { computed, effect, signal, watch } from '@vielzeug/ripple';\n\nimport type { OverlayOpenChangeDetail, OverlayOpenReason } from '../../core';\nimport { createChoiceField, createListboxDropdown, lifecycleSignal } from '../../core';\nimport type { SelectableFieldProps } from '../../shared';\nimport type { VisualVariant } from '../../types';\nimport '../../feedback/chip/chip';\nimport '../../content/icon/icon';\nimport '../input/input';\nimport { disablableBundle, loadableBundle, roundableBundle, sizableBundle, themableBundle } from '../../shared';\nimport { colorThemeMixin, reducedMotionMixin, roundedVariantMixin } from '../../styles';\nimport { defineFieldValue, dispatchNativeFieldEvent, setFieldValue } from '../shared/native-field-event';\nimport componentStyles from './select.css?inline';\n\n// ── Types ─────────────────────────────────────────────────────────────\n\ntype OptionItem = {\n disabled: boolean;\n group?: string;\n label: string;\n value: string;\n};\n\nexport type OreSelectOptionInput = {\n disabled?: boolean;\n group?: string;\n label?: string;\n value: string;\n};\n\ntype FlatRow =\n | {\n idx: number;\n opt: OptionItem;\n type: 'option';\n }\n | {\n label: string;\n type: 'group';\n };\n\n// ── Styles ─────────────────────────────────────────────────────────────\n\n// ── Component Props ─────────────────────────────────────────────────────────────\n\n/** Select component properties */\n\nexport type OreSelectEvents = {\n change: Event;\n input: Event;\n 'open-change': OverlayOpenChangeDetail;\n};\n\nexport type OreSelectProps = SelectableFieldProps<Exclude<VisualVariant, 'text' | 'frost'>> & {\n /** Show loading state in dropdown */\n loading?: boolean;\n /** Allow selecting multiple options */\n multiple?: boolean;\n /** JS options array (alternative to slotted <option> elements) */\n options?: OreSelectOptionInput[];\n /** Mark the field as required */\n required?: boolean;\n};\n\n/**\n * A fully custom form-associated select dropdown with keyboard navigation and ARIA support.\n * Reads `<option>` and `<optgroup>` children from the default slot.\n *\n * @element ore-select\n *\n * @attr {string} label - Label text\n * @attr {string} label-placement - 'inset' | 'outside'\n * @attr {string} value - Current selected value(s) (comma-separated for multiple)\n * @attr {string} placeholder - Placeholder when no option selected\n * @attr {string} name - Form field name\n * @attr {boolean} multiple - Enable multi-select\n * @attr {boolean} disabled - Disable the select\n * @attr {boolean} required - Required field\n * @attr {string} helper - Helper text below the select\n * @attr {string} error - Error message\n * @attr {boolean} success - Show an inline success check icon (suppressed while `error` is set)\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} variant - Visual variant: 'solid' | 'flat' | 'bordered' | 'outline' | 'ghost'\n * @attr {string} size - Component size: 'sm' | 'md' | 'lg'\n * @attr {string} rounded - Border radius: 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | 'full'\n * @attr {boolean} fullwidth - Expand to full width\n *\n * @fires input - Fired when selection changes.\n * @fires change - Fired when selection changes.\n * @fires open-change - Fired when the dropdown state changes. detail: { open, reason }\n *\n * @slot - `<option>` and `<optgroup>` elements\n *\n * @cssprop --select-bg - Background\n * @cssprop --select-border-color - Border color\n * @cssprop --select-radius - Border radius\n * @cssprop --select-padding - Padding\n * @cssprop --select-font-size - Font size\n * @cssprop --select-placeholder-color - Placeholder text color\n *\n * @part trigger - The `ore-input` trigger element that opens the dropdown.\n * @part dropdown - The dropdown listbox panel container.\n *\n * @example\n * ```html\n * <ore-select label=\"Role\" value=\"admin\">\n * <option value=\"admin\">Administrator</option>\n * <option value=\"editor\">Editor</option>\n * <option value=\"viewer\">Viewer</option>\n * </ore-select>\n *\n * <ore-select label=\"Tags\" multiple color=\"primary\">\n * <optgroup label=\"Frontend\">\n * <option value=\"react\">React</option>\n * <option value=\"vue\">Vue</option>\n * </optgroup>\n * <optgroup label=\"Backend\">\n * <option value=\"node\">Node.js</option>\n * </optgroup>\n * </ore-select>\n * ```\n */\nexport const SELECT_TAG = 'ore-select' as const;\ndefine<OreSelectProps>(SELECT_TAG, {\n formAssociated: true,\n props: {\n ...themableBundle,\n ...sizableBundle,\n ...disablableBundle,\n ...loadableBundle,\n ...roundableBundle,\n error: prop.string(),\n fullwidth: prop.bool(false),\n helper: prop.string(),\n label: prop.string(),\n 'label-placement': prop.oneOf(['inset', 'outside'] as const, 'inset'),\n multiple: prop.bool(false),\n name: prop.string(),\n options: prop.json(undefined as OreSelectOptionInput[] | undefined),\n placeholder: prop.string(),\n required: prop.bool(false),\n success: prop.bool(false),\n value: prop.string(),\n variant: prop.string<'flat' | 'solid' | 'bordered' | 'outline' | 'ghost'>(),\n },\n setup(props) {\n const el = getHost();\n const emit = useEmit<OreSelectEvents>();\n const slots = useSlots();\n\n const shadowRoot = el.shadowRoot;\n // ────────────────────────────────────────────────────────────────\n // State & Context\n // ────────────────────────────────────────────────────────────────\n\n const slottedOptions = signal<OptionItem[]>([]);\n const isLoading = computed(() => Boolean(props.loading.value));\n\n // Merged options: explicit prop value overrides slotted options\n function normalizeOption(option: OreSelectOptionInput): OptionItem {\n return {\n disabled: Boolean(option.disabled),\n group: option.group,\n label: option.label ?? option.value,\n value: option.value,\n };\n }\n\n const options = computed(() => {\n const explicitOptions = props.options.value;\n\n return Array.isArray(explicitOptions) ? explicitOptions.map(normalizeOption) : slottedOptions.value;\n });\n let triggerEl: HTMLElement | null = null;\n let dropdownEl: HTMLElement | null = null;\n\n const abortSignal = lifecycleSignal(onCleanup);\n const choice = createChoiceField({\n disabled: props.disabled,\n error: props.error,\n helper: props.helper,\n label: props.label,\n labelPlacement: props['label-placement'],\n multiple: props.multiple,\n prefix: 'select',\n required: props.required,\n signal: abortSignal,\n value: props.value,\n });\n\n choice.attachFormField(\n useField<string>({\n disabled: choice.disabled,\n onReset: choice.reset,\n toFormValue: (v) => v,\n validationMessage: choice.validationMessage,\n validity: choice.validity,\n value: choice.formValue,\n }),\n );\n\n const optionList = createListboxDropdown<OptionItem>({\n getBoundary: () => el,\n getFocusedOptionElement: () => dropdownEl?.querySelector<HTMLElement>('[data-focused]') ?? null,\n getItems: () => options.value,\n getPanel: () => dropdownEl,\n getReference: () => triggerEl,\n getTrigger: () => triggerEl,\n isDisabled: () => choice.disabled.value,\n onClose: (reason) => {\n emit('open-change', { open: false, reason });\n choice.triggerValidation('blur');\n },\n onOpen: (reason) => emit('open-change', { open: true, reason }),\n signal: abortSignal,\n });\n\n const { triggerValidation } = choice;\n const selectedValues = choice.selectedValues;\n const isDisabled = choice.disabled;\n\n defineFieldValue(\n el,\n () => choice.formValue.value,\n (value) => {\n choice.setValues(value ? value.split(',') : []);\n },\n );\n\n const { fieldId: selectId } = choice;\n const listboxId = `listbox-${selectId}`;\n const { focusedIndex, isOpen } = optionList;\n\n // Sync host attributes for CSS hooks\n bind({\n attr: {\n 'has-error': () => (props.error.value ? true : undefined),\n open: () => (isOpen.value ? true : undefined),\n size: props.size,\n variant: props.variant,\n },\n });\n\n // ────────────────────────────────────────────────────────────────\n // Option Reading from Slot\n // ────────────────────────────────────────────────────────────────\n\n function readOptions() {\n const slot = shadowRoot?.querySelector<HTMLSlotElement>('slot');\n\n if (!slot) return;\n\n const assigned = slot.assignedElements({ flatten: true });\n const items: OptionItem[] = [];\n\n for (const el of assigned) {\n if (el.tagName === 'OPTION') {\n const opt = el as HTMLOptionElement;\n\n items.push({ disabled: opt.disabled, label: opt.text || opt.value, value: opt.value });\n } else if (el.tagName === 'OPTGROUP') {\n const group = el as HTMLOptGroupElement;\n const groupLabel = group.label;\n\n for (const child of Array.from(group.querySelectorAll('option'))) {\n const opt = child as HTMLOptionElement;\n\n items.push({ disabled: opt.disabled, group: groupLabel, label: opt.text || opt.value, value: opt.value });\n }\n }\n }\n\n slottedOptions.value = items;\n }\n\n const displayLabel = computed(() => {\n if (selectedValues.value.length === 0) return '';\n\n if (props.multiple.value && selectedValues.value.length > 1) {\n return `${selectedValues.value.length} selected`;\n }\n\n const first = selectedValues.value[0];\n\n return options.value.find((o) => o.value === first)?.label ?? first;\n });\n const selectedChipItems = computed(() => {\n if (!props.multiple.value) return [];\n\n return selectedValues.value.map((value) => ({\n label: options.value.find((o) => o.value === value)?.label ?? value,\n value,\n }));\n });\n const showChips = computed(() => props.multiple.value && selectedValues.value.length > 0);\n const triggerText = computed(() => displayLabel.value || props.placeholder.value || '');\n\n function buildFlatList(opts: OptionItem[]): FlatRow[] {\n const flat: FlatRow[] = [];\n const groups = new Map<string | undefined, OptionItem[]>();\n\n for (const opt of opts) {\n const key = opt.group;\n\n let group = groups.get(key);\n\n if (!group) {\n group = [];\n groups.set(key, group);\n }\n\n group.push(opt);\n }\n\n let globalIdx = 0;\n\n for (const [groupLabel, groupOpts] of groups) {\n if (groupLabel !== undefined) flat.push({ label: groupLabel, type: 'group' });\n\n for (const opt of groupOpts) flat.push({ idx: globalIdx++, opt, type: 'option' });\n }\n\n return flat;\n }\n\n const flatRows = computed(() => buildFlatList(options.value));\n\n function emitChange(): void {\n setFieldValue(el, choice.formValue.value);\n dispatchNativeFieldEvent(el, 'input');\n dispatchNativeFieldEvent(el, 'change');\n }\n\n function removeChip(event: Event): void {\n event.stopPropagation();\n\n const value = (event as CustomEvent<{ value?: string }>).detail?.value;\n\n if (value === undefined) return;\n\n choice.removeValue(value);\n emitChange();\n triggerValidation('change');\n }\n\n function openPopup(reason: OverlayOpenReason = 'programmatic') {\n optionList.open(reason);\n\n requestAnimationFrame(() => {\n const selectedIndex =\n selectedValues.value.length > 0\n ? options.value.findIndex((option) => option.value === selectedValues.value[0])\n : -1;\n\n if (selectedIndex >= 0) {\n optionList.set(selectedIndex);\n\n return;\n }\n\n optionList.navigate('first');\n });\n }\n\n // Selection\n\n function selectOption(opt: OptionItem, _e?: Event) {\n if (opt.disabled) return;\n\n if (props.multiple.value) {\n choice.toggleValue(opt.value);\n } else {\n choice.selectValue(opt.value);\n optionList.close();\n }\n\n emitChange();\n triggerValidation('change');\n }\n\n // Keyboard navigation\n\n function handleTriggerKeydown(e: KeyboardEvent) {\n if (isDisabled.value) return;\n\n // Let optionList handle arrow key navigation\n if (optionList.handleKeydown(e)) return;\n\n switch (e.key) {\n case ' ':\n case 'Enter':\n e.preventDefault();\n\n if (isOpen.value) {\n const idx = focusedIndex.value;\n const opts = options.value;\n\n if (idx >= 0 && idx < opts.length) selectOption(opts[idx], e);\n } else {\n openPopup('keyboard');\n }\n\n break;\n case 'Tab':\n optionList.close();\n break;\n }\n }\n\n // ore-input prop helpers\n const inputValue = () => triggerText.value;\n const inputLabel = () => props.label.value ?? '';\n const inputPlaceholder = () => props.placeholder.value ?? '';\n const inputLabelPlacement = () => props['label-placement'].value ?? 'inset';\n const inputColor = () => props.color?.value ?? undefined;\n const inputSize = () => props.size?.value ?? undefined;\n const inputVariant = () => props.variant?.value ?? undefined;\n const inputRounded = () => props.rounded?.value ?? undefined;\n const inputHelper = () => props.helper.value ?? '';\n const inputError = () => props.error.value ?? '';\n const inputDisabled = () => (isDisabled.value ? true : undefined);\n const inputRequired = () => (props.required.value ? true : undefined);\n const inputFullwidth = () => (props.fullwidth.value ? true : undefined);\n const tabIndexAttr = () => (isDisabled.value ? '-1' : '0');\n\n watch(slots.elements(), () => readOptions(), { immediate: true });\n\n const stopPopoverSync = effect(() => {\n if (isOpen.value) {\n if (dropdownEl && 'showPopover' in dropdownEl && !dropdownEl.matches(':popover-open')) dropdownEl.showPopover();\n } else {\n if (dropdownEl && 'hidePopover' in dropdownEl && dropdownEl.matches(':popover-open')) dropdownEl.hidePopover();\n }\n });\n\n onCleanup(() => stopPopoverSync.dispose());\n\n onMounted(() => {\n let onTriggerClick: ((event: MouseEvent) => void) | null = null;\n let onTriggerKeydown: ((event: KeyboardEvent) => void) | null = null;\n\n if (triggerEl) {\n onTriggerClick = (event: MouseEvent) => {\n event.stopPropagation();\n\n if (isDisabled.value) return;\n\n if (isOpen.value) optionList.close('trigger');\n else openPopup('click');\n };\n onTriggerKeydown = (event: KeyboardEvent) => {\n handleTriggerKeydown(event);\n };\n\n triggerEl.addEventListener('click', onTriggerClick);\n triggerEl.addEventListener('keydown', onTriggerKeydown);\n }\n\n return () => {\n if (triggerEl && onTriggerClick) triggerEl.removeEventListener('click', onTriggerClick);\n\n if (triggerEl && onTriggerKeydown) triggerEl.removeEventListener('keydown', onTriggerKeydown);\n };\n });\n\n return html`\n <slot style=\"display:none\"></slot>\n <ore-input\n class=\"trigger\"\n part=\"trigger\"\n readonly\n tabindex=\"${tabIndexAttr}\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-controls=\"${listboxId}\"\n aria-disabled=\"${() => (isDisabled.value ? 'true' : null)}\"\n aria-expanded=\"${() => String(isOpen.value)}\"\n aria-invalid=\"${() => (props.error.value ? 'true' : null)}\"\n value=\"${inputValue}\"\n label=\"${inputLabel}\"\n placeholder=\"${inputPlaceholder}\"\n label-placement=\"${inputLabelPlacement}\"\n color=\"${inputColor}\"\n size=\"${inputSize}\"\n variant=\"${inputVariant}\"\n rounded=\"${inputRounded}\"\n helper=\"${inputHelper}\"\n error=\"${inputError}\"\n ?disabled=\"${inputDisabled}\"\n ?required=\"${inputRequired}\"\n ?fullwidth=\"${inputFullwidth}\"\n ?success=\"${() => props.success.value}\"\n ref=\"${(el: HTMLElement) => {\n triggerEl = el;\n }}\">\n <div slot=\"prefix\" class=\"chips-row\" ?hidden=\"${() => !showChips.value}\">\n ${() =>\n selectedChipItems.value.map(\n (item) => html`\n <ore-chip\n value=\"${item.value}\"\n label=\"${item.label}\"\n mode=\"removable\"\n variant=\"flat\"\n size=\"sm\"\n color=\"${props.color}\"\n @remove=\"${removeChip}\">\n ${item.label}\n </ore-chip>\n `,\n )}\n </div>\n <span slot=\"suffix\" class=\"trigger-suffix\" aria-hidden=\"true\">\n <span class=\"loader\"></span>\n <span class=\"trigger-icon\">\n <ore-icon name=\"chevron-down\" size=\"14\" stroke-width=\"2\" aria-hidden=\"true\"></ore-icon>\n </span>\n </span>\n </ore-input>\n <div\n class=\"dropdown\"\n part=\"dropdown\"\n popover=\"manual\"\n ?data-open=\"${isOpen}\"\n role=\"listbox\"\n id=\"${listboxId}\"\n aria-label=\"Options\"\n ref=\"${(el: HTMLElement) => {\n dropdownEl = el;\n }}\">\n <div class=\"dropdown-loading\" ?hidden=\"${() => !isLoading.value}\">Loading…</div>\n <div class=\"dropdown-empty\" ?hidden=\"${() => isLoading.value || options.value.length > 0}\">No options</div>\n <div class=\"options-list\" ?hidden=\"${() => isLoading.value || options.value.length === 0}\">\n ${() =>\n flatRows.value.map((row) =>\n row.type === 'group'\n ? html`\n <div class=\"optgroup-label\" role=\"presentation\">${row.label}</div>\n `\n : html`\n <div\n class=\"option\"\n role=\"option\"\n id=\"${`${selectId}-opt-${row.idx}`}\"\n data-option-index=\"${String(row.idx)}\"\n data-option-value=\"${row.opt.value}\"\n aria-selected=\"${() => String(selectedValues.value.includes(row.opt.value))}\"\n aria-disabled=\"${() => String(row.opt.disabled)}\"\n ?data-focused=\"${() => focusedIndex.value === row.idx}\"\n ?data-selected=\"${() => selectedValues.value.includes(row.opt.value)}\"\n ?data-disabled=\"${() => row.opt.disabled}\"\n @click=\"${(e: MouseEvent) => {\n e.stopPropagation();\n selectOption(row.opt, e);\n }}\"\n @pointerenter=\"${() => {\n optionList.set(row.idx);\n }}\">\n <span>${row.opt.label}</span>\n <span class=\"option-check\" aria-hidden=\"true\">\n <ore-icon name=\"check\" size=\"14\" stroke-width=\"2.5\" aria-hidden=\"true\"></ore-icon>\n </span>\n </div>\n `,\n )}\n </div>\n </div>\n `;\n },\n shadow: { delegatesFocus: true },\n styles: [colorThemeMixin, reducedMotionMixin, roundedVariantMixin, componentStyles],\n});\n"],"mappings":";;;;;;;;;;;;AA2HA,IAAa,IAAa;AAC1B,EAAuB,GAAY;CACjC,gBAAgB;CAChB,OAAO;EACL,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,OAAO,EAAK,OAAO;EACnB,WAAW,EAAK,KAAK,EAAK;EAC1B,QAAQ,EAAK,OAAO;EACpB,OAAO,EAAK,OAAO;EACnB,mBAAmB,EAAK,MAAM,CAAC,SAAS,SAAS,GAAY,OAAO;EACpE,UAAU,EAAK,KAAK,EAAK;EACzB,MAAM,EAAK,OAAO;EAClB,SAAS,EAAK,KAAK,KAAA,CAA+C;EAClE,aAAa,EAAK,OAAO;EACzB,UAAU,EAAK,KAAK,EAAK;EACzB,SAAS,EAAK,KAAK,EAAK;EACxB,OAAO,EAAK,OAAO;EACnB,SAAS,EAAK,OAA4D;CAC5E;CACA,MAAM,GAAO;EACX,IAAM,IAAK,EAAQ,GACb,IAAO,EAAyB,GAChC,IAAQ,EAAS,GAEjB,IAAa,EAAG,YAKhB,IAAiB,EAAqB,CAAC,CAAC,GACxC,IAAY,QAAe,EAAQ,EAAM,QAAQ,KAAM;EAG7D,SAAS,EAAgB,GAA0C;GACjE,OAAO;IACL,UAAU,EAAQ,EAAO;IACzB,OAAO,EAAO;IACd,OAAO,EAAO,SAAS,EAAO;IAC9B,OAAO,EAAO;GAChB;EACF;EAEA,IAAM,IAAU,QAAe;GAC7B,IAAM,IAAkB,EAAM,QAAQ;GAEtC,OAAO,MAAM,QAAQ,CAAe,IAAI,EAAgB,IAAI,CAAe,IAAI,EAAe;EAChG,CAAC,GACG,IAAgC,MAChC,IAAiC,MAE/B,IAAc,EAAgB,CAAS,GACvC,IAAS,EAAkB;GAC/B,UAAU,EAAM;GAChB,OAAO,EAAM;GACb,QAAQ,EAAM;GACd,OAAO,EAAM;GACb,gBAAgB,EAAM;GACtB,UAAU,EAAM;GAChB,QAAQ;GACR,UAAU,EAAM;GAChB,QAAQ;GACR,OAAO,EAAM;EACf,CAAC;EAED,EAAO,gBACL,EAAiB;GACf,UAAU,EAAO;GACjB,SAAS,EAAO;GAChB,cAAc,MAAM;GACpB,mBAAmB,EAAO;GAC1B,UAAU,EAAO;GACjB,OAAO,EAAO;EAChB,CAAC,CACH;EAEA,IAAM,IAAa,EAAkC;GACnD,mBAAmB;GACnB,+BAA+B,GAAY,cAA2B,gBAAgB,KAAK;GAC3F,gBAAgB,EAAQ;GACxB,gBAAgB;GAChB,oBAAoB;GACpB,kBAAkB;GAClB,kBAAkB,EAAO,SAAS;GAClC,UAAU,MAAW;IAEnB,AADA,EAAK,eAAe;KAAE,MAAM;KAAO;IAAO,CAAC,GAC3C,EAAO,kBAAkB,MAAM;GACjC;GACA,SAAS,MAAW,EAAK,eAAe;IAAE,MAAM;IAAM;GAAO,CAAC;GAC9D,QAAQ;EACV,CAAC,GAEK,EAAE,yBAAsB,GACxB,IAAiB,EAAO,gBACxB,IAAa,EAAO;EAE1B,EACE,SACM,EAAO,UAAU,QACtB,MAAU;GACT,EAAO,UAAU,IAAQ,EAAM,MAAM,GAAG,IAAI,CAAC,CAAC;EAChD,CACF;EAEA,IAAM,EAAE,SAAS,MAAa,GACxB,IAAY,WAAW,KACvB,EAAE,iBAAc,cAAW;EAGjC,EAAK,EACH,MAAM;GACJ,mBAAoB,EAAM,MAAM,QAAQ,KAAO,KAAA;GAC/C,YAAa,EAAO,QAAQ,KAAO,KAAA;GACnC,MAAM,EAAM;GACZ,SAAS,EAAM;EACjB,EACF,CAAC;EAMD,SAAS,IAAc;GACrB,IAAM,IAAO,GAAY,cAA+B,MAAM;GAE9D,IAAI,CAAC,GAAM;GAEX,IAAM,IAAW,EAAK,iBAAiB,EAAE,SAAS,GAAK,CAAC,GAClD,IAAsB,CAAC;GAE7B,KAAK,IAAM,KAAM,GACf,IAAI,EAAG,YAAY,UAAU;IAC3B,IAAM,IAAM;IAEZ,EAAM,KAAK;KAAE,UAAU,EAAI;KAAU,OAAO,EAAI,QAAQ,EAAI;KAAO,OAAO,EAAI;IAAM,CAAC;GACvF,OAAO,IAAI,EAAG,YAAY,YAAY;IACpC,IAAM,IAAQ,GACR,IAAa,EAAM;IAEzB,KAAK,IAAM,KAAS,MAAM,KAAK,EAAM,iBAAiB,QAAQ,CAAC,GAAG;KAChE,IAAM,IAAM;KAEZ,EAAM,KAAK;MAAE,UAAU,EAAI;MAAU,OAAO;MAAY,OAAO,EAAI,QAAQ,EAAI;MAAO,OAAO,EAAI;KAAM,CAAC;IAC1G;GACF;GAGF,EAAe,QAAQ;EACzB;EAEA,IAAM,IAAe,QAAe;GAClC,IAAI,EAAe,MAAM,WAAW,GAAG,OAAO;GAE9C,IAAI,EAAM,SAAS,SAAS,EAAe,MAAM,SAAS,GACxD,OAAO,GAAG,EAAe,MAAM,OAAO;GAGxC,IAAM,IAAQ,EAAe,MAAM;GAEnC,OAAO,EAAQ,MAAM,MAAM,MAAM,EAAE,UAAU,CAAK,CAAC,EAAE,SAAS;EAChE,CAAC,GACK,IAAoB,QACnB,EAAM,SAAS,QAEb,EAAe,MAAM,KAAK,OAAW;GAC1C,OAAO,EAAQ,MAAM,MAAM,MAAM,EAAE,UAAU,CAAK,CAAC,EAAE,SAAS;GAC9D;EACF,EAAE,IALgC,CAAC,CAMpC,GACK,IAAY,QAAe,EAAM,SAAS,SAAS,EAAe,MAAM,SAAS,CAAC,GAClF,IAAc,QAAe,EAAa,SAAS,EAAM,YAAY,SAAS,EAAE;EAEtF,SAAS,EAAc,GAA+B;GACpD,IAAM,IAAkB,CAAC,GACnB,oBAAS,IAAI,IAAsC;GAEzD,KAAK,IAAM,KAAO,GAAM;IACtB,IAAM,IAAM,EAAI,OAEZ,IAAQ,EAAO,IAAI,CAAG;IAO1B,AALK,MACH,IAAQ,CAAC,GACT,EAAO,IAAI,GAAK,CAAK,IAGvB,EAAM,KAAK,CAAG;GAChB;GAEA,IAAI,IAAY;GAEhB,KAAK,IAAM,CAAC,GAAY,MAAc,GAAQ;IAC5C,AAAI,MAAe,KAAA,KAAW,EAAK,KAAK;KAAE,OAAO;KAAY,MAAM;IAAQ,CAAC;IAE5E,KAAK,IAAM,KAAO,GAAW,EAAK,KAAK;KAAE,KAAK;KAAa;KAAK,MAAM;IAAS,CAAC;GAClF;GAEA,OAAO;EACT;EAEA,IAAM,IAAW,QAAe,EAAc,EAAQ,KAAK,CAAC;EAE5D,SAAS,IAAmB;GAG1B,AAFA,GAAc,GAAI,EAAO,UAAU,KAAK,GACxC,EAAyB,GAAI,OAAO,GACpC,EAAyB,GAAI,QAAQ;EACvC;EAEA,SAAS,GAAW,GAAoB;GACtC,EAAM,gBAAgB;GAEtB,IAAM,IAAS,EAA0C,QAAQ;GAE7D,MAAU,KAAA,MAEd,EAAO,YAAY,CAAK,GACxB,EAAW,GACX,EAAkB,QAAQ;EAC5B;EAEA,SAAS,EAAU,IAA4B,gBAAgB;GAG7D,AAFA,EAAW,KAAK,CAAM,GAEtB,4BAA4B;IAC1B,IAAM,IACJ,EAAe,MAAM,SAAS,IAC1B,EAAQ,MAAM,WAAW,MAAW,EAAO,UAAU,EAAe,MAAM,EAAE,IAC5E;IAEN,IAAI,KAAiB,GAAG;KACtB,EAAW,IAAI,CAAa;KAE5B;IACF;IAEA,EAAW,SAAS,OAAO;GAC7B,CAAC;EACH;EAIA,SAAS,EAAa,GAAiB,GAAY;GAC7C,EAAI,aAEJ,EAAM,SAAS,QACjB,EAAO,YAAY,EAAI,KAAK,KAE5B,EAAO,YAAY,EAAI,KAAK,GAC5B,EAAW,MAAM,IAGnB,EAAW,GACX,EAAkB,QAAQ;EAC5B;EAIA,SAAS,EAAqB,GAAkB;GAC1C,OAAW,SAGX,GAAW,cAAc,CAAC,GAE9B,QAAQ,EAAE,KAAV;IACE,KAAK;IACL,KAAK;KAGH,IAFA,EAAE,eAAe,GAEb,EAAO,OAAO;MAChB,IAAM,IAAM,EAAa,OACnB,IAAO,EAAQ;MAErB,AAAI,KAAO,KAAK,IAAM,EAAK,UAAQ,EAAa,EAAK,IAAM,CAAC;KAC9D,OACE,EAAU,UAAU;KAGtB;IACF,KAAK,OACH,EAAW,MAAM;GAErB;EACF;EAGA,IAAM,UAAmB,EAAY,OAC/B,UAAmB,EAAM,MAAM,SAAS,IACxC,UAAyB,EAAM,YAAY,SAAS,IACpD,UAA4B,EAAM,kBAAkB,CAAC,SAAS,SAC9D,WAAmB,EAAM,OAAO,SAAS,KAAA,GACzC,WAAkB,EAAM,MAAM,SAAS,KAAA,GACvC,WAAqB,EAAM,SAAS,SAAS,KAAA,GAC7C,WAAqB,EAAM,SAAS,SAAS,KAAA,GAC7C,WAAoB,EAAM,OAAO,SAAS,IAC1C,UAAmB,EAAM,MAAM,SAAS,IACxC,WAAuB,EAAW,QAAQ,KAAO,KAAA,GACjD,WAAuB,EAAM,SAAS,QAAQ,KAAO,KAAA,GACrD,WAAwB,EAAM,UAAU,QAAQ,KAAO,KAAA,GACvD,WAAsB,EAAW,QAAQ,OAAO;EAEtD,EAAM,EAAM,SAAS,SAAS,EAAY,GAAG,EAAE,WAAW,GAAK,CAAC;EAEhE,IAAM,KAAkB,QAAa;GACnC,AAAI,EAAO,QACL,KAAc,iBAAiB,KAAc,CAAC,EAAW,QAAQ,eAAe,KAAG,EAAW,YAAY,IAE1G,KAAc,iBAAiB,KAAc,EAAW,QAAQ,eAAe,KAAG,EAAW,YAAY;EAEjH,CAAC;EAgCD,OA9BA,QAAgB,GAAgB,QAAQ,CAAC,GAEzC,QAAgB;GACd,IAAI,IAAuD,MACvD,IAA4D;GAmBhE,OAjBI,MACF,KAAkB,MAAsB;IACtC,EAAM,gBAAgB,GAElB,GAAW,UAEX,EAAO,QAAO,EAAW,MAAM,SAAS,IACvC,EAAU,OAAO;GACxB,GACA,KAAoB,MAAyB;IAC3C,EAAqB,CAAK;GAC5B,GAEA,EAAU,iBAAiB,SAAS,CAAc,GAClD,EAAU,iBAAiB,WAAW,CAAgB,UAG3C;IAGX,AAFI,KAAa,KAAgB,EAAU,oBAAoB,SAAS,CAAc,GAElF,KAAa,KAAkB,EAAU,oBAAoB,WAAW,CAAgB;GAC9F;EACF,CAAC,GAEM,CAAI;;;;;;oBAMK,GAAa;;;yBAGR,EAAU;+BACH,EAAW,QAAQ,SAAS,KAAM;+BACnC,OAAO,EAAO,KAAK,EAAE;8BACrB,EAAM,MAAM,QAAQ,SAAS,KAAM;iBACjD,EAAW;iBACX,EAAW;uBACL,EAAiB;2BACb,EAAoB;iBAC9B,GAAW;gBACZ,GAAU;mBACP,GAAa;mBACb,GAAa;kBACd,GAAY;iBACb,EAAW;qBACP,GAAc;qBACd,GAAc;sBACb,GAAe;0BACX,EAAM,QAAQ,MAAM;gBAC9B,MAAoB;GAC1B,IAAY;EACd,EAAE;8DACoD,CAAC,EAAU,MAAM;kBAEnE,EAAkB,MAAM,KACrB,MAAS,CAAI;;2BAED,EAAK,MAAM;2BACX,EAAK,MAAM;;;;2BAIX,EAAM,MAAM;6BACV,GAAW;oBACpB,EAAK,MAAM;;eAGnB,EAAE;;;;;;;;;;;;;sBAaQ,EAAO;;cAEf,EAAU;;gBAER,MAAoB;GAC1B,IAAa;EACf,EAAE;uDAC6C,CAAC,EAAU,MAAM;qDACnB,EAAU,SAAS,EAAQ,MAAM,SAAS,EAAE;mDAC9C,EAAU,SAAS,EAAQ,MAAM,WAAW,EAAE;kBAErF,EAAS,MAAM,KAAK,MAClB,EAAI,SAAS,UACT,CAAI;sEACgD,EAAI,MAAM;sBAE9D,CAAI;;;;4BAIM,GAAG,EAAS,OAAO,EAAI,MAAM;2CACd,OAAO,EAAI,GAAG,EAAE;2CAChB,EAAI,IAAI,MAAM;6CACZ,OAAO,EAAe,MAAM,SAAS,EAAI,IAAI,KAAK,CAAC,EAAE;6CACrD,OAAO,EAAI,IAAI,QAAQ,EAAE;6CACzB,EAAa,UAAU,EAAI,IAAI;8CAC9B,EAAe,MAAM,SAAS,EAAI,IAAI,KAAK,EAAE;8CAC7C,EAAI,IAAI,SAAS;iCAC9B,MAAkB;GAE3B,AADA,EAAE,gBAAgB,GAClB,EAAa,EAAI,KAAK,CAAC;EACzB,EAAE;6CACqB;GACrB,EAAW,IAAI,EAAI,GAAG;EACxB,EAAE;8BACM,EAAI,IAAI,MAAM;;;;;mBAMhC,EAAE;;;;CAIZ;CACA,QAAQ,EAAE,gBAAgB,GAAK;CAC/B,QAAQ;EAAC;EAAiB;EAAoB;EAAqB;CAAe;AACpF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"separator.cjs","names":[],"sources":["../src/content/separator/separator.ts"],"sourcesContent":["import { define, html, prop } from '@vielzeug/ore';\n\nimport type { ThemeColor } from '../../types';\n\nimport { colorThemeMixin } from '../../styles';\nimport componentStyles from './separator.css?inline';\n\n/** Separator component properties */\nexport type OreSeparatorProps = {\n /** Theme color tint */\n color?: ThemeColor;\n /** Decorative only (default true) — set to false for semantic separators */\n decorative?: boolean;\n /** Optional label text centered on the separator */\n label?: string;\n /** Orientation of the separator */\n orientation?: 'horizontal' | 'vertical';\n};\n\n/**\n * A simple visual divider between sections of content.\n *\n * @element ore-separator\n *\n * @attr {string} orientation - 'horizontal' (default) | 'vertical'\n * @attr {boolean} decorative - When true (default), aria-hidden is applied\n * @attr {string} label - Optional centered label text\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n *\n * @cssprop --separator-color - Line color\n * @cssprop --separator-size - Line thickness\n * @cssprop --separator-spacing - Vertical margin\n *\n * @part wrapper - Root wrapper container.\n * @part separator - Separator element.\n * @part label - Label element.\n * @example\n * ```html\n * <ore-separator></ore-separator>\n * <ore-separator label=\"or\"></ore-separator>\n * <ore-separator orientation=\"vertical\"></ore-separator>\n * ```\n */\nexport const SEPARATOR_TAG = 'ore-separator' as const;\ndefine<OreSeparatorProps>(SEPARATOR_TAG, {\n props: {\n color: prop.string<ThemeColor>(),\n decorative: prop.bool(true),\n label: prop.string(),\n orientation: prop.oneOf(['horizontal', 'vertical'] as const, 'horizontal'),\n },\n setup(props) {\n const roleAttr = () => (props.decorative.value ? 'none' : 'separator');\n const ariaHidden = () => (props.decorative.value ? 'true' : null);\n\n return html`\n ${() =>\n props.label.value\n ? html`\n <div class=\"separator-wrapper\" part=\"wrapper\">\n <hr\n class=\"separator\"\n part=\"separator\"\n role=\"${roleAttr}\"\n aria-hidden=\"${ariaHidden}\"\n aria-orientation=\"${() => props.orientation.value}\" />\n <span class=\"separator-label\" part=\"label\">${() => props.label.value}</span>\n <hr\n class=\"separator\"\n part=\"separator\"\n role=\"${roleAttr}\"\n aria-hidden=\"${ariaHidden}\"\n aria-orientation=\"${() => props.orientation.value}\" />\n </div>\n `\n : html`\n <hr\n class=\"separator\"\n part=\"separator\"\n role=\"${roleAttr}\"\n aria-hidden=\"${ariaHidden}\"\n aria-orientation=\"${() => props.orientation.value}\" />\n `}\n `;\n },\n styles: [colorThemeMixin, componentStyles],\n});\n"],"mappings":"sMA2CA,IAAa,EAAgB,iBAC7B,EAAA,EAAA,OAAA,CAA0B,EAAe,CACvC,MAAO,CACL,MAAO,EAAA,KAAK,OAAmB,EAC/B,WAAY,EAAA,KAAK,KAAK,EAAI,EAC1B,MAAO,EAAA,KAAK,OAAO,EACnB,YAAa,EAAA,KAAK,MAAM,CAAC,aAAc,UAAU,EAAY,YAAY,CAC3E,EACA,MAAM,EAAO,CACX,IAAM,MAAkB,EAAM,WAAW,MAAQ,OAAS,YACpD,MAAoB,EAAM,WAAW,MAAQ,OAAS,KAE5D,MAAO,GAAA,IAAI;YAEP,EAAM,MAAM,MACR,EAAA,IAAI;;;;;0BAKU,EAAS;iCACF,EAAW;0CACA,EAAM,YAAY,MAAM;iEACD,EAAM,MAAM,MAAM;;;;0BAI3D,EAAS;iCACF,EAAW;0CACA,EAAM,YAAY,MAAM;;cAGxD,EAAA,IAAI;;;;wBAIQ,EAAS;+BACF,EAAW;wCACA,EAAM,YAAY,MAAM;cACpD;KAEZ,EACA,OAAQ,CAAC,EAAA,gBAAiB,EAAA,OAAe,CAC3C,CAAC"}
1
+ {"version":3,"file":"separator.cjs","names":[],"sources":["../src/content/separator/separator.ts"],"sourcesContent":["import { define, html, prop } from '@vielzeug/ore';\nimport { colorThemeMixin } from '../../styles';\nimport type { ThemeColor } from '../../types';\nimport componentStyles from './separator.css?inline';\n\n/** Separator component properties */\nexport type OreSeparatorProps = {\n /** Theme color tint */\n color?: ThemeColor;\n /** Decorative only (default true) — set to false for semantic separators */\n decorative?: boolean;\n /** Optional label text centered on the separator */\n label?: string;\n /** Orientation of the separator */\n orientation?: 'horizontal' | 'vertical';\n};\n\n/**\n * A simple visual divider between sections of content.\n *\n * @element ore-separator\n *\n * @attr {string} orientation - 'horizontal' (default) | 'vertical'\n * @attr {boolean} decorative - When true (default), aria-hidden is applied\n * @attr {string} label - Optional centered label text\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n *\n * @cssprop --separator-color - Line color\n * @cssprop --separator-size - Line thickness\n * @cssprop --separator-spacing - Vertical margin\n *\n * @part wrapper - Root wrapper container.\n * @part separator - Separator element.\n * @part label - Label element.\n * @example\n * ```html\n * <ore-separator></ore-separator>\n * <ore-separator label=\"or\"></ore-separator>\n * <ore-separator orientation=\"vertical\"></ore-separator>\n * ```\n */\nexport const SEPARATOR_TAG = 'ore-separator' as const;\ndefine<OreSeparatorProps>(SEPARATOR_TAG, {\n props: {\n color: prop.string<ThemeColor>(),\n decorative: prop.bool(true),\n label: prop.string(),\n orientation: prop.oneOf(['horizontal', 'vertical'] as const, 'horizontal'),\n },\n setup(props) {\n const roleAttr = () => (props.decorative.value ? 'none' : 'separator');\n const ariaHidden = () => (props.decorative.value ? 'true' : null);\n\n return html`\n ${() =>\n props.label.value\n ? html`\n <div class=\"separator-wrapper\" part=\"wrapper\">\n <hr\n class=\"separator\"\n part=\"separator\"\n role=\"${roleAttr}\"\n aria-hidden=\"${ariaHidden}\"\n aria-orientation=\"${() => props.orientation.value}\" />\n <span class=\"separator-label\" part=\"label\">${() => props.label.value}</span>\n <hr\n class=\"separator\"\n part=\"separator\"\n role=\"${roleAttr}\"\n aria-hidden=\"${ariaHidden}\"\n aria-orientation=\"${() => props.orientation.value}\" />\n </div>\n `\n : html`\n <hr\n class=\"separator\"\n part=\"separator\"\n role=\"${roleAttr}\"\n aria-hidden=\"${ariaHidden}\"\n aria-orientation=\"${() => props.orientation.value}\" />\n `}\n `;\n },\n styles: [colorThemeMixin, componentStyles],\n});\n"],"mappings":"sMAyCA,IAAa,EAAgB,iBAC7B,EAAA,EAAA,OAAA,CAA0B,EAAe,CACvC,MAAO,CACL,MAAO,EAAA,KAAK,OAAmB,EAC/B,WAAY,EAAA,KAAK,KAAK,EAAI,EAC1B,MAAO,EAAA,KAAK,OAAO,EACnB,YAAa,EAAA,KAAK,MAAM,CAAC,aAAc,UAAU,EAAY,YAAY,CAC3E,EACA,MAAM,EAAO,CACX,IAAM,MAAkB,EAAM,WAAW,MAAQ,OAAS,YACpD,MAAoB,EAAM,WAAW,MAAQ,OAAS,KAE5D,MAAO,GAAA,IAAI;YAEP,EAAM,MAAM,MACR,EAAA,IAAI;;;;;0BAKU,EAAS;iCACF,EAAW;0CACA,EAAM,YAAY,MAAM;iEACD,EAAM,MAAM,MAAM;;;;0BAI3D,EAAS;iCACF,EAAW;0CACA,EAAM,YAAY,MAAM;;cAGxD,EAAA,IAAI;;;;wBAIQ,EAAS;+BACF,EAAW;wCACA,EAAM,YAAY,MAAM;cACpD;KAEZ,EACA,OAAQ,CAAC,EAAA,gBAAiB,EAAA,OAAe,CAC3C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"separator.js","names":[],"sources":["../src/content/separator/separator.ts"],"sourcesContent":["import { define, html, prop } from '@vielzeug/ore';\n\nimport type { ThemeColor } from '../../types';\n\nimport { colorThemeMixin } from '../../styles';\nimport componentStyles from './separator.css?inline';\n\n/** Separator component properties */\nexport type OreSeparatorProps = {\n /** Theme color tint */\n color?: ThemeColor;\n /** Decorative only (default true) — set to false for semantic separators */\n decorative?: boolean;\n /** Optional label text centered on the separator */\n label?: string;\n /** Orientation of the separator */\n orientation?: 'horizontal' | 'vertical';\n};\n\n/**\n * A simple visual divider between sections of content.\n *\n * @element ore-separator\n *\n * @attr {string} orientation - 'horizontal' (default) | 'vertical'\n * @attr {boolean} decorative - When true (default), aria-hidden is applied\n * @attr {string} label - Optional centered label text\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n *\n * @cssprop --separator-color - Line color\n * @cssprop --separator-size - Line thickness\n * @cssprop --separator-spacing - Vertical margin\n *\n * @part wrapper - Root wrapper container.\n * @part separator - Separator element.\n * @part label - Label element.\n * @example\n * ```html\n * <ore-separator></ore-separator>\n * <ore-separator label=\"or\"></ore-separator>\n * <ore-separator orientation=\"vertical\"></ore-separator>\n * ```\n */\nexport const SEPARATOR_TAG = 'ore-separator' as const;\ndefine<OreSeparatorProps>(SEPARATOR_TAG, {\n props: {\n color: prop.string<ThemeColor>(),\n decorative: prop.bool(true),\n label: prop.string(),\n orientation: prop.oneOf(['horizontal', 'vertical'] as const, 'horizontal'),\n },\n setup(props) {\n const roleAttr = () => (props.decorative.value ? 'none' : 'separator');\n const ariaHidden = () => (props.decorative.value ? 'true' : null);\n\n return html`\n ${() =>\n props.label.value\n ? html`\n <div class=\"separator-wrapper\" part=\"wrapper\">\n <hr\n class=\"separator\"\n part=\"separator\"\n role=\"${roleAttr}\"\n aria-hidden=\"${ariaHidden}\"\n aria-orientation=\"${() => props.orientation.value}\" />\n <span class=\"separator-label\" part=\"label\">${() => props.label.value}</span>\n <hr\n class=\"separator\"\n part=\"separator\"\n role=\"${roleAttr}\"\n aria-hidden=\"${ariaHidden}\"\n aria-orientation=\"${() => props.orientation.value}\" />\n </div>\n `\n : html`\n <hr\n class=\"separator\"\n part=\"separator\"\n role=\"${roleAttr}\"\n aria-hidden=\"${ariaHidden}\"\n aria-orientation=\"${() => props.orientation.value}\" />\n `}\n `;\n },\n styles: [colorThemeMixin, componentStyles],\n});\n"],"mappings":";;;;AA2CA,IAAa,IAAgB;AAC7B,EAA0B,GAAe;CACvC,OAAO;EACL,OAAO,EAAK,OAAmB;EAC/B,YAAY,EAAK,KAAK,EAAI;EAC1B,OAAO,EAAK,OAAO;EACnB,aAAa,EAAK,MAAM,CAAC,cAAc,UAAU,GAAY,YAAY;CAC3E;CACA,MAAM,GAAO;EACX,IAAM,UAAkB,EAAM,WAAW,QAAQ,SAAS,aACpD,UAAoB,EAAM,WAAW,QAAQ,SAAS;EAE5D,OAAO,CAAI;cAEP,EAAM,MAAM,QACR,CAAI;;;;;0BAKU,EAAS;iCACF,EAAW;4CACA,EAAM,YAAY,MAAM;mEACD,EAAM,MAAM,MAAM;;;;0BAI3D,EAAS;iCACF,EAAW;4CACA,EAAM,YAAY,MAAM;;gBAGxD,CAAI;;;;wBAIQ,EAAS;+BACF,EAAW;0CACA,EAAM,YAAY,MAAM;cACpD;;CAEZ;CACA,QAAQ,CAAC,GAAiB,CAAe;AAC3C,CAAC"}
1
+ {"version":3,"file":"separator.js","names":[],"sources":["../src/content/separator/separator.ts"],"sourcesContent":["import { define, html, prop } from '@vielzeug/ore';\nimport { colorThemeMixin } from '../../styles';\nimport type { ThemeColor } from '../../types';\nimport componentStyles from './separator.css?inline';\n\n/** Separator component properties */\nexport type OreSeparatorProps = {\n /** Theme color tint */\n color?: ThemeColor;\n /** Decorative only (default true) — set to false for semantic separators */\n decorative?: boolean;\n /** Optional label text centered on the separator */\n label?: string;\n /** Orientation of the separator */\n orientation?: 'horizontal' | 'vertical';\n};\n\n/**\n * A simple visual divider between sections of content.\n *\n * @element ore-separator\n *\n * @attr {string} orientation - 'horizontal' (default) | 'vertical'\n * @attr {boolean} decorative - When true (default), aria-hidden is applied\n * @attr {string} label - Optional centered label text\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n *\n * @cssprop --separator-color - Line color\n * @cssprop --separator-size - Line thickness\n * @cssprop --separator-spacing - Vertical margin\n *\n * @part wrapper - Root wrapper container.\n * @part separator - Separator element.\n * @part label - Label element.\n * @example\n * ```html\n * <ore-separator></ore-separator>\n * <ore-separator label=\"or\"></ore-separator>\n * <ore-separator orientation=\"vertical\"></ore-separator>\n * ```\n */\nexport const SEPARATOR_TAG = 'ore-separator' as const;\ndefine<OreSeparatorProps>(SEPARATOR_TAG, {\n props: {\n color: prop.string<ThemeColor>(),\n decorative: prop.bool(true),\n label: prop.string(),\n orientation: prop.oneOf(['horizontal', 'vertical'] as const, 'horizontal'),\n },\n setup(props) {\n const roleAttr = () => (props.decorative.value ? 'none' : 'separator');\n const ariaHidden = () => (props.decorative.value ? 'true' : null);\n\n return html`\n ${() =>\n props.label.value\n ? html`\n <div class=\"separator-wrapper\" part=\"wrapper\">\n <hr\n class=\"separator\"\n part=\"separator\"\n role=\"${roleAttr}\"\n aria-hidden=\"${ariaHidden}\"\n aria-orientation=\"${() => props.orientation.value}\" />\n <span class=\"separator-label\" part=\"label\">${() => props.label.value}</span>\n <hr\n class=\"separator\"\n part=\"separator\"\n role=\"${roleAttr}\"\n aria-hidden=\"${ariaHidden}\"\n aria-orientation=\"${() => props.orientation.value}\" />\n </div>\n `\n : html`\n <hr\n class=\"separator\"\n part=\"separator\"\n role=\"${roleAttr}\"\n aria-hidden=\"${ariaHidden}\"\n aria-orientation=\"${() => props.orientation.value}\" />\n `}\n `;\n },\n styles: [colorThemeMixin, componentStyles],\n});\n"],"mappings":";;;;AAyCA,IAAa,IAAgB;AAC7B,EAA0B,GAAe;CACvC,OAAO;EACL,OAAO,EAAK,OAAmB;EAC/B,YAAY,EAAK,KAAK,EAAI;EAC1B,OAAO,EAAK,OAAO;EACnB,aAAa,EAAK,MAAM,CAAC,cAAc,UAAU,GAAY,YAAY;CAC3E;CACA,MAAM,GAAO;EACX,IAAM,UAAkB,EAAM,WAAW,QAAQ,SAAS,aACpD,UAAoB,EAAM,WAAW,QAAQ,SAAS;EAE5D,OAAO,CAAI;cAEP,EAAM,MAAM,QACR,CAAI;;;;;0BAKU,EAAS;iCACF,EAAW;4CACA,EAAM,YAAY,MAAM;mEACD,EAAM,MAAM,MAAM;;;;0BAI3D,EAAS;iCACF,EAAW;4CACA,EAAM,YAAY,MAAM;;gBAGxD,CAAI;;;;wBAIQ,EAAS;+BACF,EAAW;0CACA,EAAM,YAAY,MAAM;cACpD;;CAEZ;CACA,QAAQ,CAAC,GAAiB,CAAe;AAC3C,CAAC"}