@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.
- package/CHANGELOG.md +100 -0
- package/README.md +62 -7
- package/dist/anchored-position.d.ts +14 -6
- package/dist/anchored-position.js +10 -9
- package/dist/components/ActionMenu.d.ts +9 -1
- package/dist/components/ActionMenu.js +2 -2
- package/dist/components/Checkbox.js +2 -1
- package/dist/components/DateField.js +4 -2
- package/dist/components/DenominationGrid.d.ts +1 -1
- package/dist/components/DenominationGrid.js +4 -2
- package/dist/components/Field.js +9 -6
- package/dist/components/FieldErrorRegion.d.ts +14 -0
- package/dist/components/FieldErrorRegion.js +13 -0
- package/dist/components/FieldLabelText.d.ts +13 -0
- package/dist/components/FieldLabelText.js +12 -0
- package/dist/components/RadioGroup.d.ts +7 -0
- package/dist/components/RadioGroup.js +2 -1
- package/dist/components/SegmentedControl.d.ts +8 -0
- package/dist/components/SegmentedControl.js +16 -11
- package/dist/components/Select.d.ts +10 -1
- package/dist/components/Select.js +17 -86
- package/dist/components/Toast.d.ts +15 -1
- package/dist/components/Toast.js +15 -5
- package/dist/components/action-menu/ActionMenuList.d.ts +6 -4
- package/dist/components/action-menu/ActionMenuList.js +5 -4
- package/dist/components/denomination-grid/DenominationStrip.d.ts +2 -2
- package/dist/components/denomination-grid/DenominationStrip.js +13 -3
- package/dist/components/denomination-grid/DenominationTiles.js +27 -8
- package/dist/components/denomination-grid/types.d.ts +5 -0
- package/dist/components/select/SelectListbox.d.ts +20 -0
- package/dist/components/select/SelectListbox.js +16 -0
- package/dist/components/select/SelectValue.d.ts +15 -0
- package/dist/components/select/SelectValue.js +16 -0
- package/dist/components/select/use-select-list.d.ts +26 -0
- package/dist/components/select/use-select-list.js +85 -0
- package/dist/components/use-anchored-popover.d.ts +5 -2
- package/dist/components/use-anchored-popover.js +6 -5
- package/dist/css/chevron.d.ts +5 -0
- package/dist/css/chevron.js +9 -0
- package/dist/css/css-accordion.js +2 -5
- package/dist/css/css-button.d.ts +2 -0
- package/dist/css/css-button.js +28 -4
- package/dist/css/css-checkbox.js +1 -0
- package/dist/css/css-components.js +6 -0
- package/dist/css/css-data.js +17 -163
- package/dist/css/css-date-field.js +14 -6
- package/dist/css/css-denomination-grid.js +11 -1
- package/dist/css/css-document.d.ts +2 -0
- package/dist/css/css-document.js +35 -0
- package/dist/css/css-field.js +15 -2
- package/dist/css/css-filter-chips.js +8 -2
- package/dist/css/css-radio-group.js +12 -2
- package/dist/css/css-segmented.d.ts +2 -0
- package/dist/css/css-segmented.js +127 -0
- package/dist/css/css-select.js +57 -19
- package/dist/css/css-table.d.ts +2 -0
- package/dist/css/css-table.js +99 -0
- package/dist/css/css-toast.d.ts +2 -0
- package/dist/css/css-toast.js +42 -1
- package/dist/css/css-utilities.d.ts +2 -0
- package/dist/css/css-utilities.js +3 -1
- package/dist/css/stylesheet.js +4 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.js +1 -1
- package/dist/styles.css +216 -48
- 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
|
+
}
|
package/dist/css/css-select.js
CHANGED
|
@@ -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
|
-
|
|
70
|
-
|
|
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,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
|
+
}
|
package/dist/css/css-toast.d.ts
CHANGED
package/dist/css/css-toast.js
CHANGED
|
@@ -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 [
|
|
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':
|
|
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; }',
|
package/dist/css/stylesheet.js
CHANGED
|
@@ -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';
|