@vielzeug/refine 1.5.3 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (329) hide show
  1. package/dist/accordion.cjs +1 -1
  2. package/dist/accordion.cjs.map +1 -1
  3. package/dist/accordion.js +30 -28
  4. package/dist/accordion.js.map +1 -1
  5. package/dist/button-group.cjs.map +1 -1
  6. package/dist/button-group.js.map +1 -1
  7. package/dist/button.cjs +1 -1
  8. package/dist/button.cjs.map +1 -1
  9. package/dist/button.js +1 -0
  10. package/dist/button.js.map +1 -1
  11. package/dist/checkbox-group.cjs +3 -3
  12. package/dist/checkbox-group.cjs.map +1 -1
  13. package/dist/checkbox-group.js +51 -58
  14. package/dist/checkbox-group.js.map +1 -1
  15. package/dist/combobox.cjs +29 -28
  16. package/dist/combobox.cjs.map +1 -1
  17. package/dist/combobox.js +201 -195
  18. package/dist/combobox.js.map +1 -1
  19. package/dist/content/card/card.css.cjs +1 -1
  20. package/dist/content/card/card.css.cjs.map +1 -1
  21. package/dist/content/card/card.css.js +1 -1
  22. package/dist/content/card/card.css.js.map +1 -1
  23. package/dist/content/chat-message/chat-message.css.cjs +1 -1
  24. package/dist/content/chat-message/chat-message.css.cjs.map +1 -1
  25. package/dist/content/chat-message/chat-message.css.js +1 -1
  26. package/dist/content/chat-message/chat-message.css.js.map +1 -1
  27. package/dist/content/icon/icon.d.ts.map +1 -1
  28. package/dist/content/index.d.ts +4 -0
  29. package/dist/content/index.d.ts.map +1 -1
  30. package/dist/content/list/_list-item-reveal.cjs +2 -0
  31. package/dist/content/list/_list-item-reveal.cjs.map +1 -0
  32. package/dist/content/list/_list-item-reveal.d.ts +25 -0
  33. package/dist/content/list/_list-item-reveal.d.ts.map +1 -0
  34. package/dist/content/list/_list-item-reveal.js +33 -0
  35. package/dist/content/list/_list-item-reveal.js.map +1 -0
  36. package/dist/content/list/list-item.css.cjs +2 -0
  37. package/dist/content/list/list-item.css.cjs.map +1 -0
  38. package/dist/content/list/list-item.css.js +6 -0
  39. package/dist/content/list/list-item.css.js.map +1 -0
  40. package/dist/content/list/list-item.d.ts +111 -0
  41. package/dist/content/list/list-item.d.ts.map +1 -0
  42. package/dist/content/list/list.css.cjs +2 -0
  43. package/dist/content/list/list.css.cjs.map +1 -0
  44. package/dist/content/list/list.css.js +6 -0
  45. package/dist/content/list/list.css.js.map +1 -0
  46. package/dist/content/list/list.d.ts +93 -0
  47. package/dist/content/list/list.d.ts.map +1 -0
  48. package/dist/custom-elements.json +5224 -4621
  49. package/dist/date-picker.cjs +2 -1
  50. package/dist/date-picker.cjs.map +1 -1
  51. package/dist/date-picker.js +2 -0
  52. package/dist/date-picker.js.map +1 -1
  53. package/dist/disclosure/tab-item/tab-item.d.ts.map +1 -1
  54. package/dist/disclosure/tab-panel/tab-panel.d.ts.map +1 -1
  55. package/dist/disclosure/tabs/tabs.d.ts.map +1 -1
  56. package/dist/drawer.cjs +1 -1
  57. package/dist/drawer.cjs.map +1 -1
  58. package/dist/drawer.js +47 -48
  59. package/dist/drawer.js.map +1 -1
  60. package/dist/file-input.cjs +111 -45
  61. package/dist/file-input.cjs.map +1 -1
  62. package/dist/file-input.js +216 -156
  63. package/dist/file-input.js.map +1 -1
  64. package/dist/headless/aria-reflection.cjs +2 -0
  65. package/dist/headless/aria-reflection.cjs.map +1 -0
  66. package/dist/headless/aria-reflection.d.ts +27 -0
  67. package/dist/headless/aria-reflection.d.ts.map +1 -0
  68. package/dist/headless/aria-reflection.js +18 -0
  69. package/dist/headless/aria-reflection.js.map +1 -0
  70. package/dist/headless/checkable.cjs +1 -1
  71. package/dist/headless/checkable.cjs.map +1 -1
  72. package/dist/headless/checkable.d.ts +2 -10
  73. package/dist/headless/checkable.d.ts.map +1 -1
  74. package/dist/headless/checkable.js +29 -29
  75. package/dist/headless/checkable.js.map +1 -1
  76. package/dist/headless/choice-field.cjs +1 -1
  77. package/dist/headless/choice-field.cjs.map +1 -1
  78. package/dist/headless/choice-field.d.ts +2 -7
  79. package/dist/headless/choice-field.d.ts.map +1 -1
  80. package/dist/headless/choice-field.js +37 -37
  81. package/dist/headless/choice-field.js.map +1 -1
  82. package/dist/headless/field-base.cjs +1 -1
  83. package/dist/headless/field-base.cjs.map +1 -1
  84. package/dist/headless/field-base.d.ts +17 -0
  85. package/dist/headless/field-base.d.ts.map +1 -1
  86. package/dist/headless/field-base.js +21 -6
  87. package/dist/headless/field-base.js.map +1 -1
  88. package/dist/headless/focus.cjs +1 -1
  89. package/dist/headless/focus.cjs.map +1 -1
  90. package/dist/headless/focus.d.ts +7 -0
  91. package/dist/headless/focus.d.ts.map +1 -1
  92. package/dist/headless/focus.js +6 -6
  93. package/dist/headless/focus.js.map +1 -1
  94. package/dist/headless/index.d.ts +4 -2
  95. package/dist/headless/index.d.ts.map +1 -1
  96. package/dist/headless/nav.cjs +1 -1
  97. package/dist/headless/nav.cjs.map +1 -1
  98. package/dist/headless/nav.d.ts +12 -0
  99. package/dist/headless/nav.d.ts.map +1 -1
  100. package/dist/headless/nav.js +68 -50
  101. package/dist/headless/nav.js.map +1 -1
  102. package/dist/headless/overlay.cjs +1 -1
  103. package/dist/headless/overlay.cjs.map +1 -1
  104. package/dist/headless/overlay.d.ts +2 -0
  105. package/dist/headless/overlay.d.ts.map +1 -1
  106. package/dist/headless/overlay.js +8 -5
  107. package/dist/headless/overlay.js.map +1 -1
  108. package/dist/headless/ref-callback.cjs +2 -0
  109. package/dist/headless/ref-callback.cjs.map +1 -0
  110. package/dist/headless/ref-callback.d.ts +26 -0
  111. package/dist/headless/ref-callback.d.ts.map +1 -0
  112. package/dist/headless/ref-callback.js +13 -0
  113. package/dist/headless/ref-callback.js.map +1 -0
  114. package/dist/headless/swipe.cjs +1 -1
  115. package/dist/headless/swipe.cjs.map +1 -1
  116. package/dist/headless/swipe.d.ts +2 -0
  117. package/dist/headless/swipe.d.ts.map +1 -1
  118. package/dist/headless/swipe.js +26 -21
  119. package/dist/headless/swipe.js.map +1 -1
  120. package/dist/headless.cjs +1 -1
  121. package/dist/headless.js +28 -26
  122. package/dist/icon.cjs +1 -1
  123. package/dist/icon.cjs.map +1 -1
  124. package/dist/icon.js +36 -38
  125. package/dist/icon.js.map +1 -1
  126. package/dist/index.cjs +1 -1
  127. package/dist/index.js +63 -61
  128. package/dist/input.cjs +29 -26
  129. package/dist/input.cjs.map +1 -1
  130. package/dist/input.js +91 -79
  131. package/dist/input.js.map +1 -1
  132. package/dist/inputs/button/button.css.cjs +1 -1
  133. package/dist/inputs/button/button.css.cjs.map +1 -1
  134. package/dist/inputs/button/button.css.js +1 -1
  135. package/dist/inputs/button/button.css.js.map +1 -1
  136. package/dist/inputs/button/button.d.ts +8 -0
  137. package/dist/inputs/button/button.d.ts.map +1 -1
  138. package/dist/inputs/checkbox/checkbox.css.cjs +1 -1
  139. package/dist/inputs/checkbox/checkbox.css.cjs.map +1 -1
  140. package/dist/inputs/checkbox/checkbox.css.js +1 -1
  141. package/dist/inputs/checkbox/checkbox.css.js.map +1 -1
  142. package/dist/inputs/combobox/combobox.d.ts +1 -0
  143. package/dist/inputs/combobox/combobox.d.ts.map +1 -1
  144. package/dist/inputs/date-picker/date-picker.css.cjs +1 -1
  145. package/dist/inputs/date-picker/date-picker.css.cjs.map +1 -1
  146. package/dist/inputs/date-picker/date-picker.css.js +1 -1
  147. package/dist/inputs/date-picker/date-picker.css.js.map +1 -1
  148. package/dist/inputs/date-picker/date-picker.d.ts +6 -0
  149. package/dist/inputs/date-picker/date-picker.d.ts.map +1 -1
  150. package/dist/inputs/file-input/file-input-upload.cjs +2 -0
  151. package/dist/inputs/file-input/file-input-upload.cjs.map +1 -0
  152. package/dist/inputs/file-input/file-input-upload.d.ts +76 -0
  153. package/dist/inputs/file-input/file-input-upload.d.ts.map +1 -0
  154. package/dist/inputs/file-input/file-input-upload.js +145 -0
  155. package/dist/inputs/file-input/file-input-upload.js.map +1 -0
  156. package/dist/inputs/file-input/file-input.css.cjs +1 -1
  157. package/dist/inputs/file-input/file-input.css.cjs.map +1 -1
  158. package/dist/inputs/file-input/file-input.css.js +1 -1
  159. package/dist/inputs/file-input/file-input.css.js.map +1 -1
  160. package/dist/inputs/file-input/file-input.d.ts +54 -1
  161. package/dist/inputs/file-input/file-input.d.ts.map +1 -1
  162. package/dist/inputs/input/input.css.cjs +1 -1
  163. package/dist/inputs/input/input.css.cjs.map +1 -1
  164. package/dist/inputs/input/input.css.js +1 -1
  165. package/dist/inputs/input/input.css.js.map +1 -1
  166. package/dist/inputs/input/input.d.ts +13 -0
  167. package/dist/inputs/input/input.d.ts.map +1 -1
  168. package/dist/inputs/message-composer/message-composer.css.cjs +1 -1
  169. package/dist/inputs/message-composer/message-composer.css.cjs.map +1 -1
  170. package/dist/inputs/message-composer/message-composer.css.js +1 -1
  171. package/dist/inputs/message-composer/message-composer.css.js.map +1 -1
  172. package/dist/inputs/message-composer/message-composer.d.ts +7 -0
  173. package/dist/inputs/message-composer/message-composer.d.ts.map +1 -1
  174. package/dist/inputs/number-input/number-input.css.cjs +1 -1
  175. package/dist/inputs/number-input/number-input.css.cjs.map +1 -1
  176. package/dist/inputs/number-input/number-input.css.js +1 -1
  177. package/dist/inputs/number-input/number-input.css.js.map +1 -1
  178. package/dist/inputs/number-input/number-input.d.ts +15 -0
  179. package/dist/inputs/number-input/number-input.d.ts.map +1 -1
  180. package/dist/inputs/otp-input/otp-input.css.cjs +1 -1
  181. package/dist/inputs/otp-input/otp-input.css.cjs.map +1 -1
  182. package/dist/inputs/otp-input/otp-input.css.js +1 -1
  183. package/dist/inputs/otp-input/otp-input.css.js.map +1 -1
  184. package/dist/inputs/radio/radio.d.ts.map +1 -1
  185. package/dist/inputs/select/select.d.ts +1 -0
  186. package/dist/inputs/select/select.d.ts.map +1 -1
  187. package/dist/inputs/shared/index.d.ts +1 -1
  188. package/dist/inputs/shared/index.d.ts.map +1 -1
  189. package/dist/inputs/shared/templates.cjs +26 -3
  190. package/dist/inputs/shared/templates.cjs.map +1 -1
  191. package/dist/inputs/shared/templates.d.ts +20 -0
  192. package/dist/inputs/shared/templates.d.ts.map +1 -1
  193. package/dist/inputs/shared/templates.js +29 -5
  194. package/dist/inputs/shared/templates.js.map +1 -1
  195. package/dist/inputs/switch/switch.css.cjs +1 -1
  196. package/dist/inputs/switch/switch.css.cjs.map +1 -1
  197. package/dist/inputs/switch/switch.css.js +1 -1
  198. package/dist/inputs/switch/switch.css.js.map +1 -1
  199. package/dist/inputs/switch/switch.d.ts.map +1 -1
  200. package/dist/inputs/textarea/textarea.css.cjs +1 -1
  201. package/dist/inputs/textarea/textarea.css.cjs.map +1 -1
  202. package/dist/inputs/textarea/textarea.css.js +1 -1
  203. package/dist/inputs/textarea/textarea.css.js.map +1 -1
  204. package/dist/inputs/textarea/textarea.d.ts +14 -0
  205. package/dist/inputs/textarea/textarea.d.ts.map +1 -1
  206. package/dist/inputs/time-picker/time-picker.css.cjs +1 -1
  207. package/dist/inputs/time-picker/time-picker.css.cjs.map +1 -1
  208. package/dist/inputs/time-picker/time-picker.css.js +1 -1
  209. package/dist/inputs/time-picker/time-picker.css.js.map +1 -1
  210. package/dist/inputs/time-picker/time-picker.d.ts +6 -0
  211. package/dist/inputs/time-picker/time-picker.d.ts.map +1 -1
  212. package/dist/list-item.cjs +22 -0
  213. package/dist/list-item.cjs.map +1 -0
  214. package/dist/list-item.js +91 -0
  215. package/dist/list-item.js.map +1 -0
  216. package/dist/list.cjs +2 -0
  217. package/dist/list.cjs.map +1 -0
  218. package/dist/list.js +64 -0
  219. package/dist/list.js.map +1 -0
  220. package/dist/menu.cjs +4 -4
  221. package/dist/menu.cjs.map +1 -1
  222. package/dist/menu.js +60 -59
  223. package/dist/menu.js.map +1 -1
  224. package/dist/message-composer.cjs +14 -20
  225. package/dist/message-composer.cjs.map +1 -1
  226. package/dist/message-composer.js +63 -64
  227. package/dist/message-composer.js.map +1 -1
  228. package/dist/number-input.cjs +5 -3
  229. package/dist/number-input.cjs.map +1 -1
  230. package/dist/number-input.js +8 -4
  231. package/dist/number-input.js.map +1 -1
  232. package/dist/otp-input.cjs +9 -9
  233. package/dist/otp-input.cjs.map +1 -1
  234. package/dist/otp-input.js +70 -62
  235. package/dist/otp-input.js.map +1 -1
  236. package/dist/overlay/menu/menu-item.css.cjs +1 -1
  237. package/dist/overlay/menu/menu-item.css.cjs.map +1 -1
  238. package/dist/overlay/menu/menu-item.css.js +1 -1
  239. package/dist/overlay/menu/menu-item.css.js.map +1 -1
  240. package/dist/overlay/menu/menu-separator.css.cjs +1 -1
  241. package/dist/overlay/menu/menu-separator.css.cjs.map +1 -1
  242. package/dist/overlay/menu/menu-separator.css.js +1 -1
  243. package/dist/overlay/menu/menu-separator.css.js.map +1 -1
  244. package/dist/overlay/menu/menu.css.cjs +1 -1
  245. package/dist/overlay/menu/menu.css.cjs.map +1 -1
  246. package/dist/overlay/menu/menu.css.js +1 -1
  247. package/dist/overlay/menu/menu.css.js.map +1 -1
  248. package/dist/overlay/shared/use-dialog.cjs +1 -1
  249. package/dist/overlay/shared/use-dialog.cjs.map +1 -1
  250. package/dist/overlay/shared/use-dialog.d.ts.map +1 -1
  251. package/dist/overlay/shared/use-dialog.js +7 -6
  252. package/dist/overlay/shared/use-dialog.js.map +1 -1
  253. package/dist/radio-group.cjs +3 -3
  254. package/dist/radio-group.cjs.map +1 -1
  255. package/dist/radio-group.js +64 -70
  256. package/dist/radio-group.js.map +1 -1
  257. package/dist/radio.cjs +4 -4
  258. package/dist/radio.cjs.map +1 -1
  259. package/dist/radio.js +58 -58
  260. package/dist/radio.js.map +1 -1
  261. package/dist/rating.cjs.map +1 -1
  262. package/dist/rating.js.map +1 -1
  263. package/dist/refine.cjs +426 -233
  264. package/dist/refine.cjs.map +1 -1
  265. package/dist/refine.iife.js +431 -238
  266. package/dist/refine.iife.js.map +1 -1
  267. package/dist/refine.js +452 -259
  268. package/dist/refine.js.map +1 -1
  269. package/dist/select.cjs +21 -21
  270. package/dist/select.cjs.map +1 -1
  271. package/dist/select.js +135 -127
  272. package/dist/select.js.map +1 -1
  273. package/dist/shared/size-presets.cjs +1 -1
  274. package/dist/shared/size-presets.cjs.map +1 -1
  275. package/dist/shared/size-presets.d.ts +74 -0
  276. package/dist/shared/size-presets.d.ts.map +1 -1
  277. package/dist/shared/size-presets.js +48 -1
  278. package/dist/shared/size-presets.js.map +1 -1
  279. package/dist/shared/types.d.ts +5 -0
  280. package/dist/shared/types.d.ts.map +1 -1
  281. package/dist/styles/index.cjs +1 -1
  282. package/dist/styles/index.cjs.map +1 -1
  283. package/dist/styles/index.d.ts +1 -0
  284. package/dist/styles/index.d.ts.map +1 -1
  285. package/dist/styles/index.js +5 -4
  286. package/dist/styles/index.js.map +1 -1
  287. package/dist/styles/mixins/field-variants.css.cjs +85 -0
  288. package/dist/styles/mixins/field-variants.css.cjs.map +1 -0
  289. package/dist/styles/mixins/field-variants.css.d.ts +66 -0
  290. package/dist/styles/mixins/field-variants.css.d.ts.map +1 -0
  291. package/dist/styles/mixins/field-variants.css.js +90 -0
  292. package/dist/styles/mixins/field-variants.css.js.map +1 -0
  293. package/dist/switch.cjs +3 -3
  294. package/dist/switch.cjs.map +1 -1
  295. package/dist/switch.js +38 -36
  296. package/dist/switch.js.map +1 -1
  297. package/dist/tab-item.cjs +8 -8
  298. package/dist/tab-item.cjs.map +1 -1
  299. package/dist/tab-item.js +38 -28
  300. package/dist/tab-item.js.map +1 -1
  301. package/dist/tab-panel.cjs +7 -7
  302. package/dist/tab-panel.cjs.map +1 -1
  303. package/dist/tab-panel.js +34 -26
  304. package/dist/tab-panel.js.map +1 -1
  305. package/dist/tabs.cjs +4 -4
  306. package/dist/tabs.cjs.map +1 -1
  307. package/dist/tabs.js +64 -60
  308. package/dist/tabs.js.map +1 -1
  309. package/dist/textarea.cjs +15 -18
  310. package/dist/textarea.cjs.map +1 -1
  311. package/dist/textarea.js +83 -74
  312. package/dist/textarea.js.map +1 -1
  313. package/dist/time-picker.cjs +34 -31
  314. package/dist/time-picker.cjs.map +1 -1
  315. package/dist/time-picker.js +121 -109
  316. package/dist/time-picker.js.map +1 -1
  317. package/package.json +21 -9
  318. package/dist/headless/dialog-focus.cjs +0 -2
  319. package/dist/headless/dialog-focus.cjs.map +0 -1
  320. package/dist/headless/dialog-focus.d.ts +0 -40
  321. package/dist/headless/dialog-focus.d.ts.map +0 -1
  322. package/dist/headless/dialog-focus.js +0 -22
  323. package/dist/headless/dialog-focus.js.map +0 -1
  324. package/dist/headless/focus-trap.cjs +0 -2
  325. package/dist/headless/focus-trap.cjs.map +0 -1
  326. package/dist/headless/focus-trap.d.ts +0 -45
  327. package/dist/headless/focus-trap.d.ts.map +0 -1
  328. package/dist/headless/focus-trap.js +0 -51
  329. package/dist/headless/focus-trap.js.map +0 -1
@@ -1,84 +1,82 @@
1
- import { sizeVariantMixin as e } from "./styles/mixins/shape.css.js";
2
- import { disabledStateMixin as t } from "./styles/mixins/states.css.js";
3
- import { colorThemeMixin as n } from "./styles/mixins/theme.css.js";
4
- import { disablableBundle as r, sizableBundle as i, themableBundle as a } from "./shared/prop-bundles.js";
5
- import { lifecycleSignal as o } from "./headless/ore.js";
6
- import { createChoiceField as s } from "./headless/choice-field.js";
7
- import { getChoiceLabel as c, getLightChildrenByTag as l } from "./headless/light-dom.js";
8
- import { FORM_CTX as u, useFormContext as d } from "./inputs/shared/form-context.js";
9
- import f from "./inputs/checkbox-group/checkbox-group.css.js";
10
- import { bind as p, createContext as m, createStableId as h, define as g, getHost as _, html as v, inject as y, onCleanup as b, prop as x, provide as S, useEmit as C, useSlots as w, watchEffect as T } from "@vielzeug/ore";
11
- import { when as E } from "@vielzeug/ore/directives";
12
- import { computed as D, signal as O } from "@vielzeug/ripple";
13
- import { useField as k } from "@vielzeug/ore/forms";
1
+ import { disabledStateMixin as e } from "./styles/mixins/states.css.js";
2
+ import { disablableBundle as t, sizableBundle as n, themableBundle as r } from "./shared/prop-bundles.js";
3
+ import { lifecycleSignal as i } from "./headless/ore.js";
4
+ import { createChoiceField as a } from "./headless/choice-field.js";
5
+ import { getChoiceLabel as o, getLightChildrenByTag as s } from "./headless/light-dom.js";
6
+ import { FORM_CTX as c, useFormContext as l } from "./inputs/shared/form-context.js";
7
+ import u from "./inputs/checkbox-group/checkbox-group.css.js";
8
+ import { bind as d, createContext as f, createStableId as p, define as m, getHost as h, html as g, inject as _, onCleanup as v, prop as y, provide as b, useEmit as x, useSlots as S, watchEffect as C } from "@vielzeug/ore";
9
+ import { when as w } from "@vielzeug/ore/directives";
10
+ import { computed as T, signal as E } from "@vielzeug/ripple";
11
+ import { useField as D } from "@vielzeug/ore/forms";
14
12
  //#region src/inputs/checkbox-group/checkbox-group.ts
15
- var A = m("CheckboxGroupContext"), j = "ore-checkbox-group";
16
- g(j, {
13
+ var O = f("CheckboxGroupContext"), k = "ore-checkbox-group";
14
+ m(k, {
17
15
  formAssociated: !0,
18
16
  props: {
19
- ...a,
20
- ...i,
21
17
  ...r,
22
- error: x.string(),
23
- helper: x.string(),
24
- label: x.string(),
25
- name: x.string(),
26
- orientation: x.string("vertical"),
27
- required: x.bool(!1),
18
+ ...n,
19
+ ...t,
20
+ error: y.string(),
21
+ helper: y.string(),
22
+ label: y.string(),
23
+ name: y.string(),
24
+ orientation: y.string("vertical"),
25
+ required: y.bool(!1),
28
26
  values: {
29
- ...x.string(),
27
+ ...y.string(),
30
28
  reflect: !1
31
29
  }
32
30
  },
33
31
  setup(e) {
34
- let t = _(), n = C(), r = w(), i = T, a = y(u), f = d(e, a), m = s({
35
- disabled: f.disabled,
32
+ let t = h(), n = x(), r = S(), u = C, f = _(c), m = l(e, f), y = a({
33
+ disabled: m.disabled,
36
34
  error: e.error,
37
35
  helper: e.helper,
38
- multiple: O(!0),
36
+ multiple: E(!0),
39
37
  prefix: "checkbox-group",
40
38
  required: e.required,
41
- signal: o(b),
42
- validateOn: a?.validateOn,
39
+ signal: i(v),
40
+ validateOn: f?.validateOn,
43
41
  value: e.values
44
42
  });
45
- m.attachFormField(k({
46
- disabled: m.disabled,
47
- onReset: m.reset,
43
+ y.attachFormField(D({
44
+ disabled: y.disabled,
45
+ onReset: y.reset,
48
46
  toFormValue: (e) => e,
49
- validationMessage: m.validationMessage,
50
- validity: m.validity,
51
- value: m.formValue
47
+ validationMessage: y.validationMessage,
48
+ validity: y.validity,
49
+ value: y.formValue
52
50
  }));
53
- let g = m.selectedValues, x = () => l(t, "ore-checkbox"), j = (e) => c(x(), e), M = (e) => {
54
- let t = g.value, r = t.map(j);
51
+ let k = y.selectedValues, A = () => s(t, "ore-checkbox"), j = (e) => o(A(), e), M = (e) => {
52
+ let t = k.value, r = t.map(j);
55
53
  n("change", {
56
54
  labels: r,
57
55
  originalEvent: e,
58
56
  values: t
59
57
  });
60
58
  }, N = (e, t) => {
61
- m.toggleValue(e), m.triggerValidation("change"), M(t);
59
+ y.toggleValue(e), y.triggerValidation("change"), M(t);
62
60
  };
63
- S(A, {
61
+ b(O, {
64
62
  color: e.color,
65
- disabled: D(() => !!e.disabled.value),
63
+ disabled: T(() => !!e.disabled.value),
66
64
  size: e.size,
67
65
  toggle: N,
68
- values: g
66
+ values: k
69
67
  });
70
68
  let P = () => {
71
- let t = g.value, n = e.color.value, r = e.size.value, i = e.disabled.value, a = x();
69
+ let t = k.value, n = e.color.value, r = e.size.value, i = e.disabled.value, a = A();
72
70
  for (let e of a) {
73
71
  let a = e.getAttribute("value") ?? "";
74
72
  e.toggleAttribute("checked", t.includes(a)), n ? e.setAttribute("color", n) : e.removeAttribute("color"), r ? e.setAttribute("size", r) : e.removeAttribute("size"), e.toggleAttribute("disabled", !!i);
75
73
  }
76
74
  };
77
- i(() => {
75
+ u(() => {
78
76
  r.elements().value, P();
79
- }), i(() => {
77
+ }), u(() => {
80
78
  r.elements().value;
81
- let e = x().map((e) => {
79
+ let e = A().map((e) => {
82
80
  let t = (t) => {
83
81
  t.stopPropagation();
84
82
  let n = (e.getAttribute("value") ?? "").trim();
@@ -92,11 +90,11 @@ g(j, {
92
90
  for (let t of e) t();
93
91
  };
94
92
  });
95
- let F = h("checkbox-group-legend"), I = `${F}-error`, L = `${F}-helper`, R = () => !!e.error.value, z = () => !!e.helper.value && !R();
96
- return p({ attr: {
97
- size: f.size,
98
- values: m.formValue
99
- } }), v`
93
+ let F = p("checkbox-group-legend"), I = `${F}-error`, L = `${F}-helper`, R = () => !!e.error.value, z = () => !!e.helper.value && !R();
94
+ return d({ attr: {
95
+ size: m.size,
96
+ values: y.formValue
97
+ } }), g`
100
98
  <fieldset
101
99
  role="group"
102
100
  aria-required="${() => String(!!e.required.value)}"
@@ -104,7 +102,7 @@ g(j, {
104
102
  aria-errormessage="${() => R() ? I : null}"
105
103
  aria-describedby="${() => R() ? I : z() ? L : null}">
106
104
  <legend id="${F}" ?hidden=${() => !e.label.value}>
107
- ${e.label}${E(() => !!e.required.value, () => v`<span aria-hidden="true"> *</span>`)}
105
+ ${e.label}${w(() => !!e.required.value, () => g`<span aria-hidden="true"> *</span>`)}
108
106
  </legend>
109
107
  <div class="checkbox-group-items" part="items">
110
108
  <slot></slot>
@@ -114,14 +112,9 @@ g(j, {
114
112
  </fieldset>
115
113
  `;
116
114
  },
117
- styles: [
118
- n,
119
- e(),
120
- t,
121
- f
122
- ]
115
+ styles: [e, u]
123
116
  });
124
117
  //#endregion
125
- export { A as CHECKBOX_GROUP_CTX, j as CHECKBOX_GROUP_TAG };
118
+ export { O as CHECKBOX_GROUP_CTX, k as CHECKBOX_GROUP_TAG };
126
119
 
127
120
  //# sourceMappingURL=checkbox-group.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox-group.js","names":[],"sources":["../src/inputs/checkbox-group/checkbox-group.ts"],"sourcesContent":["import {\n createContext,\n createStableId,\n define,\n html,\n inject,\n prop,\n bind,\n getHost,\n onCleanup,\n provide,\n useEmit,\n useSlots,\n watchEffect,\n} from '@vielzeug/ore';\nimport { when } from '@vielzeug/ore/directives';\nimport { useField } from '@vielzeug/ore/forms';\nimport { computed, type Readable, signal } from '@vielzeug/ripple';\n\nimport type { ComponentSize, ThemeColor } from '../../types';\n\nimport {\n type ChoiceChangeDetail,\n lifecycleSignal,\n createChoiceField,\n getChoiceLabel,\n getLightChildrenByTag,\n} from '../../headless';\nimport { disablableBundle, sizableBundle, themableBundle } from '../../shared';\nimport { colorThemeMixin, disabledStateMixin, sizeVariantMixin } from '../../styles';\nimport { FORM_CTX, useFormContext } from '../shared/form-context';\nimport componentStyles from './checkbox-group.css?inline';\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\nexport type CheckboxGroupContext = {\n color: Readable<ThemeColor | undefined>;\n disabled: Readable<boolean>;\n size: Readable<ComponentSize | undefined>;\n toggle: (value: string, originalEvent?: Event) => void;\n values: Readable<string[]>;\n};\n\nexport const CHECKBOX_GROUP_CTX = createContext<CheckboxGroupContext>('CheckboxGroupContext');\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type OreCheckboxGroupProps = {\n /** Theme color — propagated to all child ore-checkbox elements */\n color?: ThemeColor;\n /** Disable all checkboxes in the group */\n disabled?: boolean;\n /** Error message shown below the group */\n error?: string;\n /** Helper text shown below the group */\n helper?: string;\n /** Legend / label for the fieldset. Required for accessibility. */\n label?: string;\n /** Form field name used during submission */\n name?: string;\n /** Layout direction of the checkbox options */\n orientation?: 'vertical' | 'horizontal';\n /** Mark the group as required */\n required?: boolean;\n /** Size — propagated to all child ore-checkbox elements */\n size?: ComponentSize;\n /** Comma-separated list of currently checked values */\n values?: string;\n};\n\nexport type OreCheckboxGroupEvents = {\n change: ChoiceChangeDetail;\n};\n\n/**\n * A fieldset wrapper that groups `ore-checkbox` elements, provides shared\n * `color` and `size` via context, and manages multi-value selection state.\n *\n * @element ore-checkbox-group\n *\n * @attr {string} label - Legend text (required for a11y)\n * @attr {string} values - Comma-separated list of checked values\n * @attr {boolean} disabled - Disable all checkboxes in the group\n * @attr {string} error - Error message\n * @attr {string} helper - Helper text\n * @attr {string} name - Form field name\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} size - Component size: 'sm' | 'md' | 'lg'\n * @attr {string} orientation - Layout: 'vertical' | 'horizontal'\n * @attr {boolean} required - Required field\n *\n * @fires change - Emitted when selection changes. detail: { value: string, values: string[], labels: string[], originalEvent?: Event }\n *\n * @slot - Place `ore-checkbox` elements here\n *\n * @cssprop --checkbox-group-direction - Flex direction of the items list ('row' | 'column')\n * @cssprop --checkbox-group-gap - Gap between checkbox items\n * @part items - Items container.\n * @example\n * ```html\n * <ore-checkbox-group name=\"fruits\" label=\"Favourite fruits\" required>\n * <ore-checkbox value=\"apple\">Apple</ore-checkbox>\n * <ore-checkbox value=\"banana\">Banana</ore-checkbox>\n * <ore-checkbox value=\"cherry\">Cherry</ore-checkbox>\n * </ore-checkbox-group>\n * <ore-checkbox-group name=\"options\" orientation=\"horizontal\" color=\"primary\">\n * <ore-checkbox value=\"a\">Option A</ore-checkbox>\n * <ore-checkbox value=\"b\">Option B</ore-checkbox>\n * </ore-checkbox-group>\n * ```\n */\nexport const CHECKBOX_GROUP_TAG = 'ore-checkbox-group' as const;\ndefine<OreCheckboxGroupProps>(CHECKBOX_GROUP_TAG, {\n formAssociated: true,\n props: {\n ...themableBundle,\n ...sizableBundle,\n ...disablableBundle,\n error: prop.string(),\n helper: prop.string(),\n label: prop.string(),\n name: prop.string(),\n orientation: prop.string('vertical'),\n required: prop.bool(false),\n // Not auto-reflected (`reflect: false`) — the derived, interaction-updated selection\n // (`choice.formValue`) is the single writer for this attribute, via `bind()` below;\n // letting `prop.string()`'s own default reflection also write the raw incoming value\n // would leave two effects racing to set the same attribute from different sources.\n values: { ...prop.string(), reflect: false },\n },\n setup(props) {\n const el = getHost();\n const emit = useEmit<OreCheckboxGroupEvents>();\n const slots = useSlots();\n const watch = watchEffect;\n\n const formCtx = inject(FORM_CTX);\n const fCtxProps = useFormContext(props, formCtx);\n\n const choice = createChoiceField({\n disabled: fCtxProps.disabled,\n error: props.error,\n helper: props.helper,\n multiple: signal(true),\n prefix: 'checkbox-group',\n required: props.required,\n signal: lifecycleSignal(onCleanup),\n validateOn: formCtx?.validateOn,\n value: props.values,\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 checkedValues = choice.selectedValues;\n\n const getCheckboxes = (): HTMLElement[] => getLightChildrenByTag(el, 'ore-checkbox');\n const getLabelForValue = (value: string): string => getChoiceLabel(getCheckboxes(), value);\n const emitChange = (originalEvent?: Event) => {\n const values = checkedValues.value;\n\n const labels = values.map(getLabelForValue);\n\n emit('change', { labels, originalEvent, values });\n };\n\n const toggleCheckbox = (val: string, originalEvent?: Event) => {\n choice.toggleValue(val);\n choice.triggerValidation('change');\n emitChange(originalEvent);\n };\n\n provide(CHECKBOX_GROUP_CTX, {\n color: props.color,\n disabled: computed(() => Boolean(props.disabled.value)),\n size: props.size,\n toggle: toggleCheckbox,\n values: checkedValues,\n });\n\n // Sync checked state + color/size/disabled onto slotted ore-checkbox children\n const syncChildren = () => {\n const values = checkedValues.value;\n const color = props.color.value;\n const size = props.size.value;\n const disabled = props.disabled.value;\n const checkboxes = getCheckboxes();\n\n for (const checkbox of checkboxes) {\n const val = checkbox.getAttribute('value') ?? '';\n\n checkbox.toggleAttribute('checked', values.includes(val));\n\n if (color) checkbox.setAttribute('color', color);\n else checkbox.removeAttribute('color');\n\n if (size) checkbox.setAttribute('size', size);\n else checkbox.removeAttribute('size');\n\n checkbox.toggleAttribute('disabled', Boolean(disabled));\n }\n };\n\n watch(() => {\n void slots.elements().value;\n syncChildren();\n });\n\n watch(() => {\n void slots.elements().value;\n\n const listeners = getCheckboxes().map((checkbox) => {\n const handler = (event: Event) => {\n event.stopPropagation();\n\n const val = (checkbox.getAttribute('value') ?? '').trim();\n\n if (!val) return;\n\n toggleCheckbox(val, event);\n };\n\n checkbox.addEventListener('change', handler);\n\n return () => {\n checkbox.removeEventListener('change', handler);\n };\n });\n\n return () => {\n for (const dispose of listeners) dispose();\n };\n });\n\n const legendId = createStableId('checkbox-group-legend');\n const errorId = `${legendId}-error`;\n const helperId = `${legendId}-helper`;\n const hasError = () => Boolean(props.error.value);\n const hasHelper = () => Boolean(props.helper.value) && !hasError();\n\n // Reactive, not a one-off `el.setAttribute()` inside the click handler: the host's `values`\n // attribute must stay in sync with the selection regardless of *why* it changed (a click,\n // or `reset()` on ancestor form reset — neither of which should need its own copy of this).\n bind({ attr: { size: fCtxProps.size, values: choice.formValue } });\n\n return html`\n <fieldset\n role=\"group\"\n aria-required=\"${() => String(Boolean(props.required.value))}\"\n aria-invalid=\"${() => String(hasError())}\"\n aria-errormessage=\"${() => (hasError() ? errorId : null)}\"\n aria-describedby=\"${() => (hasError() ? errorId : hasHelper() ? helperId : null)}\">\n <legend id=\"${legendId}\" ?hidden=${() => !props.label.value}>\n ${props.label}${when(\n () => Boolean(props.required.value),\n () => html`<span aria-hidden=\"true\"> *</span>`,\n )}\n </legend>\n <div class=\"checkbox-group-items\" part=\"items\">\n <slot></slot>\n </div>\n <div class=\"error-text\" id=\"${errorId}\" role=\"alert\" ?hidden=${() => !hasError()}>${props.error}</div>\n <div class=\"helper-text\" id=\"${helperId}\" ?hidden=${() => !hasHelper()}>${props.helper}</div>\n </fieldset>\n `;\n },\n styles: [colorThemeMixin, sizeVariantMixin(), disabledStateMixin, componentStyles],\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"checkbox-group.js","names":[],"sources":["../src/inputs/checkbox-group/checkbox-group.ts"],"sourcesContent":["import {\n createContext,\n createStableId,\n define,\n html,\n inject,\n prop,\n bind,\n getHost,\n onCleanup,\n provide,\n useEmit,\n useSlots,\n watchEffect,\n} from '@vielzeug/ore';\nimport { when } from '@vielzeug/ore/directives';\nimport { useField } from '@vielzeug/ore/forms';\nimport { computed, type Readable, signal } from '@vielzeug/ripple';\n\nimport type { ComponentSize, ThemeColor } from '../../types';\n\nimport {\n type ChoiceChangeDetail,\n lifecycleSignal,\n createChoiceField,\n getChoiceLabel,\n getLightChildrenByTag,\n} from '../../headless';\nimport { disablableBundle, sizableBundle, themableBundle } from '../../shared';\nimport { disabledStateMixin } from '../../styles';\nimport { FORM_CTX, useFormContext } from '../shared/form-context';\nimport componentStyles from './checkbox-group.css?inline';\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\nexport type CheckboxGroupContext = {\n color: Readable<ThemeColor | undefined>;\n disabled: Readable<boolean>;\n size: Readable<ComponentSize | undefined>;\n toggle: (value: string, originalEvent?: Event) => void;\n values: Readable<string[]>;\n};\n\nexport const CHECKBOX_GROUP_CTX = createContext<CheckboxGroupContext>('CheckboxGroupContext');\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type OreCheckboxGroupProps = {\n /** Theme color — propagated to all child ore-checkbox elements */\n color?: ThemeColor;\n /** Disable all checkboxes in the group */\n disabled?: boolean;\n /** Error message shown below the group */\n error?: string;\n /** Helper text shown below the group */\n helper?: string;\n /** Legend / label for the fieldset. Required for accessibility. */\n label?: string;\n /** Form field name used during submission */\n name?: string;\n /** Layout direction of the checkbox options */\n orientation?: 'vertical' | 'horizontal';\n /** Mark the group as required */\n required?: boolean;\n /** Size — propagated to all child ore-checkbox elements */\n size?: ComponentSize;\n /** Comma-separated list of currently checked values */\n values?: string;\n};\n\nexport type OreCheckboxGroupEvents = {\n change: ChoiceChangeDetail;\n};\n\n/**\n * A fieldset wrapper that groups `ore-checkbox` elements, provides shared\n * `color` and `size` via context, and manages multi-value selection state.\n *\n * @element ore-checkbox-group\n *\n * @attr {string} label - Legend text (required for a11y)\n * @attr {string} values - Comma-separated list of checked values\n * @attr {boolean} disabled - Disable all checkboxes in the group\n * @attr {string} error - Error message\n * @attr {string} helper - Helper text\n * @attr {string} name - Form field name\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} size - Component size: 'sm' | 'md' | 'lg'\n * @attr {string} orientation - Layout: 'vertical' | 'horizontal'\n * @attr {boolean} required - Required field\n *\n * @fires change - Emitted when selection changes. detail: { value: string, values: string[], labels: string[], originalEvent?: Event }\n *\n * @slot - Place `ore-checkbox` elements here\n *\n * @cssprop --checkbox-group-direction - Flex direction of the items list ('row' | 'column')\n * @cssprop --checkbox-group-gap - Gap between checkbox items\n * @part items - Items container.\n * @example\n * ```html\n * <ore-checkbox-group name=\"fruits\" label=\"Favourite fruits\" required>\n * <ore-checkbox value=\"apple\">Apple</ore-checkbox>\n * <ore-checkbox value=\"banana\">Banana</ore-checkbox>\n * <ore-checkbox value=\"cherry\">Cherry</ore-checkbox>\n * </ore-checkbox-group>\n * <ore-checkbox-group name=\"options\" orientation=\"horizontal\" color=\"primary\">\n * <ore-checkbox value=\"a\">Option A</ore-checkbox>\n * <ore-checkbox value=\"b\">Option B</ore-checkbox>\n * </ore-checkbox-group>\n * ```\n */\nexport const CHECKBOX_GROUP_TAG = 'ore-checkbox-group' as const;\ndefine<OreCheckboxGroupProps>(CHECKBOX_GROUP_TAG, {\n formAssociated: true,\n props: {\n ...themableBundle,\n ...sizableBundle,\n ...disablableBundle,\n error: prop.string(),\n helper: prop.string(),\n label: prop.string(),\n name: prop.string(),\n orientation: prop.string('vertical'),\n required: prop.bool(false),\n // Not auto-reflected (`reflect: false`) — the derived, interaction-updated selection\n // (`choice.formValue`) is the single writer for this attribute, via `bind()` below;\n // letting `prop.string()`'s own default reflection also write the raw incoming value\n // would leave two effects racing to set the same attribute from different sources.\n values: { ...prop.string(), reflect: false },\n },\n setup(props) {\n const el = getHost();\n const emit = useEmit<OreCheckboxGroupEvents>();\n const slots = useSlots();\n const watch = watchEffect;\n\n const formCtx = inject(FORM_CTX);\n const fCtxProps = useFormContext(props, formCtx);\n\n const choice = createChoiceField({\n disabled: fCtxProps.disabled,\n error: props.error,\n helper: props.helper,\n multiple: signal(true),\n prefix: 'checkbox-group',\n required: props.required,\n signal: lifecycleSignal(onCleanup),\n validateOn: formCtx?.validateOn,\n value: props.values,\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 checkedValues = choice.selectedValues;\n\n const getCheckboxes = (): HTMLElement[] => getLightChildrenByTag(el, 'ore-checkbox');\n const getLabelForValue = (value: string): string => getChoiceLabel(getCheckboxes(), value);\n const emitChange = (originalEvent?: Event) => {\n const values = checkedValues.value;\n\n const labels = values.map(getLabelForValue);\n\n emit('change', { labels, originalEvent, values });\n };\n\n const toggleCheckbox = (val: string, originalEvent?: Event) => {\n choice.toggleValue(val);\n choice.triggerValidation('change');\n emitChange(originalEvent);\n };\n\n provide(CHECKBOX_GROUP_CTX, {\n color: props.color,\n disabled: computed(() => Boolean(props.disabled.value)),\n size: props.size,\n toggle: toggleCheckbox,\n values: checkedValues,\n });\n\n // Sync checked state + color/size/disabled onto slotted ore-checkbox children\n const syncChildren = () => {\n const values = checkedValues.value;\n const color = props.color.value;\n const size = props.size.value;\n const disabled = props.disabled.value;\n const checkboxes = getCheckboxes();\n\n for (const checkbox of checkboxes) {\n const val = checkbox.getAttribute('value') ?? '';\n\n checkbox.toggleAttribute('checked', values.includes(val));\n\n if (color) checkbox.setAttribute('color', color);\n else checkbox.removeAttribute('color');\n\n if (size) checkbox.setAttribute('size', size);\n else checkbox.removeAttribute('size');\n\n checkbox.toggleAttribute('disabled', Boolean(disabled));\n }\n };\n\n watch(() => {\n void slots.elements().value;\n syncChildren();\n });\n\n watch(() => {\n void slots.elements().value;\n\n const listeners = getCheckboxes().map((checkbox) => {\n const handler = (event: Event) => {\n event.stopPropagation();\n\n const val = (checkbox.getAttribute('value') ?? '').trim();\n\n if (!val) return;\n\n toggleCheckbox(val, event);\n };\n\n checkbox.addEventListener('change', handler);\n\n return () => {\n checkbox.removeEventListener('change', handler);\n };\n });\n\n return () => {\n for (const dispose of listeners) dispose();\n };\n });\n\n const legendId = createStableId('checkbox-group-legend');\n const errorId = `${legendId}-error`;\n const helperId = `${legendId}-helper`;\n const hasError = () => Boolean(props.error.value);\n const hasHelper = () => Boolean(props.helper.value) && !hasError();\n\n // Reactive, not a one-off `el.setAttribute()` inside the click handler: the host's `values`\n // attribute must stay in sync with the selection regardless of *why* it changed (a click,\n // or `reset()` on ancestor form reset — neither of which should need its own copy of this).\n bind({ attr: { size: fCtxProps.size, values: choice.formValue } });\n\n return html`\n <fieldset\n role=\"group\"\n aria-required=\"${() => String(Boolean(props.required.value))}\"\n aria-invalid=\"${() => String(hasError())}\"\n aria-errormessage=\"${() => (hasError() ? errorId : null)}\"\n aria-describedby=\"${() => (hasError() ? errorId : hasHelper() ? helperId : null)}\">\n <legend id=\"${legendId}\" ?hidden=${() => !props.label.value}>\n ${props.label}${when(\n () => Boolean(props.required.value),\n () => html`<span aria-hidden=\"true\"> *</span>`,\n )}\n </legend>\n <div class=\"checkbox-group-items\" part=\"items\">\n <slot></slot>\n </div>\n <div class=\"error-text\" id=\"${errorId}\" role=\"alert\" ?hidden=${() => !hasError()}>${props.error}</div>\n <div class=\"helper-text\" id=\"${helperId}\" ?hidden=${() => !hasHelper()}>${props.helper}</div>\n </fieldset>\n `;\n },\n styles: [disabledStateMixin, componentStyles],\n});\n"],"mappings":"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"}
package/dist/combobox.cjs CHANGED
@@ -1,36 +1,37 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./styles/mixins/accessibility.css.cjs"),t=require("./headless/ore.cjs"),n=require("./headless/choice-field.cjs"),r=require("./headless/keyboard.cjs"),i=require("./headless/option-list.cjs"),a=require("./inputs/shared/form-context.cjs"),o=require("./inputs/combobox/combobox-options.cjs"),s=require("./inputs/combobox/combobox.css.cjs");let c=require("@vielzeug/ore"),l=require("@vielzeug/ripple"),ee=require("@vielzeug/ore/forms");var u=`ore-combobox`;(0,c.define)(u,{formAssociated:!0,props:{autoclose:c.prop.bool(!1),color:c.prop.string(),creatable:c.prop.bool(!1),disabled:c.prop.bool(!1),error:c.prop.string(),fullwidth:c.prop.bool(!1),helper:c.prop.string(),label:c.prop.string(),"label-placement":c.prop.oneOf([`inset`,`outside`],`inset`),loading:c.prop.bool(!1),multiple:c.prop.bool(!1),name:c.prop.string(),"no-filter":c.prop.bool(!1),options:c.prop.data(),placeholder:c.prop.string(`Select...`),required:c.prop.bool(!1),rounded:c.prop.string(),size:c.prop.string(),value:c.prop.string(),variant:c.prop.string()},setup(e){let s=(0,c.getHost)(),u=(0,c.useEmit)(),d=c.watchEffect,f=(0,c.inject)(a.FORM_CTX),p=a.useFormContext(e,f),m=(0,l.signal)(``),h=null,g=null,_=null,v=null,y=(0,c.ref)(),b=t.lifecycleSignal(c.onCleanup),x=n.createChoiceField({disabled:p.disabled,error:e.error,helper:e.helper,label:e.label,labelPlacement:e[`label-placement`],multiple:e.multiple,prefix:`combobox`,required:e.required,signal:b,validateOn:f?.validateOn,value:e.value}),S=(0,l.signal)([]),C=i.createOptionList({getBoundary:()=>s,getFocusedOptionElement:()=>_?.querySelector(`[data-focused]`)??null,getItems:()=>S.value,getOptionId:e=>`${x.fieldId}-opt-${e}`,getPanel:()=>_,getReference:()=>g,getTrigger:()=>h,isDisabled:()=>x.disabled.value,onClose:e=>{u(`close`,{reason:e}),b.aborted||fe(),x.triggerValidation(`blur`)},onOpen:e=>u(`open`,{reason:e}),restoreFocus:!1,signal:b}),{disabled:w,fieldId:T,selectedValues:E,triggerValidation:D}=x;x.attachFormField((0,ee.useField)({disabled:x.disabled,onReset:x.reset,toFormValue:e=>e,validationMessage:x.validationMessage,validity:x.validity,value:x.formValue}));let{focusedIndex:O,isOpen:k,scrollFocusedIntoView:te,updatePosition:ne}=C,A=()=>!!e.multiple.value,re=()=>!!e.creatable.value,ie=()=>!!e[`no-filter`].value;(0,c.bind)({attr:{open:()=>k.value?!0:void 0,size:p.size,variant:p.variant}});let j=null,M=!1,N=(0,l.computed)(()=>E.value[0]??``);Object.defineProperty(s,"value",{configurable:!0,get:()=>A()?E.value:N.value,set:e=>{let t=e;if(Array.isArray(t)){x.setValues(t.map(e=>String(e??``)));return}if(t==null||t===``){x.clear();return}x.setValues([String(t)])}});let ae=()=>E.value.length>0;function P(){h?.focus()}let F=(0,l.signal)([]),I=(0,l.signal)([]),oe=()=>!!e.loading.value;function se(e){return{disabled:!!e.disabled,iconEl:e.iconEl??null,label:e.label??e.value,value:e.value}}let L=(0,l.computed)(()=>{let t=e.options.value,n=Array.isArray(t)?t.map(se):F.value;return I.value.length===0?n:[...n,...I.value]}),R={clear:()=>{x.clear()},remove:e=>{x.removeValue(e)},select:e=>{x.selectValue(e)},toggle:e=>{x.toggleValue(e)}};function z(e=Array.from(s.children)){if(F.value=o.parseSlottedOptions(e),!A()){let e=L.value.find(e=>e.value===N.value);m.value=e?.label??N.value}}z(),d(()=>{let e=o.filterOptions(L.value,m.value,ie());S.value=A()?e.filter(e=>!E.value.includes(e.value)):e});let B=(0,l.computed)(()=>o.getCreatableLabel(m.value,re(),S.value)),ce=()=>A()&&E.value.length>0?``:e.placeholder.value||``,le=(0,l.computed)(()=>E.value),ue=(0,l.computed)(()=>E.value.map(e=>L.value.find(t=>t.value===e)?.label??e));function V(e){u(`change`,{labels:ue.value,originalEvent:e,values:le.value})}function de(e){e.stopPropagation();let t=e.detail?.value;t!==void 0&&(R.remove(t),V(e),D(`change`))}function fe(){if(!A()){let e=L.value.find(e=>e.value===N.value);M=!0,m.value=e?.label??``,Promise.resolve().then(()=>{M=!1});return}m.value=``}d(()=>{if(k.value&&!A()&&N.value&&O.value===-1&&m.value===``){let e=S.value.findIndex(e=>e.value===N.value);e>=0&&C.set(e)}});function H(e=!0,t=`programmatic`){if(e&&(j=m.value,m.value=``),!A()&&N.value){let e=o.filterOptions(L.value,``,ie()).findIndex(e=>e.value===N.value);e>=0&&C.set(e)}C.open(t),!A()&&N.value&&O.value>=0&&requestAnimationFrame(()=>{te()})}function U(e=`programmatic`){C.close(e)}let pe=r.createInteraction({disabled:w,onPress:()=>{k.value||H(!0,`click`),P()}}),me=r.createInteraction({disabled:w,keys:[`Enter`],onPress:e=>{let t=S.value;k.value&&O.value>=0&&O.value<t.length?W(t[O.value],e):k.value&&O.value===-1&&B.value?Y(m.value,e):k.value||H(!0,`keyboard`)}});function W(t,n){t.disabled||(A()?(R.toggle(t.value),m.value=``,V(n),D(`change`),e.autoclose.value&&U(),P(),requestAnimationFrame(()=>P())):(R.select(t.value),m.value=t.label,V(n),D(`change`),U(),P()))}function G(e){let t=e.getAttribute(`data-option-index`),n=t?Number(t):-1;if(Number.isInteger(n)&&n>=0&&n<S.value.length)return S.value[n]??null;let r=e.getAttribute(`data-option-value`);if(r){let e=S.value.find(e=>e.value===r);if(e)return e}let i=e.querySelector(`span`)?.textContent?.trim()??e.textContent?.trim()??``;return i?S.value.find(e=>e.label===i||e.value===i)??null:null}function he(e){e.stopPropagation(),R.clear(),m.value=``,V(e),D(`change`),P()}function K(e){let t=e.target,n=t.value;if(!M&&n!==m.value){if(m.value=n,!A()){let e=E.value[0],t=e?L.value.find(t=>t.value===e)?.label??e:``;n===``&&j===t&&(j=null)}C.navigate(`first`),k.value||H(!1,`keyboard`),u(`search`,{query:t.value})}}function q(){}function J(e){if(!w.value&&!C.handleKeydown(e))switch(e.key){case`ArrowDown`:e.preventDefault(),k.value?C.navigate(`next`):(H(!0,`keyboard`),C.navigate(`first`));break;case`ArrowUp`:e.preventDefault(),k.value?C.navigate(`prev`):H(!0,`keyboard`);break;case`Backspace`:A()&&!m.value&&E.value.length>0&&(x.removeValue(E.value[E.value.length-1]??``),V(e),D(`change`));break;case`Enter`:me.handleKeydown(e);break;case`Tab`:U(`programmatic`);break;default:break}}function Y(e,t){let n=e.trim();if(!n)return;let r={disabled:!1,iconEl:null,label:n,value:o.makeCreatableValue(n)};I.value=[...I.value,r],W(r,t)}let ge=(()=>{let e=new MutationObserver(()=>{z()});return e.observe(s,{attributeFilter:[`disabled`,`label`,`value`],attributes:!0,childList:!0,subtree:!0}),()=>e.disconnect()})(),X=e=>{let t=e.target;if(!(t instanceof Element))return;let n=t.closest(`.option`);if(!n)return;let r=G(n);if(!r||r.disabled)return;let i=S.value.findIndex(e=>e.value===r.value);i>=0&&C.set(i)},Z=s.shadowRoot;Z&&Z.addEventListener(`pointermove`,X);let _e=e=>{let t=e=>{let t=e.target;if(!(t instanceof Element))return;if(t.closest(`.no-results-create`)){e.preventDefault(),e.stopPropagation(),Y(m.value,e);return}let n=t.closest(`.option`);if(!n)return;e.preventDefault(),e.stopPropagation();let r=G(n);r&&W(r,e)},n=e=>{let t=e.target;if(!(t instanceof Element))return;let n=t.closest(`.option`);if(!n)return;let r=G(n);if(!r)return;let i=S.value.findIndex(e=>e.value===r.value);i>=0&&C.set(i)};return e.addEventListener(`click`,t),e.addEventListener(`pointermove`,n),()=>{e.removeEventListener(`click`,t),e.removeEventListener(`pointermove`,n)}},Q=null,$=null,ve=e=>{v=e,$!==e&&(Q?.(),Q=null,$=null,e&&(Q=_e(e),$=e))},ye=()=>{v&&($===v&&Q||(Q?.(),Q=_e(v),$=v))};return d(()=>{ye(),k.value?(_&&`showPopover`in _&&!_.matches(`:popover-open`)&&_.showPopover(),ne()):_&&`hidePopover`in _&&_.matches(`:popover-open`)&&_.hidePopover()}),(0,c.onElement)(y,e=>{g=e;let t=e.shadowRoot?.querySelector(`input`)??null;if(!t)return;h=t,t.setAttribute(`role`,`combobox`),t.setAttribute(`autocomplete`,`off`),t.setAttribute(`aria-autocomplete`,`list`),t.setAttribute(`aria-haspopup`,`listbox`),t.setAttribute(`spellcheck`,`false`),t.setAttribute(`aria-controls`,`${T}-listbox`);let n=()=>{k.value||H(!0,`click`),P()};return t.addEventListener(`input`,K),t.addEventListener(`keydown`,J),t.addEventListener(`focus`,q),t.addEventListener(`click`,n),()=>{h=null,g=null,t.removeEventListener(`input`,K),t.removeEventListener(`keydown`,J),t.removeEventListener(`focus`,q),t.removeEventListener(`click`,n)}}),d(()=>{if(!y.value)return;let t=h;t&&(t.setAttribute(`aria-expanded`,String(k.value)),w.value?t.setAttribute(`aria-disabled`,`true`):t.removeAttribute(`aria-disabled`),e.error.value?(t.setAttribute(`aria-invalid`,`true`),t.setAttribute(`aria-errormessage`,`${T}-error`)):(t.removeAttribute(`aria-invalid`),t.removeAttribute(`aria-errormessage`)))}),d(()=>{if(!y.value)return;let e=h;e&&e.value!==m.value&&(e.value=m.value)}),(0,c.onCleanup)(()=>{Z?.removeEventListener(`pointermove`,X),Q?.(),Q=null,$=null,ge()}),c.html`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./styles/mixins/accessibility.css.cjs"),t=require("./styles/mixins/shape.css.cjs"),n=require("./styles/mixins/theme.css.cjs"),r=require("./headless/ore.cjs"),i=require("./headless/choice-field.cjs"),a=require("./headless/keyboard.cjs"),ee=require("./headless/option-list.cjs"),o=require("./inputs/shared/form-context.cjs"),s=require("./inputs/combobox/combobox-options.cjs"),c=require("./inputs/combobox/combobox.css.cjs");let l=require("@vielzeug/ore"),u=require("@vielzeug/ripple"),te=require("@vielzeug/ore/forms");var d=`ore-combobox`;(0,l.define)(d,{formAssociated:!0,props:{autoclose:l.prop.bool(!1),color:l.prop.string(),creatable:l.prop.bool(!1),disabled:l.prop.bool(!1),error:l.prop.string(),fullwidth:l.prop.bool(!1),helper:l.prop.string(),label:l.prop.string(),"label-placement":l.prop.oneOf([`inset`,`outside`],`inset`),loading:l.prop.bool(!1),multiple:l.prop.bool(!1),name:l.prop.string(),"no-filter":l.prop.bool(!1),options:l.prop.data(),placeholder:l.prop.string(`Select...`),required:l.prop.bool(!1),rounded:l.prop.string(),size:l.prop.string(),success:l.prop.bool(!1),value:l.prop.string(),variant:l.prop.string()},setup(e){let t=(0,l.getHost)(),n=(0,l.useEmit)(),c=l.watchEffect,d=(0,l.inject)(o.FORM_CTX),f=o.useFormContext(e,d),p=(0,u.signal)(``),m=null,h=null,g=null,_=null,v=(0,l.ref)(),y=r.lifecycleSignal(l.onCleanup),b=i.createChoiceField({disabled:f.disabled,error:e.error,helper:e.helper,label:e.label,labelPlacement:e[`label-placement`],multiple:e.multiple,prefix:`combobox`,required:e.required,signal:y,validateOn:d?.validateOn,value:e.value}),x=(0,u.signal)([]),S=ee.createOptionList({getBoundary:()=>t,getFocusedOptionElement:()=>g?.querySelector(`[data-focused]`)??null,getItems:()=>x.value,getOptionId:e=>`${b.fieldId}-opt-${e}`,getPanel:()=>g,getReference:()=>h,getTrigger:()=>m,isDisabled:()=>b.disabled.value,onClose:e=>{n(`close`,{reason:e}),y.aborted||pe(),b.triggerValidation(`blur`)},onOpen:e=>n(`open`,{reason:e}),restoreFocus:!1,signal:y}),{disabled:C,fieldId:w,selectedValues:T,triggerValidation:E}=b;b.attachFormField((0,te.useField)({disabled:b.disabled,onReset:b.reset,toFormValue:e=>e,validationMessage:b.validationMessage,validity:b.validity,value:b.formValue}));let{focusedIndex:D,isOpen:O,scrollFocusedIntoView:ne,updatePosition:re}=S,k=()=>!!e.multiple.value,ie=()=>!!e.creatable.value,ae=()=>!!e[`no-filter`].value;(0,l.bind)({attr:{open:()=>O.value?!0:void 0,size:f.size,variant:f.variant}});let A=null,j=!1,M=(0,u.computed)(()=>T.value[0]??``);Object.defineProperty(t,"value",{configurable:!0,get:()=>k()?T.value:M.value,set:e=>{let t=e;if(Array.isArray(t)){b.setValues(t.map(e=>String(e??``)));return}if(t==null||t===``){b.clear();return}b.setValues([String(t)])}});let oe=()=>T.value.length>0;function N(){m?.focus()}let P=(0,u.signal)([]),F=(0,u.signal)([]),se=()=>!!e.loading.value;function ce(e){return{disabled:!!e.disabled,iconEl:e.iconEl??null,label:e.label??e.value,value:e.value}}let I=(0,u.computed)(()=>{let t=e.options.value,n=Array.isArray(t)?t.map(ce):P.value;return F.value.length===0?n:[...n,...F.value]}),L={clear:()=>{b.clear()},remove:e=>{b.removeValue(e)},select:e=>{b.selectValue(e)},toggle:e=>{b.toggleValue(e)}};function R(e=Array.from(t.children)){if(P.value=s.parseSlottedOptions(e),!k()){let e=I.value.find(e=>e.value===M.value);p.value=e?.label??M.value}}R(),c(()=>{let e=s.filterOptions(I.value,p.value,ae());x.value=k()?e.filter(e=>!T.value.includes(e.value)):e});let z=(0,u.computed)(()=>s.getCreatableLabel(p.value,ie(),x.value)),le=()=>k()&&T.value.length>0?``:e.placeholder.value||``,ue=(0,u.computed)(()=>T.value),de=(0,u.computed)(()=>T.value.map(e=>I.value.find(t=>t.value===e)?.label??e));function B(e){n(`change`,{labels:de.value,originalEvent:e,values:ue.value})}function fe(e){e.stopPropagation();let t=e.detail?.value;t!==void 0&&(L.remove(t),B(e),E(`change`))}function pe(){if(!k()){let e=I.value.find(e=>e.value===M.value);j=!0,p.value=e?.label??``,Promise.resolve().then(()=>{j=!1});return}p.value=``}c(()=>{if(O.value&&!k()&&M.value&&D.value===-1&&p.value===``){let e=x.value.findIndex(e=>e.value===M.value);e>=0&&S.set(e)}});function V(e=!0,t=`programmatic`){if(e&&(A=p.value,p.value=``),!k()&&M.value){let e=s.filterOptions(I.value,``,ae()).findIndex(e=>e.value===M.value);e>=0&&S.set(e)}S.open(t),!k()&&M.value&&D.value>=0&&requestAnimationFrame(()=>{ne()})}function H(e=`programmatic`){S.close(e)}let me=a.createInteraction({disabled:C,onPress:()=>{O.value||V(!0,`click`),N()}}),he=a.createInteraction({disabled:C,keys:[`Enter`],onPress:e=>{let t=x.value;O.value&&D.value>=0&&D.value<t.length?U(t[D.value],e):O.value&&D.value===-1&&z.value?J(p.value,e):O.value||V(!0,`keyboard`)}});function U(t,n){t.disabled||(k()?(L.toggle(t.value),p.value=``,B(n),E(`change`),e.autoclose.value&&H(),N(),requestAnimationFrame(()=>N())):(L.select(t.value),p.value=t.label,B(n),E(`change`),H(),N()))}function W(e){let t=e.getAttribute(`data-option-index`),n=t?Number(t):-1;if(Number.isInteger(n)&&n>=0&&n<x.value.length)return x.value[n]??null;let r=e.getAttribute(`data-option-value`);if(r){let e=x.value.find(e=>e.value===r);if(e)return e}let i=e.querySelector(`span`)?.textContent?.trim()??e.textContent?.trim()??``;return i?x.value.find(e=>e.label===i||e.value===i)??null:null}function ge(e){e.stopPropagation(),L.clear(),p.value=``,B(e),E(`change`),N()}function G(e){let t=e.target,r=t.value;if(!j&&r!==p.value){if(p.value=r,!k()){let e=T.value[0],t=e?I.value.find(t=>t.value===e)?.label??e:``;r===``&&A===t&&(A=null)}S.navigate(`first`),O.value||V(!1,`keyboard`),n(`search`,{query:t.value})}}function K(){}function q(e){if(!C.value&&!S.handleKeydown(e))switch(e.key){case`ArrowDown`:e.preventDefault(),O.value?S.navigate(`next`):(V(!0,`keyboard`),S.navigate(`first`));break;case`ArrowUp`:e.preventDefault(),O.value?S.navigate(`prev`):V(!0,`keyboard`);break;case`Backspace`:k()&&!p.value&&T.value.length>0&&(b.removeValue(T.value[T.value.length-1]??``),B(e),E(`change`));break;case`Enter`:he.handleKeydown(e);break;case`Tab`:H(`programmatic`);break;default:break}}function J(e,t){let n=e.trim();if(!n)return;let r={disabled:!1,iconEl:null,label:n,value:s.makeCreatableValue(n)};F.value=[...F.value,r],U(r,t)}let _e=(()=>{let e=new MutationObserver(()=>{R()});return e.observe(t,{attributeFilter:[`disabled`,`label`,`value`],attributes:!0,childList:!0,subtree:!0}),()=>e.disconnect()})(),Y=e=>{let t=e.target;if(!(t instanceof Element))return;let n=t.closest(`.option`);if(!n)return;let r=W(n);if(!r||r.disabled)return;let i=x.value.findIndex(e=>e.value===r.value);i>=0&&S.set(i)},X=t.shadowRoot;X&&X.addEventListener(`pointermove`,Y);let Z=e=>{let t=e=>{let t=e.target;if(!(t instanceof Element))return;if(t.closest(`.no-results-create`)){e.preventDefault(),e.stopPropagation(),J(p.value,e);return}let n=t.closest(`.option`);if(!n)return;e.preventDefault(),e.stopPropagation();let r=W(n);r&&U(r,e)},n=e=>{let t=e.target;if(!(t instanceof Element))return;let n=t.closest(`.option`);if(!n)return;let r=W(n);if(!r)return;let i=x.value.findIndex(e=>e.value===r.value);i>=0&&S.set(i)};return e.addEventListener(`click`,t),e.addEventListener(`pointermove`,n),()=>{e.removeEventListener(`click`,t),e.removeEventListener(`pointermove`,n)}},Q=null,$=null,ve=e=>{_=e,$!==e&&(Q?.(),Q=null,$=null,e&&(Q=Z(e),$=e))},ye=()=>{_&&($===_&&Q||(Q?.(),Q=Z(_),$=_))};return c(()=>{ye(),O.value?(g&&`showPopover`in g&&!g.matches(`:popover-open`)&&g.showPopover(),re()):g&&`hidePopover`in g&&g.matches(`:popover-open`)&&g.hidePopover()}),(0,l.onElement)(v,e=>{h=e;let t=e.shadowRoot?.querySelector(`input`)??null;if(!t)return;m=t,t.setAttribute(`role`,`combobox`),t.setAttribute(`autocomplete`,`off`),t.setAttribute(`aria-autocomplete`,`list`),t.setAttribute(`aria-haspopup`,`listbox`),t.setAttribute(`spellcheck`,`false`),t.setAttribute(`aria-controls`,`${w}-listbox`);let n=()=>{O.value||V(!0,`click`),N()};return t.addEventListener(`input`,G),t.addEventListener(`keydown`,q),t.addEventListener(`focus`,K),t.addEventListener(`click`,n),()=>{m=null,h=null,t.removeEventListener(`input`,G),t.removeEventListener(`keydown`,q),t.removeEventListener(`focus`,K),t.removeEventListener(`click`,n)}}),c(()=>{if(!v.value)return;let t=m;t&&(t.setAttribute(`aria-expanded`,String(O.value)),C.value?t.setAttribute(`aria-disabled`,`true`):t.removeAttribute(`aria-disabled`),e.error.value?(t.setAttribute(`aria-invalid`,`true`),t.setAttribute(`aria-errormessage`,`${w}-error`)):(t.removeAttribute(`aria-invalid`),t.removeAttribute(`aria-errormessage`)))}),c(()=>{if(!v.value)return;let e=m;e&&e.value!==p.value&&(e.value=p.value)}),(0,l.onCleanup)(()=>{X?.removeEventListener(`pointermove`,Y),Q?.(),Q=null,$=null,_e()}),l.html`
2
2
  <slot></slot>
3
3
  <ore-input
4
4
  class="trigger"
5
- ref=${y}
5
+ ref=${v}
6
6
  :label="${()=>e.label.value??``}"
7
- :placeholder="${ce}"
7
+ :placeholder="${le}"
8
8
  :label-placement="${()=>e[`label-placement`].value??`inset`}"
9
9
  :color="${()=>e.color?.value??void 0}"
10
- :size="${()=>p.size?.value??void 0}"
11
- :variant="${()=>p.variant?.value??void 0}"
10
+ :size="${()=>f.size?.value??void 0}"
11
+ :variant="${()=>f.variant?.value??void 0}"
12
12
  :rounded="${()=>e.rounded?.value??void 0}"
13
13
  :helper="${()=>e.helper.value??``}"
14
14
  :error="${()=>e.error.value??``}"
15
- ?disabled="${w}"
15
+ ?disabled="${C}"
16
16
  ?required="${()=>!1}"
17
17
  ?fullwidth="${()=>e.fullwidth.value?!0:void 0}"
18
+ ?success="${()=>e.success.value}"
18
19
  :name="${()=>e.name.value??``}"
19
- @click="${e=>{pe.handleClick(e)}}"
20
+ @click="${e=>{me.handleClick(e)}}"
20
21
  part="wrapper">
21
22
  <div slot="prefix" class="chips-row">
22
23
  <!-- Keep chip list diffing isolated so input node identity stays stable. -->
23
24
  <span class="chips-list">
24
- ${()=>(A()?E.value:[]).map(t=>c.html`
25
+ ${()=>(k()?T.value:[]).map(t=>l.html`
25
26
  <ore-chip
26
27
  value=${t}
27
- label=${L.value.find(e=>e.value===t)?.label??t}
28
+ label=${I.value.find(e=>e.value===t)?.label??t}
28
29
  mode="removable"
29
30
  variant="flat"
30
31
  size="sm"
31
32
  color="${e.color}"
32
- @remove=${de}>
33
- ${L.value.find(e=>e.value===t)?.label??t}
33
+ @remove=${fe}>
34
+ ${I.value.find(e=>e.value===t)?.label??t}
34
35
  </ore-chip>
35
36
  `)}
36
37
  </span>
@@ -42,8 +43,8 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=requi
42
43
  type="button"
43
44
  aria-label="Clear"
44
45
  tabindex="-1"
45
- ?hidden=${()=>!ae()}
46
- @click="${he}">
46
+ ?hidden=${()=>!oe()}
47
+ @click="${ge}">
47
48
  <ore-icon name="x" size="12" stroke-width="2.5" aria-hidden="true"></ore-icon>
48
49
  </button>
49
50
  <span class="combobox-suffix-end">
@@ -56,7 +57,7 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=requi
56
57
  </ore-input>
57
58
  <span
58
59
  class="sr-only"
59
- id="${()=>`${T}-error`}"
60
+ id="${()=>`${w}-error`}"
60
61
  role="alert"
61
62
  aria-live="assertive"
62
63
  ?hidden="${()=>!e.error.value}"
@@ -65,32 +66,32 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=requi
65
66
  <div
66
67
  class="dropdown"
67
68
  part="dropdown"
68
- id="${()=>`${T}-dropdown`}"
69
+ id="${()=>`${w}-dropdown`}"
69
70
  popover="manual"
70
- ?data-open=${()=>k.value}
71
- ref=${e=>{_=e}}>
71
+ ?data-open=${()=>O.value}
72
+ ref=${e=>{g=e}}>
72
73
  <div
73
74
  role="listbox"
74
- id="${()=>`${T}-listbox`}"
75
- :style="${()=>k.value&&S.value.length>0?`height:${S.value.length*36}px;`:``}"
75
+ id="${()=>`${w}-listbox`}"
76
+ :style="${()=>O.value&&x.value.length>0?`height:${x.value.length*36}px;`:``}"
76
77
  aria-label="${()=>e.label.value||e.placeholder.value||`Options`}"
77
78
  ref=${e=>{ve(e)}}>
78
- ${()=>k.value?oe()?c.html`<div class="dropdown-loading">Loading...</div>`:S.value.length===0?B.value?c.html`<button
79
+ ${()=>O.value?se()?l.html`<div class="dropdown-loading">Loading...</div>`:x.value.length===0?z.value?l.html`<button
79
80
  type="button"
80
81
  class="no-results-create"
81
- ?data-focused=${()=>O.value===-1}>
82
- ${B.value}
83
- </button>`:c.html`<div class="no-results" role="presentation">No results found</div>`:S.value.map((e,t)=>c.html`<div
82
+ ?data-focused=${()=>D.value===-1}>
83
+ ${z.value}
84
+ </button>`:l.html`<div class="no-results" role="presentation">No results found</div>`:x.value.map((e,t)=>l.html`<div
84
85
  class="option"
85
86
  role="option"
86
- id="${`${T}-opt-${t}`}"
87
+ id="${`${w}-opt-${t}`}"
87
88
  data-option-index="${t}"
88
89
  data-option-value="${e.value}"
89
- :aria-selected="${()=>String(A()?E.value.includes(e.value):N.value===e.value)}"
90
+ :aria-selected="${()=>String(k()?T.value.includes(e.value):M.value===e.value)}"
90
91
  aria-disabled="${String(e.disabled)}"
91
92
  style="${`position:absolute;top:0;left:0;right:0;transform:translateY(${t*36}px);`}"
92
- ?data-focused=${()=>O.value===t}
93
- ?data-selected=${()=>A()?E.value.includes(e.value):N.value===e.value}
93
+ ?data-focused=${()=>D.value===t}
94
+ ?data-selected=${()=>k()?T.value.includes(e.value):M.value===e.value}
94
95
  ?data-disabled=${e.disabled}>
95
96
  <span>${e.label}</span>
96
97
  <span class="option-check" aria-hidden="true"
@@ -99,5 +100,5 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=requi
99
100
  </div>`):``}
100
101
  </div>
101
102
  </div>
102
- `},shadow:{delegatesFocus:!0},styles:[e.reducedMotionMixin,e.srOnlyMixin,s.default]}),exports.COMBOBOX_TAG=u;
103
+ `},shadow:{delegatesFocus:!0},styles:[n.colorThemeMixin,e.reducedMotionMixin,t.roundedVariantMixin,e.srOnlyMixin,c.default]}),exports.COMBOBOX_TAG=d;
103
104
  //# sourceMappingURL=combobox.cjs.map