@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
@@ -15,6 +15,10 @@ import type { CSSResultGroup } from 'lit';
15
15
  * @documentation https://fusion.dev/helix/components/textarea
16
16
  *
17
17
  * @cssproperty --textarea-background-color - Fill behind the text.
18
+ * @cssproperty --textarea-border-color - Edge of the field at rest. Hover, focus and an error still draw their own.
19
+ * @cssproperty --textarea-padding - Space between the edge of the field and the text.
20
+ * @cssproperty --textarea-radius - Corner radius of the field.
21
+ * @cssproperty --textarea-resize - Which way a reader can drag the field: `vertical` by default, `none`, `both` or `horizontal`. A field under `auto-grow` has nothing to drag.
18
22
  */
19
23
  export declare class HelixTextarea extends HelixHeadlessTextarea {
20
24
  static styles: CSSResultGroup;
@@ -90,6 +90,25 @@ flex-basis: 0;
90
90
  min-inline-size: var(--helix-size-icon-loose);
91
91
  }
92
92
 
93
+ [part="segments"] {
94
+ --_segment-focus-background-color: var(
95
+ --time-input-segment-focus-background-color,
96
+ var(--helix-color-primary)
97
+ );
98
+ --_segment-focus-color: var(
99
+ --time-input-segment-focus-color,
100
+ var(--helix-color-foreground-on-primary)
101
+ );
102
+ --_segment-literal-color: var(
103
+ --time-input-segment-literal-color,
104
+ var(--helix-color-foreground-muted)
105
+ );
106
+ --_segment-placeholder-color: var(
107
+ --time-input-segment-placeholder-color,
108
+ var(--helix-color-foreground-subtle)
109
+ );
110
+ }
111
+
93
112
  @media print {
94
113
  :host {
95
114
  print-color-adjust: exact;
@@ -25,6 +25,14 @@ import '../../time-picker/index.js';
25
25
  * @cssproperty --time-input-border-width - Width of the panel's edge. Defaults to
26
26
  * `--helix-border-floating`, which is `0`, so the panel stands out by its shadow unless
27
27
  * your theme sets a width.
28
+ * @cssproperty --time-input-segment-focus-background-color - The fill behind the
29
+ * segment with focus, in `segmented`. It follows `--helix-color-primary`.
30
+ * @cssproperty --time-input-segment-focus-color - The text of the segment with
31
+ * focus, in `segmented`.
32
+ * @cssproperty --time-input-segment-literal-color - The text the locale writes
33
+ * between two segments, in `segmented`.
34
+ * @cssproperty --time-input-segment-placeholder-color - The dashes of a segment
35
+ * with nothing in it, in `segmented`. It matches the text field's placeholder.
28
36
  * @cssproperty --time-input-shadow - Shadow under the panel. Defaults to
29
37
  * `--helix-shadow-floating`, because the panel can sit over any content.
30
38
  */
@@ -10,6 +10,7 @@ import '../../tag/index.js';
10
10
  import '../../time-picker/index.js';
11
11
  import { styles as fieldStyles } from '../../shared/field/field.css.js';
12
12
  import { styles as fieldFrameStyles } from '../../shared/field/field-frame.css.js';
13
+ import { styles as fieldSegmentsStyles } from '../../shared/field/field-segments.css.js';
13
14
  import { styles as fieldStackedStyles } from '../../shared/field/field-stacked.css.js';
14
15
  import { styles as floatingEntranceStyles } from '../../shared/floating/entrance.css.js';
15
16
  import { styles as floatingPanelStyles } from '../../shared/floating/panel.css.js';
@@ -21,6 +22,7 @@ let HelixTimeInput = class HelixTimeInput extends HelixHeadlessTimeInput {
21
22
  fieldStyles,
22
23
  fieldFrameStyles,
23
24
  fieldStackedStyles,
25
+ fieldSegmentsStyles,
24
26
  tagRowStyles,
25
27
  floatingPanelStyles,
26
28
  floatingEntranceStyles,
@@ -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);
@@ -150,6 +150,22 @@ outline: var(--helix-size-focus-ring) solid var(--helix-color-focus-ring);
150
150
  outline-offset: var(--helix-size-focus-offset);
151
151
  }
152
152
 
153
+ [part="item"],
154
+ [part="item"] > * {
155
+ touch-action: pan-y;
156
+ }
157
+
158
+ [part="content"] > slot {
159
+ display: block;
160
+ touch-action: pan-y;
161
+ }
162
+
163
+ [part="item"][data-swiping] {
164
+ transition: none;
165
+ translate: var(--toast-swipe-x, 0) 0;
166
+ user-select: none;
167
+ }
168
+
153
169
  [part="timer"] {
154
170
  animation: helix-toast-drain var(--toast-duration, 0ms) linear forwards;
155
171
  background-color: var(--_toast-severity, var(--helix-color-foreground-muted));
@@ -111,4 +111,20 @@ gap: var(--helix-space-sm);
111
111
 
112
112
  [part="row"] [part="track"] {
113
113
  flex: 1 1 auto;
114
+ }
115
+
116
+ :host([selection-mode="multiple"]) ::slotted(helix-toggle:state(pressed)) {
117
+ background-color: var(--toggle-group-indicator-color, var(--_indicator-surface));
118
+ border-radius: var(--_toggle-radius, var(--helix-radii-sm));
119
+ box-shadow: var(--helix-shadow-sm);
120
+ }
121
+
122
+ :host([orientation="vertical"]) [part="track"] {
123
+ align-items: stretch;
124
+ flex-direction: column;
125
+ flex-wrap: nowrap;
126
+ }
127
+
128
+ :host([orientation="vertical"]) ::slotted(helix-toggle) {
129
+ flex: 0 0 auto;
114
130
  }`);
@@ -18,8 +18,11 @@ display: inline-flex;
18
18
 
19
19
  [part="toolbar"] {
20
20
  align-items: center;
21
+ background-color: var(--toolbar-background-color, transparent);
22
+ border-radius: var(--toolbar-radius, var(--helix-radii-none));
21
23
  display: flex;
22
24
  gap: var(--toolbar-gap, var(--helix-space-2xs));
25
+ padding: var(--toolbar-padding, var(--helix-space-none));
23
26
  }
24
27
 
25
28
  :host([orientation="vertical"]) [part="toolbar"] {
@@ -17,7 +17,10 @@ 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.
20
21
  * @cssproperty --toolbar-gap - The space between controls.
22
+ * @cssproperty --toolbar-padding - The space between the toolbar's edge and its controls.
23
+ * @cssproperty --toolbar-radius - The corner radius of the toolbar's fill.
21
24
  */
22
25
  export declare class HelixToolbar extends HelixHeadlessToolbar {
23
26
  static styles: CSSResultGroup;
@@ -17,6 +17,14 @@ inline-size var(--helix-duration-normal) var(--helix-easing-standard);
17
17
  z-index: var(--helix-layer-overlay);
18
18
  }
19
19
 
20
+ [part="backdrop"] {
21
+ background-color: var(--tour-scrim-color, var(--helix-color-overlay));
22
+ inset: 0;
23
+ pointer-events: none;
24
+ position: fixed;
25
+ z-index: var(--helix-layer-overlay);
26
+ }
27
+
20
28
  @media print {
21
29
  :host {
22
30
  display: none;
@@ -31,6 +31,34 @@ outline: none;
31
31
  display: none;
32
32
  }
33
33
 
34
+ :host([type="dialog"]) [part="bubble"] {
35
+ margin: auto;
36
+ }
37
+
38
+ :host([type="floating"]) [part="bubble"] {
39
+ inset: auto;
40
+ inset-block-end: var(--helix-space-lg);
41
+ inset-inline-end: var(--helix-space-lg);
42
+ }
43
+
44
+ ::slotted([slot="heading"]) {
45
+ font-size: var(--helix-text-md);
46
+ font-weight: var(--helix-weight-semibold);
47
+ margin: var(--helix-space-none);
48
+ }
49
+
50
+ ::slotted([slot="description"]) {
51
+ color: var(--helix-color-foreground-muted);
52
+ font-size: var(--helix-text-sm);
53
+ margin: var(--helix-space-none);
54
+ }
55
+
56
+ [part="progress"] {
57
+ color: var(--helix-color-foreground-muted);
58
+ font-size: var(--helix-text-sm);
59
+ font-variant-numeric: tabular-nums;
60
+ }
61
+
34
62
  [part="content"] {
35
63
  display: flex;
36
64
  flex-direction: column;
@@ -75,4 +103,8 @@ border-left: var(--helix-border-thin) solid var(--helix-color-border);
75
103
  [part="bubble"][data-placement^="left"] [part~="arrow"] {
76
104
  border-right: var(--helix-border-thin) solid var(--helix-color-border);
77
105
  border-top: var(--helix-border-thin) solid var(--helix-color-border);
106
+ }
107
+
108
+ :host([type]) [part~="arrow"] {
109
+ display: none;
78
110
  }`);
@@ -166,4 +166,76 @@ grid-template-rows: 0fr;
166
166
  align-self: center;
167
167
  margin-inline-start: var(--tree-chevron-gap, var(--helix-space-none));
168
168
  order: var(--tree-chevron-order, 0);
169
+ }
170
+
171
+ slot[name="chevron"]::slotted(*) {
172
+ align-self: center;
173
+ block-size: var(--_tree-chevron);
174
+ color: var(--helix-color-foreground-subtle);
175
+ flex: 0 0 auto;
176
+ inline-size: var(--_tree-chevron);
177
+ margin-inline-start: var(--tree-chevron-gap, var(--helix-space-none));
178
+ order: var(--tree-chevron-order, 0);
179
+ transform: rotate(-90deg);
180
+ transition: transform var(--helix-duration-fast) var(--helix-easing-standard);
181
+ }
182
+
183
+ :host(:dir(rtl)) slot[name="chevron"]::slotted(*) {
184
+ transform: rotate(90deg);
185
+ }
186
+
187
+ :host(:state(open)) slot[name="chevron"]::slotted(*) {
188
+ transform: rotate(0deg);
189
+ }
190
+
191
+ [part~="checkbox"] {
192
+ align-self: center;
193
+ background-color: var(--tree-checkbox-background-color, var(--helix-color-background));
194
+ block-size: var(--tree-checkbox-size, var(--_tree-chevron));
195
+ border: var(--helix-border-thin) solid
196
+ var(--tree-checkbox-border-color, var(--helix-color-border));
197
+ border-radius: var(--helix-radii-sm);
198
+ color: var(--tree-checkbox-mark-color, var(--helix-color-foreground));
199
+ display: grid;
200
+ flex: 0 0 auto;
201
+ inline-size: var(--tree-checkbox-size, var(--_tree-chevron));
202
+ place-items: center;
203
+ }
204
+
205
+ [part~="checkbox-checked"],
206
+ [part~="checkbox-mixed"] {
207
+ border-color: var(--tree-checkbox-border-color, var(--helix-color-foreground));
208
+ }
209
+
210
+ [part~="checkbox"] svg {
211
+ block-size: 80%;
212
+ inline-size: 80%;
213
+ }
214
+
215
+ :host([disabled]) [part="row"] {
216
+ cursor: not-allowed;
217
+ opacity: 0.5;
218
+ }
219
+
220
+ :host([disabled]) [part="row"]:hover {
221
+ background-color: transparent;
222
+ color: var(--helix-color-foreground-muted);
223
+ }
224
+
225
+ :host(:state(loading)) [part="toggle"],
226
+ :host(:state(loading)) slot[name="chevron"]::slotted(*) {
227
+ animation: tree-loading var(--helix-duration-slow) var(--helix-easing-standard) infinite alternate;
228
+ }
229
+
230
+ @keyframes tree-loading {
231
+ to {
232
+ opacity: 0.3;
233
+ }
234
+ }
235
+
236
+ @media (prefers-reduced-motion: reduce) {
237
+ :host(:state(loading)) [part="toggle"],
238
+ :host(:state(loading)) slot[name="chevron"]::slotted(*) {
239
+ animation: none;
240
+ }
169
241
  }`);
@@ -16,16 +16,26 @@ import type { CSSResultGroup } from 'lit';
16
16
  * @documentation https://fusion.dev/helix/components/tree
17
17
  *
18
18
  * @slot - The item's label.
19
+ * @slot chevron - Replaces the expand and collapse mark of a branch. A slotted icon is sized and
20
+ * turned like the drawn one.
19
21
  * @slot children - Nested items, which make this a branch.
20
22
  *
21
23
  * @event {HelixSelectEvent} helix-select - Fired when the item is chosen, and cancelable. Canceling it changes nothing.
22
24
  *
25
+ * @csspart checkbox - The check mark's box, in a tree with `selection-mode="multiple"`.
26
+ * @csspart checkbox-checked - The check mark's box while the item is checked.
27
+ * @csspart checkbox-mixed - The check mark's box while some of a branch's items are checked.
23
28
  * @csspart group - The container for nested items.
24
29
  * @csspart item - The node, and the focus target.
25
30
  * @csspart label - The label text.
26
31
  * @csspart row - The clickable label row.
27
32
  * @csspart toggle - The expand and collapse control.
28
33
  *
34
+ * @cssproperty --tree-checkbox-background-color - Fill of the check mark's box.
35
+ * @cssproperty --tree-checkbox-border-color - Border of the check mark's box.
36
+ * @cssproperty --tree-checkbox-mark-color - Color of the check, and of the bar of a partly checked
37
+ * branch.
38
+ * @cssproperty --tree-checkbox-size - Size of the check mark's box. Follows the chevron's size.
29
39
  * @cssproperty --tree-chevron-size - Size of the chevron, and the gutter a leaf reserves.
30
40
  * @cssproperty --tree-gap - Space between rows.
31
41
  * @cssproperty --tree-indent - Indent added per level.
@@ -4,13 +4,13 @@ align-items: center;
4
4
  display: inline-flex;
5
5
  font-size: var(--helix-text-sm);
6
6
  font-weight: var(--helix-weight-medium);
7
- gap: var(--helix-space-2xs);
7
+ gap: var(--trend-gap, var(--helix-space-2xs));
8
8
  line-height: var(--helix-leading-tight);
9
9
  }
10
10
 
11
11
  :host {
12
12
 
13
- --_trend-color: var(--helix-color-foreground-muted);
13
+ --_trend-color: var(--trend-neutral-color, var(--helix-color-foreground-muted));
14
14
  color: var(--trend-color, var(--_trend-color));
15
15
  }
16
16
 
@@ -18,14 +18,21 @@ color: var(--trend-color, var(--_trend-color));
18
18
  --icon-size: var(--trend-icon-size, 1em);
19
19
  }
20
20
 
21
+ slot[name="icon"]::slotted(*) {
22
+ --icon-size: var(--trend-icon-size, 1em);
23
+
24
+ block-size: var(--trend-icon-size, 1em);
25
+ inline-size: var(--trend-icon-size, 1em);
26
+ }
27
+
21
28
  :host([direction="up"][good="up"]),
22
29
  :host([direction="down"][good="down"]) {
23
- --_trend-color: var(--helix-color-success);
30
+ --_trend-color: var(--trend-better-color, var(--helix-color-success));
24
31
  }
25
32
 
26
33
  :host([direction="up"][good="down"]),
27
34
  :host([direction="down"][good="up"]) {
28
- --_trend-color: var(--helix-color-danger);
35
+ --_trend-color: var(--trend-worse-color, var(--helix-color-danger));
29
36
  }
30
37
 
31
38
  [part="direction"] {
@@ -38,7 +45,7 @@ white-space: nowrap;
38
45
  }
39
46
 
40
47
  slot[name="label"] {
41
- color: var(--helix-color-foreground-muted);
48
+ color: var(--trend-label-color, var(--helix-color-foreground-muted));
42
49
  font-weight: var(--helix-weight-regular);
43
50
  }
44
51