@scalewing/react 1.11.0 → 1.13.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 (66) hide show
  1. package/CHANGELOG.md +100 -0
  2. package/README.md +62 -7
  3. package/dist/anchored-position.d.ts +14 -6
  4. package/dist/anchored-position.js +10 -9
  5. package/dist/components/ActionMenu.d.ts +9 -1
  6. package/dist/components/ActionMenu.js +2 -2
  7. package/dist/components/Checkbox.js +2 -1
  8. package/dist/components/DateField.js +4 -2
  9. package/dist/components/DenominationGrid.d.ts +1 -1
  10. package/dist/components/DenominationGrid.js +4 -2
  11. package/dist/components/Field.js +9 -6
  12. package/dist/components/FieldErrorRegion.d.ts +14 -0
  13. package/dist/components/FieldErrorRegion.js +13 -0
  14. package/dist/components/FieldLabelText.d.ts +13 -0
  15. package/dist/components/FieldLabelText.js +12 -0
  16. package/dist/components/RadioGroup.d.ts +7 -0
  17. package/dist/components/RadioGroup.js +2 -1
  18. package/dist/components/SegmentedControl.d.ts +8 -0
  19. package/dist/components/SegmentedControl.js +16 -11
  20. package/dist/components/Select.d.ts +10 -1
  21. package/dist/components/Select.js +17 -86
  22. package/dist/components/Toast.d.ts +15 -1
  23. package/dist/components/Toast.js +15 -5
  24. package/dist/components/action-menu/ActionMenuList.d.ts +6 -4
  25. package/dist/components/action-menu/ActionMenuList.js +5 -4
  26. package/dist/components/denomination-grid/DenominationStrip.d.ts +2 -2
  27. package/dist/components/denomination-grid/DenominationStrip.js +13 -3
  28. package/dist/components/denomination-grid/DenominationTiles.js +27 -8
  29. package/dist/components/denomination-grid/types.d.ts +5 -0
  30. package/dist/components/select/SelectListbox.d.ts +20 -0
  31. package/dist/components/select/SelectListbox.js +16 -0
  32. package/dist/components/select/SelectValue.d.ts +15 -0
  33. package/dist/components/select/SelectValue.js +16 -0
  34. package/dist/components/select/use-select-list.d.ts +26 -0
  35. package/dist/components/select/use-select-list.js +85 -0
  36. package/dist/components/use-anchored-popover.d.ts +5 -2
  37. package/dist/components/use-anchored-popover.js +6 -5
  38. package/dist/css/chevron.d.ts +5 -0
  39. package/dist/css/chevron.js +9 -0
  40. package/dist/css/css-accordion.js +2 -5
  41. package/dist/css/css-button.d.ts +2 -0
  42. package/dist/css/css-button.js +28 -4
  43. package/dist/css/css-checkbox.js +1 -0
  44. package/dist/css/css-components.js +6 -0
  45. package/dist/css/css-data.js +17 -163
  46. package/dist/css/css-date-field.js +14 -6
  47. package/dist/css/css-denomination-grid.js +11 -1
  48. package/dist/css/css-document.d.ts +2 -0
  49. package/dist/css/css-document.js +35 -0
  50. package/dist/css/css-field.js +15 -2
  51. package/dist/css/css-filter-chips.js +8 -2
  52. package/dist/css/css-radio-group.js +12 -2
  53. package/dist/css/css-segmented.d.ts +2 -0
  54. package/dist/css/css-segmented.js +127 -0
  55. package/dist/css/css-select.js +57 -19
  56. package/dist/css/css-table.d.ts +2 -0
  57. package/dist/css/css-table.js +99 -0
  58. package/dist/css/css-toast.d.ts +2 -0
  59. package/dist/css/css-toast.js +42 -1
  60. package/dist/css/css-utilities.d.ts +2 -0
  61. package/dist/css/css-utilities.js +3 -1
  62. package/dist/css/stylesheet.js +4 -0
  63. package/dist/index.d.ts +3 -3
  64. package/dist/index.js +1 -1
  65. package/dist/styles.css +216 -48
  66. package/package.json +1 -1
@@ -0,0 +1,127 @@
1
+ import { trackInset, typographyVariants } from '@scalewing/tokens';
2
+ const body = typographyVariants.body;
3
+ const data = typographyVariants.data;
4
+ /*
5
+ * The control and its error message. The wrapper takes the track's place in
6
+ * the layout: inline beside text and stretched in a Stack (compact), block
7
+ * wide and stretched (filled), and the track fills it. The message has
8
+ * inline-size containment, so its length never widens the field by itself;
9
+ * while it has text the field is at least 24ch wide, capped at its
10
+ * container (the percentage resolves against the Stack or Inline, not the
11
+ * field), so a short track does not squeeze the message into a column. In
12
+ * a Stack that changes nothing; in an Inline the field grows and the row
13
+ * moves, while the track keeps its labels' width.
14
+ */
15
+ function fieldRules() {
16
+ return `.sw-segmented-field {
17
+ display: inline-flex;
18
+ flex-direction: column;
19
+ gap: var(--sw-space-1);
20
+ }
21
+
22
+ .sw-segmented-field-filled {
23
+ display: flex;
24
+ }
25
+
26
+ .sw-segmented-field > .sw-field-error {
27
+ contain: inline-size;
28
+ }
29
+
30
+ .sw-segmented-field:has(> .sw-field-error:not(:empty)) {
31
+ min-inline-size: min(100%, 24ch);
32
+ }
33
+
34
+ .sw-inline > .sw-segmented-field > .sw-segmented {
35
+ align-self: flex-start;
36
+ }
37
+
38
+ .sw-segmented[aria-invalid='true'] {
39
+ border-color: var(--sw-color-danger);
40
+ }
41
+
42
+ @media (forced-colors: active) {
43
+ .sw-segmented[aria-invalid='true'] { border-color: Mark; }
44
+ }`;
45
+ }
46
+ export function cssSegmentedClasses() {
47
+ return `${fieldRules()}
48
+
49
+ .sw-segmented {
50
+ background: var(--sw-glass-fill);
51
+ border: 1px solid var(--sw-glass-border);
52
+ border-radius: var(--sw-radius-pill);
53
+ box-sizing: border-box;
54
+ display: inline-flex;
55
+ gap: ${trackInset}px;
56
+ padding: ${trackInset}px;
57
+ }
58
+
59
+ .sw-segmented-item {
60
+ appearance: none;
61
+ background: transparent;
62
+ border: 0;
63
+ border-radius: var(--sw-radius-pill);
64
+ color: var(--sw-color-muted);
65
+ cursor: pointer;
66
+ font-family: var(--sw-font-sans);
67
+ font-size: ${data.fontSize}px;
68
+ font-weight: 600;
69
+ letter-spacing: ${data.letterSpacing}px;
70
+ line-height: ${data.lineHeight}px;
71
+ min-height: var(--sw-control-xs-min-height);
72
+ padding-inline: var(--sw-control-xs-padding-inline);
73
+ }
74
+
75
+ .sw-segmented-item:focus-visible {
76
+ outline: var(--sw-focus-ring-width) solid var(--sw-color-accent);
77
+ outline-offset: var(--sw-focus-ring-offset);
78
+ }
79
+
80
+ .sw-segmented-item-selected {
81
+ background: var(--sw-color-surface);
82
+ color: var(--sw-color-text);
83
+ }
84
+
85
+ .sw-segmented-filled {
86
+ display: grid;
87
+ grid-auto-columns: minmax(0, 1fr);
88
+ grid-auto-flow: column;
89
+ }
90
+
91
+ .sw-segmented-filled .sw-segmented-item {
92
+ align-items: center;
93
+ color: var(--sw-color-text);
94
+ display: inline-flex;
95
+ font-size: ${body.fontSize}px;
96
+ justify-content: center;
97
+ letter-spacing: ${body.letterSpacing}px;
98
+ line-height: ${body.lineHeight}px;
99
+ min-height: var(--sw-control-md-min-height);
100
+ min-width: 0;
101
+ padding-inline: var(--sw-control-md-padding-inline);
102
+ }
103
+
104
+ .sw-segmented-filled .sw-segmented-item-selected {
105
+ background: var(--sw-color-accent);
106
+ color: var(--sw-color-onAccent);
107
+ }
108
+
109
+ .sw-segmented-disabled {
110
+ opacity: var(--sw-disabled-opacity);
111
+ }
112
+
113
+ .sw-segmented-item:disabled {
114
+ cursor: not-allowed;
115
+ }`;
116
+ }
117
+ export function segmentedClassCatalog() {
118
+ return [
119
+ 'sw-segmented-field',
120
+ 'sw-segmented-field-filled',
121
+ 'sw-segmented',
122
+ 'sw-segmented-item',
123
+ 'sw-segmented-item-selected',
124
+ 'sw-segmented-filled',
125
+ 'sw-segmented-disabled',
126
+ ];
127
+ }
@@ -1,13 +1,8 @@
1
1
  import { typographyVariants } from '@scalewing/tokens';
2
+ import { chevronStroke } from './chevron.js';
2
3
  import { zIndex } from './stacking.js';
3
4
  const caption = typographyVariants.caption;
4
5
  const label = typographyVariants.label;
5
- const chevronImage = `background-image:
6
- linear-gradient(45deg, transparent 50%, var(--sw-color-muted) 50%),
7
- linear-gradient(135deg, var(--sw-color-muted) 50%, transparent 50%);
8
- background-repeat: no-repeat;
9
- background-size: var(--sw-space-1) var(--sw-space-1),
10
- var(--sw-space-1) var(--sw-space-1);`;
11
6
  export function cssSelectClasses() {
12
7
  return `.sw-select {
13
8
  max-width: 100%;
@@ -19,13 +14,10 @@ export function cssSelectClasses() {
19
14
  }
20
15
 
21
16
  .sw-select-trigger {
17
+ align-items: center;
22
18
  appearance: none;
23
19
  -webkit-appearance: none;
24
20
  background-color: var(--sw-glass-fill);
25
- ${chevronImage}
26
- background-position:
27
- calc(100% - var(--sw-space-4)) calc(50% - 1px),
28
- calc(100% - calc(var(--sw-space-4) - var(--sw-space-1))) calc(50% - 1px);
29
21
  border: 1px solid var(--sw-color-border);
30
22
  border-radius: var(--sw-radius-sm);
31
23
  box-sizing: border-box;
@@ -34,19 +26,60 @@ export function cssSelectClasses() {
34
26
  display: inline-flex;
35
27
  font-family: inherit;
36
28
  font-size: inherit;
29
+ gap: var(--sw-space-3);
37
30
  letter-spacing: inherit;
38
31
  line-height: inherit;
39
32
  margin: 0;
33
+ max-width: 100%;
40
34
  min-height: var(--sw-control-md-min-height);
41
35
  padding-block: 0;
42
36
  padding-inline: var(--sw-control-md-padding-inline);
43
- padding-inline-end: calc(
44
- var(--sw-control-md-padding-inline) + var(--sw-space-5)
45
- );
46
37
  text-align: start;
38
+ }
39
+
40
+ /* The chevron Accordion uses, pointing down, centred on the text. */
41
+ .sw-select-trigger::after {
42
+ ${chevronStroke}
43
+ content: '';
44
+ flex: none;
45
+ transform: translateY(-25%) rotate(45deg);
46
+ }
47
+
48
+ /*
49
+ * The current label and a hidden copy of every option's label share one grid
50
+ * cell, so the trigger is as wide as the longest option and keeps that width
51
+ * when the value changes; past the available width the label ellipsizes.
52
+ */
53
+ .sw-select-value {
54
+ display: grid;
55
+ flex: 1 1 auto;
56
+ min-width: 0;
57
+ }
58
+
59
+ .sw-select-value > * {
60
+ grid-area: 1 / 1;
61
+ min-width: 0;
62
+ overflow: hidden;
63
+ text-overflow: ellipsis;
47
64
  white-space: nowrap;
48
65
  }
49
66
 
67
+ .sw-select-value-sizer {
68
+ visibility: hidden;
69
+ }
70
+
71
+ .sw-select-placeholder {
72
+ color: var(--sw-color-muted);
73
+ }
74
+
75
+ .sw-select-invalid .sw-select-trigger {
76
+ border-color: var(--sw-color-danger);
77
+ }
78
+
79
+ .sw-select-value-sizer::before {
80
+ content: attr(data-label);
81
+ }
82
+
50
83
  .sw-select-trigger:focus {
51
84
  box-shadow: none;
52
85
  outline: none;
@@ -58,17 +91,17 @@ export function cssSelectClasses() {
58
91
  }
59
92
 
60
93
  .sw-select-xs .sw-select-trigger {
61
- background-position:
62
- calc(100% - var(--sw-space-3)) calc(50% - 1px),
63
- calc(100% - calc(var(--sw-space-3) - var(--sw-space-1))) calc(50% - 1px);
64
94
  font-size: ${caption.fontSize}px;
95
+ gap: var(--sw-space-2);
65
96
  letter-spacing: ${caption.letterSpacing}px;
66
97
  line-height: ${caption.lineHeight}px;
67
98
  min-height: var(--sw-control-xs-min-height);
68
99
  padding-inline: var(--sw-control-xs-padding-inline);
69
- padding-inline-end: calc(
70
- var(--sw-control-xs-padding-inline) + var(--sw-space-5)
71
- );
100
+ }
101
+
102
+ @media (forced-colors: active) {
103
+ .sw-select-trigger::after { border-color: CanvasText; }
104
+ .sw-select-invalid .sw-select-trigger { border-color: Mark; }
72
105
  }
73
106
 
74
107
  .sw-select-list {
@@ -128,6 +161,11 @@ export function selectClassCatalog() {
128
161
  'sw-select-xs',
129
162
  'sw-select-control',
130
163
  'sw-select-trigger',
164
+ 'sw-select-value',
165
+ 'sw-select-value-text',
166
+ 'sw-select-value-sizer',
167
+ 'sw-select-placeholder',
168
+ 'sw-select-invalid',
131
169
  'sw-select-list',
132
170
  'sw-select-option',
133
171
  'sw-select-action',
@@ -0,0 +1,2 @@
1
+ export declare function cssTableClasses(): string;
2
+ export declare function tableClassCatalog(): string[];
@@ -0,0 +1,99 @@
1
+ import { typographyVariants } from '@scalewing/tokens';
2
+ import { scrollRegionRules } from './css-scroll-region.js';
3
+ import { zIndex } from './stacking.js';
4
+ const caption = typographyVariants.caption;
5
+ /*
6
+ * A selected row is marked by an accent bar at its inline start and nothing
7
+ * else: no fill, so text, muted text and accent text (ghost buttons, links)
8
+ * keep the contrast they have on the table's own surface. (A subtle tint
9
+ * dropped accent text under 4.5:1 in several palettes.) The bar is the first
10
+ * cell's ::before, absolutely placed in the cell's own padding, so it takes
11
+ * no layout space and no column moves when a row is picked. It is a border,
12
+ * not a fill, so forced colors keep it, drawn in the system highlight.
13
+ */
14
+ function selectedRowRules() {
15
+ return `.sw-table-row-selected > :first-child {
16
+ position: relative;
17
+ }
18
+
19
+ .sw-table-row-selected > :first-child::before {
20
+ border-inline-start: var(--sw-space-1) solid var(--sw-color-accent);
21
+ content: '';
22
+ inset-block: 0;
23
+ inset-inline-start: 0;
24
+ pointer-events: none;
25
+ position: absolute;
26
+ }
27
+
28
+ @media (forced-colors: active) {
29
+ .sw-table-row-selected > :first-child::before { border-color: Highlight; }
30
+ }`;
31
+ }
32
+ export function cssTableClasses() {
33
+ return `${scrollRegionRules('.sw-table-wrap')}
34
+
35
+ .sw-table {
36
+ border-collapse: collapse;
37
+ width: 100%;
38
+ }
39
+
40
+ .sw-table th,
41
+ .sw-table td {
42
+ border-bottom: 1px solid var(--sw-color-border);
43
+ padding: var(--sw-space-2) var(--sw-space-3);
44
+ text-align: start;
45
+ vertical-align: middle;
46
+ }
47
+
48
+ .sw-table th {
49
+ color: var(--sw-color-muted);
50
+ font-family: var(--sw-font-sans);
51
+ font-size: ${caption.fontSize}px;
52
+ font-weight: 600;
53
+ letter-spacing: ${caption.letterSpacing}px;
54
+ line-height: ${caption.lineHeight}px;
55
+ }
56
+
57
+ /* Descendant form outranks .sw-table th / .sw-table td, which set text-align: start. */
58
+ .sw-table .sw-table-end {
59
+ text-align: end;
60
+ }
61
+
62
+ .sw-table .sw-table-numeric {
63
+ font-variant-numeric: tabular-nums;
64
+ text-align: end;
65
+ }
66
+
67
+ .sw-table-clip {
68
+ max-width: 0;
69
+ overflow: hidden;
70
+ }
71
+
72
+ .sw-table-sticky thead th {
73
+ background: var(--sw-glass-fill);
74
+ backdrop-filter: blur(var(--sw-glass-blur)) saturate(var(--sw-glass-saturate));
75
+ -webkit-backdrop-filter: blur(var(--sw-glass-blur)) saturate(var(--sw-glass-saturate));
76
+ position: sticky;
77
+ top: 0;
78
+ ${zIndex('stickyCell')}
79
+ }
80
+
81
+ .sw-table-compact th,
82
+ .sw-table-compact td {
83
+ padding: var(--sw-space-1) var(--sw-space-2);
84
+ }
85
+
86
+ ${selectedRowRules()}`;
87
+ }
88
+ export function tableClassCatalog() {
89
+ return [
90
+ 'sw-table-wrap',
91
+ 'sw-table',
92
+ 'sw-table-end',
93
+ 'sw-table-numeric',
94
+ 'sw-table-clip',
95
+ 'sw-table-sticky',
96
+ 'sw-table-compact',
97
+ 'sw-table-row-selected',
98
+ ];
99
+ }
@@ -1,2 +1,4 @@
1
+ export declare const toastTones: readonly ["neutral", "success", "warning", "danger"];
2
+ export type ToastTone = (typeof toastTones)[number];
1
3
  export declare function cssToastClasses(): string;
2
4
  export declare function toastClassCatalog(): string[];
@@ -1,3 +1,14 @@
1
+ export const toastTones = ['neutral', 'success', 'warning', 'danger'];
2
+ const tintedTones = toastTones.filter((tone) => tone !== 'neutral');
3
+ /*
4
+ * A tone tints the toast's border and its icon; the message keeps the text
5
+ * color, so it reads the same in every tone and the word carries the meaning.
6
+ */
7
+ function toneRules() {
8
+ return tintedTones
9
+ .map((tone) => `.sw-toast-${tone} { --sw-toast-tone: var(--sw-color-${tone}); border-color: var(--sw-toast-tone); }`)
10
+ .join('\n');
11
+ }
1
12
  export function cssToastClasses() {
2
13
  return `.sw-toast {
3
14
  background: var(--sw-glass-fill);
@@ -19,6 +30,29 @@ export function cssToastClasses() {
19
30
  width: max-content;
20
31
  }
21
32
 
33
+ ${toneRules()}
34
+
35
+ .sw-toast-row {
36
+ align-items: center;
37
+ display: flex;
38
+ gap: var(--sw-space-2);
39
+ }
40
+
41
+ .sw-toast-icon {
42
+ color: var(--sw-toast-tone, currentColor);
43
+ display: inline-flex;
44
+ flex: none;
45
+ }
46
+
47
+ .sw-toast-body {
48
+ min-width: 0;
49
+ }
50
+
51
+ @media (forced-colors: active) {
52
+ .sw-toast { border-color: CanvasText; }
53
+ .sw-toast-icon { color: CanvasText; }
54
+ }
55
+
22
56
  .sw-toast:popover-open {
23
57
  animation: sw-toast-float var(--sw-motion-default) var(--sw-motion-easing);
24
58
  }
@@ -88,5 +122,12 @@ export function cssToastClasses() {
88
122
  }`;
89
123
  }
90
124
  export function toastClassCatalog() {
91
- return ['sw-toast', 'sw-toast-travel'];
125
+ return [
126
+ 'sw-toast',
127
+ ...tintedTones.map((tone) => `sw-toast-${tone}`),
128
+ 'sw-toast-row',
129
+ 'sw-toast-icon',
130
+ 'sw-toast-body',
131
+ 'sw-toast-travel',
132
+ ];
92
133
  }
@@ -1 +1,3 @@
1
+ /** The `sw-sr-only` declarations: kept for assistive technology, not drawn. */
2
+ export declare const visuallyHiddenDeclarations = "position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;";
1
3
  export declare function cssUtilities(): string;
@@ -1,5 +1,7 @@
1
1
  import { spacingSteps } from '@scalewing/tokens';
2
2
  import { gapAxes, layoutClassNames, paddingAxes, spacingClass, } from './spacing-classes.js';
3
+ /** The `sw-sr-only` declarations: kept for assistive technology, not drawn. */
4
+ export const visuallyHiddenDeclarations = 'position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;';
3
5
  function paddingRule(axis, step) {
4
6
  const className = spacingClass('padding', axis, step);
5
7
  const value = `var(--sw-space-${step})`;
@@ -39,7 +41,7 @@ const layoutRules = {
39
41
  'sw-grow': '.sw-grow { flex-grow: 1; }',
40
42
  'sw-full-width': '.sw-full-width { width: 100%; }',
41
43
  'sw-container': '.sw-container { width: 100%; max-width: var(--sw-container-max); margin-inline: auto; }',
42
- 'sw-sr-only': '.sw-sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }',
44
+ 'sw-sr-only': `.sw-sr-only { ${visuallyHiddenDeclarations} }`,
43
45
  'sw-align-start': '.sw-align-start { align-items: flex-start; }',
44
46
  'sw-align-center': '.sw-align-center { align-items: center; }',
45
47
  'sw-align-end': '.sw-align-end { align-items: flex-end; }',
@@ -24,6 +24,8 @@ import { cssComponentClasses } from './css-components.js';
24
24
  import { buttonClassCatalog } from './css-button.js';
25
25
  import { chartClassCatalog } from './css-chart.js';
26
26
  import { dataClassCatalog } from './css-data.js';
27
+ import { segmentedClassCatalog } from './css-segmented.js';
28
+ import { tableClassCatalog } from './css-table.js';
27
29
  import { chromeClassCatalog } from './css-chrome.js';
28
30
  import { dialogClassCatalog } from './css-dialog.js';
29
31
  import { selectClassCatalog } from './css-select.js';
@@ -49,6 +51,8 @@ export function utilityClassCatalog() {
49
51
  ...Object.keys(typographyVariants).map((name) => `sw-text-${name}`),
50
52
  ...buttonClassCatalog(),
51
53
  ...dataClassCatalog(),
54
+ ...segmentedClassCatalog(),
55
+ ...tableClassCatalog(),
52
56
  ...chartClassCatalog(),
53
57
  ...chromeClassCatalog(),
54
58
  ...dialogClassCatalog(),
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { ActionMenu, type ActionMenuItem, type ActionMenuProps, } from './components/ActionMenu.js';
1
+ export { ActionMenu, type ActionMenuAlign, type ActionMenuItem, type ActionMenuProps, } from './components/ActionMenu.js';
2
2
  export { ActionBar, type ActionBarProps } from './components/ActionBar.js';
3
3
  export { Accordion } from './components/Accordion.js';
4
4
  export type { AccordionProps, AccordionSize } from './components/Accordion.js';
@@ -20,8 +20,8 @@ export { Card, type CardProps, type CardVariant } from './components/Card.js';
20
20
  export { Dialog, type DialogProps, type DialogSize, } from './components/Dialog.js';
21
21
  export { StatTile, type StatTileEmphasis, type StatTileProps, type StatTileTone, statTileTones, } from './components/StatTile.js';
22
22
  export { TabPanel, type TabItem, type TabPanelProps, Tabs, type TabsProps, tabId, tabPanelId, } from './components/Tabs.js';
23
- export { Toast } from './components/Toast.js';
24
- export type { ToastProps } from './components/Toast.js';
23
+ export { Toast, toastTones } from './components/Toast.js';
24
+ export type { ToastProps, ToastTone } from './components/Toast.js';
25
25
  export { Field, type FieldProps, type FieldSize } from './components/Field.js';
26
26
  export { Inline, type InlineProps } from './components/Inline.js';
27
27
  export { Split } from './components/Split.js';
package/dist/index.js CHANGED
@@ -19,7 +19,7 @@ export { Card } from './components/Card.js';
19
19
  export { Dialog, } from './components/Dialog.js';
20
20
  export { StatTile, statTileTones, } from './components/StatTile.js';
21
21
  export { TabPanel, Tabs, tabId, tabPanelId, } from './components/Tabs.js';
22
- export { Toast } from './components/Toast.js';
22
+ export { Toast, toastTones } from './components/Toast.js';
23
23
  export { Field } from './components/Field.js';
24
24
  export { Inline } from './components/Inline.js';
25
25
  export { Split } from './components/Split.js';