luxen-ui 0.22.0 → 0.23.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 (396) 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 +47 -3
  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 +15 -4
  64. package/cdn/elements/combobox/combobox.d.ts.map +1 -1
  65. package/cdn/elements/combobox/combobox.js +35 -33
  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 +13 -5
  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 -3
  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.map +1 -1
  97. package/cdn/elements/dropdown-label/index.js.map +1 -1
  98. package/cdn/elements/form-field/form-field.d.ts +1 -0
  99. package/cdn/elements/form-field/form-field.d.ts.map +1 -1
  100. package/cdn/elements/form-field/form-field.js +1 -1
  101. package/cdn/elements/form-field/form-field.js.map +1 -1
  102. package/cdn/elements/form-field/index.js.map +1 -1
  103. package/cdn/elements/icon/icon.d.ts +3 -3
  104. package/cdn/elements/icon/icon.d.ts.map +1 -1
  105. package/cdn/elements/icon/icon.js +1 -1
  106. package/cdn/elements/icon/icon.js.map +1 -1
  107. package/cdn/elements/icon/index.js.map +1 -1
  108. package/cdn/elements/input-group/index.js.map +1 -1
  109. package/cdn/elements/input-group/input-group.d.ts.map +1 -1
  110. package/cdn/elements/input-group/input-group.js +1 -1
  111. package/cdn/elements/input-group/input-group.js.map +1 -1
  112. package/cdn/elements/input-otp/index.js.map +1 -1
  113. package/cdn/elements/input-otp/input-otp.d.ts.map +1 -1
  114. package/cdn/elements/input-otp/input-otp.js +1 -1
  115. package/cdn/elements/input-otp/input-otp.js.map +1 -1
  116. package/cdn/elements/input-stepper/index.js.map +1 -1
  117. package/cdn/elements/input-stepper/input-stepper.d.ts.map +1 -1
  118. package/cdn/elements/input-stepper/input-stepper.js +1 -1
  119. package/cdn/elements/input-stepper/input-stepper.js.map +1 -1
  120. package/cdn/elements/popover/index.js.map +1 -1
  121. package/cdn/elements/popover/popover.d.ts +4 -4
  122. package/cdn/elements/popover/popover.d.ts.map +1 -1
  123. package/cdn/elements/popover/popover.js +6 -6
  124. package/cdn/elements/popover/popover.js.map +1 -1
  125. package/cdn/elements/prose-editor/index.js.map +1 -1
  126. package/cdn/elements/prose-editor/prose-editor.d.ts +73 -3
  127. package/cdn/elements/prose-editor/prose-editor.d.ts.map +1 -1
  128. package/cdn/elements/prose-editor/prose-editor.js +56 -71
  129. package/cdn/elements/prose-editor/prose-editor.js.map +1 -1
  130. package/cdn/elements/rating/index.js.map +1 -1
  131. package/cdn/elements/rating/rating.d.ts +3 -3
  132. package/cdn/elements/rating/rating.d.ts.map +1 -1
  133. package/cdn/elements/rating/rating.js +6 -6
  134. package/cdn/elements/rating/rating.js.map +1 -1
  135. package/cdn/elements/segmented-control/index.js.map +1 -1
  136. package/cdn/elements/segmented-control/segmented-control.d.ts.map +1 -1
  137. package/cdn/elements/segmented-control/segmented-control.js +1 -1
  138. package/cdn/elements/segmented-control/segmented-control.js.map +1 -1
  139. package/cdn/elements/select/index.js.map +1 -1
  140. package/cdn/elements/select/select.d.ts +11 -5
  141. package/cdn/elements/select/select.d.ts.map +1 -1
  142. package/cdn/elements/select/select.js +62 -57
  143. package/cdn/elements/select/select.js.map +1 -1
  144. package/cdn/elements/skeleton/index.js.map +1 -1
  145. package/cdn/elements/skeleton/skeleton.d.ts.map +1 -1
  146. package/cdn/elements/skeleton/skeleton.js.map +1 -1
  147. package/cdn/elements/slider/index.js.map +1 -1
  148. package/cdn/elements/slider/slider.d.ts +3 -3
  149. package/cdn/elements/slider/slider.d.ts.map +1 -1
  150. package/cdn/elements/slider/slider.js +2 -2
  151. package/cdn/elements/slider/slider.js.map +1 -1
  152. package/cdn/elements/spinner/index.js.map +1 -1
  153. package/cdn/elements/spinner/spinner.d.ts +2 -2
  154. package/cdn/elements/spinner/spinner.d.ts.map +1 -1
  155. package/cdn/elements/spinner/spinner.js.map +1 -1
  156. package/cdn/elements/sticky-bar/index.js.map +1 -1
  157. package/cdn/elements/sticky-bar/sticky-bar.d.ts +3 -3
  158. package/cdn/elements/sticky-bar/sticky-bar.d.ts.map +1 -1
  159. package/cdn/elements/sticky-bar/sticky-bar.js +1 -1
  160. package/cdn/elements/sticky-bar/sticky-bar.js.map +1 -1
  161. package/cdn/elements/stories/index.js.map +1 -1
  162. package/cdn/elements/stories/stories.d.ts +1 -1
  163. package/cdn/elements/stories/stories.d.ts.map +1 -1
  164. package/cdn/elements/stories/stories.js +1 -1
  165. package/cdn/elements/stories/stories.js.map +1 -1
  166. package/cdn/elements/stories-viewer/index.js.map +1 -1
  167. package/cdn/elements/stories-viewer/stories-viewer.d.ts +4 -4
  168. package/cdn/elements/stories-viewer/stories-viewer.d.ts.map +1 -1
  169. package/cdn/elements/stories-viewer/stories-viewer.js +33 -33
  170. package/cdn/elements/stories-viewer/stories-viewer.js.map +1 -1
  171. package/cdn/elements/story/index.js.map +1 -1
  172. package/cdn/elements/story/story.d.ts +1 -1
  173. package/cdn/elements/story/story.d.ts.map +1 -1
  174. package/cdn/elements/story/story.js +8 -8
  175. package/cdn/elements/story/story.js.map +1 -1
  176. package/cdn/elements/tabs/index.js.map +1 -1
  177. package/cdn/elements/tabs/tabs.d.ts.map +1 -1
  178. package/cdn/elements/tabs/tabs.js +1 -1
  179. package/cdn/elements/tabs/tabs.js.map +1 -1
  180. package/cdn/elements/tag/index.js.map +1 -1
  181. package/cdn/elements/tag/tag.d.ts +2 -2
  182. package/cdn/elements/tag/tag.d.ts.map +1 -1
  183. package/cdn/elements/tag/tag.js +3 -3
  184. package/cdn/elements/tag/tag.js.map +1 -1
  185. package/cdn/elements/toast/index.js.map +1 -1
  186. package/cdn/elements/toast/toast.d.ts.map +1 -1
  187. package/cdn/elements/toast/toast.js +1 -1
  188. package/cdn/elements/toast/toast.js.map +1 -1
  189. package/cdn/elements/tooltip/index.js.map +1 -1
  190. package/cdn/elements/tooltip/tooltip.d.ts +4 -4
  191. package/cdn/elements/tooltip/tooltip.d.ts.map +1 -1
  192. package/cdn/elements/tooltip/tooltip.js +6 -6
  193. package/cdn/elements/tooltip/tooltip.js.map +1 -1
  194. package/cdn/elements/tree/index.js.map +1 -1
  195. package/cdn/elements/tree/tree.d.ts +4 -4
  196. package/cdn/elements/tree/tree.d.ts.map +1 -1
  197. package/cdn/elements/tree/tree.js +2 -2
  198. package/cdn/elements/tree/tree.js.map +1 -1
  199. package/cdn/elements/tree-item/index.js.map +1 -1
  200. package/cdn/elements/tree-item/tree-item.d.ts +3 -3
  201. package/cdn/elements/tree-item/tree-item.d.ts.map +1 -1
  202. package/cdn/elements/tree-item/tree-item.js +33 -33
  203. package/cdn/elements/tree-item/tree-item.js.map +1 -1
  204. package/cdn/events/after-hide.d.ts.map +1 -1
  205. package/cdn/events/after-hide.js.map +1 -1
  206. package/cdn/events/after-show.d.ts.map +1 -1
  207. package/cdn/events/after-show.js.map +1 -1
  208. package/cdn/events/hide.d.ts.map +1 -1
  209. package/cdn/events/hide.js.map +1 -1
  210. package/cdn/events/show.d.ts.map +1 -1
  211. package/cdn/events/show.js.map +1 -1
  212. package/cdn/registry.js +1 -1
  213. package/cdn/registry.js.map +1 -1
  214. package/cdn/shared/controllers/datalist-observer.d.ts +1 -1
  215. package/cdn/shared/controllers/datalist-observer.d.ts.map +1 -1
  216. package/cdn/shared/controllers/datalist-observer.js.map +1 -1
  217. package/cdn/shared/controllers/has-slot-controller.d.ts +1 -1
  218. package/cdn/shared/controllers/has-slot-controller.d.ts.map +1 -1
  219. package/cdn/shared/controllers/has-slot-controller.js +1 -1
  220. package/cdn/shared/controllers/has-slot-controller.js.map +1 -1
  221. package/cdn/shared/controllers/listbox-nav.d.ts +1 -1
  222. package/cdn/shared/controllers/listbox-nav.d.ts.map +1 -1
  223. package/cdn/shared/controllers/listbox-nav.js.map +1 -1
  224. package/cdn/shared/controllers/popover.d.ts +2 -2
  225. package/cdn/shared/controllers/popover.d.ts.map +1 -1
  226. package/cdn/shared/controllers/popover.js +1 -1
  227. package/cdn/shared/controllers/popover.js.map +1 -1
  228. package/cdn/shared/highlight.d.ts +16 -0
  229. package/cdn/shared/highlight.d.ts.map +1 -0
  230. package/cdn/shared/highlight.js +2 -0
  231. package/cdn/shared/highlight.js.map +1 -0
  232. package/cdn/shared/localize.d.ts +1 -1
  233. package/cdn/shared/localize.d.ts.map +1 -1
  234. package/cdn/shared/localize.js +1 -1
  235. package/cdn/shared/localize.js.map +1 -1
  236. package/cdn/shared/luxen-element.js.map +1 -1
  237. package/cdn/shared/luxen-form-associated-element.d.ts.map +1 -1
  238. package/cdn/shared/luxen-form-associated-element.js +1 -1
  239. package/cdn/shared/luxen-form-associated-element.js.map +1 -1
  240. package/cdn/shared/rich-option.d.ts +20 -0
  241. package/cdn/shared/rich-option.d.ts.map +1 -0
  242. package/cdn/shared/rich-option.js +2 -0
  243. package/cdn/shared/rich-option.js.map +1 -0
  244. package/cdn/shared/styles/badge-core.styles.d.ts +9 -0
  245. package/cdn/shared/styles/badge-core.styles.d.ts.map +1 -0
  246. package/cdn/shared/styles/badge-core.styles.js +2 -0
  247. package/cdn/shared/styles/badge-core.styles.js.map +1 -0
  248. package/cdn/shared/styles/button-core.styles.d.ts +1 -1
  249. package/cdn/shared/styles/button-core.styles.d.ts.map +1 -1
  250. package/cdn/shared/styles/button-core.styles.js.map +1 -1
  251. package/cdn/shared/styles/checkbox-appearance.styles.d.ts +1 -1
  252. package/cdn/shared/styles/checkbox-appearance.styles.d.ts.map +1 -1
  253. package/cdn/shared/styles/checkbox-appearance.styles.js.map +1 -1
  254. package/cdn/shared/styles/host.styles.d.ts +1 -1
  255. package/cdn/shared/styles/host.styles.d.ts.map +1 -1
  256. package/cdn/shared/styles/host.styles.js.map +1 -1
  257. package/cdn/shared/styles/select-item-suffix.styles.d.ts +8 -0
  258. package/cdn/shared/styles/select-item-suffix.styles.d.ts.map +1 -0
  259. package/cdn/shared/styles/select-item-suffix.styles.js +2 -0
  260. package/cdn/shared/styles/select-item-suffix.styles.js.map +1 -0
  261. package/cdn/standalone.css +273 -233
  262. package/cdn/standalone.js +40349 -105
  263. package/cdn/standalone.js.map +1 -1
  264. package/cdn/static-tag.d.ts +2 -2
  265. package/cdn/static-tag.js +1 -1
  266. package/cdn/static-tag.js.map +1 -1
  267. package/cdn/styles/base.css +1 -48
  268. package/cdn/styles/elements/badge.css +202 -182
  269. package/cdn/styles/elements/checkbox.css +1 -4
  270. package/cdn/styles/elements/select.css +71 -3
  271. package/cdn/styles/preset.css +4 -49
  272. package/cdn/styles/tokens/aliases.css +1 -3
  273. package/cdn/styles/tokens/forms.css +5 -3
  274. package/cdn/styles/tokens/primitives.css +1 -3
  275. package/cdn/styles/tokens.css +5 -5
  276. package/cdn/translations/en.d.ts +1 -1
  277. package/cdn/translations/en.d.ts.map +1 -1
  278. package/cdn/translations/en.js.map +1 -1
  279. package/cdn/translations/fr.d.ts +1 -1
  280. package/cdn/translations/fr.d.ts.map +1 -1
  281. package/cdn/translations/fr.js.map +1 -1
  282. package/cdn/translations/ko.d.ts +1 -1
  283. package/cdn/translations/ko.d.ts.map +1 -1
  284. package/cdn/translations/ko.js.map +1 -1
  285. package/dist/color-scheme.d.ts.map +1 -1
  286. package/dist/css/base.css +1 -48
  287. package/dist/css/elements/badge.css +202 -182
  288. package/dist/css/elements/checkbox.css +1 -4
  289. package/dist/css/elements/select.css +71 -3
  290. package/dist/css/preset.css +4 -49
  291. package/dist/css/tokens/aliases.css +1 -3
  292. package/dist/css/tokens/forms.css +5 -3
  293. package/dist/css/tokens/primitives.css +1 -3
  294. package/dist/css/tokens.css +5 -5
  295. package/dist/custom-elements.json +47 -3
  296. package/dist/elements/alert/alert.d.ts.map +1 -1
  297. package/dist/elements/alert-dialog/alert-dialog.d.ts.map +1 -1
  298. package/dist/elements/avatar/avatar.d.ts.map +1 -1
  299. package/dist/elements/badge/badge.d.ts.map +1 -1
  300. package/dist/elements/button-group/button-group.d.ts.map +1 -1
  301. package/dist/elements/carousel/carousel.d.ts.map +1 -1
  302. package/dist/elements/carousel-item/carousel-item.d.ts.map +1 -1
  303. package/dist/elements/color-scheme-icon/color-scheme-icon.d.ts.map +1 -1
  304. package/dist/elements/combobox/combobox.css +7 -3
  305. package/dist/elements/combobox/combobox.d.ts +12 -1
  306. package/dist/elements/combobox/combobox.d.ts.map +1 -1
  307. package/dist/elements/combobox/combobox.js +52 -46
  308. package/dist/elements/dialog/dialog.d.ts.map +1 -1
  309. package/dist/elements/dialog/dialog.js +10 -10
  310. package/dist/elements/dialog/dialog.styles.d.ts.map +1 -1
  311. package/dist/elements/divider/divider.d.ts.map +1 -1
  312. package/dist/elements/drawer/drawer.d.ts +1 -1
  313. package/dist/elements/dropdown/dropdown.d.ts +8 -0
  314. package/dist/elements/dropdown/dropdown.d.ts.map +1 -1
  315. package/dist/elements/dropdown/dropdown.js +33 -8
  316. package/dist/elements/dropdown-item/dropdown-item.d.ts.map +1 -1
  317. package/dist/elements/dropdown-item/dropdown-item.js +3 -3
  318. package/dist/elements/dropdown-label/dropdown-label.d.ts.map +1 -1
  319. package/dist/elements/form-field/form-field.d.ts +1 -0
  320. package/dist/elements/form-field/form-field.d.ts.map +1 -1
  321. package/dist/elements/form-field/form-field.js +14 -2
  322. package/dist/elements/icon/icon.d.ts.map +1 -1
  323. package/dist/elements/input-group/input-group.d.ts.map +1 -1
  324. package/dist/elements/input-otp/input-otp.d.ts.map +1 -1
  325. package/dist/elements/input-stepper/input-stepper.d.ts.map +1 -1
  326. package/dist/elements/popover/popover.d.ts.map +1 -1
  327. package/dist/elements/popover/popover.js +5 -5
  328. package/dist/elements/prose-editor/prose-editor.d.ts +69 -0
  329. package/dist/elements/prose-editor/prose-editor.d.ts.map +1 -1
  330. package/dist/elements/prose-editor/prose-editor.js +183 -22
  331. package/dist/elements/rating/rating.d.ts.map +1 -1
  332. package/dist/elements/rating/rating.js +5 -5
  333. package/dist/elements/segmented-control/segmented-control.d.ts.map +1 -1
  334. package/dist/elements/select/select.css +12 -6
  335. package/dist/elements/select/select.d.ts +8 -3
  336. package/dist/elements/select/select.d.ts.map +1 -1
  337. package/dist/elements/select/select.js +68 -60
  338. package/dist/elements/skeleton/skeleton.d.ts.map +1 -1
  339. package/dist/elements/slider/slider.d.ts.map +1 -1
  340. package/dist/elements/spinner/spinner.d.ts.map +1 -1
  341. package/dist/elements/sticky-bar/sticky-bar.d.ts.map +1 -1
  342. package/dist/elements/stories/stories.d.ts.map +1 -1
  343. package/dist/elements/stories-viewer/stories-viewer.d.ts.map +1 -1
  344. package/dist/elements/stories-viewer/stories-viewer.js +16 -16
  345. package/dist/elements/story/story.d.ts.map +1 -1
  346. package/dist/elements/tabs/tabs.d.ts.map +1 -1
  347. package/dist/elements/tag/tag.css +10 -9
  348. package/dist/elements/tag/tag.d.ts.map +1 -1
  349. package/dist/elements/toast/toast.d.ts.map +1 -1
  350. package/dist/elements/tooltip/tooltip.d.ts.map +1 -1
  351. package/dist/elements/tooltip/tooltip.js +5 -5
  352. package/dist/elements/tree/tree.d.ts.map +1 -1
  353. package/dist/elements/tree-item/tree-item.css +17 -7
  354. package/dist/elements/tree-item/tree-item.d.ts.map +1 -1
  355. package/dist/elements/tree-item/tree-item.js +29 -29
  356. package/dist/events/after-hide.d.ts.map +1 -1
  357. package/dist/events/after-show.d.ts.map +1 -1
  358. package/dist/events/hide.d.ts.map +1 -1
  359. package/dist/events/show.d.ts.map +1 -1
  360. package/dist/metadata/combobox.json +23 -2
  361. package/dist/metadata/index.json +47 -5
  362. package/dist/metadata/prose-editor.json +1 -1
  363. package/dist/metadata/select.json +22 -1
  364. package/dist/shared/controllers/datalist-observer.d.ts.map +1 -1
  365. package/dist/shared/controllers/has-slot-controller.d.ts.map +1 -1
  366. package/dist/shared/controllers/listbox-nav.d.ts.map +1 -1
  367. package/dist/shared/controllers/popover.d.ts.map +1 -1
  368. package/dist/shared/highlight.d.ts +16 -0
  369. package/dist/shared/highlight.d.ts.map +1 -0
  370. package/dist/shared/highlight.js +140 -0
  371. package/dist/shared/localize.d.ts.map +1 -1
  372. package/dist/shared/localize.js +1 -1
  373. package/dist/shared/luxen-form-associated-element.d.ts.map +1 -1
  374. package/dist/shared/rich-option.d.ts +20 -0
  375. package/dist/shared/rich-option.d.ts.map +1 -0
  376. package/dist/shared/rich-option.js +82 -0
  377. package/dist/shared/styles/badge-core.css +221 -0
  378. package/dist/shared/styles/badge-core.styles.d.ts +9 -0
  379. package/dist/shared/styles/badge-core.styles.d.ts.map +1 -0
  380. package/dist/shared/styles/badge-core.styles.js +9 -0
  381. package/dist/shared/styles/button-core.styles.d.ts.map +1 -1
  382. package/dist/shared/styles/checkbox-appearance.styles.d.ts.map +1 -1
  383. package/dist/shared/styles/host.styles.d.ts.map +1 -1
  384. package/dist/shared/styles/select-item-suffix.css +60 -0
  385. package/dist/shared/styles/select-item-suffix.styles.d.ts +8 -0
  386. package/dist/shared/styles/select-item-suffix.styles.d.ts.map +1 -0
  387. package/dist/shared/styles/select-item-suffix.styles.js +8 -0
  388. package/dist/templates/elements/combobox.md +155 -1
  389. package/dist/templates/elements/prose-editor.md +2 -1
  390. package/dist/templates/elements/radio-group.md +2 -2
  391. package/dist/templates/elements/select.md +212 -3
  392. package/dist/templates/elements/textarea.md +2 -4
  393. package/dist/translations/en.d.ts.map +1 -1
  394. package/dist/translations/fr.d.ts.map +1 -1
  395. package/dist/translations/ko.d.ts.map +1 -1
  396. package/package.json +21 -21
@@ -1,209 +1,229 @@
1
+ /*
2
+ * The badge appearance lives in badge-core.css so shadow-DOM elements that render
3
+ * rich content (l-select / l-combobox options) can adopt it too; layered here
4
+ * into `@layer components`.
5
+ */
1
6
  @layer components {
7
+
8
+ /*
9
+ * Shared `l-badge` appearance — the single source of truth for the badge's look.
10
+ * Lives in the HTML tree so it is both:
11
+ * - `@import`ed (and layered) by src/css/elements/badge.css for light-DOM
12
+ * badges, and
13
+ * - imported `?inline` into shadow-DOM elements whose rendered content can
14
+ * carry a badge (l-select / l-combobox copy each rich option's markup into
15
+ * their shadow root, where the global badge stylesheet cannot reach).
16
+ *
17
+ * Intentionally UNLAYERED, like button-core.css: the light-DOM import wraps it in
18
+ * `@layer components` via `@import … layer(components)`, while shadow consumers
19
+ * want it unlayered alongside their own (also unlayered) styles.
20
+ */
21
+
22
+ /*
23
+ Autonomous custom elements
24
+ https://blog.jim-nielsen.com/2021/custom-elements-without-js/
25
+ */
26
+ l-badge {
27
+ /* Per-variant primitives — set by [variant], consumed by appearance. The
28
+ public hooks that override them are threaded at the declaration sites
29
+ below rather than here, so this whole machinery stays untouched: a
30
+ consumer value is not competing with `[variant]` / `[appearance]` /
31
+ `[pill]` on specificity, it sits under them.
32
+
33
+ Four hooks, and each one earns its place by hiding something a consumer
34
+ would otherwise have to know:
35
+
36
+ --text-color the line is a tint of it, so one declaration
37
+ repaints the whole chip
38
+ --background-color which per-appearance token it is replacing
39
+ --border-color the 30% mix, and that it holds through `filled`,
40
+ whose default line is transparent
41
+ --border-radius that the corner is a squircle, not a plain arc
42
+
43
+ Size and spacing get no hook on purpose. `--height` / `--font-size` /
44
+ `--padding-inline` would be pass-throughs to the identically named
45
+ properties declared a few lines below, hiding nothing — and `size` is
46
+ already the API for that axis. Three steps are the design; a badge that
47
+ can be dialled to any height stops being a size step and starts being a
48
+ box.
49
+
50
+ The line derives from `currentColor` rather than from `--_text-color`, so
51
+ it follows the ink whoever set it — the hook, a variant, or a consumer's
52
+ own `color` declaration. */
53
+ --_text-color: var(--l-color-text-neutral);
54
+ --_background-color: transparent;
55
+ --_border-color: color-mix(in oklab, currentColor 30%, transparent);
56
+ --_border-radius: var(--l-radius-md);
57
+
58
+ /* Size defaults (md) */
59
+ --_height: 1.375rem;
60
+ --_font-size: var(--l-text-xs);
61
+ --_padding-inline: 0.375rem;
62
+ --_gap: 0.25rem;
63
+
64
+ display: inline-flex;
65
+ align-items: center;
66
+ gap: var(--_gap);
67
+ min-height: var(--_height);
68
+ padding-block: 0.25rem;
69
+ padding-inline: var(--_padding-inline);
70
+ border: 1px solid var(--border-color, var(--_border-color));
71
+ border-radius: var(--border-radius, var(--_border-radius));
72
+ corner-shape: squircle;
73
+ background-color: var(--background-color, var(--_background-color));
74
+ color: var(--text-color, var(--_text-color));
75
+ font-family: var(--l-font-neo-grotesque);
76
+ font-size: var(--_font-size);
77
+ font-weight: var(--l-font-weight-medium);
78
+ line-height: 1;
79
+ text-box: trim-both cap alphabetic;
80
+
2
81
  /*
3
- Autonomous custom elements
4
- https://blog.jim-nielsen.com/2021/custom-elements-without-js/
82
+ ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
83
+ 🆂🅸🆉🅴🆂
84
+ ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
5
85
  */
6
- l-badge {
7
- /* Per-variant primitives — set by [variant], consumed by appearance. The
8
- public hooks that override them are threaded at the declaration sites
9
- below rather than here, so this whole machinery stays untouched: a
10
- consumer value is not competing with `[variant]` / `[appearance]` /
11
- `[pill]` on specificity, it sits under them.
12
-
13
- Four hooks, and each one earns its place by hiding something a consumer
14
- would otherwise have to know:
15
-
16
- --text-color the line is a tint of it, so one declaration
17
- repaints the whole chip
18
- --background-color which per-appearance token it is replacing
19
- --border-color the 30% mix, and that it holds through `filled`,
20
- whose default line is transparent
21
- --border-radius that the corner is a squircle, not a plain arc
22
-
23
- Size and spacing get no hook on purpose. `--height` / `--font-size` /
24
- `--padding-inline` would be pass-throughs to the identically named
25
- properties declared a few lines below, hiding nothing — and `size` is
26
- already the API for that axis. Three steps are the design; a badge that
27
- can be dialled to any height stops being a size step and starts being a
28
- box.
29
-
30
- The line derives from `currentColor` rather than from `--_text-color`, so
31
- it follows the ink whoever set it — the hook, a variant, or a consumer's
32
- own `color` declaration. */
33
- --_text-color: var(--l-color-text-neutral);
34
- --_background-color: transparent;
35
- --_border-color: color-mix(in oklab, currentColor 30%, transparent);
36
- --_border-radius: var(--l-radius-md);
37
-
38
- /* Size defaults (md) */
39
- --_height: 1.375rem;
40
- --_font-size: var(--l-text-xs);
41
- --_padding-inline: 0.375rem;
42
- --_gap: 0.25rem;
43
-
44
- display: inline-flex;
45
- align-items: center;
46
- gap: var(--_gap);
47
- min-height: var(--_height);
48
- padding-block: 0.25rem;
49
- padding-inline: var(--_padding-inline);
50
- border: 1px solid var(--border-color, var(--_border-color));
51
- border-radius: var(--border-radius, var(--_border-radius));
52
- corner-shape: squircle;
53
- background-color: var(--background-color, var(--_background-color));
54
- color: var(--text-color, var(--_text-color));
55
- font-family: var(--l-font-neo-grotesque);
56
- font-size: var(--_font-size);
57
- font-weight: var(--l-font-weight-medium);
58
- line-height: 1;
59
- text-box: trim-both cap alphabetic;
60
-
61
- /*
62
- ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
63
- 🆂🅸🆉🅴🆂
64
- ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
65
- */
66
-
67
- &[size='sm'] {
68
- --_height: 1.25rem;
69
- --_padding-inline: 0.25rem;
70
- --_gap: 0.125rem;
71
- }
72
- &[size='lg'] {
73
- --_height: 1.5rem;
74
- --_font-size: var(--l-text-sm);
75
- --_padding-inline: 0.5rem;
76
- }
77
86
 
78
- /*
79
- ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
80
- 🆅🅰🆁🅸🅰🅽🆃🆂
81
- ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
82
- */
87
+ &[size='sm'] {
88
+ --_height: 1.25rem;
89
+ --_padding-inline: 0.25rem;
90
+ --_gap: 0.125rem;
91
+ }
92
+ &[size='lg'] {
93
+ --_height: 1.5rem;
94
+ --_font-size: var(--l-text-sm);
95
+ --_padding-inline: 0.5rem;
96
+ }
97
+
98
+ /*
99
+ ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
100
+ 🆅🅰🆁🅸🅰🅽🆃🆂
101
+ ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
102
+ */
103
+
104
+ &[variant='info'] {
105
+ --_text-color: var(--l-color-text-info);
106
+ }
107
+ &[variant='success'] {
108
+ --_text-color: var(--l-color-text-success);
109
+ }
110
+ &[variant='warning'] {
111
+ --_text-color: var(--l-color-text-warning);
112
+ }
113
+ &[variant='danger'] {
114
+ --_text-color: var(--l-color-text-danger);
115
+ }
116
+
117
+ /*
118
+ ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
119
+ 🅰🅿🅿🅴🅰🆁🅰🅽🅲🅴
120
+ ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
121
+ */
122
+
123
+ &[appearance='filled'] {
124
+ --_background-color: var(--l-color-bg-fill-neutral-subtle);
125
+ --_border-color: transparent;
83
126
 
84
127
  &[variant='info'] {
85
- --_text-color: var(--l-color-text-info);
128
+ --_background-color: var(--l-color-bg-fill-info-subtle);
86
129
  }
87
130
  &[variant='success'] {
88
- --_text-color: var(--l-color-text-success);
131
+ --_background-color: var(--l-color-bg-fill-success-subtle);
89
132
  }
90
133
  &[variant='warning'] {
91
- --_text-color: var(--l-color-text-warning);
134
+ --_background-color: var(--l-color-bg-fill-warning-subtle);
92
135
  }
93
136
  &[variant='danger'] {
94
- --_text-color: var(--l-color-text-danger);
137
+ --_background-color: var(--l-color-bg-fill-danger-subtle);
95
138
  }
139
+ }
96
140
 
97
- /*
98
- ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
99
- 🅰🅿🅿🅴🅰🆁🅰🅽🅲🅴
100
- ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
101
- */
102
-
103
- &[appearance='filled'] {
104
- --_background-color: var(--l-color-bg-fill-neutral-subtle);
105
- --_border-color: transparent;
106
-
107
- &[variant='info'] {
108
- --_background-color: var(--l-color-bg-fill-info-subtle);
109
- }
110
- &[variant='success'] {
111
- --_background-color: var(--l-color-bg-fill-success-subtle);
112
- }
113
- &[variant='warning'] {
114
- --_background-color: var(--l-color-bg-fill-warning-subtle);
115
- }
116
- &[variant='danger'] {
117
- --_background-color: var(--l-color-bg-fill-danger-subtle);
118
- }
119
- }
141
+ &[appearance='filled-outlined'] {
142
+ --_background-color: var(--l-color-bg-fill-neutral-subtle);
120
143
 
121
- &[appearance='filled-outlined'] {
122
- --_background-color: var(--l-color-bg-fill-neutral-subtle);
123
-
124
- &[variant='info'] {
125
- --_background-color: var(--l-color-bg-fill-info-subtle);
126
- }
127
- &[variant='success'] {
128
- --_background-color: var(--l-color-bg-fill-success-subtle);
129
- }
130
- &[variant='warning'] {
131
- --_background-color: var(--l-color-bg-fill-warning-subtle);
132
- }
133
- &[variant='danger'] {
134
- --_background-color: var(--l-color-bg-fill-danger-subtle);
135
- }
144
+ &[variant='info'] {
145
+ --_background-color: var(--l-color-bg-fill-info-subtle);
136
146
  }
137
-
138
- &[appearance='accent'] {
139
- --_background-color: var(--l-color-bg-fill-neutral-strong);
140
- --_text-color: var(--l-color-surface);
141
- --_border-color: transparent;
142
-
143
- &[variant='info'] {
144
- --_background-color: var(--l-color-bg-fill-info-strong);
145
- --_text-color: white;
146
- }
147
- &[variant='success'] {
148
- --_background-color: var(--l-color-bg-fill-success-strong);
149
- }
150
- &[variant='warning'] {
151
- --_background-color: var(--l-color-bg-fill-warning-strong);
152
- }
153
- &[variant='danger'] {
154
- --_background-color: var(--l-color-bg-fill-danger-strong);
155
- --_text-color: white;
156
- }
147
+ &[variant='success'] {
148
+ --_background-color: var(--l-color-bg-fill-success-subtle);
157
149
  }
158
-
159
- /*
160
- ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
161
- 🅿🅸🅻🅻
162
- ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
163
- */
164
-
165
- /* `--border-radius` keeps the squircle; `pill` is what trades it for a true
166
- arc, because a squircle at a full radius reads as a blob. */
167
- &[pill] {
168
- --_border-radius: var(--l-radius-full);
169
- corner-shape: unset;
150
+ &[variant='warning'] {
151
+ --_background-color: var(--l-color-bg-fill-warning-subtle);
152
+ }
153
+ &[variant='danger'] {
154
+ --_background-color: var(--l-color-bg-fill-danger-subtle);
170
155
  }
156
+ }
171
157
 
172
- /*
173
- ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
174
- 🅸🅲🅾🅽
175
- ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
176
- */
158
+ &[appearance='accent'] {
159
+ --_background-color: var(--l-color-bg-fill-neutral-strong);
160
+ --_text-color: var(--l-color-surface);
161
+ --_border-color: transparent;
177
162
 
178
- iconify-icon {
179
- color: currentColor;
180
- height: 1em;
163
+ &[variant='info'] {
164
+ --_background-color: var(--l-color-bg-fill-info-strong);
165
+ --_text-color: white;
166
+ }
167
+ &[variant='success'] {
168
+ --_background-color: var(--l-color-bg-fill-success-strong);
169
+ }
170
+ &[variant='warning'] {
171
+ --_background-color: var(--l-color-bg-fill-warning-strong);
172
+ }
173
+ &[variant='danger'] {
174
+ --_background-color: var(--l-color-bg-fill-danger-strong);
175
+ --_text-color: white;
181
176
  }
182
177
  }
183
178
 
184
- /* A glyph against an edge earns a tighter padding on that side: its bounding
185
- box already reads as air, so the label keeps the full gutter and the chip
186
- does not go lopsided.
187
-
188
- Matches whichever icon element the consumer composes — the library's own
189
- `l-icon`, a raw `iconify-icon`, or the inline `<svg>` a framework Iconify
190
- binding renders. `l-icon` needs naming explicitly: its `iconify-icon` sits
191
- in a shadow root this selector cannot see, so matching the inner element
192
- alone silently skipped the correction (the icon still laid out — `l-icon`
193
- is `display: contents` — it just sat 2px too far in). Same element set
194
- `toast.css` and `story.css` already use. */
195
- l-badge:has(:is(iconify-icon, l-icon, svg):first-child) {
196
- padding-inline-start: 0.25rem;
179
+ /*
180
+ ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
181
+ 🅿🅸🅻🅻
182
+ ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
183
+ */
184
+
185
+ /* `--border-radius` keeps the squircle; `pill` is what trades it for a true
186
+ arc, because a squircle at a full radius reads as a blob. */
187
+ &[pill] {
188
+ --_border-radius: var(--l-radius-full);
189
+ corner-shape: unset;
197
190
  }
198
191
 
199
- /* `:not(:first-child)` is what makes a trailing icon addressable at all.
200
- `:first-child` and `:last-child` count elements, not text, so an icon that
201
- is the badge's only element child matches both — `<l-badge>Lyon <l-icon/>`
202
- is indistinguishable from `<l-badge><l-icon/>Lyon`, and the rule above
203
- already claims it. Requiring a preceding element keeps that case exactly as
204
- it was and makes this one exact: wrap the label (`<span>Lyon</span>`) and
205
- the icon is unambiguously at the end. */
206
- l-badge:has(:is(iconify-icon, l-icon, svg):last-child:not(:first-child)) {
207
- padding-inline-end: 0.25rem;
192
+ /*
193
+ ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
194
+ 🅸🅲🅾🅽
195
+ ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
196
+ */
197
+
198
+ iconify-icon {
199
+ color: currentColor;
200
+ height: 1em;
208
201
  }
209
202
  }
203
+
204
+ /* A glyph against an edge earns a tighter padding on that side: its bounding
205
+ box already reads as air, so the label keeps the full gutter and the chip
206
+ does not go lopsided.
207
+
208
+ Matches whichever icon element the consumer composes — the library's own
209
+ `l-icon`, a raw `iconify-icon`, or the inline `<svg>` a framework Iconify
210
+ binding renders. `l-icon` needs naming explicitly: its `iconify-icon` sits
211
+ in a shadow root this selector cannot see, so matching the inner element
212
+ alone silently skipped the correction (the icon still laid out — `l-icon`
213
+ is `display: contents` — it just sat 2px too far in). Same element set
214
+ `toast.css` and `story.css` already use. */
215
+ l-badge:has(:is(iconify-icon, l-icon, svg):first-child) {
216
+ padding-inline-start: 0.25rem;
217
+ }
218
+
219
+ /* `:not(:first-child)` is what makes a trailing icon addressable at all.
220
+ `:first-child` and `:last-child` count elements, not text, so an icon that
221
+ is the badge's only element child matches both — `<l-badge>Lyon <l-icon/>`
222
+ is indistinguishable from `<l-badge><l-icon/>Lyon`, and the rule above
223
+ already claims it. Requiring a preceding element keeps that case exactly as
224
+ it was and makes this one exact: wrap the label (`<span>Lyon</span>`) and
225
+ the icon is unambiguously at the end. */
226
+ l-badge:has(:is(iconify-icon, l-icon, svg):last-child:not(:first-child)) {
227
+ padding-inline-end: 0.25rem;
228
+ }
229
+ }
@@ -5,9 +5,7 @@
5
5
  `<l-tree-item>` in `selection="multiple"`). The `.l-checkbox` class is the
6
6
  canonical primitive (works anywhere); `l-form-field` also auto-styles a bare
7
7
  checkbox via a zero-specificity `:where()` selector, so inside a field no
8
- class is needed (`unstyled` opts out). See the partial for details. */
9
-
10
- /* Shared checkbox appearance — the visual skin behind `.l-checkbox`.
8
+ class is needed (`unstyled` opts out). See the partial for details. *//* Shared checkbox appearance — the visual skin behind `.l-checkbox`.
11
9
 
12
10
  Colocated with its `checkbox-appearance.styles.ts` wrapper so Shadow-DOM
13
11
  elements that render their own native checkbox (e.g. `<l-tree-item>` in
@@ -164,7 +162,6 @@
164
162
  `checkbox-appearance.css` partial: that partial is also loaded into Shadow-DOM
165
163
  consumers (e.g. `l-tree-item`), which never opted into a hover glow. Mirrors
166
164
  the radio and switch hover language (same `--_halo` flip, same ratio token). */
167
-
168
165
  @layer components {
169
166
  .l-checkbox,
170
167
  :where(l-form-field:not([unstyled])) > input[type='checkbox']:not([role='switch']) {
@@ -12,6 +12,73 @@
12
12
  - the picker (::picker(select)) and its items mirror the l-dropdown panel
13
13
  (--l-color-surface-overlay / --l-color-border-overlay / --l-shadow-md). */
14
14
 
15
+ /* The rich-option suffix (`.l-select-item-suffix`) is shared with the
16
+ l-select / l-combobox shadow roots from select-item-suffix.css. */
17
+
18
+ @layer components {
19
+
20
+ /*
21
+ * Suffix of a rich option (`.l-select-item-suffix`) — a badge, count or
22
+ * status icon pinned to the inline-end of the row, after `.l-select-item-text`.
23
+ * One source for every tier, so they cannot drift apart:
24
+ * - `@import`ed (and layered) by src/css/elements/select.css for the native
25
+ * `select.l-select` picker, where `.l-select option` is the row, and
26
+ * - imported `?inline` into the l-select / l-combobox shadow roots, which copy
27
+ * each option's markup and cannot reach the global stylesheet; there
28
+ * `:host .option-rich` is the row. `:host` never matches in a document, so
29
+ * the light-DOM copy cannot reach a consumer's own `.option-rich`.
30
+ *
31
+ * A class, not a `slot="suffix"` attribute hook: in a customizable select the
32
+ * <option> has its own UA shadow root, so a child carrying a `slot` it has no
33
+ * slot for is not rendered at all. A class keeps one markup for every tier.
34
+ *
35
+ * Intentionally UNLAYERED, like button-core.css. Each tier hides the suffix in
36
+ * its own trigger next to its description rule.
37
+ */
38
+
39
+ /* The row's line box as an absolute length — the title's line, since the title
40
+ inherits the row's font and line-height. Registered so `1lh` resolves on the
41
+ row and is inherited as a length; unregistered it would resolve on the
42
+ smaller suffix. A shadow root ignores this rule, so rich-option.ts also
43
+ registers it from JS. */
44
+ @property --_select-item-line {
45
+ syntax: '<length>';
46
+ inherits: true;
47
+ initial-value: 0px;
48
+ }
49
+
50
+ :is(.l-select option, :host .option-rich) {
51
+ --_select-item-line: 1lh;
52
+ }
53
+
54
+ .l-select-item-suffix {
55
+ display: inline-flex;
56
+ /* Never shrinks: the text column gives way first and its title truncates. */
57
+ flex: 0 0 auto;
58
+ align-items: center;
59
+ /* Sits on the title's line rather than the row's middle — like the checkmark
60
+ and the media — so a wrapping description never moves it: a box exactly one
61
+ title line tall, pinned to the top, centres its content on that line. Content
62
+ taller than the line (a badge in a tight row, an avatar) overflows it evenly
63
+ above and below, into the row's padding, and never moves the title. */
64
+ align-self: flex-start;
65
+ block-size: var(--_select-item-line);
66
+ gap: 0.25rem;
67
+ margin-inline-start: auto;
68
+ white-space: nowrap;
69
+ color: var(--l-color-text-tertiary);
70
+ font-size: 0.75rem;
71
+ }
72
+
73
+ /* In a picker row that carries a suffix, the text column is pinned to the top
74
+ too, so the title shares the suffix's line in a centred row (l-combobox).
75
+ Scoped to the rows: the trigger's copy of the selected option (where the
76
+ suffix is hidden) keeps its own centring. */
77
+ :is(.l-select option, :host .option-rich) > .l-select-item-text:has(~ .l-select-item-suffix) {
78
+ align-self: flex-start;
79
+ }
80
+ }
81
+
15
82
  @layer components {
16
83
  .l-select {
17
84
  /* Public knobs — mirror l-input so a select sits consistently among the
@@ -111,9 +178,10 @@
111
178
  overflow: hidden;
112
179
  }
113
180
 
114
- /* Keep the trigger compact when a rich option is selected: only the title
115
- is mirrored into the value, the secondary description is dropped. */
116
- & selectedcontent .l-select-item-description {
181
+ /* Keep the trigger compact when a rich option is selected: only the media
182
+ and title are mirrored into the value — the secondary description and the
183
+ suffix (badge, count, status icon) stay in the picker. */
184
+ & selectedcontent :is(.l-select-item-description, .l-select-item-suffix) {
117
185
  display: none;
118
186
  }
119
187