@editora/ui-core 0.2.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (365) hide show
  1. package/dist/{ElementBase-DxbvhLJs.js → ElementBase-CbUsP3D6.js} +1 -1
  2. package/dist/{ElementBase-BeZT54Hj.mjs → ElementBase-D5QsC5Vw.mjs} +10 -1
  3. package/dist/ElementBase.d.ts +7 -0
  4. package/dist/ElementBase.d.ts.map +1 -1
  5. package/dist/accordion.cjs.js +1 -1
  6. package/dist/accordion.esm.js +1 -1
  7. package/dist/add-icons-CVeHOsWl.js +1 -0
  8. package/dist/add-icons-DBUZJ0g7.mjs +14 -0
  9. package/dist/add-icons.cjs.js +1 -0
  10. package/dist/add-icons.d.ts +16 -0
  11. package/dist/add-icons.d.ts.map +1 -0
  12. package/dist/add-icons.esm.js +4 -0
  13. package/dist/alert-dialog.cjs.js +24 -24
  14. package/dist/alert-dialog.esm.js +112 -107
  15. package/dist/alert.cjs.js +8 -8
  16. package/dist/alert.esm.js +22 -22
  17. package/dist/animated-beam.cjs.js +1 -1
  18. package/dist/animated-beam.esm.js +1 -1
  19. package/dist/animated-list.cjs.js +1 -1
  20. package/dist/animated-list.esm.js +1 -1
  21. package/dist/animated-text.cjs.js +1 -1
  22. package/dist/animated-text.esm.js +1 -1
  23. package/dist/app-header.cjs.js +15 -3
  24. package/dist/app-header.esm.js +31 -4
  25. package/dist/aspect-ratio.cjs.js +1 -1
  26. package/dist/aspect-ratio.esm.js +1 -1
  27. package/dist/avatar.cjs.js +1 -1
  28. package/dist/avatar.esm.js +1 -1
  29. package/dist/badge.cjs.js +1 -1
  30. package/dist/badge.esm.js +1 -1
  31. package/dist/block-controls.cjs.js +1 -1
  32. package/dist/block-controls.esm.js +1 -1
  33. package/dist/box.cjs.js +1 -1
  34. package/dist/box.esm.js +1 -1
  35. package/dist/breadcrumb.cjs.js +4 -4
  36. package/dist/breadcrumb.esm.js +93 -84
  37. package/dist/button.cjs.js +520 -1
  38. package/dist/button.esm.js +682 -2
  39. package/dist/{calendar-CzpWDxLc.js → calendar-BsVqtpjM.js} +6 -6
  40. package/dist/{calendar-DkSDFg33.mjs → calendar-CFafqZVA.mjs} +6 -6
  41. package/dist/calendar.cjs.js +1 -1
  42. package/dist/calendar.esm.js +1 -1
  43. package/dist/card.cjs.js +6 -5
  44. package/dist/card.esm.js +52 -39
  45. package/dist/chart.cjs.js +2 -2
  46. package/dist/chart.esm.js +2 -2
  47. package/dist/checkbox.cjs.js +4 -4
  48. package/dist/checkbox.esm.js +36 -15
  49. package/dist/clone-source-BxK2pEVw.mjs +11 -0
  50. package/dist/clone-source-C7E_ri5f.js +1 -0
  51. package/dist/collapsible.cjs.js +1 -1
  52. package/dist/collapsible.esm.js +1 -1
  53. package/dist/color-picker.cjs.js +2 -2
  54. package/dist/color-picker.esm.js +3 -3
  55. package/dist/combobox.cjs.js +4 -4
  56. package/dist/combobox.esm.js +22 -19
  57. package/dist/command-palette.cjs.js +1 -1
  58. package/dist/command-palette.esm.js +1 -1
  59. package/dist/command.cjs.js +1 -1
  60. package/dist/command.esm.js +1 -1
  61. package/dist/components/ui-alert-dialog.d.ts.map +1 -1
  62. package/dist/components/ui-alert.d.ts.map +1 -1
  63. package/dist/components/ui-app-header.d.ts +1 -0
  64. package/dist/components/ui-app-header.d.ts.map +1 -1
  65. package/dist/components/ui-breadcrumb.d.ts.map +1 -1
  66. package/dist/components/ui-card.d.ts +7 -0
  67. package/dist/components/ui-card.d.ts.map +1 -1
  68. package/dist/components/ui-checkbox.d.ts +6 -0
  69. package/dist/components/ui-checkbox.d.ts.map +1 -1
  70. package/dist/components/ui-combobox.d.ts.map +1 -1
  71. package/dist/components/ui-date-time-picker.d.ts.map +1 -1
  72. package/dist/components/ui-dialog.d.ts +1 -0
  73. package/dist/components/ui-dialog.d.ts.map +1 -1
  74. package/dist/components/ui-drawer.d.ts.map +1 -1
  75. package/dist/components/ui-dropdown.d.ts.map +1 -1
  76. package/dist/components/ui-empty-state.d.ts.map +1 -1
  77. package/dist/components/ui-hover-card.d.ts.map +1 -1
  78. package/dist/components/ui-icon.d.ts +1 -0
  79. package/dist/components/ui-icon.d.ts.map +1 -1
  80. package/dist/components/ui-input.d.ts +16 -0
  81. package/dist/components/ui-input.d.ts.map +1 -1
  82. package/dist/components/ui-layout.d.ts +20 -0
  83. package/dist/components/ui-layout.d.ts.map +1 -1
  84. package/dist/components/ui-menu.d.ts +1 -0
  85. package/dist/components/ui-menu.d.ts.map +1 -1
  86. package/dist/components/ui-menubar.d.ts.map +1 -1
  87. package/dist/components/ui-multi-select.d.ts +6 -0
  88. package/dist/components/ui-multi-select.d.ts.map +1 -1
  89. package/dist/components/ui-number-field.d.ts +6 -0
  90. package/dist/components/ui-number-field.d.ts.map +1 -1
  91. package/dist/components/ui-pagination.d.ts.map +1 -1
  92. package/dist/components/ui-password-field.d.ts +11 -0
  93. package/dist/components/ui-password-field.d.ts.map +1 -1
  94. package/dist/components/ui-popover.d.ts.map +1 -1
  95. package/dist/components/ui-positioner.d.ts.map +1 -1
  96. package/dist/components/ui-radio-group.d.ts +6 -0
  97. package/dist/components/ui-radio-group.d.ts.map +1 -1
  98. package/dist/components/ui-rating.d.ts +1 -0
  99. package/dist/components/ui-rating.d.ts.map +1 -1
  100. package/dist/components/ui-select.d.ts +7 -0
  101. package/dist/components/ui-select.d.ts.map +1 -1
  102. package/dist/components/ui-sidebar.d.ts +1 -0
  103. package/dist/components/ui-sidebar.d.ts.map +1 -1
  104. package/dist/components/ui-slider.d.ts +6 -0
  105. package/dist/components/ui-slider.d.ts.map +1 -1
  106. package/dist/components/ui-sortable.d.ts +1 -0
  107. package/dist/components/ui-sortable.d.ts.map +1 -1
  108. package/dist/components/ui-switch.d.ts +6 -0
  109. package/dist/components/ui-switch.d.ts.map +1 -1
  110. package/dist/components/ui-tabs.d.ts +2 -0
  111. package/dist/components/ui-tabs.d.ts.map +1 -1
  112. package/dist/components/ui-textarea.d.ts +6 -0
  113. package/dist/components/ui-textarea.d.ts.map +1 -1
  114. package/dist/components/ui-toast.d.ts.map +1 -1
  115. package/dist/components/ui-tooltip.d.ts.map +1 -1
  116. package/dist/container.cjs.js +1 -1
  117. package/dist/container.esm.js +1 -1
  118. package/dist/context-menu.cjs.js +2 -2
  119. package/dist/context-menu.esm.js +2 -2
  120. package/dist/control-group.cjs.js +1 -1
  121. package/dist/control-group.esm.js +1 -1
  122. package/dist/data-table.cjs.js +5 -5
  123. package/dist/data-table.esm.js +7 -7
  124. package/dist/date-field.cjs.js +1 -1
  125. package/dist/date-field.esm.js +3 -3
  126. package/dist/date-picker.cjs.js +2 -2
  127. package/dist/date-picker.esm.js +17 -17
  128. package/dist/date-range-picker.cjs.js +2 -2
  129. package/dist/date-range-picker.esm.js +4 -4
  130. package/dist/date-range-time-picker.cjs.js +3 -3
  131. package/dist/date-range-time-picker.esm.js +16 -16
  132. package/dist/date-time-picker.cjs.js +26 -23
  133. package/dist/date-time-picker.esm.js +49 -46
  134. package/dist/{date-time-utils-zAx4ghvC.mjs → date-time-utils-CJUksWj3.mjs} +1 -1
  135. package/dist/{date-time-utils-C-4eHTyy.js → date-time-utils-D3hQQ5Om.js} +1 -1
  136. package/dist/description.cjs.js +1 -1
  137. package/dist/description.esm.js +1 -1
  138. package/dist/dialog.cjs.js +7 -7
  139. package/dist/dialog.esm.js +51 -47
  140. package/dist/direction-provider.cjs.js +1 -1
  141. package/dist/direction-provider.esm.js +1 -1
  142. package/dist/dismissable-layer.cjs.js +1 -1
  143. package/dist/dismissable-layer.esm.js +1 -1
  144. package/dist/dock.cjs.js +1 -1
  145. package/dist/dock.esm.js +1 -1
  146. package/dist/drawer.cjs.js +5 -5
  147. package/dist/drawer.esm.js +18 -17
  148. package/dist/dropdown.cjs.js +7 -7
  149. package/dist/dropdown.esm.js +39 -38
  150. package/dist/empty-state.cjs.js +12 -2
  151. package/dist/empty-state.esm.js +17 -7
  152. package/dist/field-error.cjs.js +1 -1
  153. package/dist/field-error.esm.js +1 -1
  154. package/dist/field.cjs.js +2 -2
  155. package/dist/field.esm.js +2 -2
  156. package/dist/fieldset.cjs.js +1 -1
  157. package/dist/fieldset.esm.js +1 -1
  158. package/dist/file-upload.cjs.js +1 -1
  159. package/dist/file-upload.esm.js +1 -1
  160. package/dist/flex.cjs.js +1 -1
  161. package/dist/flex.esm.js +1 -1
  162. package/dist/floating-toolbar.cjs.js +2 -2
  163. package/dist/floating-toolbar.esm.js +2 -2
  164. package/dist/focus-scope-Dl0qk5GP.mjs +177 -0
  165. package/dist/focus-scope-Doz0bnE1.js +1 -0
  166. package/dist/focus-scope.cjs.js +1 -1
  167. package/dist/focus-scope.esm.js +2 -2
  168. package/dist/form-control-B90_3kYN.js +1 -0
  169. package/dist/form-control-D9wWUMBl.mjs +86 -0
  170. package/dist/form.cjs.js +2 -2
  171. package/dist/form.esm.js +2 -2
  172. package/dist/gantt.cjs.js +2 -2
  173. package/dist/gantt.esm.js +2 -2
  174. package/dist/grid.cjs.js +1 -1
  175. package/dist/grid.esm.js +1 -1
  176. package/dist/hover-card.cjs.js +5 -5
  177. package/dist/hover-card.esm.js +19 -18
  178. package/dist/icon-cloud.cjs.js +1 -1
  179. package/dist/icon-cloud.esm.js +1 -1
  180. package/dist/icon.cjs.js +207 -1
  181. package/dist/icon.esm.js +294 -2
  182. package/dist/icons-CpCpPXV5.js +1 -0
  183. package/dist/icons-DWYbbhb0.mjs +115 -0
  184. package/dist/icons.d.ts +11 -1
  185. package/dist/icons.d.ts.map +1 -1
  186. package/dist/implicit-submit-B6M5Uc56.js +1 -0
  187. package/dist/implicit-submit-Lr0-q2LR.mjs +44 -0
  188. package/dist/index.cjs.js +1 -1
  189. package/dist/index.d.ts +1 -0
  190. package/dist/index.d.ts.map +1 -1
  191. package/dist/index.esm.js +309 -299
  192. package/dist/inline-edit.cjs.js +1 -1
  193. package/dist/inline-edit.esm.js +1 -1
  194. package/dist/input.cjs.js +62 -20
  195. package/dist/input.esm.js +164 -58
  196. package/dist/label.cjs.js +1 -1
  197. package/dist/label.esm.js +1 -1
  198. package/dist/layout.cjs.js +145 -4
  199. package/dist/layout.esm.js +278 -40
  200. package/dist/marquee.cjs.js +1 -1
  201. package/dist/marquee.esm.js +1 -1
  202. package/dist/masonry-grid.cjs.js +1 -1
  203. package/dist/masonry-grid.esm.js +1 -1
  204. package/dist/menu.cjs.js +8 -8
  205. package/dist/menu.esm.js +51 -47
  206. package/dist/menubar.cjs.js +9 -9
  207. package/dist/menubar.esm.js +41 -40
  208. package/dist/meter.cjs.js +1 -1
  209. package/dist/meter.esm.js +1 -1
  210. package/dist/multi-select.cjs.js +7 -7
  211. package/dist/multi-select.esm.js +55 -34
  212. package/dist/navigate-CXebafwF.mjs +18 -0
  213. package/dist/navigate-ChJVIIuS.js +1 -0
  214. package/dist/navigation-menu.cjs.js +1 -1
  215. package/dist/navigation-menu.esm.js +1 -1
  216. package/dist/number-attribute-BAF07JrU.mjs +8 -0
  217. package/dist/number-attribute-C4Rrl7d3.js +1 -0
  218. package/dist/number-field.cjs.js +8 -8
  219. package/dist/number-field.esm.js +90 -69
  220. package/dist/number-ticker.cjs.js +1 -1
  221. package/dist/number-ticker.esm.js +1 -1
  222. package/dist/odometer.cjs.js +1 -1
  223. package/dist/odometer.esm.js +1 -1
  224. package/dist/orbiter.cjs.js +1 -1
  225. package/dist/orbiter.esm.js +1 -1
  226. package/dist/pagination.cjs.js +24 -23
  227. package/dist/pagination.esm.js +61 -46
  228. package/dist/{panel-group-BVHJEdfx.js → panel-group-BIzzpQ5i.js} +1 -1
  229. package/dist/{panel-group-BxO_eNW6.mjs → panel-group-CFLjzRWI.mjs} +1 -1
  230. package/dist/panel-group.cjs.js +1 -1
  231. package/dist/panel-group.esm.js +1 -1
  232. package/dist/panel.cjs.js +1 -1
  233. package/dist/panel.esm.js +1 -1
  234. package/dist/password-field.cjs.js +36 -16
  235. package/dist/password-field.esm.js +113 -44
  236. package/dist/pin-input.cjs.js +1 -1
  237. package/dist/pin-input.esm.js +1 -1
  238. package/dist/placement-grid.cjs.js +1 -1
  239. package/dist/placement-grid.esm.js +1 -1
  240. package/dist/plugin-panel.cjs.js +1 -1
  241. package/dist/plugin-panel.esm.js +1 -1
  242. package/dist/popover.cjs.js +2 -2
  243. package/dist/popover.esm.js +28 -26
  244. package/dist/portal.cjs.js +1 -1
  245. package/dist/portal.esm.js +1 -1
  246. package/dist/positioner.cjs.js +2 -2
  247. package/dist/positioner.esm.js +35 -38
  248. package/dist/preload.cjs.js +221 -0
  249. package/dist/preload.css +220 -0
  250. package/dist/preload.d.ts +17 -0
  251. package/dist/preload.d.ts.map +1 -0
  252. package/dist/preload.esm.js +224 -0
  253. package/dist/presence.cjs.js +1 -1
  254. package/dist/presence.esm.js +1 -1
  255. package/dist/primitives/clone-source.d.ts +3 -0
  256. package/dist/primitives/clone-source.d.ts.map +1 -0
  257. package/dist/primitives/focus-scope.d.ts +6 -0
  258. package/dist/primitives/focus-scope.d.ts.map +1 -1
  259. package/dist/primitives/form-control.d.ts +68 -0
  260. package/dist/primitives/form-control.d.ts.map +1 -0
  261. package/dist/primitives/implicit-submit.d.ts +17 -0
  262. package/dist/primitives/implicit-submit.d.ts.map +1 -0
  263. package/dist/primitives/navigate.d.ts +27 -0
  264. package/dist/primitives/navigate.d.ts.map +1 -0
  265. package/dist/primitives/number-attribute.d.ts +7 -0
  266. package/dist/primitives/number-attribute.d.ts.map +1 -0
  267. package/dist/primitives/slotted-input.d.ts +19 -0
  268. package/dist/primitives/slotted-input.d.ts.map +1 -0
  269. package/dist/progress.cjs.js +3 -3
  270. package/dist/progress.esm.js +3 -3
  271. package/dist/quick-actions.cjs.js +5 -5
  272. package/dist/quick-actions.esm.js +3 -3
  273. package/dist/radio-group.cjs.js +9 -9
  274. package/dist/radio-group.esm.js +47 -24
  275. package/dist/radio.cjs.js +1 -1
  276. package/dist/radio.esm.js +1 -1
  277. package/dist/rating.cjs.js +6 -6
  278. package/dist/rating.esm.js +21 -10
  279. package/dist/{runtime-CJzoaC8Z.mjs → runtime-CORXjP7e.mjs} +366 -352
  280. package/dist/runtime-uCly3ECd.js +5 -0
  281. package/dist/runtime.cjs.js +1 -1
  282. package/dist/runtime.esm.js +1 -1
  283. package/dist/scroll-area.cjs.js +1 -1
  284. package/dist/scroll-area.esm.js +1 -1
  285. package/dist/section.cjs.js +1 -1
  286. package/dist/section.esm.js +1 -1
  287. package/dist/select.cjs.js +21 -21
  288. package/dist/select.esm.js +111 -71
  289. package/dist/selection-popup.cjs.js +2 -2
  290. package/dist/selection-popup.esm.js +2 -2
  291. package/dist/semantic-tokens.d.ts.map +1 -1
  292. package/dist/separator.cjs.js +1 -1
  293. package/dist/separator.esm.js +1 -1
  294. package/dist/sidebar.cjs.js +15 -15
  295. package/dist/sidebar.esm.js +48 -42
  296. package/dist/skeleton.cjs.js +1 -1
  297. package/dist/skeleton.esm.js +1 -1
  298. package/dist/slider.cjs.js +11 -11
  299. package/dist/slider.esm.js +40 -23
  300. package/dist/slot.cjs.js +1 -1
  301. package/dist/slot.esm.js +1 -1
  302. package/dist/slotted-input-BVq2QQg2.js +1 -0
  303. package/dist/slotted-input-atWznLfm.mjs +13 -0
  304. package/dist/sortable.cjs.js +25 -25
  305. package/dist/sortable.esm.js +29 -21
  306. package/dist/spinning-text.cjs.js +1 -1
  307. package/dist/spinning-text.esm.js +1 -1
  308. package/dist/split-button.cjs.js +1 -1
  309. package/dist/split-button.esm.js +1 -1
  310. package/dist/splitter.cjs.js +1 -1
  311. package/dist/splitter.esm.js +1 -1
  312. package/dist/standalone/add-icons.d.ts +2 -0
  313. package/dist/standalone/add-icons.d.ts.map +1 -0
  314. package/dist/standalone/preload.d.ts +2 -0
  315. package/dist/standalone/preload.d.ts.map +1 -0
  316. package/dist/stepper.cjs.js +3 -3
  317. package/dist/stepper.esm.js +3 -3
  318. package/dist/switch.cjs.js +9 -9
  319. package/dist/switch.esm.js +56 -35
  320. package/dist/table.cjs.js +1 -1
  321. package/dist/table.esm.js +1 -1
  322. package/dist/tabs.cjs.js +14 -14
  323. package/dist/tabs.esm.js +129 -115
  324. package/dist/tags-input.cjs.js +1 -1
  325. package/dist/tags-input.esm.js +1 -1
  326. package/dist/textarea.cjs.js +33 -11
  327. package/dist/textarea.esm.js +74 -35
  328. package/dist/theme.d.ts +6 -0
  329. package/dist/theme.d.ts.map +1 -1
  330. package/dist/time-field.cjs.js +1 -1
  331. package/dist/time-field.esm.js +2 -2
  332. package/dist/time-picker.cjs.js +1 -1
  333. package/dist/time-picker.esm.js +3 -3
  334. package/dist/timeline.cjs.js +2 -2
  335. package/dist/timeline.esm.js +2 -2
  336. package/dist/toast.cjs.js +4 -4
  337. package/dist/toast.esm.js +17 -16
  338. package/dist/toggle-group.cjs.js +1 -1
  339. package/dist/toggle-group.esm.js +1 -1
  340. package/dist/toggle.cjs.js +3 -3
  341. package/dist/toggle.esm.js +9 -9
  342. package/dist/toolbar.cjs.js +1 -1
  343. package/dist/toolbar.esm.js +1 -1
  344. package/dist/tooltip.cjs.js +2 -2
  345. package/dist/tooltip.esm.js +12 -14
  346. package/dist/transfer-list.cjs.js +1 -1
  347. package/dist/transfer-list.esm.js +1 -1
  348. package/dist/{tree-33fVNnaf.mjs → tree-CD2k2lIC.mjs} +1 -1
  349. package/dist/{tree-Dc02MChE.js → tree-ChQfhxya.js} +1 -1
  350. package/dist/tree-item.cjs.js +1 -1
  351. package/dist/tree-item.esm.js +1 -1
  352. package/dist/tree.cjs.js +1 -1
  353. package/dist/tree.esm.js +1 -1
  354. package/dist/visually-hidden.cjs.js +1 -1
  355. package/dist/visually-hidden.esm.js +1 -1
  356. package/dist/wizard.cjs.js +4 -4
  357. package/dist/wizard.esm.js +4 -4
  358. package/package.json +3 -2
  359. package/dist/focus-scope-Bwug2gDv.js +0 -1
  360. package/dist/focus-scope-CmEsG5UZ.mjs +0 -138
  361. package/dist/runtime-DYSIU3sR.js +0 -5
  362. package/dist/ui-button-C3OmI7Sn.mjs +0 -684
  363. package/dist/ui-button-CnLwXBnx.js +0 -520
  364. package/dist/ui-icon-D3avtxX_.js +0 -207
  365. package/dist/ui-icon-DLhB08Fo.mjs +0 -361
@@ -1,13 +1,14 @@
1
- import { E } from "./ElementBase-BeZT54Hj.mjs";
2
- import { b as k } from "./portal-DeaM1tYY.mjs";
3
- import { d as L } from "./collection-C7URGjEI.mjs";
4
- import { c as I } from "./dismissable-layer-BmPIoK80.mjs";
5
- import { r as g, s as v, f as C, m as y, g as x } from "./roving-focus-group-Dbm1Jko_.mjs";
6
- import { e as T } from "./positioner-BE8Nbho2.mjs";
7
- import { O as D, o as z, r as O, a as B } from "./overlay-motion-BX3dPLay.mjs";
1
+ import { E } from "./ElementBase-D5QsC5Vw.mjs";
2
+ import { h as k, r as L } from "./clone-source-BxK2pEVw.mjs";
3
+ import { b as I } from "./portal-DeaM1tYY.mjs";
4
+ import { d as C } from "./collection-C7URGjEI.mjs";
5
+ import { c as T } from "./dismissable-layer-BmPIoK80.mjs";
6
+ import { r as g, s as v, f as D, m as y, g as x } from "./roving-focus-group-Dbm1Jko_.mjs";
7
+ import { e as z } from "./positioner-BE8Nbho2.mjs";
8
+ import { O, o as B, r as F, a as R } from "./overlay-motion-BX3dPLay.mjs";
8
9
  import "./listbox-hMVOhKHC.mjs";
9
- import { c as F } from "./menu-item-styles-CdqxPUuw.mjs";
10
- const R = ":scope > .submenu", M = [
10
+ import { c as M } from "./menu-item-styles-CdqxPUuw.mjs";
11
+ const $ = ":scope > .submenu", H = [
11
12
  "--ui-color-primary",
12
13
  "--ui-color-primary-hover",
13
14
  "--ui-color-foreground-on-primary",
@@ -42,7 +43,7 @@ const R = ":scope > .submenu", M = [
42
43
  "--accent-surface",
43
44
  "--accent-indicator",
44
45
  "--accent-track"
45
- ], $ = [
46
+ ], q = [
46
47
  { prefix: "--accent-", from: 1, to: 12 },
47
48
  { prefix: "--accent-a", from: 1, to: 12 },
48
49
  { prefix: "--gray-", from: 1, to: 12 },
@@ -52,13 +53,13 @@ const R = ":scope > .submenu", M = [
52
53
  { prefix: "--shadow-", from: 1, to: 6 },
53
54
  { prefix: "--radius-", from: 1, to: 6 }
54
55
  ];
55
- function H(n) {
56
+ function N(n) {
56
57
  return n === "sm" || n === "1" || n === "compact" ? "sm" : n === "lg" || n === "3" || n === "comfortable" ? "lg" : "md";
57
58
  }
58
59
  function S(n) {
59
60
  return !n || n === "default" ? null : n === "none" || n === "square" ? "0px" : n === "sm" ? "8px" : n === "md" || n === "soft" ? "12px" : n === "lg" ? "16px" : n === "full" ? "999px" : /^\d+(\.\d+)?$/.test(n) ? `${n}px` : /^\d+(\.\d+)?(px|rem|em|%)$/.test(n) ? n : null;
60
61
  }
61
- const q = `
62
+ const V = `
62
63
  :host {
63
64
  --ui-menubar-gap: var(--base-menubar-gap, 6px);
64
65
  --ui-menubar-padding: var(--base-menubar-padding, 6px);
@@ -138,7 +139,7 @@ const q = `
138
139
  --ui-menubar-item-hover-bg: color-mix(in srgb, #ffffff 16%, transparent);
139
140
  --ui-menubar-item-active-bg: color-mix(in srgb, #ffffff 20%, transparent);
140
141
  --ui-menubar-item-active-color: #ffffff;
141
- --ui-menubar-ring: #93c5fd;
142
+ --ui-menubar-ring: var(--ui-color-accent-on-dark, #93c5fd);
142
143
  border-color: #334155;
143
144
  }
144
145
 
@@ -264,8 +265,8 @@ const q = `
264
265
  border-color: Highlight;
265
266
  }
266
267
  }
267
- `, N = `
268
- ${D}
268
+ `, K = `
269
+ ${O}
269
270
 
270
271
  .ui-menubar-portal {
271
272
  position: absolute;
@@ -366,7 +367,7 @@ const q = `
366
367
  0 6px 18px rgba(2, 6, 23, 0.14);
367
368
  }
368
369
 
369
- ${F({
370
+ ${M({
370
371
  scopes: [".ui-menubar-portal .content-host"],
371
372
  prefix: "--ui-menubar-panel",
372
373
  shortcutSelectors: [".shortcut", ".meta"],
@@ -492,11 +493,11 @@ const q = `
492
493
  }
493
494
  }
494
495
  `;
495
- function V(n) {
496
+ function G(n) {
496
497
  return n === "top" || n === "left" || n === "right" ? n : "bottom";
497
498
  }
498
- function K(n) {
499
- const e = V(n);
499
+ function U(n) {
500
+ const e = G(n);
500
501
  return e === "top" ? "top" : e === "left" ? "left" : e === "right" ? "right" : "bottom";
501
502
  }
502
503
  function f(n, e) {
@@ -533,7 +534,7 @@ function m(n) {
533
534
  function b(n, e) {
534
535
  return n.getAttribute(e) || "";
535
536
  }
536
- class G extends E {
537
+ class j extends E {
537
538
  constructor() {
538
539
  super(), this._items = [], this._contents = [], this._itemSlot = null, this._contentSlot = null, this._uid = Math.random().toString(36).slice(2, 8), this._ignoreSelected = !1, this._open = !1, this._portalEl = null, this._portalSurfaceEl = null, this._portalContentHostEl = null, this._positioner = null, this._dismissableLayer = null, this._panelForIndex = -1, this._typeaheadBuffer = "", this._typeaheadTimer = null, this._submenuRaf = null, this._globalListenersBound = !1, this._focusIndex = -1, this._onClick = this._onClick.bind(this), this._onKeyDown = this._onKeyDown.bind(this), this._onDocKeyDown = this._onDocKeyDown.bind(this), this._onDocScroll = this._onDocScroll.bind(this), this._onSlotChange = this._onSlotChange.bind(this), this._onMouseMove = this._onMouseMove.bind(this), this._onPanelPointerOver = this._onPanelPointerOver.bind(this), this._onPanelPointerLeave = this._onPanelPointerLeave.bind(this), this._onPanelFocusIn = this._onPanelFocusIn.bind(this);
539
540
  }
@@ -582,7 +583,7 @@ class G extends E {
582
583
  render() {
583
584
  const e = this.getAttribute("orientation") === "vertical" ? "vertical" : "horizontal";
584
585
  this.setContent(`
585
- <style>${q}</style>
586
+ <style>${V}</style>
586
587
  <div class="bar" part="bar" role="menubar" aria-orientation="${e}">
587
588
  <slot name="item"></slot>
588
589
  </div>
@@ -687,7 +688,7 @@ class G extends E {
687
688
  this._globalListenersBound && (document.removeEventListener("keydown", this._onDocKeyDown), document.removeEventListener("scroll", this._onDocScroll, !0), this._globalListenersBound = !1);
688
689
  }
689
690
  _syncStructure() {
690
- this._items = this._itemSlot ? this._itemSlot.assignedElements({ flatten: !0 }) : [], this._contents = this._contentSlot ? this._contentSlot.assignedElements({ flatten: !0 }) : [];
691
+ this._items = this._itemSlot ? this._itemSlot.assignedElements({ flatten: !0 }) : [], this._contents = this._contentSlot ? this._contentSlot.assignedElements({ flatten: !0 }) : [], this._contents.forEach((a) => k(a));
691
692
  const e = this._selectedIndex(), t = g(this._items, {
692
693
  activeIndex: this._focusIndex,
693
694
  selectedIndex: e,
@@ -712,7 +713,7 @@ class G extends E {
712
713
  return this._panelListbox()?.queryEnabledItems({ container: e || this._panelListbox() }) || [];
713
714
  }
714
715
  _submenuFor(e) {
715
- return e.querySelector(R);
716
+ return e.querySelector($);
716
717
  }
717
718
  _setOpenPanelBranch(e, t) {
718
719
  const r = this._panelListbox();
@@ -765,8 +766,8 @@ class G extends E {
765
766
  s.removeAttribute("data-submenu-side"), s.removeAttribute("data-submenu-align");
766
767
  const o = i.style.display, u = i.style.visibility, c = i.style.pointerEvents, d = i.style.opacity, P = i.style.transform;
767
768
  i.style.display = "grid", i.style.visibility = "hidden", i.style.pointerEvents = "none", i.style.opacity = "0", i.style.transform = "none";
768
- const p = s.getBoundingClientRect(), h = i.getBoundingClientRect();
769
- p.right + 4 + h.width > t - 8 && p.left - 4 - h.width >= 8 && s.setAttribute("data-submenu-side", "left"), p.top + h.height > r - 8 && p.bottom - h.height >= 8 && s.setAttribute("data-submenu-align", "up"), i.style.display = o, i.style.visibility = u, i.style.pointerEvents = c, i.style.opacity = d, i.style.transform = P;
769
+ const h = s.getBoundingClientRect(), p = i.getBoundingClientRect();
770
+ h.right + 4 + p.width > t - 8 && h.left - 4 - p.width >= 8 && s.setAttribute("data-submenu-side", "left"), h.top + p.height > r - 8 && h.bottom - p.height >= 8 && s.setAttribute("data-submenu-align", "up"), i.style.display = o, i.style.visibility = u, i.style.pointerEvents = c, i.style.opacity = d, i.style.transform = P;
770
771
  });
771
772
  }
772
773
  _panelListbox() {
@@ -778,7 +779,7 @@ class G extends E {
778
779
  _buildPanelContent(e) {
779
780
  const t = this._contents[e], r = document.createElement("div");
780
781
  r.className = "ui-menubar-portal", r.style.position = "absolute", r.style.pointerEvents = "auto", r.innerHTML = `
781
- <style>${N}</style>
782
+ <style>${K}</style>
782
783
  <div class="surface menu-panel" part="menu" role="menu" aria-hidden="false" aria-busy="false" tabindex="-1">
783
784
  <div class="state-row" part="state"></div>
784
785
  <ui-listbox class="content-host" slot="menu" role="menu" item-selector="${l().replace(/"/g, "&quot;")}" direct-item-selector=":scope > [slot=&quot;menu&quot;] > ${l().replace(/"/g, "&quot;")}" item-role="menuitem" active-attribute="data-active"></ui-listbox>
@@ -787,7 +788,7 @@ class G extends E {
787
788
  const a = r.querySelector("ui-listbox.content-host"), i = r.querySelector(".surface");
788
789
  if (!a || !i) return r;
789
790
  if (i.id = t?.id || `ui-menubar-panel-${this._uid}-${e}`, i.setAttribute("aria-labelledby", this._items[e]?.id || ""), this._applyPanelVariantData(r), this._applyPanelTokens(r), t) {
790
- const s = t.cloneNode(!0);
791
+ const s = L(t.cloneNode(!0));
791
792
  s.setAttribute("slot", "menu"), a.appendChild(s);
792
793
  }
793
794
  if (this._hydratePanelItems(a), a.refresh(), !a.querySelector(l())) {
@@ -819,7 +820,7 @@ class G extends E {
819
820
  }), r.addEventListener("pointerover", this._onPanelPointerOver), r.addEventListener("pointerleave", this._onPanelPointerLeave), r.addEventListener("focusin", this._onPanelFocusIn), r;
820
821
  }
821
822
  _applyPanelVariantData(e) {
822
- const t = b(this, "variant"), r = H(this.getAttribute("size") || this.getAttribute("density")), a = b(this, "density"), i = this.getAttribute("radius"), s = b(this, "shape"), o = b(this, "elevation"), u = b(this, "tone"), c = t === "default" || t === "" ? "" : t === "glass" ? "soft" : t === "line" ? "outline" : t;
823
+ const t = b(this, "variant"), r = N(this.getAttribute("size") || this.getAttribute("density")), a = b(this, "density"), i = this.getAttribute("radius"), s = b(this, "shape"), o = b(this, "elevation"), u = b(this, "tone"), c = t === "default" || t === "" ? "" : t === "glass" ? "soft" : t === "line" ? "outline" : t;
823
824
  c ? e.setAttribute("data-variant", c) : e.removeAttribute("data-variant"), r !== "md" ? e.setAttribute("data-size", r) : e.removeAttribute("data-size"), a && a !== "default" ? e.setAttribute("data-density", a) : e.removeAttribute("data-density"), i ? e.setAttribute("data-radius", i) : e.removeAttribute("data-radius"), s && s !== "default" ? e.setAttribute("data-shape", s) : e.removeAttribute("data-shape"), o && o !== "default" ? e.setAttribute("data-elevation", o) : e.removeAttribute("data-elevation"), u && u !== "default" && u !== "brand" ? e.setAttribute("data-tone", u) : e.removeAttribute("data-tone"), this._open ? e.setAttribute("data-open", "true") : e.removeAttribute("data-open");
824
825
  const d = S(i || s || null);
825
826
  d ? (e.style.setProperty("--ui-menubar-panel-radius", d), e.style.setProperty("--ui-menubar-panel-item-radius", d === "999px" ? "999px" : `calc(${d} - 2px)`)) : (e.style.removeProperty("--ui-menubar-panel-radius"), e.style.removeProperty("--ui-menubar-panel-item-radius"));
@@ -884,10 +885,10 @@ class G extends E {
884
885
  ].forEach((a) => {
885
886
  const i = t.getPropertyValue(a).trim();
886
887
  i ? e.style.setProperty(a, i) : e.style.removeProperty(a);
887
- }), M.forEach((a) => {
888
+ }), H.forEach((a) => {
888
889
  const i = t.getPropertyValue(a).trim();
889
890
  i ? e.style.setProperty(a, i) : e.style.removeProperty(a);
890
- }), $.forEach(({ prefix: a, from: i, to: s }) => {
891
+ }), q.forEach(({ prefix: a, from: i, to: s }) => {
891
892
  for (let o = i; o <= s; o += 1) {
892
893
  const u = `${a}${o}`, c = t.getPropertyValue(u).trim();
893
894
  c ? e.style.setProperty(u, c) : e.style.removeProperty(u);
@@ -913,30 +914,30 @@ class G extends E {
913
914
  this._teardownPanel();
914
915
  const r = this._buildPanelContent(e);
915
916
  this._portalEl = r, this._portalSurfaceEl = r.querySelector(".surface"), this._portalContentHostEl = r.querySelector("ui-listbox.content-host"), this._panelForIndex = e;
916
- const a = k();
917
+ const a = I();
917
918
  if (!a) {
918
919
  this._portalEl = null, this._panelForIndex = -1;
919
920
  return;
920
921
  }
921
- a.appendChild(r), this._positioner = T({
922
+ a.appendChild(r), this._positioner = z({
922
923
  anchor: t,
923
924
  floating: this._panelSurface() || r,
924
- placement: K(this.getAttribute("placement")),
925
+ placement: U(this.getAttribute("placement")),
925
926
  offset: 6,
926
927
  flip: !0,
927
928
  shift: !0,
928
929
  fitViewport: !0,
929
930
  observeScroll: !1
930
- }), this._dismissableLayer = I({
931
+ }), this._dismissableLayer = T({
931
932
  node: this._panelSurface() || r,
932
933
  trigger: t,
933
934
  closeOnEscape: !0,
934
935
  closeOnPointerOutside: !0,
935
936
  onDismiss: () => this.close()
936
- }), z(this._panelSurface() || r);
937
+ }), B(this._panelSurface() || r);
937
938
  }
938
939
  _teardownPanel(e = !1) {
939
- this._dismissableLayer?.destroy(), this._dismissableLayer = null, this._positioner?.destroy(), this._positioner = null, e ? O(this._portalEl) : B(this._portalEl), this._portalEl = null, this._portalSurfaceEl = null, this._portalContentHostEl = null, this._panelForIndex = -1, this._submenuRaf != null && (cancelAnimationFrame(this._submenuRaf), this._submenuRaf = null), this._resetTypeahead();
940
+ this._dismissableLayer?.destroy(), this._dismissableLayer = null, this._positioner?.destroy(), this._positioner = null, e ? F(this._portalEl) : R(this._portalEl), this._portalEl = null, this._portalSurfaceEl = null, this._portalContentHostEl = null, this._panelForIndex = -1, this._submenuRaf != null && (cancelAnimationFrame(this._submenuRaf), this._submenuRaf = null), this._resetTypeahead();
940
941
  }
941
942
  _selectIndex(e, t) {
942
943
  const r = this._selectedIndex(), a = A(e, this._items.length);
@@ -949,7 +950,7 @@ class G extends E {
949
950
  }
950
951
  _focusItem(e) {
951
952
  const t = this._items[e];
952
- t && (this._focusIndex = e, v(this._items, t, { activeAttribute: null }), C(t));
953
+ t && (this._focusIndex = e, v(this._items, t, { activeAttribute: null }), D(t));
953
954
  }
954
955
  _queryPanelItems() {
955
956
  return this._queryPanelItemsIn(this._panelListbox());
@@ -982,7 +983,7 @@ class G extends E {
982
983
  _typeaheadOnBar(e) {
983
984
  if (!this.typeahead || !this._isTypeaheadKey(e)) return !1;
984
985
  this._typeaheadBuffer = `${this._typeaheadBuffer}${e.key.toLowerCase()}`.slice(0, 24), this._typeaheadTimer != null && window.clearTimeout(this._typeaheadTimer), this._typeaheadTimer = window.setTimeout(() => this._resetTypeahead(), 420);
985
- const t = this._items.findIndex((a) => a === e.target || a.contains(e.target)), r = L(this._items, this._typeaheadBuffer, {
986
+ const t = this._items.findIndex((a) => a === e.target || a.contains(e.target)), r = C(this._items, this._typeaheadBuffer, {
986
987
  startIndex: t,
987
988
  getLabel: (a) => a.getAttribute("aria-label") || a.textContent || "",
988
989
  getDisabled: m
@@ -1122,7 +1123,7 @@ class G extends E {
1122
1123
  return !1;
1123
1124
  }
1124
1125
  }
1125
- typeof customElements < "u" && !customElements.get("ui-menubar") && customElements.define("ui-menubar", G);
1126
+ typeof customElements < "u" && !customElements.get("ui-menubar") && customElements.define("ui-menubar", j);
1126
1127
  export {
1127
- G as UIMenubar
1128
+ j as UIMenubar
1128
1129
  };
package/dist/meter.cjs.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const b=require("./ElementBase-DxbvhLJs.js"),f=`
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const b=require("./ElementBase-CbUsP3D6.js"),f=`
2
2
  :host {
3
3
  display: block;
4
4
  width: 100%;
package/dist/meter.esm.js CHANGED
@@ -1,4 +1,4 @@
1
- import { E as h } from "./ElementBase-BeZT54Hj.mjs";
1
+ import { E as h } from "./ElementBase-D5QsC5Vw.mjs";
2
2
  const b = `
3
3
  :host {
4
4
  display: block;
@@ -1,5 +1,5 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const M=require("./ElementBase-DxbvhLJs.js"),O=require("./overlay-motion-B56x1GoY.js"),K=require("./control-name-BmoI1m3a.js"),S=require("./collection-qv8A8rq4.js");require("./listbox-CTpRpuF7.js");let W=0;const j=`
2
- ${O.OVERLAY_MOTION_CSS}
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const W=require("./ElementBase-CbUsP3D6.js"),O=require("./form-control-B90_3kYN.js"),V=require("./overlay-motion-B56x1GoY.js"),j=require("./control-name-BmoI1m3a.js"),C=require("./collection-qv8A8rq4.js");require("./listbox-CTpRpuF7.js");let H=0;const J=`
2
+ ${V.OVERLAY_MOTION_CSS}
3
3
 
4
4
  :host {
5
5
  --ui-multi-select-border-color: var(--ui-color-line, var(--ui-color-border, #cbd5e1));
@@ -468,8 +468,8 @@
468
468
  --ui-multi-select-text: #e2e8f0;
469
469
  --ui-multi-select-muted: #93a4bd;
470
470
  --ui-multi-select-border-color: #334155;
471
- --ui-multi-select-focus: #93c5fd;
472
- --ui-multi-select-chip-bg: color-mix(in srgb, #93c5fd 18%, transparent);
471
+ --ui-multi-select-focus: var(--ui-color-accent-on-dark, #93c5fd);
472
+ --ui-multi-select-chip-bg: color-mix(in srgb, var(--ui-color-accent-on-dark, #93c5fd) 18%, transparent);
473
473
  --ui-multi-select-chip-text: #e2e8f0;
474
474
  }
475
475
 
@@ -535,8 +535,8 @@
535
535
  --ui-multi-select-chip-bg: color-mix(in srgb, var(--ui-color-danger, #dc2626) 12%, transparent);
536
536
  --ui-multi-select-chip-text: var(--ui-color-danger-text, color-mix(in srgb, var(--ui-color-danger, #dc2626) 82%, #0f172a 18%));
537
537
  }
538
- `;function I(r){if(!r)return[];try{const e=JSON.parse(r);if(!Array.isArray(e))return[];const t=[],s=(l,n)=>{const a=String(l.value??"").trim();a&&t.push({value:a,label:String(l.label??a),description:l.description?String(l.description):void 0,disabled:!!l.disabled,group:n})};return e.forEach(l=>{if(!l||typeof l!="object")return;const n=l;if(Array.isArray(n.options)){const a=String(n.label??"").trim();n.options.forEach(c=>{!c||typeof c!="object"||s(c,a||void 0)});return}s(n)}),t}catch{return[]}}function v(r){if(!r)return[];const e=r.trim();if(!e)return[];if(e.startsWith("["))try{const t=JSON.parse(e);if(Array.isArray(t))return t.map(s=>String(s)).filter(Boolean)}catch{}return e.split(",").map(t=>t.trim()).filter(Boolean)}function L(r){return!r||r==="default"?null:r==="none"||r==="square"?"0px":r==="sm"?"8px":r==="md"||r==="soft"?"12px":r==="lg"?"16px":r==="full"?"999px":/^\d+(\.\d+)?$/.test(r)?`${r}px`:/^\d+(\.\d+)?(px|rem|em|%)$/.test(r)?r:null}function H(r){return r==="sm"||r==="1"?"sm":r==="lg"||r==="3"?"lg":"md"}class N extends M.ElementBase{constructor(){super(),this._options=[],this._selected=[],this._query="",this._inputEl=null,this._shellEl=null,this._panelEl=null,this._formUnregister=null,this._outsidePointerDown=null,this._activeValue=null,this._uid=`ui-multi-select-${++W}`,this._isSyncingUi=!1,this._needsSyncUi=!1,this._onInput=this._onInput.bind(this),this._onKeyDown=this._onKeyDown.bind(this),this._onToggle=this._onToggle.bind(this),this._onFocusIn=this._onFocusIn.bind(this),this._onFocusOut=this._onFocusOut.bind(this)}static get observedAttributes(){return["options","value","placeholder","label","aria-label","aria-description","aria-describedby","description","data-error","name","required","disabled","readonly","loading","loading-text","clearable","open","max-selections","render-limit","selection-indicator","option-border","variant","tone","density","shape","size","radius","option-radius","elevation"]}get value(){return[...this._selected]}set value(e){const t=Array.isArray(e)?e.map(s=>String(s)).filter(Boolean):v(String(e??""));this._setSelected(t,"api")}get open(){return this.hasAttribute("open")}set open(e){e?this.setAttribute("open",""):this.removeAttribute("open")}connectedCallback(){super.connectedCallback(),this._registerWithForm()}disconnectedCallback(){this._detachOutsideListener(),this._formUnregister&&(this._formUnregister(),this._formUnregister=null),super.disconnectedCallback()}attributeChangedCallback(e,t,s){if(t!==s&&(e==="options"&&(this._options=I(s)),e==="value"&&(this._selected=v(s)),e==="name"&&this.isConnected&&this._registerWithForm(),!!this._shellEl)){if(e==="variant"||e==="tone"||e==="density"||e==="shape"||e==="size"||e==="radius"||e==="option-radius"||e==="elevation"){this._syncVisualState(),e==="size"&&this._syncUi();return}this._syncUi()}}shouldRenderOnAttributeChange(){return!1}render(){this.setContent(`
539
- <style>${j}</style>
538
+ `;function N(r){if(!r)return[];try{const e=JSON.parse(r);if(!Array.isArray(e))return[];const t=[],s=(l,n)=>{const a=String(l.value??"").trim();a&&t.push({value:a,label:String(l.label??a),description:l.description?String(l.description):void 0,disabled:!!l.disabled,group:n})};return e.forEach(l=>{if(!l||typeof l!="object")return;const n=l;if(Array.isArray(n.options)){const a=String(n.label??"").trim();n.options.forEach(c=>{!c||typeof c!="object"||s(c,a||void 0)});return}s(n)}),t}catch{return[]}}function v(r){if(!r)return[];const e=r.trim();if(!e)return[];if(e.startsWith("["))try{const t=JSON.parse(e);if(Array.isArray(t))return t.map(s=>String(s)).filter(Boolean)}catch{}return e.split(",").map(t=>t.trim()).filter(Boolean)}function D(r){return!r||r==="default"?null:r==="none"||r==="square"?"0px":r==="sm"?"8px":r==="md"||r==="soft"?"12px":r==="lg"?"16px":r==="full"?"999px":/^\d+(\.\d+)?$/.test(r)?`${r}px`:/^\d+(\.\d+)?(px|rem|em|%)$/.test(r)?r:null}function G(r){return r==="sm"||r==="1"?"sm":r==="lg"||r==="3"?"lg":"md"}const q=class q extends W.ElementBase{constructor(){super(),this._formControl=new O.FormControl(this,{getValue:()=>this.value,getValidity:()=>({valueMissing:O.isRequired(this)&&this.value.length===0,message:"Please select at least one item.",anchor:this._inputEl}),defaultAttribute:"value"}),this._options=[],this._selected=[],this._query="",this._inputEl=null,this._shellEl=null,this._panelEl=null,this._formUnregister=null,this._outsidePointerDown=null,this._activeValue=null,this._uid=`ui-multi-select-${++H}`,this._isSyncingUi=!1,this._needsSyncUi=!1,this._onInput=this._onInput.bind(this),this._onKeyDown=this._onKeyDown.bind(this),this._onToggle=this._onToggle.bind(this),this._onFocusIn=this._onFocusIn.bind(this),this._onFocusOut=this._onFocusOut.bind(this)}static get observedAttributes(){return["options","value","placeholder","label","aria-label","aria-description","aria-describedby","description","data-error","name","required","disabled","readonly","loading","loading-text","clearable","open","max-selections","render-limit","selection-indicator","option-border","variant","tone","density","shape","size","radius","option-radius","elevation"]}get value(){return[...this._selected]}set value(e){const t=Array.isArray(e)?e.map(s=>String(s)).filter(Boolean):v(String(e??""));this._setSelected(t,"api")}get open(){return this.hasAttribute("open")}set open(e){e?this.setAttribute("open",""):this.removeAttribute("open")}formResetCallback(){this._formControl.formResetCallback()}formDisabledCallback(e){this._formControl.formDisabledCallback(e)}get form(){return this._formControl.form}connectedCallback(){super.connectedCallback(),this._formControl.connect(),this._registerWithForm()}disconnectedCallback(){this._formControl.disconnect(),this._detachOutsideListener(),this._formUnregister&&(this._formUnregister(),this._formUnregister=null),super.disconnectedCallback()}attributeChangedCallback(e,t,s){if(t!==s&&(e==="options"&&(this._options=N(s)),e==="value"&&(this._selected=v(s)),e==="name"&&this.isConnected&&this._registerWithForm(),!!this._shellEl)){if(e==="variant"||e==="tone"||e==="density"||e==="shape"||e==="size"||e==="radius"||e==="option-radius"||e==="elevation"){this._syncVisualState(),e==="size"&&this._syncUi();return}this._syncUi()}}shouldRenderOnAttributeChange(){return!1}render(){this.setContent(`
539
+ <style>${J}</style>
540
540
  <div class="root">
541
541
  <div class="meta" hidden>
542
542
  <div class="label" hidden><span class="label-text" id="${this._uid}-label"></span><span class="required" hidden>*</span></div>
@@ -559,4 +559,4 @@
559
559
  </div>
560
560
  <div class="error" part="error" hidden></div>
561
561
  </div>
562
- `),this._options=I(this.getAttribute("options")),this._selected=v(this.getAttribute("value")),this._shellEl=this.root.querySelector(".shell"),this._inputEl=this.root.querySelector(".input"),this._panelEl=this.root.querySelector(".panel"),this._inputEl?.addEventListener("input",this._onInput),this._inputEl?.addEventListener("keydown",this._onKeyDown),this.root.querySelector(".toggle")?.addEventListener("click",this._onToggle),this.root.querySelector(".clear")?.addEventListener("click",()=>this._clearSelection("clear-button")),this._shellEl?.addEventListener("focusin",this._onFocusIn),this._shellEl?.addEventListener("focusout",this._onFocusOut),this._syncVisualState(),this._syncUi()}_syncVisualState(){const e=L(this.getAttribute("radius")||this.getAttribute("shape"));e?this.style.setProperty("--ui-multi-select-radius",e):this.style.removeProperty("--ui-multi-select-radius");const t=L(this.getAttribute("option-radius"));t?this.style.setProperty("--ui-multi-select-option-radius",t):this.style.removeProperty("--ui-multi-select-option-radius");const s=H(this.getAttribute("size"));this.setAttribute("data-size",s)}_selectionIndicator(){const e=(this.getAttribute("selection-indicator")||"checkbox").trim().toLowerCase();return e==="none"||e==="check"?e:"checkbox"}_isInteractionLocked(){return this.hasAttribute("disabled")||this.hasAttribute("readonly")}_attachOutsideListener(){this._outsidePointerDown||typeof document>"u"||(this._outsidePointerDown=e=>{const t=e.composedPath();t.includes(this)||t.includes(this.root)||this._panelEl&&t.includes(this._panelEl)||this._inputEl&&t.includes(this._inputEl)||(this.open=!1,this._syncUi())},document.addEventListener("pointerdown",this._outsidePointerDown))}_detachOutsideListener(){!this._outsidePointerDown||typeof document>"u"||(document.removeEventListener("pointerdown",this._outsidePointerDown),this._outsidePointerDown=null)}_filteredOptions(){const e=S.normalizeCollectionText(this._query);return e?this._options.filter(t=>S.normalizeCollectionText(t.label).includes(e)||S.normalizeCollectionText(t.value).includes(e)):this._options}_renderLimit(){const e=Number(this.getAttribute("render-limit"));return Number.isFinite(e)&&e>0?e:200}_findOptionNode(e){return!e||!this._panelEl?null:Array.from(this._panelEl.querySelectorAll(".option")).find(t=>t.getAttribute("data-value")===e)}_selectedOptionRecords(){return this._selected.map(e=>this._options.find(t=>t.value===e)).filter(Boolean)}_emitChange(e,t){this.dispatchEvent(new CustomEvent("change",{detail:{value:[...this._selected],previousValue:t,selectedItems:this._selectedOptionRecords(),source:e},bubbles:!0,composed:!0}))}_setSelected(e,t){const s=Number(this.getAttribute("max-selections")),l=[];e.forEach(c=>{if(!c)return;const p=l.indexOf(c);p>=0&&l.splice(p,1),l.push(c)});const n=Number.isFinite(s)&&s>0?l.slice(-s):l,a=[...this._selected];if(a.length===n.length&&a.every((c,p)=>c===n[p])){this._syncUi();return}this._selected=n,this._selected.length?this.setAttribute("value",JSON.stringify(this._selected)):this.removeAttribute("value"),this._syncUi(),this._emitChange(t,a)}_toggleValue(e,t){if(this._isInteractionLocked()||this.hasAttribute("loading"))return;const l=this._selected.includes(e)?this._selected.filter(n=>n!==e):[...this._selected,e];this._activeValue=e,this._setSelected(l,t)}_removeChip(e){this._isInteractionLocked()||(this._activeValue===e&&(this._activeValue=null),this._toggleValue(e,"remove-chip"))}_clearSelection(e){if(!(this._isInteractionLocked()||!this._selected.length)){this._activeValue=null,this._setSelected([],e),this._query="",this._inputEl&&(this._inputEl.value="");try{this._inputEl?.focus({preventScroll:!0})}catch{this._inputEl?.focus()}}}_registerWithForm(){this._formUnregister&&(this._formUnregister(),this._formUnregister=null);try{const l=this.getRootNode().host?.closest?.("ui-form")||null||this.closest("ui-form"),n=this.getAttribute("name");l&&typeof l.registerField=="function"&&n&&(this._formUnregister=l.registerField(n,{name:n,getValue:()=>[...this._selected],setValue:a=>{Array.isArray(a)?this._setSelected(a.map(c=>String(c)),"form"):this._setSelected(v(String(a??"")),"form")},validate:async()=>this.hasAttribute("required")&&this._selected.length===0?{valid:!1,message:"At least one option is required"}:{valid:!0},setError:a=>{a?this.setAttribute("data-error",a):this.removeAttribute("data-error"),this._syncUi()}}))}catch{}}_onInput(e){this._isInteractionLocked()||(this._query=e.target?.value||"",this.open||(this.open=!0),this._syncUi())}_onKeyDown(e){if(!this._isInteractionLocked()){if(e.key==="ArrowDown"){e.preventDefault(),this.open||(this.open=!0),this._syncUi(),this._panelEl?.getActiveItem()?this._panelEl.move(1,{focus:!1,owner:this._inputEl,scroll:!1}):this._panelEl?.focusBoundary("first",{focus:!1,owner:this._inputEl,scroll:!1});return}if(e.key==="ArrowUp"){e.preventDefault(),this.open||(this.open=!0),this._syncUi(),this._panelEl?.getActiveItem()?this._panelEl.move(-1,{focus:!1,owner:this._inputEl,scroll:!1}):this._panelEl?.focusBoundary("last",{focus:!1,owner:this._inputEl,scroll:!1});return}if(e.key==="Home"){e.preventDefault(),this.open||(this.open=!0),this._syncUi(),this._panelEl?.focusBoundary("first",{focus:!1,owner:this._inputEl,scroll:!1});return}if(e.key==="End"){e.preventDefault(),this.open||(this.open=!0),this._syncUi(),this._panelEl?.focusBoundary("last",{focus:!1,owner:this._inputEl,scroll:!1});return}if(e.key==="Enter"){const t=this._panelEl?.getActiveItem();if(t){e.preventDefault();const s=t.getAttribute("data-value");s&&(this._activeValue=s,this._toggleValue(s,"keyboard"),this._query="",this._inputEl&&(this._inputEl.value=""),this._inputEl?.focus())}return}if(e.key==="Escape"){e.preventDefault(),this._query?(this._query="",this._inputEl&&(this._inputEl.value="")):this.open=!1,this._syncUi();return}if(e.key==="Tab"){this.open=!1,this._syncUi();return}e.key==="Backspace"&&!this._query&&this._selected.length&&this._removeChip(this._selected[this._selected.length-1])}}_onToggle(){this._isInteractionLocked()||(this.open=!this.open,this._syncUi(),this.open&&this._inputEl?.focus())}_onFocusIn(){this._isInteractionLocked()||(this.open=!0),this._syncUi()}_onFocusOut(e){this._shellEl?.contains(e.relatedTarget)||(this.open=!1,this._syncUi())}_syncUi(){if(this._isSyncingUi){this._needsSyncUi=!0;return}if(!(!this._shellEl||!this._inputEl||!this._panelEl)){this._isSyncingUi=!0;try{const e=(this.getAttribute("label")||"").trim(),t=(this.getAttribute("description")||"").trim(),s=(this.getAttribute("data-error")||"").trim(),l=this.root.querySelector(".meta"),n=this.root.querySelector(".label"),a=this.root.querySelector(".label-text"),c=this.root.querySelector(".required"),p=this.root.querySelector(".description"),D=this.root.querySelector(".chips"),C=this.root.querySelector(".toggle"),q=this.root.querySelector(".clear"),x=this.root.querySelector(".error"),U=this._selectionIndicator(),_=this.hasAttribute("loading"),V=(this.getAttribute("loading-text")||"Loading options...").trim(),m=this.hasAttribute("disabled"),b=this.hasAttribute("readonly"),F=this.hasAttribute("clearable");if(l.hidden=!e&&!t,n.hidden=!e,a.textContent=e,e)this._inputEl.setAttribute("aria-labelledby",`${this._uid}-label`),this._inputEl.removeAttribute("aria-label");else{this._inputEl.removeAttribute("aria-labelledby");const i=(this.getAttribute("aria-label")||"").trim();i?this._inputEl.setAttribute("aria-label",i):this._inputEl.removeAttribute("aria-label")}c.hidden=!this.hasAttribute("required"),p.hidden=!t,p.textContent=t,x.hidden=!s,x.textContent=s,x.id=`${this._uid}-error`,K.syncControlDescription(this._inputEl,this,this._uid,[t?`${this._uid}-description`:"",s?`${this._uid}-error`:""].filter(Boolean)),this._shellEl.setAttribute("data-open",this.open?"true":"false"),this._shellEl.setAttribute("data-invalid",s?"true":"false"),this._shellEl.setAttribute("data-readonly",b?"true":"false"),m?this._shellEl.setAttribute("aria-disabled","true"):this._shellEl.removeAttribute("aria-disabled"),C.setAttribute("data-open",this.open?"true":"false"),C.disabled=m||b,q.hidden=!F||this._selected.length===0,q.disabled=m||b,this._inputEl.setAttribute("aria-expanded",this.open?"true":"false"),this._inputEl.setAttribute("aria-busy",_?"true":"false"),this._inputEl.placeholder=this._selected.length?"":this.getAttribute("placeholder")||"Select options",this._inputEl.disabled=m,this._inputEl.readOnly=b,this._inputEl.value!==this._query&&(this._inputEl.value=this._query),this.open?this._attachOutsideListener():this._detachOutsideListener(),D.replaceChildren(...this._selectedOptionRecords().map(i=>{const h=document.createElement("span");h.className="chip",h.textContent=i.label;const d=document.createElement("button");return d.type="button",d.className="chip-remove",d.setAttribute("data-value",i.value),d.setAttribute("aria-label",`Remove ${i.label}`),d.textContent="×",d.disabled=this.hasAttribute("disabled"),d.addEventListener("pointerdown",o=>{o.preventDefault()}),d.addEventListener("click",o=>{o.preventDefault(),o.stopPropagation(),this._removeChip(i.value),this._inputEl?.focus()}),h.append(d),h}));const y=this._filteredOptions(),$=this._renderLimit(),E=y.slice(0,$),B=y.length>E.length;if(O.setPanelOpen(this._panelEl,this.open,"bottom"),_?this._panelEl.setAttribute("aria-busy","true"):this._panelEl.removeAttribute("aria-busy"),_){const i=document.createElement("div");i.className="status",i.textContent=V,this._panelEl.replaceChildren(i),this._inputEl.removeAttribute("aria-activedescendant");return}if(!y.length){const i=document.createElement("div");i.className="status",i.setAttribute("role","option"),i.setAttribute("aria-disabled","true"),i.setAttribute("aria-selected","false"),i.textContent="No matching options",this._panelEl.replaceChildren(i),this._inputEl.removeAttribute("aria-activedescendant");return}const P=new Set(this._selected),T=this._panelEl.getActiveItem()?.getAttribute("data-value"),g=[];let A=null;if(E.forEach((i,h)=>{if(i.group&&i.group!==A){const u=document.createElement("div");u.className="group",u.setAttribute("role","presentation"),u.textContent=i.group,g.push(u),A=i.group}else i.group||(A=null);const d=P.has(i.value),o=document.createElement("button");o.className="option",o.type="button",o.id=`${this._uid}-option-${h}`,o.setAttribute("role","option"),o.setAttribute("data-value",i.value),o.setAttribute("data-selected",String(d)),o.setAttribute("data-indicator",U),o.setAttribute("aria-selected",d?"true":"false"),(i.disabled||m||b)&&(o.disabled=!0),o.addEventListener("pointerdown",u=>{u.preventDefault()}),o.addEventListener("click",u=>{u.preventDefault(),!i.disabled&&(this._activeValue=i.value,this._toggleValue(i.value,"option"),this._query="",this._inputEl&&(this._inputEl.value=""),this._inputEl?.focus())});const f=document.createElement("div");f.className="option-text";const z=document.createElement("span");if(z.className="option-label",z.textContent=i.label,f.append(z),i.description){const u=document.createElement("span");u.className="option-description",u.textContent=i.description,f.append(u)}if(U!=="none"){const u=document.createElement("span");u.className="check",u.textContent=d?"✓":"",o.append(u)}o.append(f),g.push(o)}),B){const i=document.createElement("div");i.className="status",i.textContent=`Showing first ${E.length} results. Keep typing to narrow the list.`,g.push(i)}this._panelEl.replaceChildren(...g);const R=T||this._activeValue||this._selected[this._selected.length-1]||null,k=this._findOptionNode(R),w=k&&!k.hasAttribute("disabled")?this._panelEl.setActiveItem(k,{focus:!1,owner:this._inputEl,scroll:!1}):(this._panelEl.clearActive(),null);this._activeValue=w?.getAttribute("data-value")||null,w?.id?this._inputEl.setAttribute("aria-activedescendant",w.id):this._inputEl.removeAttribute("aria-activedescendant")}finally{this._isSyncingUi=!1,this._needsSyncUi&&(this._needsSyncUi=!1,this._syncUi())}}}}typeof customElements<"u"&&!customElements.get("ui-multi-select")&&customElements.define("ui-multi-select",N);exports.UIMultiSelect=N;
562
+ `),this._options=N(this.getAttribute("options")),this._selected=v(this.getAttribute("value")),this._shellEl=this.root.querySelector(".shell"),this._inputEl=this.root.querySelector(".input"),this._panelEl=this.root.querySelector(".panel"),this._inputEl?.addEventListener("input",this._onInput),this._inputEl?.addEventListener("keydown",this._onKeyDown),this.root.querySelector(".toggle")?.addEventListener("click",this._onToggle),this.root.querySelector(".clear")?.addEventListener("click",()=>this._clearSelection("clear-button")),this._shellEl?.addEventListener("focusin",this._onFocusIn),this._shellEl?.addEventListener("focusout",this._onFocusOut),this._syncVisualState(),this._syncUi()}_syncVisualState(){const e=D(this.getAttribute("radius")||this.getAttribute("shape"));e?this.style.setProperty("--ui-multi-select-radius",e):this.style.removeProperty("--ui-multi-select-radius");const t=D(this.getAttribute("option-radius"));t?this.style.setProperty("--ui-multi-select-option-radius",t):this.style.removeProperty("--ui-multi-select-option-radius");const s=G(this.getAttribute("size"));this.setAttribute("data-size",s)}_selectionIndicator(){const e=(this.getAttribute("selection-indicator")||"checkbox").trim().toLowerCase();return e==="none"||e==="check"?e:"checkbox"}_isInteractionLocked(){return this.hasAttribute("disabled")||this.hasAttribute("readonly")}_attachOutsideListener(){this._outsidePointerDown||typeof document>"u"||(this._outsidePointerDown=e=>{const t=e.composedPath();t.includes(this)||t.includes(this.root)||this._panelEl&&t.includes(this._panelEl)||this._inputEl&&t.includes(this._inputEl)||(this.open=!1,this._syncUi())},document.addEventListener("pointerdown",this._outsidePointerDown))}_detachOutsideListener(){!this._outsidePointerDown||typeof document>"u"||(document.removeEventListener("pointerdown",this._outsidePointerDown),this._outsidePointerDown=null)}_filteredOptions(){const e=C.normalizeCollectionText(this._query);return e?this._options.filter(t=>C.normalizeCollectionText(t.label).includes(e)||C.normalizeCollectionText(t.value).includes(e)):this._options}_renderLimit(){const e=Number(this.getAttribute("render-limit"));return Number.isFinite(e)&&e>0?e:200}_findOptionNode(e){return!e||!this._panelEl?null:Array.from(this._panelEl.querySelectorAll(".option")).find(t=>t.getAttribute("data-value")===e)}_selectedOptionRecords(){return this._selected.map(e=>this._options.find(t=>t.value===e)).filter(Boolean)}_emitChange(e,t){this.dispatchEvent(new CustomEvent("change",{detail:{value:[...this._selected],previousValue:t,selectedItems:this._selectedOptionRecords(),source:e},bubbles:!0,composed:!0}))}_setSelected(e,t){const s=Number(this.getAttribute("max-selections")),l=[];e.forEach(c=>{if(!c)return;const p=l.indexOf(c);p>=0&&l.splice(p,1),l.push(c)});const n=Number.isFinite(s)&&s>0?l.slice(-s):l,a=[...this._selected];if(a.length===n.length&&a.every((c,p)=>c===n[p])){this._syncUi();return}this._selected=n,this._selected.length?this.setAttribute("value",JSON.stringify(this._selected)):this.removeAttribute("value"),this._syncUi(),this._emitChange(t,a)}_toggleValue(e,t){if(this._isInteractionLocked()||this.hasAttribute("loading"))return;const l=this._selected.includes(e)?this._selected.filter(n=>n!==e):[...this._selected,e];this._activeValue=e,this._setSelected(l,t)}_removeChip(e){this._isInteractionLocked()||(this._activeValue===e&&(this._activeValue=null),this._toggleValue(e,"remove-chip"))}_clearSelection(e){if(!(this._isInteractionLocked()||!this._selected.length)){this._activeValue=null,this._setSelected([],e),this._query="",this._inputEl&&(this._inputEl.value="");try{this._inputEl?.focus({preventScroll:!0})}catch{this._inputEl?.focus()}}}_registerWithForm(){this._formUnregister&&(this._formUnregister(),this._formUnregister=null);try{const l=this.getRootNode().host?.closest?.("ui-form")||null||this.closest("ui-form"),n=this.getAttribute("name");l&&typeof l.registerField=="function"&&n&&(this._formUnregister=l.registerField(n,{name:n,getValue:()=>[...this._selected],setValue:a=>{Array.isArray(a)?this._setSelected(a.map(c=>String(c)),"form"):this._setSelected(v(String(a??"")),"form")},validate:async()=>this.hasAttribute("required")&&this._selected.length===0?{valid:!1,message:"At least one option is required"}:{valid:!0},setError:a=>{a?this.setAttribute("data-error",a):this.removeAttribute("data-error"),this._syncUi()}}))}catch{}}_onInput(e){this._isInteractionLocked()||(this._query=e.target?.value||"",this.open||(this.open=!0),this._syncUi())}_onKeyDown(e){if(!this._isInteractionLocked()){if(e.key==="ArrowDown"){e.preventDefault(),this.open||(this.open=!0),this._syncUi(),this._panelEl?.getActiveItem()?this._panelEl.move(1,{focus:!1,owner:this._inputEl,scroll:!1}):this._panelEl?.focusBoundary("first",{focus:!1,owner:this._inputEl,scroll:!1});return}if(e.key==="ArrowUp"){e.preventDefault(),this.open||(this.open=!0),this._syncUi(),this._panelEl?.getActiveItem()?this._panelEl.move(-1,{focus:!1,owner:this._inputEl,scroll:!1}):this._panelEl?.focusBoundary("last",{focus:!1,owner:this._inputEl,scroll:!1});return}if(e.key==="Home"){e.preventDefault(),this.open||(this.open=!0),this._syncUi(),this._panelEl?.focusBoundary("first",{focus:!1,owner:this._inputEl,scroll:!1});return}if(e.key==="End"){e.preventDefault(),this.open||(this.open=!0),this._syncUi(),this._panelEl?.focusBoundary("last",{focus:!1,owner:this._inputEl,scroll:!1});return}if(e.key==="Enter"){const t=this._panelEl?.getActiveItem();if(t){e.preventDefault();const s=t.getAttribute("data-value");s&&(this._activeValue=s,this._toggleValue(s,"keyboard"),this._query="",this._inputEl&&(this._inputEl.value=""),this._inputEl?.focus())}return}if(e.key==="Escape"){e.preventDefault(),this._query?(this._query="",this._inputEl&&(this._inputEl.value="")):this.open=!1,this._syncUi();return}if(e.key==="Tab"){this.open=!1,this._syncUi();return}e.key==="Backspace"&&!this._query&&this._selected.length&&this._removeChip(this._selected[this._selected.length-1])}}_onToggle(){this._isInteractionLocked()||(this.open=!this.open,this._syncUi(),this.open&&this._inputEl?.focus())}_onFocusIn(){this._isInteractionLocked()||(this.open=!0),this._syncUi()}_onFocusOut(e){this._shellEl?.contains(e.relatedTarget)||(this.open=!1,this._syncUi())}_syncUi(){if(this._isSyncingUi){this._needsSyncUi=!0;return}if(!(!this._shellEl||!this._inputEl||!this._panelEl)){this._isSyncingUi=!0;try{const e=(this.getAttribute("label")||"").trim(),t=(this.getAttribute("description")||"").trim(),s=(this.getAttribute("data-error")||"").trim(),l=this.root.querySelector(".meta"),n=this.root.querySelector(".label"),a=this.root.querySelector(".label-text"),c=this.root.querySelector(".required"),p=this.root.querySelector(".description"),F=this.root.querySelector(".chips"),U=this.root.querySelector(".toggle"),I=this.root.querySelector(".clear"),_=this.root.querySelector(".error"),L=this._selectionIndicator(),y=this.hasAttribute("loading"),$=(this.getAttribute("loading-text")||"Loading options...").trim(),m=this.hasAttribute("disabled"),b=this.hasAttribute("readonly"),P=this.hasAttribute("clearable");if(l.hidden=!e&&!t,n.hidden=!e,a.textContent=e,e)this._inputEl.setAttribute("aria-labelledby",`${this._uid}-label`),this._inputEl.removeAttribute("aria-label");else{this._inputEl.removeAttribute("aria-labelledby");const i=(this.getAttribute("aria-label")||"").trim();i?this._inputEl.setAttribute("aria-label",i):this._inputEl.removeAttribute("aria-label")}c.hidden=!this.hasAttribute("required"),p.hidden=!t,p.textContent=t,_.hidden=!s,_.textContent=s,_.id=`${this._uid}-error`,j.syncControlDescription(this._inputEl,this,this._uid,[t?`${this._uid}-description`:"",s?`${this._uid}-error`:""].filter(Boolean)),this._shellEl.setAttribute("data-open",this.open?"true":"false"),this._shellEl.setAttribute("data-invalid",s?"true":"false"),this._shellEl.setAttribute("data-readonly",b?"true":"false"),m?this._shellEl.setAttribute("aria-disabled","true"):this._shellEl.removeAttribute("aria-disabled"),U.setAttribute("data-open",this.open?"true":"false"),U.disabled=m||b,I.hidden=!P||this._selected.length===0,I.disabled=m||b,this._inputEl.setAttribute("aria-expanded",this.open?"true":"false"),this._inputEl.setAttribute("aria-busy",y?"true":"false"),this._inputEl.placeholder=this._selected.length?"":this.getAttribute("placeholder")||"Select options",this._inputEl.disabled=m,this._inputEl.readOnly=b,this._inputEl.value!==this._query&&(this._inputEl.value=this._query),this.open?this._attachOutsideListener():this._detachOutsideListener(),F.replaceChildren(...this._selectedOptionRecords().map(i=>{const h=document.createElement("span");h.className="chip",h.textContent=i.label;const d=document.createElement("button");return d.type="button",d.className="chip-remove",d.setAttribute("data-value",i.value),d.setAttribute("aria-label",`Remove ${i.label}`),d.textContent="×",d.disabled=this.hasAttribute("disabled"),d.addEventListener("pointerdown",o=>{o.preventDefault()}),d.addEventListener("click",o=>{o.preventDefault(),o.stopPropagation(),this._removeChip(i.value),this._inputEl?.focus()}),h.append(d),h}));const E=this._filteredOptions(),B=this._renderLimit(),A=E.slice(0,B),T=E.length>A.length;if(V.setPanelOpen(this._panelEl,this.open,"bottom"),y?this._panelEl.setAttribute("aria-busy","true"):this._panelEl.removeAttribute("aria-busy"),y){const i=document.createElement("div");i.className="status",i.textContent=$,this._panelEl.replaceChildren(i),this._inputEl.removeAttribute("aria-activedescendant");return}if(!E.length){const i=document.createElement("div");i.className="status",i.setAttribute("role","option"),i.setAttribute("aria-disabled","true"),i.setAttribute("aria-selected","false"),i.textContent="No matching options",this._panelEl.replaceChildren(i),this._inputEl.removeAttribute("aria-activedescendant");return}const R=new Set(this._selected),M=this._panelEl.getActiveItem()?.getAttribute("data-value"),g=[];let k=null;if(A.forEach((i,h)=>{if(i.group&&i.group!==k){const u=document.createElement("div");u.className="group",u.setAttribute("role","presentation"),u.textContent=i.group,g.push(u),k=i.group}else i.group||(k=null);const d=R.has(i.value),o=document.createElement("button");o.className="option",o.type="button",o.id=`${this._uid}-option-${h}`,o.setAttribute("role","option"),o.setAttribute("data-value",i.value),o.setAttribute("data-selected",String(d)),o.setAttribute("data-indicator",L),o.setAttribute("aria-selected",d?"true":"false"),(i.disabled||m||b)&&(o.disabled=!0),o.addEventListener("pointerdown",u=>{u.preventDefault()}),o.addEventListener("click",u=>{u.preventDefault(),!i.disabled&&(this._activeValue=i.value,this._toggleValue(i.value,"option"),this._query="",this._inputEl&&(this._inputEl.value=""),this._inputEl?.focus())});const f=document.createElement("div");f.className="option-text";const S=document.createElement("span");if(S.className="option-label",S.textContent=i.label,f.append(S),i.description){const u=document.createElement("span");u.className="option-description",u.textContent=i.description,f.append(u)}if(L!=="none"){const u=document.createElement("span");u.className="check",u.textContent=d?"✓":"",o.append(u)}o.append(f),g.push(o)}),T){const i=document.createElement("div");i.className="status",i.textContent=`Showing first ${A.length} results. Keep typing to narrow the list.`,g.push(i)}this._panelEl.replaceChildren(...g);const K=M||this._activeValue||this._selected[this._selected.length-1]||null,w=this._findOptionNode(K),z=w&&!w.hasAttribute("disabled")?this._panelEl.setActiveItem(w,{focus:!1,owner:this._inputEl,scroll:!1}):(this._panelEl.clearActive(),null);this._activeValue=z?.getAttribute("data-value")||null,z?.id?this._inputEl.setAttribute("aria-activedescendant",z.id):this._inputEl.removeAttribute("aria-activedescendant")}finally{this._isSyncingUi=!1,this._needsSyncUi&&(this._needsSyncUi=!1,this._syncUi())}}}};q.formAssociated=!0;let x=q;typeof customElements<"u"&&!customElements.get("ui-multi-select")&&customElements.define("ui-multi-select",x);exports.UIMultiSelect=x;
@@ -1,11 +1,12 @@
1
- import { E as T } from "./ElementBase-BeZT54Hj.mjs";
2
- import { O as R, s as K } from "./overlay-motion-BX3dPLay.mjs";
1
+ import { E as K } from "./ElementBase-D5QsC5Vw.mjs";
2
+ import { F as W, i as H } from "./form-control-D9wWUMBl.mjs";
3
+ import { O as j, s as J } from "./overlay-motion-BX3dPLay.mjs";
3
4
  import { a as M } from "./control-name-Bpj7F34X.mjs";
4
5
  import { n as S } from "./collection-C7URGjEI.mjs";
5
6
  import "./listbox-hMVOhKHC.mjs";
6
- let W = 0;
7
- const H = `
8
- ${R}
7
+ let G = 0;
8
+ const Y = `
9
+ ${j}
9
10
 
10
11
  :host {
11
12
  --ui-multi-select-border-color: var(--ui-color-line, var(--ui-color-border, #cbd5e1));
@@ -474,8 +475,8 @@ const H = `
474
475
  --ui-multi-select-text: #e2e8f0;
475
476
  --ui-multi-select-muted: #93a4bd;
476
477
  --ui-multi-select-border-color: #334155;
477
- --ui-multi-select-focus: #93c5fd;
478
- --ui-multi-select-chip-bg: color-mix(in srgb, #93c5fd 18%, transparent);
478
+ --ui-multi-select-focus: var(--ui-color-accent-on-dark, #93c5fd);
479
+ --ui-multi-select-chip-bg: color-mix(in srgb, var(--ui-color-accent-on-dark, #93c5fd) 18%, transparent);
479
480
  --ui-multi-select-chip-text: #e2e8f0;
480
481
  }
481
482
 
@@ -542,7 +543,7 @@ const H = `
542
543
  --ui-multi-select-chip-text: var(--ui-color-danger-text, color-mix(in srgb, var(--ui-color-danger, #dc2626) 82%, #0f172a 18%));
543
544
  }
544
545
  `;
545
- function q(r) {
546
+ function O(r) {
546
547
  if (!r) return [];
547
548
  try {
548
549
  const e = JSON.parse(r);
@@ -585,15 +586,23 @@ function v(r) {
585
586
  }
586
587
  return e.split(",").map((t) => t.trim()).filter(Boolean);
587
588
  }
588
- function L(r) {
589
+ function N(r) {
589
590
  return !r || r === "default" ? null : r === "none" || r === "square" ? "0px" : r === "sm" ? "8px" : r === "md" || r === "soft" ? "12px" : r === "lg" ? "16px" : r === "full" ? "999px" : /^\d+(\.\d+)?$/.test(r) ? `${r}px` : /^\d+(\.\d+)?(px|rem|em|%)$/.test(r) ? r : null;
590
591
  }
591
- function j(r) {
592
+ function Q(r) {
592
593
  return r === "sm" || r === "1" ? "sm" : r === "lg" || r === "3" ? "lg" : "md";
593
594
  }
594
- class J extends T {
595
+ const q = class q extends K {
595
596
  constructor() {
596
- super(), this._options = [], this._selected = [], this._query = "", this._inputEl = null, this._shellEl = null, this._panelEl = null, this._formUnregister = null, this._outsidePointerDown = null, this._activeValue = null, this._uid = `ui-multi-select-${++W}`, this._isSyncingUi = !1, this._needsSyncUi = !1, this._onInput = this._onInput.bind(this), this._onKeyDown = this._onKeyDown.bind(this), this._onToggle = this._onToggle.bind(this), this._onFocusIn = this._onFocusIn.bind(this), this._onFocusOut = this._onFocusOut.bind(this);
597
+ super(), this._formControl = new W(this, {
598
+ getValue: () => this.value,
599
+ getValidity: () => ({
600
+ valueMissing: H(this) && this.value.length === 0,
601
+ message: "Please select at least one item.",
602
+ anchor: this._inputEl
603
+ }),
604
+ defaultAttribute: "value"
605
+ }), this._options = [], this._selected = [], this._query = "", this._inputEl = null, this._shellEl = null, this._panelEl = null, this._formUnregister = null, this._outsidePointerDown = null, this._activeValue = null, this._uid = `ui-multi-select-${++G}`, this._isSyncingUi = !1, this._needsSyncUi = !1, this._onInput = this._onInput.bind(this), this._onKeyDown = this._onKeyDown.bind(this), this._onToggle = this._onToggle.bind(this), this._onFocusIn = this._onFocusIn.bind(this), this._onFocusOut = this._onFocusOut.bind(this);
597
606
  }
598
607
  static get observedAttributes() {
599
608
  return [
@@ -641,14 +650,24 @@ class J extends T {
641
650
  set open(e) {
642
651
  e ? this.setAttribute("open", "") : this.removeAttribute("open");
643
652
  }
653
+ formResetCallback() {
654
+ this._formControl.formResetCallback();
655
+ }
656
+ formDisabledCallback(e) {
657
+ this._formControl.formDisabledCallback(e);
658
+ }
659
+ /** The `<form>` this field belongs to, if any. */
660
+ get form() {
661
+ return this._formControl.form;
662
+ }
644
663
  connectedCallback() {
645
- super.connectedCallback(), this._registerWithForm();
664
+ super.connectedCallback(), this._formControl.connect(), this._registerWithForm();
646
665
  }
647
666
  disconnectedCallback() {
648
- this._detachOutsideListener(), this._formUnregister && (this._formUnregister(), this._formUnregister = null), super.disconnectedCallback();
667
+ this._formControl.disconnect(), this._detachOutsideListener(), this._formUnregister && (this._formUnregister(), this._formUnregister = null), super.disconnectedCallback();
649
668
  }
650
669
  attributeChangedCallback(e, t, s) {
651
- if (t !== s && (e === "options" && (this._options = q(s)), e === "value" && (this._selected = v(s)), e === "name" && this.isConnected && this._registerWithForm(), !!this._shellEl)) {
670
+ if (t !== s && (e === "options" && (this._options = O(s)), e === "value" && (this._selected = v(s)), e === "name" && this.isConnected && this._registerWithForm(), !!this._shellEl)) {
652
671
  if (e === "variant" || e === "tone" || e === "density" || e === "shape" || e === "size" || e === "radius" || e === "option-radius" || e === "elevation") {
653
672
  this._syncVisualState(), e === "size" && this._syncUi();
654
673
  return;
@@ -661,7 +680,7 @@ class J extends T {
661
680
  }
662
681
  render() {
663
682
  this.setContent(`
664
- <style>${H}</style>
683
+ <style>${Y}</style>
665
684
  <div class="root">
666
685
  <div class="meta" hidden>
667
686
  <div class="label" hidden><span class="label-text" id="${this._uid}-label"></span><span class="required" hidden>*</span></div>
@@ -684,14 +703,14 @@ class J extends T {
684
703
  </div>
685
704
  <div class="error" part="error" hidden></div>
686
705
  </div>
687
- `), this._options = q(this.getAttribute("options")), this._selected = v(this.getAttribute("value")), this._shellEl = this.root.querySelector(".shell"), this._inputEl = this.root.querySelector(".input"), this._panelEl = this.root.querySelector(".panel"), this._inputEl?.addEventListener("input", this._onInput), this._inputEl?.addEventListener("keydown", this._onKeyDown), this.root.querySelector(".toggle")?.addEventListener("click", this._onToggle), this.root.querySelector(".clear")?.addEventListener("click", () => this._clearSelection("clear-button")), this._shellEl?.addEventListener("focusin", this._onFocusIn), this._shellEl?.addEventListener("focusout", this._onFocusOut), this._syncVisualState(), this._syncUi();
706
+ `), this._options = O(this.getAttribute("options")), this._selected = v(this.getAttribute("value")), this._shellEl = this.root.querySelector(".shell"), this._inputEl = this.root.querySelector(".input"), this._panelEl = this.root.querySelector(".panel"), this._inputEl?.addEventListener("input", this._onInput), this._inputEl?.addEventListener("keydown", this._onKeyDown), this.root.querySelector(".toggle")?.addEventListener("click", this._onToggle), this.root.querySelector(".clear")?.addEventListener("click", () => this._clearSelection("clear-button")), this._shellEl?.addEventListener("focusin", this._onFocusIn), this._shellEl?.addEventListener("focusout", this._onFocusOut), this._syncVisualState(), this._syncUi();
688
707
  }
689
708
  _syncVisualState() {
690
- const e = L(this.getAttribute("radius") || this.getAttribute("shape"));
709
+ const e = N(this.getAttribute("radius") || this.getAttribute("shape"));
691
710
  e ? this.style.setProperty("--ui-multi-select-radius", e) : this.style.removeProperty("--ui-multi-select-radius");
692
- const t = L(this.getAttribute("option-radius"));
711
+ const t = N(this.getAttribute("option-radius"));
693
712
  t ? this.style.setProperty("--ui-multi-select-option-radius", t) : this.style.removeProperty("--ui-multi-select-option-radius");
694
- const s = j(this.getAttribute("size"));
713
+ const s = Q(this.getAttribute("size"));
695
714
  this.setAttribute("data-size", s);
696
715
  }
697
716
  _selectionIndicator() {
@@ -846,7 +865,7 @@ class J extends T {
846
865
  if (!(!this._shellEl || !this._inputEl || !this._panelEl)) {
847
866
  this._isSyncingUi = !0;
848
867
  try {
849
- const e = (this.getAttribute("label") || "").trim(), t = (this.getAttribute("description") || "").trim(), s = (this.getAttribute("data-error") || "").trim(), l = this.root.querySelector(".meta"), n = this.root.querySelector(".label"), a = this.root.querySelector(".label-text"), c = this.root.querySelector(".required"), p = this.root.querySelector(".description"), O = this.root.querySelector(".chips"), C = this.root.querySelector(".toggle"), U = this.root.querySelector(".clear"), x = this.root.querySelector(".error"), I = this._selectionIndicator(), _ = this.hasAttribute("loading"), N = (this.getAttribute("loading-text") || "Loading options...").trim(), m = this.hasAttribute("disabled"), b = this.hasAttribute("readonly"), D = this.hasAttribute("clearable");
868
+ const e = (this.getAttribute("label") || "").trim(), t = (this.getAttribute("description") || "").trim(), s = (this.getAttribute("data-error") || "").trim(), l = this.root.querySelector(".meta"), n = this.root.querySelector(".label"), a = this.root.querySelector(".label-text"), c = this.root.querySelector(".required"), p = this.root.querySelector(".description"), D = this.root.querySelector(".chips"), U = this.root.querySelector(".toggle"), I = this.root.querySelector(".clear"), x = this.root.querySelector(".error"), L = this._selectionIndicator(), _ = this.hasAttribute("loading"), V = (this.getAttribute("loading-text") || "Loading options...").trim(), m = this.hasAttribute("disabled"), b = this.hasAttribute("readonly"), F = this.hasAttribute("clearable");
850
869
  if (l.hidden = !e && !t, n.hidden = !e, a.textContent = e, e)
851
870
  this._inputEl.setAttribute("aria-labelledby", `${this._uid}-label`), this._inputEl.removeAttribute("aria-label");
852
871
  else {
@@ -859,7 +878,7 @@ class J extends T {
859
878
  this,
860
879
  this._uid,
861
880
  [t ? `${this._uid}-description` : "", s ? `${this._uid}-error` : ""].filter(Boolean)
862
- ), this._shellEl.setAttribute("data-open", this.open ? "true" : "false"), this._shellEl.setAttribute("data-invalid", s ? "true" : "false"), this._shellEl.setAttribute("data-readonly", b ? "true" : "false"), m ? this._shellEl.setAttribute("aria-disabled", "true") : this._shellEl.removeAttribute("aria-disabled"), C.setAttribute("data-open", this.open ? "true" : "false"), C.disabled = m || b, U.hidden = !D || this._selected.length === 0, U.disabled = m || b, this._inputEl.setAttribute("aria-expanded", this.open ? "true" : "false"), this._inputEl.setAttribute("aria-busy", _ ? "true" : "false"), this._inputEl.placeholder = this._selected.length ? "" : this.getAttribute("placeholder") || "Select options", this._inputEl.disabled = m, this._inputEl.readOnly = b, this._inputEl.value !== this._query && (this._inputEl.value = this._query), this.open ? this._attachOutsideListener() : this._detachOutsideListener(), O.replaceChildren(...this._selectedOptionRecords().map((i) => {
881
+ ), this._shellEl.setAttribute("data-open", this.open ? "true" : "false"), this._shellEl.setAttribute("data-invalid", s ? "true" : "false"), this._shellEl.setAttribute("data-readonly", b ? "true" : "false"), m ? this._shellEl.setAttribute("aria-disabled", "true") : this._shellEl.removeAttribute("aria-disabled"), U.setAttribute("data-open", this.open ? "true" : "false"), U.disabled = m || b, I.hidden = !F || this._selected.length === 0, I.disabled = m || b, this._inputEl.setAttribute("aria-expanded", this.open ? "true" : "false"), this._inputEl.setAttribute("aria-busy", _ ? "true" : "false"), this._inputEl.placeholder = this._selected.length ? "" : this.getAttribute("placeholder") || "Select options", this._inputEl.disabled = m, this._inputEl.readOnly = b, this._inputEl.value !== this._query && (this._inputEl.value = this._query), this.open ? this._attachOutsideListener() : this._detachOutsideListener(), D.replaceChildren(...this._selectedOptionRecords().map((i) => {
863
882
  const h = document.createElement("span");
864
883
  h.className = "chip", h.textContent = i.label;
865
884
  const d = document.createElement("button");
@@ -869,10 +888,10 @@ class J extends T {
869
888
  o.preventDefault(), o.stopPropagation(), this._removeChip(i.value), this._inputEl?.focus();
870
889
  }), h.append(d), h;
871
890
  }));
872
- const y = this._filteredOptions(), V = this._renderLimit(), E = y.slice(0, V), F = y.length > E.length;
873
- if (K(this._panelEl, this.open, "bottom"), _ ? this._panelEl.setAttribute("aria-busy", "true") : this._panelEl.removeAttribute("aria-busy"), _) {
891
+ const y = this._filteredOptions(), $ = this._renderLimit(), E = y.slice(0, $), P = y.length > E.length;
892
+ if (J(this._panelEl, this.open, "bottom"), _ ? this._panelEl.setAttribute("aria-busy", "true") : this._panelEl.removeAttribute("aria-busy"), _) {
874
893
  const i = document.createElement("div");
875
- i.className = "status", i.textContent = N, this._panelEl.replaceChildren(i), this._inputEl.removeAttribute("aria-activedescendant");
894
+ i.className = "status", i.textContent = V, this._panelEl.replaceChildren(i), this._inputEl.removeAttribute("aria-activedescendant");
876
895
  return;
877
896
  }
878
897
  if (!y.length) {
@@ -880,15 +899,15 @@ class J extends T {
880
899
  i.className = "status", i.setAttribute("role", "option"), i.setAttribute("aria-disabled", "true"), i.setAttribute("aria-selected", "false"), i.textContent = "No matching options", this._panelEl.replaceChildren(i), this._inputEl.removeAttribute("aria-activedescendant");
881
900
  return;
882
901
  }
883
- const $ = new Set(this._selected), B = this._panelEl.getActiveItem()?.getAttribute("data-value"), g = [];
902
+ const B = new Set(this._selected), R = this._panelEl.getActiveItem()?.getAttribute("data-value"), g = [];
884
903
  let A = null;
885
904
  if (E.forEach((i, h) => {
886
905
  if (i.group && i.group !== A) {
887
906
  const u = document.createElement("div");
888
907
  u.className = "group", u.setAttribute("role", "presentation"), u.textContent = i.group, g.push(u), A = i.group;
889
908
  } else i.group || (A = null);
890
- const d = $.has(i.value), o = document.createElement("button");
891
- o.className = "option", o.type = "button", o.id = `${this._uid}-option-${h}`, o.setAttribute("role", "option"), o.setAttribute("data-value", i.value), o.setAttribute("data-selected", String(d)), o.setAttribute("data-indicator", I), o.setAttribute("aria-selected", d ? "true" : "false"), (i.disabled || m || b) && (o.disabled = !0), o.addEventListener("pointerdown", (u) => {
909
+ const d = B.has(i.value), o = document.createElement("button");
910
+ o.className = "option", o.type = "button", o.id = `${this._uid}-option-${h}`, o.setAttribute("role", "option"), o.setAttribute("data-value", i.value), o.setAttribute("data-selected", String(d)), o.setAttribute("data-indicator", L), o.setAttribute("aria-selected", d ? "true" : "false"), (i.disabled || m || b) && (o.disabled = !0), o.addEventListener("pointerdown", (u) => {
892
911
  u.preventDefault();
893
912
  }), o.addEventListener("click", (u) => {
894
913
  u.preventDefault(), !i.disabled && (this._activeValue = i.value, this._toggleValue(i.value, "option"), this._query = "", this._inputEl && (this._inputEl.value = ""), this._inputEl?.focus());
@@ -900,25 +919,27 @@ class J extends T {
900
919
  const u = document.createElement("span");
901
920
  u.className = "option-description", u.textContent = i.description, f.append(u);
902
921
  }
903
- if (I !== "none") {
922
+ if (L !== "none") {
904
923
  const u = document.createElement("span");
905
924
  u.className = "check", u.textContent = d ? "✓" : "", o.append(u);
906
925
  }
907
926
  o.append(f), g.push(o);
908
- }), F) {
927
+ }), P) {
909
928
  const i = document.createElement("div");
910
929
  i.className = "status", i.textContent = `Showing first ${E.length} results. Keep typing to narrow the list.`, g.push(i);
911
930
  }
912
931
  this._panelEl.replaceChildren(...g);
913
- const P = B || this._activeValue || this._selected[this._selected.length - 1] || null, k = this._findOptionNode(P), w = k && !k.hasAttribute("disabled") ? this._panelEl.setActiveItem(k, { focus: !1, owner: this._inputEl, scroll: !1 }) : (this._panelEl.clearActive(), null);
932
+ const T = R || this._activeValue || this._selected[this._selected.length - 1] || null, k = this._findOptionNode(T), w = k && !k.hasAttribute("disabled") ? this._panelEl.setActiveItem(k, { focus: !1, owner: this._inputEl, scroll: !1 }) : (this._panelEl.clearActive(), null);
914
933
  this._activeValue = w?.getAttribute("data-value") || null, w?.id ? this._inputEl.setAttribute("aria-activedescendant", w.id) : this._inputEl.removeAttribute("aria-activedescendant");
915
934
  } finally {
916
935
  this._isSyncingUi = !1, this._needsSyncUi && (this._needsSyncUi = !1, this._syncUi());
917
936
  }
918
937
  }
919
938
  }
920
- }
921
- typeof customElements < "u" && !customElements.get("ui-multi-select") && customElements.define("ui-multi-select", J);
939
+ };
940
+ q.formAssociated = !0;
941
+ let C = q;
942
+ typeof customElements < "u" && !customElements.get("ui-multi-select") && customElements.define("ui-multi-select", C);
922
943
  export {
923
- J as UIMultiSelect
944
+ C as UIMultiSelect
924
945
  };
@@ -0,0 +1,18 @@
1
+ function o(e, t) {
2
+ if (t && t !== "_self") return !0;
3
+ if (!e || !("button" in e)) return !1;
4
+ const n = e;
5
+ return n.metaKey || n.ctrlKey || n.shiftKey || n.altKey || (n.button ?? 0) !== 0;
6
+ }
7
+ function u(e, t, n, r = "") {
8
+ if (!t.href || o(n, r.trim())) return !1;
9
+ const i = new CustomEvent("navigate", { detail: t, bubbles: !0, composed: !0, cancelable: !0 });
10
+ return !e.dispatchEvent(i) || e.getAttribute("navigation") === "client";
11
+ }
12
+ function s(e, t) {
13
+ u(e, t) || typeof window < "u" && window.location.assign(t.href);
14
+ }
15
+ export {
16
+ s as n,
17
+ u as r
18
+ };
@@ -0,0 +1 @@
1
+ "use strict";function o(e,t){if(t&&t!=="_self")return!0;if(!e||!("button"in e))return!1;const n=e;return n.metaKey||n.ctrlKey||n.shiftKey||n.altKey||(n.button??0)!==0}function i(e,t,n,r=""){if(!t.href||o(n,r.trim()))return!1;const u=new CustomEvent("navigate",{detail:t,bubbles:!0,composed:!0,cancelable:!0});return!e.dispatchEvent(u)||e.getAttribute("navigation")==="client"}function a(e,t){i(e,t)||typeof window<"u"&&window.location.assign(t.href)}exports.navigateTo=a;exports.requestNavigate=i;
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const f=require("./ElementBase-DxbvhLJs.js"),_=`
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const f=require("./ElementBase-CbUsP3D6.js"),_=`
2
2
  :host {
3
3
  display: block;
4
4
  position: relative;