luxen-ui 0.14.0 → 0.16.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 (122) hide show
  1. package/README.md +2 -1
  2. package/bin/cli.mjs +6 -0
  3. package/cdn/chunks/unsafe-html.js +2 -0
  4. package/cdn/chunks/unsafe-html.js.map +1 -0
  5. package/cdn/custom-elements.json +822 -353
  6. package/cdn/elements/combobox/combobox.d.ts +1 -4
  7. package/cdn/elements/combobox/combobox.d.ts.map +1 -1
  8. package/cdn/elements/combobox/combobox.js +14 -14
  9. package/cdn/elements/combobox/combobox.js.map +1 -1
  10. package/cdn/elements/disclosure/disclosure.meta.d.ts +1 -0
  11. package/cdn/elements/disclosure/disclosure.meta.d.ts.map +1 -1
  12. package/cdn/elements/dropdown/dropdown.d.ts.map +1 -1
  13. package/cdn/elements/dropdown/dropdown.js +1 -1
  14. package/cdn/elements/dropdown/dropdown.js.map +1 -1
  15. package/cdn/elements/select/index.d.ts +2 -0
  16. package/cdn/elements/select/index.d.ts.map +1 -0
  17. package/cdn/elements/select/index.js +2 -0
  18. package/cdn/elements/select/index.js.map +1 -0
  19. package/cdn/elements/select/select.d.ts +144 -0
  20. package/cdn/elements/select/select.d.ts.map +1 -0
  21. package/cdn/elements/select/select.js +124 -0
  22. package/cdn/elements/select/select.js.map +1 -0
  23. package/cdn/elements/tabs/tabs.d.ts +3 -1
  24. package/cdn/elements/tabs/tabs.d.ts.map +1 -1
  25. package/cdn/elements/tabs/tabs.js.map +1 -1
  26. package/cdn/elements/tag/index.d.ts +2 -0
  27. package/cdn/elements/tag/index.d.ts.map +1 -0
  28. package/cdn/elements/tag/index.js +2 -0
  29. package/cdn/elements/tag/index.js.map +1 -0
  30. package/cdn/elements/tag/tag.d.ts +58 -0
  31. package/cdn/elements/tag/tag.d.ts.map +1 -0
  32. package/cdn/elements/tag/tag.js +24 -0
  33. package/cdn/elements/tag/tag.js.map +1 -0
  34. package/cdn/elements/tooltip/tooltip.d.ts +17 -0
  35. package/cdn/elements/tooltip/tooltip.d.ts.map +1 -1
  36. package/cdn/elements/tooltip/tooltip.js +2 -2
  37. package/cdn/elements/tooltip/tooltip.js.map +1 -1
  38. package/cdn/registry.d.ts +1 -1
  39. package/cdn/registry.d.ts.map +1 -1
  40. package/cdn/registry.js.map +1 -1
  41. package/cdn/shared/controllers/listbox-nav.d.ts +56 -0
  42. package/cdn/shared/controllers/listbox-nav.d.ts.map +1 -0
  43. package/cdn/shared/controllers/listbox-nav.js +2 -0
  44. package/cdn/shared/controllers/listbox-nav.js.map +1 -0
  45. package/cdn/shared/localize.d.ts +2 -0
  46. package/cdn/shared/localize.d.ts.map +1 -1
  47. package/cdn/shared/localize.js.map +1 -1
  48. package/cdn/standalone.css +55 -21
  49. package/cdn/standalone.js +33 -27
  50. package/cdn/standalone.js.map +1 -1
  51. package/cdn/styles/elements/disclosure.css +16 -0
  52. package/cdn/styles/elements/select.css +11 -3
  53. package/cdn/styles/elements/tabs/enclosed.css +14 -9
  54. package/cdn/styles/elements/tabs/line.css +14 -9
  55. package/cdn/translations/en.d.ts.map +1 -1
  56. package/cdn/translations/en.js +1 -1
  57. package/cdn/translations/en.js.map +1 -1
  58. package/dist/css/elements/disclosure.css +16 -0
  59. package/dist/css/elements/select.css +11 -3
  60. package/dist/css/elements/tabs/enclosed.css +14 -9
  61. package/dist/css/elements/tabs/line.css +14 -9
  62. package/dist/custom-elements.json +822 -353
  63. package/dist/elements/combobox/combobox.d.ts +1 -4
  64. package/dist/elements/combobox/combobox.d.ts.map +1 -1
  65. package/dist/elements/combobox/combobox.js +29 -68
  66. package/dist/elements/disclosure/disclosure.meta.d.ts +1 -0
  67. package/dist/elements/disclosure/disclosure.meta.d.ts.map +1 -1
  68. package/dist/elements/disclosure/disclosure.meta.js +1 -0
  69. package/dist/elements/dropdown/dropdown.d.ts.map +1 -1
  70. package/dist/elements/dropdown/dropdown.js +17 -2
  71. package/dist/elements/select/index.d.ts +2 -0
  72. package/dist/elements/select/index.d.ts.map +1 -0
  73. package/dist/elements/select/index.js +4 -0
  74. package/dist/elements/select/select.css +370 -0
  75. package/dist/elements/select/select.d.ts +145 -0
  76. package/dist/elements/select/select.d.ts.map +1 -0
  77. package/dist/elements/select/select.js +603 -0
  78. package/dist/elements/tabs/tabs.d.ts +3 -1
  79. package/dist/elements/tabs/tabs.d.ts.map +1 -1
  80. package/dist/elements/tabs/tabs.js +3 -1
  81. package/dist/elements/tag/index.d.ts +2 -0
  82. package/dist/elements/tag/index.d.ts.map +1 -0
  83. package/dist/elements/tag/index.js +4 -0
  84. package/dist/elements/tag/tag.css +166 -0
  85. package/dist/elements/tag/tag.d.ts +58 -0
  86. package/dist/elements/tag/tag.d.ts.map +1 -0
  87. package/dist/elements/tag/tag.js +136 -0
  88. package/dist/elements/tooltip/tooltip.css +28 -5
  89. package/dist/elements/tooltip/tooltip.d.ts +17 -0
  90. package/dist/elements/tooltip/tooltip.d.ts.map +1 -1
  91. package/dist/elements/tooltip/tooltip.js +108 -9
  92. package/dist/metadata/disclosure.json +9 -0
  93. package/dist/metadata/index.json +297 -64
  94. package/dist/metadata/select.json +168 -62
  95. package/dist/metadata/tabs.json +2 -2
  96. package/dist/metadata/tag.json +102 -0
  97. package/dist/metadata/tooltip.json +17 -1
  98. package/dist/registry.d.ts +1 -1
  99. package/dist/registry.d.ts.map +1 -1
  100. package/dist/shared/controllers/listbox-nav.d.ts +56 -0
  101. package/dist/shared/controllers/listbox-nav.d.ts.map +1 -0
  102. package/dist/shared/controllers/listbox-nav.js +100 -0
  103. package/dist/shared/localize.d.ts +2 -0
  104. package/dist/shared/localize.d.ts.map +1 -1
  105. package/dist/templates/elements/disclosure.md +28 -0
  106. package/dist/templates/elements/select.md +180 -59
  107. package/dist/templates/elements/tabs.md +31 -6
  108. package/dist/templates/elements/tag.md +121 -0
  109. package/dist/templates/elements/tooltip.md +36 -0
  110. package/dist/translations/en.d.ts.map +1 -1
  111. package/dist/translations/en.js +2 -0
  112. package/elements.json +11 -3
  113. package/package.json +1 -1
  114. package/postcss-plugin-prefix.js +10 -0
  115. package/templates/SKILL.md.tpl +4 -0
  116. package/templates/choosing-elements.md.tpl +170 -0
  117. package/cdn/elements/select/select.meta.d.ts +0 -35
  118. package/cdn/elements/select/select.meta.d.ts.map +0 -1
  119. package/cdn/elements/select/select.meta.js +0 -0
  120. package/dist/elements/select/select.meta.d.ts +0 -35
  121. package/dist/elements/select/select.meta.d.ts.map +0 -1
  122. package/dist/elements/select/select.meta.js +0 -41
@@ -172,181 +172,6 @@
172
172
  }
173
173
  ]
174
174
  },
175
- {
176
- "kind": "javascript-module",
177
- "path": "src/html/elements/avatar/avatar.ts",
178
- "declarations": [
179
- {
180
- "kind": "class",
181
- "description": "",
182
- "name": "Avatar",
183
- "cssProperties": [
184
- {
185
- "description": "Box size (any length). Set it inline (e.g. `style=\"--size: 20px\"`) for an arbitrary size beyond the `size` token scale; the font then follows proportionally. The `size` attribute sets it to the matching token.",
186
- "name": "--size",
187
- "default": "40px"
188
- },
189
- {
190
- "description": "Background fill color for initials and the default icon.",
191
- "name": "--color"
192
- },
193
- {
194
- "description": "Initials/icon color over `--color`. Defaults to an auto-derived readable color; set it to enforce a specific brand color (overrides the automatic choice).",
195
- "name": "--text-color"
196
- },
197
- {
198
- "description": "Set to `circle` for a fully circular avatar (default is a rounded square).",
199
- "name": "--appearance"
200
- }
201
- ],
202
- "cssParts": [
203
- {
204
- "description": "The avatar container that paints `--color`; style it (e.g. `color`) to override the auto-derived text color.",
205
- "name": "base"
206
- }
207
- ],
208
- "members": [
209
- {
210
- "kind": "field",
211
- "name": "src",
212
- "type": {
213
- "text": "string"
214
- },
215
- "default": "''",
216
- "description": "Image URL. Falls back to initials (then the default icon) if it fails to load.",
217
- "attribute": "src"
218
- },
219
- {
220
- "kind": "field",
221
- "name": "name",
222
- "type": {
223
- "text": "string"
224
- },
225
- "default": "''",
226
- "description": "Name used as the accessible label and to derive the initials fallback.",
227
- "attribute": "name"
228
- },
229
- {
230
- "kind": "field",
231
- "name": "size",
232
- "type": {
233
- "text": "string"
234
- },
235
- "default": "'md'",
236
- "description": "Avatar size: `xs`, `sm`, `md` (default), `lg`, or `xl`.",
237
- "attribute": "size",
238
- "reflects": true
239
- },
240
- {
241
- "kind": "field",
242
- "name": "badge",
243
- "type": {
244
- "text": "number"
245
- },
246
- "default": "0",
247
- "description": "Count shown in the corner badge. `0` hides the badge.",
248
- "attribute": "badge"
249
- },
250
- {
251
- "kind": "field",
252
- "name": "interactive",
253
- "type": {
254
- "text": "boolean"
255
- },
256
- "default": "false",
257
- "description": "Render as a `<button>` with focus ring and hover states.",
258
- "attribute": "interactive",
259
- "reflects": true
260
- }
261
- ],
262
- "attributes": [
263
- {
264
- "name": "src",
265
- "type": {
266
- "text": "string"
267
- },
268
- "default": "''",
269
- "description": "Image URL. Falls back to initials (then the default icon) if it fails to load.",
270
- "fieldName": "src"
271
- },
272
- {
273
- "name": "name",
274
- "type": {
275
- "text": "string"
276
- },
277
- "default": "''",
278
- "description": "Name used as the accessible label and to derive the initials fallback.",
279
- "fieldName": "name"
280
- },
281
- {
282
- "name": "size",
283
- "type": {
284
- "text": "string"
285
- },
286
- "default": "'md'",
287
- "description": "Avatar size: `xs`, `sm`, `md` (default), `lg`, or `xl`.",
288
- "fieldName": "size"
289
- },
290
- {
291
- "name": "badge",
292
- "type": {
293
- "text": "number"
294
- },
295
- "default": "0",
296
- "description": "Count shown in the corner badge. `0` hides the badge.",
297
- "fieldName": "badge"
298
- },
299
- {
300
- "name": "interactive",
301
- "type": {
302
- "text": "boolean"
303
- },
304
- "default": "false",
305
- "description": "Render as a `<button>` with focus ring and hover states.",
306
- "fieldName": "interactive"
307
- }
308
- ],
309
- "superclass": {
310
- "name": "LuxenElement",
311
- "module": "/src/html/shared/luxen-element.js"
312
- },
313
- "tagName": "l-avatar",
314
- "customElement": true,
315
- "summary": "An avatar component for displaying user images, initials, or a default icon.",
316
- "_cssClasses": [
317
- {
318
- "name": ".l-avatar-group",
319
- "description": "Flex wrapper that overlaps a row of stacked avatars."
320
- }
321
- ]
322
- }
323
- ],
324
- "exports": [
325
- {
326
- "kind": "js",
327
- "name": "Avatar",
328
- "declaration": {
329
- "name": "Avatar",
330
- "module": "src/html/elements/avatar/avatar.ts"
331
- }
332
- }
333
- ]
334
- },
335
- {
336
- "kind": "javascript-module",
337
- "path": "src/html/elements/avatar/index.ts",
338
- "declarations": [],
339
- "exports": [
340
- {
341
- "kind": "js",
342
- "name": "*",
343
- "declaration": {
344
- "name": "*",
345
- "module": "src/html/elements/avatar/avatar.js"
346
- }
347
- }
348
- ]
349
- },
350
175
  {
351
176
  "kind": "javascript-module",
352
177
  "path": "src/html/elements/alert-dialog/alert-dialog.ts",
@@ -827,6 +652,181 @@
827
652
  }
828
653
  ]
829
654
  },
655
+ {
656
+ "kind": "javascript-module",
657
+ "path": "src/html/elements/avatar/avatar.ts",
658
+ "declarations": [
659
+ {
660
+ "kind": "class",
661
+ "description": "",
662
+ "name": "Avatar",
663
+ "cssProperties": [
664
+ {
665
+ "description": "Box size (any length). Set it inline (e.g. `style=\"--size: 20px\"`) for an arbitrary size beyond the `size` token scale; the font then follows proportionally. The `size` attribute sets it to the matching token.",
666
+ "name": "--size",
667
+ "default": "40px"
668
+ },
669
+ {
670
+ "description": "Background fill color for initials and the default icon.",
671
+ "name": "--color"
672
+ },
673
+ {
674
+ "description": "Initials/icon color over `--color`. Defaults to an auto-derived readable color; set it to enforce a specific brand color (overrides the automatic choice).",
675
+ "name": "--text-color"
676
+ },
677
+ {
678
+ "description": "Set to `circle` for a fully circular avatar (default is a rounded square).",
679
+ "name": "--appearance"
680
+ }
681
+ ],
682
+ "cssParts": [
683
+ {
684
+ "description": "The avatar container that paints `--color`; style it (e.g. `color`) to override the auto-derived text color.",
685
+ "name": "base"
686
+ }
687
+ ],
688
+ "members": [
689
+ {
690
+ "kind": "field",
691
+ "name": "src",
692
+ "type": {
693
+ "text": "string"
694
+ },
695
+ "default": "''",
696
+ "description": "Image URL. Falls back to initials (then the default icon) if it fails to load.",
697
+ "attribute": "src"
698
+ },
699
+ {
700
+ "kind": "field",
701
+ "name": "name",
702
+ "type": {
703
+ "text": "string"
704
+ },
705
+ "default": "''",
706
+ "description": "Name used as the accessible label and to derive the initials fallback.",
707
+ "attribute": "name"
708
+ },
709
+ {
710
+ "kind": "field",
711
+ "name": "size",
712
+ "type": {
713
+ "text": "string"
714
+ },
715
+ "default": "'md'",
716
+ "description": "Avatar size: `xs`, `sm`, `md` (default), `lg`, or `xl`.",
717
+ "attribute": "size",
718
+ "reflects": true
719
+ },
720
+ {
721
+ "kind": "field",
722
+ "name": "badge",
723
+ "type": {
724
+ "text": "number"
725
+ },
726
+ "default": "0",
727
+ "description": "Count shown in the corner badge. `0` hides the badge.",
728
+ "attribute": "badge"
729
+ },
730
+ {
731
+ "kind": "field",
732
+ "name": "interactive",
733
+ "type": {
734
+ "text": "boolean"
735
+ },
736
+ "default": "false",
737
+ "description": "Render as a `<button>` with focus ring and hover states.",
738
+ "attribute": "interactive",
739
+ "reflects": true
740
+ }
741
+ ],
742
+ "attributes": [
743
+ {
744
+ "name": "src",
745
+ "type": {
746
+ "text": "string"
747
+ },
748
+ "default": "''",
749
+ "description": "Image URL. Falls back to initials (then the default icon) if it fails to load.",
750
+ "fieldName": "src"
751
+ },
752
+ {
753
+ "name": "name",
754
+ "type": {
755
+ "text": "string"
756
+ },
757
+ "default": "''",
758
+ "description": "Name used as the accessible label and to derive the initials fallback.",
759
+ "fieldName": "name"
760
+ },
761
+ {
762
+ "name": "size",
763
+ "type": {
764
+ "text": "string"
765
+ },
766
+ "default": "'md'",
767
+ "description": "Avatar size: `xs`, `sm`, `md` (default), `lg`, or `xl`.",
768
+ "fieldName": "size"
769
+ },
770
+ {
771
+ "name": "badge",
772
+ "type": {
773
+ "text": "number"
774
+ },
775
+ "default": "0",
776
+ "description": "Count shown in the corner badge. `0` hides the badge.",
777
+ "fieldName": "badge"
778
+ },
779
+ {
780
+ "name": "interactive",
781
+ "type": {
782
+ "text": "boolean"
783
+ },
784
+ "default": "false",
785
+ "description": "Render as a `<button>` with focus ring and hover states.",
786
+ "fieldName": "interactive"
787
+ }
788
+ ],
789
+ "superclass": {
790
+ "name": "LuxenElement",
791
+ "module": "/src/html/shared/luxen-element.js"
792
+ },
793
+ "tagName": "l-avatar",
794
+ "customElement": true,
795
+ "summary": "An avatar component for displaying user images, initials, or a default icon.",
796
+ "_cssClasses": [
797
+ {
798
+ "name": ".l-avatar-group",
799
+ "description": "Flex wrapper that overlaps a row of stacked avatars."
800
+ }
801
+ ]
802
+ }
803
+ ],
804
+ "exports": [
805
+ {
806
+ "kind": "js",
807
+ "name": "Avatar",
808
+ "declaration": {
809
+ "name": "Avatar",
810
+ "module": "src/html/elements/avatar/avatar.ts"
811
+ }
812
+ }
813
+ ]
814
+ },
815
+ {
816
+ "kind": "javascript-module",
817
+ "path": "src/html/elements/avatar/index.ts",
818
+ "declarations": [],
819
+ "exports": [
820
+ {
821
+ "kind": "js",
822
+ "name": "*",
823
+ "declaration": {
824
+ "name": "*",
825
+ "module": "src/html/elements/avatar/avatar.js"
826
+ }
827
+ }
828
+ ]
829
+ },
830
830
  {
831
831
  "kind": "javascript-module",
832
832
  "path": "src/html/elements/badge/badge.ts",
@@ -1032,97 +1032,6 @@
1032
1032
  }
1033
1033
  ]
1034
1034
  },
1035
- {
1036
- "kind": "javascript-module",
1037
- "path": "src/html/elements/button-group/button-group.ts",
1038
- "declarations": [
1039
- {
1040
- "kind": "class",
1041
- "description": "",
1042
- "name": "ButtonGroup",
1043
- "members": [
1044
- {
1045
- "kind": "field",
1046
- "name": "label",
1047
- "type": {
1048
- "text": "string | undefined"
1049
- },
1050
- "description": "Accessible label announced for the group. Not displayed on screen.",
1051
- "attribute": "label",
1052
- "reflects": true
1053
- },
1054
- {
1055
- "kind": "field",
1056
- "name": "orientation",
1057
- "type": {
1058
- "text": "ButtonGroupOrientation"
1059
- },
1060
- "default": "'horizontal'",
1061
- "description": "Layout direction of the buttons. Visual only (drives the CSS via the\nreflected attribute): ARIA 1.2 does not allow `aria-orientation` on\n`role=\"group\"`, so no ARIA attribute is set.",
1062
- "attribute": "orientation",
1063
- "reflects": true
1064
- }
1065
- ],
1066
- "attributes": [
1067
- {
1068
- "name": "label",
1069
- "type": {
1070
- "text": "string | undefined"
1071
- },
1072
- "description": "Accessible label announced for the group. Not displayed on screen.",
1073
- "fieldName": "label"
1074
- },
1075
- {
1076
- "name": "orientation",
1077
- "type": {
1078
- "text": "ButtonGroupOrientation"
1079
- },
1080
- "default": "'horizontal'",
1081
- "description": "Layout direction of the buttons. Visual only (drives the CSS via the\nreflected attribute): ARIA 1.2 does not allow `aria-orientation` on\n`role=\"group\"`, so no ARIA attribute is set.",
1082
- "fieldName": "orientation"
1083
- }
1084
- ],
1085
- "superclass": {
1086
- "name": "LuxenElement",
1087
- "module": "/src/html/shared/luxen-element.js"
1088
- },
1089
- "tagName": "l-button-group",
1090
- "customElement": true,
1091
- "summary": "Visually joins related `.l-button` elements into a single segmented\ncontrol. The joined appearance is pure CSS; this element adds the group\nsemantics (`role=\"group\"`, `aria-label`).",
1092
- "examples": [
1093
- {
1094
- "language": "html",
1095
- "code": "<l-button-group label=\"Alignment\">\n <button class=\"l-button\">Left</button>\n <button class=\"l-button\">Center</button>\n <button class=\"l-button\">Right</button>\n</l-button-group>"
1096
- }
1097
- ]
1098
- }
1099
- ],
1100
- "exports": [
1101
- {
1102
- "kind": "js",
1103
- "name": "ButtonGroup",
1104
- "declaration": {
1105
- "name": "ButtonGroup",
1106
- "module": "src/html/elements/button-group/button-group.ts"
1107
- }
1108
- }
1109
- ]
1110
- },
1111
- {
1112
- "kind": "javascript-module",
1113
- "path": "src/html/elements/button-group/index.ts",
1114
- "declarations": [],
1115
- "exports": [
1116
- {
1117
- "kind": "js",
1118
- "name": "*",
1119
- "declaration": {
1120
- "name": "*",
1121
- "module": "src/html/elements/button-group/button-group.js"
1122
- }
1123
- }
1124
- ]
1125
- },
1126
1035
  {
1127
1036
  "kind": "javascript-module",
1128
1037
  "path": "src/html/elements/button/button.meta.ts",
@@ -1255,12 +1164,88 @@
1255
1164
  "description": "Control size. Default is md."
1256
1165
  },
1257
1166
  {
1258
- "name": "data-icon-only",
1259
- "description": "Icon-only mode (square button, width equals height). Auto-detected for a single icon child."
1260
- },
1167
+ "name": "data-icon-only",
1168
+ "description": "Icon-only mode (square button, width equals height). Auto-detected for a single icon child."
1169
+ },
1170
+ {
1171
+ "name": "data-press-effect",
1172
+ "description": "Press effect (scale + translate on active)."
1173
+ }
1174
+ ]
1175
+ }
1176
+ ],
1177
+ "exports": [
1178
+ {
1179
+ "kind": "js",
1180
+ "name": "ButtonMeta",
1181
+ "declaration": {
1182
+ "name": "ButtonMeta",
1183
+ "module": "src/html/elements/button/button.meta.ts"
1184
+ }
1185
+ }
1186
+ ]
1187
+ },
1188
+ {
1189
+ "kind": "javascript-module",
1190
+ "path": "src/html/elements/button-group/button-group.ts",
1191
+ "declarations": [
1192
+ {
1193
+ "kind": "class",
1194
+ "description": "",
1195
+ "name": "ButtonGroup",
1196
+ "members": [
1197
+ {
1198
+ "kind": "field",
1199
+ "name": "label",
1200
+ "type": {
1201
+ "text": "string | undefined"
1202
+ },
1203
+ "description": "Accessible label announced for the group. Not displayed on screen.",
1204
+ "attribute": "label",
1205
+ "reflects": true
1206
+ },
1207
+ {
1208
+ "kind": "field",
1209
+ "name": "orientation",
1210
+ "type": {
1211
+ "text": "ButtonGroupOrientation"
1212
+ },
1213
+ "default": "'horizontal'",
1214
+ "description": "Layout direction of the buttons. Visual only (drives the CSS via the\nreflected attribute): ARIA 1.2 does not allow `aria-orientation` on\n`role=\"group\"`, so no ARIA attribute is set.",
1215
+ "attribute": "orientation",
1216
+ "reflects": true
1217
+ }
1218
+ ],
1219
+ "attributes": [
1220
+ {
1221
+ "name": "label",
1222
+ "type": {
1223
+ "text": "string | undefined"
1224
+ },
1225
+ "description": "Accessible label announced for the group. Not displayed on screen.",
1226
+ "fieldName": "label"
1227
+ },
1228
+ {
1229
+ "name": "orientation",
1230
+ "type": {
1231
+ "text": "ButtonGroupOrientation"
1232
+ },
1233
+ "default": "'horizontal'",
1234
+ "description": "Layout direction of the buttons. Visual only (drives the CSS via the\nreflected attribute): ARIA 1.2 does not allow `aria-orientation` on\n`role=\"group\"`, so no ARIA attribute is set.",
1235
+ "fieldName": "orientation"
1236
+ }
1237
+ ],
1238
+ "superclass": {
1239
+ "name": "LuxenElement",
1240
+ "module": "/src/html/shared/luxen-element.js"
1241
+ },
1242
+ "tagName": "l-button-group",
1243
+ "customElement": true,
1244
+ "summary": "Visually joins related `.l-button` elements into a single segmented\ncontrol. The joined appearance is pure CSS; this element adds the group\nsemantics (`role=\"group\"`, `aria-label`).",
1245
+ "examples": [
1261
1246
  {
1262
- "name": "data-press-effect",
1263
- "description": "Press effect (scale + translate on active)."
1247
+ "language": "html",
1248
+ "code": "<l-button-group label=\"Alignment\">\n <button class=\"l-button\">Left</button>\n <button class=\"l-button\">Center</button>\n <button class=\"l-button\">Right</button>\n</l-button-group>"
1264
1249
  }
1265
1250
  ]
1266
1251
  }
@@ -1268,10 +1253,25 @@
1268
1253
  "exports": [
1269
1254
  {
1270
1255
  "kind": "js",
1271
- "name": "ButtonMeta",
1256
+ "name": "ButtonGroup",
1272
1257
  "declaration": {
1273
- "name": "ButtonMeta",
1274
- "module": "src/html/elements/button/button.meta.ts"
1258
+ "name": "ButtonGroup",
1259
+ "module": "src/html/elements/button-group/button-group.ts"
1260
+ }
1261
+ }
1262
+ ]
1263
+ },
1264
+ {
1265
+ "kind": "javascript-module",
1266
+ "path": "src/html/elements/button-group/index.ts",
1267
+ "declarations": [],
1268
+ "exports": [
1269
+ {
1270
+ "kind": "js",
1271
+ "name": "*",
1272
+ "declaration": {
1273
+ "name": "*",
1274
+ "module": "src/html/elements/button-group/button-group.js"
1275
1275
  }
1276
1276
  }
1277
1277
  ]
@@ -2849,6 +2849,10 @@
2849
2849
  "description": "arrow | plus — Marker icon: `arrow` rotates 180° when open; `plus` rotates 45° into a cross.",
2850
2850
  "name": "data-marker"
2851
2851
  },
2852
+ {
2853
+ "description": "start | end — Marker side. Defaults to `end`.",
2854
+ "name": "data-marker-placement"
2855
+ },
2852
2856
  {
2853
2857
  "description": "bordered — Adds border, background, and border-radius.",
2854
2858
  "name": "data-variant"
@@ -2893,6 +2897,14 @@
2893
2897
  ],
2894
2898
  "description": "Marker icon: `arrow` rotates 180° when open; `plus` rotates 45° into a cross."
2895
2899
  },
2900
+ {
2901
+ "name": "data-marker-placement",
2902
+ "values": [
2903
+ "start",
2904
+ "end"
2905
+ ],
2906
+ "description": "Marker side. Defaults to `end`."
2907
+ },
2896
2908
  {
2897
2909
  "name": "data-variant",
2898
2910
  "description": "bordered — Adds border, background, and border-radius."
@@ -6031,125 +6043,351 @@
6031
6043
  },
6032
6044
  {
6033
6045
  "kind": "javascript-module",
6034
- "path": "src/html/elements/select/select.meta.ts",
6046
+ "path": "src/html/elements/select/index.ts",
6047
+ "declarations": [],
6048
+ "exports": [
6049
+ {
6050
+ "kind": "js",
6051
+ "name": "*",
6052
+ "declaration": {
6053
+ "name": "*",
6054
+ "module": "src/html/elements/select/select.js"
6055
+ }
6056
+ }
6057
+ ]
6058
+ },
6059
+ {
6060
+ "kind": "javascript-module",
6061
+ "path": "src/html/elements/select/select.ts",
6035
6062
  "declarations": [
6036
6063
  {
6037
6064
  "kind": "class",
6038
- "description": "",
6039
- "name": "SelectMeta",
6040
- "cssProperties": [
6065
+ "description": "Fired when the selection changes. Bubbles; not composed.",
6066
+ "name": "SelectChangeEvent",
6067
+ "members": [
6041
6068
  {
6042
- "description": "Control height (set via `data-size` or directly).",
6043
- "name": "--height",
6044
- "default": "var(--l-form-control-height)"
6045
- },
6069
+ "kind": "field",
6070
+ "name": "value",
6071
+ "type": {
6072
+ "text": "string | string[]"
6073
+ },
6074
+ "readonly": true,
6075
+ "description": "The selected value (single mode) or values (multiple mode).",
6076
+ "default": "value"
6077
+ }
6078
+ ],
6079
+ "superclass": {
6080
+ "name": "Event",
6081
+ "module": "src/html/elements/select/select.ts"
6082
+ }
6083
+ },
6084
+ {
6085
+ "kind": "class",
6086
+ "description": "Fired as the user types in the search box. Bubbles; not composed.",
6087
+ "name": "SelectInputEvent",
6088
+ "members": [
6046
6089
  {
6047
- "description": "Trigger border radius.",
6048
- "name": "--border-radius",
6049
- "default": "var(--l-form-control-border-radius)"
6090
+ "kind": "field",
6091
+ "name": "value",
6092
+ "type": {
6093
+ "text": "string"
6094
+ },
6095
+ "readonly": true,
6096
+ "description": "The current query text.",
6097
+ "default": "value"
6098
+ }
6099
+ ],
6100
+ "superclass": {
6101
+ "name": "Event",
6102
+ "module": "src/html/elements/select/select.ts"
6103
+ }
6104
+ },
6105
+ {
6106
+ "kind": "class",
6107
+ "description": "A button-triggered, searchable select. A trigger shows the current selection,\nopening a popover with a search box and a `role=\"listbox\"` of options authored\nas a native `<datalist>` of `<option>` — the same authoring surface as\n`l-combobox` and the native `.l-select`. Form-associated.",
6108
+ "name": "Select",
6109
+ "cssProperties": [
6110
+ {
6111
+ "description": "Control height. Defaults to the form-control height.",
6112
+ "name": "--height"
6050
6113
  },
6051
6114
  {
6052
- "description": "Chevron color.",
6053
- "name": "--caret-color",
6054
- "default": "var(--l-form-control-placeholder-color)"
6115
+ "description": "Trigger + panel radius.",
6116
+ "name": "--border-radius"
6055
6117
  },
6056
6118
  {
6057
- "description": "Chevron mask image; override with any `url()` to re-skin.",
6058
- "name": "--caret-icon",
6059
- "default": "mdi:chevron-down"
6119
+ "description": "Panel background.",
6120
+ "name": "--background"
6060
6121
  }
6061
6122
  ],
6062
- "events": [
6123
+ "cssParts": [
6063
6124
  {
6064
- "name": "change",
6065
- "description": "Fires when an option is selected.",
6066
- "cancelable": false
6125
+ "description": "The host wrapper.",
6126
+ "name": "base"
6067
6127
  },
6068
6128
  {
6069
- "name": "input",
6070
- "description": "Fires when the value changes.",
6071
- "cancelable": false
6072
- }
6073
- ],
6074
- "attributes": [
6129
+ "description": "The button that opens the listbox.",
6130
+ "name": "trigger"
6131
+ },
6075
6132
  {
6076
- "description": "xs | sm | md | lg | xl — Control height on the shared `--l-size-control-*` scale (default `md`).",
6077
- "name": "data-size"
6133
+ "description": "The selection display inside the trigger.",
6134
+ "name": "value"
6078
6135
  },
6079
6136
  {
6080
- "description": "Disables the select.",
6081
- "name": "disabled"
6137
+ "description": "The trigger chevron.",
6138
+ "name": "chevron"
6082
6139
  },
6083
6140
  {
6084
- "description": "Marks the field as required.",
6085
- "name": "required"
6141
+ "description": "The clear button.",
6142
+ "name": "clear"
6143
+ },
6144
+ {
6145
+ "description": "The floating popover panel.",
6146
+ "name": "panel"
6147
+ },
6148
+ {
6149
+ "description": "The search input.",
6150
+ "name": "search"
6151
+ },
6152
+ {
6153
+ "description": "The options container.",
6154
+ "name": "listbox"
6155
+ },
6156
+ {
6157
+ "description": "Each option row.",
6158
+ "name": "option"
6086
6159
  },
6087
6160
  {
6088
- "description": "Allows multiple selections.",
6089
- "name": "multiple"
6161
+ "description": "The \"no results\" message.",
6162
+ "name": "empty"
6090
6163
  }
6091
6164
  ],
6092
- "summary": "A styled native `<select>` using the customizable `base-select` appearance.",
6093
- "examples": [
6165
+ "members": [
6094
6166
  {
6095
- "title": "Basic",
6096
- "language": "html",
6097
- "code": "<select class=\"l-select\">\n<option class=\"l-select-item\">One</option>\n<option class=\"l-select-item\">Two</option>\n</select>"
6167
+ "kind": "field",
6168
+ "name": "placeholder",
6169
+ "type": {
6170
+ "text": "string"
6171
+ },
6172
+ "default": "''",
6173
+ "description": "Placeholder shown in the trigger when nothing is selected.",
6174
+ "attribute": "placeholder"
6175
+ },
6176
+ {
6177
+ "kind": "field",
6178
+ "name": "label",
6179
+ "type": {
6180
+ "text": "string"
6181
+ },
6182
+ "default": "''",
6183
+ "description": "Accessible label for the trigger.",
6184
+ "attribute": "label"
6185
+ },
6186
+ {
6187
+ "kind": "field",
6188
+ "name": "size",
6189
+ "type": {
6190
+ "text": "SelectSize"
6191
+ },
6192
+ "default": "'md'",
6193
+ "description": "Control size.",
6194
+ "attribute": "size",
6195
+ "reflects": true
6196
+ },
6197
+ {
6198
+ "kind": "field",
6199
+ "name": "searchable",
6200
+ "type": {
6201
+ "text": "boolean"
6202
+ },
6203
+ "default": "false",
6204
+ "description": "Show a filter box inside the popover (opt-in, for long lists).",
6205
+ "attribute": "searchable",
6206
+ "reflects": true
6207
+ },
6208
+ {
6209
+ "kind": "field",
6210
+ "name": "withClear",
6211
+ "type": {
6212
+ "text": "boolean"
6213
+ },
6214
+ "default": "false",
6215
+ "description": "Show a button to clear the value.",
6216
+ "attribute": "with-clear",
6217
+ "reflects": true
6218
+ },
6219
+ {
6220
+ "kind": "field",
6221
+ "name": "placement",
6222
+ "type": {
6223
+ "text": "Placement"
6224
+ },
6225
+ "default": "'bottom-start'",
6226
+ "description": "Panel placement relative to the trigger.",
6227
+ "attribute": "placement"
6228
+ },
6229
+ {
6230
+ "kind": "field",
6231
+ "name": "multiple",
6232
+ "type": {
6233
+ "text": "boolean"
6234
+ },
6235
+ "default": "false",
6236
+ "description": "Allow selecting multiple values — renders chips and submits one entry per value.",
6237
+ "attribute": "multiple",
6238
+ "reflects": true
6239
+ },
6240
+ {
6241
+ "kind": "field",
6242
+ "name": "filter",
6243
+ "type": {
6244
+ "text": "SelectFilter"
6245
+ },
6246
+ "default": "defaultFilter",
6247
+ "description": "Override the option filter. `(item, query) => boolean`."
6248
+ },
6249
+ {
6250
+ "kind": "field",
6251
+ "name": "value",
6252
+ "type": {
6253
+ "text": "string | string[]"
6254
+ },
6255
+ "description": "The selected value (single mode) or array of values (multiple mode)."
6256
+ },
6257
+ {
6258
+ "kind": "field",
6259
+ "name": "validationTarget",
6260
+ "readonly": true
6261
+ },
6262
+ {
6263
+ "kind": "method",
6264
+ "name": "formResetCallback"
6265
+ },
6266
+ {
6267
+ "kind": "method",
6268
+ "name": "formStateRestoreCallback",
6269
+ "parameters": [
6270
+ {
6271
+ "name": "state",
6272
+ "type": {
6273
+ "text": "string"
6274
+ }
6275
+ }
6276
+ ]
6277
+ },
6278
+ {
6279
+ "kind": "method",
6280
+ "name": "show"
6281
+ },
6282
+ {
6283
+ "kind": "method",
6284
+ "name": "hide",
6285
+ "parameters": [
6286
+ {
6287
+ "name": "{ focusTrigger = true }",
6288
+ "default": "{}"
6289
+ }
6290
+ ]
6098
6291
  }
6099
6292
  ],
6100
- "_cssClasses": [
6293
+ "events": [
6101
6294
  {
6102
- "name": ".l-select",
6103
- "description": "Base select element with `appearance: base-select`."
6295
+ "name": "change",
6296
+ "description": "Fired when the selection changes. Bubbles. Not cancelable. Properties: `value: string | string[]`.",
6297
+ "cancelable": false
6104
6298
  },
6105
6299
  {
6106
- "name": ".l-select-item",
6107
- "description": "Option styling with checkmark indicator."
6300
+ "name": "input",
6301
+ "description": "Fired as the user types in the search box. Bubbles. Not cancelable. Properties: `value: string` (the query).",
6302
+ "cancelable": false
6108
6303
  },
6109
6304
  {
6110
- "name": ".l-select-item-media",
6111
- "description": "Leading image/icon inside a rich option."
6305
+ "name": "show",
6306
+ "description": "Fired before the listbox opens. Cancelable.",
6307
+ "cancelable": true
6112
6308
  },
6113
6309
  {
6114
- "name": ".l-select-item-text",
6115
- "description": "Column wrapper stacking title + description."
6310
+ "name": "hide",
6311
+ "description": "Fired before the listbox closes. Cancelable.",
6312
+ "cancelable": true
6313
+ }
6314
+ ],
6315
+ "attributes": [
6316
+ {
6317
+ "name": "placeholder",
6318
+ "type": {
6319
+ "text": "string"
6320
+ },
6321
+ "default": "''",
6322
+ "description": "Placeholder shown in the trigger when nothing is selected.",
6323
+ "fieldName": "placeholder"
6116
6324
  },
6117
6325
  {
6118
- "name": ".l-select-item-title",
6119
- "description": "Primary label of a rich option."
6326
+ "name": "label",
6327
+ "type": {
6328
+ "text": "string"
6329
+ },
6330
+ "default": "''",
6331
+ "description": "Accessible label for the trigger.",
6332
+ "fieldName": "label"
6120
6333
  },
6121
6334
  {
6122
- "name": ".l-select-item-description",
6123
- "description": "Secondary line of a rich option (hidden in the trigger)."
6124
- }
6125
- ],
6126
- "customElement": false,
6127
- "_native": true,
6128
- "_nativeTag": "select",
6129
- "selector": ".l-select",
6130
- "_attributes": [
6335
+ "name": "size",
6336
+ "type": {
6337
+ "text": "SelectSize"
6338
+ },
6339
+ "default": "'md'",
6340
+ "description": "Control size.",
6341
+ "fieldName": "size"
6342
+ },
6131
6343
  {
6132
- "name": "data-size",
6133
- "values": [
6134
- "xs",
6135
- "sm",
6136
- "md",
6137
- "lg",
6138
- "xl"
6139
- ],
6140
- "description": "Control height on the shared `--l-size-control-*` scale (default `md`)."
6344
+ "name": "searchable",
6345
+ "type": {
6346
+ "text": "boolean"
6347
+ },
6348
+ "default": "false",
6349
+ "description": "Show a filter box inside the popover (opt-in, for long lists).",
6350
+ "fieldName": "searchable"
6141
6351
  },
6142
6352
  {
6143
- "name": "disabled",
6144
- "description": "Disables the select."
6353
+ "name": "with-clear",
6354
+ "type": {
6355
+ "text": "boolean"
6356
+ },
6357
+ "default": "false",
6358
+ "description": "Show a button to clear the value.",
6359
+ "fieldName": "withClear"
6145
6360
  },
6146
6361
  {
6147
- "name": "required",
6148
- "description": "Marks the field as required."
6362
+ "name": "placement",
6363
+ "type": {
6364
+ "text": "Placement"
6365
+ },
6366
+ "default": "'bottom-start'",
6367
+ "description": "Panel placement relative to the trigger.",
6368
+ "fieldName": "placement"
6149
6369
  },
6150
6370
  {
6151
6371
  "name": "multiple",
6152
- "description": "Allows multiple selections."
6372
+ "type": {
6373
+ "text": "boolean"
6374
+ },
6375
+ "default": "false",
6376
+ "description": "Allow selecting multiple values — renders chips and submits one entry per value.",
6377
+ "fieldName": "multiple"
6378
+ }
6379
+ ],
6380
+ "superclass": {
6381
+ "name": "LuxenFormAssociatedElement",
6382
+ "module": "/src/html/shared/luxen-form-associated-element.js"
6383
+ },
6384
+ "tagName": "l-select",
6385
+ "customElement": true,
6386
+ "summary": "A searchable select with a button trigger and a popover listbox.",
6387
+ "examples": [
6388
+ {
6389
+ "language": "html",
6390
+ "code": "<l-select label=\"Country\" name=\"country\" placeholder=\"Select a country…\">\n <datalist>\n <option value=\"us\">United States</option>\n <option value=\"fr\" selected>France</option>\n </datalist>\n</l-select>"
6153
6391
  }
6154
6392
  ]
6155
6393
  }
@@ -6157,10 +6395,26 @@
6157
6395
  "exports": [
6158
6396
  {
6159
6397
  "kind": "js",
6160
- "name": "SelectMeta",
6398
+ "name": "SelectChangeEvent",
6399
+ "declaration": {
6400
+ "name": "SelectChangeEvent",
6401
+ "module": "src/html/elements/select/select.ts"
6402
+ }
6403
+ },
6404
+ {
6405
+ "kind": "js",
6406
+ "name": "SelectInputEvent",
6407
+ "declaration": {
6408
+ "name": "SelectInputEvent",
6409
+ "module": "src/html/elements/select/select.ts"
6410
+ }
6411
+ },
6412
+ {
6413
+ "kind": "js",
6414
+ "name": "Select",
6161
6415
  "declaration": {
6162
- "name": "SelectMeta",
6163
- "module": "src/html/elements/select/select.meta.ts"
6416
+ "name": "Select",
6417
+ "module": "src/html/elements/select/select.ts"
6164
6418
  }
6165
6419
  }
6166
6420
  ]
@@ -8181,8 +8435,9 @@
8181
8435
  "summary": "A tabs component that progressively enhances light DOM markup\nwith ARIA roles, keyboard navigation, and animated indicators.",
8182
8436
  "examples": [
8183
8437
  {
8438
+ "title": "Mark the initially-active tab with `aria-selected=\"true\"` so it is styled as",
8184
8439
  "language": "html",
8185
- "code": "<l-tabs variant=\"enclosed\">\n <div>\n <button>Tab 1</button>\n <button>Tab 2</button>\n </div>\n <div>Content 1</div>\n <div>Content 2</div>\n</l-tabs>"
8440
+ "code": "selected before the script upgrades the element (progressive enhancement).\n```html\n<l-tabs variant=\"enclosed\">\n <div>\n <button aria-selected=\"true\">Tab 1</button>\n <button>Tab 2</button>\n </div>\n <div>Content 1</div>\n <div>Content 2</div>\n</l-tabs>\n```"
8186
8441
  }
8187
8442
  ]
8188
8443
  }
@@ -8206,6 +8461,181 @@
8206
8461
  }
8207
8462
  ]
8208
8463
  },
8464
+ {
8465
+ "kind": "javascript-module",
8466
+ "path": "src/html/elements/tag/index.ts",
8467
+ "declarations": [],
8468
+ "exports": [
8469
+ {
8470
+ "kind": "js",
8471
+ "name": "*",
8472
+ "declaration": {
8473
+ "name": "*",
8474
+ "module": "src/html/elements/tag/tag.js"
8475
+ }
8476
+ }
8477
+ ]
8478
+ },
8479
+ {
8480
+ "kind": "javascript-module",
8481
+ "path": "src/html/elements/tag/tag.ts",
8482
+ "declarations": [
8483
+ {
8484
+ "kind": "class",
8485
+ "description": "Fired when the user asks to remove the tag — clicking the × button, or\npressing Backspace/Delete while it is focused. Cancelable: call\n`preventDefault()` to keep the tag (the controlling host then manages the\nlist itself); otherwise the tag removes itself from the DOM. Does not bubble.",
8486
+ "name": "TagRemoveEvent",
8487
+ "superclass": {
8488
+ "name": "Event",
8489
+ "module": "src/html/elements/tag/tag.ts"
8490
+ }
8491
+ },
8492
+ {
8493
+ "kind": "class",
8494
+ "description": "A compact chip for tokens, filters, and multi-select values. Shadow DOM so its\nstyles are self-contained and it renders correctly **anywhere**, including\ninside another element's shadow root (e.g. the `<l-select>` multi-select\ntrigger).",
8495
+ "name": "Tag",
8496
+ "cssProperties": [
8497
+ {
8498
+ "description": "Corner radius. Defaults to a full pill.",
8499
+ "name": "--border-radius"
8500
+ },
8501
+ {
8502
+ "description": "Chip background.",
8503
+ "name": "--background"
8504
+ },
8505
+ {
8506
+ "description": "Text color.",
8507
+ "name": "--color"
8508
+ }
8509
+ ],
8510
+ "cssParts": [
8511
+ {
8512
+ "description": "The chip container.",
8513
+ "name": "base"
8514
+ },
8515
+ {
8516
+ "description": "The label wrapper.",
8517
+ "name": "content"
8518
+ },
8519
+ {
8520
+ "description": "The remove button.",
8521
+ "name": "remove"
8522
+ }
8523
+ ],
8524
+ "slots": [
8525
+ {
8526
+ "description": "The tag label.",
8527
+ "name": ""
8528
+ },
8529
+ {
8530
+ "description": "Leading content, e.g. an `<l-icon>` or `<l-avatar>`.",
8531
+ "name": "prefix"
8532
+ }
8533
+ ],
8534
+ "members": [
8535
+ {
8536
+ "kind": "field",
8537
+ "name": "size",
8538
+ "type": {
8539
+ "text": "TagSize"
8540
+ },
8541
+ "default": "'md'",
8542
+ "description": "Tag size: `sm`, `md` (default), or `lg`.",
8543
+ "attribute": "size",
8544
+ "reflects": true
8545
+ },
8546
+ {
8547
+ "kind": "field",
8548
+ "name": "removable",
8549
+ "type": {
8550
+ "text": "boolean"
8551
+ },
8552
+ "default": "false",
8553
+ "description": "Show a remove button (and enable Backspace/Delete removal).",
8554
+ "attribute": "removable",
8555
+ "reflects": true
8556
+ },
8557
+ {
8558
+ "kind": "field",
8559
+ "name": "disabled",
8560
+ "type": {
8561
+ "text": "boolean"
8562
+ },
8563
+ "default": "false",
8564
+ "description": "Disable the tag — dims it and blocks removal.",
8565
+ "attribute": "disabled",
8566
+ "reflects": true
8567
+ }
8568
+ ],
8569
+ "events": [
8570
+ {
8571
+ "name": "remove",
8572
+ "description": "Fired when the user removes the tag (× click or Backspace/Delete). Cancelable; if not prevented the tag removes itself. Not composed, does not bubble.",
8573
+ "cancelable": true
8574
+ }
8575
+ ],
8576
+ "attributes": [
8577
+ {
8578
+ "name": "size",
8579
+ "type": {
8580
+ "text": "TagSize"
8581
+ },
8582
+ "default": "'md'",
8583
+ "description": "Tag size: `sm`, `md` (default), or `lg`.",
8584
+ "fieldName": "size"
8585
+ },
8586
+ {
8587
+ "name": "removable",
8588
+ "type": {
8589
+ "text": "boolean"
8590
+ },
8591
+ "default": "false",
8592
+ "description": "Show a remove button (and enable Backspace/Delete removal).",
8593
+ "fieldName": "removable"
8594
+ },
8595
+ {
8596
+ "name": "disabled",
8597
+ "type": {
8598
+ "text": "boolean"
8599
+ },
8600
+ "default": "false",
8601
+ "description": "Disable the tag — dims it and blocks removal.",
8602
+ "fieldName": "disabled"
8603
+ }
8604
+ ],
8605
+ "superclass": {
8606
+ "name": "LuxenElement",
8607
+ "module": "/src/html/shared/luxen-element.js"
8608
+ },
8609
+ "tagName": "l-tag",
8610
+ "customElement": true,
8611
+ "summary": "A compact, optionally removable chip.",
8612
+ "examples": [
8613
+ {
8614
+ "language": "html",
8615
+ "code": "<l-tag removable>Design</l-tag>"
8616
+ }
8617
+ ]
8618
+ }
8619
+ ],
8620
+ "exports": [
8621
+ {
8622
+ "kind": "js",
8623
+ "name": "TagRemoveEvent",
8624
+ "declaration": {
8625
+ "name": "TagRemoveEvent",
8626
+ "module": "src/html/elements/tag/tag.ts"
8627
+ }
8628
+ },
8629
+ {
8630
+ "kind": "js",
8631
+ "name": "Tag",
8632
+ "declaration": {
8633
+ "name": "Tag",
8634
+ "module": "src/html/elements/tag/tag.ts"
8635
+ }
8636
+ }
8637
+ ]
8638
+ },
8209
8639
  {
8210
8640
  "kind": "javascript-module",
8211
8641
  "path": "src/html/elements/textarea/textarea.meta.ts",
@@ -8774,7 +9204,8 @@
8774
9204
  },
8775
9205
  "default": "''",
8776
9206
  "description": "The HTML id of the element triggering the tooltip.",
8777
- "attribute": "for"
9207
+ "attribute": "for",
9208
+ "reflects": true
8778
9209
  },
8779
9210
  {
8780
9211
  "kind": "field",
@@ -8796,6 +9227,26 @@
8796
9227
  "description": "The distance in pixels from the target element.",
8797
9228
  "attribute": "distance"
8798
9229
  },
9230
+ {
9231
+ "kind": "field",
9232
+ "name": "showDelay",
9233
+ "type": {
9234
+ "text": "number"
9235
+ },
9236
+ "default": "0",
9237
+ "description": "Milliseconds the pointer must dwell on the trigger before the tooltip\nshows. Applies to `hover` only — focus shows immediately.",
9238
+ "attribute": "show-delay"
9239
+ },
9240
+ {
9241
+ "kind": "field",
9242
+ "name": "hideDelay",
9243
+ "type": {
9244
+ "text": "number"
9245
+ },
9246
+ "default": "0",
9247
+ "description": "Milliseconds to wait after the pointer leaves the trigger (and its safe\npolygon) before hiding. Bridges a brief exit-and-return without flicker.\nApplies to `hover` only.",
9248
+ "attribute": "hide-delay"
9249
+ },
8799
9250
  {
8800
9251
  "kind": "field",
8801
9252
  "name": "open",
@@ -8869,6 +9320,24 @@
8869
9320
  "description": "The distance in pixels from the target element.",
8870
9321
  "fieldName": "distance"
8871
9322
  },
9323
+ {
9324
+ "name": "show-delay",
9325
+ "type": {
9326
+ "text": "number"
9327
+ },
9328
+ "default": "0",
9329
+ "description": "Milliseconds the pointer must dwell on the trigger before the tooltip\nshows. Applies to `hover` only — focus shows immediately.",
9330
+ "fieldName": "showDelay"
9331
+ },
9332
+ {
9333
+ "name": "hide-delay",
9334
+ "type": {
9335
+ "text": "number"
9336
+ },
9337
+ "default": "0",
9338
+ "description": "Milliseconds to wait after the pointer leaves the trigger (and its safe\npolygon) before hiding. Bridges a brief exit-and-return without flicker.\nApplies to `hover` only.",
9339
+ "fieldName": "hideDelay"
9340
+ },
8872
9341
  {
8873
9342
  "name": "open",
8874
9343
  "type": {