@crewlethq/ui 0.13.0 → 0.14.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/README.md +16 -0
- package/dist/AvatarPicker/index.js +1 -1
- package/dist/CommandPalette/index.js +2 -2
- package/dist/DataTable/index.js +2 -2
- package/dist/DataView/index.js +5 -5
- package/dist/DateTimePicker/index.js +1 -1
- package/dist/{DateTimePicker-4AZBTODT.css → DateTimePicker-NJ6XH2TE.css} +4 -3
- package/dist/ListInput/index.js +2 -2
- package/dist/Modal/index.js +1 -1
- package/dist/{Modal-3YJ2GG2T.css → Modal-RQAYGG4L.css} +1 -1
- package/dist/OrgTable/index.js +1 -1
- package/dist/Select/index.js +1 -1
- package/dist/{Select-XMZ44RWY.css → Select-2P7AWUE4.css} +32 -6
- package/dist/Switcher/index.js +3 -3
- package/dist/TagsInput/index.js +2 -2
- package/dist/TimeWindowPicker/index.js +2 -2
- package/dist/{TimeWindowPicker-GBF4JDFI.css → TimeWindowPicker-BZ5HHATU.css} +5 -4
- package/dist/Toaster/index.js +1 -1
- package/dist/{Toaster-KZ7YE2HA.css → Toaster-VZKISP2S.css} +80 -87
- package/dist/{chunk-WY2NLRZN.js → chunk-3VVKJ7AZ.js} +1 -1
- package/dist/{chunk-UZPHPW3Z.js → chunk-5IXMLWGW.js} +2 -2
- package/dist/{chunk-JDPAA2JU.js → chunk-AXNQCAFC.js} +1 -1
- package/dist/{chunk-LELD5KPA.js → chunk-CBZSSKH3.js} +5 -5
- package/dist/{chunk-B2CITO6R.js → chunk-IFM63LAG.js} +2 -2
- package/dist/{chunk-XFE5W2I4.js → chunk-IXUU5DLZ.js} +13 -3
- package/dist/{chunk-CF6DTETT.js → chunk-TFMJH2E6.js} +1 -1
- package/dist/{chunk-HKGS67VG.js → chunk-WYQOHFML.js} +1 -1
- package/dist/{chunk-S3IENQ3E.js → chunk-Y6NR7QJ3.js} +2 -2
- package/dist/generated/index.js +27 -27
- package/dist/index.js +27 -27
- package/dist/styles.css +127 -106
- package/package.json +3 -3
- package/dist/{chunk-LZP7FGT7.js → chunk-GARACZAH.js} +1 -1
- package/dist/{chunk-GG2QEZO2.js → chunk-JCO3SIST.js} +1 -1
package/README.md
CHANGED
|
@@ -198,6 +198,22 @@ places:
|
|
|
198
198
|
- A surface that pans or zooms dispatches `LAYER_REPOSITION_EVENT` on its host
|
|
199
199
|
when the content beneath it moves, and every panel anchored inside follows.
|
|
200
200
|
|
|
201
|
+
## Changes in 0.14.0
|
|
202
|
+
|
|
203
|
+
0.14.0 draws toasts as the first release did and quiets the pickers.
|
|
204
|
+
|
|
205
|
+
**Toasts are the first release's strip again**: a dark strip on `--color-surface-background` with the large shadow and the rim light, a 12px corner, a 20px mark, a slide in from the right, and the countdown as a wash behind the words that drains from the right. A variant spends its hue on its mark (the feedback ink step) and its wash (the feedback soft step) only, so a failure is a rose mark on a faint rose wash with a rose action, never red words on a red edge. Reduced motion keeps the strip still and draws no wash.
|
|
206
|
+
|
|
207
|
+
**A picker's boundary is a button's.** `Select`, `DateTimePicker` and `TimeWindowPicker` draw their trigger on `--color-border-strong`, as the secondary button does, and step to `--color-border-strong-hover` under the pointer. Text boxes, checkboxes and switches keep `--color-border-control` at 3:1, as do the typed boxes inside the pickers' panels.
|
|
208
|
+
|
|
209
|
+
**A `Select` list that leads with marks ends its rows with the tick**, so a swatch, an avatar or a glyph starts at the panel's edge. A list of words keeps the tick's column first.
|
|
210
|
+
|
|
211
|
+
**`--crewlet-select-menu-max-height` is the list's height.** The shared listbox cap of min(360px, 60vh) no longer overrides a taller panel; the panel keeps the 60vh cap on the window.
|
|
212
|
+
|
|
213
|
+
`@crewlethq/tokens`: Origin's dark `--color-border-default` is #2e2e30, and the comfortable density is 1.16 (it was 1.14), a shade larger at every gap, pad, row and control.
|
|
214
|
+
|
|
215
|
+
What to change: a test that reads a failure toast's red edge or red words, or a picker's control boundary, reads the new ones. Everything else is unchanged.
|
|
216
|
+
|
|
201
217
|
## Changes in 0.13.0
|
|
202
218
|
|
|
203
219
|
0.13.0 adds the parts the engine console's themes, project switcher, inbox and knowledge base are built with, and calls the light and dark choice Mode.
|
|
@@ -9,6 +9,6 @@ import '../chunk-CBOICT64.js';
|
|
|
9
9
|
import '../chunk-BHHIIK3M.js';
|
|
10
10
|
import '../chunk-7RPGY3JE.js';
|
|
11
11
|
import '../chunk-R25RGPUB.js';
|
|
12
|
-
import '../chunk-HI6Q2UXQ.js';
|
|
13
12
|
import '../chunk-BZFWDIV6.js';
|
|
13
|
+
import '../chunk-HI6Q2UXQ.js';
|
|
14
14
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { CommandPalette } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { CommandPalette } from '../chunk-WYQOHFML.js';
|
|
2
|
+
import '../chunk-TFMJH2E6.js';
|
|
3
3
|
import '../chunk-F73MC7EZ.js';
|
|
4
4
|
import '../chunk-SMBKXWML.js';
|
|
5
5
|
import '../chunk-FTEJPHBI.js';
|
package/dist/DataTable/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from '../chunk-
|
|
1
|
+
export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from '../chunk-3VVKJ7AZ.js';
|
|
2
2
|
import '../chunk-TFH6SYWB.js';
|
|
3
3
|
import '../chunk-EUCC37WY.js';
|
|
4
4
|
import '../chunk-YCTMKKRA.js';
|
|
5
|
+
import '../chunk-TFMJH2E6.js';
|
|
5
6
|
import '../chunk-5VNUYO76.js';
|
|
6
|
-
import '../chunk-CF6DTETT.js';
|
|
7
7
|
import '../chunk-OG6CL3EB.js';
|
|
8
8
|
import '../chunk-AV2DXAEL.js';
|
|
9
9
|
import '../chunk-PQADV6P6.js';
|
package/dist/DataView/index.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from '../chunk-
|
|
1
|
+
export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from '../chunk-5IXMLWGW.js';
|
|
2
2
|
import '../chunk-HOXGBLEY.js';
|
|
3
3
|
import '../chunk-3CZ7XAVY.js';
|
|
4
4
|
import '../chunk-PGRPNDWM.js';
|
|
5
|
-
import '../chunk-
|
|
5
|
+
import '../chunk-3VVKJ7AZ.js';
|
|
6
6
|
import '../chunk-TFH6SYWB.js';
|
|
7
7
|
import '../chunk-EUCC37WY.js';
|
|
8
|
-
import '../chunk-
|
|
8
|
+
import '../chunk-AXNQCAFC.js';
|
|
9
9
|
import '../chunk-YCTMKKRA.js';
|
|
10
|
-
import '../chunk-
|
|
11
|
-
import '../chunk-CF6DTETT.js';
|
|
10
|
+
import '../chunk-TFMJH2E6.js';
|
|
12
11
|
import '../chunk-F73MC7EZ.js';
|
|
13
12
|
import '../chunk-SMBKXWML.js';
|
|
14
13
|
import '../chunk-FTEJPHBI.js';
|
|
14
|
+
import '../chunk-5VNUYO76.js';
|
|
15
15
|
import '../chunk-GXQ3B46I.js';
|
|
16
16
|
import '../chunk-OG6CL3EB.js';
|
|
17
17
|
import '../chunk-AV2DXAEL.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from '../chunk-
|
|
1
|
+
export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from '../chunk-AXNQCAFC.js';
|
|
2
2
|
import '../chunk-GXQ3B46I.js';
|
|
3
3
|
import '../chunk-OG6CL3EB.js';
|
|
4
4
|
import '../chunk-4FQT6ZAY.js';
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* DateTimePicker: a Select-shaped trigger over a calendar dialog.
|
|
3
3
|
*
|
|
4
|
-
* The trigger borrows the Select's geometry
|
|
4
|
+
* The trigger borrows the Select's geometry and its button boundary
|
|
5
|
+
* (--color-border-strong; see Select.css) so a date box and a picker line
|
|
5
6
|
* up in the same toolbar; the panel holds the shared CalendarGrid, so the
|
|
6
7
|
* month looks and behaves the same here as in every other picker.
|
|
7
8
|
*/
|
|
@@ -17,7 +18,7 @@
|
|
|
17
18
|
height. */
|
|
18
19
|
padding: 0 var(--spacing-2) 0 var(--spacing-3);
|
|
19
20
|
background: var(--color-surface-subtle);
|
|
20
|
-
border: 1px solid var(--color-border-
|
|
21
|
+
border: 1px solid var(--color-border-strong);
|
|
21
22
|
border-radius: var(--radius-md);
|
|
22
23
|
color: var(--color-text-primary);
|
|
23
24
|
font-family: inherit;
|
|
@@ -34,7 +35,7 @@
|
|
|
34
35
|
}
|
|
35
36
|
|
|
36
37
|
.crewlet-datetime:hover:not(:disabled) {
|
|
37
|
-
border-color: var(--color-border-hover);
|
|
38
|
+
border-color: var(--color-border-strong-hover);
|
|
38
39
|
}
|
|
39
40
|
|
|
40
41
|
/*
|
package/dist/ListInput/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { ListInput } from '../chunk-
|
|
1
|
+
export { ListInput } from '../chunk-GARACZAH.js';
|
|
2
2
|
import '../chunk-SMBKXWML.js';
|
|
3
3
|
import '../chunk-FTEJPHBI.js';
|
|
4
4
|
import '../chunk-PQADV6P6.js';
|
|
5
|
-
import '../chunk-4FQT6ZAY.js';
|
|
6
5
|
import '../chunk-RSAQOKH3.js';
|
|
6
|
+
import '../chunk-4FQT6ZAY.js';
|
|
7
7
|
import '../chunk-7RPGY3JE.js';
|
|
8
8
|
import '../chunk-R25RGPUB.js';
|
|
9
9
|
import '../chunk-BZFWDIV6.js';
|
package/dist/Modal/index.js
CHANGED
|
@@ -289,7 +289,7 @@
|
|
|
289
289
|
* padding is only the least it keeps when a title wraps. It was the 16px step
|
|
290
290
|
* while the bar was 64px, which a full control step filled exactly; at 52px
|
|
291
291
|
* the same padding stood the head 12px past the bar behind it. At the 4px step
|
|
292
|
-
* the head is the bar's height with the control step at every density,
|
|
292
|
+
* the head is the bar's height with the control step at every density, 37.12px
|
|
293
293
|
* at comfortable included, and with a subtitle under the title.
|
|
294
294
|
*
|
|
295
295
|
* It used to be the tighter band, 49px with a close control alone, and the
|
package/dist/OrgTable/index.js
CHANGED
package/dist/Select/index.js
CHANGED
|
@@ -7,9 +7,12 @@
|
|
|
7
7
|
* into the nearest layer host and drawn with the shared listbox register, so
|
|
8
8
|
* a list of options looks the same wherever it is offered from.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
10
|
+
* THE BOUNDARY IS A BUTTON'S, --color-border-strong, the secondary button's
|
|
11
|
+
* and the date and time-window pickers'. A picker shows its value and its
|
|
12
|
+
* chevron, and those are what a reader knows it by. --color-border-control,
|
|
13
|
+
* at 3:1, is for the controls whose outline IS the control (a text box, a
|
|
14
|
+
* checkbox, a switch; see Input.css): on a picker it drew the one bright box
|
|
15
|
+
* in a row of buttons and switchers, brighter at rest than under the pointer.
|
|
13
16
|
*/
|
|
14
17
|
|
|
15
18
|
.crewlet-select {
|
|
@@ -27,7 +30,7 @@
|
|
|
27
30
|
width: 100%;
|
|
28
31
|
min-height: var(--size-control-md);
|
|
29
32
|
background-color: var(--color-surface-subtle);
|
|
30
|
-
border: 1px solid var(--color-border-
|
|
33
|
+
border: 1px solid var(--color-border-strong);
|
|
31
34
|
border-radius: var(--radius-md);
|
|
32
35
|
color: var(--color-text-primary);
|
|
33
36
|
/* The boundary is the only thing that moves. The ring is an outline, which
|
|
@@ -48,7 +51,7 @@
|
|
|
48
51
|
}
|
|
49
52
|
|
|
50
53
|
.crewlet-select:hover {
|
|
51
|
-
border-color: var(--color-border-hover);
|
|
54
|
+
border-color: var(--color-border-strong-hover);
|
|
52
55
|
}
|
|
53
56
|
|
|
54
57
|
/*
|
|
@@ -197,7 +200,7 @@ svg.crewlet-select__chevron {
|
|
|
197
200
|
display: flex;
|
|
198
201
|
flex-direction: column;
|
|
199
202
|
min-width: 0;
|
|
200
|
-
max-height: var(--crewlet-select-menu-max-height);
|
|
203
|
+
max-height: min(var(--crewlet-select-menu-max-height), 60vh);
|
|
201
204
|
/*
|
|
202
205
|
* THE PANEL IS THE PRODUCT'S SURFACE, on the panel hairline, at the panel
|
|
203
206
|
* corner. A list offered from a field is another panel over the one the
|
|
@@ -224,11 +227,25 @@ svg.crewlet-select__chevron {
|
|
|
224
227
|
position: absolute;
|
|
225
228
|
}
|
|
226
229
|
|
|
230
|
+
/*
|
|
231
|
+
* THE PANEL'S HEIGHT IS THE LIST'S. The shared listbox register caps a list
|
|
232
|
+
* at min(360px, 60vh) on its own, which inside this panel made
|
|
233
|
+
* `--crewlet-select-menu-max-height` a promise it could not keep past 360px:
|
|
234
|
+
* a taller panel drew the same short list and scrolled it. Here the list
|
|
235
|
+
* fills what the panel allows, and the panel keeps the register's cap on the
|
|
236
|
+
* window (see `.crewlet-select__menu`).
|
|
237
|
+
*/
|
|
227
238
|
.crewlet-select__list {
|
|
228
239
|
flex: 1;
|
|
229
240
|
min-height: 0;
|
|
230
241
|
}
|
|
231
242
|
|
|
243
|
+
/* Scoped to the panel for the weight, as the option rules below are: the
|
|
244
|
+
register's cap is one class, and the bundle orders equal weights by hash. */
|
|
245
|
+
.crewlet-select__menu .crewlet-select__list {
|
|
246
|
+
max-height: none;
|
|
247
|
+
}
|
|
248
|
+
|
|
232
249
|
.crewlet-select__group {
|
|
233
250
|
display: flex;
|
|
234
251
|
flex-direction: column;
|
|
@@ -290,6 +307,15 @@ svg.crewlet-select__chevron {
|
|
|
290
307
|
color: var(--color-brand-accent-ink);
|
|
291
308
|
}
|
|
292
309
|
|
|
310
|
+
/*
|
|
311
|
+
* AT THE ROW'S END in a list whose rows lead with a mark (see `tickAtEnd`),
|
|
312
|
+
* so the mark starts at the panel's edge. After a hint it follows the hint,
|
|
313
|
+
* which already takes the free space; without one it takes it itself.
|
|
314
|
+
*/
|
|
315
|
+
.crewlet-select__option-body + .crewlet-select__option-tick--end {
|
|
316
|
+
margin-left: auto;
|
|
317
|
+
}
|
|
318
|
+
|
|
293
319
|
.crewlet-select__option-body {
|
|
294
320
|
display: flex;
|
|
295
321
|
flex-direction: column;
|
package/dist/Switcher/index.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
export { Switcher } from '../chunk-
|
|
1
|
+
export { Switcher } from '../chunk-Y6NR7QJ3.js';
|
|
2
2
|
import '../chunk-W5J7R5EB.js';
|
|
3
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-TFMJH2E6.js';
|
|
4
4
|
import '../chunk-F73MC7EZ.js';
|
|
5
5
|
import '../chunk-FTEJPHBI.js';
|
|
6
6
|
import '../chunk-FYTIJM2T.js';
|
|
7
7
|
import '../chunk-OG6CL3EB.js';
|
|
8
8
|
import '../chunk-PQADV6P6.js';
|
|
9
|
+
import '../chunk-RSAQOKH3.js';
|
|
9
10
|
import '../chunk-IG75YMUN.js';
|
|
10
11
|
import '../chunk-4FQT6ZAY.js';
|
|
11
|
-
import '../chunk-RSAQOKH3.js';
|
|
12
12
|
import '../chunk-O2ZDZZS7.js';
|
|
13
13
|
import '../chunk-7RPGY3JE.js';
|
|
14
14
|
import '../chunk-R25RGPUB.js';
|
package/dist/TagsInput/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { TagsInput } from '../chunk-
|
|
1
|
+
export { TagsInput } from '../chunk-JCO3SIST.js';
|
|
2
2
|
import '../chunk-LOECRMHA.js';
|
|
3
3
|
import '../chunk-WIATRXEJ.js';
|
|
4
4
|
import '../chunk-F73MC7EZ.js';
|
|
5
|
-
import '../chunk-4FQT6ZAY.js';
|
|
6
5
|
import '../chunk-RSAQOKH3.js';
|
|
6
|
+
import '../chunk-4FQT6ZAY.js';
|
|
7
7
|
import '../chunk-7RPGY3JE.js';
|
|
8
8
|
import '../chunk-R25RGPUB.js';
|
|
9
9
|
import '../chunk-BZFWDIV6.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-IFM63LAG.js';
|
|
2
|
+
import '../chunk-IXUU5DLZ.js';
|
|
3
3
|
import '../chunk-F73MC7EZ.js';
|
|
4
4
|
import '../chunk-FTEJPHBI.js';
|
|
5
5
|
import '../chunk-GXQ3B46I.js';
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* TimeWindowPicker: one trigger over one panel.
|
|
3
3
|
*
|
|
4
|
-
* The trigger takes the same geometry as a Select and a
|
|
5
|
-
*
|
|
4
|
+
* The trigger takes the same geometry and button boundary as a Select and a
|
|
5
|
+
* DateTimePicker (--color-border-strong; see Select.css), so the three line
|
|
6
|
+
* up in a filter bar. The panel is a RAIL of named windows beside
|
|
6
7
|
* the calendars, rather than two tabs with one of them hidden: the windows a
|
|
7
8
|
* reader picks by name are the road, and the absolute range is the turning off
|
|
8
9
|
* it, so both are on screen at once and each shows what the other chose.
|
|
@@ -17,7 +18,7 @@
|
|
|
17
18
|
/* The side inset only: see DateTimePicker's own trigger. */
|
|
18
19
|
padding: 0 var(--spacing-2) 0 var(--spacing-3);
|
|
19
20
|
background: var(--color-surface-subtle);
|
|
20
|
-
border: 1px solid var(--color-border-
|
|
21
|
+
border: 1px solid var(--color-border-strong);
|
|
21
22
|
border-radius: var(--radius-md);
|
|
22
23
|
color: var(--color-text-primary);
|
|
23
24
|
font-family: inherit;
|
|
@@ -34,7 +35,7 @@
|
|
|
34
35
|
}
|
|
35
36
|
|
|
36
37
|
.crewlet-time-window:hover:not(:disabled) {
|
|
37
|
-
border-color: var(--color-border-hover);
|
|
38
|
+
border-color: var(--color-border-strong-hover);
|
|
38
39
|
}
|
|
39
40
|
|
|
40
41
|
/*
|
package/dist/Toaster/index.js
CHANGED
|
@@ -1,98 +1,98 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* The toast stack
|
|
2
|
+
* The toast stack, drawn as the first release drew it (24a60c3): a dark strip
|
|
3
|
+
* on the page's deepest ground with the large shadow and the rim light, a
|
|
4
|
+
* 12px corner, the variant said by its mark alone, never a flood of its hue,
|
|
5
|
+
* and the countdown as a wash behind the words that drains from the right.
|
|
3
6
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
+
* IN TOKENS RATHER THAN ITS LITERALS, so it follows every theme. The strip is
|
|
8
|
+
* --color-surface-background: the first release mixed the panel with black,
|
|
9
|
+
* which read as a dark bar on a light page, where its words measured 1.56:1.
|
|
10
|
+
* The marks are the feedback INK steps, the soft moss, amber and rose it drew,
|
|
11
|
+
* measured as text on every theme. The washes are the feedback SOFT steps.
|
|
7
12
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* the message is being read; a 2px bar at the edge says the same thing and
|
|
11
|
-
* touches no text at all. It is decoration either way: the dismissal is a
|
|
12
|
-
* timer now, so a reader who asks for reduced motion still gets the toast
|
|
13
|
-
* taken away.
|
|
13
|
+
* The wash is decoration: the dismissal is a timer, so a reader who asks for
|
|
14
|
+
* reduced motion gets no wash and still gets the toast taken away.
|
|
14
15
|
*/
|
|
15
|
-
|
|
16
16
|
.crewlet-toaster {
|
|
17
17
|
position: fixed;
|
|
18
18
|
z-index: var(--z-index-toast);
|
|
19
19
|
display: flex;
|
|
20
20
|
flex-direction: column;
|
|
21
|
-
gap: var(--spacing-2);
|
|
22
|
-
|
|
23
|
-
The strip is one or two lines of 13px text and an action; at 380 the
|
|
24
|
-
commonest failure message wrapped onto a third. */
|
|
25
|
-
width: min(420px, calc(100vw - var(--spacing-9)));
|
|
21
|
+
gap: calc(var(--spacing-2) + var(--spacing-1) / 2);
|
|
22
|
+
width: min(380px, calc(100vw - 2 * var(--spacing-6)));
|
|
26
23
|
/* The stack itself takes no presses, so the screen under it stays live
|
|
27
24
|
while nothing is up; each toast takes them back for its own strip. */
|
|
28
25
|
pointer-events: none;
|
|
29
26
|
}
|
|
30
27
|
|
|
31
28
|
.crewlet-toaster--bottom-right {
|
|
32
|
-
bottom: var(--spacing-
|
|
33
|
-
right: var(--spacing-
|
|
29
|
+
bottom: var(--spacing-6);
|
|
30
|
+
right: var(--spacing-6);
|
|
34
31
|
}
|
|
35
32
|
|
|
36
33
|
.crewlet-toaster--top-right {
|
|
37
|
-
top: var(--spacing-
|
|
38
|
-
right: var(--spacing-
|
|
34
|
+
top: var(--spacing-6);
|
|
35
|
+
right: var(--spacing-6);
|
|
39
36
|
}
|
|
40
37
|
|
|
41
38
|
.crewlet-toaster--bottom-left {
|
|
42
|
-
bottom: var(--spacing-
|
|
43
|
-
left: var(--spacing-
|
|
39
|
+
bottom: var(--spacing-6);
|
|
40
|
+
left: var(--spacing-6);
|
|
44
41
|
}
|
|
45
42
|
|
|
46
43
|
.crewlet-toaster--top-left {
|
|
47
|
-
top: var(--spacing-
|
|
48
|
-
left: var(--spacing-
|
|
44
|
+
top: var(--spacing-6);
|
|
45
|
+
left: var(--spacing-6);
|
|
49
46
|
}
|
|
50
47
|
|
|
51
48
|
.crewlet-toast {
|
|
49
|
+
/* The mark and the wash are the two places a variant spends its hue. */
|
|
52
50
|
--crewlet-toast-mark: var(--color-text-secondary);
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
*/
|
|
57
|
-
--crewlet-toast-line: var(--color-border-default);
|
|
58
|
-
--crewlet-toast-ink: var(--color-text-primary);
|
|
59
|
-
--crewlet-toast-ink-quiet: var(--color-text-secondary);
|
|
51
|
+
--crewlet-toast-wash: var(--color-surface-pressed);
|
|
52
|
+
/* 14px at the normal density, and the corner the dismiss sits in beside it. */
|
|
53
|
+
--crewlet-toast-inset: calc(var(--spacing-3) + var(--spacing-1) / 2);
|
|
60
54
|
|
|
61
55
|
pointer-events: auto;
|
|
62
56
|
position: relative;
|
|
63
57
|
display: flex;
|
|
64
58
|
align-items: flex-start;
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
box-shadow: var(--shadow-
|
|
75
|
-
color: var(--
|
|
59
|
+
gap: var(--spacing-3);
|
|
60
|
+
padding: var(--crewlet-toast-inset) calc(var(--spacing-7) + var(--spacing-1) * 1.5) var(--crewlet-toast-inset)
|
|
61
|
+
var(--crewlet-toast-inset);
|
|
62
|
+
background: var(--color-surface-background);
|
|
63
|
+
border: 1px solid var(--color-border-default);
|
|
64
|
+
border-radius: var(--radius-lg);
|
|
65
|
+
/* The large shadow and the rim light, both from tokens that are a shadow in
|
|
66
|
+
every palette: --shadow-hairline is `none` in light, and a `none` inside a
|
|
67
|
+
list drops the whole declaration. */
|
|
68
|
+
box-shadow: var(--shadow-xl), var(--shadow-rim-lit);
|
|
69
|
+
color: var(--color-text-primary);
|
|
76
70
|
font-family: var(--font-family-sans);
|
|
77
71
|
font-size: var(--font-size-compact);
|
|
78
|
-
line-height: var(--font-line-height-
|
|
72
|
+
line-height: var(--font-line-height-body);
|
|
79
73
|
letter-spacing: var(--font-letter-spacing-snug);
|
|
80
74
|
overflow: hidden;
|
|
81
|
-
animation: crewlet-toast-in var(--motion-duration-
|
|
75
|
+
animation: crewlet-toast-in var(--motion-duration-slow) var(--motion-easing-emphasized);
|
|
82
76
|
}
|
|
83
77
|
|
|
84
78
|
@keyframes crewlet-toast-in {
|
|
85
79
|
from {
|
|
86
80
|
opacity: 0;
|
|
87
|
-
transform:
|
|
81
|
+
transform: translateX(var(--spacing-4));
|
|
88
82
|
}
|
|
89
|
-
|
|
90
83
|
to {
|
|
91
84
|
opacity: 1;
|
|
92
|
-
transform:
|
|
85
|
+
transform: translateX(0);
|
|
93
86
|
}
|
|
94
87
|
}
|
|
95
88
|
|
|
89
|
+
/* The words sit over the wash: every child is raised, and the dismiss and the
|
|
90
|
+
wash below take their own places back. */
|
|
91
|
+
.crewlet-toast > * {
|
|
92
|
+
position: relative;
|
|
93
|
+
z-index: var(--z-index-raised);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
96
|
.crewlet-toast__icon {
|
|
97
97
|
display: inline-flex;
|
|
98
98
|
flex: none;
|
|
@@ -100,34 +100,26 @@
|
|
|
100
100
|
color: var(--crewlet-toast-mark);
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
-
/*
|
|
104
|
-
|
|
105
|
-
|
|
103
|
+
/*
|
|
104
|
+
* A VARIANT IS ITS MARK AND ITS WASH. The words stay in the strip's own inks
|
|
105
|
+
* and the edge stays the hairline, so a failure is a rose mark on a faint rose
|
|
106
|
+
* wash rather than a red strip: the outcome is said by the glyph and the title,
|
|
107
|
+
* and the sentence beside them is read in the ink every sentence is read in.
|
|
108
|
+
* Information is the neutral mark on the neutral wash.
|
|
109
|
+
*/
|
|
106
110
|
.crewlet-toast--success {
|
|
107
|
-
--crewlet-toast-mark: var(--color-feedback-success);
|
|
111
|
+
--crewlet-toast-mark: var(--color-feedback-success-ink);
|
|
112
|
+
--crewlet-toast-wash: var(--color-feedback-success-soft);
|
|
108
113
|
}
|
|
109
114
|
|
|
110
115
|
.crewlet-toast--warning {
|
|
111
|
-
--crewlet-toast-mark: var(--color-feedback-warning);
|
|
116
|
+
--crewlet-toast-mark: var(--color-feedback-warning-ink);
|
|
117
|
+
--crewlet-toast-wash: var(--color-feedback-warning-soft);
|
|
112
118
|
}
|
|
113
119
|
|
|
114
|
-
/*
|
|
115
|
-
* A FAILURE IS THE ONE TONED STRIP. It is the outcome that is news rather than
|
|
116
|
-
* confirmation and the one that does not take itself away, so the engine gives
|
|
117
|
-
* it the hue twice: the fill step on the edge, where 3:1 is the floor a
|
|
118
|
-
* boundary has to clear, and the INK step on every word, which is the measured
|
|
119
|
-
* text pair on this surface. Never the fill behind a word: that is the swap
|
|
120
|
-
* the whole soft-and-ink split exists to stop.
|
|
121
|
-
*/
|
|
122
120
|
.crewlet-toast--danger {
|
|
123
|
-
--crewlet-toast-mark: var(--color-feedback-danger);
|
|
124
|
-
--crewlet-toast-
|
|
125
|
-
--crewlet-toast-ink: var(--color-feedback-danger-ink);
|
|
126
|
-
--crewlet-toast-ink-quiet: var(--color-feedback-danger-ink);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
.crewlet-toast--info {
|
|
130
|
-
--crewlet-toast-mark: var(--color-feedback-info);
|
|
121
|
+
--crewlet-toast-mark: var(--color-feedback-danger-ink);
|
|
122
|
+
--crewlet-toast-wash: var(--color-feedback-danger-soft);
|
|
131
123
|
}
|
|
132
124
|
|
|
133
125
|
/* A usage limit notice is the application's own variant: it paints the glyph
|
|
@@ -149,12 +141,12 @@
|
|
|
149
141
|
}
|
|
150
142
|
|
|
151
143
|
.crewlet-toast__message {
|
|
152
|
-
color: var(--
|
|
144
|
+
color: var(--color-text-secondary);
|
|
153
145
|
overflow-wrap: anywhere;
|
|
154
146
|
}
|
|
155
147
|
|
|
156
148
|
.crewlet-toast__actions {
|
|
157
|
-
margin-top: var(--spacing-2);
|
|
149
|
+
margin-top: calc(var(--spacing-2) + var(--spacing-1) / 2);
|
|
158
150
|
display: flex;
|
|
159
151
|
gap: var(--spacing-2);
|
|
160
152
|
}
|
|
@@ -186,6 +178,7 @@
|
|
|
186
178
|
border-color: var(--color-brand-accent-hover);
|
|
187
179
|
}
|
|
188
180
|
|
|
181
|
+
/* A failure's one filled thing is the way out of it. */
|
|
189
182
|
.crewlet-toast--danger .crewlet-toast__action-btn,
|
|
190
183
|
.crewlet-toast--danger .crewlet-toast__action-link {
|
|
191
184
|
background: var(--color-feedback-danger);
|
|
@@ -207,8 +200,9 @@
|
|
|
207
200
|
}
|
|
208
201
|
|
|
209
202
|
/* The dismiss sits absolute in the corner so a multi-line message flows
|
|
210
|
-
under it rather than around it
|
|
211
|
-
|
|
203
|
+
under it rather than around it, and after the body in the document, so it
|
|
204
|
+
is drawn over the words at the same raised step. 24px square: the smallest
|
|
205
|
+
target WCAG 2.2 accepts. */
|
|
212
206
|
.crewlet-toast__dismiss {
|
|
213
207
|
position: absolute;
|
|
214
208
|
top: var(--spacing-2);
|
|
@@ -222,10 +216,7 @@
|
|
|
222
216
|
border: 0;
|
|
223
217
|
border-radius: var(--radius-sm);
|
|
224
218
|
background: transparent;
|
|
225
|
-
|
|
226
|
-
close on a failure is part of the failure rather than the one grey thing
|
|
227
|
-
inside it. */
|
|
228
|
-
color: var(--crewlet-toast-ink-quiet);
|
|
219
|
+
color: var(--color-text-tertiary);
|
|
229
220
|
cursor: pointer;
|
|
230
221
|
transition:
|
|
231
222
|
background var(--motion-duration-fast) var(--motion-easing-default),
|
|
@@ -233,25 +224,28 @@
|
|
|
233
224
|
}
|
|
234
225
|
|
|
235
226
|
.crewlet-toast__dismiss:hover {
|
|
236
|
-
background: var(--color-surface-
|
|
237
|
-
color: var(--
|
|
227
|
+
background: var(--color-surface-elevated);
|
|
228
|
+
color: var(--color-text-primary);
|
|
238
229
|
}
|
|
239
230
|
|
|
231
|
+
/*
|
|
232
|
+
* THE COUNTDOWN IS A WASH BEHIND THE WORDS, the variant's soft step over the
|
|
233
|
+
* whole strip, draining from the right as the time runs out. It sits under
|
|
234
|
+
* every raised child, and it is the timer's picture, not the timer.
|
|
235
|
+
*/
|
|
240
236
|
.crewlet-toast__progress {
|
|
241
237
|
position: absolute;
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
bottom: 0;
|
|
245
|
-
height: 2px;
|
|
238
|
+
inset: 0;
|
|
239
|
+
z-index: var(--z-index-base);
|
|
246
240
|
transform-origin: left center;
|
|
247
|
-
background: var(--crewlet-toast-
|
|
241
|
+
background: var(--crewlet-toast-wash);
|
|
248
242
|
pointer-events: none;
|
|
249
243
|
animation-name: crewlet-toast-drain;
|
|
250
244
|
animation-timing-function: linear;
|
|
251
245
|
animation-fill-mode: forwards;
|
|
252
246
|
}
|
|
253
247
|
|
|
254
|
-
/* Paused by the class rather than by :hover, so the
|
|
248
|
+
/* Paused by the class rather than by :hover, so the wash and the timer that
|
|
255
249
|
actually dismisses are stopped by the same event. */
|
|
256
250
|
.crewlet-toast__progress.is-paused {
|
|
257
251
|
animation-play-state: paused;
|
|
@@ -261,7 +255,6 @@
|
|
|
261
255
|
from {
|
|
262
256
|
transform: scaleX(1);
|
|
263
257
|
}
|
|
264
|
-
|
|
265
258
|
to {
|
|
266
259
|
transform: scaleX(0);
|
|
267
260
|
}
|
|
@@ -287,8 +280,8 @@
|
|
|
287
280
|
|
|
288
281
|
/*
|
|
289
282
|
* The strip still arrives and still goes; it just does not slide, and the
|
|
290
|
-
*
|
|
291
|
-
*
|
|
283
|
+
* wash is not drawn. The timer is untouched: a reader who asked for less
|
|
284
|
+
* motion did not ask to be left with a toast that never leaves.
|
|
292
285
|
*/
|
|
293
286
|
@media (prefers-reduced-motion: reduce) {
|
|
294
287
|
.crewlet-toast {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Menu } from './chunk-TFH6SYWB.js';
|
|
2
2
|
import { EmptyValue } from './chunk-EUCC37WY.js';
|
|
3
3
|
import { Checkbox } from './chunk-YCTMKKRA.js';
|
|
4
|
+
import { Modal } from './chunk-TFMJH2E6.js';
|
|
4
5
|
import { useClipboard } from './chunk-5VNUYO76.js';
|
|
5
|
-
import { Modal } from './chunk-CF6DTETT.js';
|
|
6
6
|
import { Button } from './chunk-OG6CL3EB.js';
|
|
7
7
|
import { useCardHeaderSlot } from './chunk-AV2DXAEL.js';
|
|
8
8
|
import { IconButton } from './chunk-4FQT6ZAY.js';
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { PageHeader } from './chunk-HOXGBLEY.js';
|
|
2
2
|
import { RelativeTime } from './chunk-3CZ7XAVY.js';
|
|
3
3
|
import { Toolbar } from './chunk-PGRPNDWM.js';
|
|
4
|
-
import { DataTable } from './chunk-
|
|
4
|
+
import { DataTable } from './chunk-3VVKJ7AZ.js';
|
|
5
5
|
import { Menu } from './chunk-TFH6SYWB.js';
|
|
6
|
-
import { DateTimePicker } from './chunk-
|
|
6
|
+
import { DateTimePicker } from './chunk-AXNQCAFC.js';
|
|
7
7
|
import { useListbox, useOptionKeys } from './chunk-F73MC7EZ.js';
|
|
8
8
|
import { Kbd } from './chunk-SMBKXWML.js';
|
|
9
9
|
import { Input } from './chunk-FTEJPHBI.js';
|