@fusion.dev/helix 0.143.0 → 0.145.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 (211) hide show
  1. package/custom-elements.json +19817 -1238
  2. package/dist/accordion/item/accordion-item.css.js +14 -3
  3. package/dist/accordion/item/accordion-item.d.ts +2 -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 +24 -3
  7. package/dist/aura/root/aura-root.d.ts +42 -7
  8. package/dist/aura/root/aura-root.js +31 -25
  9. package/dist/badge/root/badge-root.css.js +35 -0
  10. package/dist/badge/root/badge-root.d.ts +16 -0
  11. package/dist/badge/root/badge-root.js +3 -0
  12. package/dist/blockquote/root/blockquote-root.css.js +5 -5
  13. package/dist/blockquote/root/blockquote-root.d.ts +5 -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 +1 -1
  17. package/dist/breadcrumbs/root/breadcrumbs-root.d.ts +3 -0
  18. package/dist/breadcrumbs/root/breadcrumbs-root.js +2 -0
  19. package/dist/button/root/button-root.css.js +38 -1
  20. package/dist/button/root/button-root.d.ts +5 -0
  21. package/dist/button/root/button-root.js +2 -1
  22. package/dist/button-group/root/button-group-root.d.ts +3 -0
  23. package/dist/callout/root/callout-root.css.js +69 -11
  24. package/dist/callout/root/callout-root.d.ts +25 -2
  25. package/dist/callout/root/callout-root.js +4 -0
  26. package/dist/canvas/root/canvas-root.css.js +1 -0
  27. package/dist/card/root/card-root.css.js +26 -1
  28. package/dist/card/root/card-root.d.ts +11 -0
  29. package/dist/carousel/root/carousel-root.css.js +17 -1
  30. package/dist/checkbox-group/root/checkbox-group-root.d.ts +2 -0
  31. package/dist/checkbox-group/root/checkbox-group-root.js +2 -0
  32. package/dist/code-block/root/code-block-root.css.js +23 -0
  33. package/dist/code-block/root/code-block-root.d.ts +15 -0
  34. package/dist/code-block/root/code-block-root.js +8 -0
  35. package/dist/color-picker/root/color-picker-root.css.js +64 -0
  36. package/dist/color-picker/root/color-picker-root.d.ts +2 -0
  37. package/dist/copy-button/root/copy-button-root.css.js +5 -0
  38. package/dist/data-table/root/data-table-root.css.js +63 -0
  39. package/dist/data-table/root/data-table-root.d.ts +1 -0
  40. package/dist/date-input/root/date-input-root.css.js +19 -0
  41. package/dist/date-input/root/date-input-root.d.ts +8 -0
  42. package/dist/date-input/root/date-input-root.js +2 -0
  43. package/dist/date-picker/root/date-picker-root.css.js +68 -0
  44. package/dist/date-picker/root/date-picker-root.d.ts +1 -0
  45. package/dist/description-list/item/description-list-item.css.js +11 -0
  46. package/dist/dialog/root/dialog-root.css.js +47 -0
  47. package/dist/divider/root/divider-root.css.js +8 -3
  48. package/dist/divider/root/divider-root.d.ts +17 -1
  49. package/dist/divider/root/divider-root.js +4 -0
  50. package/dist/drawer/root/drawer-root.css.js +28 -1
  51. package/dist/drilldown/item/drilldown-item.css.js +2 -1
  52. package/dist/drilldown/root/drilldown-root.css.js +2 -1
  53. package/dist/element-events.generated.js +66 -14
  54. package/dist/empty/root/empty-root.css.js +9 -9
  55. package/dist/empty/root/empty-root.d.ts +9 -0
  56. package/dist/file-input/root/file-input-root.js +2 -0
  57. package/dist/filter-input/root/filter-input-root.js +2 -0
  58. package/dist/flex/root/flex-root.css.js +134 -9
  59. package/dist/flex/root/flex-root.d.ts +51 -5
  60. package/dist/flex/root/flex-root.js +17 -1
  61. package/dist/grid/root/grid-root.css.js +114 -11
  62. package/dist/grid/root/grid-root.d.ts +37 -0
  63. package/dist/grid/root/grid-root.js +13 -1
  64. package/dist/heatmap/root/heatmap-root.css.js +33 -5
  65. package/dist/heatmap/root/heatmap-root.d.ts +4 -1
  66. package/dist/icon/index.d.ts +1 -0
  67. package/dist/icon/index.js +1 -0
  68. package/dist/icon/root/icon-root.d.ts +1 -1
  69. package/dist/icon/root/icon-root.js +1 -1
  70. package/dist/icon/root/index.d.ts +2 -0
  71. package/dist/icon/root/index.js +2 -0
  72. package/dist/icon-button/root/icon-button-root.css.js +37 -0
  73. package/dist/icon-button/root/icon-button-root.d.ts +4 -0
  74. package/dist/icon-button/root/icon-button-root.js +2 -1
  75. package/dist/input/root/input-root.css.js +3 -3
  76. package/dist/input/root/input-root.d.ts +3 -0
  77. package/dist/legend/root/legend-root.css.js +40 -13
  78. package/dist/legend/root/legend-root.d.ts +6 -0
  79. package/dist/legend/root/legend-root.js +1 -1
  80. package/dist/lightbox/root/lightbox-root.css.js +84 -0
  81. package/dist/lightbox/root/lightbox-root.d.ts +1 -0
  82. package/dist/list/item/list-item.css.js +21 -1
  83. package/dist/list/item/list-item.d.ts +3 -0
  84. package/dist/list/root/list-root.css.js +13 -1
  85. package/dist/loader/root/loader-root.css.js +10 -0
  86. package/dist/loader/root/loader-root.d.ts +3 -0
  87. package/dist/menu/index.d.ts +1 -0
  88. package/dist/menu/index.js +1 -0
  89. package/dist/menu/item/menu-item.css.js +15 -1
  90. package/dist/menu/item/menu-item.d.ts +3 -0
  91. package/dist/menu/item/menu-item.js +2 -0
  92. package/dist/menu/section/menu-section.css.d.ts +1 -0
  93. package/dist/menu/section/menu-section.css.js +14 -0
  94. package/dist/menu/section/menu-section.d.ts +24 -0
  95. package/dist/menu/section/menu-section.js +16 -0
  96. package/dist/meter/root/meter-root.css.js +23 -1
  97. package/dist/meter/root/meter-root.d.ts +5 -0
  98. package/dist/navigation/root/navigation-root.css.js +3 -2
  99. package/dist/navigation/root/navigation-root.d.ts +6 -0
  100. package/dist/notifications/notification/notification.css.js +5 -0
  101. package/dist/notifications/root/notifications-root.css.js +24 -1
  102. package/dist/notifications/root/notifications-root.d.ts +1 -0
  103. package/dist/number-input/root/number-input-root.css.js +3 -3
  104. package/dist/number-input/root/number-input-root.d.ts +3 -0
  105. package/dist/object-inspector/root/object-inspector-root.css.js +36 -1
  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/orb/index.d.ts +1 -1
  109. package/dist/orb/index.js +1 -1
  110. package/dist/orb/root/orb-root.d.ts +31 -5
  111. package/dist/orb/root/orb-root.js +33 -4
  112. package/dist/outline/root/outline-root.css.js +10 -0
  113. package/dist/outline/root/outline-root.d.ts +7 -0
  114. package/dist/pin-input/root/pin-input-root.css.js +12 -5
  115. package/dist/pin-input/root/pin-input-root.d.ts +5 -0
  116. package/dist/popover/root/popover-root.css.js +36 -0
  117. package/dist/popover/root/popover-root.d.ts +1 -0
  118. package/dist/progress/root/progress-root.css.js +22 -1
  119. package/dist/progress/root/progress-root.d.ts +5 -0
  120. package/dist/quote/root/quote-root.css.js +1 -1
  121. package/dist/quote/root/quote-root.d.ts +1 -0
  122. package/dist/sandbox/frame.d.ts +63 -0
  123. package/dist/sandbox/frame.js +132 -0
  124. package/dist/sandbox/index.d.ts +1 -0
  125. package/dist/sandbox/index.js +1 -0
  126. package/dist/sandbox/levels.d.ts +10 -0
  127. package/dist/sandbox/levels.js +5 -0
  128. package/dist/sandbox/root/sandbox-root.d.ts +3 -0
  129. package/dist/sandbox/root/sandbox-root.js +13 -3
  130. package/dist/sandbox/source/sandbox-source.d.ts +1 -0
  131. package/dist/sandbox/source/sandbox-source.js +7 -3
  132. package/dist/sandbox/terminal/sandbox-terminal.css.js +39 -0
  133. package/dist/sandbox/terminal/sandbox-terminal.d.ts +42 -1
  134. package/dist/sandbox/terminal/sandbox-terminal.js +47 -3
  135. package/dist/scroll-area/root/scroll-area-root.css.js +83 -1
  136. package/dist/scroll-area/root/scroll-area-root.d.ts +6 -0
  137. package/dist/shared/chart/tooltip.css.js +25 -2
  138. package/dist/shared/field/field-segments.css.d.ts +1 -0
  139. package/dist/shared/field/field-segments.css.js +40 -0
  140. package/dist/skeleton/root/skeleton-root.css.js +56 -5
  141. package/dist/skeleton/root/skeleton-root.d.ts +17 -1
  142. package/dist/skeleton/root/skeleton-root.js +3 -0
  143. package/dist/skip-link/root/skip-link-root.css.js +8 -8
  144. package/dist/skip-link/root/skip-link-root.d.ts +9 -0
  145. package/dist/speed-dial/item/speed-dial-item.css.js +11 -4
  146. package/dist/speed-dial/item/speed-dial-item.d.ts +4 -0
  147. package/dist/speed-dial/root/speed-dial-root.css.js +7 -3
  148. package/dist/speed-dial/root/speed-dial-root.d.ts +9 -0
  149. package/dist/speed-dial/root/speed-dial-root.js +4 -0
  150. package/dist/stat/root/stat-root.css.js +7 -7
  151. package/dist/stat/root/stat-root.d.ts +8 -0
  152. package/dist/steps/step/step.js +2 -1
  153. package/dist/switch/root/switch-root.css.js +13 -5
  154. package/dist/switch/root/switch-root.d.ts +25 -1
  155. package/dist/switch/root/switch-root.js +7 -0
  156. package/dist/table/root/table-root.css.js +18 -0
  157. package/dist/table/root/table-root.d.ts +6 -0
  158. package/dist/table/root/table-root.js +2 -0
  159. package/dist/table/row/table-row.css.js +18 -0
  160. package/dist/table/row/table-row.d.ts +2 -0
  161. package/dist/table/row/table-row.js +2 -0
  162. package/dist/tabs/panel/tab-panel.css.js +5 -1
  163. package/dist/tabs/root/tabs-root.css.js +56 -1
  164. package/dist/tabs/tab/tab.css.js +5 -1
  165. package/dist/tag/group/tag-group.css.d.ts +1 -0
  166. package/dist/tag/group/tag-group.css.js +6 -0
  167. package/dist/tag/group/tag-group.d.ts +25 -0
  168. package/dist/tag/group/tag-group.js +16 -0
  169. package/dist/tag/index.d.ts +1 -0
  170. package/dist/tag/index.js +1 -0
  171. package/dist/tag/root/tag-root.css.js +50 -0
  172. package/dist/tag/root/tag-root.d.ts +4 -0
  173. package/dist/text/clamp.d.ts +8 -0
  174. package/dist/text/clamp.js +1 -0
  175. package/dist/text/root/text-root.css.js +85 -45
  176. package/dist/text/root/text-root.d.ts +48 -7
  177. package/dist/text/root/text-root.js +17 -11
  178. package/dist/textarea/root/textarea-root.css.js +12 -4
  179. package/dist/textarea/root/textarea-root.d.ts +4 -0
  180. package/dist/time-input/root/time-input-root.css.js +19 -0
  181. package/dist/time-input/root/time-input-root.d.ts +8 -0
  182. package/dist/time-input/root/time-input-root.js +2 -0
  183. package/dist/timeline/group/timeline-group.css.d.ts +1 -0
  184. package/dist/timeline/group/timeline-group.css.js +32 -0
  185. package/dist/timeline/group/timeline-group.d.ts +25 -0
  186. package/dist/timeline/group/timeline-group.js +16 -0
  187. package/dist/timeline/index.d.ts +1 -0
  188. package/dist/timeline/index.js +1 -0
  189. package/dist/timeline/item/timeline-item.css.js +43 -16
  190. package/dist/timeline/root/timeline-root.css.js +56 -0
  191. package/dist/timeline/root/timeline-root.d.ts +26 -0
  192. package/dist/timeline/root/timeline-root.js +7 -0
  193. package/dist/toast/item/toast-item.css.js +16 -0
  194. package/dist/toggle/group/toggle-group.css.js +16 -0
  195. package/dist/toolbar/root/toolbar-root.css.js +3 -0
  196. package/dist/toolbar/root/toolbar-root.d.ts +3 -0
  197. package/dist/tour/root/tour-root.css.js +8 -0
  198. package/dist/tour/stop/tour-stop.css.js +32 -0
  199. package/dist/tree/item/tree-item.css.js +72 -0
  200. package/dist/tree/item/tree-item.d.ts +10 -0
  201. package/dist/trend/root/trend-root.css.js +12 -5
  202. package/dist/trend/root/trend-root.d.ts +6 -1
  203. package/dist/video/root/video-root.css.js +6 -0
  204. package/dist/video/root/video-root.d.ts +3 -0
  205. package/dist/virtual-list/root/virtual-list-root.css.js +5 -0
  206. package/dist/virtual-list/root/virtual-list-root.d.ts +4 -3
  207. package/lint.json +1 -1
  208. package/package.json +6 -6
  209. package/types/jsx.d.ts +8620 -813
  210. package/types/svelte.d.ts +3 -0
  211. package/types/vue.d.ts +2372 -213
@@ -18,7 +18,7 @@ font-weight: var(--helix-weight-medium);
18
18
  margin-block-end: var(--helix-space-2xs);
19
19
  }
20
20
 
21
- [part="tooltip-cell"] {
21
+ [part~="tooltip-cell"] {
22
22
  align-items: baseline;
23
23
  column-gap: var(--helix-space-sm);
24
24
  display: grid;
@@ -36,11 +36,34 @@ font-variant-numeric: tabular-nums;
36
36
  grid-column: 3;
37
37
  }
38
38
 
39
- [part="tooltip-cell"][data-series]::before {
39
+ [part~="tooltip-cell"][data-series]::before {
40
40
  background-color: var(--chart-series);
41
41
  block-size: 0.5em;
42
42
  border-radius: var(--helix-radii-full);
43
43
  content: "";
44
44
  grid-column: 1;
45
45
  inline-size: 0.5em;
46
+ }
47
+
48
+ [part~="tooltip-cell-current"] {
49
+ font-weight: var(--helix-weight-medium);
50
+ }
51
+
52
+ [part~="tooltip-cell-current"] [part="tooltip-name"] {
53
+ opacity: 1;
54
+ }
55
+
56
+ [part="plot"]:focus-visible {
57
+ outline: var(--helix-size-focus-ring) solid var(--helix-color-focus-ring);
58
+ outline-offset: var(--helix-size-focus-offset);
59
+ }
60
+
61
+ [part="live"] {
62
+ block-size: 1px;
63
+ clip-path: inset(50%);
64
+ inline-size: 1px;
65
+ margin: var(--helix-space-none);
66
+ overflow: hidden;
67
+ position: absolute;
68
+ white-space: nowrap;
46
69
  }`);
@@ -0,0 +1 @@
1
+ export declare const styles: import("lit").CSSResult;
@@ -0,0 +1,40 @@
1
+ import { createSheet } from '@fusion.dev/helix-core';
2
+ export const styles = createSheet(`[part="segments"] {
3
+ align-items: center;
4
+ color: var(--helix-color-foreground);
5
+ display: flex;
6
+ flex: 1 1 auto;
7
+ font-family: var(--helix-font-sans);
8
+ font-size: var(--helix-text-md);
9
+
10
+ font-variant-numeric: tabular-nums;
11
+ font-weight: var(--helix-weight-medium);
12
+ min-inline-size: 0;
13
+ white-space: nowrap;
14
+ }
15
+
16
+ [part~="segment"] {
17
+ border-radius: var(--helix-radii-sm);
18
+ caret-color: transparent;
19
+ outline: none;
20
+ padding-inline: calc(var(--helix-space-2xs) / 2);
21
+ }
22
+
23
+ [part~="segment"]:focus {
24
+ background-color: var(--_segment-focus-background-color, var(--helix-color-primary));
25
+ color: var(--_segment-focus-color, var(--helix-color-foreground-on-primary));
26
+ }
27
+
28
+ [part~="segment-placeholder"] {
29
+ color: var(--_segment-placeholder-color, var(--helix-color-foreground-subtle));
30
+ }
31
+
32
+ [part="literal"] {
33
+ color: var(--_segment-literal-color, var(--helix-color-foreground-muted));
34
+ white-space: pre;
35
+ }
36
+
37
+ :host(:disabled) [part="segments"] {
38
+ color: var(--helix-color-foreground-subtle);
39
+ cursor: not-allowed;
40
+ }`);
@@ -19,9 +19,12 @@ inline-size: var(--skeleton-size, var(--helix-size-control));
19
19
  }
20
20
 
21
21
  [part="skeleton"] {
22
- background-color: color-mix(in oklab, var(--helix-color-foreground) 8%, transparent);
22
+ background-color: var(
23
+ --skeleton-color,
24
+ color-mix(in oklab, var(--helix-color-foreground) 8%, transparent)
25
+ );
23
26
  block-size: 100%;
24
- border-radius: var(--helix-radii-sm);
27
+ border-radius: var(--skeleton-radius, var(--helix-radii-sm));
25
28
  display: block;
26
29
  inline-size: 100%;
27
30
 
@@ -30,11 +33,13 @@ position: relative;
30
33
  }
31
34
 
32
35
  [part="skeleton"]::after {
33
- animation: helix-skeleton-sweep calc(var(--helix-duration-slow) * 4) ease-in-out infinite;
36
+ animation: helix-skeleton-sweep var(--skeleton-duration, calc(var(--helix-duration-slow) * 4))
37
+ ease-in-out infinite;
34
38
  background-image: linear-gradient(
35
39
  90deg,
36
40
  transparent 0%,
37
- color-mix(in oklab, var(--helix-color-foreground) 8%, transparent) 50%,
41
+ var(--skeleton-sheen-color, color-mix(in oklab, var(--helix-color-foreground) 8%, transparent))
42
+ 50%,
38
43
  transparent 100%
39
44
  );
40
45
  content: "";
@@ -53,6 +58,48 @@ border-radius: var(--helix-radii-full);
53
58
  border-radius: var(--helix-radii-full);
54
59
  }
55
60
 
61
+ :host([effect="pulse"]) [part="skeleton"]::after,
62
+ :host([effect="none"]) [part="skeleton"]::after {
63
+ animation: none;
64
+ background-image: none;
65
+ }
66
+
67
+ :host([effect="pulse"]) [part="skeleton"] {
68
+ animation: helix-skeleton-pulse var(--skeleton-duration, calc(var(--helix-duration-slow) * 4))
69
+ ease-in-out infinite;
70
+ }
71
+
72
+ @keyframes helix-skeleton-pulse {
73
+ 50% {
74
+ opacity: 0.4;
75
+ }
76
+ }
77
+
78
+ :host(:not(:empty)) {
79
+ block-size: auto;
80
+ inline-size: fit-content;
81
+ max-inline-size: 100%;
82
+ position: relative;
83
+ }
84
+
85
+ :host(:not(:empty)) [part="content"] {
86
+ display: block;
87
+ }
88
+
89
+ :host(:not(:empty)) [part="skeleton"] {
90
+ block-size: auto;
91
+ inset: 0;
92
+ position: absolute;
93
+ }
94
+
95
+ :host(:not(:empty):not([loading])) [part="skeleton"] {
96
+ display: none;
97
+ }
98
+
99
+ :host([loading]:not(:empty)) [part="content"] {
100
+ visibility: hidden;
101
+ }
102
+
56
103
  @keyframes helix-skeleton-sweep {
57
104
  from {
58
105
  translate: -50% 0;
@@ -64,8 +111,12 @@ translate: 50% 0;
64
111
  }
65
112
 
66
113
  @media (prefers-reduced-motion: reduce) {
67
- [part="skeleton"]::after {
114
+ [part="skeleton"]::after,
115
+ :host([effect="pulse"]) [part="skeleton"] {
68
116
  animation: none;
117
+ }
118
+
119
+ [part="skeleton"]::after {
69
120
  background-image: none;
70
121
  }
71
122
  }
@@ -5,7 +5,11 @@ import type { CSSResultGroup } from 'lit';
5
5
  *
6
6
  * @description
7
7
  * Animates a highlight sweeping across the block, which reads as work in
8
- * progress. A block fading in and out can look broken.
8
+ * progress. A block fading in and out can look broken, so `effect="pulse"` is
9
+ * a choice rather than the default.
10
+ *
11
+ * Around content with `loading`, the skeleton takes the content's box and
12
+ * paints over it, and the content is hidden until `loading` is taken off.
9
13
  *
10
14
  * @since 0.1.0
11
15
  * @status stable
@@ -13,12 +17,24 @@ import type { CSSResultGroup } from 'lit';
13
17
  * @aliases Placeholder, Shimmer, Ghost
14
18
  * @documentation https://fusion.dev/helix/components/skeleton
15
19
  *
20
+ * @csspart content - The box around the content, hidden while `loading`.
16
21
  * @csspart skeleton - The placeholder shape.
17
22
  *
18
23
  * @cssproperty --skeleton-block-size - The height of the block shape, which is the shape when `shape` is unset. Defaults to the control height.
24
+ * @cssproperty --skeleton-color - The placeholder's fill.
25
+ * @cssproperty --skeleton-duration - How long one sweep or one pulse takes.
26
+ * @cssproperty --skeleton-radius - The corner of the block shape.
27
+ * @cssproperty --skeleton-sheen-color - The highlight the sweep carries across the fill.
19
28
  * @cssproperty --skeleton-size - The diameter of the circle shape.
20
29
  */
21
30
  export declare class HelixSkeleton extends HelixHeadlessSkeleton {
31
+ /**
32
+ * How the placeholder shows it is waiting: a sweep when unset, `pulse` to
33
+ * fade the fill in and out, or `none` to sit still.
34
+ *
35
+ * Reduced motion stills both.
36
+ */
37
+ effect?: 'none' | 'pulse';
22
38
  /**
23
39
  * The shape of the placeholder: `text`, `circle`, or a block when unset.
24
40
  *
@@ -11,6 +11,9 @@ import { styles } from './skeleton-root.css.js';
11
11
  let HelixSkeleton = class HelixSkeleton extends HelixHeadlessSkeleton {
12
12
  static { this.styles = styles; }
13
13
  };
14
+ __decorate([
15
+ property({ reflect: true })
16
+ ], HelixSkeleton.prototype, "effect", void 0);
14
17
  __decorate([
15
18
  property({ reflect: true })
16
19
  ], HelixSkeleton.prototype, "shape", void 0);
@@ -1,26 +1,26 @@
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
10
  [part="link"] {
11
- background-color: var(--helix-color-surface-inverse);
11
+ background-color: var(--skip-link-background-color, var(--helix-color-surface-inverse));
12
12
  border: var(--skip-link-border-width, var(--helix-border-floating)) solid
13
13
  var(--skip-link-border-color, var(--helix-color-border));
14
- border-radius: var(--helix-radii-sm);
14
+ border-radius: var(--skip-link-radius, var(--helix-radii-sm));
15
15
  box-shadow: var(--skip-link-shadow, var(--helix-shadow-floating));
16
- color: var(--helix-color-foreground-inverse);
16
+ color: var(--skip-link-color, var(--helix-color-foreground-inverse));
17
17
  display: inline-block;
18
18
  font-family: var(--helix-font-sans);
19
- font-size: var(--helix-text-sm);
19
+ font-size: var(--skip-link-font-size, var(--helix-text-sm));
20
20
  font-weight: var(--helix-weight-medium);
21
21
  line-height: var(--helix-leading-normal);
22
- padding-block: var(--helix-space-sm);
23
- padding-inline: var(--helix-space-md);
22
+ padding-block: var(--skip-link-padding-block, var(--helix-space-sm));
23
+ padding-inline: var(--skip-link-padding-inline, var(--helix-space-md));
24
24
  text-decoration: none;
25
25
  }
26
26
 
@@ -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
  */
@@ -26,10 +26,10 @@ 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;
@@ -57,13 +57,20 @@ outline-offset: var(--helix-size-focus-offset);
57
57
  }
58
58
 
59
59
  [part="label"] {
60
- background-color: var(--helix-color-surface-overlay);
60
+ background-color: var(--speed-dial-label-background-color, var(--helix-color-surface-overlay));
61
61
  border-radius: var(--helix-radii-sm);
62
62
  box-shadow: var(--helix-shadow-sm);
63
- color: var(--helix-color-foreground);
63
+ color: var(--speed-dial-label-color, var(--helix-color-foreground));
64
64
  font-family: var(--helix-font-sans);
65
65
  font-size: var(--helix-text-sm);
66
66
  font-weight: var(--helix-weight-medium);
67
+ opacity: var(--_speed-dial-label-opacity, 1);
67
68
  padding: var(--helix-space-2xs) var(--helix-space-xs);
69
+ transition: opacity var(--helix-duration-fast) var(--helix-easing-standard);
68
70
  white-space: nowrap;
71
+ }
72
+
73
+ [part="item"]:hover [part="label"],
74
+ [part="item"]:focus-visible [part="label"] {
75
+ opacity: 1;
69
76
  }`);
@@ -14,7 +14,11 @@ 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.
17
19
  * @cssproperty --speed-dial-item-size - Edge length of the icon.
20
+ * @cssproperty --speed-dial-label-background-color - Fill of the chip holding the action's name.
21
+ * @cssproperty --speed-dial-label-color - Color of the action's name.
18
22
  */
19
23
  export declare class HelixSpeedDialItem extends HelixHeadlessSpeedDialItem {
20
24
  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)) {
@@ -140,4 +140,8 @@ 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;
143
147
  }`);
@@ -15,9 +15,18 @@ import '../../icon/index.js';
15
15
  * @documentation https://fusion.dev/helix/components/speed-dial
16
16
  *
17
17
  * @cssproperty --speed-dial-gap - Space between the actions.
18
+ * @cssproperty --speed-dial-stagger - The wait between one action arriving and the next.
19
+ * @cssproperty --speed-dial-travel - How far each action moves as it arrives.
18
20
  */
19
21
  export declare class HelixSpeedDial extends HelixHeadlessSpeedDial {
20
22
  static styles: CSSResultGroup;
23
+ /**
24
+ * When the actions' names show. Unset, always, beside each action. `hover`
25
+ * shows a name only while its action is under the pointer or has focus, as
26
+ * a tooltip does, for a dial whose icons speak for themselves. The names stay
27
+ * the actions' accessible names either way.
28
+ */
29
+ labels?: 'hover';
21
30
  }
22
31
  declare global {
23
32
  interface HTMLElementTagNameMap {
@@ -6,12 +6,16 @@ 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
12
  import '../../icon/index.js';
12
13
  let HelixSpeedDial = class HelixSpeedDial extends HelixHeadlessSpeedDial {
13
14
  static { this.styles = [glyphStyles, styles]; }
14
15
  };
16
+ __decorate([
17
+ property({ reflect: true })
18
+ ], HelixSpeedDial.prototype, "labels", void 0);
15
19
  HelixSpeedDial = __decorate([
16
20
  customElement('helix-speed-dial')
17
21
  ], HelixSpeedDial);
@@ -5,20 +5,20 @@ align-content: start;
5
5
 
6
6
  align-items: baseline;
7
7
  display: grid;
8
- gap: var(--helix-space-2xs);
8
+ gap: var(--stat-gap, var(--helix-space-2xs));
9
9
  grid-template-columns: auto 1fr;
10
10
  }
11
11
 
12
12
  slot[name="label"]::slotted(*) {
13
- color: var(--helix-color-foreground-muted);
14
- font-size: calc(var(--helix-text-xs) / var(--helix-text-md) * 1em);
13
+ color: var(--stat-label-color, var(--helix-color-foreground-muted));
14
+ font-size: var(--stat-label-size, calc(var(--helix-text-xs) / var(--helix-text-md) * 1em));
15
15
  font-weight: var(--helix-weight-medium);
16
16
  grid-column: 1 / -1;
17
17
  letter-spacing: var(--helix-tracking-wide);
18
18
  }
19
19
 
20
20
  slot:not([name]) {
21
- color: var(--helix-color-foreground);
21
+ color: var(--stat-value-color, var(--helix-color-foreground));
22
22
  font-family: var(--helix-font-display);
23
23
  font-size: var(--stat-value-size, calc(var(--helix-text-3xl) / var(--helix-text-md) * 1em));
24
24
  font-weight: var(--helix-weight-semibold);
@@ -27,8 +27,8 @@ line-height: var(--helix-leading-tight);
27
27
  }
28
28
 
29
29
  slot[name="unit"]::slotted(*) {
30
- color: var(--helix-color-foreground-muted);
31
- font-size: calc(var(--helix-text-md) / var(--helix-text-md) * 1em);
30
+ color: var(--stat-unit-color, var(--helix-color-foreground-muted));
31
+ font-size: var(--stat-unit-size, calc(var(--helix-text-md) / var(--helix-text-md) * 1em));
32
32
  font-weight: var(--helix-weight-medium);
33
33
  }
34
34
 
@@ -40,7 +40,7 @@ order: 1;
40
40
  :host([direction="row-reverse"]) {
41
41
  align-items: baseline;
42
42
  display: flex;
43
- gap: var(--helix-space-xs);
43
+ gap: var(--stat-gap, var(--helix-space-xs));
44
44
  }
45
45
 
46
46
  :host([direction="row"]) slot[name="label"]::slotted(*),
@@ -14,6 +14,14 @@ import type { CSSResultGroup } from 'lit';
14
14
  * @aliases Metric, KPI, Figure
15
15
  * @documentation https://fusion.dev/helix/components/stat
16
16
  *
17
+ * @csspart value - The slot the value is written in. A slot draws no box, so it takes the inherited properties, such as color and font, and passes them to the value.
18
+ *
19
+ * @cssproperty --stat-gap - Space between the label and the value, and between the value and the unit in a row.
20
+ * @cssproperty --stat-label-color - Color of the label.
21
+ * @cssproperty --stat-label-size - Size of the label.
22
+ * @cssproperty --stat-unit-color - Color of the unit.
23
+ * @cssproperty --stat-unit-size - Size of the unit.
24
+ * @cssproperty --stat-value-color - Color of the figure.
17
25
  * @cssproperty --stat-value-size - Size of the figure.
18
26
  */
19
27
  export declare class HelixStat extends HelixHeadlessStat {
@@ -7,10 +7,11 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  import { customElement } from '@fusion.dev/helix-core';
8
8
  import { HelixHeadlessStep } from '@fusion.dev/helix-headless/steps';
9
9
  import '../../button/index.js';
10
+ import { styles as liveStyles } from '../../shared/live/live.css.js';
10
11
  import { styles } from './step.css.js';
11
12
  let HelixStep = class HelixStep extends HelixHeadlessStep {
12
13
  static { this.tier = 'helix-'; }
13
- static { this.styles = styles; }
14
+ static { this.styles = [liveStyles, styles]; }
14
15
  };
15
16
  HelixStep = __decorate([
16
17
  customElement('helix-step')
@@ -41,13 +41,16 @@ background-color var(--helix-duration-fast) var(--helix-easing-standard),
41
41
  border-color var(--helix-duration-fast) var(--helix-easing-standard);
42
42
  }
43
43
 
44
- [part="track"]::after {
44
+ [part="thumb"] {
45
+ align-items: center;
46
+ color: var(--switch-icon-color, var(--helix-color-foreground-muted));
47
+ display: flex;
48
+ justify-content: center;
45
49
 
46
50
  background-color: var(--switch-thumb-color, var(--helix-color-surface-overlay));
47
51
  block-size: calc(var(--_switch-height) - var(--_switch-inset) * 2);
48
52
  border: var(--helix-border-thin) solid var(--helix-color-border);
49
53
  border-radius: var(--helix-radii-full);
50
- content: "";
51
54
  inline-size: calc(var(--_switch-height) - var(--_switch-inset) * 2);
52
55
  inset-block-start: 50%;
53
56
 
@@ -58,8 +61,13 @@ translate: 0 -50%;
58
61
  transition: translate var(--helix-duration-fast) var(--helix-easing-emphasized);
59
62
  }
60
63
 
61
- :host(:state(checked)) [part="track"]::after {
64
+ :host(:state(checked)) [part="thumb"] {
62
65
  border-color: transparent;
66
+ color: var(--switch-icon-color, var(--switch-on-color, var(--helix-color-primary)));
67
+ }
68
+
69
+ [part="thumb"] ::slotted(*) {
70
+ --icon-size: calc((var(--_switch-height) - var(--_switch-inset) * 2) * 0.7);
63
71
  }
64
72
 
65
73
  :host(:state(checked)) [part="track"] {
@@ -77,14 +85,14 @@ margin: var(--helix-space-none);
77
85
  opacity: 0;
78
86
  }
79
87
 
80
- :host(:state(checked)) [part="track"]::after {
88
+ :host(:state(checked)) [part="thumb"] {
81
89
 
82
90
  background-color: var(--switch-thumb-color, var(--helix-color-foreground-on-primary));
83
91
 
84
92
  translate: calc(var(--_switch-width) - var(--_switch-height)) -50%;
85
93
  }
86
94
 
87
- [part="track"]:has([part="control"]:focus-visible)::after {
95
+ [part="track"]:has([part="control"]:focus-visible) [part="thumb"] {
88
96
  outline: var(--helix-size-focus-ring) solid var(--helix-color-focus-ring);
89
97
  outline-offset: var(--helix-size-focus-offset);
90
98
  }
@@ -1,5 +1,5 @@
1
1
  import { HelixHeadlessSwitch } from '@fusion.dev/helix-headless/switch';
2
- import type { CSSResultGroup } from 'lit';
2
+ import { type CSSResultGroup, type TemplateResult } from 'lit';
3
3
  /**
4
4
  * @summary A control that turns something on or off.
5
5
  *
@@ -17,19 +17,43 @@ import type { CSSResultGroup } from 'lit';
17
17
  * it, and the control looks like a small dash. The width follows the height, so
18
18
  * setting `--switch-block-size` widens the switch too and keeps the proportion.
19
19
  *
20
+ * The thumb is an element, the `thumb` part, and holds an icon for each state:
21
+ * one in the `on` slot shows while the switch is on, and one in the `off` slot
22
+ * while it is off.
23
+ *
20
24
  * @since 0.1.0
21
25
  * @status stable
22
26
  * @category forms
23
27
  * @aliases Toggle switch, On/off
24
28
  * @documentation https://fusion.dev/helix/components/switch
25
29
  *
30
+ * @slot - The label that names what the switch turns on.
31
+ * @slot feedback - The message that says what is wrong, for content richer than a string. It shows while there is a message.
32
+ * @slot hint - Help under the control, for content richer than the `hint` text.
33
+ * @slot off - An icon on the thumb while the switch is off.
34
+ * @slot on - An icon on the thumb while the switch is on.
35
+ *
36
+ * @csspart control - The input.
37
+ * @csspart feedback - The message that says what is wrong.
38
+ * @csspart field - The row: the track and its label.
39
+ * @csspart hint - Help under the control, while nothing is wrong.
40
+ * @csspart label - The label beside the track.
41
+ * @csspart thumb - The thumb that travels along the track, and the icon on it.
42
+ * @csspart track - The track.
43
+ *
26
44
  * @cssproperty --switch-block-size - Height of the track. The width follows it.
45
+ * @cssproperty --switch-icon-color - Color of the icon on the thumb. Without it, the icon is muted while off and takes the on color while on.
27
46
  * @cssproperty --switch-inline-size - Length of the track. Set it to override the length derived from the height.
28
47
  * @cssproperty --switch-on-color - Fill when the switch is on.
29
48
  * @cssproperty --switch-thumb-color - Color of the thumb, in both states.
30
49
  */
31
50
  export declare class HelixSwitch extends HelixHeadlessSwitch {
32
51
  static styles: CSSResultGroup;
52
+ /**
53
+ * The thumb as an element, so it is a part and holds an icon for each state.
54
+ * The slot for the other state is `hidden`, which takes its icon out.
55
+ */
56
+ protected renderThumb(): TemplateResult;
33
57
  }
34
58
  declare global {
35
59
  interface HTMLElementTagNameMap {
@@ -6,11 +6,18 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { customElement } from '@fusion.dev/helix-core';
8
8
  import { HelixHeadlessSwitch } from '@fusion.dev/helix-headless/switch';
9
+ import { html } from 'lit';
9
10
  import { styles as fieldStyles } from '../../shared/field/field.css.js';
10
11
  import { styles as fieldInlineStyles } from '../../shared/field/field-inline.css.js';
11
12
  import { styles } from './switch-root.css.js';
12
13
  let HelixSwitch = class HelixSwitch extends HelixHeadlessSwitch {
13
14
  static { this.styles = [fieldStyles, fieldInlineStyles, styles]; }
15
+ renderThumb() {
16
+ return html `<span part="thumb" aria-hidden="true"
17
+ ><slot name="on" ?hidden=${!this.checked}></slot
18
+ ><slot name="off" ?hidden=${this.checked}></slot
19
+ ></span>`;
20
+ }
14
21
  };
15
22
  HelixSwitch = __decorate([
16
23
  customElement('helix-switch')
@@ -15,6 +15,24 @@ inline-size: 100%;
15
15
  display: contents;
16
16
  }
17
17
 
18
+ ::slotted([slot="heading"]) {
19
+ color: var(--table-title-color, var(--helix-color-foreground));
20
+ display: block;
21
+ font-family: var(--helix-font-sans);
22
+ font-size: var(--table-title-text, var(--helix-text-md));
23
+ font-weight: var(--helix-weight-semibold);
24
+ margin-block: var(--helix-space-none) var(--table-title-gap, var(--helix-space-sm));
25
+ }
26
+
27
+ [part="select-all"] {
28
+ align-items: center;
29
+ border-block-end: var(--helix-border-thin) solid var(--helix-color-border);
30
+ box-sizing: border-box;
31
+ display: flex;
32
+ min-block-size: var(--helix-size-control-loose);
33
+ padding-inline: var(--helix-space-none) var(--helix-space-md);
34
+ }
35
+
18
36
  :host([loading]) [part="table"] {
19
37
  opacity: 0.5;
20
38
  }
@@ -1,5 +1,6 @@
1
1
  import { HelixHeadlessTable } from '@fusion.dev/helix-headless/table';
2
2
  import type { CSSResultGroup } from 'lit';
3
+ import '../../checkbox/index.js';
3
4
  /**
4
5
  * @summary A table of data, laid out on a grid.
5
6
  *
@@ -13,13 +14,18 @@ import type { CSSResultGroup } from 'lit';
13
14
  * @documentation https://fusion.dev/helix/components/table
14
15
  *
15
16
  * @slot - The table's rows.
17
+ * @slot heading - Words that name the table, shown above it in the weight of a heading.
16
18
  *
17
19
  * @csspart live - A live region that repeats the empty and loading text, so screen readers announce it when it changes. Visually hidden in the styled tier.
18
20
  * @csspart table - The grid.
19
21
  *
20
22
  * @cssproperty --table-columns - Track list for the columns. It overrides the track list worked out from the columns.
23
+ * @cssproperty --table-title-color - The color of the words in the `heading` slot.
24
+ * @cssproperty --table-title-gap - The space between the `heading` slot and the grid.
25
+ * @cssproperty --table-title-text - The font size of the words in the `heading` slot.
21
26
  */
22
27
  export declare class HelixTable extends HelixHeadlessTable {
28
+ static tier: string;
23
29
  static styles: CSSResultGroup;
24
30
  }
25
31
  declare global {
@@ -9,7 +9,9 @@ import { HelixHeadlessTable } from '@fusion.dev/helix-headless/table';
9
9
  import { styles as collectionStateStyles } from '../../shared/collection/state.css.js';
10
10
  import { styles as liveStyles } from '../../shared/live/live.css.js';
11
11
  import { styles } from './table-root.css.js';
12
+ import '../../checkbox/index.js';
12
13
  let HelixTable = class HelixTable extends HelixHeadlessTable {
14
+ static { this.tier = 'helix-'; }
13
15
  static { this.styles = [liveStyles, collectionStateStyles, styles]; }
14
16
  };
15
17
  HelixTable = __decorate([