luxen-ui 0.24.0 → 0.26.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 (249) hide show
  1. package/README.md +1 -0
  2. package/bin/cli.mjs +16 -1
  3. package/cdn/custom-elements.json +295 -169
  4. package/cdn/elements/alert-dialog/alert-dialog.d.ts +3 -2
  5. package/cdn/elements/alert-dialog/alert-dialog.d.ts.map +1 -1
  6. package/cdn/elements/alert-dialog/alert-dialog.js.map +1 -1
  7. package/cdn/elements/avatar/avatar.js +1 -1
  8. package/cdn/elements/avatar/avatar.js.map +1 -1
  9. package/cdn/elements/carousel/carousel.js +1 -1
  10. package/cdn/elements/carousel/carousel.js.map +1 -1
  11. package/cdn/elements/combobox/combobox.d.ts.map +1 -1
  12. package/cdn/elements/combobox/combobox.js +2 -1
  13. package/cdn/elements/combobox/combobox.js.map +1 -1
  14. package/cdn/elements/dialog/dialog.d.ts +2 -1
  15. package/cdn/elements/dialog/dialog.d.ts.map +1 -1
  16. package/cdn/elements/dialog/dialog.js.map +1 -1
  17. package/cdn/elements/dialog/dialog.styles.js +1 -1
  18. package/cdn/elements/dialog/dialog.styles.js.map +1 -1
  19. package/cdn/elements/drawer/drawer.d.ts +7 -7
  20. package/cdn/elements/drawer/drawer.js +1 -1
  21. package/cdn/elements/drawer/drawer.js.map +1 -1
  22. package/cdn/elements/dropdown-item/dropdown-item.js +1 -1
  23. package/cdn/elements/dropdown-item/dropdown-item.js.map +1 -1
  24. package/cdn/elements/input-otp/input-otp.d.ts +2 -2
  25. package/cdn/elements/input-otp/input-otp.js.map +1 -1
  26. package/cdn/elements/prose-editor/prose-editor.js +1 -1
  27. package/cdn/elements/prose-editor/prose-editor.js.map +1 -1
  28. package/cdn/elements/rating/rating.js +1 -1
  29. package/cdn/elements/rating/rating.js.map +1 -1
  30. package/cdn/elements/select/select.d.ts.map +1 -1
  31. package/cdn/elements/select/select.js +2 -1
  32. package/cdn/elements/select/select.js.map +1 -1
  33. package/cdn/elements/slider/slider.js +1 -1
  34. package/cdn/elements/slider/slider.js.map +1 -1
  35. package/cdn/elements/stories-viewer/stories-viewer.js +1 -1
  36. package/cdn/elements/stories-viewer/stories-viewer.js.map +1 -1
  37. package/cdn/elements/table/table.meta.d.ts +55 -0
  38. package/cdn/elements/table/table.meta.d.ts.map +1 -0
  39. package/cdn/elements/table/table.meta.js +0 -0
  40. package/cdn/elements/tag/tag.js +1 -1
  41. package/cdn/elements/tag/tag.js.map +1 -1
  42. package/cdn/elements/tree/tree.js +1 -1
  43. package/cdn/elements/tree/tree.js.map +1 -1
  44. package/cdn/elements/tree-item/tree-item.js +1 -1
  45. package/cdn/elements/tree-item/tree-item.js.map +1 -1
  46. package/cdn/shared/controllers/listbox-nav.d.ts +7 -0
  47. package/cdn/shared/controllers/listbox-nav.d.ts.map +1 -1
  48. package/cdn/shared/controllers/listbox-nav.js +1 -1
  49. package/cdn/shared/controllers/listbox-nav.js.map +1 -1
  50. package/cdn/shared/styles/button-core.styles.js +1 -1
  51. package/cdn/shared/styles/button-core.styles.js.map +1 -1
  52. package/cdn/shared/styles/checkbox-appearance.styles.js +1 -1
  53. package/cdn/shared/styles/checkbox-appearance.styles.js.map +1 -1
  54. package/cdn/shared/styles/picker-core.styles.js +1 -1
  55. package/cdn/shared/styles/picker-core.styles.js.map +1 -1
  56. package/cdn/standalone.css +392 -86
  57. package/cdn/standalone.js +38 -28
  58. package/cdn/standalone.js.map +1 -1
  59. package/cdn/styles/base.css +11 -0
  60. package/cdn/styles/elements/breadcrumb.css +2 -2
  61. package/cdn/styles/elements/button.css +2 -2
  62. package/cdn/styles/elements/checkbox.css +2 -2
  63. package/cdn/styles/elements/close-button/circle.css +2 -2
  64. package/cdn/styles/elements/close-button/ring.css +2 -2
  65. package/cdn/styles/elements/close-button/square.css +2 -2
  66. package/cdn/styles/elements/disclosure.css +2 -2
  67. package/cdn/styles/elements/input-otp.css +20 -4
  68. package/cdn/styles/elements/input-stepper/default.css +2 -2
  69. package/cdn/styles/elements/input-stepper/pill.css +2 -2
  70. package/cdn/styles/elements/input-stepper/rounded.css +2 -2
  71. package/cdn/styles/elements/input.css +50 -17
  72. package/cdn/styles/elements/prose-editor.css +26 -11
  73. package/cdn/styles/elements/radio-group.css +2 -2
  74. package/cdn/styles/elements/radio.css +2 -2
  75. package/cdn/styles/elements/segmented-control.css +2 -2
  76. package/cdn/styles/elements/select.css +26 -5
  77. package/cdn/styles/elements/story.css +2 -2
  78. package/cdn/styles/elements/switch.css +2 -2
  79. package/cdn/styles/elements/table.css +186 -0
  80. package/cdn/styles/elements/tabs/enclosed.css +4 -4
  81. package/cdn/styles/elements/tabs/line.css +4 -4
  82. package/cdn/styles/elements/textarea.css +23 -9
  83. package/cdn/styles/preset.css +21 -2
  84. package/cdn/styles/tokens/aliases.css +6 -2
  85. package/cdn/styles/tokens/forms.css +4 -0
  86. package/cdn/styles/tokens.css +10 -2
  87. package/dist/css/base.css +11 -0
  88. package/dist/css/elements/breadcrumb.css +2 -2
  89. package/dist/css/elements/button.css +2 -2
  90. package/dist/css/elements/checkbox.css +2 -2
  91. package/dist/css/elements/close-button/circle.css +2 -2
  92. package/dist/css/elements/close-button/ring.css +2 -2
  93. package/dist/css/elements/close-button/square.css +2 -2
  94. package/dist/css/elements/disclosure.css +2 -2
  95. package/dist/css/elements/input-otp.css +20 -4
  96. package/dist/css/elements/input-stepper/default.css +2 -2
  97. package/dist/css/elements/input-stepper/pill.css +2 -2
  98. package/dist/css/elements/input-stepper/rounded.css +2 -2
  99. package/dist/css/elements/input.css +50 -17
  100. package/dist/css/elements/prose-editor.css +26 -11
  101. package/dist/css/elements/radio-group.css +2 -2
  102. package/dist/css/elements/radio.css +2 -2
  103. package/dist/css/elements/segmented-control.css +2 -2
  104. package/dist/css/elements/select.css +26 -5
  105. package/dist/css/elements/story.css +2 -2
  106. package/dist/css/elements/switch.css +2 -2
  107. package/dist/css/elements/table.css +186 -0
  108. package/dist/css/elements/tabs/enclosed.css +4 -4
  109. package/dist/css/elements/tabs/line.css +4 -4
  110. package/dist/css/elements/textarea.css +23 -9
  111. package/dist/css/preset.css +21 -2
  112. package/dist/css/tokens/aliases.css +6 -2
  113. package/dist/css/tokens/forms.css +4 -0
  114. package/dist/css/tokens.css +10 -2
  115. package/dist/custom-elements.json +295 -169
  116. package/dist/elements/alert-dialog/alert-dialog.d.ts +3 -2
  117. package/dist/elements/alert-dialog/alert-dialog.d.ts.map +1 -1
  118. package/dist/elements/alert-dialog/alert-dialog.js +3 -2
  119. package/dist/elements/avatar/avatar.css +2 -2
  120. package/dist/elements/carousel/carousel.css +18 -0
  121. package/dist/elements/combobox/combobox.css +9 -0
  122. package/dist/elements/combobox/combobox.d.ts.map +1 -1
  123. package/dist/elements/combobox/combobox.js +1 -0
  124. package/dist/elements/dialog/dialog.css +12 -0
  125. package/dist/elements/dialog/dialog.d.ts +2 -1
  126. package/dist/elements/dialog/dialog.d.ts.map +1 -1
  127. package/dist/elements/dialog/dialog.js +2 -1
  128. package/dist/elements/drawer/drawer.css +11 -1
  129. package/dist/elements/drawer/drawer.d.ts +7 -7
  130. package/dist/elements/drawer/drawer.js +7 -7
  131. package/dist/elements/dropdown-item/dropdown-item.css +5 -4
  132. package/dist/elements/input-otp/input-otp.d.ts +2 -2
  133. package/dist/elements/input-otp/input-otp.js +2 -2
  134. package/dist/elements/prose-editor/prose-editor.css +5 -3
  135. package/dist/elements/rating/rating.css +9 -10
  136. package/dist/elements/select/select.css +10 -9
  137. package/dist/elements/select/select.d.ts.map +1 -1
  138. package/dist/elements/select/select.js +1 -0
  139. package/dist/elements/slider/slider.css +5 -1
  140. package/dist/elements/stories-viewer/stories-viewer.css +10 -2
  141. package/dist/elements/table/table.meta.d.ts +55 -0
  142. package/dist/elements/table/table.meta.d.ts.map +1 -0
  143. package/dist/elements/table/table.meta.js +65 -0
  144. package/dist/elements/tag/tag.css +4 -4
  145. package/dist/elements/tree/tree.css +3 -3
  146. package/dist/elements/tree-item/tree-item.css +5 -3
  147. package/dist/metadata/alert-dialog.json +90 -85
  148. package/dist/metadata/alert.json +22 -22
  149. package/dist/metadata/avatar.json +26 -26
  150. package/dist/metadata/badge.json +13 -13
  151. package/dist/metadata/breadcrumb.json +9 -9
  152. package/dist/metadata/button.json +40 -40
  153. package/dist/metadata/carousel.json +133 -133
  154. package/dist/metadata/checkbox.json +13 -13
  155. package/dist/metadata/close-button.json +15 -15
  156. package/dist/metadata/color-scheme-icon.json +13 -13
  157. package/dist/metadata/combobox.json +77 -94
  158. package/dist/metadata/dialog.json +49 -44
  159. package/dist/metadata/disclosure.json +17 -17
  160. package/dist/metadata/divider.json +12 -12
  161. package/dist/metadata/drawer.json +61 -61
  162. package/dist/metadata/dropdown-item.json +50 -50
  163. package/dist/metadata/dropdown.json +32 -32
  164. package/dist/metadata/form-field.json +15 -15
  165. package/dist/metadata/icon.json +8 -8
  166. package/dist/metadata/index.json +1761 -1765
  167. package/dist/metadata/input-group.json +5 -5
  168. package/dist/metadata/input-otp.json +17 -17
  169. package/dist/metadata/input-stepper.json +24 -24
  170. package/dist/metadata/input.json +31 -31
  171. package/dist/metadata/popover.json +49 -49
  172. package/dist/metadata/progress.json +15 -15
  173. package/dist/metadata/prose-editor.json +110 -116
  174. package/dist/metadata/radio.json +15 -15
  175. package/dist/metadata/rating.json +25 -47
  176. package/dist/metadata/segmented-control.json +24 -46
  177. package/dist/metadata/select.json +81 -98
  178. package/dist/metadata/skeleton.json +12 -12
  179. package/dist/metadata/slider.json +60 -78
  180. package/dist/metadata/spinner.json +5 -5
  181. package/dist/metadata/sticky-bar.json +13 -13
  182. package/dist/metadata/stories-viewer.json +105 -105
  183. package/dist/metadata/stories.json +17 -17
  184. package/dist/metadata/story.json +41 -41
  185. package/dist/metadata/switch.json +9 -9
  186. package/dist/metadata/table.json +88 -0
  187. package/dist/metadata/tabs.json +26 -26
  188. package/dist/metadata/tag.json +50 -50
  189. package/dist/metadata/textarea.json +28 -28
  190. package/dist/metadata/toast.json +16 -16
  191. package/dist/metadata/tooltip.json +49 -49
  192. package/dist/metadata/tree-item.json +73 -73
  193. package/dist/metadata/tree.json +39 -39
  194. package/dist/shared/controllers/listbox-nav.d.ts +7 -0
  195. package/dist/shared/controllers/listbox-nav.d.ts.map +1 -1
  196. package/dist/shared/controllers/listbox-nav.js +12 -0
  197. package/dist/shared/styles/button-core.css +2 -2
  198. package/dist/shared/styles/checkbox-appearance.css +2 -2
  199. package/dist/shared/styles/picker-core.css +31 -7
  200. package/dist/templates/elements/alert-dialog.md +19 -18
  201. package/dist/templates/elements/alert.md +4 -4
  202. package/dist/templates/elements/avatar.md +9 -9
  203. package/dist/templates/elements/badge.md +4 -4
  204. package/dist/templates/elements/breadcrumb.md +4 -4
  205. package/dist/templates/elements/button.md +8 -8
  206. package/dist/templates/elements/carousel.md +32 -32
  207. package/dist/templates/elements/checkbox.md +4 -4
  208. package/dist/templates/elements/close-button.md +2 -2
  209. package/dist/templates/elements/color-scheme-icon.md +13 -13
  210. package/dist/templates/elements/combobox.md +19 -19
  211. package/dist/templates/elements/dialog.md +11 -10
  212. package/dist/templates/elements/disclosure.md +3 -3
  213. package/dist/templates/elements/divider.md +2 -2
  214. package/dist/templates/elements/drawer.md +15 -15
  215. package/dist/templates/elements/dropdown.md +15 -15
  216. package/dist/templates/elements/form-field.md +3 -3
  217. package/dist/templates/elements/icon.md +1 -1
  218. package/dist/templates/elements/input-otp.md +5 -5
  219. package/dist/templates/elements/input-stepper.md +4 -4
  220. package/dist/templates/elements/input.md +15 -8
  221. package/dist/templates/elements/popover.md +8 -8
  222. package/dist/templates/elements/progress.md +3 -3
  223. package/dist/templates/elements/prose-editor.md +38 -39
  224. package/dist/templates/elements/radio.md +6 -6
  225. package/dist/templates/elements/rating.md +5 -13
  226. package/dist/templates/elements/segmented-control.md +4 -4
  227. package/dist/templates/elements/select.md +23 -23
  228. package/dist/templates/elements/skeleton.md +2 -2
  229. package/dist/templates/elements/slider.md +13 -13
  230. package/dist/templates/elements/spinner.md +1 -1
  231. package/dist/templates/elements/sticky-bar.md +2 -2
  232. package/dist/templates/elements/stories-viewer.md +29 -29
  233. package/dist/templates/elements/stories.md +4 -4
  234. package/dist/templates/elements/story.md +11 -11
  235. package/dist/templates/elements/switch.md +5 -5
  236. package/dist/templates/elements/table.md +210 -0
  237. package/dist/templates/elements/tabs.md +4 -4
  238. package/dist/templates/elements/tag.md +14 -14
  239. package/dist/templates/elements/textarea.md +8 -8
  240. package/dist/templates/elements/toast.md +4 -4
  241. package/dist/templates/elements/tooltip.md +9 -9
  242. package/dist/templates/elements/tree-item.md +18 -18
  243. package/dist/templates/elements/tree.md +13 -13
  244. package/dist/templates/foundations/focus.md +303 -0
  245. package/elements.json +9 -0
  246. package/package.json +1 -1
  247. package/postcss-plugin-prefix.js +2 -2
  248. package/templates/SKILL.md.tpl +1 -0
  249. package/templates/choosing-elements.md.tpl +1 -0
@@ -15,22 +15,6 @@
15
15
  "js": "luxen-ui/tooltip"
16
16
  },
17
17
  "properties": [
18
- {
19
- "name": "for",
20
- "attribute": "for",
21
- "type": "string",
22
- "default": "''",
23
- "reflects": true,
24
- "description": "The HTML id of the element triggering the tooltip."
25
- },
26
- {
27
- "name": "placement",
28
- "attribute": "placement",
29
- "type": "Placement",
30
- "default": "'top'",
31
- "reflects": false,
32
- "description": "The preferred placement of the tooltip."
33
- },
34
18
  {
35
19
  "name": "distance",
36
20
  "attribute": "distance",
@@ -40,12 +24,12 @@
40
24
  "description": "The distance in pixels from the target element."
41
25
  },
42
26
  {
43
- "name": "showDelay",
44
- "attribute": "show-delay",
45
- "type": "number",
46
- "default": "0",
47
- "reflects": false,
48
- "description": "Milliseconds the pointer must dwell on the trigger before the tooltip\nshows. Applies to `hover` only — focus shows immediately."
27
+ "name": "for",
28
+ "attribute": "for",
29
+ "type": "string",
30
+ "default": "''",
31
+ "reflects": true,
32
+ "description": "The HTML id of the element triggering the tooltip."
49
33
  },
50
34
  {
51
35
  "name": "hideDelay",
@@ -64,12 +48,20 @@
64
48
  "description": "Whether or not the tooltip is visible."
65
49
  },
66
50
  {
67
- "name": "withoutArrow",
68
- "attribute": "without-arrow",
69
- "type": "boolean",
70
- "default": "false",
71
- "reflects": true,
72
- "description": "Hide the directional arrow."
51
+ "name": "placement",
52
+ "attribute": "placement",
53
+ "type": "Placement",
54
+ "default": "'top'",
55
+ "reflects": false,
56
+ "description": "The preferred placement of the tooltip."
57
+ },
58
+ {
59
+ "name": "showDelay",
60
+ "attribute": "show-delay",
61
+ "type": "number",
62
+ "default": "0",
63
+ "reflects": false,
64
+ "description": "Milliseconds the pointer must dwell on the trigger before the tooltip\nshows. Applies to `hover` only — focus shows immediately."
73
65
  },
74
66
  {
75
67
  "name": "trigger",
@@ -78,6 +70,14 @@
78
70
  "default": "'hover focus'",
79
71
  "reflects": false,
80
72
  "description": "Space-separated list of trigger modes: `hover`, `focus`, `click`, `manual`."
73
+ },
74
+ {
75
+ "name": "withoutArrow",
76
+ "attribute": "without-arrow",
77
+ "type": "boolean",
78
+ "default": "false",
79
+ "reflects": true,
80
+ "description": "Hide the directional arrow."
81
81
  }
82
82
  ],
83
83
  "attributes": [],
@@ -96,16 +96,16 @@
96
96
  "description": ""
97
97
  },
98
98
  {
99
- "name": "toggle",
99
+ "name": "reposition",
100
100
  "params": [],
101
101
  "returns": null,
102
- "description": ""
102
+ "description": "Recompute the position against the current trigger. Use it when you move\nthe anchor yourself and the tooltip has to follow. No-op when closed;\nhides if the anchor is gone."
103
103
  },
104
104
  {
105
- "name": "reposition",
105
+ "name": "toggle",
106
106
  "params": [],
107
107
  "returns": null,
108
- "description": "Recompute the position against the current trigger. Use it when you move\nthe anchor yourself and the tooltip has to follow. No-op when closed;\nhides if the anchor is gone."
108
+ "description": ""
109
109
  }
110
110
  ],
111
111
  "slots": [
@@ -116,50 +116,50 @@
116
116
  ],
117
117
  "cssClasses": [],
118
118
  "cssParts": [
119
- {
120
- "name": "body",
121
- "description": "The tooltip popover container."
122
- },
123
119
  {
124
120
  "name": "arrow",
125
121
  "description": "The directional arrow element."
122
+ },
123
+ {
124
+ "name": "body",
125
+ "description": "The tooltip popover container."
126
126
  }
127
127
  ],
128
128
  "cssProperties": [
129
129
  {
130
- "name": "--background-color",
131
- "default": null,
132
- "description": "Background color for this tooltip instance. Defaults to the global `--l-tooltip-background-color` token (a neutral inverse surface, dark in light mode / light in dark mode) — override that token to re-skin every tooltip at once."
130
+ "name": "--arrow-size",
131
+ "default": "6px",
132
+ "description": "Arrow size."
133
133
  },
134
134
  {
135
- "name": "--text-color",
135
+ "name": "--background-color",
136
136
  "default": null,
137
- "description": "Text color. If unset, auto-derived from `--background-color` luminance."
137
+ "description": "Background color for this tooltip instance. Defaults to the global `--l-tooltip-background-color` token (a neutral inverse surface, dark in light mode / light in dark mode) — override that token to re-skin every tooltip at once."
138
138
  },
139
139
  {
140
140
  "name": "--border-radius",
141
141
  "default": "4px",
142
142
  "description": "Border radius."
143
143
  },
144
+ {
145
+ "name": "--hide-duration",
146
+ "default": "150ms",
147
+ "description": "Hide animation duration."
148
+ },
144
149
  {
145
150
  "name": "--max-width",
146
151
  "default": "180px",
147
152
  "description": "Maximum width."
148
153
  },
149
- {
150
- "name": "--arrow-size",
151
- "default": "6px",
152
- "description": "Arrow size."
153
- },
154
154
  {
155
155
  "name": "--show-duration",
156
156
  "default": "150ms",
157
157
  "description": "Show animation duration."
158
158
  },
159
159
  {
160
- "name": "--hide-duration",
161
- "default": "150ms",
162
- "description": "Hide animation duration."
160
+ "name": "--text-color",
161
+ "default": null,
162
+ "description": "Text color. If unset, auto-derived from `--background-color` luminance."
163
163
  }
164
164
  ],
165
165
  "commands": [],
@@ -15,6 +15,22 @@
15
15
  "js": "luxen-ui/tree-item"
16
16
  },
17
17
  "properties": [
18
+ {
19
+ "name": "depth",
20
+ "attribute": null,
21
+ "type": "number",
22
+ "default": null,
23
+ "reflects": false,
24
+ "description": "Set by `<l-tree>`: depth of the item in the tree (0 = root)."
25
+ },
26
+ {
27
+ "name": "disabled",
28
+ "attribute": "disabled",
29
+ "type": "boolean",
30
+ "default": "false",
31
+ "reflects": true,
32
+ "description": "Whether the item is disabled."
33
+ },
18
34
  {
19
35
  "name": "expanded",
20
36
  "attribute": "expanded",
@@ -24,12 +40,12 @@
24
40
  "description": "Whether the item is expanded."
25
41
  },
26
42
  {
27
- "name": "selected",
28
- "attribute": "selected",
43
+ "name": "hasChildren",
44
+ "attribute": null,
29
45
  "type": "boolean",
30
- "default": "false",
31
- "reflects": true,
32
- "description": "Whether the item is selected."
46
+ "default": null,
47
+ "reflects": false,
48
+ "description": "Whether this item has nested tree-item children."
33
49
  },
34
50
  {
35
51
  "name": "indeterminate",
@@ -39,14 +55,6 @@
39
55
  "reflects": true,
40
56
  "description": "Whether the checkbox is indeterminate (some descendants selected). Managed by\n`<l-tree>` in cascade mode; set it yourself with `independent`."
41
57
  },
42
- {
43
- "name": "disabled",
44
- "attribute": "disabled",
45
- "type": "boolean",
46
- "default": "false",
47
- "reflects": true,
48
- "description": "Whether the item is disabled."
49
- },
50
58
  {
51
59
  "name": "lazy",
52
60
  "attribute": "lazy",
@@ -64,40 +72,32 @@
64
72
  "description": "Whether the item is currently loading (shows a spinner)."
65
73
  },
66
74
  {
67
- "name": "showCheckbox",
68
- "attribute": null,
75
+ "name": "selected",
76
+ "attribute": "selected",
69
77
  "type": "boolean",
70
- "default": null,
71
- "reflects": false,
72
- "description": "Set by `<l-tree>`: whether a checkbox is shown."
73
- },
74
- {
75
- "name": "depth",
76
- "attribute": null,
77
- "type": "number",
78
- "default": null,
79
- "reflects": false,
80
- "description": "Set by `<l-tree>`: depth of the item in the tree (0 = root)."
78
+ "default": "false",
79
+ "reflects": true,
80
+ "description": "Whether the item is selected."
81
81
  },
82
82
  {
83
- "name": "hasChildren",
83
+ "name": "showCheckbox",
84
84
  "attribute": null,
85
85
  "type": "boolean",
86
86
  "default": null,
87
87
  "reflects": false,
88
- "description": "Whether this item has nested tree-item children."
88
+ "description": "Set by `<l-tree>`: whether a checkbox is shown."
89
89
  }
90
90
  ],
91
91
  "attributes": [],
92
92
  "events": [
93
93
  {
94
- "name": "expand",
95
- "description": "Fired when the item is expanded.",
94
+ "name": "collapse",
95
+ "description": "Fired when the item is collapsed.",
96
96
  "cancelable": false
97
97
  },
98
98
  {
99
- "name": "collapse",
100
- "description": "Fired when the item is collapsed.",
99
+ "name": "expand",
100
+ "description": "Fired when the item is expanded.",
101
101
  "cancelable": false
102
102
  },
103
103
  {
@@ -107,25 +107,6 @@
107
107
  }
108
108
  ],
109
109
  "methods": [
110
- {
111
- "name": "setPosition",
112
- "params": [
113
- {
114
- "name": "level",
115
- "type": "number"
116
- },
117
- {
118
- "name": "posInSet",
119
- "type": "number"
120
- },
121
- {
122
- "name": "setSize",
123
- "type": "number"
124
- }
125
- ],
126
- "returns": null,
127
- "description": "Set by `<l-tree>`: ARIA position within the tree. `level` is 1-based depth,\n`posInSet`/`setSize` describe the item's rank among its siblings. These let\nscreen readers announce \"level 2, 3 of 5\" even when `lazy` children keep the\nfull set out of the DOM."
128
- },
129
110
  {
130
111
  "name": "getChildrenItems",
131
112
  "params": [
@@ -137,6 +118,12 @@
137
118
  "returns": "TreeItem[]",
138
119
  "description": "Returns the child `<l-tree-item>` elements directly under this one."
139
120
  },
121
+ {
122
+ "name": "getTextLabel",
123
+ "params": [],
124
+ "returns": "string",
125
+ "description": "Returns the text label of this item."
126
+ },
140
127
  {
141
128
  "name": "isLeaf",
142
129
  "params": [],
@@ -144,10 +131,23 @@
144
131
  "description": "Returns true if this item has no expandable children."
145
132
  },
146
133
  {
147
- "name": "getTextLabel",
148
- "params": [],
149
- "returns": "string",
150
- "description": "Returns the text label of this item."
134
+ "name": "setPosition",
135
+ "params": [
136
+ {
137
+ "name": "level",
138
+ "type": "number"
139
+ },
140
+ {
141
+ "name": "posInSet",
142
+ "type": "number"
143
+ },
144
+ {
145
+ "name": "setSize",
146
+ "type": "number"
147
+ }
148
+ ],
149
+ "returns": null,
150
+ "description": "Set by `<l-tree>`: ARIA position within the tree. `level` is 1-based depth,\n`posInSet`/`setSize` describe the item's rank among its siblings. These let\nscreen readers announce \"level 2, 3 of 5\" even when `lazy` children keep the\nfull set out of the DOM."
151
151
  },
152
152
  {
153
153
  "name": "toggle",
@@ -162,24 +162,24 @@
162
162
  "description": "Label content (kept to a single row)."
163
163
  },
164
164
  {
165
- "name": "prefix",
166
- "description": "Leading content before the label (e.g. icon)."
165
+ "name": "collapse-icon",
166
+ "description": "Icon shown when the item is expanded."
167
167
  },
168
168
  {
169
- "name": "suffix",
170
- "description": "Trailing content."
169
+ "name": "content",
170
+ "description": "Block content that belongs to the item but not to its header row (e.g. comment body, action bar). Hidden when a branch is collapsed."
171
171
  },
172
172
  {
173
173
  "name": "expand-icon",
174
174
  "description": "Icon shown when the item is collapsed."
175
175
  },
176
176
  {
177
- "name": "collapse-icon",
178
- "description": "Icon shown when the item is expanded."
177
+ "name": "prefix",
178
+ "description": "Leading content before the label (e.g. icon)."
179
179
  },
180
180
  {
181
- "name": "content",
182
- "description": "Block content that belongs to the item but not to its header row (e.g. comment body, action bar). Hidden when a branch is collapsed."
181
+ "name": "suffix",
182
+ "description": "Trailing content."
183
183
  }
184
184
  ],
185
185
  "cssClasses": [],
@@ -189,28 +189,28 @@
189
189
  "description": "The item row."
190
190
  },
191
191
  {
192
- "name": "expand-button",
193
- "description": "The chevron toggle area."
192
+ "name": "branch",
193
+ "description": "Wrapper around the content and children slots; carries the indent guide."
194
194
  },
195
195
  {
196
196
  "name": "checkbox",
197
197
  "description": "The native checkbox input."
198
198
  },
199
199
  {
200
- "name": "label",
201
- "description": "The label container."
202
- },
203
- {
204
- "name": "branch",
205
- "description": "Wrapper around the content and children slots; carries the indent guide."
200
+ "name": "children",
201
+ "description": "The nested items container."
206
202
  },
207
203
  {
208
204
  "name": "content",
209
205
  "description": "The content slot wrapper (block area between the row and the children)."
210
206
  },
211
207
  {
212
- "name": "children",
213
- "description": "The nested items container."
208
+ "name": "expand-button",
209
+ "description": "The chevron toggle area."
210
+ },
211
+ {
212
+ "name": "label",
213
+ "description": "The label container."
214
214
  }
215
215
  ],
216
216
  "cssProperties": [],
@@ -15,14 +15,6 @@
15
15
  "js": "luxen-ui/tree"
16
16
  },
17
17
  "properties": [
18
- {
19
- "name": "selection",
20
- "attribute": "selection",
21
- "type": "TreeSelection",
22
- "default": "'single'",
23
- "reflects": true,
24
- "description": "Selection behaviour:\n- `single` (default): at most one item selected via `aria-selected`.\n- `multiple`: any number of items selected. Checkboxes are rendered.\n- `leaf`: only leaf items can be selected (single). Branches just toggle.\n- `none`: purely navigable, no selection state."
25
- },
26
18
  {
27
19
  "name": "independent",
28
20
  "attribute": "independent",
@@ -30,6 +22,14 @@
30
22
  "default": "false",
31
23
  "reflects": true,
32
24
  "description": "When set with `selection=\"multiple\"`, parent and children selection are decoupled:\ntoggling a parent does NOT toggle its descendants and vice versa.\nWithout it, selection cascades both ways and branches may become indeterminate.\n\nIn independent mode the tree never writes `indeterminate`: the consumer owns\nit (e.g. to show a partial state computed from rows not in the DOM). On\nleaving the cascade, the tree clears only the flags its cascade wrote."
25
+ },
26
+ {
27
+ "name": "selection",
28
+ "attribute": "selection",
29
+ "type": "TreeSelection",
30
+ "default": "'single'",
31
+ "reflects": true,
32
+ "description": "Selection behaviour:\n- `single` (default): at most one item selected via `aria-selected`.\n- `multiple`: any number of items selected. Checkboxes are rendered.\n- `leaf`: only leaf items can be selected (single). Branches just toggle.\n- `none`: purely navigable, no selection state."
33
33
  }
34
34
  ],
35
35
  "attributes": [],
@@ -41,6 +41,18 @@
41
41
  }
42
42
  ],
43
43
  "methods": [
44
+ {
45
+ "name": "collapseAll",
46
+ "params": [],
47
+ "returns": null,
48
+ "description": "Collapses every item."
49
+ },
50
+ {
51
+ "name": "expandAll",
52
+ "params": [],
53
+ "returns": null,
54
+ "description": "Expands every item that has children."
55
+ },
44
56
  {
45
57
  "name": "getAllItems",
46
58
  "params": [
@@ -57,18 +69,6 @@
57
69
  "params": [],
58
70
  "returns": "TreeItem[]",
59
71
  "description": "Returns currently selected items."
60
- },
61
- {
62
- "name": "expandAll",
63
- "params": [],
64
- "returns": null,
65
- "description": "Expands every item that has children."
66
- },
67
- {
68
- "name": "collapseAll",
69
- "params": [],
70
- "returns": null,
71
- "description": "Collapses every item."
72
72
  }
73
73
  ],
74
74
  "slots": [
@@ -86,14 +86,14 @@
86
86
  ],
87
87
  "cssProperties": [
88
88
  {
89
- "name": "--indent-size",
90
- "default": "1rem",
91
- "description": "Horizontal indent per depth level."
89
+ "name": "--chevron-size",
90
+ "default": "1.125rem",
91
+ "description": "Size of the expand/collapse chevron box."
92
92
  },
93
93
  {
94
- "name": "--indent-guide-width",
95
- "default": "1px",
96
- "description": "Thickness of the vertical guide line between a parent and its children. Set to `0` to hide guides."
94
+ "name": "--indent-guide-color",
95
+ "default": null,
96
+ "description": "Color of the guide line."
97
97
  },
98
98
  {
99
99
  "name": "--indent-guide-style",
@@ -101,9 +101,19 @@
101
101
  "description": "Line style of the guide (`solid`, `dashed`, `dotted`, `double`…)."
102
102
  },
103
103
  {
104
- "name": "--indent-guide-color",
105
- "default": null,
106
- "description": "Color of the guide line."
104
+ "name": "--indent-guide-width",
105
+ "default": "1px",
106
+ "description": "Thickness of the vertical guide line between a parent and its children. Set to `0` to hide guides."
107
+ },
108
+ {
109
+ "name": "--indent-size",
110
+ "default": "1rem",
111
+ "description": "Horizontal indent per depth level."
112
+ },
113
+ {
114
+ "name": "--item-gap",
115
+ "default": "0.375rem",
116
+ "description": "Horizontal gap between chevron, prefix, label and suffix on the row; also drives the content slot left indent."
107
117
  },
108
118
  {
109
119
  "name": "--row-height",
@@ -114,16 +124,6 @@
114
124
  "name": "--row-padding-inline",
115
125
  "default": "0.25rem",
116
126
  "description": "Inner inline padding of the row; also drives the content slot left indent and the indent guide column."
117
- },
118
- {
119
- "name": "--chevron-size",
120
- "default": "1.125rem",
121
- "description": "Size of the expand/collapse chevron box."
122
- },
123
- {
124
- "name": "--item-gap",
125
- "default": "0.375rem",
126
- "description": "Horizontal gap between chevron, prefix, label and suffix on the row; also drives the content slot left indent."
127
127
  }
128
128
  ],
129
129
  "commands": [],
@@ -32,6 +32,13 @@ export declare class ListboxNavController implements ReactiveController {
32
32
  private config;
33
33
  /** Index of the active option, or `-1` when none is active. */
34
34
  activeIndex: number;
35
+ /**
36
+ * Whether the keyboard (not the pointer) last moved the active option. DOM
37
+ * focus stays on the input, so `:focus-visible` cannot tell: hosts render it
38
+ * on the listbox (`data-nav="keyboard"`) and the active option then draws the
39
+ * focus ring, while a pointer-driven one keeps the plain hover tint.
40
+ */
41
+ keyboard: boolean;
35
42
  constructor(host: ReactiveControllerHost, config: ListboxNavConfig);
36
43
  hostConnected(): void;
37
44
  /** The DOM id for the option at `index` (matches the rendered option `id`). */
@@ -1 +1 @@
1
- {"version":3,"file":"listbox-nav.d.ts","sourceRoot":"","sources":["../../../src/html/shared/controllers/listbox-nav.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,KAAK,CAAC;AAEtE;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,MAAM,CAAC;IACvB,4EAA4E;IAC5E,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,6CAA6C;IAC7C,MAAM,EAAE,MAAM,OAAO,CAAC;IACtB,+EAA+E;IAC/E,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,oEAAoE;IACpE,iBAAiB,EAAE,MAAM,SAAS,CAAC,WAAW,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;CACpE;AAED;;;;;;;;;GASG;AACH,qBAAa,oBAAqB,YAAW,kBAAkB;IAC7D,OAAO,CAAC,IAAI,CAAyB;IACrC,OAAO,CAAC,MAAM,CAAmB;IAEjC,+DAA+D;IAC/D,WAAW,SAAM;IAEjB,YAAY,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,gBAAgB,EAIjE;IAED,aAAa,SAAK;IAElB,+EAA+E;IAC/E,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9B;IAED,6EAA6E;IAC7E,IAAI,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAIzC;IAED,+BAA+B;IAC/B,KAAK,SAIJ;IAED,8EAA8E;IAC9E,SAAS,CAAC,KAAK,EAAE,MAAM,QAItB;IAED,6EAA6E;IAC7E,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,QAOhB;IAED;;;;;;;OAOG;IACH,QAAQ,CAAC,aAAa,MAAO,YAAY,UAQvC;IAEF;;;OAGG;IACH,QAAQ,CAAC,cAAc,MAAO,YAAY,UAGxC;IAEF;;;;OAIG;IACH,SAAS,CAAC,CAAC,EAAE,aAAa,GAAG,OAAO,CAanC;IAED,OAAO,CAAC,KAAK;IAmBb,OAAO,CAAC,qBAAqB;CAI9B"}
1
+ {"version":3,"file":"listbox-nav.d.ts","sourceRoot":"","sources":["../../../src/html/shared/controllers/listbox-nav.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,KAAK,CAAC;AAEtE;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,MAAM,CAAC;IACvB,4EAA4E;IAC5E,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,6CAA6C;IAC7C,MAAM,EAAE,MAAM,OAAO,CAAC;IACtB,+EAA+E;IAC/E,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,oEAAoE;IACpE,iBAAiB,EAAE,MAAM,SAAS,CAAC,WAAW,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;CACpE;AAED;;;;;;;;;GASG;AACH,qBAAa,oBAAqB,YAAW,kBAAkB;IAC7D,OAAO,CAAC,IAAI,CAAyB;IACrC,OAAO,CAAC,MAAM,CAAmB;IAEjC,+DAA+D;IAC/D,WAAW,SAAM;IAEjB;;;;;OAKG;IACH,QAAQ,UAAS;IAEjB,YAAY,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,gBAAgB,EAIjE;IAED,aAAa,SAAK;IAElB,+EAA+E;IAC/E,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9B;IAED,6EAA6E;IAC7E,IAAI,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAIzC;IAED,+BAA+B;IAC/B,KAAK,SAIJ;IAED,8EAA8E;IAC9E,SAAS,CAAC,KAAK,EAAE,MAAM,QAItB;IAED,6EAA6E;IAC7E,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,QAQhB;IAED;;;;;;;OAOG;IACH,QAAQ,CAAC,aAAa,MAAO,YAAY,UAYvC;IAEF;;;OAGG;IACH,QAAQ,CAAC,cAAc,MAAO,YAAY,UAGxC;IAEF;;;;OAIG;IACH,SAAS,CAAC,CAAC,EAAE,aAAa,GAAG,OAAO,CAanC;IAED,OAAO,CAAC,KAAK;IAmBb,OAAO,CAAC,qBAAqB;CAI9B"}
@@ -12,6 +12,13 @@ export class ListboxNavController {
12
12
  constructor(host, config) {
13
13
  /** Index of the active option, or `-1` when none is active. */
14
14
  this.activeIndex = -1;
15
+ /**
16
+ * Whether the keyboard (not the pointer) last moved the active option. DOM
17
+ * focus stays on the input, so `:focus-visible` cannot tell: hosts render it
18
+ * on the listbox (`data-nav="keyboard"`) and the active option then draws the
19
+ * focus ring, while a pointer-driven one keeps the plain hover tint.
20
+ */
21
+ this.keyboard = false;
15
22
  /**
16
23
  * Bind on the `role="listbox"` as `@pointermove`: the option under the mouse
17
24
  * becomes the active one, so hover and keyboard share a single highlight (and
@@ -26,6 +33,10 @@ export class ListboxNavController {
26
33
  const row = e.target.closest('[role="option"]');
27
34
  if (!row)
28
35
  return;
36
+ if (this.keyboard) {
37
+ this.keyboard = false;
38
+ this.host.requestUpdate();
39
+ }
29
40
  const index = Array.prototype.indexOf.call(this.config.getOptionElements() ?? [], row);
30
41
  if (index < 0)
31
42
  return;
@@ -74,6 +85,7 @@ export class ListboxNavController {
74
85
  }
75
86
  /** Move the active option by `diff`, opening the listbox first if closed. */
76
87
  move(diff) {
88
+ this.keyboard = true;
77
89
  if (!this.config.isOpen()) {
78
90
  this.config.open();
79
91
  // Land on the first (Down) or last (Up) option — APG.
@@ -88,8 +88,8 @@
88
88
  }
89
89
 
90
90
  &:focus-visible {
91
- outline: 2px solid var(--l-focus-ring);
92
- outline-offset: 2px;
91
+ outline: var(--l-focus-ring-width) solid var(--l-focus-ring-color);
92
+ outline-offset: var(--l-focus-ring-offset);
93
93
  }
94
94
  }
95
95
 
@@ -71,8 +71,8 @@
71
71
  }
72
72
 
73
73
  &:focus-visible {
74
- outline: 2px solid var(--l-focus-ring);
75
- outline-offset: 2px;
74
+ outline: var(--l-focus-ring-width) solid var(--l-focus-ring-color);
75
+ outline-offset: var(--l-focus-ring-offset);
76
76
  }
77
77
 
78
78
  /* High contrast: the checked fill is forced to Canvas, hiding the accent and