@crewlethq/ui 0.12.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 +82 -5
- package/dist/AppShell/index.js +2 -1
- package/dist/Avatar/index.js +1 -1
- package/dist/{Avatar-QHYOFID3.css → Avatar-BPJ36QZR.css} +1 -1
- package/dist/AvatarPicker/index.js +5 -5
- package/dist/Breadcrumb/Breadcrumb.d.ts +68 -0
- package/dist/Breadcrumb/index.d.ts +3 -0
- package/dist/Breadcrumb/index.js +3 -0
- package/dist/Breadcrumb-YMWVM3SV.css +193 -0
- package/dist/ChoiceButtons/ChoiceButtons.d.ts +43 -0
- package/dist/ChoiceButtons/index.d.ts +3 -0
- package/dist/ChoiceButtons/index.js +3 -0
- package/dist/ChoiceButtons-DJ5EOGUA.css +127 -0
- package/dist/Combobox/index.js +2 -2
- package/dist/CommandPalette/CommandPalette.d.ts +48 -1
- package/dist/CommandPalette/index.js +3 -3
- package/dist/{CommandPalette-C5AMKGN2.css → CommandPalette-HBTNKHZQ.css} +55 -2
- package/dist/DataTable/index.js +4 -4
- package/dist/DataView/index.js +11 -11
- package/dist/DateTimePicker/index.js +2 -2
- package/dist/{DateTimePicker-4AZBTODT.css → DateTimePicker-NJ6XH2TE.css} +4 -3
- package/dist/Document/Document.d.ts +56 -0
- package/dist/Document/index.d.ts +3 -0
- package/dist/Document/index.js +2 -0
- package/dist/Document-PQGXJHB7.css +288 -0
- package/dist/EntityChip/index.js +1 -1
- package/dist/Highlight/Highlight.d.ts +45 -0
- package/dist/Highlight/index.d.ts +3 -0
- package/dist/Highlight/index.js +2 -0
- package/dist/Highlight-DXLV2R6L.css +29 -0
- package/dist/HuePicker/index.js +3 -3
- package/dist/ImageUpload/index.js +2 -2
- package/dist/{ImageUpload-L2GE4JUM.css → ImageUpload-NVGMN7DP.css} +9 -6
- package/dist/InboxList/InboxList.d.ts +116 -0
- package/dist/InboxList/index.d.ts +3 -0
- package/dist/InboxList/index.js +5 -0
- package/dist/InboxList-YMFWKGGS.css +252 -0
- package/dist/KeyChip/KeyChip.d.ts +21 -0
- package/dist/KeyChip/index.d.ts +3 -0
- package/dist/KeyChip/index.js +2 -0
- package/dist/KeyChip-4XJU4BBE.css +30 -0
- package/dist/Link/Link.d.ts +17 -2
- package/dist/Link/index.js +1 -1
- package/dist/{Link-6BEFNMN2.css → Link-WPMVLKLY.css} +36 -1
- package/dist/Listbox/index.d.ts +2 -0
- package/dist/Listbox/index.js +1 -1
- package/dist/Listbox/useHighlightRest.d.ts +35 -0
- package/dist/MarkdownEditor/MarkdownEditor.d.ts +93 -0
- package/dist/MarkdownEditor/format.d.ts +34 -0
- package/dist/MarkdownEditor/index.d.ts +5 -0
- package/dist/MarkdownEditor/index.js +12 -0
- package/dist/MarkdownEditor-ZLSHTOIZ.css +146 -0
- package/dist/Modal/Modal.d.ts +5 -1
- package/dist/Modal/index.js +1 -1
- package/dist/{Modal-BNT3TDV2.css → Modal-RQAYGG4L.css} +34 -1
- package/dist/OrgLabel/index.js +1 -1
- package/dist/OrgNode/index.js +1 -1
- package/dist/OrgTable/index.js +4 -4
- package/dist/Outline/Outline.d.ts +72 -0
- package/dist/Outline/index.d.ts +3 -0
- package/dist/Outline/index.js +2 -0
- package/dist/Outline-VCXKKU3E.css +78 -0
- package/dist/Popover/Popover.d.ts +21 -1
- package/dist/Popover/index.js +1 -1
- package/dist/ReadingPane/ReadingPane.d.ts +95 -0
- package/dist/ReadingPane/index.d.ts +3 -0
- package/dist/ReadingPane/index.js +4 -0
- package/dist/ReadingPane-5UOLPWY5.css +194 -0
- package/dist/SegmentedControl/SegmentedControl.d.ts +9 -1
- package/dist/SegmentedControl/index.js +3 -3
- package/dist/{SegmentedControl-76HODRBT.css → SegmentedControl-PKBLJVSA.css} +18 -0
- package/dist/Select/Select.d.ts +22 -0
- package/dist/Select/index.js +2 -2
- package/dist/{Select-4ANVLHUY.css → Select-2P7AWUE4.css} +56 -6
- package/dist/SidebarNav/index.js +2 -1
- package/dist/{SidebarNav-X5NLZNWA.css → SidebarNav-KF66MLOM.css} +4 -19
- package/dist/Switcher/Switcher.d.ts +151 -0
- package/dist/Switcher/index.d.ts +3 -0
- package/dist/Switcher/index.js +16 -0
- package/dist/Switcher-B44Q4WF4.css +346 -0
- package/dist/Tabs/Tabs.d.ts +7 -1
- package/dist/Tabs/index.js +1 -1
- package/dist/{Tabs-5I5Q5KKM.css → Tabs-ITJYJFMU.css} +49 -0
- package/dist/TagsInput/index.js +2 -2
- package/dist/ThemeGallery/ThemeGallery.d.ts +65 -0
- package/dist/ThemeGallery/index.d.ts +3 -0
- package/dist/ThemeGallery/index.js +6 -0
- package/dist/ThemeGallery-NITASULQ.css +93 -0
- package/dist/ThemeSwatch/ThemeSwatch.d.ts +71 -0
- package/dist/ThemeSwatch/index.d.ts +3 -0
- package/dist/ThemeSwatch/index.js +2 -0
- package/dist/ThemeSwatch-4DL457ZB.css +256 -0
- package/dist/ThemeSwitcher/ThemeSwitcher.d.ts +5 -1
- package/dist/ThemeSwitcher/index.js +4 -4
- package/dist/ThemeToggle/ThemeToggle.d.ts +1 -1
- package/dist/ThemeToggle/index.js +1 -1
- package/dist/TimeWindowPicker/index.js +4 -4
- package/dist/{TimeWindowPicker-GBF4JDFI.css → TimeWindowPicker-BZ5HHATU.css} +5 -4
- package/dist/Toaster/index.js +1 -1
- package/dist/{Toaster-NVDCEIP5.css → Toaster-VZKISP2S.css} +81 -87
- package/dist/Tree/index.d.ts +1 -1
- package/dist/Tree/index.js +1 -1
- package/dist/Tree/useTreeState.d.ts +37 -7
- package/dist/TreeCanvas/index.js +2 -2
- package/dist/TreeGrid/TreeGrid.d.ts +22 -2
- package/dist/TreeGrid/index.js +2 -2
- package/dist/{TreeGrid-NSW7VMOX.css → TreeGrid-FBX3MSJA.css} +19 -0
- package/dist/{chunk-EBBAAQDY.js → chunk-26PEPONN.js} +3 -1
- package/dist/{chunk-GOUKOXJK.js → chunk-3VVKJ7AZ.js} +3 -3
- package/dist/{chunk-HV6IZFBK.js → chunk-4FFHJBEN.js} +2 -2
- package/dist/{chunk-JHQUT4WJ.js → chunk-4LDTQWS7.js} +1 -1
- package/dist/{chunk-GXYNEDNA.js → chunk-4Y7WKXAW.js} +1 -1
- package/dist/{chunk-IINFVK3W.js → chunk-5IXMLWGW.js} +6 -6
- package/dist/{chunk-MCPKHYMC.js → chunk-6LXMLQUM.js} +17 -4
- package/dist/{chunk-3UK4VFSK.js → chunk-6NIZCQUM.js} +1 -1
- package/dist/{chunk-ORNOOMVY.js → chunk-6TSZCBID.js} +2 -2
- package/dist/{chunk-ZMJHK7DR.js → chunk-75WOCYGC.js} +2 -2
- package/dist/chunk-77IEHFY4.js +299 -0
- package/dist/chunk-A5YKNRG6.js +94 -0
- package/dist/{chunk-JCNUQ3US.js → chunk-AXNQCAFC.js} +2 -2
- package/dist/{chunk-UG5ZMAXW.js → chunk-CBZSSKH3.js} +5 -5
- package/dist/{chunk-LAQK4V3Z.js → chunk-DJMLHCLD.js} +1 -1
- package/dist/{chunk-6MU7HNB4.js → chunk-F73MC7EZ.js} +47 -2
- package/dist/{chunk-ZPSOF6VL.js → chunk-FBSEJO2C.js} +1 -1
- package/dist/chunk-FYTIJM2T.js +40 -0
- package/dist/chunk-H6VKCIWV.js +41 -0
- package/dist/{chunk-HLBRPES3.js → chunk-IFM63LAG.js} +3 -3
- package/dist/chunk-IG75YMUN.js +22 -0
- package/dist/{chunk-SEFMO2EV.js → chunk-IXUU5DLZ.js} +55 -6
- package/dist/{chunk-ZHOM65MI.js → chunk-JCO3SIST.js} +1 -1
- package/dist/chunk-KLIEPFEZ.js +95 -0
- package/dist/{chunk-7LD6P32I.js → chunk-L3CTFFLZ.js} +2 -18
- package/dist/chunk-MNFU2RNT.js +74 -0
- package/dist/{chunk-S3BCVWTU.js → chunk-MY374UUD.js} +49 -31
- package/dist/{chunk-K5Q2DK3P.js → chunk-NXDEPUVG.js} +1 -1
- package/dist/{chunk-PDUZO35I.js → chunk-O2ZDZZS7.js} +15 -6
- package/dist/{chunk-5WEVLIB6.js → chunk-RZ7RGECB.js} +1 -1
- package/dist/{chunk-WEIINZPA.js → chunk-SBRE7IML.js} +6 -2
- package/dist/{chunk-TEEJSTFG.js → chunk-TFMJH2E6.js} +1 -1
- package/dist/{chunk-IVFJD7WY.js → chunk-UCCC7YVZ.js} +3 -2
- package/dist/chunk-VWNC2L6W.js +110 -0
- package/dist/chunk-VYY56AMX.js +2 -0
- package/dist/chunk-WI6K5M5X.js +24 -0
- package/dist/{chunk-XV65NTIT.js → chunk-WYQOHFML.js} +94 -41
- package/dist/chunk-XYCADWZN.js +100 -0
- package/dist/chunk-Y6NR7QJ3.js +336 -0
- package/dist/chunk-YSJC7AZC.js +62 -0
- package/dist/chunk-ZAJHGDAW.js +93 -0
- package/dist/generated/index.d.ts +12 -0
- package/dist/generated/index.js +64 -51
- package/dist/index.js +64 -51
- package/dist/styles.css +2711 -402
- package/dist/utils/highlight.d.ts +17 -0
- package/dist/utils/useMediaMatch.d.ts +12 -0
- package/package.json +3 -3
- package/dist/chunk-UAQIUSSK.js +0 -2
- /package/dist/{chunk-74OVQWA5.js → chunk-6AR2T5Y4.js} +0 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The gallery of themes: each group's heading over a grid of cards.
|
|
3
|
+
*
|
|
4
|
+
* A ROW HOLDS THE SAME NUMBER OF CARDS IN EVERY GROUP (`columns`, three by
|
|
5
|
+
* default), so a group of one draws a card the size of every other card
|
|
6
|
+
* rather than one stretched across the row, and the swatches line up from
|
|
7
|
+
* group to group.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
.crewlet-theme-gallery__groups {
|
|
11
|
+
display: flex;
|
|
12
|
+
flex-direction: column;
|
|
13
|
+
gap: var(--spacing-3);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.crewlet-theme-gallery__group {
|
|
17
|
+
display: flex;
|
|
18
|
+
flex-direction: column;
|
|
19
|
+
gap: var(--spacing-1);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.crewlet-theme-gallery__heading {
|
|
23
|
+
color: var(--color-text-tertiary);
|
|
24
|
+
font-size: var(--font-size-2xs);
|
|
25
|
+
line-height: var(--font-line-height-normal);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.crewlet-theme-gallery__cards {
|
|
29
|
+
display: grid;
|
|
30
|
+
grid-template-columns: repeat(var(--crewlet-theme-gallery-columns), minmax(0, 1fr));
|
|
31
|
+
gap: var(--spacing-2);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/*
|
|
35
|
+
* A CARD IS ITS BORDER. Resting, the plain hairline; under the pointer, the
|
|
36
|
+
* strong one; chosen, the accent. One line round the card in every state, so
|
|
37
|
+
* the chosen card is never a card inside a frame.
|
|
38
|
+
*/
|
|
39
|
+
.crewlet-theme-gallery__card {
|
|
40
|
+
display: flex;
|
|
41
|
+
flex-direction: column;
|
|
42
|
+
gap: var(--spacing-1);
|
|
43
|
+
min-width: 0;
|
|
44
|
+
padding: var(--spacing-2);
|
|
45
|
+
border: 1px solid var(--color-border-default);
|
|
46
|
+
border-radius: var(--radius-md);
|
|
47
|
+
background: var(--color-surface-subtle);
|
|
48
|
+
color: var(--color-text-primary);
|
|
49
|
+
font: inherit;
|
|
50
|
+
text-align: left;
|
|
51
|
+
cursor: pointer;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/* Not on the chosen card: under the pointer it keeps the accent, or the one
|
|
55
|
+
card that says "this one" would stop saying it while it is being pointed at. */
|
|
56
|
+
.crewlet-theme-gallery__card:hover:not(:disabled):not(.is-chosen) {
|
|
57
|
+
border-color: var(--color-border-strong);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.crewlet-theme-gallery__card.is-chosen {
|
|
61
|
+
border-color: var(--color-brand-accent);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/* The ring is drawn OVER the border, inset by its width, never a second line outside it. */
|
|
65
|
+
.crewlet-theme-gallery__card:focus-visible {
|
|
66
|
+
outline: 2px solid var(--color-focus);
|
|
67
|
+
outline-offset: -1px;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.crewlet-theme-gallery__card:disabled {
|
|
71
|
+
cursor: not-allowed;
|
|
72
|
+
opacity: 0.5;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.crewlet-theme-gallery__name {
|
|
76
|
+
overflow: hidden;
|
|
77
|
+
font-size: var(--font-size-xs);
|
|
78
|
+
font-weight: var(--font-weight-medium);
|
|
79
|
+
line-height: var(--font-line-height-tight);
|
|
80
|
+
text-overflow: ellipsis;
|
|
81
|
+
white-space: nowrap;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/*
|
|
85
|
+
* FORCED COLORS keeps the border and drops the accent, so the chosen card
|
|
86
|
+
* would look like every other; the system's own selected colour says it.
|
|
87
|
+
*/
|
|
88
|
+
@media (forced-colors: active) {
|
|
89
|
+
.crewlet-theme-gallery__card.is-chosen {
|
|
90
|
+
border-color: Highlight;
|
|
91
|
+
border-width: 2px;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { HTMLAttributes } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* The colours a theme's thumbnail is drawn with, in one mode: the shape of a
|
|
4
|
+
* `themeRegistry` entry's `swatch.dark` and `swatch.light` in
|
|
5
|
+
* `@crewlethq/tokens`, which the build reads off the sheet that paints the
|
|
6
|
+
* theme.
|
|
7
|
+
*/
|
|
8
|
+
export interface ThemeSwatchColours {
|
|
9
|
+
frame: string;
|
|
10
|
+
sheet: string;
|
|
11
|
+
card: string;
|
|
12
|
+
raised: string;
|
|
13
|
+
hairline: string;
|
|
14
|
+
text: string;
|
|
15
|
+
muted: string;
|
|
16
|
+
accent: string;
|
|
17
|
+
onAccent: string;
|
|
18
|
+
info: string;
|
|
19
|
+
warning: string;
|
|
20
|
+
danger: string;
|
|
21
|
+
success: string;
|
|
22
|
+
}
|
|
23
|
+
/** A theme's two palettes, as its registry entry carries them. */
|
|
24
|
+
export interface ThemeSwatchPair {
|
|
25
|
+
dark: ThemeSwatchColours;
|
|
26
|
+
light: ThemeSwatchColours;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* How much of the theme is drawn.
|
|
30
|
+
*
|
|
31
|
+
* `chip` is a mark beside a name in a list: each palette's frame with its
|
|
32
|
+
* accent on it. `card` is a picker's thumbnail: a rail, a sheet and a card
|
|
33
|
+
* with the primary action and the four states. `pane` is the same sketch
|
|
34
|
+
* large enough to read as a screen, for a preview beside a picker.
|
|
35
|
+
*/
|
|
36
|
+
export type ThemeSwatchSize = 'chip' | 'card' | 'pane';
|
|
37
|
+
export interface ThemeSwatchProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {
|
|
38
|
+
/** The theme's colours: a `themeRegistry` entry's `swatch`. */
|
|
39
|
+
swatch: ThemeSwatchPair;
|
|
40
|
+
size?: ThemeSwatchSize | undefined;
|
|
41
|
+
/**
|
|
42
|
+
* One palette alone. Without it both are drawn, dark beside light, which is
|
|
43
|
+
* what a theme IS: a pair the mode chooses between.
|
|
44
|
+
*/
|
|
45
|
+
mode?: 'dark' | 'light' | undefined;
|
|
46
|
+
/**
|
|
47
|
+
* Names the drawing as an image. Without one it is decoration and hidden
|
|
48
|
+
* from assistive technology, which is right wherever the theme's name is
|
|
49
|
+
* printed beside it.
|
|
50
|
+
*/
|
|
51
|
+
label?: string | undefined;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* A theme, drawn from its colours: the thumbnail every theme picker shows.
|
|
55
|
+
*
|
|
56
|
+
* DRAWN FROM THE REGISTRY, NOT FROM THE PAGE. A thumbnail has to show a theme
|
|
57
|
+
* that is NOT on screen, so it cannot read the page's custom properties: it
|
|
58
|
+
* paints each half with its own, set from the colours the build read off the
|
|
59
|
+
* theme's sheet. The outline round it is the page's own hairline, because
|
|
60
|
+
* that is where the thumbnail sits.
|
|
61
|
+
*
|
|
62
|
+
* BOTH MODES BY DEFAULT, dark beside light, because a theme is a pair and the
|
|
63
|
+
* reader's mode is a separate choice: a thumbnail of one half would show a
|
|
64
|
+
* light reader a dark theme they would never see, or hide the half they
|
|
65
|
+
* would. `mode` draws one, for a preview that follows the reader's mode.
|
|
66
|
+
*
|
|
67
|
+
* DECORATION UNLESS NAMED. Wherever the theme's name is printed beside it the
|
|
68
|
+
* drawing says nothing a reader needs; given a `label`, it is an image with
|
|
69
|
+
* that name.
|
|
70
|
+
*/
|
|
71
|
+
export declare function ThemeSwatch({ swatch, size, mode, label, className, ...rest }: ThemeSwatchProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* A theme's thumbnail.
|
|
3
|
+
*
|
|
4
|
+
* EVERY COLOUR IS THE THEME'S OWN, from the custom properties ThemeSwatch sets
|
|
5
|
+
* on each half (--crewlet-swatch-*), and none is the page's except the
|
|
6
|
+
* outline, which is the page's hairline because the page is where the
|
|
7
|
+
* thumbnail sits. Two halves share the box equally: dark, then light.
|
|
8
|
+
*
|
|
9
|
+
* IT IS A PICTURE, so forced-colors mode leaves it alone: repainted to the
|
|
10
|
+
* system's two colours, every theme would draw the same blank box.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
.crewlet-theme-swatch {
|
|
14
|
+
display: grid;
|
|
15
|
+
grid-auto-flow: column;
|
|
16
|
+
grid-auto-columns: minmax(0, 1fr);
|
|
17
|
+
flex: none;
|
|
18
|
+
overflow: hidden;
|
|
19
|
+
border: 1px solid var(--color-border-default);
|
|
20
|
+
forced-color-adjust: none;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.crewlet-theme-swatch--chip {
|
|
24
|
+
width: 26px;
|
|
25
|
+
height: 16px;
|
|
26
|
+
border-radius: var(--radius-xs);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.crewlet-theme-swatch--card {
|
|
30
|
+
width: 100%;
|
|
31
|
+
height: 38px;
|
|
32
|
+
border-radius: var(--radius-sm);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.crewlet-theme-swatch--pane {
|
|
36
|
+
width: 100%;
|
|
37
|
+
aspect-ratio: 4 / 3;
|
|
38
|
+
border-radius: var(--radius-md);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.crewlet-theme-swatch__half {
|
|
42
|
+
display: grid;
|
|
43
|
+
grid-template-columns: 26% minmax(0, 1fr);
|
|
44
|
+
min-width: 0;
|
|
45
|
+
background: var(--crewlet-swatch-frame);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/* ── The chip: each palette's frame, with its accent on it ────────────── */
|
|
49
|
+
|
|
50
|
+
.crewlet-theme-swatch--chip .crewlet-theme-swatch__half {
|
|
51
|
+
grid-template-columns: none;
|
|
52
|
+
place-items: center;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.crewlet-theme-swatch__dot {
|
|
56
|
+
width: 6px;
|
|
57
|
+
height: 6px;
|
|
58
|
+
border-radius: var(--radius-circle);
|
|
59
|
+
background: var(--crewlet-swatch-accent);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/* ── The card: a rail, a sheet, a card on it ──────────────────────────── */
|
|
63
|
+
|
|
64
|
+
.crewlet-theme-swatch__rail {
|
|
65
|
+
display: flex;
|
|
66
|
+
flex-direction: column;
|
|
67
|
+
gap: 3px;
|
|
68
|
+
padding: 6px 4px;
|
|
69
|
+
min-width: 0;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.crewlet-theme-swatch__rail-row {
|
|
73
|
+
display: block;
|
|
74
|
+
width: 80%;
|
|
75
|
+
height: 3px;
|
|
76
|
+
border-radius: var(--radius-pill);
|
|
77
|
+
background: var(--crewlet-swatch-muted);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/* The row the reader is on stands on the raised rung, as the rail draws it. */
|
|
81
|
+
.crewlet-theme-swatch__rail-row.is-current {
|
|
82
|
+
width: 100%;
|
|
83
|
+
height: 6px;
|
|
84
|
+
background: var(--crewlet-swatch-raised);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.crewlet-theme-swatch__sheet {
|
|
88
|
+
display: flex;
|
|
89
|
+
flex-direction: column;
|
|
90
|
+
min-width: 0;
|
|
91
|
+
margin: 3px 3px 3px 0;
|
|
92
|
+
padding: 3px;
|
|
93
|
+
border-radius: var(--radius-xs);
|
|
94
|
+
background: var(--crewlet-swatch-sheet);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.crewlet-theme-swatch__card {
|
|
98
|
+
display: flex;
|
|
99
|
+
flex: 1;
|
|
100
|
+
flex-direction: column;
|
|
101
|
+
justify-content: space-between;
|
|
102
|
+
min-width: 0;
|
|
103
|
+
padding: 4px;
|
|
104
|
+
border: 1px solid var(--crewlet-swatch-hairline);
|
|
105
|
+
border-radius: var(--radius-xs);
|
|
106
|
+
background: var(--crewlet-swatch-card);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.crewlet-theme-swatch__line {
|
|
110
|
+
display: block;
|
|
111
|
+
width: 60%;
|
|
112
|
+
height: 3px;
|
|
113
|
+
border-radius: var(--radius-pill);
|
|
114
|
+
background: var(--crewlet-swatch-text);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/*
|
|
118
|
+
* THE ACTION GIVES WAY BEFORE IT DISAPPEARS. A narrow thumbnail has less room
|
|
119
|
+
* than the action and the four states take, so the action narrows to a floor
|
|
120
|
+
* and the row clips its last states, rather than the action, which is what a
|
|
121
|
+
* theme is chosen for, shrinking to nothing.
|
|
122
|
+
*/
|
|
123
|
+
.crewlet-theme-swatch__row {
|
|
124
|
+
display: flex;
|
|
125
|
+
align-items: center;
|
|
126
|
+
gap: 2px;
|
|
127
|
+
overflow: hidden;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/* The primary action: the accent's fill. */
|
|
131
|
+
.crewlet-theme-swatch__action {
|
|
132
|
+
display: block;
|
|
133
|
+
flex: 0 1 14px;
|
|
134
|
+
min-width: 6px;
|
|
135
|
+
height: 6px;
|
|
136
|
+
margin-right: auto;
|
|
137
|
+
border-radius: var(--radius-pill);
|
|
138
|
+
background: var(--crewlet-swatch-accent);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/* The four states, in the order the kit names them. */
|
|
142
|
+
.crewlet-theme-swatch__state {
|
|
143
|
+
display: block;
|
|
144
|
+
flex: none;
|
|
145
|
+
width: 4px;
|
|
146
|
+
height: 4px;
|
|
147
|
+
border-radius: var(--radius-circle);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.crewlet-theme-swatch__state--info { background: var(--crewlet-swatch-info); }
|
|
151
|
+
.crewlet-theme-swatch__state--warning { background: var(--crewlet-swatch-warning); }
|
|
152
|
+
.crewlet-theme-swatch__state--danger { background: var(--crewlet-swatch-danger); }
|
|
153
|
+
.crewlet-theme-swatch__state--success { background: var(--crewlet-swatch-success); }
|
|
154
|
+
|
|
155
|
+
/* ── The pane: the same sketch, large enough to read as a screen ───────── */
|
|
156
|
+
|
|
157
|
+
.crewlet-theme-swatch--pane .crewlet-theme-swatch__half {
|
|
158
|
+
grid-template-columns: 26% minmax(0, 1fr);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.crewlet-theme-swatch--pane .crewlet-theme-swatch__rail {
|
|
162
|
+
gap: 7px;
|
|
163
|
+
padding: 12px 8px;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
.crewlet-theme-swatch--pane .crewlet-theme-swatch__rail-row {
|
|
167
|
+
height: 5px;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.crewlet-theme-swatch--pane .crewlet-theme-swatch__rail-row.is-current {
|
|
171
|
+
height: 12px;
|
|
172
|
+
border: 1px solid var(--crewlet-swatch-hairline);
|
|
173
|
+
border-radius: var(--radius-xs);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.crewlet-theme-swatch--pane .crewlet-theme-swatch__sheet {
|
|
177
|
+
gap: 8px;
|
|
178
|
+
margin: 6px 6px 6px 0;
|
|
179
|
+
padding: 10px;
|
|
180
|
+
border-radius: var(--radius-sm);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.crewlet-theme-swatch__title {
|
|
184
|
+
display: block;
|
|
185
|
+
flex: none;
|
|
186
|
+
width: 40%;
|
|
187
|
+
height: 6px;
|
|
188
|
+
border-radius: var(--radius-pill);
|
|
189
|
+
background: var(--crewlet-swatch-text);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
.crewlet-theme-swatch--pane .crewlet-theme-swatch__card {
|
|
193
|
+
flex: none;
|
|
194
|
+
gap: 7px;
|
|
195
|
+
justify-content: flex-start;
|
|
196
|
+
padding: 8px;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
.crewlet-theme-swatch__item {
|
|
200
|
+
display: flex;
|
|
201
|
+
align-items: center;
|
|
202
|
+
gap: 6px;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.crewlet-theme-swatch--pane .crewlet-theme-swatch__state {
|
|
206
|
+
width: 6px;
|
|
207
|
+
height: 6px;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.crewlet-theme-swatch--pane .crewlet-theme-swatch__line {
|
|
211
|
+
width: 45%;
|
|
212
|
+
height: 4px;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
.crewlet-theme-swatch__muted {
|
|
216
|
+
display: block;
|
|
217
|
+
width: 18%;
|
|
218
|
+
height: 4px;
|
|
219
|
+
margin-left: auto;
|
|
220
|
+
border-radius: var(--radius-pill);
|
|
221
|
+
background: var(--crewlet-swatch-muted);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
.crewlet-theme-swatch__actions {
|
|
225
|
+
display: flex;
|
|
226
|
+
gap: 6px;
|
|
227
|
+
margin-top: auto;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
.crewlet-theme-swatch--pane .crewlet-theme-swatch__action {
|
|
231
|
+
display: grid;
|
|
232
|
+
flex: none;
|
|
233
|
+
place-items: center;
|
|
234
|
+
width: 40%;
|
|
235
|
+
height: 16px;
|
|
236
|
+
margin-right: 0;
|
|
237
|
+
border-radius: var(--radius-xs);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/* The primary action's label, in the colour the theme labels its accent with. */
|
|
241
|
+
.crewlet-theme-swatch__label {
|
|
242
|
+
display: block;
|
|
243
|
+
width: 50%;
|
|
244
|
+
height: 4px;
|
|
245
|
+
border-radius: var(--radius-pill);
|
|
246
|
+
background: var(--crewlet-swatch-on-accent);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.crewlet-theme-swatch__secondary {
|
|
250
|
+
display: block;
|
|
251
|
+
width: 26%;
|
|
252
|
+
height: 16px;
|
|
253
|
+
border: 1px solid var(--crewlet-swatch-hairline);
|
|
254
|
+
border-radius: var(--radius-xs);
|
|
255
|
+
background: var(--crewlet-swatch-card);
|
|
256
|
+
}
|
|
@@ -31,13 +31,15 @@ export type PreferenceControl<T extends string> = {
|
|
|
31
31
|
storageKey?: undefined;
|
|
32
32
|
};
|
|
33
33
|
interface ThemeRowProps {
|
|
34
|
-
/** Names the group. */
|
|
34
|
+
/** Names the group. Mode by default: the theme is the palette, and this row chooses its light or dark half. */
|
|
35
35
|
label?: string | undefined;
|
|
36
36
|
/** What each choice is called out loud. The glyphs say nothing on their own. */
|
|
37
37
|
lightLabel?: string | undefined;
|
|
38
38
|
systemLabel?: string | undefined;
|
|
39
39
|
darkLabel?: string | undefined;
|
|
40
40
|
size?: 'sm' | 'md' | undefined;
|
|
41
|
+
/** Equal options filling the width given, so the row draws the same box as a Density row beside it. */
|
|
42
|
+
fill?: boolean | undefined;
|
|
41
43
|
className?: string | undefined;
|
|
42
44
|
}
|
|
43
45
|
export type ThemeSwitcherProps = ThemeRowProps & PreferenceControl<ThemePreference>;
|
|
@@ -64,6 +66,8 @@ interface DensityRowProps {
|
|
|
64
66
|
normalMark?: string | undefined;
|
|
65
67
|
comfortableMark?: string | undefined;
|
|
66
68
|
size?: 'sm' | 'md' | undefined;
|
|
69
|
+
/** Equal options filling the width given, so the row draws the same box as a Mode row beside it. */
|
|
70
|
+
fill?: boolean | undefined;
|
|
67
71
|
className?: string | undefined;
|
|
68
72
|
}
|
|
69
73
|
export type DensitySwitcherProps = DensityRowProps & PreferenceControl<DensityPreference>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { DensitySwitcher, ThemeSwitcher } from '../chunk-
|
|
1
|
+
export { DensitySwitcher, ThemeSwitcher } from '../chunk-SBRE7IML.js';
|
|
2
2
|
export { applyDensity, applyStoredPreferences, applyTheme, resolveTheme, useDensityPreference, useSystemTheme, useThemePreference } from '../chunk-K3OWD7BJ.js';
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-VYY56AMX.js';
|
|
4
|
+
import '../chunk-26PEPONN.js';
|
|
5
|
+
import '../chunk-4LDTQWS7.js';
|
|
6
6
|
import '../chunk-CBOICT64.js';
|
|
7
7
|
import '../chunk-BHHIIK3M.js';
|
|
8
8
|
import '../chunk-BZFWDIV6.js';
|
|
@@ -30,7 +30,7 @@ export type ThemeToggleProps = ToggleButtonProps & PreferenceControl<ThemePrefer
|
|
|
30
30
|
* full `ThemeSwitcher`, which is where a settings screen offers it.
|
|
31
31
|
*
|
|
32
32
|
* NAMED FOR THE ACTION, drawn as the destination. The name changes with the
|
|
33
|
-
*
|
|
33
|
+
* mode ("Switch to light mode" on a dark page), so a screen reader
|
|
34
34
|
* hears what a press will do, and the glyph is the palette it goes to: a sun
|
|
35
35
|
* on a dark page, a moon on a light one. It is NOT `aria-pressed`, because
|
|
36
36
|
* neither palette is the "on" state of the other, and a pressed state beside a
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
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
|
+
import '../chunk-F73MC7EZ.js';
|
|
4
4
|
import '../chunk-FTEJPHBI.js';
|
|
5
5
|
import '../chunk-GXQ3B46I.js';
|
|
6
6
|
import '../chunk-OG6CL3EB.js';
|
|
7
7
|
import '../chunk-PQADV6P6.js';
|
|
8
8
|
import '../chunk-4FQT6ZAY.js';
|
|
9
|
-
import '../chunk-
|
|
9
|
+
import '../chunk-O2ZDZZS7.js';
|
|
10
10
|
import '../chunk-7RPGY3JE.js';
|
|
11
11
|
import '../chunk-R25RGPUB.js';
|
|
12
12
|
import '../chunk-BZFWDIV6.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