@fusion.dev/helix 0.145.0 → 0.146.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 (153) hide show
  1. package/custom-elements.json +7841 -3357
  2. package/dist/accordion/item/accordion-item.css.js +12 -8
  3. package/dist/accordion/item/accordion-item.d.ts +8 -0
  4. package/dist/aura/root/aura-root.css.js +3 -0
  5. package/dist/aura/root/aura-root.d.ts +21 -9
  6. package/dist/aura/root/aura-root.js +23 -12
  7. package/dist/badge/root/badge-root.css.js +86 -16
  8. package/dist/badge/root/badge-root.d.ts +18 -0
  9. package/dist/badge/root/badge-root.js +6 -0
  10. package/dist/blockquote/root/blockquote-root.css.js +2 -2
  11. package/dist/blockquote/root/blockquote-root.d.ts +2 -0
  12. package/dist/breadcrumbs/root/breadcrumbs-root.css.js +23 -0
  13. package/dist/breadcrumbs/root/breadcrumbs-root.d.ts +1 -0
  14. package/dist/button/root/button-root.css.js +4 -3
  15. package/dist/button/root/button-root.d.ts +2 -0
  16. package/dist/callout/root/callout-root.css.js +4 -3
  17. package/dist/callout/root/callout-root.d.ts +6 -2
  18. package/dist/card/root/card-root.d.ts +6 -0
  19. package/dist/chat/message/chat-message.css.js +0 -62
  20. package/dist/chat/message/chat-message.js +2 -1
  21. package/dist/chat/root/chat-root.css.js +7 -0
  22. package/dist/chat/root/chat-root.d.ts +2 -0
  23. package/dist/chat/root/chat-root.js +2 -1
  24. package/dist/chat/typing.css.d.ts +1 -0
  25. package/dist/chat/typing.css.js +62 -0
  26. package/dist/checkbox/root/checkbox-root.css.js +15 -0
  27. package/dist/checkbox/root/checkbox-root.d.ts +2 -1
  28. package/dist/code/root/code-root.css.js +2 -2
  29. package/dist/code/root/code-root.d.ts +2 -0
  30. package/dist/code-block/root/code-block-root.css.js +24 -0
  31. package/dist/code-block/root/code-block-root.d.ts +2 -1
  32. package/dist/color-input/root/color-input-root.css.js +10 -0
  33. package/dist/color-picker/root/color-picker-root.css.js +8 -0
  34. package/dist/color-picker/root/color-picker-root.d.ts +1 -0
  35. package/dist/copy-button/root/copy-button-root.css.js +15 -6
  36. package/dist/copy-button/root/copy-button-root.d.ts +7 -0
  37. package/dist/data-table/root/data-table-root.css.js +14 -7
  38. package/dist/data-table/root/data-table-root.d.ts +5 -0
  39. package/dist/date-input/root/date-input-root.css.js +10 -0
  40. package/dist/donut-chart/root/donut-chart-root.css.js +19 -0
  41. package/dist/donut-chart/root/donut-chart-root.d.ts +3 -0
  42. package/dist/drawer/root/drawer-root.css.js +47 -0
  43. package/dist/drawer/root/drawer-root.d.ts +5 -0
  44. package/dist/drilldown/item/drilldown-item.css.js +6 -6
  45. package/dist/drilldown/item/drilldown-item.d.ts +6 -0
  46. package/dist/drilldown/root/drilldown-root.css.js +25 -12
  47. package/dist/drilldown/root/drilldown-root.d.ts +10 -0
  48. package/dist/element-events.generated.js +15 -5
  49. package/dist/file-input/root/file-input-root.css.js +12 -11
  50. package/dist/file-input/root/file-input-root.d.ts +11 -0
  51. package/dist/filter-input/root/filter-input-root.css.js +6 -5
  52. package/dist/filter-input/root/filter-input-root.d.ts +5 -0
  53. package/dist/flex/root/flex-root.css.js +9 -0
  54. package/dist/flex/root/flex-root.d.ts +17 -6
  55. package/dist/graph/root/graph-root.css.js +11 -8
  56. package/dist/graph/root/graph-root.d.ts +8 -0
  57. package/dist/grid/root/grid-root.d.ts +4 -1
  58. package/dist/heatmap/root/heatmap-root.css.js +2 -1
  59. package/dist/icon-button/root/icon-button-root.css.js +68 -13
  60. package/dist/icon-button/root/icon-button-root.d.ts +4 -0
  61. package/dist/kbd/root/kbd-root.css.js +27 -0
  62. package/dist/kbd/root/kbd-root.d.ts +2 -0
  63. package/dist/lightbox/item/lightbox-item.css.js +4 -0
  64. package/dist/lightbox/root/lightbox-root.css.js +41 -0
  65. package/dist/line-chart/root/line-chart-root.css.js +16 -0
  66. package/dist/line-chart/root/line-chart-root.d.ts +2 -0
  67. package/dist/listbox/root/listbox-root.css.js +9 -0
  68. package/dist/listbox/root/listbox-root.d.ts +1 -0
  69. package/dist/loader/root/loader-root.css.js +3 -3
  70. package/dist/loader/root/loader-root.d.ts +2 -0
  71. package/dist/megamenu/root/megamenu-root.css.js +16 -13
  72. package/dist/megamenu/root/megamenu-root.d.ts +11 -0
  73. package/dist/menu/item/menu-item.css.js +25 -4
  74. package/dist/menu/item/menu-item.d.ts +1 -0
  75. package/dist/meter/root/meter-root.css.js +6 -3
  76. package/dist/meter/root/meter-root.d.ts +1 -0
  77. package/dist/navigation/root/navigation-root.d.ts +7 -0
  78. package/dist/notifications/root/notifications-root.css.js +6 -0
  79. package/dist/number-input/root/number-input-root.css.js +12 -9
  80. package/dist/number-input/root/number-input-root.d.ts +8 -0
  81. package/dist/object-inspector/root/object-inspector-root.css.js +2 -6
  82. package/dist/option/root/option-root.css.js +1 -1
  83. package/dist/orb/root/orb-root.d.ts +14 -6
  84. package/dist/orb/root/orb-root.js +16 -27
  85. package/dist/pin-input/root/pin-input-root.css.js +4 -4
  86. package/dist/pin-input/root/pin-input-root.d.ts +4 -0
  87. package/dist/progress/root/progress-root.css.js +4 -2
  88. package/dist/progress/root/progress-root.d.ts +1 -0
  89. package/dist/qr-code/root/qr-code-root.css.js +11 -0
  90. package/dist/quote/root/quote-root.css.js +3 -0
  91. package/dist/quote/root/quote-root.d.ts +2 -0
  92. package/dist/radio/root/radio-root.css.js +16 -0
  93. package/dist/radio/root/radio-root.d.ts +2 -1
  94. package/dist/sandbox/frame.d.ts +3 -2
  95. package/dist/sandbox/frame.js +19 -5
  96. package/dist/sandbox/index.d.ts +1 -0
  97. package/dist/sandbox/source/sandbox-source.css.js +70 -0
  98. package/dist/sandbox/source/sandbox-source.d.ts +34 -0
  99. package/dist/sandbox/source/sandbox-source.js +15 -0
  100. package/dist/sandbox/terminal/sandbox-terminal.d.ts +10 -2
  101. package/dist/sandbox/terminal/sandbox-terminal.js +18 -5
  102. package/dist/sandbox/tokens.d.ts +39 -0
  103. package/dist/sandbox/tokens.js +9 -0
  104. package/dist/scatter-chart/root/scatter-chart-root.css.js +9 -0
  105. package/dist/scatter-chart/root/scatter-chart-root.d.ts +2 -0
  106. package/dist/skeleton/root/skeleton-root.css.js +11 -11
  107. package/dist/skeleton/root/skeleton-root.d.ts +1 -0
  108. package/dist/skip-link/root/skip-link-root.css.js +12 -0
  109. package/dist/skip-link/root/skip-link-root.d.ts +3 -3
  110. package/dist/slider/root/slider-root.css.js +26 -0
  111. package/dist/sparkline/root/sparkline-root.css.js +49 -0
  112. package/dist/sparkline/root/sparkline-root.d.ts +6 -0
  113. package/dist/sparkline/root/sparkline-root.js +2 -1
  114. package/dist/speed-dial/item/speed-dial-item.css.js +7 -6
  115. package/dist/speed-dial/item/speed-dial-item.d.ts +3 -0
  116. package/dist/speed-dial/root/speed-dial-root.css.js +10 -5
  117. package/dist/speed-dial/root/speed-dial-root.d.ts +7 -1
  118. package/dist/speed-dial/root/speed-dial-root.js +0 -1
  119. package/dist/stat/root/stat-root.css.js +4 -0
  120. package/dist/steps/root/steps-root.css.js +28 -0
  121. package/dist/steps/root/steps-root.d.ts +5 -0
  122. package/dist/tabs/root/tabs-root.css.js +2 -2
  123. package/dist/tabs/root/tabs-root.d.ts +4 -0
  124. package/dist/tabs/tab/tab.css.js +16 -9
  125. package/dist/tabs/tab/tab.d.ts +7 -0
  126. package/dist/tag/group/tag-group.css.js +6 -0
  127. package/dist/text/clamp.d.ts +5 -2
  128. package/dist/text/clamp.js +3 -1
  129. package/dist/text/root/text-root.css.js +0 -6
  130. package/dist/text/root/text-root.d.ts +2 -1
  131. package/dist/textarea/root/textarea-root.css.js +27 -0
  132. package/dist/time-input/root/time-input-root.css.js +12 -0
  133. package/dist/time-picker/root/time-picker-root.css.js +1 -1
  134. package/dist/toast/item/toast-item.css.js +10 -0
  135. package/dist/toast/root/toast-root.d.ts +1 -0
  136. package/dist/toast/root/toast-root.js +1 -0
  137. package/dist/toggle/group/toggle-group.css.js +10 -7
  138. package/dist/toggle/group/toggle-group.d.ts +6 -1
  139. package/dist/toggle/root/toggle-root.d.ts +6 -0
  140. package/dist/toolbar/root/toolbar-root.css.js +1 -0
  141. package/dist/toolbar/root/toolbar-root.d.ts +2 -0
  142. package/dist/tooltip/root/tooltip-root.css.js +5 -5
  143. package/dist/tooltip/root/tooltip-root.d.ts +4 -0
  144. package/dist/tree/item/tree-item.css.js +19 -9
  145. package/dist/tree/item/tree-item.d.ts +9 -0
  146. package/dist/trend/root/trend-root.css.js +3 -5
  147. package/dist/trend/root/trend-root.d.ts +2 -2
  148. package/dist/virtual-list/root/virtual-list-root.css.js +14 -0
  149. package/dist/virtual-list/root/virtual-list-root.d.ts +7 -1
  150. package/lint.json +1 -1
  151. package/package.json +9 -9
  152. package/types/jsx.d.ts +4289 -631
  153. package/types/vue.d.ts +1296 -127
@@ -22,13 +22,17 @@ import type { CSSResultGroup } from 'lit';
22
22
  * @documentation https://fusion.dev/helix/components/tabs
23
23
  *
24
24
  * @slot - The tabs, as direct children of this element.
25
+ * @slot indicator - A mark of your own, drawn inside the `indicator` part, where the selected tab's place and size reach it.
25
26
  * @slot panels - The panels, as direct children of this element. Panels inside a wrapper are not paired with tabs, because pairing reads only the direct children.
26
27
  *
28
+ * @csspart indicator - The mark that moves to the selected tab. It carries the selected tab's place and size as `--indicator-x`, `--indicator-y`, `--indicator-inline-size` and `--indicator-block-size`.
27
29
  * @csspart panels - The panel container.
28
30
  * @csspart tabs - The tab list.
29
31
  *
30
32
  * @cssproperty --tabs-gap - The space between tabs.
31
33
  * @cssproperty --tabs-indicator-color - The fill of the mark on the current tab: the bar under `underlined`, and the pill otherwise.
34
+ * @cssproperty --tabs-indicator-radius - The corners of the mark.
35
+ * @cssproperty --tabs-indicator-shadow - The shadow under the mark, which the pill and `segmented` draw.
32
36
  * @cssproperty --tabs-indicator-thickness - The height of the bar under `underlined`.
33
37
  * @cssproperty --tabs-rule-color - The color of the rule under the row in `underlined`.
34
38
  */
@@ -11,12 +11,12 @@ block-size: var(--_tab-height, var(--tabs-tab-block-size, var(--helix-size-contr
11
11
  border: none;
12
12
 
13
13
  border-block-end: var(--helix-border-thick) solid transparent;
14
- border-radius: var(--_tab-radius, var(--helix-radii-none));
14
+ border-radius: var(--tabs-tab-radius, var(--_tab-radius, var(--helix-radii-none)));
15
15
  color: var(--tabs-tab-color, var(--helix-color-foreground-subtle));
16
16
  cursor: pointer;
17
17
  font: inherit;
18
- font-size: var(--helix-text-sm);
19
- font-weight: var(--helix-weight-medium);
18
+ font-size: var(--tabs-tab-font-size, var(--helix-text-sm));
19
+ font-weight: var(--tabs-tab-font-weight, var(--helix-weight-medium));
20
20
  display: inline-flex;
21
21
 
22
22
  inline-size: var(--_tab-inline-size, auto);
@@ -31,21 +31,28 @@ color var(--helix-duration-fast) var(--helix-easing-standard);
31
31
  white-space: nowrap;
32
32
  }
33
33
 
34
- [part="tab"]:hover:not(:disabled) {
35
- background-color: color-mix(in oklab, var(--helix-color-foreground) 5%, transparent);
36
- color: var(--helix-color-foreground);
34
+ [part="tab"]:hover:not(:disabled, [aria-disabled="true"]) {
35
+ background-color: var(
36
+ --tabs-tab-hover-background-color,
37
+ color-mix(in oklab, var(--helix-color-foreground) 5%, transparent)
38
+ );
39
+ color: var(--tabs-tab-hover-color, var(--helix-color-foreground));
37
40
  }
38
41
 
39
42
  :host(:state(selected)) [part="tab"],
40
43
  :host(:state(selected)) [part="tab"]:hover {
41
- background-color: var(--_tab-selected-surface, transparent);
44
+ background-color: var(
45
+ --tabs-tab-selected-background-color,
46
+ var(--_tab-selected-surface, transparent)
47
+ );
42
48
  box-shadow: var(--_tab-selected-shadow, none);
43
49
  color: var(--tabs-tab-selected-color, var(--helix-color-foreground));
44
50
  }
45
51
 
46
- [part="tab"]:disabled {
52
+ [part="tab"]:disabled,
53
+ [part="tab"][aria-disabled="true"] {
47
54
  cursor: not-allowed;
48
- opacity: 0.5;
55
+ opacity: var(--tabs-tab-disabled-opacity, 0.5);
49
56
  }
50
57
 
51
58
  [part="tab"]:focus-visible {
@@ -19,7 +19,14 @@ import type { CSSResultGroup } from 'lit';
19
19
  *
20
20
  * @cssproperty --tabs-tab-block-size - The height of a tab. `segmented` sizes its tabs to the track and does not read it.
21
21
  * @cssproperty --tabs-tab-color - The label color of a tab that is not current.
22
+ * @cssproperty --tabs-tab-disabled-opacity - How faint a disabled tab is drawn.
23
+ * @cssproperty --tabs-tab-font-size - The size of a tab's label.
24
+ * @cssproperty --tabs-tab-font-weight - The weight of a tab's label.
25
+ * @cssproperty --tabs-tab-hover-background-color - The wash under the pointer.
26
+ * @cssproperty --tabs-tab-hover-color - The label color under the pointer.
22
27
  * @cssproperty --tabs-tab-padding-inline - The space either side of the label.
28
+ * @cssproperty --tabs-tab-radius - The corners of a tab, which the hover wash takes.
29
+ * @cssproperty --tabs-tab-selected-background-color - The fill of the current tab itself, under the moving mark.
23
30
  * @cssproperty --tabs-tab-selected-color - The label color of the current tab.
24
31
  */
25
32
  export declare class HelixTab extends HelixHeadlessTab {
@@ -3,4 +3,10 @@ export const styles = createSheet(`:host {
3
3
  display: flex;
4
4
  flex-wrap: wrap;
5
5
  gap: var(--tag-group-gap, var(--helix-space-2xs));
6
+ }
7
+
8
+ [part="empty"]:focus-visible {
9
+ border-radius: var(--helix-radii-sm);
10
+ outline: var(--helix-size-focus-ring) solid var(--helix-color-focus-ring);
11
+ outline-offset: var(--helix-size-focus-offset);
6
12
  }`);
@@ -1,8 +1,11 @@
1
1
  /**
2
- * The line count `lines` asks for, as the declaration that clamps it, or
2
+ * The line count `lines` asks for, as the declarations that clamp it, or
3
3
  * `undefined` where it is no whole number above zero.
4
4
  *
5
5
  * Written on the part inside the shadow root, so any count works with no rule
6
- * per number, and the server renders it with the rest of the template.
6
+ * per number, and the server renders it with the rest of the template. The
7
+ * box and the overflow it needs are written with the count, so a count that
8
+ * is no count leaves the text as it was, with nothing cut off. A page's
9
+ * `::part(text)` rule still wins over each of them.
7
10
  */
8
11
  export declare const clampOf: (lines: number | undefined) => string | undefined;
@@ -1 +1,3 @@
1
- export const clampOf = (lines) => Number.isInteger(lines) && lines > 0 ? `-webkit-line-clamp: ${lines}` : undefined;
1
+ export const clampOf = (lines) => Number.isInteger(lines) && lines > 0
2
+ ? `display: -webkit-box; overflow: hidden; -webkit-box-orient: vertical; -webkit-line-clamp: ${lines}`
3
+ : undefined;
@@ -186,12 +186,6 @@ display: block;
186
186
  min-inline-size: 0;
187
187
  }
188
188
 
189
- :host([lines]) [part="text"] {
190
- -webkit-box-orient: vertical;
191
- display: -webkit-box;
192
- overflow: hidden;
193
- }
194
-
195
189
  :host([text-align="start"]) {
196
190
  text-align: start;
197
191
  }
@@ -87,7 +87,8 @@ export declare class HelixText extends HelixElement {
87
87
  * Lays the text out as a block, because a line count needs a width to break
88
88
  * against. The whole text stays in the page, so a screen reader and a search
89
89
  * still read all of it. Set it as an attribute, such as `lines="1"` for a
90
- * single line.
90
+ * single line. A count that is not a whole number above zero, such as `0`,
91
+ * cuts nothing off.
91
92
  */
92
93
  lines?: number;
93
94
  /**
@@ -25,6 +25,33 @@ color: var(--helix-color-foreground-subtle);
25
25
  flex: 0 0 auto;
26
26
  }
27
27
 
28
+ [part="clear"] {
29
+ --icon-size: var(--helix-size-icon-tight);
30
+ all: unset;
31
+
32
+ align-items: center;
33
+ align-self: flex-start;
34
+ border-radius: var(--helix-radii-sm);
35
+ box-sizing: border-box;
36
+ color: var(--helix-color-foreground-muted);
37
+ cursor: pointer;
38
+ display: flex;
39
+ flex: 0 0 auto;
40
+ justify-content: center;
41
+ min-block-size: var(--helix-size-icon-loose);
42
+ min-inline-size: var(--helix-size-icon-loose);
43
+ transition: color var(--helix-duration-fast) var(--helix-easing-standard);
44
+ }
45
+
46
+ [part="clear"]:hover {
47
+ color: var(--helix-color-foreground);
48
+ }
49
+
50
+ [part="clear"]:focus-visible {
51
+ outline: var(--helix-size-focus-ring) solid var(--helix-color-focus-ring);
52
+ outline-offset: var(--helix-size-focus-offset);
53
+ }
54
+
28
55
  :host([auto-grow]) [part="control"] {
29
56
  overflow: hidden;
30
57
  resize: none;
@@ -69,6 +69,18 @@ padding-inline: var(--helix-space-none);
69
69
  position: absolute;
70
70
  }
71
71
 
72
+ ::slotted([slot="panel-header"]) {
73
+ display: block;
74
+ margin-block-end: var(--helix-space-sm);
75
+ margin-inline: var(--helix-space-sm);
76
+ }
77
+
78
+ ::slotted([slot="panel-footer"]) {
79
+ display: block;
80
+ margin-block-start: var(--helix-space-sm);
81
+ margin-inline: var(--helix-space-sm);
82
+ }
83
+
72
84
  @media (prefers-reduced-motion: reduce) {
73
85
  [part="field"],
74
86
  [part="trigger"] {
@@ -109,7 +109,7 @@ transition: background-color var(--helix-duration-fast) var(--helix-easing-stand
109
109
  }
110
110
 
111
111
  [part="column"] [part~="option"]:not([disabled]):hover::part(label),
112
- [part="column"] [part~="option"][data-active]::part(label) {
112
+ [part="column"] [part~="option"]:state(active)::part(label) {
113
113
  background-color: var(--helix-color-surface-sunken);
114
114
  }
115
115
 
@@ -84,6 +84,16 @@ grid-area: 1 / 2;
84
84
  min-inline-size: 0;
85
85
  }
86
86
 
87
+ ::slotted([slot="heading"]) {
88
+ display: block;
89
+ font-weight: var(--helix-weight-semibold);
90
+ }
91
+
92
+ ::slotted([slot="description"]) {
93
+ color: var(--helix-color-foreground-muted);
94
+ display: block;
95
+ }
96
+
87
97
  [part="actions"] {
88
98
  display: flex;
89
99
  gap: var(--helix-space-2xs);
@@ -23,6 +23,7 @@ import type { CSSResultGroup } from 'lit';
23
23
  * @cssproperty --toast-inset - Distance from the edges of the window.
24
24
  */
25
25
  export declare class HelixToast extends HelixHeadlessToast {
26
+ static tier: string;
26
27
  static styles: CSSResultGroup;
27
28
  }
28
29
  declare global {
@@ -8,6 +8,7 @@ import { customElement } from '@fusion.dev/helix-core';
8
8
  import { HelixHeadlessToast } from '@fusion.dev/helix-headless/toast';
9
9
  import { styles } from './toast-root.css.js';
10
10
  let HelixToast = class HelixToast extends HelixHeadlessToast {
11
+ static { this.tier = 'helix-'; }
11
12
  static { this.styles = styles; }
12
13
  };
13
14
  HelixToast = __decorate([
@@ -34,7 +34,7 @@ align-items: start;
34
34
  [part="track"] {
35
35
  --_toggle-height: calc(var(--helix-size-control) - var(--helix-space-2xs) * 2);
36
36
 
37
- --_toggle-radius: var(--helix-radii-sm);
37
+ --_toggle-radius: var(--toggle-group-item-radius, var(--helix-radii-sm));
38
38
 
39
39
  --_indicator-surface: var(--helix-color-surface-raised);
40
40
  display: inline-flex;
@@ -51,7 +51,10 @@ padding: var(--helix-space-2xs);
51
51
  :host(:not([separation])) [part="track"],
52
52
  :host([separation="outlined"]) [part="track"] {
53
53
 
54
- --_toggle-radius: calc(var(--helix-radii-sm) - var(--helix-border-thin));
54
+ --_toggle-radius: var(
55
+ --toggle-group-item-radius,
56
+ calc(var(--toggle-group-radius, var(--helix-radii-sm)) - var(--helix-border-thin))
57
+ );
55
58
 
56
59
  --_toggle-height: calc(
57
60
  var(--helix-size-control) -
@@ -62,9 +65,9 @@ var(--helix-border-thin) *
62
65
  );
63
66
 
64
67
  --_indicator-surface: var(--helix-color-surface-overlay);
65
- background-color: var(--helix-color-surface-sunken);
66
- border: var(--helix-border-thin) solid var(--helix-color-border);
67
- border-radius: var(--helix-radii-sm);
68
+ background-color: var(--toggle-group-background-color, var(--helix-color-surface-sunken));
69
+ border: var(--helix-border-thin) solid var(--toggle-group-border-color, var(--helix-color-border));
70
+ border-radius: var(--toggle-group-radius, var(--helix-radii-sm));
68
71
  padding: var(--helix-space-2xs);
69
72
  }
70
73
 
@@ -79,7 +82,7 @@ flex: 1 1 auto;
79
82
  background-color: var(--toggle-group-indicator-color, var(--_indicator-surface));
80
83
  block-size: var(--indicator-block-size, 0);
81
84
  border-radius: var(--_toggle-radius, var(--helix-radii-sm));
82
- box-shadow: var(--helix-shadow-sm);
85
+ box-shadow: var(--toggle-group-indicator-shadow, var(--helix-shadow-sm));
83
86
  inline-size: var(--indicator-inline-size, 0);
84
87
  inset-block-start: 0;
85
88
  inset-inline-start: 0;
@@ -116,7 +119,7 @@ flex: 1 1 auto;
116
119
  :host([selection-mode="multiple"]) ::slotted(helix-toggle:state(pressed)) {
117
120
  background-color: var(--toggle-group-indicator-color, var(--_indicator-surface));
118
121
  border-radius: var(--_toggle-radius, var(--helix-radii-sm));
119
- box-shadow: var(--helix-shadow-sm);
122
+ box-shadow: var(--toggle-group-indicator-shadow, var(--helix-shadow-sm));
120
123
  }
121
124
 
122
125
  :host([orientation="vertical"]) [part="track"] {
@@ -26,7 +26,12 @@ import type { CSSResultGroup } from 'lit';
26
26
  *
27
27
  * @csspart indicator - The moving marker behind the selected item.
28
28
  *
29
- * @cssproperty --toggle-group-indicator-color - The fill of the moving marker.
29
+ * @cssproperty --toggle-group-background-color - The groove behind the items, when the group is framed.
30
+ * @cssproperty --toggle-group-border-color - The edge of the groove, when the group is framed.
31
+ * @cssproperty --toggle-group-indicator-color - The fill of the moving marker, and of each pressed item under `selection-mode="multiple"`.
32
+ * @cssproperty --toggle-group-indicator-shadow - The shadow of the moving marker and of each pressed item.
33
+ * @cssproperty --toggle-group-item-radius - Corner radius of each item, the marker, and a pressed item's fill. Without it, the curve stays concentric with the groove.
34
+ * @cssproperty --toggle-group-radius - Corner radius of the groove, when the group is framed.
30
35
  */
31
36
  export declare class HelixToggleGroup extends HelixHeadlessToggleGroup {
32
37
  /**
@@ -16,6 +16,12 @@ import type { CSSResultGroup } from 'lit';
16
16
  * @slot - The item's label.
17
17
  *
18
18
  * @csspart item - The radio button.
19
+ *
20
+ * @cssproperty --toggle-item-color - Text color of an item that is not chosen. Read by the base
21
+ * layer, which styles the `item` part.
22
+ * @cssproperty --toggle-item-color-selected - Text color of the chosen item, and of each pressed
23
+ * item in a group that allows several.
24
+ * @cssproperty --toggle-item-padding-inline - Space either side of an item's label.
19
25
  */
20
26
  export declare class HelixToggle extends HelixHeadlessToggle {
21
27
  static styles: CSSResultGroup;
@@ -19,6 +19,7 @@ display: inline-flex;
19
19
  [part="toolbar"] {
20
20
  align-items: center;
21
21
  background-color: var(--toolbar-background-color, transparent);
22
+ border: var(--toolbar-border-width, 0) solid var(--toolbar-border-color, transparent);
22
23
  border-radius: var(--toolbar-radius, var(--helix-radii-none));
23
24
  display: flex;
24
25
  gap: var(--toolbar-gap, var(--helix-space-2xs));
@@ -18,6 +18,8 @@ import type { CSSResultGroup } from 'lit';
18
18
  * @csspart toolbar - The toolbar container.
19
19
  *
20
20
  * @cssproperty --toolbar-background-color - The fill behind the controls. Transparent unless set.
21
+ * @cssproperty --toolbar-border-color - The color of the toolbar's edge, once it has a width.
22
+ * @cssproperty --toolbar-border-width - The width of the toolbar's edge. None unless set.
21
23
  * @cssproperty --toolbar-gap - The space between controls.
22
24
  * @cssproperty --toolbar-padding - The space between the toolbar's edge and its controls.
23
25
  * @cssproperty --toolbar-radius - The corner radius of the toolbar's fill.
@@ -11,10 +11,10 @@ gap: var(--helix-space-2xs);
11
11
 
12
12
  background-color: var(--tooltip-background-color, var(--helix-color-surface-inverse));
13
13
  border: none;
14
- border-radius: var(--helix-radii-sm);
15
- color: var(--helix-color-foreground-inverse);
14
+ border-radius: var(--tooltip-radius, var(--helix-radii-sm));
15
+ color: var(--tooltip-color, var(--helix-color-foreground-inverse));
16
16
  font-family: var(--helix-font-sans);
17
- font-size: var(--helix-text-xs);
17
+ font-size: var(--tooltip-font-size, var(--helix-text-xs));
18
18
 
19
19
  font-weight: var(--helix-weight-regular);
20
20
  inline-size: max-content;
@@ -23,7 +23,7 @@ margin: var(--helix-space-none);
23
23
  max-inline-size: var(--tooltip-max-inline-size, 16rem);
24
24
 
25
25
  opacity: 0;
26
- padding: var(--helix-space-2xs) var(--helix-space-xs);
26
+ padding: var(--tooltip-padding, var(--helix-space-2xs) var(--helix-space-xs));
27
27
  position: fixed;
28
28
  scale: 0;
29
29
 
@@ -63,7 +63,7 @@ background-color: var(--tooltip-background-color, var(--helix-material-transluce
63
63
  :host([material="frosted"]) [part~="tooltip"],
64
64
  :host([material="glass"]) [part~="tooltip"] {
65
65
  border: var(--helix-border-thin) solid var(--helix-color-border);
66
- color: var(--helix-color-foreground);
66
+ color: var(--tooltip-color, var(--helix-color-foreground));
67
67
  }
68
68
 
69
69
  [part~="tooltip"][data-placement^="top"] {
@@ -20,7 +20,11 @@ import type { CSSResultGroup } from 'lit';
20
20
  * @cssproperty --tooltip-arrow-size - The size of the arrow on the bubble's edge.
21
21
  * @cssproperty --tooltip-backdrop - The blur behind a `frosted` or `glass` bubble.
22
22
  * @cssproperty --tooltip-background-color - The fill of the bubble.
23
+ * @cssproperty --tooltip-color - The color of the bubble's words.
24
+ * @cssproperty --tooltip-font-size - The size of the bubble's words.
23
25
  * @cssproperty --tooltip-max-inline-size - The widest the bubble grows before its text wraps.
26
+ * @cssproperty --tooltip-padding - The space between the bubble's edge and its words.
27
+ * @cssproperty --tooltip-radius - The bubble's corner radius.
24
28
  */
25
29
  export declare class HelixTooltip extends HelixHeadlessTooltip {
26
30
  /**
@@ -13,8 +13,10 @@ outline: none;
13
13
  [part="row"] {
14
14
 
15
15
  align-items: center;
16
- border-radius: var(--helix-radii-sm);
17
- color: var(--helix-color-foreground-muted);
16
+
17
+ background-color: var(--_tree-row-fill, transparent);
18
+ border-radius: var(--tree-row-radius, var(--helix-radii-sm));
19
+ color: var(--_tree-row-ink, var(--tree-row-color, var(--helix-color-foreground-muted)));
18
20
  cursor: pointer;
19
21
  display: flex;
20
22
 
@@ -50,7 +52,10 @@ var(--_tree-reserve, calc(var(--_tree-chevron) + var(--helix-space-2xs)))
50
52
  }
51
53
 
52
54
  [part="row"]:has([part="toggle"]) {
53
- color: var(--_tree-heading-ink, var(--helix-color-foreground-muted));
55
+ color: var(
56
+ --_tree-row-ink,
57
+ var(--_tree-heading-ink, var(--tree-row-color, var(--helix-color-foreground-muted)))
58
+ );
54
59
  font-size: var(--_tree-heading-text, var(--_tree-text, var(--helix-text-sm)));
55
60
  font-weight: var(--helix-weight-medium);
56
61
  letter-spacing: var(--_tree-heading-tracking, var(--helix-tracking-normal));
@@ -65,13 +70,18 @@ slot[name="children"]::slotted(*) {
65
70
  }
66
71
 
67
72
  [part="row"]:hover {
68
- background-color: var(--helix-color-surface-raised);
69
- color: var(--helix-color-foreground);
73
+ background-color: var(--tree-row-hover-background-color, var(--helix-color-surface-raised));
74
+ color: var(--tree-row-hover-color, var(--helix-color-foreground));
70
75
  }
71
76
 
72
77
  :host(:state(selected)) [part="row"] {
73
- background-color: var(--helix-color-surface-sunken);
74
- color: var(--helix-color-foreground);
78
+ background-color: var(--tree-row-selected-background-color, var(--helix-color-surface-sunken));
79
+ color: var(--tree-row-selected-color, var(--helix-color-foreground));
80
+ }
81
+
82
+ :host(:state(checked)) [part="row"] {
83
+ --_tree-row-fill: var(--tree-row-checked-background-color, transparent);
84
+ --_tree-row-ink: var(--tree-row-checked-color);
75
85
  }
76
86
 
77
87
  [part="item"]:focus-visible [part="row"],
@@ -214,12 +224,12 @@ inline-size: 80%;
214
224
 
215
225
  :host([disabled]) [part="row"] {
216
226
  cursor: not-allowed;
217
- opacity: 0.5;
227
+ opacity: var(--tree-row-disabled-opacity, 0.5);
218
228
  }
219
229
 
220
230
  :host([disabled]) [part="row"]:hover {
221
231
  background-color: transparent;
222
- color: var(--helix-color-foreground-muted);
232
+ color: var(--tree-row-color, var(--helix-color-foreground-muted));
223
233
  }
224
234
 
225
235
  :host(:state(loading)) [part="toggle"],
@@ -39,6 +39,15 @@ import type { CSSResultGroup } from 'lit';
39
39
  * @cssproperty --tree-chevron-size - Size of the chevron, and the gutter a leaf reserves.
40
40
  * @cssproperty --tree-gap - Space between rows.
41
41
  * @cssproperty --tree-indent - Indent added per level.
42
+ * @cssproperty --tree-row-checked-background-color - Fill of a checked row, in a tree with `selection-mode="multiple"`. Unset, the box alone marks it.
43
+ * @cssproperty --tree-row-checked-color - Text color of a checked row, in a tree with `selection-mode="multiple"`.
44
+ * @cssproperty --tree-row-color - Text color of a row at rest.
45
+ * @cssproperty --tree-row-disabled-opacity - How faint a disabled row is drawn.
46
+ * @cssproperty --tree-row-hover-background-color - Fill of a row under the pointer.
47
+ * @cssproperty --tree-row-hover-color - Text color of a row under the pointer.
48
+ * @cssproperty --tree-row-radius - Corners of a row's fill.
49
+ * @cssproperty --tree-row-selected-background-color - Fill of the chosen row, in a tree of one choice.
50
+ * @cssproperty --tree-row-selected-color - Text color of the chosen row, in a tree of one choice.
42
51
  * @cssproperty --tree-row-size - Minimum height of a row, so rows with and without an icon match.
43
52
  */
44
53
  export declare class HelixTreeItem extends HelixHeadlessTreeItem {
@@ -18,20 +18,18 @@ color: var(--trend-color, var(--_trend-color));
18
18
  --icon-size: var(--trend-icon-size, 1em);
19
19
  }
20
20
 
21
- slot[name="icon"]::slotted(*) {
21
+ slot[name$="icon"]::slotted(*) {
22
22
  --icon-size: var(--trend-icon-size, 1em);
23
23
 
24
24
  block-size: var(--trend-icon-size, 1em);
25
25
  inline-size: var(--trend-icon-size, 1em);
26
26
  }
27
27
 
28
- :host([direction="up"][good="up"]),
29
- :host([direction="down"][good="down"]) {
28
+ :host(:state(better)) {
30
29
  --_trend-color: var(--trend-better-color, var(--helix-color-success));
31
30
  }
32
31
 
33
- :host([direction="up"][good="down"]),
34
- :host([direction="down"][good="up"]) {
32
+ :host(:state(worse)) {
35
33
  --_trend-color: var(--trend-worse-color, var(--helix-color-danger));
36
34
  }
37
35
 
@@ -13,7 +13,7 @@ import type { CSSResultGroup } from 'lit';
13
13
  * no surface for material, and no area for a wash. The text weight comes from
14
14
  * `Text` and the size from the region.
15
15
  *
16
- * The meaning axis is derived: `direction` and `good` resolve to success,
16
+ * The meaning axis is derived: `movement` and `good` resolve to success,
17
17
  * danger, or muted, so you state the metric's polarity once. There is no
18
18
  * `tone`, because a declared tone could disagree with the arrow.
19
19
  *
@@ -27,7 +27,7 @@ import type { CSSResultGroup } from 'lit';
27
27
  * @cssproperty --trend-better-color - Color of a move that `good` says is an improvement.
28
28
  * @cssproperty --trend-color - Color of the arrow. Setting it overrides the color that `good` sets.
29
29
  * @cssproperty --trend-gap - Space between the arrow, the metric and the label.
30
- * @cssproperty --trend-icon-size - Size of the arrow, or of a glyph in the `icon` slot.
30
+ * @cssproperty --trend-icon-size - Size of the arrow, or of a glyph in one of the icon slots.
31
31
  * @cssproperty --trend-label-color - Color of the label.
32
32
  * @cssproperty --trend-neutral-color - Color of a trend that `good` does not judge, or one that did not move.
33
33
  * @cssproperty --trend-worse-color - Color of a move that `good` says is a setback.
@@ -17,6 +17,20 @@ outline: var(--helix-size-focus-ring) solid var(--helix-color-focus-ring);
17
17
  outline-offset: calc(var(--helix-size-focus-offset) * -1);
18
18
  }
19
19
 
20
+ ::slotted([aria-selected="true"]) {
21
+ background-color: var(
22
+ --virtual-list-selected-background-color,
23
+ var(--helix-color-primary-subtle)
24
+ );
25
+ }
26
+
27
+ [part="loading"] {
28
+ color: var(--virtual-list-loading-color, var(--helix-color-foreground-muted));
29
+ font-size: var(--helix-text-sm);
30
+ padding: var(--virtual-list-loading-padding, var(--helix-space-sm));
31
+ text-align: center;
32
+ }
33
+
20
34
  [part="after"],
21
35
  [part="before"] {
22
36
  flex: none;
@@ -7,7 +7,9 @@ import type { CSSResultGroup } from 'lit';
7
7
  * The styled tier styles the scrolling box and draws the focus ring on the row
8
8
  * holding focus. Rows are your markup in the light DOM, so your stylesheet
9
9
  * styles them the same as any other content, and a rule of yours on a row wins
10
- * over the ring.
10
+ * over the ring. While `loading` is set, a muted, centered row after the last
11
+ * item says "Loading more". In a list with `selection-mode`, a chosen row takes
12
+ * the fill a chosen List row takes.
11
13
  *
12
14
  * @category layout
13
15
  * @since 0.1.0
@@ -16,9 +18,13 @@ import type { CSSResultGroup } from 'lit';
16
18
  *
17
19
  * @csspart after - The space that stands in for the rows below the rendered ones.
18
20
  * @csspart before - The space that stands in for the rows above the rendered ones.
21
+ * @csspart loading - The row after the last item while `loading` is set.
19
22
  * @csspart viewport - The scrolling box.
20
23
  *
21
24
  * @cssproperty --virtual-list-block-size - How tall the scrolling box is.
25
+ * @cssproperty --virtual-list-loading-color - The color of the text in the row drawn while `loading` is set.
26
+ * @cssproperty --virtual-list-loading-padding - The space around the text in the row drawn while `loading` is set.
27
+ * @cssproperty --virtual-list-selected-background-color - The fill behind a chosen row, in a list with `selection-mode`.
22
28
  */
23
29
  export declare class HelixVirtualList extends HelixHeadlessVirtualList {
24
30
  static styles: CSSResultGroup;