@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
@@ -26,9 +26,11 @@ declare const HelixButton_base: (new (...args: any[]) => import("../../shared/mi
26
26
  * @slot start - Content before the label, usually an icon.
27
27
  *
28
28
  * @csspart button - The inner control.
29
+ * @csspart live - The live region that says `pending-label` when the button becomes pending under focus. It is clipped out of view and still read.
29
30
  *
30
31
  * @cssproperty --button-background-color - Fill behind the button, in every state.
31
32
  * @cssproperty --button-background-color-hover - Fill behind the button under the pointer. Without it, `--button-background-color` also applies on hover.
33
+ * @cssproperty --button-border-color - Edge color of an outlined button. The other emphases draw no edge.
32
34
  * @cssproperty --button-foreground-color - Label and icon color.
33
35
  * @cssproperty --button-gap - Space between the label and the content on either side of it.
34
36
  * @cssproperty --button-inline-size - Minimum width. It inherits, so you can set it once on a section for every button inside it.
@@ -41,6 +43,9 @@ declare const HelixButton_base: (new (...args: any[]) => import("../../shared/mi
41
43
  * @cssproperty --button-radius-start-end - The top trailing corner, for a group stacking down.
42
44
  * @cssproperty --button-radius-start-start - The top leading corner, for a group stacking down.
43
45
  * @cssproperty --button-size - Height of the control, for a row height outside the density steps.
46
+ * @cssproperty --button-spinner-size - Size of the ring a pending button turns. Defaults to the size of its icons.
47
+ *
48
+ * @cssstate pending - The button is pending: `pending` is set. A ring turns over its hidden words.
44
49
  */
45
50
  export declare class HelixButton extends HelixButton_base {
46
51
  /**
@@ -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 { HelixHeadlessButton } from '@fusion.dev/helix-headless/button';
9
9
  import { property } from 'lit/decorators.js';
10
+ import { styles as liveStyles } from '../../shared/live/live.css.js';
10
11
  import { MixinControlSurface } from '../../shared/mixin-control-surface/mixin-control-surface.js';
11
12
  import { styles } from './button-root.css.js';
12
13
  let HelixButton = class HelixButton extends MixinControlSurface(HelixHeadlessButton) {
13
- static { this.styles = styles; }
14
+ static { this.styles = [liveStyles, styles]; }
14
15
  };
15
16
  __decorate([
16
17
  property({ reflect: true })
@@ -12,6 +12,9 @@ import type { CSSResultGroup } from 'lit';
12
12
  * shadow root, where this component's styles cannot reach. The same rule works
13
13
  * for your own anchor styled as a button.
14
14
  *
15
+ * The buttons take their height from the region, so set `data-density` on the
16
+ * group to make every button in it smaller or larger together.
17
+ *
15
18
  * @since 0.1.0
16
19
  * @status stable
17
20
  * @category actions
@@ -1,8 +1,12 @@
1
1
  import { createSheet } from '@fusion.dev/helix-core';
2
2
  export const styles = createSheet(`:host {
3
- --_callout-color: var(--helix-color-info);
3
+ --_callout-tone: var(--helix-color-info);
4
4
 
5
- font-size: var(--helix-text-sm);
5
+ --_callout-color: var(--callout-accent-color, var(--_callout-tone));
6
+ --_callout-bar: var(--callout-bar-thickness, var(--helix-border-thick));
7
+ --_callout-inset: var(--callout-padding, var(--helix-space-md));
8
+
9
+ font-size: var(--callout-font-size, var(--helix-text-sm));
6
10
  background-color: var(
7
11
  --callout-background-color,
8
12
  color-mix(in oklab, var(--_callout-color) 10%, transparent)
@@ -13,35 +17,45 @@ position: relative;
13
17
  border-radius: var(--callout-radius, var(--helix-radii-sm));
14
18
  color: var(--helix-color-foreground);
15
19
  display: flex;
16
- gap: var(--helix-space-sm);
20
+ gap: var(--callout-gap, var(--helix-space-sm));
17
21
 
18
- padding: var(--helix-space-md);
19
- padding-inline-start: calc(var(--helix-space-md) + var(--helix-border-thick));
22
+ padding: var(--_callout-inset);
23
+ padding-inline-start: calc(var(--_callout-inset) + var(--_callout-bar));
20
24
  }
21
25
 
22
26
  :host::before {
23
27
  background-color: var(--_callout-color);
24
28
  content: "";
25
- inline-size: var(--helix-border-thick);
29
+ inline-size: var(--_callout-bar);
26
30
  inset-block: 0;
27
31
  inset-inline-start: 0;
28
32
  position: absolute;
29
33
  }
30
34
 
31
35
  :host([tone="neutral"]) {
32
- --_callout-color: var(--helix-color-foreground-muted);
36
+ --_callout-tone: var(--helix-color-foreground-muted);
33
37
  }
34
38
 
35
39
  :host([tone="success"]) {
36
- --_callout-color: var(--helix-color-success);
40
+ --_callout-tone: var(--helix-color-success);
37
41
  }
38
42
 
39
43
  :host([tone="warning"]) {
40
- --_callout-color: var(--helix-color-warning);
44
+ --_callout-tone: var(--helix-color-warning);
41
45
  }
42
46
 
43
47
  :host([tone="danger"]) {
44
- --_callout-color: var(--helix-color-danger);
48
+ --_callout-tone: var(--helix-color-danger);
49
+ }
50
+
51
+ :host([separation="outlined"]) {
52
+ background-color: var(--callout-background-color, transparent);
53
+ box-shadow: inset 0 0 0 var(--helix-border-thin)
54
+ color-mix(in oklab, var(--_callout-color) 45%, var(--helix-color-background));
55
+ }
56
+
57
+ :host([separation="plain"]) {
58
+ background-color: var(--callout-background-color, transparent);
45
59
  }
46
60
 
47
61
  [part="icon"] {
@@ -67,11 +81,55 @@ line-height: var(--helix-leading-normal);
67
81
  min-inline-size: 0;
68
82
  }
69
83
 
84
+ [part="dismiss"] {
85
+ all: unset;
86
+
87
+ box-sizing: border-box;
88
+ block-size: calc(var(--helix-size-icon) + var(--helix-space-2xs) * 2);
89
+ border-radius: var(--helix-radii-sm);
90
+ color: var(--helix-color-foreground-muted);
91
+ cursor: pointer;
92
+ display: inline-flex;
93
+ flex: 0 0 auto;
94
+ inline-size: calc(var(--helix-size-icon) + var(--helix-space-2xs) * 2);
95
+ margin-block: calc(var(--helix-space-2xs) * -1);
96
+ margin-inline: auto calc(var(--helix-space-2xs) * -1);
97
+ place-content: center;
98
+ place-items: center;
99
+ transition:
100
+ background-color var(--helix-duration-fast) var(--helix-easing-standard),
101
+ color var(--helix-duration-fast) var(--helix-easing-standard);
102
+ }
103
+
104
+ [part="dismiss"]:hover {
105
+ background-color: color-mix(in oklab, var(--helix-color-foreground) 8%, transparent);
106
+ color: var(--helix-color-foreground);
107
+ }
108
+
109
+ [part="dismiss"]:focus-visible {
110
+ outline: var(--helix-size-focus-ring) solid var(--helix-color-focus-ring);
111
+ outline-offset: var(--helix-size-focus-offset);
112
+ }
113
+
114
+ [part="dismiss"] svg,
115
+ slot[name="dismiss-icon"]::slotted(*) {
116
+ --icon-size: var(--helix-size-icon);
117
+
118
+ block-size: var(--helix-size-icon);
119
+ inline-size: var(--helix-size-icon);
120
+ }
121
+
122
+ @media (prefers-reduced-motion: reduce) {
123
+ [part="dismiss"] {
124
+ transition: none;
125
+ }
126
+ }
127
+
70
128
  slot[name="heading"]::slotted(*) {
71
129
  color: var(--helix-color-foreground);
72
130
 
73
131
  display: block;
74
- font-size: var(--helix-text-sm);
132
+ font-size: var(--callout-font-size, var(--helix-text-sm));
75
133
  font-weight: var(--helix-weight-semibold);
76
134
  margin: var(--helix-space-none);
77
135
  }
@@ -10,8 +10,9 @@ import type { CSSResultGroup } from 'lit';
10
10
  * A bar on the inline start edge also marks the tone, so it still shows in
11
11
  * grayscale and for people who do not distinguish the hues.
12
12
  *
13
- * This tier has no treatment property. `tone` is set on the headless tier and
14
- * carries the meaning, and this tier draws it.
13
+ * `tone` is set on the headless tier and carries the meaning, and this tier
14
+ * draws it. `separation` is where the box ends: absent is the tint with the
15
+ * bar, `outlined` an edge with no fill, and `plain` the bar and the mark alone.
15
16
  *
16
17
  * @since 0.1.0
17
18
  * @status stable
@@ -20,15 +21,37 @@ import type { CSSResultGroup } from 'lit';
20
21
  * @documentation https://fusion.dev/helix/components/callout
21
22
  *
22
23
  * @slot - The callout's content.
24
+ * @slot dismiss-icon - Replaces the cross inside the dismiss button.
25
+ * @slot heading - A heading above the content.
23
26
  * @slot icon - Replaces the icon chosen by `tone`.
24
27
  *
25
28
  * @csspart content - The content region.
29
+ * @csspart dismiss - The button that dismisses the callout, shown when `dismissible` is set.
30
+ * @csspart dismiss-mark - The cross on the dismiss button, shown when the `dismiss-icon` slot is empty.
26
31
  * @csspart icon - The icon region.
27
32
  *
33
+ * @cssproperty --callout-accent-color - The color of the bar, the mark and the tint, in place of the tone's.
28
34
  * @cssproperty --callout-background-color - The fill behind the callout.
35
+ * @cssproperty --callout-bar-thickness - The thickness of the bar on the inline start edge.
36
+ * @cssproperty --callout-font-size - The size of the callout's text.
37
+ * @cssproperty --callout-gap - The space between the mark and the content.
38
+ * @cssproperty --callout-padding - The inset around the content, to which the bar's width is added at the start.
29
39
  * @cssproperty --callout-radius - The corner radius of the callout.
30
40
  */
31
41
  export declare class HelixCallout extends HelixHeadlessCallout {
42
+ /**
43
+ * Where the callout's box ends, whatever its tone.
44
+ *
45
+ * Absent, or `filled`, is the tint with the bar, the resting look.
46
+ * `outlined` draws the tone at the edge with no fill, and `plain` keeps only
47
+ * the bar and the mark, for an aside in running prose. The bar stays in
48
+ * every one, being what says the tone where the hue is not seen.
49
+ *
50
+ * Web Awesome calls this `appearance`. It is `separation` here, as on
51
+ * `Announcement` and `Card`, since a box's edge and its meaning are two
52
+ * choices.
53
+ */
54
+ separation?: 'filled' | 'outlined' | 'plain';
32
55
  static styles: CSSResultGroup;
33
56
  }
34
57
  declare global {
@@ -6,10 +6,14 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { customElement } from '@fusion.dev/helix-core';
8
8
  import { HelixHeadlessCallout } from '@fusion.dev/helix-headless/callout';
9
+ import { property } from 'lit/decorators.js';
9
10
  import { styles } from './callout-root.css.js';
10
11
  let HelixCallout = class HelixCallout extends HelixHeadlessCallout {
11
12
  static { this.styles = styles; }
12
13
  };
14
+ __decorate([
15
+ property({ reflect: true })
16
+ ], HelixCallout.prototype, "separation", void 0);
13
17
  HelixCallout = __decorate([
14
18
  customElement('helix-callout')
15
19
  ], HelixCallout);
@@ -84,6 +84,7 @@ transition: none;
84
84
  inset: 0;
85
85
  overflow: visible;
86
86
  position: absolute;
87
+ z-index: var(--helix-layer-beneath);
87
88
  }
88
89
 
89
90
  [part="edge"] {
@@ -17,7 +17,7 @@ color: var(--helix-color-foreground-muted);
17
17
 
18
18
  align-content: var(--card-align, start);
19
19
  display: grid;
20
- gap: var(--helix-space-sm);
20
+ gap: var(--card-gap, var(--helix-space-sm));
21
21
  grid-template-columns: minmax(0, 1fr);
22
22
  line-height: var(--helix-leading-normal);
23
23
 
@@ -68,6 +68,31 @@ slot[name="footer"]::slotted(*) {
68
68
  justify-self: end;
69
69
  }
70
70
 
71
+ [part="header-row"],
72
+ [part="footer-row"] {
73
+ align-items: center;
74
+ display: flex;
75
+
76
+ flex-wrap: wrap;
77
+ gap: var(--card-gap, var(--helix-space-sm));
78
+ min-inline-size: 0;
79
+ }
80
+
81
+ [part="header-row"] slot[name="header"]::slotted(*) {
82
+ flex: 1 1 auto;
83
+ min-inline-size: 0;
84
+ }
85
+
86
+ slot[name="header-actions"]::slotted(*),
87
+ slot[name="footer-actions"]::slotted(*) {
88
+ flex: none;
89
+ justify-self: end;
90
+ }
91
+
92
+ [part="footer-row"] slot[name="footer-actions"]::slotted(*) {
93
+ margin-inline-start: auto;
94
+ }
95
+
71
96
  :host([orientation="horizontal"]) {
72
97
  padding-inline-start: calc(var(--_card-media) + var(--_card-inset));
73
98
  position: relative;
@@ -10,6 +10,11 @@ import type { CSSResultGroup } from 'lit';
10
10
  * slotted content directly: a header is the element you slotted, so there is no
11
11
  * part to target.
12
12
  *
13
+ * `header-actions` and `footer-actions` put controls at the end of the header's
14
+ * and the footer's line; the footer then moves to the start of its line. Put a
15
+ * header of more than one element in one wrapper, since the header and its
16
+ * actions share a line.
17
+ *
13
18
  * `media` runs edge to edge and clips to the card's corners, so an image needs
14
19
  * no inset. Set `orientation="horizontal"` to put the media beside the header,
15
20
  * content, and footer. Set `media-placement="end"` to put it below the content,
@@ -23,9 +28,14 @@ import type { CSSResultGroup } from 'lit';
23
28
  *
24
29
  * @slot - The card's main content.
25
30
  * @slot footer - Actions that conclude the card.
31
+ * @slot footer-actions - Controls at the end of the footer's line, with the footer at its start.
26
32
  * @slot header - Title and any actions for the whole card.
33
+ * @slot header-actions - Controls for the whole card at the end of the header's line, such as a menu.
27
34
  * @slot media - Image, video, or chart that runs edge to edge, outside the inset.
28
35
  *
36
+ * @csspart footer-row - The line holding `footer` and `footer-actions`, drawn only while `footer-actions` holds something.
37
+ * @csspart header-row - The line holding `header` and `header-actions`, drawn only while `header-actions` holds something.
38
+ *
29
39
  * @cssproperty --card-align - How the regions pack when the card is stretched
30
40
  * taller than its content. `start` by default, so the slack is at the bottom;
31
41
  * `space-between` puts a footer on the floor.
@@ -36,6 +46,7 @@ import type { CSSResultGroup } from 'lit';
36
46
  * @cssproperty --card-border-width - Width of the surface's edge. Follows
37
47
  * `--helix-border-surface`, which is a hairline unless your theme sets another width.
38
48
  * The edge is what sets the surface apart.
49
+ * @cssproperty --card-gap - Space between the regions, and between a header or footer and its actions.
39
50
  * @cssproperty --card-media-block-size - Height of the media region. Defaults to
40
51
  * `auto`, which follows an image's own proportions. A chart has no height of its own,
41
52
  * so set one here for a chart.
@@ -170,11 +170,27 @@ outline-offset: var(--helix-size-focus-offset);
170
170
 
171
171
  [part="rotation"] svg,
172
172
  [part="previous"] svg,
173
- [part="next"] svg {
173
+ [part="next"] svg,
174
+ ::slotted([slot="previous-icon"]),
175
+ ::slotted([slot="next-icon"]) {
174
176
  block-size: 1em;
175
177
  inline-size: 1em;
176
178
  }
177
179
 
180
+ :host(:dir(rtl)) ::slotted([slot="previous-icon"]),
181
+ :host(:dir(rtl)) ::slotted([slot="next-icon"]) {
182
+ scale: -1 1;
183
+ }
184
+
185
+ :host([mouse-drag]) [part="track"] {
186
+ cursor: grab;
187
+ }
188
+
189
+ :host(:state(dragging)) [part="track"] {
190
+ cursor: grabbing;
191
+ user-select: none;
192
+ }
193
+
178
194
  [part="track"] {
179
195
 
180
196
  --_carousel-share: calc(
@@ -1,5 +1,6 @@
1
1
  import { HelixHeadlessCheckboxGroup } from '@fusion.dev/helix-headless/checkbox-group';
2
2
  import type { CSSResultGroup } from 'lit';
3
+ import '../../checkbox/index.js';
3
4
  /**
4
5
  * @summary A group of related checkboxes under one label, with one value for the set.
5
6
  *
@@ -16,6 +17,7 @@ import type { CSSResultGroup } from 'lit';
16
17
  * @cssproperty --checkbox-group-gap - The space between the checkboxes.
17
18
  */
18
19
  export declare class HelixCheckboxGroup extends HelixHeadlessCheckboxGroup {
20
+ static tier: string;
19
21
  /**
20
22
  * The direction the checkboxes run. Set `horizontal` for a row. Unset is a
21
23
  * column.
@@ -10,7 +10,9 @@ import { property } from 'lit/decorators.js';
10
10
  import { styles as fieldStyles } from '../../shared/field/field.css.js';
11
11
  import { styles as fieldStackedStyles } from '../../shared/field/field-stacked.css.js';
12
12
  import { styles } from './checkbox-group-root.css.js';
13
+ import '../../checkbox/index.js';
13
14
  let HelixCheckboxGroup = class HelixCheckboxGroup extends HelixHeadlessCheckboxGroup {
15
+ static { this.tier = 'helix-'; }
14
16
  static { this.styles = [fieldStyles, fieldStackedStyles, styles]; }
15
17
  };
16
18
  __decorate([
@@ -101,9 +101,32 @@ line-height: var(--helix-leading-normal);
101
101
 
102
102
  :host(:not([diff])) [part="code"] {
103
103
  display: block;
104
+
105
+ max-block-size: var(--code-block-max-block-size, none);
104
106
  overflow-x: auto;
105
107
  }
106
108
 
109
+ :host([wrap]:not([diff], [line-numbers])) [part="code"] {
110
+ overflow-wrap: anywhere;
111
+ white-space: pre-wrap;
112
+ }
113
+
114
+ :host([line-numbers]:not([diff])) [part="block"] {
115
+ column-gap: var(--helix-space-md);
116
+ display: grid;
117
+ grid-template-columns: auto minmax(0, 1fr);
118
+ }
119
+
120
+ [part="gutter"] {
121
+ color: var(--code-block-gutter-color, var(--helix-color-foreground-subtle));
122
+ font-family: var(--helix-font-mono);
123
+ font-size: var(--helix-text-sm);
124
+ font-variant-numeric: tabular-nums;
125
+ line-height: var(--helix-leading-normal);
126
+ text-align: end;
127
+ user-select: none;
128
+ }
129
+
107
130
  :host([diff]) {
108
131
  gap: var(--helix-space-md);
109
132
  }
@@ -16,6 +16,10 @@ import '../../copy-button/index.js';
16
16
  * backgrounds. A split diff stacks its two versions when the file is narrower
17
17
  * than about 40rem.
18
18
  *
19
+ * Long lines scroll by default. Set `wrap` to wrap them instead, for prose-like
20
+ * code such as a long command, and set `--code-block-max-block-size` to cap the
21
+ * height of a long file, which then scrolls.
22
+ *
19
23
  * @since 0.1.0
20
24
  * @status stable
21
25
  * @category typography
@@ -24,11 +28,22 @@ import '../../copy-button/index.js';
24
28
  * @cssproperty --code-block-backdrop - A backdrop filter for the block and its header, for a translucent background.
25
29
  * @cssproperty --code-block-background-color - The background behind the code. Set it for a block that sits on a surface other than the page background.
26
30
  * @cssproperty --code-block-border-color - The line around the block and its header.
31
+ * @cssproperty --code-block-gutter-color - The color of the line numbers.
27
32
  * @cssproperty --code-block-header-background-color - The background behind the name. The default is `surface-raised`.
33
+ * @cssproperty --code-block-max-block-size - The tallest the code grows before it scrolls. The default is no limit.
28
34
  * @cssproperty --code-block-radius - The corner radius of the header's top and the block's bottom, which form one shape.
29
35
  */
30
36
  export declare class HelixCodeBlock extends HelixHeadlessCodeBlock {
31
37
  static tier: string;
38
+ /**
39
+ * Whether long lines wrap.
40
+ *
41
+ * Off by default, so long lines scroll, because a line break can be
42
+ * significant in code and a wrapped line reads as two. For prose-like code, such as a long command or
43
+ * a log line, a wrap reads better than a scroll. Line numbers keep the lines
44
+ * unwrapped, since a wrapped line would take one number and several rows.
45
+ */
46
+ wrap: boolean;
32
47
  static styles: CSSResultGroup;
33
48
  }
34
49
  declare global {
@@ -6,12 +6,20 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { customElement } from '@fusion.dev/helix-core';
8
8
  import { HelixHeadlessCodeBlock } from '@fusion.dev/helix-headless/code-block';
9
+ import { property } from 'lit/decorators.js';
9
10
  import { styles } from './code-block-root.css.js';
10
11
  import '../../copy-button/index.js';
11
12
  let HelixCodeBlock = class HelixCodeBlock extends HelixHeadlessCodeBlock {
13
+ constructor() {
14
+ super(...arguments);
15
+ this.wrap = false;
16
+ }
12
17
  static { this.tier = 'helix-'; }
13
18
  static { this.styles = styles; }
14
19
  };
20
+ __decorate([
21
+ property({ reflect: true, type: Boolean })
22
+ ], HelixCodeBlock.prototype, "wrap", void 0);
15
23
  HelixCodeBlock = __decorate([
16
24
  customElement('helix-code-block')
17
25
  ], HelixCodeBlock);
@@ -235,6 +235,70 @@ border-color: var(--helix-color-danger);
235
235
  outline-color: var(--helix-color-danger);
236
236
  }
237
237
 
238
+ [part="fields"] {
239
+ display: grid;
240
+ gap: var(--color-picker-fields-gap, var(--helix-space-xs));
241
+ grid-auto-columns: minmax(0, 1fr);
242
+ grid-auto-flow: column;
243
+ margin-block-start: var(--helix-space-sm);
244
+ padding-inline: var(--color-picker-padding, var(--helix-space-none));
245
+ }
246
+
247
+ :host([alpha]) [part="fields"] {
248
+ grid-auto-flow: row;
249
+ grid-template-columns: repeat(2, minmax(0, 1fr));
250
+ }
251
+
252
+ [part="field"] {
253
+ display: flex;
254
+ flex-direction: column;
255
+ gap: var(--helix-space-2xs);
256
+ min-inline-size: 0;
257
+ }
258
+
259
+ [part="field-label"] {
260
+ color: var(--color-picker-field-label-color, var(--helix-color-foreground-muted));
261
+ font-family: var(--helix-font-sans);
262
+ font-size: var(--helix-text-sm);
263
+ font-weight: var(--helix-weight-medium);
264
+ }
265
+
266
+ [part="field-input"] {
267
+ all: unset;
268
+
269
+ appearance: textfield;
270
+ background-color: var(--helix-color-surface-sunken);
271
+ block-size: var(--helix-size-control);
272
+ border: var(--helix-border-thin) solid var(--helix-color-border);
273
+ border-radius: var(--helix-radii-sm);
274
+ box-sizing: border-box;
275
+ color: var(--helix-color-foreground);
276
+ font-family: var(--helix-font-sans);
277
+ font-size: var(--helix-text-control);
278
+ font-variant-numeric: tabular-nums;
279
+ font-weight: var(--helix-weight-medium);
280
+ inline-size: 100%;
281
+ min-inline-size: 0;
282
+ padding-inline: var(--helix-space-xs);
283
+ transition: border-color var(--helix-duration-fast) var(--helix-easing-standard);
284
+ }
285
+
286
+ [part="field-input"]::-webkit-inner-spin-button,
287
+ [part="field-input"]::-webkit-outer-spin-button {
288
+ appearance: none;
289
+ margin: 0;
290
+ }
291
+
292
+ [part="field-input"]:hover {
293
+ border-color: var(--helix-color-foreground-muted);
294
+ }
295
+
296
+ [part="field-input"]:focus-visible {
297
+ border-color: var(--helix-color-primary);
298
+ outline: var(--helix-size-focus-ring) solid var(--helix-color-focus-ring);
299
+ outline-offset: 0;
300
+ }
301
+
238
302
  [part="actions"] {
239
303
  display: flex;
240
304
  flex: 1 1 auto;
@@ -34,6 +34,8 @@ import '../../slider/index.js';
34
34
  * @aliases Color, ColorArea, Swatch picker
35
35
  * @documentation https://fusion.dev/helix/components/color-picker
36
36
  *
37
+ * @cssproperty --color-picker-field-label-color - The color of the names above the channel number fields, in `channel-fields`.
38
+ * @cssproperty --color-picker-fields-gap - The space between the channel number fields, in `channel-fields`.
37
39
  * @cssproperty --color-picker-grid-radius - The corner radius of the square.
38
40
  * @cssproperty --color-picker-grid-ratio - The aspect ratio of the square.
39
41
  * @cssproperty --color-picker-padding - The inset of the rows under the square and of the picker's bottom edge.
@@ -20,6 +20,11 @@ color: var(--helix-color-success);
20
20
  color: var(--helix-color-success);
21
21
  }
22
22
 
23
+ [part="button"][data-failed],
24
+ :host(:not(:disabled)) [part="button"][data-failed]:hover {
25
+ color: var(--helix-color-danger);
26
+ }
27
+
23
28
  slot > svg {
24
29
  block-size: var(--helix-size-icon-tight);
25
30
  inline-size: var(--helix-size-icon-tight);
@@ -87,6 +87,7 @@ cursor: pointer;
87
87
  }
88
88
 
89
89
  [part~="cell"]:focus-visible,
90
+ [part="more-cell"]:focus-visible,
90
91
  [part~="select"]:focus-visible,
91
92
  [part="select-all"]:focus-visible {
92
93
  outline: var(--helix-size-focus-ring) solid var(--helix-color-focus-ring);
@@ -142,6 +143,68 @@ margin-inline-start: auto;
142
143
  grid-column: 1 / -1;
143
144
  }
144
145
 
146
+ :host([child-field]) [part~="cell-header"] {
147
+ --_data-table-gutter: calc(var(--helix-size-icon-tight) + var(--helix-space-2xs));
148
+ padding-inline-start: calc(
149
+ (var(--data-table-level, 1) - 1) *
150
+ var(--data-table-indent, var(--_data-table-gutter))
151
+ );
152
+ }
153
+
154
+ :host([child-field]) [part~="cell-header"]:not(:has([part~="toggle"])) {
155
+ padding-inline-start: calc(
156
+ (var(--data-table-level, 1) - 1) *
157
+ var(--data-table-indent, var(--_data-table-gutter)) +
158
+ var(--_data-table-gutter)
159
+ );
160
+ }
161
+
162
+ [part~="toggle"] {
163
+ align-items: center;
164
+ background: none;
165
+ block-size: var(--helix-size-icon-tight);
166
+ border: none;
167
+ color: var(--helix-color-foreground-muted);
168
+ cursor: pointer;
169
+ display: inline-flex;
170
+ inline-size: var(--helix-size-icon-tight);
171
+ justify-content: center;
172
+ margin-inline-end: var(--helix-space-2xs);
173
+ padding: 0;
174
+ vertical-align: middle;
175
+ }
176
+
177
+ [part="toggle-mark"] {
178
+ block-size: 100%;
179
+ inline-size: 100%;
180
+ }
181
+
182
+ [part="more"] {
183
+ display: contents;
184
+ }
185
+
186
+ [part="more-cell"] {
187
+ display: flex;
188
+ grid-column: 1 / -1;
189
+ padding-block: var(--data-table-padding-block, var(--helix-space-sm));
190
+ }
191
+
192
+ [part="more-button"] {
193
+ background: none;
194
+ border: var(--helix-border-thin) solid var(--helix-color-border);
195
+ border-radius: var(--helix-radii-sm);
196
+ color: var(--data-table-color, var(--helix-color-foreground));
197
+ cursor: pointer;
198
+ font-family: var(--helix-font-sans);
199
+ font-size: var(--data-table-text, var(--helix-text-sm));
200
+ padding-block: var(--helix-space-2xs);
201
+ padding-inline: var(--helix-space-sm);
202
+ }
203
+
204
+ [part="more-button"]:hover {
205
+ background-color: var(--helix-color-surface-raised);
206
+ }
207
+
145
208
  :host([windowed]) [part="table"] {
146
209
  block-size: var(--data-table-block-size, 24em);
147
210
  overflow-y: auto;
@@ -44,6 +44,7 @@ import '../../table/index.js';
44
44
  * @cssproperty --data-table-heading-background-color - The fill behind a heading while `windowed`.
45
45
  * It is opaque, because rows scroll under the sticky heading. Unset otherwise.
46
46
  * @cssproperty --data-table-heading-color - The text color of a heading.
47
+ * @cssproperty --data-table-indent - How far a tree grid's row header steps in for each level. It defaults to the width of the mark that opens a row.
47
48
  * @cssproperty --data-table-padding-block - The space above and below a cell's content.
48
49
  * @cssproperty --data-table-padding-inline - The space on either side of a cell's content.
49
50
  * @cssproperty --data-table-rule-color - The color of the line between rows. It takes a