@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
@@ -5,8 +5,10 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
7
  import { customElement, HelixElement, reportRuntime } from '@fusion.dev/helix-core';
8
+ import { nothing } from 'lit';
8
9
  import { property } from 'lit/decorators.js';
9
10
  import { literal, html as staticHtml } from 'lit/static-html.js';
11
+ import { clampOf } from '../clamp.js';
10
12
  import { styles } from './text-root.css.js';
11
13
  const TAGS = {
12
14
  code: literal `code`,
@@ -25,25 +27,20 @@ const TAGS = {
25
27
  let HelixText = class HelixText extends HelixElement {
26
28
  updated(changed) {
27
29
  super.updated(changed);
28
- if (changed.has('as') && this.as === 'label' && this.labelsNothing()) {
30
+ if (changed.has('as') && this.as === 'label') {
29
31
  reportRuntime({
30
32
  kind: 'unreachable-label',
31
- message: '<helix-text as="label"> names no control: its label is in a shadow root, which ' +
32
- '`for` and a wrapped control cannot reach. Give a Helix field its own `label`, or ' +
33
- 'write `<label data-text="label">` for a native control.',
33
+ message: '<helix-text as="label"> is deprecated: its label is in a shadow root, which `for` ' +
34
+ 'and a wrapped control cannot reach, so it labels nothing. Write `variant="label"` ' +
35
+ 'for the look, `<label data-text="label">` for a native control, and give a Helix ' +
36
+ 'field its own `label`.',
34
37
  tag: this.localName,
35
38
  });
36
39
  }
37
40
  }
38
- labelsNothing() {
39
- const fields = [...this.querySelectorAll('*')].some((element) => element.constructor.formAssociated === true);
40
- return (fields ||
41
- this.hasAttribute('for') ||
42
- this.querySelector('input, select, textarea, button, meter, output, progress') !== null);
43
- }
44
41
  render() {
45
42
  const tag = (this.as && Object.hasOwn(TAGS, this.as) ? TAGS[this.as] : undefined) ?? literal `span`;
46
- return staticHtml `<${tag} part="text"><slot></slot></${tag}>`;
43
+ return staticHtml `<${tag} part="text" style=${clampOf(this.lines) ?? nothing}><slot></slot></${tag}>`;
47
44
  }
48
45
  static { this.styles = styles; }
49
46
  };
@@ -53,6 +50,15 @@ __decorate([
53
50
  __decorate([
54
51
  property({ reflect: true })
55
52
  ], HelixText.prototype, "emphasis", void 0);
53
+ __decorate([
54
+ property({ reflect: true, type: Number })
55
+ ], HelixText.prototype, "lines", void 0);
56
+ __decorate([
57
+ property({ attribute: 'text-align', reflect: true })
58
+ ], HelixText.prototype, "textAlign", void 0);
59
+ __decorate([
60
+ property({ attribute: 'text-wrap', reflect: true })
61
+ ], HelixText.prototype, "textWrap", void 0);
56
62
  __decorate([
57
63
  property({ reflect: true })
58
64
  ], HelixText.prototype, "tone", void 0);
@@ -25,6 +25,33 @@ color: var(--helix-color-foreground-subtle);
25
25
  flex: 0 0 auto;
26
26
  }
27
27
 
28
+ [part="clear"] {
29
+ --icon-size: var(--helix-size-icon-tight);
30
+ all: unset;
31
+
32
+ align-items: center;
33
+ align-self: flex-start;
34
+ border-radius: var(--helix-radii-sm);
35
+ box-sizing: border-box;
36
+ color: var(--helix-color-foreground-muted);
37
+ cursor: pointer;
38
+ display: flex;
39
+ flex: 0 0 auto;
40
+ justify-content: center;
41
+ min-block-size: var(--helix-size-icon-loose);
42
+ min-inline-size: var(--helix-size-icon-loose);
43
+ transition: color var(--helix-duration-fast) var(--helix-easing-standard);
44
+ }
45
+
46
+ [part="clear"]:hover {
47
+ color: var(--helix-color-foreground);
48
+ }
49
+
50
+ [part="clear"]:focus-visible {
51
+ outline: var(--helix-size-focus-ring) solid var(--helix-color-focus-ring);
52
+ outline-offset: var(--helix-size-focus-offset);
53
+ }
54
+
28
55
  :host([auto-grow]) [part="control"] {
29
56
  overflow: hidden;
30
57
  resize: none;
@@ -69,6 +69,18 @@ padding-inline: var(--helix-space-none);
69
69
  position: absolute;
70
70
  }
71
71
 
72
+ ::slotted([slot="panel-header"]) {
73
+ display: block;
74
+ margin-block-end: var(--helix-space-sm);
75
+ margin-inline: var(--helix-space-sm);
76
+ }
77
+
78
+ ::slotted([slot="panel-footer"]) {
79
+ display: block;
80
+ margin-block-start: var(--helix-space-sm);
81
+ margin-inline: var(--helix-space-sm);
82
+ }
83
+
72
84
  @media (prefers-reduced-motion: reduce) {
73
85
  [part="field"],
74
86
  [part="trigger"] {
@@ -109,7 +109,7 @@ transition: background-color var(--helix-duration-fast) var(--helix-easing-stand
109
109
  }
110
110
 
111
111
  [part="column"] [part~="option"]:not([disabled]):hover::part(label),
112
- [part="column"] [part~="option"][data-active]::part(label) {
112
+ [part="column"] [part~="option"]:state(active)::part(label) {
113
113
  background-color: var(--helix-color-surface-sunken);
114
114
  }
115
115
 
@@ -0,0 +1 @@
1
+ export declare const styles: import("lit").CSSResult;
@@ -0,0 +1,32 @@
1
+ import { createSheet } from '@fusion.dev/helix-core';
2
+ export const styles = createSheet(`:host {
3
+ display: block;
4
+ padding-block-end: var(--timeline-gap, var(--helix-space-lg));
5
+ }
6
+
7
+ :host(:last-child) {
8
+ padding-block-end: var(--helix-space-none);
9
+ }
10
+
11
+ [part="heading"] {
12
+ color: var(--timeline-group-heading-color, var(--helix-color-foreground));
13
+ font-size: var(--helix-text-sm);
14
+ font-weight: var(--helix-weight-semibold);
15
+ padding-block-end: var(--helix-space-sm);
16
+ }
17
+
18
+ [part="entries"] {
19
+ display: flex;
20
+ flex-direction: var(--_timeline-direction, column);
21
+ }
22
+
23
+ ::slotted(*) {
24
+ flex: var(--_timeline-entry-flex, 0 1 auto);
25
+ min-inline-size: 0;
26
+ }
27
+
28
+ @media print {
29
+ :host {
30
+ break-inside: avoid-page;
31
+ }
32
+ }`);
@@ -0,0 +1,25 @@
1
+ import { HelixHeadlessTimelineGroup } from '@fusion.dev/helix-headless/timeline';
2
+ import type { CSSResultGroup } from 'lit';
3
+ /**
4
+ * @summary A run of timeline entries under a heading, such as a day.
5
+ *
6
+ * @description
7
+ * The heading sits at the start edge, over the entries, in the small heavy
8
+ * type of a section label, and the space under one group is the space between
9
+ * two entries.
10
+ *
11
+ * @since 0.1.0
12
+ * @status stable
13
+ * @aliases Day, Section, Date group
14
+ * @documentation https://fusion.dev/helix/components/timeline
15
+ *
16
+ * @cssproperty --timeline-group-heading-color - The color of the heading.
17
+ */
18
+ export declare class HelixTimelineGroup extends HelixHeadlessTimelineGroup {
19
+ static styles: CSSResultGroup;
20
+ }
21
+ declare global {
22
+ interface HTMLElementTagNameMap {
23
+ 'helix-timeline-group': HelixTimelineGroup;
24
+ }
25
+ }
@@ -0,0 +1,16 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { customElement } from '@fusion.dev/helix-core';
8
+ import { HelixHeadlessTimelineGroup } from '@fusion.dev/helix-headless/timeline';
9
+ import { styles } from './timeline-group.css.js';
10
+ let HelixTimelineGroup = class HelixTimelineGroup extends HelixHeadlessTimelineGroup {
11
+ static { this.styles = styles; }
12
+ };
13
+ HelixTimelineGroup = __decorate([
14
+ customElement('helix-timeline-group')
15
+ ], HelixTimelineGroup);
16
+ export { HelixTimelineGroup };
@@ -1,2 +1,3 @@
1
+ export * from './group/timeline-group.js';
1
2
  export * from './item/timeline-item.js';
2
3
  export * from './root/timeline-root.js';
@@ -1,2 +1,3 @@
1
+ export * from './group/timeline-group.js';
1
2
  export * from './item/timeline-item.js';
2
3
  export * from './root/timeline-root.js';
@@ -2,21 +2,26 @@ import { createSheet } from '@fusion.dev/helix-core';
2
2
  export const styles = createSheet(`:host {
3
3
  column-gap: var(--helix-space-md);
4
4
  display: grid;
5
- grid-template-columns: auto minmax(0, 1fr);
6
- grid-template-rows: auto minmax(0, 1fr);
5
+
6
+ grid-template-columns: var(--_timeline-columns, auto minmax(0, 1fr));
7
+ grid-template-rows: var(--_timeline-rows, auto minmax(0, 1fr));
7
8
  }
8
9
 
9
10
  [part="rail"] {
11
+ align-items: var(--_timeline-rail-align, normal);
10
12
  display: grid;
11
- grid-row: 1 / -1;
12
- grid-template-rows: subgrid;
13
- justify-items: center;
13
+ grid-column: var(--_timeline-rail-column, auto);
14
+ grid-row: var(--_timeline-rail-row, 1 / -1);
15
+ grid-template-columns: var(--_timeline-rail-columns, none);
16
+ grid-template-rows: var(--_timeline-rail-rows, subgrid);
17
+ justify-items: var(--_timeline-rail-justify, center);
14
18
  }
15
19
 
16
20
  [part="rail"]::before {
17
21
  background-color: var(--helix-color-border);
18
22
  block-size: 100%;
19
23
  content: "";
24
+ display: var(--_timeline-arrive-display, block);
20
25
  grid-column: 1;
21
26
  grid-row: 1;
22
27
  inline-size: var(--timeline-rail-size, var(--helix-border-thin));
@@ -27,14 +32,22 @@ visibility: hidden;
27
32
  }
28
33
 
29
34
  [part="rail"]::after {
30
- align-self: stretch;
35
+ align-self: var(--_timeline-leave-align, stretch);
31
36
  background-color: var(--helix-color-border);
37
+ block-size: var(--_timeline-leave-block-size, auto);
32
38
  content: "";
33
39
 
34
- grid-column: 1;
35
- grid-row: 2;
36
- inline-size: var(--timeline-rail-size, var(--helix-border-thin));
37
- margin-block-start: var(--timeline-marker-size, var(--helix-size-icon-md));
40
+ grid-column: var(--_timeline-leave-column, 1);
41
+ grid-row: var(--_timeline-leave-row, 2);
42
+ inline-size: var(
43
+ --_timeline-leave-inline-size,
44
+ var(--timeline-rail-size, var(--helix-border-thin))
45
+ );
46
+ justify-self: var(--_timeline-leave-justify, auto);
47
+ margin-block-start: var(
48
+ --_timeline-leave-margin-block,
49
+ var(--timeline-marker-size, var(--helix-size-icon-md))
50
+ );
38
51
  }
39
52
 
40
53
  :host(:last-child) [part="rail"]::after {
@@ -52,7 +65,7 @@ border-radius: var(--timeline-marker-radius, var(--helix-radii-full));
52
65
  color: var(--_timeline-tone, var(--helix-color-foreground-subtle));
53
66
  display: inline-flex;
54
67
  grid-column: 1;
55
- grid-row: 2;
68
+ grid-row: var(--_timeline-marker-row, 2);
56
69
  inline-size: var(--timeline-marker-size, var(--helix-size-icon-md));
57
70
  justify-content: center;
58
71
  }
@@ -92,21 +105,35 @@ color: var(--helix-color-foreground-muted);
92
105
  font-family: var(--helix-font-sans);
93
106
  font-size: var(--helix-text-xs);
94
107
  font-weight: var(--helix-weight-medium);
95
- grid-column: 2;
96
- grid-row: 1;
108
+ grid-column: var(--_timeline-time-column, 2);
109
+ grid-row: var(--_timeline-time-row, 1);
97
110
  padding-block-end: var(--helix-space-2xs);
111
+
112
+ text-align: var(--_timeline-time-align);
98
113
  }
99
114
 
100
115
  [part="content"] {
101
116
  display: flex;
102
117
  flex-direction: column;
103
118
  gap: var(--helix-space-2xs);
104
- grid-column: 2;
105
- grid-row: 2;
119
+ grid-column: var(--_timeline-content-column, 2);
120
+ grid-row: var(--_timeline-content-row, 2);
106
121
  min-inline-size: 0;
107
- padding-block-end: var(--timeline-gap, var(--helix-space-lg));
122
+ padding-block-end: var(--_timeline-content-block-end, var(--timeline-gap, var(--helix-space-lg)));
123
+ padding-inline-end: var(--_timeline-content-inline-end, var(--helix-space-none));
108
124
  }
109
125
 
110
126
  :host(:last-child) [part="content"] {
111
127
  padding-block-end: var(--helix-space-none);
128
+ padding-inline-end: var(--helix-space-none);
129
+ }
130
+
131
+ :host(:nth-child(even)) [part="time"] {
132
+ grid-column: var(--_timeline-even-column, var(--_timeline-time-column, 2));
133
+ text-align: var(--_timeline-even-align, var(--_timeline-time-align));
134
+ }
135
+
136
+ :host(:nth-child(even)) [part="content"] {
137
+ grid-column: var(--_timeline-even-column, var(--_timeline-content-column, 2));
138
+ text-align: var(--_timeline-even-align);
112
139
  }`);
@@ -4,6 +4,62 @@ display: flex;
4
4
  flex-direction: column;
5
5
  }
6
6
 
7
+ :host([layout="opposite"]) {
8
+ --_timeline-columns: minmax(0, 1fr) auto minmax(0, 1fr);
9
+ --_timeline-content-column: 3;
10
+ --_timeline-rail-column: 2;
11
+ --_timeline-time-align: end;
12
+ --_timeline-time-column: 1;
13
+ --_timeline-time-row: 2;
14
+ }
15
+
16
+ :host([layout="alternate"]) {
17
+ --_timeline-columns: minmax(0, 1fr) auto minmax(0, 1fr);
18
+ --_timeline-content-column: 3;
19
+ --_timeline-even-align: end;
20
+ --_timeline-even-column: 1;
21
+ --_timeline-rail-column: 2;
22
+ --_timeline-time-column: 3;
23
+ }
24
+
25
+ :host([orientation="horizontal"]) {
26
+ --_timeline-arrive-display: none;
27
+ --_timeline-columns: minmax(0, 1fr);
28
+ --_timeline-content-block-end: var(--helix-space-none);
29
+ --_timeline-content-column: 1;
30
+ --_timeline-content-inline-end: var(--timeline-gap, var(--helix-space-lg));
31
+ --_timeline-content-row: 3;
32
+ --_timeline-direction: row;
33
+ --_timeline-entry-flex: 1 1 0;
34
+ --_timeline-even-align: initial;
35
+ --_timeline-even-column: initial;
36
+ --_timeline-leave-align: center;
37
+ --_timeline-leave-block-size: var(--timeline-rail-size, var(--helix-border-thin));
38
+ --_timeline-leave-column: 2;
39
+ --_timeline-leave-inline-size: auto;
40
+ --_timeline-leave-justify: stretch;
41
+ --_timeline-leave-margin-block: var(--helix-space-none);
42
+ --_timeline-leave-row: 1;
43
+ --_timeline-marker-row: 1;
44
+ --_timeline-rail-align: center;
45
+ --_timeline-rail-column: 1;
46
+ --_timeline-rail-columns: auto minmax(0, 1fr);
47
+ --_timeline-rail-justify: start;
48
+ --_timeline-rail-row: 1;
49
+ --_timeline-rail-rows: auto;
50
+ --_timeline-rows: auto auto minmax(0, 1fr);
51
+ --_timeline-time-align: initial;
52
+ --_timeline-time-column: 1;
53
+ --_timeline-time-row: 2;
54
+
55
+ flex-direction: row;
56
+ }
57
+
58
+ :host([orientation="horizontal"]) ::slotted(*) {
59
+ flex: 1 1 0;
60
+ min-inline-size: 0;
61
+ }
62
+
7
63
  @media print {
8
64
  :host {
9
65
  print-color-adjust: economy;
@@ -7,6 +7,19 @@ import type { CSSResultGroup } from 'lit';
7
7
  * Sets the direction time runs in and the spacing between events. Each entry
8
8
  * draws its own mark and line.
9
9
  *
10
+ * `layout` and `orientation` move where the entries are drawn, and never the
11
+ * order they are read in, which is the order you write them in:
12
+ *
13
+ * - Unset, the line runs down the start edge, with each time over what
14
+ * happened.
15
+ * - `layout="opposite"` runs the line down the middle, with each time on the
16
+ * start side and what happened on the end side.
17
+ * - `layout="alternate"` runs the line down the middle, with the first entry on
18
+ * the end side, the second on the start side, and so on.
19
+ * - `orientation="horizontal"` runs the line across the top, with the entries
20
+ * side by side in the order they are read, and the time over what happened
21
+ * under each mark. Use it for a few entries, since they share the width.
22
+ *
10
23
  * @since 0.1.0
11
24
  * @status stable
12
25
  * @category data
@@ -17,6 +30,19 @@ import type { CSSResultGroup } from 'lit';
17
30
  */
18
31
  export declare class HelixTimeline extends HelixHeadlessTimeline {
19
32
  static styles: CSSResultGroup;
33
+ /**
34
+ * Where the entries sit beside the line: `opposite` puts the times on one
35
+ * side and what happened on the other, and `alternate` puts every other
36
+ * entry on the other side. Unset, the line runs down the start edge.
37
+ *
38
+ * Down the page only: across the page it is set aside.
39
+ */
40
+ layout?: 'alternate' | 'opposite';
41
+ /**
42
+ * Which way time runs: `horizontal` lays the entries across the page. Unset,
43
+ * they run down it.
44
+ */
45
+ orientation?: 'horizontal';
20
46
  }
21
47
  declare global {
22
48
  interface HTMLElementTagNameMap {
@@ -6,10 +6,17 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { customElement } from '@fusion.dev/helix-core';
8
8
  import { HelixHeadlessTimeline } from '@fusion.dev/helix-headless/timeline';
9
+ import { property } from 'lit/decorators.js';
9
10
  import { styles } from './timeline-root.css.js';
10
11
  let HelixTimeline = class HelixTimeline extends HelixHeadlessTimeline {
11
12
  static { this.styles = styles; }
12
13
  };
14
+ __decorate([
15
+ property({ reflect: true })
16
+ ], HelixTimeline.prototype, "layout", void 0);
17
+ __decorate([
18
+ property({ reflect: true })
19
+ ], HelixTimeline.prototype, "orientation", void 0);
13
20
  HelixTimeline = __decorate([
14
21
  customElement('helix-timeline')
15
22
  ], HelixTimeline);
@@ -84,6 +84,16 @@ grid-area: 1 / 2;
84
84
  min-inline-size: 0;
85
85
  }
86
86
 
87
+ ::slotted([slot="heading"]) {
88
+ display: block;
89
+ font-weight: var(--helix-weight-semibold);
90
+ }
91
+
92
+ ::slotted([slot="description"]) {
93
+ color: var(--helix-color-foreground-muted);
94
+ display: block;
95
+ }
96
+
87
97
  [part="actions"] {
88
98
  display: flex;
89
99
  gap: var(--helix-space-2xs);
@@ -23,6 +23,7 @@ import type { CSSResultGroup } from 'lit';
23
23
  * @cssproperty --toast-inset - Distance from the edges of the window.
24
24
  */
25
25
  export declare class HelixToast extends HelixHeadlessToast {
26
+ static tier: string;
26
27
  static styles: CSSResultGroup;
27
28
  }
28
29
  declare global {
@@ -8,6 +8,7 @@ import { customElement } from '@fusion.dev/helix-core';
8
8
  import { HelixHeadlessToast } from '@fusion.dev/helix-headless/toast';
9
9
  import { styles } from './toast-root.css.js';
10
10
  let HelixToast = class HelixToast extends HelixHeadlessToast {
11
+ static { this.tier = 'helix-'; }
11
12
  static { this.styles = styles; }
12
13
  };
13
14
  HelixToast = __decorate([
@@ -34,7 +34,7 @@ align-items: start;
34
34
  [part="track"] {
35
35
  --_toggle-height: calc(var(--helix-size-control) - var(--helix-space-2xs) * 2);
36
36
 
37
- --_toggle-radius: var(--helix-radii-sm);
37
+ --_toggle-radius: var(--toggle-group-item-radius, var(--helix-radii-sm));
38
38
 
39
39
  --_indicator-surface: var(--helix-color-surface-raised);
40
40
  display: inline-flex;
@@ -51,7 +51,10 @@ padding: var(--helix-space-2xs);
51
51
  :host(:not([separation])) [part="track"],
52
52
  :host([separation="outlined"]) [part="track"] {
53
53
 
54
- --_toggle-radius: calc(var(--helix-radii-sm) - var(--helix-border-thin));
54
+ --_toggle-radius: var(
55
+ --toggle-group-item-radius,
56
+ calc(var(--toggle-group-radius, var(--helix-radii-sm)) - var(--helix-border-thin))
57
+ );
55
58
 
56
59
  --_toggle-height: calc(
57
60
  var(--helix-size-control) -
@@ -62,9 +65,9 @@ var(--helix-border-thin) *
62
65
  );
63
66
 
64
67
  --_indicator-surface: var(--helix-color-surface-overlay);
65
- background-color: var(--helix-color-surface-sunken);
66
- border: var(--helix-border-thin) solid var(--helix-color-border);
67
- border-radius: var(--helix-radii-sm);
68
+ background-color: var(--toggle-group-background-color, var(--helix-color-surface-sunken));
69
+ border: var(--helix-border-thin) solid var(--toggle-group-border-color, var(--helix-color-border));
70
+ border-radius: var(--toggle-group-radius, var(--helix-radii-sm));
68
71
  padding: var(--helix-space-2xs);
69
72
  }
70
73
 
@@ -79,7 +82,7 @@ flex: 1 1 auto;
79
82
  background-color: var(--toggle-group-indicator-color, var(--_indicator-surface));
80
83
  block-size: var(--indicator-block-size, 0);
81
84
  border-radius: var(--_toggle-radius, var(--helix-radii-sm));
82
- box-shadow: var(--helix-shadow-sm);
85
+ box-shadow: var(--toggle-group-indicator-shadow, var(--helix-shadow-sm));
83
86
  inline-size: var(--indicator-inline-size, 0);
84
87
  inset-block-start: 0;
85
88
  inset-inline-start: 0;
@@ -116,7 +119,7 @@ flex: 1 1 auto;
116
119
  :host([selection-mode="multiple"]) ::slotted(helix-toggle:state(pressed)) {
117
120
  background-color: var(--toggle-group-indicator-color, var(--_indicator-surface));
118
121
  border-radius: var(--_toggle-radius, var(--helix-radii-sm));
119
- box-shadow: var(--helix-shadow-sm);
122
+ box-shadow: var(--toggle-group-indicator-shadow, var(--helix-shadow-sm));
120
123
  }
121
124
 
122
125
  :host([orientation="vertical"]) [part="track"] {
@@ -26,7 +26,12 @@ import type { CSSResultGroup } from 'lit';
26
26
  *
27
27
  * @csspart indicator - The moving marker behind the selected item.
28
28
  *
29
- * @cssproperty --toggle-group-indicator-color - The fill of the moving marker.
29
+ * @cssproperty --toggle-group-background-color - The groove behind the items, when the group is framed.
30
+ * @cssproperty --toggle-group-border-color - The edge of the groove, when the group is framed.
31
+ * @cssproperty --toggle-group-indicator-color - The fill of the moving marker, and of each pressed item under `selection-mode="multiple"`.
32
+ * @cssproperty --toggle-group-indicator-shadow - The shadow of the moving marker and of each pressed item.
33
+ * @cssproperty --toggle-group-item-radius - Corner radius of each item, the marker, and a pressed item's fill. Without it, the curve stays concentric with the groove.
34
+ * @cssproperty --toggle-group-radius - Corner radius of the groove, when the group is framed.
30
35
  */
31
36
  export declare class HelixToggleGroup extends HelixHeadlessToggleGroup {
32
37
  /**
@@ -16,6 +16,12 @@ import type { CSSResultGroup } from 'lit';
16
16
  * @slot - The item's label.
17
17
  *
18
18
  * @csspart item - The radio button.
19
+ *
20
+ * @cssproperty --toggle-item-color - Text color of an item that is not chosen. Read by the base
21
+ * layer, which styles the `item` part.
22
+ * @cssproperty --toggle-item-color-selected - Text color of the chosen item, and of each pressed
23
+ * item in a group that allows several.
24
+ * @cssproperty --toggle-item-padding-inline - Space either side of an item's label.
19
25
  */
20
26
  export declare class HelixToggle extends HelixHeadlessToggle {
21
27
  static styles: CSSResultGroup;
@@ -18,8 +18,12 @@ display: inline-flex;
18
18
 
19
19
  [part="toolbar"] {
20
20
  align-items: center;
21
+ background-color: var(--toolbar-background-color, transparent);
22
+ border: var(--toolbar-border-width, 0) solid var(--toolbar-border-color, transparent);
23
+ border-radius: var(--toolbar-radius, var(--helix-radii-none));
21
24
  display: flex;
22
25
  gap: var(--toolbar-gap, var(--helix-space-2xs));
26
+ padding: var(--toolbar-padding, var(--helix-space-none));
23
27
  }
24
28
 
25
29
  :host([orientation="vertical"]) [part="toolbar"] {
@@ -17,7 +17,12 @@ import type { CSSResultGroup } from 'lit';
17
17
  *
18
18
  * @csspart toolbar - The toolbar container.
19
19
  *
20
+ * @cssproperty --toolbar-background-color - The fill behind the controls. Transparent unless set.
21
+ * @cssproperty --toolbar-border-color - The color of the toolbar's edge, once it has a width.
22
+ * @cssproperty --toolbar-border-width - The width of the toolbar's edge. None unless set.
20
23
  * @cssproperty --toolbar-gap - The space between controls.
24
+ * @cssproperty --toolbar-padding - The space between the toolbar's edge and its controls.
25
+ * @cssproperty --toolbar-radius - The corner radius of the toolbar's fill.
21
26
  */
22
27
  export declare class HelixToolbar extends HelixHeadlessToolbar {
23
28
  static styles: CSSResultGroup;
@@ -11,10 +11,10 @@ gap: var(--helix-space-2xs);
11
11
 
12
12
  background-color: var(--tooltip-background-color, var(--helix-color-surface-inverse));
13
13
  border: none;
14
- border-radius: var(--helix-radii-sm);
15
- color: var(--helix-color-foreground-inverse);
14
+ border-radius: var(--tooltip-radius, var(--helix-radii-sm));
15
+ color: var(--tooltip-color, var(--helix-color-foreground-inverse));
16
16
  font-family: var(--helix-font-sans);
17
- font-size: var(--helix-text-xs);
17
+ font-size: var(--tooltip-font-size, var(--helix-text-xs));
18
18
 
19
19
  font-weight: var(--helix-weight-regular);
20
20
  inline-size: max-content;
@@ -23,7 +23,7 @@ margin: var(--helix-space-none);
23
23
  max-inline-size: var(--tooltip-max-inline-size, 16rem);
24
24
 
25
25
  opacity: 0;
26
- padding: var(--helix-space-2xs) var(--helix-space-xs);
26
+ padding: var(--tooltip-padding, var(--helix-space-2xs) var(--helix-space-xs));
27
27
  position: fixed;
28
28
  scale: 0;
29
29
 
@@ -63,7 +63,7 @@ background-color: var(--tooltip-background-color, var(--helix-material-transluce
63
63
  :host([material="frosted"]) [part~="tooltip"],
64
64
  :host([material="glass"]) [part~="tooltip"] {
65
65
  border: var(--helix-border-thin) solid var(--helix-color-border);
66
- color: var(--helix-color-foreground);
66
+ color: var(--tooltip-color, var(--helix-color-foreground));
67
67
  }
68
68
 
69
69
  [part~="tooltip"][data-placement^="top"] {
@@ -20,7 +20,11 @@ import type { CSSResultGroup } from 'lit';
20
20
  * @cssproperty --tooltip-arrow-size - The size of the arrow on the bubble's edge.
21
21
  * @cssproperty --tooltip-backdrop - The blur behind a `frosted` or `glass` bubble.
22
22
  * @cssproperty --tooltip-background-color - The fill of the bubble.
23
+ * @cssproperty --tooltip-color - The color of the bubble's words.
24
+ * @cssproperty --tooltip-font-size - The size of the bubble's words.
23
25
  * @cssproperty --tooltip-max-inline-size - The widest the bubble grows before its text wraps.
26
+ * @cssproperty --tooltip-padding - The space between the bubble's edge and its words.
27
+ * @cssproperty --tooltip-radius - The bubble's corner radius.
24
28
  */
25
29
  export declare class HelixTooltip extends HelixHeadlessTooltip {
26
30
  /**