luxen-ui 0.22.1 → 0.24.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 (481) hide show
  1. package/bin/cli.mjs +1 -1
  2. package/cdn/chunks/decorate.js +1 -1
  3. package/cdn/chunks/decorate.js.map +1 -1
  4. package/cdn/chunks/directive.js.map +1 -1
  5. package/cdn/chunks/floating-ui.dom.js +1 -1
  6. package/cdn/chunks/floating-ui.dom.js.map +1 -1
  7. package/cdn/chunks/iconify-icon.js +1 -1
  8. package/cdn/chunks/iconify-icon.js.map +1 -1
  9. package/cdn/chunks/lit-html.js +1 -1
  10. package/cdn/chunks/lit-html.js.map +1 -1
  11. package/cdn/chunks/lit.js.map +1 -1
  12. package/cdn/chunks/map.js.map +1 -1
  13. package/cdn/chunks/picker.js +2 -2
  14. package/cdn/chunks/picker.js.map +1 -1
  15. package/cdn/chunks/query.js +2 -0
  16. package/cdn/chunks/query.js.map +1 -0
  17. package/cdn/chunks/static-html.js +1 -1
  18. package/cdn/chunks/static-html.js.map +1 -1
  19. package/cdn/chunks/unsafe-html.js.map +1 -1
  20. package/cdn/color-scheme.d.ts.map +1 -1
  21. package/cdn/color-scheme.js +1 -1
  22. package/cdn/color-scheme.js.map +1 -1
  23. package/cdn/custom-elements.json +819 -742
  24. package/cdn/define.d.ts +1 -1
  25. package/cdn/define.js.map +1 -1
  26. package/cdn/elements/alert/alert.d.ts +2 -1
  27. package/cdn/elements/alert/alert.d.ts.map +1 -1
  28. package/cdn/elements/alert/alert.js +1 -1
  29. package/cdn/elements/alert/alert.js.map +1 -1
  30. package/cdn/elements/alert/index.js.map +1 -1
  31. package/cdn/elements/alert-dialog/alert-dialog.d.ts +4 -3
  32. package/cdn/elements/alert-dialog/alert-dialog.d.ts.map +1 -1
  33. package/cdn/elements/alert-dialog/alert-dialog.js +5 -5
  34. package/cdn/elements/alert-dialog/alert-dialog.js.map +1 -1
  35. package/cdn/elements/alert-dialog/index.js.map +1 -1
  36. package/cdn/elements/avatar/avatar.d.ts +2 -2
  37. package/cdn/elements/avatar/avatar.d.ts.map +1 -1
  38. package/cdn/elements/avatar/avatar.js +8 -8
  39. package/cdn/elements/avatar/avatar.js.map +1 -1
  40. package/cdn/elements/avatar/index.js.map +1 -1
  41. package/cdn/elements/badge/badge.d.ts.map +1 -1
  42. package/cdn/elements/badge/badge.js +1 -1
  43. package/cdn/elements/badge/badge.js.map +1 -1
  44. package/cdn/elements/badge/index.js.map +1 -1
  45. package/cdn/elements/button-group/button-group.d.ts.map +1 -1
  46. package/cdn/elements/button-group/button-group.js +1 -1
  47. package/cdn/elements/button-group/button-group.js.map +1 -1
  48. package/cdn/elements/button-group/index.js.map +1 -1
  49. package/cdn/elements/carousel/carousel.d.ts +6 -6
  50. package/cdn/elements/carousel/carousel.d.ts.map +1 -1
  51. package/cdn/elements/carousel/carousel.js +4 -4
  52. package/cdn/elements/carousel/carousel.js.map +1 -1
  53. package/cdn/elements/carousel/index.js.map +1 -1
  54. package/cdn/elements/carousel-item/carousel-item.d.ts +2 -2
  55. package/cdn/elements/carousel-item/carousel-item.d.ts.map +1 -1
  56. package/cdn/elements/carousel-item/carousel-item.js.map +1 -1
  57. package/cdn/elements/carousel-item/index.js.map +1 -1
  58. package/cdn/elements/color-scheme-icon/color-scheme-icon.d.ts +3 -3
  59. package/cdn/elements/color-scheme-icon/color-scheme-icon.d.ts.map +1 -1
  60. package/cdn/elements/color-scheme-icon/color-scheme-icon.js +2 -2
  61. package/cdn/elements/color-scheme-icon/color-scheme-icon.js.map +1 -1
  62. package/cdn/elements/color-scheme-icon/index.js.map +1 -1
  63. package/cdn/elements/combobox/combobox.d.ts +21 -5
  64. package/cdn/elements/combobox/combobox.d.ts.map +1 -1
  65. package/cdn/elements/combobox/combobox.js +42 -38
  66. package/cdn/elements/combobox/combobox.js.map +1 -1
  67. package/cdn/elements/combobox/index.js.map +1 -1
  68. package/cdn/elements/dialog/dialog.d.ts +4 -4
  69. package/cdn/elements/dialog/dialog.d.ts.map +1 -1
  70. package/cdn/elements/dialog/dialog.js +13 -13
  71. package/cdn/elements/dialog/dialog.js.map +1 -1
  72. package/cdn/elements/dialog/dialog.styles.d.ts +1 -1
  73. package/cdn/elements/dialog/dialog.styles.d.ts.map +1 -1
  74. package/cdn/elements/dialog/dialog.styles.js.map +1 -1
  75. package/cdn/elements/dialog/index.js.map +1 -1
  76. package/cdn/elements/divider/divider.d.ts.map +1 -1
  77. package/cdn/elements/divider/divider.js +1 -1
  78. package/cdn/elements/divider/divider.js.map +1 -1
  79. package/cdn/elements/divider/index.js.map +1 -1
  80. package/cdn/elements/drawer/drawer.d.ts +2 -2
  81. package/cdn/elements/drawer/drawer.js +1 -1
  82. package/cdn/elements/drawer/drawer.js.map +1 -1
  83. package/cdn/elements/drawer/index.js.map +1 -1
  84. package/cdn/elements/dropdown/dropdown.d.ts +11 -12
  85. package/cdn/elements/dropdown/dropdown.d.ts.map +1 -1
  86. package/cdn/elements/dropdown/dropdown.js +2 -2
  87. package/cdn/elements/dropdown/dropdown.js.map +1 -1
  88. package/cdn/elements/dropdown/index.js.map +1 -1
  89. package/cdn/elements/dropdown-item/dropdown-item.d.ts +3 -4
  90. package/cdn/elements/dropdown-item/dropdown-item.d.ts.map +1 -1
  91. package/cdn/elements/dropdown-item/dropdown-item.js +5 -5
  92. package/cdn/elements/dropdown-item/dropdown-item.js.map +1 -1
  93. package/cdn/elements/dropdown-item/index.js.map +1 -1
  94. package/cdn/elements/dropdown-label/dropdown-label.d.ts +2 -2
  95. package/cdn/elements/dropdown-label/dropdown-label.d.ts.map +1 -1
  96. package/cdn/elements/dropdown-label/dropdown-label.js +1 -1
  97. package/cdn/elements/dropdown-label/dropdown-label.js.map +1 -1
  98. package/cdn/elements/dropdown-label/index.js.map +1 -1
  99. package/cdn/elements/form-field/form-field.d.ts +2 -1
  100. package/cdn/elements/form-field/form-field.d.ts.map +1 -1
  101. package/cdn/elements/form-field/form-field.js +1 -1
  102. package/cdn/elements/form-field/form-field.js.map +1 -1
  103. package/cdn/elements/form-field/index.js.map +1 -1
  104. package/cdn/elements/icon/icon.d.ts +3 -3
  105. package/cdn/elements/icon/icon.d.ts.map +1 -1
  106. package/cdn/elements/icon/icon.js +1 -1
  107. package/cdn/elements/icon/icon.js.map +1 -1
  108. package/cdn/elements/icon/index.js.map +1 -1
  109. package/cdn/elements/input/input.meta.d.ts +2 -0
  110. package/cdn/elements/input/input.meta.d.ts.map +1 -1
  111. package/cdn/elements/input-group/index.js.map +1 -1
  112. package/cdn/elements/input-group/input-group.d.ts.map +1 -1
  113. package/cdn/elements/input-group/input-group.js +1 -1
  114. package/cdn/elements/input-group/input-group.js.map +1 -1
  115. package/cdn/elements/input-otp/index.js.map +1 -1
  116. package/cdn/elements/input-otp/input-otp.d.ts +3 -3
  117. package/cdn/elements/input-otp/input-otp.d.ts.map +1 -1
  118. package/cdn/elements/input-otp/input-otp.js +1 -1
  119. package/cdn/elements/input-otp/input-otp.js.map +1 -1
  120. package/cdn/elements/input-stepper/index.js.map +1 -1
  121. package/cdn/elements/input-stepper/input-stepper.d.ts.map +1 -1
  122. package/cdn/elements/input-stepper/input-stepper.js +1 -1
  123. package/cdn/elements/input-stepper/input-stepper.js.map +1 -1
  124. package/cdn/elements/popover/index.js.map +1 -1
  125. package/cdn/elements/popover/popover.d.ts +7 -8
  126. package/cdn/elements/popover/popover.d.ts.map +1 -1
  127. package/cdn/elements/popover/popover.js +6 -6
  128. package/cdn/elements/popover/popover.js.map +1 -1
  129. package/cdn/elements/prose-editor/index.js.map +1 -1
  130. package/cdn/elements/prose-editor/prose-editor.d.ts +73 -3
  131. package/cdn/elements/prose-editor/prose-editor.d.ts.map +1 -1
  132. package/cdn/elements/prose-editor/prose-editor.js +56 -71
  133. package/cdn/elements/prose-editor/prose-editor.js.map +1 -1
  134. package/cdn/elements/rating/index.js.map +1 -1
  135. package/cdn/elements/rating/rating.d.ts +3 -3
  136. package/cdn/elements/rating/rating.d.ts.map +1 -1
  137. package/cdn/elements/rating/rating.js +6 -6
  138. package/cdn/elements/rating/rating.js.map +1 -1
  139. package/cdn/elements/segmented-control/index.js.map +1 -1
  140. package/cdn/elements/segmented-control/segmented-control.d.ts.map +1 -1
  141. package/cdn/elements/segmented-control/segmented-control.js +1 -1
  142. package/cdn/elements/segmented-control/segmented-control.js.map +1 -1
  143. package/cdn/elements/select/index.js.map +1 -1
  144. package/cdn/elements/select/select.d.ts +17 -6
  145. package/cdn/elements/select/select.d.ts.map +1 -1
  146. package/cdn/elements/select/select.js +64 -58
  147. package/cdn/elements/select/select.js.map +1 -1
  148. package/cdn/elements/skeleton/index.js.map +1 -1
  149. package/cdn/elements/skeleton/skeleton.d.ts.map +1 -1
  150. package/cdn/elements/skeleton/skeleton.js.map +1 -1
  151. package/cdn/elements/slider/index.js.map +1 -1
  152. package/cdn/elements/slider/slider.d.ts +3 -3
  153. package/cdn/elements/slider/slider.d.ts.map +1 -1
  154. package/cdn/elements/slider/slider.js +2 -2
  155. package/cdn/elements/slider/slider.js.map +1 -1
  156. package/cdn/elements/spinner/index.js.map +1 -1
  157. package/cdn/elements/spinner/spinner.d.ts +2 -2
  158. package/cdn/elements/spinner/spinner.d.ts.map +1 -1
  159. package/cdn/elements/spinner/spinner.js.map +1 -1
  160. package/cdn/elements/sticky-bar/index.js.map +1 -1
  161. package/cdn/elements/sticky-bar/sticky-bar.d.ts +3 -3
  162. package/cdn/elements/sticky-bar/sticky-bar.d.ts.map +1 -1
  163. package/cdn/elements/sticky-bar/sticky-bar.js +1 -1
  164. package/cdn/elements/sticky-bar/sticky-bar.js.map +1 -1
  165. package/cdn/elements/stories/index.js.map +1 -1
  166. package/cdn/elements/stories/stories.d.ts +1 -1
  167. package/cdn/elements/stories/stories.d.ts.map +1 -1
  168. package/cdn/elements/stories/stories.js +1 -1
  169. package/cdn/elements/stories/stories.js.map +1 -1
  170. package/cdn/elements/stories-viewer/index.js.map +1 -1
  171. package/cdn/elements/stories-viewer/stories-viewer.d.ts +4 -4
  172. package/cdn/elements/stories-viewer/stories-viewer.d.ts.map +1 -1
  173. package/cdn/elements/stories-viewer/stories-viewer.js +35 -35
  174. package/cdn/elements/stories-viewer/stories-viewer.js.map +1 -1
  175. package/cdn/elements/story/index.js.map +1 -1
  176. package/cdn/elements/story/story.d.ts +1 -1
  177. package/cdn/elements/story/story.d.ts.map +1 -1
  178. package/cdn/elements/story/story.js +8 -8
  179. package/cdn/elements/story/story.js.map +1 -1
  180. package/cdn/elements/tabs/index.js.map +1 -1
  181. package/cdn/elements/tabs/tabs.d.ts.map +1 -1
  182. package/cdn/elements/tabs/tabs.js +1 -1
  183. package/cdn/elements/tabs/tabs.js.map +1 -1
  184. package/cdn/elements/tag/index.js.map +1 -1
  185. package/cdn/elements/tag/tag.d.ts +2 -2
  186. package/cdn/elements/tag/tag.d.ts.map +1 -1
  187. package/cdn/elements/tag/tag.js +3 -3
  188. package/cdn/elements/tag/tag.js.map +1 -1
  189. package/cdn/elements/toast/index.js.map +1 -1
  190. package/cdn/elements/toast/toast.d.ts.map +1 -1
  191. package/cdn/elements/toast/toast.js +1 -1
  192. package/cdn/elements/toast/toast.js.map +1 -1
  193. package/cdn/elements/tooltip/index.js.map +1 -1
  194. package/cdn/elements/tooltip/tooltip.d.ts +4 -5
  195. package/cdn/elements/tooltip/tooltip.d.ts.map +1 -1
  196. package/cdn/elements/tooltip/tooltip.js +6 -6
  197. package/cdn/elements/tooltip/tooltip.js.map +1 -1
  198. package/cdn/elements/tree/index.js.map +1 -1
  199. package/cdn/elements/tree/tree.d.ts +4 -4
  200. package/cdn/elements/tree/tree.d.ts.map +1 -1
  201. package/cdn/elements/tree/tree.js +2 -2
  202. package/cdn/elements/tree/tree.js.map +1 -1
  203. package/cdn/elements/tree-item/index.js.map +1 -1
  204. package/cdn/elements/tree-item/tree-item.d.ts +3 -3
  205. package/cdn/elements/tree-item/tree-item.d.ts.map +1 -1
  206. package/cdn/elements/tree-item/tree-item.js +33 -33
  207. package/cdn/elements/tree-item/tree-item.js.map +1 -1
  208. package/cdn/events/after-hide.d.ts.map +1 -1
  209. package/cdn/events/after-hide.js.map +1 -1
  210. package/cdn/events/after-show.d.ts.map +1 -1
  211. package/cdn/events/after-show.js.map +1 -1
  212. package/cdn/events/hide.d.ts.map +1 -1
  213. package/cdn/events/hide.js.map +1 -1
  214. package/cdn/events/show.d.ts.map +1 -1
  215. package/cdn/events/show.js.map +1 -1
  216. package/cdn/registry.js +1 -1
  217. package/cdn/registry.js.map +1 -1
  218. package/cdn/shared/controllers/datalist-observer.d.ts +1 -1
  219. package/cdn/shared/controllers/datalist-observer.d.ts.map +1 -1
  220. package/cdn/shared/controllers/datalist-observer.js.map +1 -1
  221. package/cdn/shared/controllers/has-slot-controller.d.ts +1 -1
  222. package/cdn/shared/controllers/has-slot-controller.d.ts.map +1 -1
  223. package/cdn/shared/controllers/has-slot-controller.js +1 -1
  224. package/cdn/shared/controllers/has-slot-controller.js.map +1 -1
  225. package/cdn/shared/controllers/listbox-nav.d.ts +16 -2
  226. package/cdn/shared/controllers/listbox-nav.d.ts.map +1 -1
  227. package/cdn/shared/controllers/listbox-nav.js +1 -1
  228. package/cdn/shared/controllers/listbox-nav.js.map +1 -1
  229. package/cdn/shared/controllers/popover.d.ts +12 -4
  230. package/cdn/shared/controllers/popover.d.ts.map +1 -1
  231. package/cdn/shared/controllers/popover.js +1 -1
  232. package/cdn/shared/controllers/popover.js.map +1 -1
  233. package/cdn/shared/highlight.d.ts +16 -0
  234. package/cdn/shared/highlight.d.ts.map +1 -0
  235. package/cdn/shared/highlight.js +2 -0
  236. package/cdn/shared/highlight.js.map +1 -0
  237. package/cdn/shared/localize.d.ts +1 -1
  238. package/cdn/shared/localize.d.ts.map +1 -1
  239. package/cdn/shared/localize.js +1 -1
  240. package/cdn/shared/localize.js.map +1 -1
  241. package/cdn/shared/luxen-element.js.map +1 -1
  242. package/cdn/shared/luxen-form-associated-element.d.ts.map +1 -1
  243. package/cdn/shared/luxen-form-associated-element.js +1 -1
  244. package/cdn/shared/luxen-form-associated-element.js.map +1 -1
  245. package/cdn/shared/rich-option.d.ts +20 -0
  246. package/cdn/shared/rich-option.d.ts.map +1 -0
  247. package/cdn/shared/rich-option.js +2 -0
  248. package/cdn/shared/rich-option.js.map +1 -0
  249. package/cdn/shared/styles/badge-core.styles.d.ts +9 -0
  250. package/cdn/shared/styles/badge-core.styles.d.ts.map +1 -0
  251. package/cdn/shared/styles/badge-core.styles.js +2 -0
  252. package/cdn/shared/styles/badge-core.styles.js.map +1 -0
  253. package/cdn/shared/styles/button-core.styles.d.ts +1 -1
  254. package/cdn/shared/styles/button-core.styles.d.ts.map +1 -1
  255. package/cdn/shared/styles/button-core.styles.js.map +1 -1
  256. package/cdn/shared/styles/checkbox-appearance.styles.d.ts +1 -1
  257. package/cdn/shared/styles/checkbox-appearance.styles.d.ts.map +1 -1
  258. package/cdn/shared/styles/checkbox-appearance.styles.js +1 -1
  259. package/cdn/shared/styles/checkbox-appearance.styles.js.map +1 -1
  260. package/cdn/shared/styles/host.styles.d.ts +1 -1
  261. package/cdn/shared/styles/host.styles.d.ts.map +1 -1
  262. package/cdn/shared/styles/host.styles.js.map +1 -1
  263. package/cdn/shared/styles/menu-panel.styles.d.ts +8 -0
  264. package/cdn/shared/styles/menu-panel.styles.d.ts.map +1 -0
  265. package/cdn/shared/styles/menu-panel.styles.js +2 -0
  266. package/cdn/shared/styles/menu-panel.styles.js.map +1 -0
  267. package/cdn/shared/styles/picker-core.styles.d.ts +9 -0
  268. package/cdn/shared/styles/picker-core.styles.d.ts.map +1 -0
  269. package/cdn/shared/styles/picker-core.styles.js +2 -0
  270. package/cdn/shared/styles/picker-core.styles.js.map +1 -0
  271. package/cdn/shared/styles/select-item-suffix.styles.d.ts +8 -0
  272. package/cdn/shared/styles/select-item-suffix.styles.d.ts.map +1 -0
  273. package/cdn/shared/styles/select-item-suffix.styles.js +2 -0
  274. package/cdn/shared/styles/select-item-suffix.styles.js.map +1 -0
  275. package/cdn/shared/styles/select-item.styles.d.ts +8 -0
  276. package/cdn/shared/styles/select-item.styles.d.ts.map +1 -0
  277. package/cdn/shared/styles/select-item.styles.js +2 -0
  278. package/cdn/shared/styles/select-item.styles.js.map +1 -0
  279. package/cdn/shared/styles/visually-hidden.styles.d.ts +8 -0
  280. package/cdn/shared/styles/visually-hidden.styles.d.ts.map +1 -0
  281. package/cdn/shared/styles/visually-hidden.styles.js +2 -0
  282. package/cdn/shared/styles/visually-hidden.styles.js.map +1 -0
  283. package/cdn/standalone.css +632 -423
  284. package/cdn/standalone.js +40422 -105
  285. package/cdn/standalone.js.map +1 -1
  286. package/cdn/static-tag.d.ts +2 -2
  287. package/cdn/static-tag.js +1 -1
  288. package/cdn/static-tag.js.map +1 -1
  289. package/cdn/styles/base.css +31 -68
  290. package/cdn/styles/elements/badge.css +202 -182
  291. package/cdn/styles/elements/checkbox.css +3 -6
  292. package/cdn/styles/elements/form-field.css +16 -9
  293. package/cdn/styles/elements/input-otp.css +16 -9
  294. package/cdn/styles/elements/input-stepper/default.css +4 -4
  295. package/cdn/styles/elements/input-stepper/pill.css +4 -4
  296. package/cdn/styles/elements/input-stepper/rounded.css +3 -3
  297. package/cdn/styles/elements/input.css +82 -27
  298. package/cdn/styles/elements/radio.css +2 -2
  299. package/cdn/styles/elements/select.css +202 -77
  300. package/cdn/styles/elements/switch.css +3 -3
  301. package/cdn/styles/elements/textarea.css +5 -5
  302. package/cdn/styles/preset.css +96 -98
  303. package/cdn/styles/tokens/aliases.css +1 -3
  304. package/cdn/styles/tokens/forms.css +38 -33
  305. package/cdn/styles/tokens/primitives.css +1 -3
  306. package/cdn/styles/tokens.css +67 -34
  307. package/cdn/translations/en.d.ts +1 -1
  308. package/cdn/translations/en.d.ts.map +1 -1
  309. package/cdn/translations/en.js.map +1 -1
  310. package/cdn/translations/fr.d.ts +1 -1
  311. package/cdn/translations/fr.d.ts.map +1 -1
  312. package/cdn/translations/fr.js.map +1 -1
  313. package/cdn/translations/ko.d.ts +1 -1
  314. package/cdn/translations/ko.d.ts.map +1 -1
  315. package/cdn/translations/ko.js.map +1 -1
  316. package/dist/color-scheme.d.ts.map +1 -1
  317. package/dist/css/base.css +31 -68
  318. package/dist/css/elements/badge.css +202 -182
  319. package/dist/css/elements/checkbox.css +3 -6
  320. package/dist/css/elements/form-field.css +16 -9
  321. package/dist/css/elements/input-otp.css +16 -9
  322. package/dist/css/elements/input-stepper/default.css +4 -4
  323. package/dist/css/elements/input-stepper/pill.css +4 -4
  324. package/dist/css/elements/input-stepper/rounded.css +3 -3
  325. package/dist/css/elements/input.css +82 -27
  326. package/dist/css/elements/radio.css +2 -2
  327. package/dist/css/elements/select.css +202 -77
  328. package/dist/css/elements/switch.css +3 -3
  329. package/dist/css/elements/textarea.css +5 -5
  330. package/dist/css/preset.css +96 -98
  331. package/dist/css/tokens/aliases.css +1 -3
  332. package/dist/css/tokens/forms.css +38 -33
  333. package/dist/css/tokens/primitives.css +1 -3
  334. package/dist/css/tokens.css +67 -34
  335. package/dist/custom-elements.json +819 -742
  336. package/dist/elements/alert/alert.d.ts.map +1 -1
  337. package/dist/elements/alert-dialog/alert-dialog.d.ts.map +1 -1
  338. package/dist/elements/avatar/avatar.d.ts.map +1 -1
  339. package/dist/elements/badge/badge.d.ts.map +1 -1
  340. package/dist/elements/button-group/button-group.d.ts.map +1 -1
  341. package/dist/elements/carousel/carousel.d.ts.map +1 -1
  342. package/dist/elements/carousel-item/carousel-item.d.ts.map +1 -1
  343. package/dist/elements/color-scheme-icon/color-scheme-icon.d.ts.map +1 -1
  344. package/dist/elements/combobox/combobox.css +30 -183
  345. package/dist/elements/combobox/combobox.d.ts +18 -2
  346. package/dist/elements/combobox/combobox.d.ts.map +1 -1
  347. package/dist/elements/combobox/combobox.js +88 -54
  348. package/dist/elements/dialog/dialog.d.ts.map +1 -1
  349. package/dist/elements/dialog/dialog.js +10 -10
  350. package/dist/elements/dialog/dialog.styles.d.ts.map +1 -1
  351. package/dist/elements/divider/divider.d.ts.map +1 -1
  352. package/dist/elements/drawer/drawer.d.ts +1 -1
  353. package/dist/elements/dropdown/dropdown.css +7 -30
  354. package/dist/elements/dropdown/dropdown.d.ts +6 -7
  355. package/dist/elements/dropdown/dropdown.d.ts.map +1 -1
  356. package/dist/elements/dropdown/dropdown.js +17 -14
  357. package/dist/elements/dropdown-item/dropdown-item.css +7 -36
  358. package/dist/elements/dropdown-item/dropdown-item.d.ts +0 -1
  359. package/dist/elements/dropdown-item/dropdown-item.d.ts.map +1 -1
  360. package/dist/elements/dropdown-item/dropdown-item.js +7 -10
  361. package/dist/elements/dropdown-label/dropdown-label.css +3 -3
  362. package/dist/elements/dropdown-label/dropdown-label.d.ts.map +1 -1
  363. package/dist/elements/form-field/form-field.d.ts +2 -1
  364. package/dist/elements/form-field/form-field.d.ts.map +1 -1
  365. package/dist/elements/form-field/form-field.js +16 -4
  366. package/dist/elements/icon/icon.d.ts.map +1 -1
  367. package/dist/elements/input/input.meta.d.ts +2 -0
  368. package/dist/elements/input/input.meta.d.ts.map +1 -1
  369. package/dist/elements/input/input.meta.js +2 -0
  370. package/dist/elements/input-group/input-group.d.ts.map +1 -1
  371. package/dist/elements/input-otp/input-otp.d.ts +3 -3
  372. package/dist/elements/input-otp/input-otp.d.ts.map +1 -1
  373. package/dist/elements/input-otp/input-otp.js +3 -3
  374. package/dist/elements/input-stepper/input-stepper.d.ts.map +1 -1
  375. package/dist/elements/popover/popover.css +4 -4
  376. package/dist/elements/popover/popover.d.ts +3 -4
  377. package/dist/elements/popover/popover.d.ts.map +1 -1
  378. package/dist/elements/popover/popover.js +10 -14
  379. package/dist/elements/prose-editor/prose-editor.d.ts +69 -0
  380. package/dist/elements/prose-editor/prose-editor.d.ts.map +1 -1
  381. package/dist/elements/prose-editor/prose-editor.js +183 -22
  382. package/dist/elements/rating/rating.d.ts.map +1 -1
  383. package/dist/elements/rating/rating.js +5 -5
  384. package/dist/elements/segmented-control/segmented-control.d.ts.map +1 -1
  385. package/dist/elements/select/select.css +26 -256
  386. package/dist/elements/select/select.d.ts +14 -4
  387. package/dist/elements/select/select.d.ts.map +1 -1
  388. package/dist/elements/select/select.js +87 -61
  389. package/dist/elements/skeleton/skeleton.d.ts.map +1 -1
  390. package/dist/elements/slider/slider.d.ts.map +1 -1
  391. package/dist/elements/spinner/spinner.d.ts.map +1 -1
  392. package/dist/elements/sticky-bar/sticky-bar.d.ts.map +1 -1
  393. package/dist/elements/stories/stories.d.ts.map +1 -1
  394. package/dist/elements/stories-viewer/stories-viewer.css +0 -12
  395. package/dist/elements/stories-viewer/stories-viewer.d.ts.map +1 -1
  396. package/dist/elements/stories-viewer/stories-viewer.js +20 -19
  397. package/dist/elements/story/story.d.ts.map +1 -1
  398. package/dist/elements/tabs/tabs.d.ts.map +1 -1
  399. package/dist/elements/tag/tag.css +10 -9
  400. package/dist/elements/tag/tag.d.ts.map +1 -1
  401. package/dist/elements/toast/toast.d.ts.map +1 -1
  402. package/dist/elements/tooltip/tooltip.d.ts +0 -1
  403. package/dist/elements/tooltip/tooltip.d.ts.map +1 -1
  404. package/dist/elements/tooltip/tooltip.js +7 -11
  405. package/dist/elements/tree/tree.d.ts.map +1 -1
  406. package/dist/elements/tree-item/tree-item.css +17 -7
  407. package/dist/elements/tree-item/tree-item.d.ts.map +1 -1
  408. package/dist/elements/tree-item/tree-item.js +29 -29
  409. package/dist/events/after-hide.d.ts.map +1 -1
  410. package/dist/events/after-show.d.ts.map +1 -1
  411. package/dist/events/hide.d.ts.map +1 -1
  412. package/dist/events/show.d.ts.map +1 -1
  413. package/dist/metadata/combobox.json +39 -3
  414. package/dist/metadata/dropdown.json +10 -10
  415. package/dist/metadata/form-field.json +1 -1
  416. package/dist/metadata/index.json +103 -26
  417. package/dist/metadata/input-otp.json +3 -3
  418. package/dist/metadata/input.json +5 -0
  419. package/dist/metadata/popover.json +5 -5
  420. package/dist/metadata/prose-editor.json +1 -1
  421. package/dist/metadata/select.json +38 -2
  422. package/dist/shared/controllers/datalist-observer.d.ts.map +1 -1
  423. package/dist/shared/controllers/has-slot-controller.d.ts.map +1 -1
  424. package/dist/shared/controllers/listbox-nav.d.ts +15 -1
  425. package/dist/shared/controllers/listbox-nav.d.ts.map +1 -1
  426. package/dist/shared/controllers/listbox-nav.js +32 -1
  427. package/dist/shared/controllers/popover.d.ts +10 -2
  428. package/dist/shared/controllers/popover.d.ts.map +1 -1
  429. package/dist/shared/controllers/popover.js +16 -2
  430. package/dist/shared/highlight.d.ts +16 -0
  431. package/dist/shared/highlight.d.ts.map +1 -0
  432. package/dist/shared/highlight.js +140 -0
  433. package/dist/shared/localize.d.ts.map +1 -1
  434. package/dist/shared/localize.js +1 -1
  435. package/dist/shared/luxen-form-associated-element.d.ts.map +1 -1
  436. package/dist/shared/rich-option.d.ts +20 -0
  437. package/dist/shared/rich-option.d.ts.map +1 -0
  438. package/dist/shared/rich-option.js +82 -0
  439. package/dist/shared/styles/badge-core.css +221 -0
  440. package/dist/shared/styles/badge-core.styles.d.ts +9 -0
  441. package/dist/shared/styles/badge-core.styles.d.ts.map +1 -0
  442. package/dist/shared/styles/badge-core.styles.js +9 -0
  443. package/dist/shared/styles/button-core.styles.d.ts.map +1 -1
  444. package/dist/shared/styles/checkbox-appearance.css +2 -2
  445. package/dist/shared/styles/checkbox-appearance.styles.d.ts.map +1 -1
  446. package/dist/shared/styles/host.styles.d.ts.map +1 -1
  447. package/dist/shared/styles/menu-panel.css +37 -0
  448. package/dist/shared/styles/menu-panel.styles.d.ts +8 -0
  449. package/dist/shared/styles/menu-panel.styles.d.ts.map +1 -0
  450. package/dist/shared/styles/menu-panel.styles.js +8 -0
  451. package/dist/shared/styles/picker-core.css +250 -0
  452. package/dist/shared/styles/picker-core.styles.d.ts +9 -0
  453. package/dist/shared/styles/picker-core.styles.d.ts.map +1 -0
  454. package/dist/shared/styles/picker-core.styles.js +9 -0
  455. package/dist/shared/styles/select-item-suffix.css +60 -0
  456. package/dist/shared/styles/select-item-suffix.styles.d.ts +8 -0
  457. package/dist/shared/styles/select-item-suffix.styles.d.ts.map +1 -0
  458. package/dist/shared/styles/select-item-suffix.styles.js +8 -0
  459. package/dist/shared/styles/select-item.css +98 -0
  460. package/dist/shared/styles/select-item.styles.d.ts +8 -0
  461. package/dist/shared/styles/select-item.styles.d.ts.map +1 -0
  462. package/dist/shared/styles/select-item.styles.js +8 -0
  463. package/dist/shared/styles/visually-hidden.css +27 -0
  464. package/dist/shared/styles/visually-hidden.styles.d.ts +8 -0
  465. package/dist/shared/styles/visually-hidden.styles.d.ts.map +1 -0
  466. package/dist/shared/styles/visually-hidden.styles.js +8 -0
  467. package/dist/templates/elements/combobox.md +181 -2
  468. package/dist/templates/elements/disclosure.md +2 -0
  469. package/dist/templates/elements/dropdown.md +6 -6
  470. package/dist/templates/elements/form-field.md +2 -2
  471. package/dist/templates/elements/input-otp.md +3 -3
  472. package/dist/templates/elements/input.md +1 -0
  473. package/dist/templates/elements/popover.md +3 -3
  474. package/dist/templates/elements/prose-editor.md +2 -1
  475. package/dist/templates/elements/radio-group.md +2 -2
  476. package/dist/templates/elements/select.md +242 -4
  477. package/dist/templates/elements/textarea.md +2 -4
  478. package/dist/translations/en.d.ts.map +1 -1
  479. package/dist/translations/fr.d.ts.map +1 -1
  480. package/dist/translations/ko.d.ts.map +1 -1
  481. package/package.json +21 -21
@@ -33,7 +33,6 @@ Negates a value (returns the negative).
33
33
  @returns {Number} The negated value.
34
34
  @example padding: --negate(1em);
35
35
  */
36
-
37
36
  @function --negate(--value) {
38
37
  result: calc(-1 * var(--value));
39
38
  }
@@ -47,7 +46,6 @@ Linear interpolation between two values.
47
46
  @returns {Number} Interpolated value.
48
47
  @example width: --lerp(100px, 200px, 0.5);
49
48
  */
50
-
51
49
  @function --lerp(--from, --to, --progress) {
52
50
  result: calc(var(--from) + (var(--to) - var(--from)) * var(--progress));
53
51
  }
@@ -63,7 +61,6 @@ Maps a value from one range to another.
63
61
  @returns {Number} Mapped value.
64
62
  @example font-size: --map-range(50vw, 320px, 1920px, 14px, 24px);
65
63
  */
66
-
67
64
  @function --map-range(--value, --in-min, --in-max, --out-min, --out-max) {
68
65
  --progress: clamp(0, calc((var(--value) - var(--in-min)) / (var(--in-max) - var(--in-min))), 1);
69
66
  result: calc(var(--out-min) + (var(--out-max) - var(--out-min)) * var(--progress));
@@ -77,7 +74,6 @@ Returns the ratio of two values. Supports values with different units, unlike re
77
74
  @returns {Number} The ratio between two values.
78
75
  @example scale: --ratio(16px, 1em);
79
76
  */
80
-
81
77
  @function --ratio(--value, --to-value) {
82
78
  result: tan(atan2(var(--value), var(--to-value)));
83
79
  }
@@ -94,7 +90,6 @@ Returns a semi-transparent version of any color.
94
90
  @returns {Color} Color with opacity.
95
91
  @example background: --opacity(blue, 50%);
96
92
  */
97
-
98
93
  @function --opacity(--color, --opacity) {
99
94
  result: rgb(from var(--color) r g b / var(--opacity));
100
95
  }
@@ -109,7 +104,6 @@ Uses OKLab color space for perceptually uniform mixing.
109
104
  @returns {Color} Lightened color.
110
105
  @example background: --tint(blue, 20%);
111
106
  */
112
-
113
107
  @function --tint(--color, --amount: 10%) {
114
108
  result: color-mix(in oklab, var(--color), white var(--amount));
115
109
  }
@@ -124,7 +118,6 @@ Uses OKLab color space for perceptually uniform mixing.
124
118
  @returns {Color} Darkened color.
125
119
  @example background: --shade(blue, 20%);
126
120
  */
127
-
128
121
  @function --shade(--color, --amount: 10%) {
129
122
  result: color-mix(in oklab, var(--color), black var(--amount));
130
123
  }
@@ -139,7 +132,6 @@ Uses OKLCH color space for perceptually uniform chroma adjustment. Chroma is cla
139
132
  @returns {Color} Adjusted color.
140
133
  @example color: --saturate(red, 1.5);
141
134
  */
142
-
143
135
  @function --saturate(--color, --amount: 1.2) {
144
136
  result: oklch(from var(--color) l clamp(0, calc(c * var(--amount)), 0.4) h);
145
137
  }
@@ -154,7 +146,6 @@ Uses OKLCH color space for perceptually uniform lightness adjustment. Maintains
154
146
  @returns {Color} Adjusted color.
155
147
  @example background: --lighten(blue, 20%);
156
148
  */
157
-
158
149
  @function --lighten(--color, --amount: 10%) {
159
150
  result: oklch(from var(--color) clamp(0, calc(l + var(--amount) / 100%), 1) c h);
160
151
  }
@@ -169,7 +160,6 @@ Uses OKLCH color space for perceptually uniform lightness adjustment. Unlike `--
169
160
  @returns {Color} Darkened color.
170
161
  @example background: --darken(blue, 20%);
171
162
  */
172
-
173
163
  @function --darken(--color, --amount: 10%) {
174
164
  result: oklch(from var(--color) clamp(0, calc(l - var(--amount) / 100%), 1) c h);
175
165
  }
@@ -184,7 +174,6 @@ Uses OKLCH color space for perceptually uniform hue rotation.
184
174
  @returns {Color} Color with rotated hue.
185
175
  @example background: --rotate-hue(blue, 180deg);
186
176
  */
187
-
188
177
  @function --rotate-hue(--color, --degrees: 30deg) {
189
178
  result: oklch(from var(--color) l c calc(h + var(--degrees)));
190
179
  }
@@ -198,7 +187,6 @@ Uses OKLCH color space for perceptually accurate complementary colors.
198
187
  @returns {Color} Complementary color.
199
188
  @example border-color: --complement(blue);
200
189
  */
201
-
202
190
  @function --complement(--color) {
203
191
  result: oklch(from var(--color) l c calc(h + 180deg));
204
192
  }
@@ -210,7 +198,6 @@ Inverts a color.
210
198
  @returns {Color} Inverted color.
211
199
  @example background: --invert(white);
212
200
  */
213
-
214
201
  @function --invert(--color) {
215
202
  result: rgb(from var(--color) calc(255 - r) calc(255 - g) calc(255 - b) / alpha);
216
203
  }
@@ -224,7 +211,6 @@ Uses OKLCH color space by setting chroma to 0.
224
211
  @returns {Color} Grayscale color.
225
212
  @example filter: --grayscale(var(--brand-color));
226
213
  */
227
-
228
214
  @function --grayscale(--color) {
229
215
  result: oklch(from var(--color) l 0 h);
230
216
  }
@@ -232,7 +218,6 @@ Uses OKLCH color space by setting chroma to 0.
232
218
  /*
233
219
  Uses HWB color space trick: converts to grayscale in OKLCH, then uses HWB's blackness/whiteness values amplified by a large multiplier to create a binary black/white decision based on brightness. This provides excellent contrast decisions without needing numeric luminance extraction.
234
220
  */
235
-
236
221
  /**
237
222
  Returns black or white text color for optimal contrast on a background.
238
223
 
@@ -240,7 +225,6 @@ Returns black or white text color for optimal contrast on a background.
240
225
  @returns {Color} Black or white for optimal readability.
241
226
  @example color: --text-on(var(--bg-color));
242
227
  */
243
-
244
228
  @function --text-on(--bg) {
245
229
  result: hwb(from oklch(from var(--bg) l 0 0) h calc((b - 50) * 999) calc((w - 50) * 999));
246
230
  }
@@ -252,7 +236,6 @@ Removes transparency from a color, making it fully opaque.
252
236
  @returns {Color} Fully opaque version of the color.
253
237
  @example background: --opaque(var(--semi-transparent-bg));
254
238
  */
255
-
256
239
  @function --opaque(--color) {
257
240
  result: rgb(from var(--color) r g b / 1);
258
241
  }
@@ -268,7 +251,6 @@ Uses perceptually uniform OKLab color space for natural-looking color mixing.
268
251
  @returns {Color} Mixed color.
269
252
  @example background: --mix(red, blue, 30%);
270
253
  */
271
-
272
254
  @function --mix(--color1, --color2, --amount: 50%) {
273
255
  result: color-mix(in oklab, var(--color1), var(--color2) var(--amount));
274
256
  }
@@ -283,7 +265,6 @@ Triadic colors are evenly spaced around the color wheel (120° apart).
283
265
  @returns {Color} Triadic color.
284
266
  @example color: --triadic(blue, 1);
285
267
  */
286
-
287
268
  @function --triadic(--color, --index: 1) {
288
269
  result: oklch(from var(--color) l c calc(h + 120deg * var(--index)));
289
270
  }
@@ -298,7 +279,6 @@ Tetradic colors are evenly spaced around the color wheel (90° apart).
298
279
  @returns {Color} Tetradic color.
299
280
  @example color: --tetradic(blue, 2);
300
281
  */
301
-
302
282
  @function --tetradic(--color, --index: 1) {
303
283
  result: oklch(from var(--color) l c calc(h + 90deg * var(--index)));
304
284
  }
@@ -310,7 +290,6 @@ Creates a semi-transparent black.
310
290
  @returns {Color} Semi-transparent black.
311
291
  @example box-shadow: 0 2px 4px --black(20%);
312
292
  */
313
-
314
293
  @function --black(--opacity: 50%) {
315
294
  result: rgb(0 0 0 / var(--opacity));
316
295
  }
@@ -322,7 +301,6 @@ Creates a semi-transparent white.
322
301
  @returns {Color} Semi-transparent white.
323
302
  @example background: --white(90%);
324
303
  */
325
-
326
304
  @function --white(--opacity: 50%) {
327
305
  result: rgb(255 255 255 / var(--opacity));
328
306
  }
@@ -343,7 +321,6 @@ NOTE: This function is mathematically equivalent to `--responsive-value()` but o
343
321
  @returns {Length} Fluid font size.
344
322
  @example font-size: --fluid-type(16px, 24px, 320px, 1280px);
345
323
  */
346
-
347
324
  @function --fluid-type(--min, --max, --min-viewport: 320px, --max-viewport: 1280px) {
348
325
  --slope: calc((var(--max) - var(--min)) / (var(--max-viewport) - var(--min-viewport)));
349
326
  --intercept: calc(var(--min) - var(--slope) * var(--min-viewport));
@@ -359,7 +336,6 @@ Creates a modular scale value.
359
336
  @returns {Length} Scaled value.
360
337
  @example font-size: --modular-scale(1rem, 1.25, 3);
361
338
  */
362
-
363
339
  @function --modular-scale(--base: 1rem, --ratio: 1.25, --step: 0) {
364
340
  result: calc(var(--base) * pow(var(--ratio), var(--step)));
365
341
  }
@@ -374,7 +350,6 @@ Returns a length (e.g., 24px) rather than a unitless ratio. Use this when you ne
374
350
  @returns {Length} Line height as a length.
375
351
  @example line-height: --line-height-length(16px, 1.6);
376
352
  */
377
-
378
353
  @function --line-height-length(--font-size, --multiplier: 1.5) {
379
354
  result: calc(var(--font-size) * var(--multiplier));
380
355
  }
@@ -389,7 +364,6 @@ Returns a number (e.g., 1.5) which is recommended for better inheritance in CSS.
389
364
  @returns {Number} Unitless line height ratio.
390
365
  @example line-height: --line-height-ratio(24px, 16px);
391
366
  */
392
-
393
367
  @function --line-height-ratio(--line-height, --font-size) {
394
368
  result: calc(var(--line-height) / var(--font-size));
395
369
  }
@@ -404,7 +378,6 @@ NOTE: Only works correctly with pixel font sizes. For rem/em values, use `--line
404
378
  @returns {Number} Unitless line height.
405
379
  @example line-height: --line-height-unitless(16px, 1.5);
406
380
  */
407
-
408
381
  @function --line-height-unitless(--font-size: 16px, --multiplier: 1.5) {
409
382
  result: calc(var(--font-size) * var(--multiplier) / 1px);
410
383
  }
@@ -421,7 +394,6 @@ Creates responsive sidebar layout columns.
421
394
  @returns {Length} Grid template columns value.
422
395
  @example grid-template-columns: --sidebar-layout(250px, 20ch);
423
396
  */
424
-
425
397
  @function --sidebar-layout(--sidebar-width: 20ch, --content-min: 20ch) {
426
398
  result: minmax(var(--sidebar-width), 1fr) minmax(var(--content-min), 3fr);
427
399
  }
@@ -434,7 +406,6 @@ Conditional border radius that removes at viewport edges.
434
406
  @returns {Length} Computed border radius.
435
407
  @example border-radius: --conditional-radius(1rem, 8px);
436
408
  */
437
-
438
409
  @function --conditional-radius(--radius, --edge-dist: 4px) {
439
410
  /* Multiply by large number to amplify small differences, creating binary 0/radius effect */
440
411
  result: clamp(0px, ((100vw - var(--edge-dist)) - 100%) * 1e5, var(--radius));
@@ -452,7 +423,6 @@ NOTE: This function is mathematically equivalent to `--fluid-type()` but uses a
452
423
  @returns {Length} Responsive value.
453
424
  @example padding: --responsive-value(1rem, 2rem, 320px, 1200px);
454
425
  */
455
-
456
426
  @function --responsive-value(--small, --large, --viewport-min: 320px, --viewport-max: 1200px) {
457
427
  --progress: calc((100vw - var(--viewport-min)) / (var(--viewport-max) - var(--viewport-min)));
458
428
  --clamped-progress: clamp(0, var(--progress), 1);
@@ -468,7 +438,6 @@ Calculates height from aspect ratio and maximum constraints.
468
438
  @returns {Length} Computed height.
469
439
  @example height: --aspect-height(16/9, 100vw, 100vh);
470
440
  */
471
-
472
441
  @function --aspect-height(--ratio: 1, --max-width: 100%, --max-height: 100%) {
473
442
  --computed-height: calc(var(--max-width) / var(--ratio));
474
443
  result: min(var(--computed-height), var(--max-height));
@@ -483,7 +452,6 @@ Calculates width from aspect ratio and maximum constraints.
483
452
  @returns {Length} Computed width.
484
453
  @example width: --aspect-width(16/9, 100vh, 100vw);
485
454
  */
486
-
487
455
  @function --aspect-width(--ratio: 1, --max-height: 100%, --max-width: 100%) {
488
456
  --computed-width: calc(var(--max-height) * var(--ratio));
489
457
  result: min(var(--computed-width), var(--max-width));
@@ -503,7 +471,6 @@ Recommended range: 0-10. Higher values create exponentially larger spacing.
503
471
  @returns {Length} Computed spacing.
504
472
  @example margin: --spacing(3);
505
473
  */
506
-
507
474
  @function --spacing(--level: 1, --base: 0.25rem) {
508
475
  result: calc(var(--base) * pow(2, var(--level)));
509
476
  }
@@ -516,7 +483,6 @@ Creates inset spacing for containers.
516
483
  @returns {Length} Responsive padding.
517
484
  @example padding: --container-padding(2rem, 1200px);
518
485
  */
519
-
520
486
  @function --container-padding(--padding: 1rem, --max-width: 1200px) {
521
487
  --available: calc(100vw - var(--max-width));
522
488
  --side-space: max(var(--padding), calc(var(--available) / 2));
@@ -534,7 +500,6 @@ Creates a simple easing curve value.
534
500
  @returns {Number} Eased value.
535
501
  @example transform: translateY(--ease-out(var(--progress)));
536
502
  */
537
-
538
503
  @function --ease-out(--progress) {
539
504
  --inverse: calc(1 - var(--progress));
540
505
  result: calc(1 - var(--inverse) * var(--inverse));
@@ -548,7 +513,6 @@ Creates elastic easing.
548
513
  @returns {Number} Eased value.
549
514
  @example transform: scale(--elastic-ease(var(--progress), 1.2));
550
515
  */
551
-
552
516
  @function --elastic-ease(--progress, --amplitude: 1) {
553
517
  --p: calc(var(--progress) * 3.14159);
554
518
  result: calc(var(--amplitude) * sin(var(--p) * 10) * exp(calc(-5 * var(--progress))));
@@ -566,7 +530,6 @@ Converts pixels to rem.
566
530
  @returns {Length} Rem value.
567
531
  @example font-size: --px-to-rem(24px);
568
532
  */
569
-
570
533
  @function --px-to-rem(--pixels, --base: 16px) {
571
534
  result: calc(var(--pixels) / var(--base) * 1rem);
572
535
  }
@@ -579,7 +542,6 @@ Converts rem to pixels.
579
542
  @returns {Length} Pixel value.
580
543
  @example width: --rem-to-px(2rem);
581
544
  */
582
-
583
545
  @function --rem-to-px(--rems, --base: 16px) {
584
546
  result: calc(var(--rems) / 1rem * var(--base));
585
547
  }
@@ -596,7 +558,6 @@ Creates responsive grid columns.
596
558
  @returns {Grid} Grid template columns value.
597
559
  @example grid-template-columns: --auto-grid(250px, 4);
598
560
  */
599
-
600
561
  @function --auto-grid(--min-width: 250px, --max-cols: 4) {
601
562
  result: repeat(
602
563
  auto-fit,
@@ -614,7 +575,6 @@ Ensures the span is an integer value.
614
575
  @returns {Span} Grid column span (rounded to integer).
615
576
  @example grid-column: --grid-span(3, 12);
616
577
  */
617
-
618
578
  @function --grid-span(--columns: 1, --total: 12) {
619
579
  result: span round(clamp(1, var(--columns), var(--total)));
620
580
  }
@@ -634,7 +594,6 @@ Generates three shadow layers. The spread-factor controls how distributed the sh
634
594
  @returns {Shadow} Layered box shadow.
635
595
  @example box-shadow: --smooth-shadow(black, 20px, 3);
636
596
  */
637
-
638
597
  @function --smooth-shadow(--color: rgb(0 0 0 / 0.2), --size: 12px, --spread-factor: 3) {
639
598
  --step: calc(var(--size) / var(--spread-factor));
640
599
  result:
@@ -652,7 +611,6 @@ Creates a glow effect.
652
611
  @returns {Shadow} Glow shadow.
653
612
  @example box-shadow: --glow(cyan, 10px, 0.5);
654
613
  */
655
-
656
614
  @function --glow(--color: white, --size: 10px, --intensity: 0.5) {
657
615
  result: 0 0 var(--size) rgb(from var(--color) r g b / var(--intensity));
658
616
  }
@@ -677,7 +635,6 @@ Works with ANY value type (colors, lengths, etc.), not just colors.
677
635
  @example background-image: --light-dark(url(light.svg), url(dark.svg));
678
636
  @example padding: --light-dark(0.75rem, 1rem);
679
637
  */
680
-
681
638
  @function --light-dark(--light, --dark) {
682
639
  result: if(color-scheme(dark): var(--dark); else: var(--light));
683
640
  }
@@ -696,35 +653,43 @@ In dark mode, mixes the base color with black (default 15% black).
696
653
  @returns {Color} Theme-adjusted color.
697
654
  @example background: --theme-color(blue, 80%, 20%);
698
655
  */
699
-
700
656
  @function --theme-color(--base, --light-mix: 85%, --dark-mix: 15%) {
701
657
  --light-result: color-mix(in oklab, white var(--light-mix), var(--base));
702
658
  --dark-result: color-mix(in oklab, black var(--dark-mix), var(--base));
703
659
  result: if(color-scheme(dark): var(--dark-result); else: var(--light-result));
704
660
  }
705
-
661
+ /* `.l-visually-hidden`: shared with the shadow roots that need it. */
706
662
  @layer base {
707
- .l-visually-hidden {
708
- /* Visually hide this, but keep it accessible to keyboard,
709
- screen reader and other assistive technologies.
710
-
711
- Also know as CSS helper: `.visually-hidden` / `.sr-only`
712
-
713
- References:
714
- - https://www.tpgi.com/the-anatomy-of-visually-hidden/
715
- - https://youtu.be/ob_M_qXeDVE?t=677
716
- */
717
- position: absolute;
718
- width: 1px;
719
- height: 1px;
720
- padding: 0;
721
- margin: -1px;
722
- overflow: hidden;
723
- clip: rect(0, 0, 0, 0); /* for IE only */
724
- white-space: nowrap;
725
- border: 0;
726
- }
727
663
 
664
+ /*
665
+ * `.l-visually-hidden` — hides content visually while keeping it available to
666
+ * screen readers and other assistive technologies (a.k.a. `.sr-only`).
667
+ * One source for both tiers, like button-core.css:
668
+ * - `@import`ed (and layered) by src/css/base/_base.css, the global helper
669
+ * consumers use in the light DOM, and
670
+ * - imported `?inline` (through visually-hidden.styles.ts) into the shadow
671
+ * roots that need it (l-select, l-combobox, l-stories-viewer), which the
672
+ * global class cannot reach. Templates bind it through `cls('visually-hidden')`
673
+ * so a renamed prefix keeps both in sync.
674
+ *
675
+ * References:
676
+ * - https://www.tpgi.com/the-anatomy-of-visually-hidden/
677
+ * - https://youtu.be/ob_M_qXeDVE?t=677
678
+ */
679
+
680
+ .l-visually-hidden {
681
+ position: absolute;
682
+ inline-size: 1px;
683
+ block-size: 1px;
684
+ margin: -1px;
685
+ padding: 0;
686
+ overflow: hidden;
687
+ clip-path: inset(50%);
688
+ white-space: nowrap;
689
+ border: 0;
690
+ }
691
+ }
692
+ @layer base {
728
693
  /* Hide Shadow-DOM overlay elements until their custom element upgrades.
729
694
  Without this, slotted/inner content flashes inline before the upgrade. */
730
695
  l-dialog:not(:defined),
@@ -735,9 +700,7 @@ In dark mode, mixes the base color with black (default 15% black).
735
700
  display: none;
736
701
  }
737
702
  }
738
-
739
703
  /* Design tokens — primitives (palette + scales) and semantic aliases. */
740
-
741
704
  /* Luxen design tokens — primitives (core 5 color families + spacing + radius
742
705
  + text + …) and semantic aliases (text-primary, bg-fill-brand, …) in one
743
706
  import. Equivalent to combining:
@@ -745,9 +708,7 @@ In dark mode, mixes the base color with black (default 15% black).
745
708
  @import 'luxen-ui/css/tokens/primitives';
746
709
  @import 'luxen-ui/css/tokens/aliases';
747
710
  */
748
-
749
711
  /* Luxen design-tokens entry — imports primitives + semantic aliases. */
750
-
751
712
  /* Luxen design-tokens — primitives (palette). */
752
713
 
753
714
  :root {
@@ -983,7 +944,7 @@ In dark mode, mixes the base color with black (default 15% black).
983
944
  --l-size-control-xl: 2.75rem;
984
945
  }
985
946
 
986
- /* Form component tokens (--l-form-control-*, --l-form-field-*). */
947
+ /* Form component tokens (--l-form-control-*). */
987
948
 
988
949
  /* Luxen design-tokens — form component tokens.
989
950
  Opt-in via `@import "luxen-ui/css/tokens/forms"` (already bundled in the
@@ -992,56 +953,62 @@ In dark mode, mixes the base color with black (default 15% black).
992
953
  :root {
993
954
  /* Color of a control when activated (checked checkbox, selected radio, on switch). Form-wide accent, akin to native `accent-color`. A stable, saturated color that does not invert between light and dark, so the baked white glyph stays legible in both modes — override per brand. */
994
955
  --l-form-control-activated-color: var(--l-color-blue-600);
995
- /* Color of the glyph on the activated fill (checkmark, radio dot, switch thumb). Pairs with the stable accent. */
956
+ /* Color of the switch thumb on the activated (on) track. Pairs with the stable accent. The checkbox checkmark and the radio dot do not read it: they are baked-white SVGs (background-image cannot take a color), so on a light accent swap them through the elements' `--checkmark` / `--dot` properties. */
996
957
  --l-form-control-activated-content-color: var(--l-color-white);
997
- /* Control background (input, textarea, select, unchecked toggle box). */
958
+ /* Background of every form control at rest: text fields (input, textarea, select) and the box of an unchecked checkbox or radio. */
998
959
  --l-form-control-background-color: var(--l-color-surface);
999
960
  /* Color of the user-entered value text. */
1000
961
  --l-form-control-value-color: var(--l-color-text-primary);
1001
962
  /* Placeholder text color. */
1002
963
  --l-form-control-placeholder-color: var(--l-color-text-tertiary);
1003
- /* Control border color. */
964
+ /* Border color of every form control at rest: text fields and the box of a checkbox or radio. */
1004
965
  --l-form-control-border-color: var(--l-color-border);
1005
- /* Control border width. */
966
+ /* Border width of text fields and of the checkbox and radio box. */
1006
967
  --l-form-control-border-width: 1px;
1007
- /* Control border radius. */
968
+ /* Corner radius of text fields (input, textarea, select, input group). Toggles keep their own shape. */
1008
969
  --l-form-control-border-radius: var(--l-radius-md);
1009
- /* Control border color on hover. */
970
+ /* Border color of a hovered form control (text fields, checkbox, radio). Also tints the hover halo of an unchecked checkbox or radio. */
1010
971
  --l-form-control-border-color-hover: var(--l-color-text-tertiary);
1011
- /* Control border color when invalid. */
972
+ /* Border color of an invalid form control (text fields, checkbox, radio), and the ring around an invalid switch. */
1012
973
  --l-form-control-border-color-invalid: var(--l-color-bg-fill-danger-strong);
1013
- /* Background of a disabled text control — a faint ink wash (reinforces non-interactivity, instead of fading the whole control with opacity). Translucent rather than a solid grey so it composites onto whatever sits behind: a disabled field reads the same on a card, an alert, or a dialog, where an opaque fill would show as a mismatched patch. On the default surface it lands within a step of the former solid --l-color-bg-disabled, in both light and dark. */
1014
- --l-form-control-disabled-background: color-mix(in oklab, var(--l-color-text-primary) 6%, transparent);
1015
- /* Border color of a disabled text control. Translucent for the same reason as --l-form-control-disabled-background, and derived from the same ink so fill and border stay in step under any theme. 20% is the alpha that reproduces the former solid --l-color-border-disabled on the default surface in both modes; 25% (the CSSWG default-UA proposal) drifts bright enough in dark mode to read as an enabled border. */
1016
- --l-form-control-disabled-border: color-mix(in oklab, var(--l-color-text-primary) 20%, transparent);
1017
- /* Value/placeholder text color of a disabled text control. Deliberately opaque, unlike the fill and border: text is the one layer that must not composite. An ink-derived alpha assumes the backdrop luminance matches the color scheme, so on a dark card in light mode a translucent value would fade dark-on-dark to nothing — a solid grey stays legible either way. */
1018
- --l-form-control-disabled-color: var(--l-color-text-disabled);
1019
- /* Mark on a disabled control that greys out through tokens rather than fading — currently the switch's thumb when it is off and disabled, sitting on the pale --l-form-control-disabled-background. A mid grey that holds in both light and dark, so the mark keeps past 3:1 against that fill either way; the lighter --l-form-control-disabled-color would drop below it. Decoupled from text tokens for the same reason as --l-form-control-track-off-color. Activated controls (checked checkbox, selected radio, on switch) do not use this — they fade instead, keeping their accent tint. */
1020
- --l-form-control-disabled-mark-color: var(--l-color-gray-500);
974
+ /* Background of a disabled form control: text fields, the box of an unchecked checkbox or radio, and the track of an off switch — a faint ink wash (reinforces non-interactivity, instead of fading the whole control with opacity). Translucent rather than a solid grey so it composites onto whatever sits behind: a disabled field reads the same on a card, an alert, or a dialog, where an opaque fill would show as a mismatched patch. On the default surface it lands within a step of the former solid --l-color-bg-disabled, in both light and dark. */
975
+ --l-form-control-background-color-disabled: color-mix(in oklab, var(--l-color-text-primary) 6%, transparent);
976
+ /* Border color of a disabled form control: text fields and the box of an unchecked checkbox or radio. Translucent for the same reason as --l-form-control-background-color-disabled, and derived from the same ink so fill and border stay in step under any theme. 20% is the alpha that reproduces the former solid --l-color-border-disabled on the default surface in both modes; 25% (the CSSWG default-UA proposal) drifts bright enough in dark mode to read as an enabled border. */
977
+ --l-form-control-border-color-disabled: color-mix(in oklab, var(--l-color-text-primary) 20%, transparent);
978
+ /* Text color of a disabled control and of its field: the value and placeholder, plus the label, hint and required indicator of a disabled `l-form-field` (and the legend and labels of a `fieldset:disabled`). Deliberately opaque, unlike the fill and border: text is the one layer that must not composite. An ink-derived alpha assumes the backdrop luminance matches the color scheme, so on a dark card in light mode a translucent value would fade dark-on-dark to nothing — a solid grey stays legible either way. */
979
+ --l-form-control-text-color-disabled: var(--l-color-text-disabled);
980
+ /* Mark on a disabled control that greys out through tokens rather than fading — currently the switch's thumb when it is off and disabled, sitting on the pale --l-form-control-background-color-disabled. A mid grey that holds in both light and dark, so the mark keeps past 3:1 against that fill either way; the lighter --l-form-control-text-color-disabled would drop below it. Decoupled from text tokens for the same reason as --l-form-control-track-color-off. Activated controls (checked checkbox, selected radio, on switch) do not use this — they fade instead, keeping their accent tint. */
981
+ --l-form-control-mark-color-disabled: var(--l-color-gray-500);
1021
982
  /* Box size of toggle controls (checkbox, radio, switch). Relative to font size so it scales with the label. */
1022
983
  --l-form-control-toggle-size: 1.25em;
1023
984
  /* Thickness of the hover halo ring on toggle controls (checkbox, radio, switch), as a fraction of the toggle size. Single source for the shared toggle hover language. */
1024
985
  --l-form-control-toggle-halo-ratio: 0.22;
1025
986
  /* Off-state track fill of the switch. A mid grey that holds in both light and dark so the white thumb keeps ~5:1 contrast either way — decoupled from text tokens so re-theming body text never moves the track. */
1026
- --l-form-control-track-off-color: var(--l-color-gray-500);
1027
- /* Height of text controls (input, select, textarea). */
987
+ --l-form-control-track-color-off: var(--l-color-gray-500);
988
+ /* Height of text fields (input, textarea, select, input group, l-select, l-combobox). Checkbox, radio and switch are sized by --l-form-control-toggle-size instead. */
1028
989
  --l-form-control-height: var(--l-size-control-md);
1029
- /* Horizontal padding of text controls. */
990
+ /* Horizontal padding of text fields (input, textarea, select, input group). */
1030
991
  --l-form-control-padding-inline: var(--l-spacing-3);
1031
- /* Field label color. */
992
+ /* Glyph size of the actions and indicators at the end of a text control: the clear (×) and the chevron of l-select / l-combobox, the chevron of the native `.l-select`, the native search clear and date/time picker icon of an input, and the password toggle of l-input-group. Only the glyph — each action's hit area follows the control height. Relative to font size by default; set a length to enlarge the glyphs on taller controls. */
993
+ --l-form-control-icon-size: 1em;
994
+ /* Color of an `l-form-field` label (and of a radio group legend). */
1032
995
  --l-form-control-label-color: var(--l-color-text-primary);
1033
- /* Helper/description text color (`l-hint`). */
996
+ /* Color of the helper text below a control (`.l-hint`). */
1034
997
  --l-form-control-hint-color: var(--l-color-text-secondary);
1035
- /* Error message text color (`l-error`). */
1036
- --l-form-control-error-color: var(--l-color-text-danger);
1037
- /* Marker appended to a required field's label. */
998
+ /* Color of the error message text (`.l-error`) shown when the field is invalid. The message only — the invalid border is --l-form-control-border-color-invalid. */
999
+ --l-form-control-error-message-color: var(--l-color-text-danger);
1000
+ /* Indicator appended to the label of a required field, as a CSS `content` value: a symbol (the default asterisk) or text, e.g. `" (required)"`. */
1038
1001
  --l-form-control-required-content: '*';
1039
- /* Color of the required marker. */
1002
+ /* Color of the required indicator (--l-form-control-required-content). */
1040
1003
  --l-form-control-required-color: var(--l-color-text-danger);
1041
- /* Vertical gap between label, control, and messages in a stacked field. Tight, so the label and helper text sit close to the control. */
1042
- --l-form-field-gap: var(--l-spacing-1);
1043
- /* Horizontal gap between a toggle control and its label in an inline field. */
1044
- --l-form-field-choice-gap: var(--l-spacing-2);
1004
+ /* Space between the parts inside one `l-form-field`: label, control, hint and error, stacked vertically (in an inline field, between the label and its messages). Tight, so the label and helper text sit close to the control. Not the space between two fields — the form layout owns that. */
1005
+ --l-form-control-label-gap: var(--l-spacing-1);
1006
+ /* Horizontal space between a toggle control (checkbox, radio, switch) and its label in an inline `l-form-field`. */
1007
+ --l-form-control-choice-label-gap: var(--l-spacing-2);
1008
+ /* Background of the `<mark>` wrapping the part of an option that matches the search query, in the listbox of `l-combobox` and searchable `l-select` (plain label, or a rich option's title and description). A soft marker tint, light enough to keep the option text readable on a hovered or active row. Setting it to `transparent` leaves only --l-form-control-match-font-weight to mark the match — pick a weight above the option text's then, since a rich `l-select` title is already semibold. */
1009
+ --l-form-control-match-background-color: light-dark(var(--l-color-yellow-100), var(--l-color-yellow-900));
1010
+ /* Font weight of the search-query match in `l-combobox` and searchable `l-select` options. Pairs with --l-form-control-match-background-color; set to `inherit` to mark the match with the background alone. */
1011
+ --l-form-control-match-font-weight: var(--l-font-weight-semibold);
1045
1012
  }
1046
1013
 
1047
1014
  /* Tooltip component token (--l-tooltip-background-color). */
@@ -1055,3 +1022,34 @@ In dark mode, mixes the base color with black (default 15% black).
1055
1022
  /* Tooltip surface color — dark in light mode, light in dark mode. Neutral by design; not tied to --l-color-bg-fill-brand, so changing the brand color does not recolor tooltips. Override globally to re-skin every tooltip, or use the per-instance --background-color custom property on a single `<l-tooltip>`. */
1056
1023
  --l-tooltip-background-color: light-dark(var(--l-color-gray-900), var(--l-color-gray-50));
1057
1024
  }
1025
+
1026
+ /* Popover and menu-item tokens (--l-popover-*, --l-menu-item-*): panels
1027
+ anchored to a trigger and their rows. */
1028
+
1029
+ /* Luxen design-tokens — popover and menu-item component tokens.
1030
+ Bundled in the Luxen preset via `luxen-ui/css/tokens`. Geometry and type of
1031
+ the panels anchored to a trigger (dropdown, popover, listbox, select picker)
1032
+ and of the rows inside them. */
1033
+
1034
+ :root {
1035
+ /* Corner radius of a panel anchored to a trigger (dropdown menu, popover, listbox, select picker). Each element still exposes its own `--border-radius` knob for a one-off override. Not for dialogs or drawers. */
1036
+ --l-popover-border-radius: var(--l-radius-md);
1037
+ /* Inset between a menu or listbox panel's border and its rows. Also the vertical margin of an `<hr>` separator, which bleeds through it to the panel edges. Not applied to `l-popover`, whose content brings its own spacing. */
1038
+ --l-popover-padding: var(--l-spacing-1);
1039
+ /* Elevation of a panel anchored to a trigger. Aliases --l-shadow-md so popovers can be re-elevated without moving every medium shadow. Modal surfaces use their own, higher elevation. */
1040
+ --l-popover-shadow: var(--l-shadow-md);
1041
+ /* Text size inside an anchored panel — menu items, listbox options, popover body. */
1042
+ --l-popover-font-size: var(--l-text-sm);
1043
+ /* Line height inside an anchored panel. Pairs with --l-popover-font-size; a row's first line box (font-size × line-height) is what checkmarks and suffixes centre on. */
1044
+ --l-popover-line-height: 1.5;
1045
+ /* Minimum height of a row in a menu or listbox — `l-dropdown-item`, `l-select` / `l-combobox` options, native `.l-select` options (36px). A comfortable pointer and touch target, well above the WCAG 2.5.8 24px floor. Rich rows (description, media) grow past it. */
1046
+ --l-menu-item-min-height: 2.25rem;
1047
+ /* Vertical padding of a menu item or listbox option. Select rows never go below it, and centre a single line on --l-menu-item-min-height. */
1048
+ --l-menu-item-padding-block: var(--l-spacing-1_5);
1049
+ /* Horizontal padding of a menu item or listbox option. Section labels (`l-dropdown-label`) use it too, so they line up with the rows below them. */
1050
+ --l-menu-item-padding-inline: var(--l-spacing-2);
1051
+ /* Gap between the parts of a menu item or option — check, icon, label, suffix. */
1052
+ --l-menu-item-gap: var(--l-spacing-2);
1053
+ /* Corner radius of a row's hover / active tint, inset inside the popover's own radius. */
1054
+ --l-menu-item-border-radius: var(--l-radius-sm);
1055
+ }
@@ -1,9 +1,7 @@
1
1
  /* Luxen semantic aliases only — text-primary, bg-fill-brand, border-interactive, …
2
2
  Each one references a primitive via `var(--l-color-*)`, so primitives must be
3
3
  defined (either via 'luxen-ui/css/tokens/primitives' or by your own mapping).
4
- */
5
-
6
- /* Luxen design-tokens — semantic aliases. */
4
+ *//* Luxen design-tokens — semantic aliases. */
7
5
 
8
6
  :root {
9
7
  /* Main body text, headings, and high-emphasis content. Use as the default text color throughout the UI. */