@fusion.dev/helix 0.23.0 → 0.24.1

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 (108) hide show
  1. package/custom-elements.json +65204 -38241
  2. package/dist/accordion/item/accordion-item.css.js +4 -0
  3. package/dist/announcement/root/announcement-root.css.js +26 -12
  4. package/dist/announcement/root/announcement-root.d.ts +17 -0
  5. package/dist/announcement/root/announcement-root.js +4 -0
  6. package/dist/app-header/root/app-header-root.css.js +6 -0
  7. package/dist/area-chart/index.d.ts +1 -0
  8. package/dist/area-chart/index.js +1 -0
  9. package/dist/area-chart/root/area-chart-root.css.d.ts +1 -0
  10. package/dist/area-chart/root/area-chart-root.css.js +97 -0
  11. package/dist/area-chart/root/area-chart-root.d.ts +38 -0
  12. package/dist/area-chart/root/area-chart-root.js +20 -0
  13. package/dist/bar-chart/root/bar-chart-root.css.js +0 -141
  14. package/dist/bar-chart/root/bar-chart-root.js +2 -1
  15. package/dist/chat/composer/chat-composer.css.js +4 -0
  16. package/dist/chat/message/chat-message.css.js +20 -0
  17. package/dist/chat/root/chat-root.css.js +26 -0
  18. package/dist/code-block/root/code-block-root.css.js +122 -0
  19. package/dist/code-block/root/code-block-root.d.ts +5 -0
  20. package/dist/data-table/root/data-table-root.css.js +21 -3
  21. package/dist/data-table/root/data-table-root.d.ts +1 -0
  22. package/dist/data-table/root/data-table-root.js +1 -0
  23. package/dist/description-list/index.d.ts +2 -0
  24. package/dist/description-list/index.js +2 -0
  25. package/dist/description-list/item/description-list-item.css.d.ts +1 -0
  26. package/dist/description-list/item/description-list-item.css.js +31 -0
  27. package/dist/description-list/item/description-list-item.d.ts +21 -0
  28. package/dist/description-list/item/description-list-item.js +16 -0
  29. package/dist/description-list/root/description-list-root.css.d.ts +1 -0
  30. package/dist/description-list/root/description-list-root.css.js +35 -0
  31. package/dist/description-list/root/description-list-root.d.ts +62 -0
  32. package/dist/description-list/root/description-list-root.js +23 -0
  33. package/dist/donut-chart/root/donut-chart-root.css.js +0 -138
  34. package/dist/donut-chart/root/donut-chart-root.js +2 -1
  35. package/dist/element-events.generated.js +36 -8
  36. package/dist/filter-input/chip/filter-chip.css.d.ts +1 -0
  37. package/dist/filter-input/chip/filter-chip.css.js +85 -0
  38. package/dist/filter-input/chip/filter-chip.d.ts +32 -0
  39. package/dist/filter-input/chip/filter-chip.js +16 -0
  40. package/dist/filter-input/field/filter-field.css.d.ts +1 -0
  41. package/dist/filter-input/field/filter-field.css.js +4 -0
  42. package/dist/filter-input/field/filter-field.d.ts +29 -0
  43. package/dist/filter-input/field/filter-field.js +16 -0
  44. package/dist/filter-input/index.d.ts +4 -0
  45. package/dist/filter-input/index.js +4 -0
  46. package/dist/filter-input/menu/filter-menu.css.d.ts +1 -0
  47. package/dist/filter-input/menu/filter-menu.css.js +4 -0
  48. package/dist/filter-input/menu/filter-menu.d.ts +33 -0
  49. package/dist/filter-input/menu/filter-menu.js +19 -0
  50. package/dist/filter-input/operator/filter-operator.css.d.ts +1 -0
  51. package/dist/filter-input/operator/filter-operator.css.js +4 -0
  52. package/dist/filter-input/operator/filter-operator.d.ts +27 -0
  53. package/dist/filter-input/operator/filter-operator.js +16 -0
  54. package/dist/filter-input/root/filter-input-root.css.js +25 -2
  55. package/dist/filter-input/root/filter-input-root.d.ts +3 -0
  56. package/dist/heatmap/root/heatmap-root.d.ts +1 -0
  57. package/dist/heatmap/root/heatmap-root.js +1 -0
  58. package/dist/index.d.ts +5 -0
  59. package/dist/index.js +5 -0
  60. package/dist/line-chart/root/line-chart-root.css.js +0 -138
  61. package/dist/line-chart/root/line-chart-root.js +2 -1
  62. package/dist/menu/item/menu-item.css.js +8 -2
  63. package/dist/menu/root/menu-root.css.js +4 -0
  64. package/dist/navigation/root/navigation-root.css.js +2 -1
  65. package/dist/notifications/group/notification-group.css.d.ts +1 -0
  66. package/dist/notifications/group/notification-group.css.js +61 -0
  67. package/dist/notifications/group/notification-group.d.ts +37 -0
  68. package/dist/notifications/group/notification-group.js +16 -0
  69. package/dist/notifications/index.d.ts +1 -0
  70. package/dist/notifications/index.js +1 -0
  71. package/dist/notifications/notification/notification.css.js +74 -8
  72. package/dist/notifications/notification/notification.d.ts +25 -0
  73. package/dist/notifications/notification/notification.js +5 -0
  74. package/dist/notifications/root/notifications-root.css.js +8 -0
  75. package/dist/object-inspector/index.d.ts +1 -0
  76. package/dist/object-inspector/index.js +1 -0
  77. package/dist/object-inspector/root/object-inspector-root.css.d.ts +1 -0
  78. package/dist/object-inspector/root/object-inspector-root.css.js +148 -0
  79. package/dist/object-inspector/root/object-inspector-root.d.ts +35 -0
  80. package/dist/object-inspector/root/object-inspector-root.js +18 -0
  81. package/dist/sandbox/root/sandbox-root.d.ts +4 -0
  82. package/dist/sandbox/status-bar/sandbox-status-bar.css.js +1 -1
  83. package/dist/sandbox/toolbar/sandbox-toolbar.css.js +7 -1
  84. package/dist/scatter-chart/index.d.ts +1 -0
  85. package/dist/scatter-chart/index.js +1 -0
  86. package/dist/scatter-chart/root/scatter-chart-root.css.d.ts +1 -0
  87. package/dist/scatter-chart/root/scatter-chart-root.css.js +138 -0
  88. package/dist/scatter-chart/root/scatter-chart-root.d.ts +38 -0
  89. package/dist/scatter-chart/root/scatter-chart-root.js +20 -0
  90. package/dist/shared/chart/tooltip.css.d.ts +1 -0
  91. package/dist/shared/chart/tooltip.css.js +141 -0
  92. package/dist/skip-link/index.d.ts +1 -0
  93. package/dist/skip-link/index.js +1 -0
  94. package/dist/skip-link/root/skip-link-root.css.d.ts +1 -0
  95. package/dist/skip-link/root/skip-link-root.css.js +36 -0
  96. package/dist/skip-link/root/skip-link-root.d.ts +42 -0
  97. package/dist/skip-link/root/skip-link-root.js +17 -0
  98. package/dist/steps/step/step.css.js +4 -0
  99. package/dist/table/column/table-column.css.js +66 -0
  100. package/dist/tag/root/tag-root.d.ts +10 -0
  101. package/dist/text/root/text-root.d.ts +26 -13
  102. package/dist/text/root/text-root.js +3 -0
  103. package/dist/toast/item/toast-item.css.js +9 -4
  104. package/dist/toolbar/root/toolbar-root.css.js +6 -0
  105. package/package.json +6 -6
  106. package/types/jsx.d.ts +4790 -698
  107. package/types/svelte.d.ts +11 -0
  108. package/types/vue.d.ts +907 -51
@@ -2,14 +2,20 @@ import { createSheet } from '@fusion.dev/helix-core';
2
2
  export const styles = createSheet(`:host {
3
3
 
4
4
  --helix-size-checkbox: var(--helix-size-checkbox-sm);
5
+ --helix-size-checkbox-loose: calc(var(--helix-size-checkbox) * 1.2);
6
+ --helix-size-checkbox-tight: calc(var(--helix-size-checkbox) * 0.8);
5
7
  --helix-size-icon: var(--helix-size-icon-sm);
8
+ --helix-size-icon-loose: calc(var(--helix-size-icon) * 1.2);
9
+ --helix-size-icon-tight: calc(var(--helix-size-icon) * 0.8);
6
10
  --helix-size-control: var(--helix-size-control-sm);
11
+ --helix-size-control-loose: calc(var(--helix-size-control) * 1.2);
12
+ --helix-size-control-tight: calc(var(--helix-size-control) * 0.8);
7
13
  --helix-size-tag: var(--helix-size-tag-sm);
8
14
 
9
15
  align-items: center;
10
16
  background-color: var(--helix-color-background);
11
17
 
12
- block-size: var(--sandbox-toolbar-size, var(--helix-size-control-loose));
18
+ block-size: var(--sandbox-toolbar-size, var(--helix-size-control-lg));
13
19
 
14
20
  border-block-end: var(--helix-border-thin) solid var(--helix-color-border);
15
21
  display: flex;
@@ -0,0 +1 @@
1
+ export * from './root/scatter-chart-root.js';
@@ -0,0 +1 @@
1
+ export * from './root/scatter-chart-root.js';
@@ -0,0 +1 @@
1
+ export declare const styles: import("lit").CSSResult;
@@ -0,0 +1,138 @@
1
+ import { createSheet } from '@fusion.dev/helix-core';
2
+ export const styles = createSheet(`:host {
3
+ column-gap: var(--helix-space-xs);
4
+ container-type: inline-size;
5
+ display: grid;
6
+ grid-template-areas:
7
+ "y-name ."
8
+ "y-axis plot"
9
+ ". x-axis"
10
+ ". x-name";
11
+ grid-template-columns: auto minmax(0, 1fr);
12
+ position: relative;
13
+ row-gap: var(--scatter-chart-gap, var(--helix-space-2xs));
14
+ }
15
+
16
+ [part="plot"] {
17
+ block-size: var(--scatter-chart-block-size, 14em);
18
+ cursor: crosshair;
19
+ grid-area: plot;
20
+ position: relative;
21
+ }
22
+
23
+ [part="plot"] svg {
24
+ block-size: 100%;
25
+ inline-size: 100%;
26
+ overflow: visible;
27
+ }
28
+
29
+ [part="gridline"] {
30
+ stroke: var(--scatter-chart-gridline-color, var(--helix-color-border));
31
+ stroke-width: var(--helix-border-thin);
32
+ vector-effect: non-scaling-stroke;
33
+ }
34
+
35
+ [part="point"] {
36
+ background-color: var(--chart-series);
37
+ block-size: var(--scatter-chart-point-size, 8px);
38
+ border-radius: var(--helix-radii-full);
39
+ box-shadow: 0 0 0 var(--helix-border-thin)
40
+ var(--scatter-chart-point-ring-color, var(--helix-color-background));
41
+ inline-size: var(--scatter-chart-point-size, 8px);
42
+ inset-block-start: var(--chart-point-y);
43
+ inset-inline-start: var(--chart-point-x);
44
+ opacity: var(--scatter-chart-point-opacity, 0.8);
45
+ pointer-events: none;
46
+ position: absolute;
47
+ transition:
48
+ inset-block-start var(--helix-duration-normal) var(--helix-easing-decelerate),
49
+ inset-inline-start var(--helix-duration-normal) var(--helix-easing-decelerate),
50
+ scale var(--helix-duration-fast) var(--helix-easing-decelerate);
51
+ translate: -50% -50%;
52
+ }
53
+
54
+ [part="point"][data-active] {
55
+ opacity: 1;
56
+ scale: 1.5;
57
+ }
58
+
59
+ [part="x-axis"],
60
+ [part="y-axis"] {
61
+ display: grid;
62
+ }
63
+
64
+ [part="x-axis"] {
65
+ grid-area: x-axis;
66
+ }
67
+
68
+ [part="y-axis"] {
69
+ grid-area: y-axis;
70
+ }
71
+
72
+ [part="x-tick"],
73
+ [part="y-tick"] {
74
+ color: var(--helix-color-foreground-muted);
75
+ font-size: var(--helix-text-xs);
76
+ font-variant-numeric: tabular-nums;
77
+ grid-area: 1 / 1;
78
+ line-height: 1;
79
+ position: relative;
80
+ white-space: nowrap;
81
+ }
82
+
83
+ [part="x-tick"] {
84
+ inset-inline-start: var(--chart-tick);
85
+ justify-self: start;
86
+ translate: -50% 0;
87
+ }
88
+
89
+ [part="y-tick"] {
90
+ align-self: start;
91
+ inset-block-start: var(--chart-tick);
92
+ justify-self: end;
93
+ translate: 0 -50%;
94
+ }
95
+
96
+ @container (inline-size < 30rem) {
97
+ [part="x-tick"]:nth-last-child(even) {
98
+ visibility: hidden;
99
+ }
100
+ }
101
+
102
+ [part="x-name"],
103
+ [part="y-name"] {
104
+ color: var(--helix-color-foreground-muted);
105
+ font-size: var(--helix-text-xs);
106
+ font-weight: var(--helix-weight-medium);
107
+ }
108
+
109
+ [part="x-name"] {
110
+ grid-area: x-name;
111
+ justify-self: end;
112
+ }
113
+
114
+ [part="y-name"] {
115
+ grid-area: y-name;
116
+ }
117
+
118
+ [part="summary"] {
119
+ block-size: 1px;
120
+ clip-path: inset(50%);
121
+ inline-size: 1px;
122
+ margin: var(--helix-space-none);
123
+ overflow: hidden;
124
+ position: absolute;
125
+ white-space: nowrap;
126
+ }
127
+
128
+ @starting-style {
129
+ [part="point"] {
130
+ opacity: 0;
131
+ }
132
+ }
133
+
134
+ @media print {
135
+ :host {
136
+ print-color-adjust: exact;
137
+ }
138
+ }`);
@@ -0,0 +1,38 @@
1
+ import { HelixHeadlessScatterChart } from '@fusion.dev/helix-headless/scatter-chart';
2
+ import type { CSSResultGroup } from 'lit';
3
+ import '../../tooltip/index.js';
4
+ /**
5
+ * @summary Whether two measures move together, one point per row.
6
+ *
7
+ * @description
8
+ * The points take the series palette in order, so a table with one column
9
+ * measured up is series one and a table with three is the first three.
10
+ *
11
+ * Each point has a ring of the page around it and stops short of opaque, so a
12
+ * dense cluster reads as dense rather than as one blot, and two points that
13
+ * overlap each keep their edge.
14
+ *
15
+ * @since 0.1.0
16
+ * @status experimental
17
+ * @category charts
18
+ * @groups charts
19
+ * @aliases Scatter Plot, XY Chart, Correlation Chart, Dot Plot
20
+ * @documentation https://helix.fusion.dev/components/scatter-chart
21
+ *
22
+ * @cssproperty --scatter-chart-block-size - Height of the drawing.
23
+ * @cssproperty --scatter-chart-gap - Space between the drawing and its axes.
24
+ * @cssproperty --scatter-chart-gridline-color - One rule across the plot, under `gridlines`.
25
+ * @cssproperty --scatter-chart-point-opacity - How much of its color a point shows, so a cluster reads darker where it is denser.
26
+ * @cssproperty --scatter-chart-point-ring-color - The ring around each point, which is the page's color unless the chart sits on something else.
27
+ * @cssproperty --scatter-chart-point-size - Diameter of a point.
28
+ */
29
+ export declare class HelixScatterChart extends HelixHeadlessScatterChart {
30
+ /** The styled tier, so the tooltip this renders is the styled one. */
31
+ static tier: string;
32
+ static styles: CSSResultGroup;
33
+ }
34
+ declare global {
35
+ interface HTMLElementTagNameMap {
36
+ 'helix-scatter-chart': HelixScatterChart;
37
+ }
38
+ }
@@ -0,0 +1,20 @@
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 { HelixHeadlessScatterChart } from '@fusion.dev/helix-headless/scatter-chart';
9
+ import { styles as seriesStyles } from '../../shared/chart/series.css.js';
10
+ import { styles as tooltipStyles } from '../../shared/chart/tooltip.css.js';
11
+ import { styles } from './scatter-chart-root.css.js';
12
+ import '../../tooltip/index.js';
13
+ let HelixScatterChart = class HelixScatterChart extends HelixHeadlessScatterChart {
14
+ static { this.tier = 'helix-'; }
15
+ static { this.styles = [seriesStyles, tooltipStyles, styles]; }
16
+ };
17
+ HelixScatterChart = __decorate([
18
+ customElement('helix-scatter-chart')
19
+ ], HelixScatterChart);
20
+ export { HelixScatterChart };
@@ -0,0 +1 @@
1
+ export declare const styles: import("lit").CSSResult;
@@ -0,0 +1,141 @@
1
+ import { createSheet } from '@fusion.dev/helix-core';
2
+ export const styles = createSheet(`[part="mark"] {
3
+ block-size: 1px;
4
+ inline-size: 1px;
5
+ pointer-events: none;
6
+ position: absolute;
7
+ }
8
+
9
+ [part="tooltip-anchor"] {
10
+ inset: 0;
11
+ pointer-events: none;
12
+ position: absolute;
13
+ }
14
+
15
+ [part="tooltip-label"] {
16
+ display: block;
17
+ font-weight: var(--helix-weight-medium);
18
+ margin-block-end: var(--helix-space-2xs);
19
+ }
20
+
21
+ [part="tooltip-cell"] {
22
+ align-items: baseline;
23
+ column-gap: var(--helix-space-sm);
24
+ display: grid;
25
+ grid-template-columns: 0.5em minmax(0, 1fr) auto;
26
+ }
27
+
28
+ [part="tooltip-name"] {
29
+ grid-column: 2;
30
+
31
+ opacity: 0.72;
32
+ }
33
+
34
+ [part="tooltip-value"] {
35
+ font-variant-numeric: tabular-nums;
36
+ grid-column: 3;
37
+ }
38
+
39
+ [part="tooltip-cell"][data-series]::before {
40
+ block-size: 0.5em;
41
+ border-radius: var(--helix-radii-full);
42
+ content: "";
43
+ grid-column: 1;
44
+ inline-size: 0.5em;
45
+ }
46
+
47
+ [part="tooltip-cell"][data-series="1"]::before {
48
+ background-color: var(--chart-series-1);
49
+ }
50
+
51
+ [part="tooltip-cell"][data-series="2"]::before {
52
+ background-color: var(--chart-series-2);
53
+ }
54
+
55
+ [part="tooltip-cell"][data-series="3"]::before {
56
+ background-color: var(--chart-series-3);
57
+ }
58
+
59
+ [part="tooltip-cell"][data-series="4"]::before {
60
+ background-color: var(--chart-series-4);
61
+ }
62
+
63
+ [part="tooltip-cell"][data-series="5"]::before {
64
+ background-color: var(--chart-series-5);
65
+ }
66
+
67
+ [part="tooltip-cell"][data-series="6"]::before {
68
+ background-color: var(--chart-series-6);
69
+ }
70
+
71
+ [part="tooltip-cell"][data-series="7"]::before {
72
+ background-color: var(--chart-series-7);
73
+ }
74
+
75
+ [part="tooltip-cell"][data-series="8"]::before {
76
+ background-color: var(--chart-series-8);
77
+ }
78
+
79
+ [part="tooltip-cell"][data-series="9"]::before {
80
+ background-color: var(--chart-series-9);
81
+ }
82
+
83
+ [part="tooltip-cell"][data-series="10"]::before {
84
+ background-color: var(--chart-series-10);
85
+ }
86
+
87
+ [part="tooltip-cell"][data-series="11"]::before {
88
+ background-color: var(--chart-series-11);
89
+ }
90
+
91
+ [part="tooltip-cell"][data-series="12"]::before {
92
+ background-color: var(--chart-series-12);
93
+ }
94
+
95
+ [part="tooltip-cell"][data-series="13"]::before {
96
+ background-color: var(--chart-series-13);
97
+ }
98
+
99
+ [part="tooltip-cell"][data-series="14"]::before {
100
+ background-color: var(--chart-series-14);
101
+ }
102
+
103
+ [part="tooltip-cell"][data-series="15"]::before {
104
+ background-color: var(--chart-series-15);
105
+ }
106
+
107
+ [part="tooltip-cell"][data-series="16"]::before {
108
+ background-color: var(--chart-series-16);
109
+ }
110
+
111
+ [part="tooltip-cell"][data-series="17"]::before {
112
+ background-color: var(--chart-series-17);
113
+ }
114
+
115
+ [part="tooltip-cell"][data-series="18"]::before {
116
+ background-color: var(--chart-series-18);
117
+ }
118
+
119
+ [part="tooltip-cell"][data-series="19"]::before {
120
+ background-color: var(--chart-series-19);
121
+ }
122
+
123
+ [part="tooltip-cell"][data-series="20"]::before {
124
+ background-color: var(--chart-series-20);
125
+ }
126
+
127
+ [part="tooltip-cell"][data-series="21"]::before {
128
+ background-color: var(--chart-series-21);
129
+ }
130
+
131
+ [part="tooltip-cell"][data-series="22"]::before {
132
+ background-color: var(--chart-series-22);
133
+ }
134
+
135
+ [part="tooltip-cell"][data-series="23"]::before {
136
+ background-color: var(--chart-series-23);
137
+ }
138
+
139
+ [part="tooltip-cell"][data-series="24"]::before {
140
+ background-color: var(--chart-series-24);
141
+ }`);
@@ -0,0 +1 @@
1
+ export { HelixSkipLink } from './root/skip-link-root.js';
@@ -0,0 +1 @@
1
+ export { HelixSkipLink } from './root/skip-link-root.js';
@@ -0,0 +1 @@
1
+ export declare const styles: import("lit").CSSResult;
@@ -0,0 +1,36 @@
1
+ import { createSheet } from '@fusion.dev/helix-core';
2
+ export const styles = createSheet(`:host {
3
+ display: block;
4
+ inset-block-start: var(--helix-space-sm);
5
+ inset-inline-start: var(--helix-space-sm);
6
+ position: fixed;
7
+ z-index: var(--helix-layer-overlay);
8
+ }
9
+
10
+ [part="link"] {
11
+ background-color: var(--helix-color-surface-inverse);
12
+ border: var(--skip-link-border-width, var(--helix-border-floating)) solid
13
+ var(--skip-link-border-color, var(--helix-color-border));
14
+ border-radius: var(--helix-radii-sm);
15
+ box-shadow: var(--skip-link-shadow, var(--helix-shadow-floating));
16
+ color: var(--helix-color-foreground-inverse);
17
+ display: inline-block;
18
+ font-family: var(--helix-font-sans);
19
+ font-size: var(--helix-text-sm);
20
+ font-weight: var(--helix-weight-medium);
21
+ line-height: var(--helix-leading-normal);
22
+ padding-block: var(--helix-space-sm);
23
+ padding-inline: var(--helix-space-md);
24
+ text-decoration: none;
25
+ }
26
+
27
+ [part="link"]:focus-visible {
28
+ outline: var(--helix-size-focus-ring) solid var(--helix-color-focus-ring);
29
+ outline-offset: var(--helix-size-focus-offset);
30
+ }
31
+
32
+ @media print {
33
+ :host {
34
+ display: none;
35
+ }
36
+ }`);
@@ -0,0 +1,42 @@
1
+ import { HelixHeadlessSkipLink } from '@fusion.dev/helix-headless/skip-link';
2
+ import type { CSSResultGroup } from 'lit';
3
+ /**
4
+ * @summary The first stop on a page, which moves the reader past everything
5
+ * repeated on every page.
6
+ *
7
+ * @description
8
+ * Out of sight until the keyboard reaches it, then in the corner of the
9
+ * viewport and impossible to miss. The hiding is the base layer's visually
10
+ * hidden helper, so the link stays in the tab order and in the accessibility
11
+ * tree while nobody can see it; `display: none` would have taken it out of
12
+ * both. The reveal is this sheet's.
13
+ *
14
+ * **Fixed to the viewport rather than placed where it sits in the document**,
15
+ * because it is first in the document and the page may already be scrolled
16
+ * when focus arrives, by a restored position or an anchor in the address. A
17
+ * link revealed above the top of the screen is revealed to nobody.
18
+ *
19
+ * Put it first inside `<body>`, before the header, and give the content
20
+ * region the id its `href` names.
21
+ *
22
+ * @since 0.1.0
23
+ * @status experimental
24
+ * @category navigation
25
+ * @documentation https://helix.fusion.dev/components/skip-link
26
+ *
27
+ * @cssproperty --skip-link-border-color - Color of the revealed link's edge.
28
+ * @cssproperty --skip-link-border-width - Width of the revealed link's edge. Follows
29
+ * `--helix-border-floating`, which is `0`, so the link is told apart by its lift unless a
30
+ * theme says otherwise.
31
+ * @cssproperty --skip-link-shadow - Lift under the revealed link. Follows
32
+ * `--helix-shadow-floating`, since it sits over whatever the page has at its corner.
33
+ */
34
+ export declare class HelixSkipLink extends HelixHeadlessSkipLink {
35
+ static tier: string;
36
+ static styles: CSSResultGroup;
37
+ }
38
+ declare global {
39
+ interface HTMLElementTagNameMap {
40
+ 'helix-skip-link': HelixSkipLink;
41
+ }
42
+ }
@@ -0,0 +1,17 @@
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 { HelixHeadlessSkipLink } from '@fusion.dev/helix-headless/skip-link';
9
+ import { styles } from './skip-link-root.css.js';
10
+ let HelixSkipLink = class HelixSkipLink extends HelixHeadlessSkipLink {
11
+ static { this.tier = 'helix-'; }
12
+ static { this.styles = styles; }
13
+ };
14
+ HelixSkipLink = __decorate([
15
+ customElement('helix-skip-link')
16
+ ], HelixSkipLink);
17
+ export { HelixSkipLink };
@@ -105,7 +105,11 @@ z-index: 1;
105
105
 
106
106
  [part="label"] {
107
107
  --helix-size-control: var(--helix-size-control-sm);
108
+ --helix-size-control-loose: calc(var(--helix-size-control) * 1.2);
109
+ --helix-size-control-tight: calc(var(--helix-size-control) * 0.8);
108
110
  --helix-size-icon: var(--helix-size-icon-sm);
111
+ --helix-size-icon-loose: calc(var(--helix-size-icon) * 1.2);
112
+ --helix-size-icon-tight: calc(var(--helix-size-icon) * 0.8);
109
113
  --helix-space-control: var(--_step-inset);
110
114
  --helix-text-control: var(--helix-text-sm);
111
115
  --button-foreground-color: var(--helix-color-foreground-muted);
@@ -17,4 +17,70 @@ font-weight: var(--helix-weight-semibold);
17
17
  min-block-size: var(--helix-size-control-loose);
18
18
  min-inline-size: 0;
19
19
  padding-inline-end: var(--helix-space-md);
20
+ }
21
+
22
+ [part="column"] {
23
+ position: relative;
24
+ }
25
+
26
+ [part="sort"] {
27
+ all: unset;
28
+ align-items: center;
29
+ box-sizing: border-box;
30
+ cursor: pointer;
31
+ display: inline-flex;
32
+ flex: 1;
33
+ gap: var(--helix-space-2xs);
34
+ min-inline-size: 0;
35
+ }
36
+
37
+ [part="sort"]:focus-visible,
38
+ [part="grip"]:focus-visible,
39
+ [part="resizer"]:focus-visible {
40
+ outline: var(--helix-size-focus-ring) solid var(--helix-color-focus-ring);
41
+ outline-offset: var(--helix-size-focus-offset);
42
+ }
43
+
44
+ [part="grip"] {
45
+ all: unset;
46
+ align-items: center;
47
+ border-radius: var(--helix-radii-sm);
48
+ box-sizing: border-box;
49
+ color: var(--helix-color-foreground-muted);
50
+ cursor: grab;
51
+ display: inline-flex;
52
+ flex: none;
53
+ margin-inline-end: var(--helix-space-2xs);
54
+ touch-action: none;
55
+ }
56
+
57
+ [part="grip"]:active {
58
+ cursor: grabbing;
59
+ }
60
+
61
+ [part="grip-mark"] {
62
+ block-size: 1em;
63
+ inline-size: 1em;
64
+ }
65
+
66
+ [part="resizer"] {
67
+ cursor: col-resize;
68
+ inline-size: var(--helix-space-sm);
69
+ inset-block: 0;
70
+ inset-inline-end: 0;
71
+ position: absolute;
72
+ touch-action: none;
73
+ }
74
+
75
+ [part="resizer"]::after {
76
+ border-inline-end: var(--helix-border-thin) solid transparent;
77
+ content: "";
78
+ inset-block: var(--helix-space-xs);
79
+ inset-inline-end: 0;
80
+ position: absolute;
81
+ }
82
+
83
+ [part="resizer"]:hover::after,
84
+ [part="resizer"]:focus-visible::after {
85
+ border-inline-end-color: var(--helix-color-foreground-muted);
20
86
  }`);
@@ -46,6 +46,16 @@ export declare class HelixTag extends HelixHeadlessTag {
46
46
  *
47
47
  * `tone` is semantic color, which is what these are and what `helix-text`
48
48
  * already calls them. `helix component`'s `axes` holds the vocabulary.
49
+ *
50
+ * **Not all seven are statuses, and `accent` is the one worth saying out
51
+ * loud**: it is the second emphasis, a rotation off the brand seed rather than
52
+ * a color of its own, so it stays in relation when somebody rethemes.
53
+ * `primary` is the seed itself. The four that are statuses are the four
54
+ * `HelixStatusTone` names, and those are the ones that would carry a glyph
55
+ * somewhere that draws one.
56
+ *
57
+ * `Badge` and `Announcement` take the same seven, all three being a mark that
58
+ * carries a meaning beside something else.
49
59
  */
50
60
  tone?: 'accent' | 'danger' | 'info' | 'neutral' | 'primary' | 'success' | 'warning';
51
61
  static styles: CSSResultGroup;
@@ -27,8 +27,9 @@ import type { CSSResultGroup } from 'lit';
27
27
  * the ramp is named, and a page built from it is consistent because there was
28
28
  * nothing else to choose.
29
29
  *
30
- * `tone` stays separate, because color carries state rather than typography.
31
- * Folding it in would mean `caption-danger` and `label-primary` and the rest of
30
+ * `tone` and `emphasis` stay separate, because color carries state rather than
31
+ * typography, and what a line means is not how loudly it says it. Folding
32
+ * either in would mean `caption-danger` and `label-muted` and the rest of the
32
33
  * cross product, which is the explosion a named ramp exists to prevent.
33
34
  *
34
35
  * @since 0.1.0
@@ -49,23 +50,35 @@ export declare class HelixText extends HelixElement {
49
50
  */
50
51
  as?: 'span' | 'p' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'strong' | 'em' | 'code' | 'label';
51
52
  /**
52
- * Color role. A separate axis from the type ramp, because color carries
53
- * state: folding it in would mean `caption-danger` and the rest of the cross
54
- * product.
53
+ * How loud the text is, beside what it means.
54
+ *
55
+ * `muted` is the quiet ink that still has to be read, and `subtle` the
56
+ * quieter one below it. Two axes because the test says so: a line can be a
57
+ * danger *and* quiet at once, and a muted danger is what a validation hint
58
+ * under a field is.
59
+ *
60
+ * **With a `tone`, both are that tone's one quiet ink**: the tone's hue at half
61
+ * its chroma, as readable as the tone. The readable range holds one quiet step
62
+ * and not two, measured in #124 for the neutral ink, and a tone has less room
63
+ * there rather than more, so `subtle` on a tone is the same ink as `muted`
64
+ * rather than a second one that could not be read.
65
+ *
66
+ * The resting case is the absent attribute, full strength.
67
+ */
68
+ emphasis?: 'muted' | 'subtle';
69
+ /**
70
+ * What the text means. A separate axis from the type ramp, because color
71
+ * carries state: folding it in would mean `caption-danger` and the rest of the
72
+ * cross product.
55
73
  *
56
74
  * **There is no `default` value**, and one must not be added: it would match
57
75
  * no rule and fall through to the inherited ink, reading as working while
58
76
  * saying nothing. The resting case is the absent attribute.
59
77
  *
60
- * **`muted` and `subtle` are weight rather than meaning and belong on
61
- * `emphasis`, which is why this is still off the registry.** Splitting them
62
- * out is blocked on the palette rather than on the rename: there is a quiet
63
- * step for the neutral ink and none for any other tone, so a muted danger has
64
- * nothing to be made of. `primary-subtle` is a tinted *ground* and not a
65
- * quiet ink. That is #141's to derive, and until it does, folding the two
66
- * halves apart would leave three of the four combinations unsayable.
78
+ * Weight is not a tone. How loud the text is belongs on `emphasis`, which is
79
+ * why `muted` and `subtle` moved there.
67
80
  */
68
- tone?: 'muted' | 'subtle' | 'primary' | 'danger';
81
+ tone?: 'accent' | 'danger' | 'info' | 'primary' | 'success' | 'warning';
69
82
  /**
70
83
  * Type treatment.
71
84
  *
@@ -32,6 +32,9 @@ let HelixText = class HelixText extends HelixElement {
32
32
  __decorate([
33
33
  property({ reflect: true })
34
34
  ], HelixText.prototype, "as", void 0);
35
+ __decorate([
36
+ property({ reflect: true })
37
+ ], HelixText.prototype, "emphasis", void 0);
35
38
  __decorate([
36
39
  property({ reflect: true })
37
40
  ], HelixText.prototype, "tone", void 0);