@fusion.dev/helix 0.144.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 (213) hide show
  1. package/custom-elements.json +17914 -4368
  2. package/dist/accordion/item/accordion-item.css.js +25 -10
  3. package/dist/accordion/item/accordion-item.d.ts +10 -0
  4. package/dist/aura/palette.d.ts +38 -0
  5. package/dist/aura/palette.js +22 -0
  6. package/dist/aura/root/aura-root.css.js +27 -3
  7. package/dist/aura/root/aura-root.d.ts +61 -14
  8. package/dist/aura/root/aura-root.js +40 -23
  9. package/dist/badge/root/badge-root.css.js +86 -16
  10. package/dist/badge/root/badge-root.d.ts +18 -0
  11. package/dist/badge/root/badge-root.js +6 -0
  12. package/dist/blockquote/root/blockquote-root.css.js +2 -2
  13. package/dist/blockquote/root/blockquote-root.d.ts +2 -0
  14. package/dist/breadcrumbs/breadcrumb/breadcrumb.css.js +7 -7
  15. package/dist/breadcrumbs/breadcrumb/breadcrumb.d.ts +5 -0
  16. package/dist/breadcrumbs/root/breadcrumbs-root.css.js +24 -1
  17. package/dist/breadcrumbs/root/breadcrumbs-root.d.ts +4 -0
  18. package/dist/breadcrumbs/root/breadcrumbs-root.js +2 -0
  19. package/dist/button/root/button-root.css.js +4 -3
  20. package/dist/button/root/button-root.d.ts +2 -0
  21. package/dist/button-group/root/button-group-root.d.ts +3 -0
  22. package/dist/callout/root/callout-root.css.js +4 -3
  23. package/dist/callout/root/callout-root.d.ts +6 -2
  24. package/dist/canvas/root/canvas-root.css.js +1 -0
  25. package/dist/card/root/card-root.d.ts +6 -0
  26. package/dist/carousel/root/carousel-root.css.js +17 -1
  27. package/dist/chat/message/chat-message.css.js +0 -62
  28. package/dist/chat/message/chat-message.js +2 -1
  29. package/dist/chat/root/chat-root.css.js +7 -0
  30. package/dist/chat/root/chat-root.d.ts +2 -0
  31. package/dist/chat/root/chat-root.js +2 -1
  32. package/dist/chat/typing.css.d.ts +1 -0
  33. package/dist/chat/typing.css.js +62 -0
  34. package/dist/checkbox/root/checkbox-root.css.js +15 -0
  35. package/dist/checkbox/root/checkbox-root.d.ts +2 -1
  36. package/dist/code/root/code-root.css.js +2 -2
  37. package/dist/code/root/code-root.d.ts +2 -0
  38. package/dist/code-block/root/code-block-root.css.js +24 -0
  39. package/dist/code-block/root/code-block-root.d.ts +2 -1
  40. package/dist/color-input/root/color-input-root.css.js +10 -0
  41. package/dist/color-picker/root/color-picker-root.css.js +8 -0
  42. package/dist/color-picker/root/color-picker-root.d.ts +1 -0
  43. package/dist/copy-button/root/copy-button-root.css.js +15 -6
  44. package/dist/copy-button/root/copy-button-root.d.ts +7 -0
  45. package/dist/data-table/root/data-table-root.css.js +70 -0
  46. package/dist/data-table/root/data-table-root.d.ts +6 -0
  47. package/dist/date-input/root/date-input-root.css.js +10 -0
  48. package/dist/description-list/item/description-list-item.css.js +11 -0
  49. package/dist/donut-chart/root/donut-chart-root.css.js +19 -0
  50. package/dist/donut-chart/root/donut-chart-root.d.ts +3 -0
  51. package/dist/drawer/root/drawer-root.css.js +47 -0
  52. package/dist/drawer/root/drawer-root.d.ts +5 -0
  53. package/dist/drilldown/item/drilldown-item.css.js +8 -7
  54. package/dist/drilldown/item/drilldown-item.d.ts +6 -0
  55. package/dist/drilldown/root/drilldown-root.css.js +27 -13
  56. package/dist/drilldown/root/drilldown-root.d.ts +10 -0
  57. package/dist/element-events.generated.js +72 -13
  58. package/dist/file-input/root/file-input-root.css.js +12 -11
  59. package/dist/file-input/root/file-input-root.d.ts +11 -0
  60. package/dist/filter-input/root/filter-input-root.css.js +6 -5
  61. package/dist/filter-input/root/filter-input-root.d.ts +5 -0
  62. package/dist/flex/root/flex-root.css.js +143 -9
  63. package/dist/flex/root/flex-root.d.ts +62 -5
  64. package/dist/flex/root/flex-root.js +17 -1
  65. package/dist/graph/root/graph-root.css.js +11 -8
  66. package/dist/graph/root/graph-root.d.ts +8 -0
  67. package/dist/grid/root/grid-root.css.js +114 -11
  68. package/dist/grid/root/grid-root.d.ts +40 -0
  69. package/dist/grid/root/grid-root.js +13 -1
  70. package/dist/heatmap/root/heatmap-root.css.js +2 -1
  71. package/dist/icon-button/root/icon-button-root.css.js +68 -13
  72. package/dist/icon-button/root/icon-button-root.d.ts +4 -0
  73. package/dist/kbd/root/kbd-root.css.js +27 -0
  74. package/dist/kbd/root/kbd-root.d.ts +2 -0
  75. package/dist/lightbox/item/lightbox-item.css.js +4 -0
  76. package/dist/lightbox/root/lightbox-root.css.js +41 -0
  77. package/dist/line-chart/root/line-chart-root.css.js +16 -0
  78. package/dist/line-chart/root/line-chart-root.d.ts +2 -0
  79. package/dist/list/item/list-item.css.js +21 -1
  80. package/dist/list/item/list-item.d.ts +3 -0
  81. package/dist/list/root/list-root.css.js +13 -1
  82. package/dist/listbox/root/listbox-root.css.js +9 -0
  83. package/dist/listbox/root/listbox-root.d.ts +1 -0
  84. package/dist/loader/root/loader-root.css.js +3 -3
  85. package/dist/loader/root/loader-root.d.ts +2 -0
  86. package/dist/megamenu/root/megamenu-root.css.js +16 -13
  87. package/dist/megamenu/root/megamenu-root.d.ts +11 -0
  88. package/dist/menu/index.d.ts +1 -0
  89. package/dist/menu/index.js +1 -0
  90. package/dist/menu/item/menu-item.css.js +39 -4
  91. package/dist/menu/item/menu-item.d.ts +4 -0
  92. package/dist/menu/item/menu-item.js +2 -0
  93. package/dist/menu/section/menu-section.css.d.ts +1 -0
  94. package/dist/menu/section/menu-section.css.js +14 -0
  95. package/dist/menu/section/menu-section.d.ts +24 -0
  96. package/dist/menu/section/menu-section.js +16 -0
  97. package/dist/meter/root/meter-root.css.js +6 -3
  98. package/dist/meter/root/meter-root.d.ts +1 -0
  99. package/dist/navigation/root/navigation-root.css.js +3 -2
  100. package/dist/navigation/root/navigation-root.d.ts +13 -0
  101. package/dist/notifications/root/notifications-root.css.js +30 -1
  102. package/dist/notifications/root/notifications-root.d.ts +1 -0
  103. package/dist/number-input/root/number-input-root.css.js +12 -9
  104. package/dist/number-input/root/number-input-root.d.ts +8 -0
  105. package/dist/object-inspector/root/object-inspector-root.css.js +38 -7
  106. package/dist/object-inspector/root/object-inspector-root.d.ts +4 -1
  107. package/dist/object-inspector/root/object-inspector-root.js +2 -1
  108. package/dist/option/root/option-root.css.js +1 -1
  109. package/dist/orb/index.d.ts +1 -1
  110. package/dist/orb/index.js +1 -1
  111. package/dist/orb/root/orb-root.d.ts +40 -6
  112. package/dist/orb/root/orb-root.js +29 -11
  113. package/dist/outline/root/outline-root.css.js +10 -0
  114. package/dist/outline/root/outline-root.d.ts +7 -0
  115. package/dist/pin-input/root/pin-input-root.css.js +4 -4
  116. package/dist/pin-input/root/pin-input-root.d.ts +4 -0
  117. package/dist/progress/root/progress-root.css.js +4 -2
  118. package/dist/progress/root/progress-root.d.ts +1 -0
  119. package/dist/qr-code/root/qr-code-root.css.js +11 -0
  120. package/dist/quote/root/quote-root.css.js +3 -0
  121. package/dist/quote/root/quote-root.d.ts +2 -0
  122. package/dist/radio/root/radio-root.css.js +16 -0
  123. package/dist/radio/root/radio-root.d.ts +2 -1
  124. package/dist/sandbox/frame.d.ts +64 -0
  125. package/dist/sandbox/frame.js +146 -0
  126. package/dist/sandbox/index.d.ts +2 -0
  127. package/dist/sandbox/index.js +1 -0
  128. package/dist/sandbox/levels.d.ts +10 -0
  129. package/dist/sandbox/levels.js +5 -0
  130. package/dist/sandbox/root/sandbox-root.d.ts +3 -0
  131. package/dist/sandbox/root/sandbox-root.js +13 -3
  132. package/dist/sandbox/source/sandbox-source.css.js +70 -0
  133. package/dist/sandbox/source/sandbox-source.d.ts +35 -0
  134. package/dist/sandbox/source/sandbox-source.js +22 -3
  135. package/dist/sandbox/terminal/sandbox-terminal.css.js +39 -0
  136. package/dist/sandbox/terminal/sandbox-terminal.d.ts +50 -1
  137. package/dist/sandbox/terminal/sandbox-terminal.js +61 -4
  138. package/dist/sandbox/tokens.d.ts +39 -0
  139. package/dist/sandbox/tokens.js +9 -0
  140. package/dist/scatter-chart/root/scatter-chart-root.css.js +9 -0
  141. package/dist/scatter-chart/root/scatter-chart-root.d.ts +2 -0
  142. package/dist/scroll-area/root/scroll-area-root.css.js +83 -1
  143. package/dist/scroll-area/root/scroll-area-root.d.ts +6 -0
  144. package/dist/skeleton/root/skeleton-root.css.js +11 -11
  145. package/dist/skeleton/root/skeleton-root.d.ts +1 -0
  146. package/dist/skip-link/root/skip-link-root.css.js +20 -8
  147. package/dist/skip-link/root/skip-link-root.d.ts +12 -3
  148. package/dist/slider/root/slider-root.css.js +26 -0
  149. package/dist/sparkline/root/sparkline-root.css.js +49 -0
  150. package/dist/sparkline/root/sparkline-root.d.ts +6 -0
  151. package/dist/sparkline/root/sparkline-root.js +2 -1
  152. package/dist/speed-dial/item/speed-dial-item.css.js +18 -10
  153. package/dist/speed-dial/item/speed-dial-item.d.ts +7 -0
  154. package/dist/speed-dial/root/speed-dial-root.css.js +17 -8
  155. package/dist/speed-dial/root/speed-dial-root.d.ts +16 -1
  156. package/dist/speed-dial/root/speed-dial-root.js +4 -1
  157. package/dist/stat/root/stat-root.css.js +4 -0
  158. package/dist/steps/root/steps-root.css.js +28 -0
  159. package/dist/steps/root/steps-root.d.ts +5 -0
  160. package/dist/steps/step/step.js +2 -1
  161. package/dist/table/root/table-root.css.js +18 -0
  162. package/dist/table/root/table-root.d.ts +6 -0
  163. package/dist/table/root/table-root.js +2 -0
  164. package/dist/table/row/table-row.css.js +18 -0
  165. package/dist/table/row/table-row.d.ts +2 -0
  166. package/dist/table/row/table-row.js +2 -0
  167. package/dist/tabs/panel/tab-panel.css.js +5 -1
  168. package/dist/tabs/root/tabs-root.css.js +58 -3
  169. package/dist/tabs/root/tabs-root.d.ts +4 -0
  170. package/dist/tabs/tab/tab.css.js +21 -10
  171. package/dist/tabs/tab/tab.d.ts +7 -0
  172. package/dist/tag/group/tag-group.css.js +6 -0
  173. package/dist/text/clamp.d.ts +11 -0
  174. package/dist/text/clamp.js +3 -0
  175. package/dist/text/root/text-root.css.js +79 -45
  176. package/dist/text/root/text-root.d.ts +49 -7
  177. package/dist/text/root/text-root.js +17 -11
  178. package/dist/textarea/root/textarea-root.css.js +27 -0
  179. package/dist/time-input/root/time-input-root.css.js +12 -0
  180. package/dist/time-picker/root/time-picker-root.css.js +1 -1
  181. package/dist/timeline/group/timeline-group.css.d.ts +1 -0
  182. package/dist/timeline/group/timeline-group.css.js +32 -0
  183. package/dist/timeline/group/timeline-group.d.ts +25 -0
  184. package/dist/timeline/group/timeline-group.js +16 -0
  185. package/dist/timeline/index.d.ts +1 -0
  186. package/dist/timeline/index.js +1 -0
  187. package/dist/timeline/item/timeline-item.css.js +43 -16
  188. package/dist/timeline/root/timeline-root.css.js +56 -0
  189. package/dist/timeline/root/timeline-root.d.ts +26 -0
  190. package/dist/timeline/root/timeline-root.js +7 -0
  191. package/dist/toast/item/toast-item.css.js +10 -0
  192. package/dist/toast/root/toast-root.d.ts +1 -0
  193. package/dist/toast/root/toast-root.js +1 -0
  194. package/dist/toggle/group/toggle-group.css.js +10 -7
  195. package/dist/toggle/group/toggle-group.d.ts +6 -1
  196. package/dist/toggle/root/toggle-root.d.ts +6 -0
  197. package/dist/toolbar/root/toolbar-root.css.js +4 -0
  198. package/dist/toolbar/root/toolbar-root.d.ts +5 -0
  199. package/dist/tooltip/root/tooltip-root.css.js +5 -5
  200. package/dist/tooltip/root/tooltip-root.d.ts +4 -0
  201. package/dist/tree/item/tree-item.css.js +89 -7
  202. package/dist/tree/item/tree-item.d.ts +19 -0
  203. package/dist/trend/root/trend-root.css.js +3 -5
  204. package/dist/trend/root/trend-root.d.ts +2 -2
  205. package/dist/video/root/video-root.css.js +6 -0
  206. package/dist/video/root/video-root.d.ts +3 -0
  207. package/dist/virtual-list/root/virtual-list-root.css.js +19 -0
  208. package/dist/virtual-list/root/virtual-list-root.d.ts +10 -3
  209. package/lint.json +1 -1
  210. package/package.json +9 -9
  211. package/types/jsx.d.ts +8253 -1233
  212. package/types/svelte.d.ts +2 -0
  213. package/types/vue.d.ts +2357 -312
@@ -21,6 +21,87 @@ var(--scroll-area-track-color, transparent);
21
21
  scrollbar-width: var(--scroll-area-scrollbar, thin);
22
22
  }
23
23
 
24
+ :host([scrollbars]) [part="viewport"] {
25
+ scrollbar-width: none;
26
+ }
27
+
28
+ [part~="scrollbar"] {
29
+ --_scroll-area-thumb: max(
30
+ var(--scroll-area-thumb-min-size, var(--helix-space-lg)),
31
+ var(--scroll-area-thumb-fraction, 1) *
32
+ 100%
33
+ );
34
+ background-color: var(--scroll-area-track-color, transparent);
35
+ opacity: 0;
36
+ position: absolute;
37
+ touch-action: none;
38
+ transition: opacity var(--helix-duration-fast) var(--helix-easing-standard);
39
+ user-select: none;
40
+
41
+ z-index: calc(var(--helix-layer-raised) + 1);
42
+ }
43
+
44
+ [part~="scrollbar-visible"] {
45
+ opacity: 1;
46
+ }
47
+
48
+ [part~="scrollbar-vertical"] {
49
+ inline-size: var(--scroll-area-scrollbar-size, var(--helix-space-sm));
50
+ inset-block: 0;
51
+ inset-inline-end: 0;
52
+ }
53
+
54
+ [part~="scrollbar-horizontal"] {
55
+ block-size: var(--scroll-area-scrollbar-size, var(--helix-space-sm));
56
+ inset-block-end: 0;
57
+ inset-inline: 0;
58
+ }
59
+
60
+ :host(:state(scrollbar-horizontal)) [part~="scrollbar-vertical"] {
61
+ inset-block-end: var(--scroll-area-scrollbar-size, var(--helix-space-sm));
62
+ }
63
+
64
+ :host(:state(scrollbar-vertical)) [part~="scrollbar-horizontal"] {
65
+ inset-inline-end: var(--scroll-area-scrollbar-size, var(--helix-space-sm));
66
+ }
67
+
68
+ [part~="thumb"] {
69
+ background-color: var(--scroll-area-thumb-color, var(--helix-color-border));
70
+ border-radius: var(--helix-radii-full);
71
+ position: absolute;
72
+ }
73
+
74
+ [part~="thumb"]:hover {
75
+ background-color: var(--scroll-area-thumb-hover-color, var(--helix-color-foreground-subtle));
76
+ }
77
+
78
+ [part~="thumb-vertical"] {
79
+ block-size: var(--_scroll-area-thumb);
80
+ inset-block-start: calc(
81
+ var(--scroll-area-scroll-fraction, 0) *
82
+ (100% - var(--_scroll-area-thumb))
83
+ );
84
+ inset-inline: var(--helix-border-thick);
85
+ }
86
+
87
+ [part~="thumb-horizontal"] {
88
+ inline-size: var(--_scroll-area-thumb);
89
+ inset-block: var(--helix-border-thick);
90
+ inset-inline-start: calc(
91
+ var(--scroll-area-scroll-fraction, 0) *
92
+ (100% - var(--_scroll-area-thumb))
93
+ );
94
+ }
95
+
96
+ [part="corner"] {
97
+ background-color: var(--scroll-area-track-color, transparent);
98
+ block-size: var(--scroll-area-scrollbar-size, var(--helix-space-sm));
99
+ inline-size: var(--scroll-area-scrollbar-size, var(--helix-space-sm));
100
+ inset-block-end: 0;
101
+ inset-inline-end: 0;
102
+ position: absolute;
103
+ }
104
+
24
105
  :host::before,
25
106
  :host::after {
26
107
  content: "";
@@ -110,7 +191,8 @@ opacity: 1;
110
191
  :host::before,
111
192
  :host::after,
112
193
  [part="edges"]::before,
113
- [part="edges"]::after {
194
+ [part="edges"]::after,
195
+ [part~="scrollbar"] {
114
196
  transition: none;
115
197
  }
116
198
  }
@@ -8,6 +8,9 @@ import type { CSSResultGroup } from 'lit';
8
8
  * styled to match the design system. The base class measures which edges have
9
9
  * content past them.
10
10
  *
11
+ * Under `scrollbars`, the browser's scrollbar is hidden and the component's own
12
+ * are drawn over the content at the edge, in the same colors.
13
+ *
11
14
  * @since 0.1.0
12
15
  * @status stable
13
16
  * @category layout
@@ -21,7 +24,10 @@ import type { CSSResultGroup } from 'lit';
21
24
  * @cssproperty --scroll-area-fade-inline-end - The depth of the fade at the inline end, or `0` to remove it.
22
25
  * @cssproperty --scroll-area-fade-inline-start - The depth of the fade at the inline start, or `0` to remove it.
23
26
  * @cssproperty --scroll-area-scrollbar - The scrollbar width, as a `scrollbar-width` keyword.
27
+ * @cssproperty --scroll-area-scrollbar-size - The thickness of each scrollbar drawn under `scrollbars`, and the size of the corner.
24
28
  * @cssproperty --scroll-area-thumb-color - The color of the scrollbar's thumb.
29
+ * @cssproperty --scroll-area-thumb-hover-color - The color of a thumb drawn under `scrollbars` while the pointer is over it.
30
+ * @cssproperty --scroll-area-thumb-min-size - The shortest a thumb drawn under `scrollbars` gets, however long the content.
25
31
  * @cssproperty --scroll-area-track-color - The color of the scrollbar's track.
26
32
  */
27
33
  export declare class HelixScrollArea extends HelixHeadlessScrollArea {
@@ -32,7 +32,7 @@ overflow: hidden;
32
32
  position: relative;
33
33
  }
34
34
 
35
- [part="skeleton"]::after {
35
+ [part="sheen"] {
36
36
  animation: helix-skeleton-sweep var(--skeleton-duration, calc(var(--helix-duration-slow) * 4))
37
37
  ease-in-out infinite;
38
38
  background-image: linear-gradient(
@@ -42,7 +42,7 @@ var(--skeleton-sheen-color, color-mix(in oklab, var(--helix-color-foreground) 8%
42
42
  50%,
43
43
  transparent 100%
44
44
  );
45
- content: "";
45
+ display: block;
46
46
  inline-size: 200%;
47
47
  inset-block: 0;
48
48
  inset-inline-start: 0;
@@ -58,8 +58,8 @@ border-radius: var(--helix-radii-full);
58
58
  border-radius: var(--helix-radii-full);
59
59
  }
60
60
 
61
- :host([effect="pulse"]) [part="skeleton"]::after,
62
- :host([effect="none"]) [part="skeleton"]::after {
61
+ :host([effect="pulse"]) [part="sheen"],
62
+ :host([effect="none"]) [part="sheen"] {
63
63
  animation: none;
64
64
  background-image: none;
65
65
  }
@@ -75,28 +75,28 @@ opacity: 0.4;
75
75
  }
76
76
  }
77
77
 
78
- :host(:not(:empty)) {
78
+ :host(:state(wrapping)) {
79
79
  block-size: auto;
80
80
  inline-size: fit-content;
81
81
  max-inline-size: 100%;
82
82
  position: relative;
83
83
  }
84
84
 
85
- :host(:not(:empty)) [part="content"] {
85
+ :host(:state(wrapping)) [part="content"] {
86
86
  display: block;
87
87
  }
88
88
 
89
- :host(:not(:empty)) [part="skeleton"] {
89
+ :host(:state(wrapping)) [part="skeleton"] {
90
90
  block-size: auto;
91
91
  inset: 0;
92
92
  position: absolute;
93
93
  }
94
94
 
95
- :host(:not(:empty):not([loading])) [part="skeleton"] {
95
+ :host(:state(wrapping):not([loading])) [part="skeleton"] {
96
96
  display: none;
97
97
  }
98
98
 
99
- :host([loading]:not(:empty)) [part="content"] {
99
+ :host([loading]:state(wrapping)) [part="content"] {
100
100
  visibility: hidden;
101
101
  }
102
102
 
@@ -111,12 +111,12 @@ translate: 50% 0;
111
111
  }
112
112
 
113
113
  @media (prefers-reduced-motion: reduce) {
114
- [part="skeleton"]::after,
114
+ [part="sheen"],
115
115
  :host([effect="pulse"]) [part="skeleton"] {
116
116
  animation: none;
117
117
  }
118
118
 
119
- [part="skeleton"]::after {
119
+ [part="sheen"] {
120
120
  background-image: none;
121
121
  }
122
122
  }
@@ -18,6 +18,7 @@ import type { CSSResultGroup } from 'lit';
18
18
  * @documentation https://fusion.dev/helix/components/skeleton
19
19
  *
20
20
  * @csspart content - The box around the content, hidden while `loading`.
21
+ * @csspart sheen - The highlight swept across the shape. Hidden for `effect="pulse"` and `effect="none"`.
21
22
  * @csspart skeleton - The placeholder shape.
22
23
  *
23
24
  * @cssproperty --skeleton-block-size - The height of the block shape, which is the shape when `shape` is unset. Defaults to the control height.
@@ -1,26 +1,38 @@
1
1
  import { createSheet } from '@fusion.dev/helix-core';
2
2
  export const styles = createSheet(`:host {
3
3
  display: block;
4
- inset-block-start: var(--helix-space-sm);
5
- inset-inline-start: var(--helix-space-sm);
4
+ inset-block-start: var(--skip-link-inset-block, var(--helix-space-sm));
5
+ inset-inline-start: var(--skip-link-inset-inline, var(--helix-space-sm));
6
6
  position: fixed;
7
7
  z-index: var(--helix-layer-overlay);
8
8
  }
9
9
 
10
+ :host(:not(:focus-within)) {
11
+ block-size: 1px;
12
+ border: var(--helix-space-none);
13
+ clip-path: inset(50%);
14
+ inline-size: 1px;
15
+ margin: var(--helix-space-none);
16
+ overflow: hidden;
17
+ padding: var(--helix-space-none);
18
+ position: absolute;
19
+ white-space: nowrap;
20
+ }
21
+
10
22
  [part="link"] {
11
- background-color: var(--helix-color-surface-inverse);
23
+ background-color: var(--skip-link-background-color, var(--helix-color-surface-inverse));
12
24
  border: var(--skip-link-border-width, var(--helix-border-floating)) solid
13
25
  var(--skip-link-border-color, var(--helix-color-border));
14
- border-radius: var(--helix-radii-sm);
26
+ border-radius: var(--skip-link-radius, var(--helix-radii-sm));
15
27
  box-shadow: var(--skip-link-shadow, var(--helix-shadow-floating));
16
- color: var(--helix-color-foreground-inverse);
28
+ color: var(--skip-link-color, var(--helix-color-foreground-inverse));
17
29
  display: inline-block;
18
30
  font-family: var(--helix-font-sans);
19
- font-size: var(--helix-text-sm);
31
+ font-size: var(--skip-link-font-size, var(--helix-text-sm));
20
32
  font-weight: var(--helix-weight-medium);
21
33
  line-height: var(--helix-leading-normal);
22
- padding-block: var(--helix-space-sm);
23
- padding-inline: var(--helix-space-md);
34
+ padding-block: var(--skip-link-padding-block, var(--helix-space-sm));
35
+ padding-inline: var(--skip-link-padding-inline, var(--helix-space-md));
24
36
  text-decoration: none;
25
37
  }
26
38
 
@@ -6,9 +6,9 @@ import type { CSSResultGroup } from 'lit';
6
6
  *
7
7
  * @description
8
8
  * Hidden until it receives keyboard focus, then shown in the corner of the
9
- * viewport. It is hidden with the base layer's visually hidden helper, so it
10
- * stays in the tab order and the accessibility tree. This stylesheet adds the
11
- * reveal.
9
+ * viewport. Its own stylesheet hides it with the visually hidden recipe the
10
+ * base layer uses, so it stays in the tab order and the accessibility tree,
11
+ * and is hidden with or without the base layer.
12
12
  *
13
13
  * It is fixed to the viewport, because the page may already be scrolled when
14
14
  * focus arrives, from a restored position or an anchor in the address.
@@ -22,10 +22,19 @@ import type { CSSResultGroup } from 'lit';
22
22
  * @aliases Skip navigation, Skip to content
23
23
  * @documentation https://fusion.dev/helix/components/skip-link
24
24
  *
25
+ * @cssproperty --skip-link-background-color - The background of the link while it is shown.
25
26
  * @cssproperty --skip-link-border-color - The border color of the link while it is shown.
26
27
  * @cssproperty --skip-link-border-width - The border width of the link while it is shown. Follows
27
28
  * `--helix-border-floating`, which is `0`, so the link is set apart by its shadow unless a
28
29
  * theme sets a border.
30
+ * @cssproperty --skip-link-color - The text color of the link while it is shown.
31
+ * @cssproperty --skip-link-font-size - The size of the link's text.
32
+ * @cssproperty --skip-link-inset-block - How far the shown link sits from the top of the viewport.
33
+ * @cssproperty --skip-link-inset-inline - How far the shown link sits from the start edge of the
34
+ * viewport.
35
+ * @cssproperty --skip-link-padding-block - The space above and below the link's text.
36
+ * @cssproperty --skip-link-padding-inline - The space either side of the link's text.
37
+ * @cssproperty --skip-link-radius - The corner radius of the link.
29
38
  * @cssproperty --skip-link-shadow - The shadow under the link while it is shown. Follows
30
39
  * `--helix-shadow-floating`, because the link sits over the corner of the page.
31
40
  */
@@ -79,6 +79,19 @@ var(--_slider-track-color) calc(var(--slider-fraction, 0) * 100%)
79
79
  );
80
80
  }
81
81
 
82
+ [part="control"][data-origin] {
83
+ --_slider-track-image: var(
84
+ --slider-track-image,
85
+ linear-gradient(
86
+ var(--_slider-along),
87
+ var(--_slider-track-color) calc(var(--slider-from, 0) * 100%),
88
+ var(--slider-fill-color, var(--helix-color-primary)) calc(var(--slider-from, 0) * 100%),
89
+ var(--slider-fill-color, var(--helix-color-primary)) calc(var(--slider-to, 0) * 100%),
90
+ var(--_slider-track-color) calc(var(--slider-to, 0) * 100%)
91
+ )
92
+ );
93
+ }
94
+
82
95
  [part="markers"] {
83
96
  align-self: center;
84
97
  block-size: var(--_slider-track);
@@ -337,6 +350,19 @@ margin-inline: 0;
337
350
  writing-mode: vertical-lr;
338
351
  }
339
352
 
353
+ :host([orientation="vertical"]) [part="control"][data-origin] {
354
+ --_slider-track-image: var(
355
+ --slider-track-image,
356
+ linear-gradient(
357
+ to top,
358
+ var(--_slider-track-color) calc(var(--slider-from, 0) * 100%),
359
+ var(--slider-fill-color, var(--helix-color-primary)) calc(var(--slider-from, 0) * 100%),
360
+ var(--slider-fill-color, var(--helix-color-primary)) calc(var(--slider-to, 0) * 100%),
361
+ var(--_slider-track-color) calc(var(--slider-to, 0) * 100%)
362
+ )
363
+ );
364
+ }
365
+
340
366
  :host([orientation="vertical"]) [part="marker"] {
341
367
  block-size: var(--helix-border-thick);
342
368
  inline-size: var(--_slider-track);
@@ -97,4 +97,53 @@ opacity: var(--sparkline-area-opacity, 0.35);
97
97
 
98
98
  :host([emphasis="solid"]) [part="area"] {
99
99
  opacity: 1;
100
+ }
101
+
102
+ [part="svg"]:focus-visible {
103
+ border-radius: var(--helix-radii-sm);
104
+ outline: var(--helix-size-focus-ring) solid var(--helix-color-focus-ring);
105
+ outline-offset: var(--helix-size-focus-offset);
106
+ }
107
+
108
+ [part="cursor"],
109
+ [part="high"],
110
+ [part="low"] {
111
+ background-color: var(--sparkline-mark-color, currentColor);
112
+ block-size: var(--sparkline-mark-size, 5px);
113
+ border-radius: var(--helix-radii-full);
114
+ inline-size: var(--sparkline-mark-size, 5px);
115
+ pointer-events: none;
116
+ position: absolute;
117
+ translate: -50% -50%;
118
+ }
119
+
120
+ [part="cursor"] {
121
+ box-shadow: 0 0 0 var(--helix-border-thick)
122
+ var(--sparkline-mark-ring-color, var(--helix-color-background));
123
+ }
124
+
125
+ [part="readout"] {
126
+ background-color: var(--sparkline-readout-background-color, var(--helix-color-surface-inverse));
127
+ border-radius: var(--helix-radii-sm);
128
+ color: var(--sparkline-readout-color, var(--helix-color-foreground-inverse));
129
+ font-family: var(--helix-font-sans);
130
+ font-size: var(--sparkline-readout-font-size, var(--helix-text-xs));
131
+ font-variant-numeric: tabular-nums;
132
+ line-height: 1.4;
133
+ padding: 0 var(--helix-space-2xs);
134
+ pointer-events: none;
135
+ position: absolute;
136
+ translate: -50% calc(-100% - var(--sparkline-mark-size, 5px));
137
+ white-space: nowrap;
138
+ z-index: 1;
139
+ }
140
+
141
+ :host(:dir(rtl)) [part="cursor"],
142
+ :host(:dir(rtl)) [part="high"],
143
+ :host(:dir(rtl)) [part="low"] {
144
+ translate: 50% -50%;
145
+ }
146
+
147
+ :host(:dir(rtl)) [part="readout"] {
148
+ translate: 50% calc(-100% - var(--sparkline-mark-size, 5px));
100
149
  }`);
@@ -30,6 +30,12 @@ import type { CSSResultGroup } from 'lit';
30
30
  * @cssproperty --sparkline-block-size - Height of the drawing.
31
31
  * @cssproperty --sparkline-color - Color of the line, the area fill, the columns, and the mark.
32
32
  * @cssproperty --sparkline-inline-size - Width of the drawing.
33
+ * @cssproperty --sparkline-mark-color - Color of the dot on the reading a pointer or a key rests on, and of the `marks` dots. Without it, the line's color.
34
+ * @cssproperty --sparkline-mark-ring-color - Color of the ring round the dot on the reading a pointer or a key rests on, which matches the page. Change it when the sparkline sits on another surface.
35
+ * @cssproperty --sparkline-mark-size - Size of the dot on the reading a pointer or a key rests on, and of the `marks` dots.
36
+ * @cssproperty --sparkline-readout-background-color - Ground of the reading written above the dot.
37
+ * @cssproperty --sparkline-readout-color - Color of the reading written above the dot.
38
+ * @cssproperty --sparkline-readout-font-size - Size of the reading written above the dot.
33
39
  * @cssproperty --sparkline-width - Thickness of the line, overriding `weight`.
34
40
  */
35
41
  export declare class HelixSparkline extends HelixHeadlessSparkline {
@@ -8,9 +8,10 @@ import { customElement } from '@fusion.dev/helix-core';
8
8
  import { HelixHeadlessSparkline } from '@fusion.dev/helix-headless/sparkline';
9
9
  import { property } from 'lit/decorators.js';
10
10
  import { styles as terminusStyles } from '../../shared/chart/terminus.css.js';
11
+ import { styles as liveStyles } from '../../shared/live/live.css.js';
11
12
  import { styles } from './sparkline-root.css.js';
12
13
  let HelixSparkline = class HelixSparkline extends HelixHeadlessSparkline {
13
- static { this.styles = [terminusStyles, styles]; }
14
+ static { this.styles = [liveStyles, terminusStyles, styles]; }
14
15
  };
15
16
  __decorate([
16
17
  property({ reflect: true })
@@ -18,7 +18,7 @@ padding: var(--helix-space-none);
18
18
 
19
19
  [part="item"]:disabled {
20
20
  cursor: not-allowed;
21
- opacity: 0.5;
21
+ opacity: var(--speed-dial-item-disabled-opacity, 0.5);
22
22
  }
23
23
 
24
24
  [part="icon"] {
@@ -26,23 +26,24 @@ opacity: 0.5;
26
26
 
27
27
  align-items: center;
28
28
  aspect-ratio: 1;
29
- background-color: var(--helix-color-surface-overlay);
29
+ background-color: var(--speed-dial-item-background-color, var(--helix-color-surface-overlay));
30
30
  border-radius: var(--helix-radii-full);
31
31
  box-shadow: var(--helix-shadow-md);
32
- color: var(--helix-color-foreground);
32
+ color: var(--speed-dial-item-color, var(--helix-color-foreground));
33
33
  display: inline-flex;
34
34
  inline-size: var(--speed-dial-item-size, var(--helix-size-control-tight));
35
35
  justify-content: center;
36
+
37
+ pointer-events: auto;
36
38
  transition:
37
39
  background-color var(--helix-duration-fast) var(--helix-easing-standard),
38
40
  box-shadow var(--helix-duration-fast) var(--helix-easing-standard);
39
41
  }
40
42
 
41
43
  [part="item"]:not(:disabled):hover [part="icon"] {
42
- background-color: color-mix(
43
- in oklab,
44
- var(--helix-color-foreground) 6%,
45
- var(--helix-color-surface-overlay)
44
+ background-color: var(
45
+ --speed-dial-item-hover-background-color,
46
+ color-mix(in oklab, var(--helix-color-foreground) 6%, var(--helix-color-surface-overlay))
46
47
  );
47
48
  box-shadow: var(--helix-shadow-lg);
48
49
  }
@@ -57,13 +58,20 @@ outline-offset: var(--helix-size-focus-offset);
57
58
  }
58
59
 
59
60
  [part="label"] {
60
- background-color: var(--helix-color-surface-overlay);
61
+ background-color: var(--speed-dial-label-background-color, var(--helix-color-surface-overlay));
61
62
  border-radius: var(--helix-radii-sm);
62
63
  box-shadow: var(--helix-shadow-sm);
63
- color: var(--helix-color-foreground);
64
+ color: var(--speed-dial-label-color, var(--helix-color-foreground));
64
65
  font-family: var(--helix-font-sans);
65
- font-size: var(--helix-text-sm);
66
+ font-size: var(--speed-dial-label-font-size, var(--helix-text-sm));
66
67
  font-weight: var(--helix-weight-medium);
68
+ opacity: var(--_speed-dial-label-opacity, 1);
67
69
  padding: var(--helix-space-2xs) var(--helix-space-xs);
70
+ transition: opacity var(--helix-duration-fast) var(--helix-easing-standard);
68
71
  white-space: nowrap;
72
+ }
73
+
74
+ [part="item"]:hover [part="label"],
75
+ [part="item"]:focus-visible [part="label"] {
76
+ opacity: 1;
69
77
  }`);
@@ -14,7 +14,14 @@ import type { CSSResultGroup } from 'lit';
14
14
  * @aliases Speed dial action, FAB action, Quick action
15
15
  * @documentation https://fusion.dev/helix/components/speed-dial
16
16
  *
17
+ * @cssproperty --speed-dial-item-background-color - Fill of the round icon.
18
+ * @cssproperty --speed-dial-item-color - Color of the icon.
19
+ * @cssproperty --speed-dial-item-disabled-opacity - How faint a disabled action is drawn.
20
+ * @cssproperty --speed-dial-item-hover-background-color - Fill of the round icon under the pointer.
17
21
  * @cssproperty --speed-dial-item-size - Edge length of the icon.
22
+ * @cssproperty --speed-dial-label-background-color - Fill of the chip holding the action's name.
23
+ * @cssproperty --speed-dial-label-color - Color of the action's name.
24
+ * @cssproperty --speed-dial-label-font-size - Size of the action's name.
18
25
  */
19
26
  export declare class HelixSpeedDialItem extends HelixHeadlessSpeedDialItem {
20
27
  static styles: CSSResultGroup;
@@ -31,11 +31,11 @@ display: none;
31
31
  }
32
32
 
33
33
  [part="actions"] {
34
- --_dial-from: var(--helix-space-md);
34
+ --_dial-from: var(--speed-dial-travel, var(--helix-space-md));
35
35
  }
36
36
 
37
37
  [part="actions"][data-placement^="bottom"] {
38
- --_dial-from: calc(var(--helix-space-md) * -1);
38
+ --_dial-from: calc(var(--speed-dial-travel, var(--helix-space-md)) * -1);
39
39
  }
40
40
 
41
41
  [part="actions"] ::slotted(*) {
@@ -55,7 +55,7 @@ translate: 0 0;
55
55
  }
56
56
 
57
57
  [part="actions"] {
58
- --_speed-dial-stagger: calc(var(--helix-duration-fast) / 3);
58
+ --_speed-dial-stagger: var(--speed-dial-stagger, calc(var(--helix-duration-fast) / 3));
59
59
  }
60
60
 
61
61
  [part="actions"][data-placed] ::slotted(:nth-last-child(2)) {
@@ -110,15 +110,15 @@ all: unset;
110
110
 
111
111
  align-items: center;
112
112
 
113
- background-color: var(--helix-color-primary-surface);
114
- block-size: var(--helix-size-control);
113
+ background-color: var(--speed-dial-background-color, var(--helix-color-primary-surface));
114
+ block-size: var(--speed-dial-size, var(--helix-size-control));
115
115
  border-radius: var(--helix-radii-full);
116
- box-shadow: var(--helix-shadow-md);
116
+ box-shadow: var(--speed-dial-shadow, var(--helix-shadow-md));
117
117
  box-sizing: border-box;
118
- color: var(--helix-color-foreground-on-primary);
118
+ color: var(--speed-dial-color, var(--helix-color-foreground-on-primary));
119
119
  cursor: pointer;
120
120
  display: inline-flex;
121
- inline-size: var(--helix-size-control);
121
+ inline-size: var(--speed-dial-size, var(--helix-size-control));
122
122
  justify-content: center;
123
123
  transition: box-shadow var(--helix-duration-fast) var(--helix-easing-standard);
124
124
  }
@@ -140,4 +140,13 @@ outline-offset: var(--helix-size-focus-offset);
140
140
  :host {
141
141
  display: none;
142
142
  }
143
+ }
144
+
145
+ :host([labels="hover"]) {
146
+ --_speed-dial-label-opacity: 0;
147
+ }
148
+
149
+ :host([labels="hover"]) [part="actions"],
150
+ :host([labels="hover"]) [part="actions"] ::slotted(*) {
151
+ pointer-events: none;
143
152
  }`);
@@ -1,6 +1,5 @@
1
1
  import { HelixHeadlessSpeedDial } from '@fusion.dev/helix-headless/speed-dial';
2
2
  import type { CSSResultGroup } from 'lit';
3
- import '../../icon/index.js';
4
3
  /**
5
4
  * @summary A floating button that opens a short list of the main actions on a screen.
6
5
  *
@@ -8,16 +7,32 @@ import '../../icon/index.js';
8
7
  * Presentation only: the column the actions fan into, and the end they align
9
8
  * to. The base class handles opening, closing, and keyboard movement.
10
9
  *
10
+ * It draws no `helix-icon` of its own, so it does not register one: import
11
+ * `@fusion.dev/helix/icon` where your trigger or your actions use it.
12
+ *
11
13
  * @since 0.1.0
12
14
  * @status stable
13
15
  * @category actions
14
16
  * @aliases FAB, Floating action button, Action button, Quick actions
15
17
  * @documentation https://fusion.dev/helix/components/speed-dial
16
18
  *
19
+ * @cssproperty --speed-dial-background-color - Fill of the trigger the dial draws when none is slotted.
20
+ * @cssproperty --speed-dial-color - Color of that trigger's icon.
17
21
  * @cssproperty --speed-dial-gap - Space between the actions.
22
+ * @cssproperty --speed-dial-shadow - Shadow under that trigger at rest.
23
+ * @cssproperty --speed-dial-size - Width and height of that trigger.
24
+ * @cssproperty --speed-dial-stagger - The wait between one action arriving and the next.
25
+ * @cssproperty --speed-dial-travel - How far each action moves as it arrives.
18
26
  */
19
27
  export declare class HelixSpeedDial extends HelixHeadlessSpeedDial {
20
28
  static styles: CSSResultGroup;
29
+ /**
30
+ * When the actions' names show. Unset, always, beside each action. `hover`
31
+ * shows a name only while its action is under the pointer or has focus, as
32
+ * a tooltip does, for a dial whose icons speak for themselves. The names stay
33
+ * the actions' accessible names either way.
34
+ */
35
+ labels?: 'hover';
21
36
  }
22
37
  declare global {
23
38
  interface HTMLElementTagNameMap {
@@ -6,12 +6,15 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { customElement } from '@fusion.dev/helix-core';
8
8
  import { HelixHeadlessSpeedDial } from '@fusion.dev/helix-headless/speed-dial';
9
+ import { property } from 'lit/decorators.js';
9
10
  import { styles as glyphStyles } from '../../shared/glyph/glyph.css.js';
10
11
  import { styles } from './speed-dial-root.css.js';
11
- import '../../icon/index.js';
12
12
  let HelixSpeedDial = class HelixSpeedDial extends HelixHeadlessSpeedDial {
13
13
  static { this.styles = [glyphStyles, styles]; }
14
14
  };
15
+ __decorate([
16
+ property({ reflect: true })
17
+ ], HelixSpeedDial.prototype, "labels", void 0);
15
18
  HelixSpeedDial = __decorate([
16
19
  customElement('helix-speed-dial')
17
20
  ], HelixSpeedDial);
@@ -32,6 +32,10 @@ font-size: var(--stat-unit-size, calc(var(--helix-text-md) / var(--helix-text-md
32
32
  font-weight: var(--helix-weight-medium);
33
33
  }
34
34
 
35
+ slot[name="trend"]::slotted(*) {
36
+ grid-column: 1 / -1;
37
+ }
38
+
35
39
  :host([direction="column-reverse"]) slot[name="label"]::slotted(*) {
36
40
  order: 1;
37
41
  }
@@ -42,9 +42,37 @@ var(--_steps-connector-inset)
42
42
  --_steps-trail-block-size: var(--helix-border-thin);
43
43
  counter-reset: helix-step;
44
44
  display: flex;
45
+
46
+ flex-wrap: wrap;
45
47
  gap: var(--steps-gap, var(--helix-space-md));
46
48
  }
47
49
 
50
+ [part="progress"] {
51
+ background-color: var(--steps-progress-track-color, var(--helix-color-border));
52
+ background-image: linear-gradient(
53
+ to right,
54
+ var(--steps-progress-color, var(--helix-color-success)) var(--steps-progress, 0%),
55
+ transparent 0
56
+ );
57
+ block-size: var(--steps-progress-thickness, var(--helix-border-thick));
58
+ border-radius: var(--helix-radii-full);
59
+ flex: 0 0 100%;
60
+ order: 1;
61
+ }
62
+
63
+ [part="progress"]:dir(rtl) {
64
+ background-image: linear-gradient(
65
+ to left,
66
+ var(--steps-progress-color, var(--helix-color-success)) var(--steps-progress, 0%),
67
+ transparent 0
68
+ );
69
+ }
70
+
71
+ :host([orientation="vertical"]) [part="progress"] {
72
+ flex: none;
73
+ inline-size: 100%;
74
+ }
75
+
48
76
  :host(:not([orientation="vertical"])) ::slotted(*) {
49
77
  flex: 1 1 0;
50
78
  min-inline-size: 0;
@@ -18,12 +18,17 @@ import type { CSSResultGroup } from 'lit';
18
18
  * @aliases Stepper, Wizard, Progress steps
19
19
  * @documentation https://fusion.dev/helix/components/steps
20
20
  *
21
+ * @csspart progress - How far through the sequence is, drawn as a bar under the steps once a stylesheet gives the part a `display`, such as `helix-steps::part(progress) { display: block }`.
22
+ *
21
23
  * @cssproperty --steps-complete-color - Color of the mark on a finished step.
22
24
  * @cssproperty --steps-connector-color - Color of the line that connects the steps.
23
25
  * @cssproperty --steps-connector-inset - Space on either side of a mark, before the connecting line.
24
26
  * @cssproperty --steps-current-color - Color of the mark on the current step.
25
27
  * @cssproperty --steps-gap - Space between one step and the next.
26
28
  * @cssproperty --steps-marker-size - Size of the mark, whether an icon or a digit.
29
+ * @cssproperty --steps-progress-color - Fill of the progress bar, once a page shows the `progress` part.
30
+ * @cssproperty --steps-progress-thickness - Height of the progress bar.
31
+ * @cssproperty --steps-progress-track-color - Color of the progress bar's track.
27
32
  */
28
33
  export declare class HelixSteps extends HelixHeadlessSteps {
29
34
  static styles: CSSResultGroup;