@crewlethq/ui 0.35.0 → 0.36.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 +77 -0
- package/dist/AgentHandoffPanel/AgentHandoffPanel.d.ts +99 -0
- package/dist/AgentHandoffPanel/index.d.ts +3 -0
- package/dist/AgentHandoffPanel/index.js +16 -0
- package/dist/AgentHandoffPanel-JWSW62GU.css +151 -0
- package/dist/ArrangeFrame/index.js +1 -1
- package/dist/{ArrangeFrame-3PLZAG22.css → ArrangeFrame-QXOQTFAH.css} +22 -5
- package/dist/ArrangeList/index.js +4 -3
- package/dist/ArtifactBar/ArtifactBar.d.ts +2 -1
- package/dist/ArtifactBar/index.js +2 -2
- package/dist/{ArtifactBar-HV5AT4RG.css → ArtifactBar-FWPBBKQ5.css} +8 -0
- package/dist/ArtifactCard/index.js +3 -3
- package/dist/ArtifactCover/index.js +3 -2
- package/dist/ArtifactKindIllustration/ArtifactKindIllustration.d.ts +16 -7
- package/dist/ArtifactKindIllustration/index.js +1 -1
- package/dist/{ArtifactKindIllustration-5FPRJQ3P.css → ArtifactKindIllustration-5KTP43QS.css} +36 -0
- package/dist/ArtifactMakeRow/ArtifactMakeRow.d.ts +39 -0
- package/dist/ArtifactMakeRow/index.d.ts +4 -0
- package/dist/ArtifactMakeRow/index.js +4 -0
- package/dist/ArtifactMakeRow-RWUTS5MC.css +167 -0
- package/dist/ArtifactPanel/ArtifactPanel.d.ts +8 -1
- package/dist/ArtifactPanel/index.js +1 -1
- package/dist/{ArtifactPanel-HW3SU7CP.css → ArtifactPanel-KKUUIPEU.css} +9 -0
- package/dist/AuthLayout/index.js +2 -2
- package/dist/AvatarPicker/index.js +2 -2
- package/dist/Canvas/index.js +2 -2
- package/dist/CanvasBoard/CanvasBoard.d.ts +27 -13
- package/dist/CanvasBoard/index.d.ts +1 -1
- package/dist/CanvasBoard/index.js +4 -4
- package/dist/{CanvasBoard-5NNSKY6A.css → CanvasBoard-TS4P356F.css} +13 -6
- package/dist/CanvasToolbar/index.js +3 -3
- package/dist/Card/index.js +1 -1
- package/dist/{Card-KJOYHDTJ.css → Card-QOVASQNU.css} +17 -12
- package/dist/ChangeMark/index.js +2 -2
- package/dist/Checkbox/index.js +3 -2
- package/dist/ChoiceButtons/index.js +1 -1
- package/dist/{ChoiceButtons-DJ5EOGUA.css → ChoiceButtons-FLIFXFFS.css} +10 -0
- package/dist/ChoiceList/index.js +1 -1
- package/dist/{ChoiceList-RBL7FNQL.css → ChoiceList-EA2W6MOS.css} +36 -5
- package/dist/Combobox/index.js +3 -2
- package/dist/CommandPalette/index.js +3 -2
- package/dist/CommentThread/index.js +6 -5
- package/dist/Composer/Composer.d.ts +4 -0
- package/dist/Composer/index.js +3 -2
- package/dist/{Composer-ABGJIAIR.css → Composer-PXITWNEK.css} +26 -15
- package/dist/ConfirmField/index.js +3 -2
- package/dist/DataTable/index.js +5 -4
- package/dist/DataView/index.js +9 -8
- package/dist/DatasetSource/DatasetSource.d.ts +4 -0
- package/dist/DatasetSource/index.js +1 -1
- package/dist/{DatasetSource-XFPZBRXL.css → DatasetSource-SMGX4PS5.css} +38 -4
- package/dist/DateTimePicker/index.js +2 -1
- package/dist/{DateTimePicker-HG2KQXQ6.css → DateTimePicker-2IVTKFV2.css} +15 -2
- package/dist/DocTabsEditor/index.js +4 -3
- package/dist/Document/Document.d.ts +15 -3
- package/dist/Document/index.js +2 -1
- package/dist/{Document-JUGCSQ4L.css → Document-YFWTWXJP.css} +34 -2
- package/dist/{Editor-BVQHBF7L.js → Editor-HORWMUM3.js} +2 -1
- package/dist/FilterChip/index.js +1 -1
- package/dist/{FilterChip-EZ4QMW4E.css → FilterChip-VL33P3JL.css} +5 -1
- package/dist/Input/index.js +2 -1
- package/dist/{Input-GBZSFXLU.css → Input-ABGOFENS.css} +46 -10
- package/dist/LayersList/index.js +1 -1
- package/dist/{LayersList-NQZEIPZB.css → LayersList-TBNF4XGL.css} +16 -3
- package/dist/LinkInterstitial/index.js +2 -2
- package/dist/ListInput/index.js +4 -3
- package/dist/LivePreview/LivePreview.d.ts +105 -25
- package/dist/LivePreview/budget.d.ts +64 -20
- package/dist/LivePreview/index.d.ts +5 -3
- package/dist/LivePreview/index.js +1 -1
- package/dist/LivePreview/stills.d.ts +57 -0
- package/dist/LivePreview-BROGKR4N.css +113 -0
- package/dist/PresenterView/index.js +2 -2
- package/dist/PrincipalPicker/index.js +4 -3
- package/dist/RichEditor/index.js +1 -1
- package/dist/Select/index.js +2 -1
- package/dist/{Select-A54YS5EP.css → Select-W3CHTZXP.css} +18 -2
- package/dist/ShareDialog/index.js +5 -4
- package/dist/SheetColumnEditor/index.js +7 -6
- package/dist/SheetGrid/index.js +6 -6
- package/dist/SheetModel/columns.d.ts +19 -0
- package/dist/SheetModel/index.d.ts +1 -0
- package/dist/SheetModel/index.js +1 -1
- package/dist/SlideCompare/index.js +2 -2
- package/dist/SlideFilmstrip/index.js +3 -3
- package/dist/{SlideFilmstrip-4ITZLMO4.css → SlideFilmstrip-PAT7P4OG.css} +26 -7
- package/dist/SlideGrid/index.js +2 -2
- package/dist/{SlideGrid-S4LTJ4UU.css → SlideGrid-FJA33DV4.css} +11 -1
- package/dist/SlideStage/index.js +1 -1
- package/dist/{SlideStage-S2FISF4C.css → SlideStage-ZTTEQSS2.css} +4 -2
- package/dist/SourceEditor/index.js +2 -1
- package/dist/{SourceEditor-G2C3STPX.css → SourceEditor-QAYE2JS6.css} +19 -12
- package/dist/Switcher/index.js +5 -4
- package/dist/TagsInput/index.js +3 -2
- package/dist/{TagsInput-XMXTI5Q4.css → TagsInput-7EGBBXHS.css} +7 -1
- package/dist/ThemeGallery/index.js +1 -1
- package/dist/{ThemeGallery-HSUKBDWY.css → ThemeGallery-X35Y25EX.css} +26 -5
- package/dist/TimeWindowPicker/index.js +4 -3
- package/dist/{TimeWindowPicker-T763GLXH.css → TimeWindowPicker-DEFDV77Z.css} +15 -2
- package/dist/TreeCanvas/index.js +3 -3
- package/dist/VersionTimeline/index.js +2 -2
- package/dist/{chunk-V43UVX4H.js → chunk-27GD7LVR.js} +1 -1
- package/dist/{chunk-CCLNGVCM.js → chunk-2DV4THNQ.js} +2 -2
- package/dist/{chunk-2CQLNML5.js → chunk-3PTUDKSR.js} +4 -2
- package/dist/{chunk-ONL54WMH.js → chunk-46RL3E54.js} +1 -1
- package/dist/{chunk-HAKTRTRP.js → chunk-47JQAGRV.js} +1 -1
- package/dist/{chunk-UHJQDFKQ.js → chunk-4ZJLOKSS.js} +1 -1
- package/dist/{chunk-ACA27MZH.js → chunk-5QXRI35B.js} +1 -1
- package/dist/{chunk-LL5AFXU7.js → chunk-5RT5O4JR.js} +1 -1
- package/dist/chunk-66ADEPFB.js +51 -0
- package/dist/{chunk-3Y56GQPM.js → chunk-7VAUGG6B.js} +1 -1
- package/dist/{chunk-NKZCJRKO.js → chunk-APDKUGSH.js} +2 -2
- package/dist/{chunk-YSJC7AZC.js → chunk-BWOIUOO3.js} +1 -1
- package/dist/{chunk-PI7HKLIT.js → chunk-D7GNNID2.js} +3 -1
- package/dist/{chunk-THROPJZC.js → chunk-DEMALFHY.js} +1 -1
- package/dist/chunk-EOQFPZEE.js +138 -0
- package/dist/{chunk-QFNWMWWY.js → chunk-ES4RKQ7B.js} +4 -4
- package/dist/{chunk-MAD6WPER.js → chunk-FG4O64DV.js} +5 -6
- package/dist/{chunk-E35CMI5D.js → chunk-FHHYXZSP.js} +31 -13
- package/dist/{chunk-AYB6AYNH.js → chunk-GMLAKNFY.js} +1 -1
- package/dist/{chunk-ZB5O3ELS.js → chunk-GRYZ5EP3.js} +4 -2
- package/dist/{chunk-ILAEBSLJ.js → chunk-H5NOLRGH.js} +2 -2
- package/dist/{chunk-W3UVOZKL.js → chunk-IPAU6FLH.js} +6 -2
- package/dist/{chunk-Z6VW6CXX.js → chunk-IQH3DDZ2.js} +2 -2
- package/dist/{chunk-6QFAK2WV.js → chunk-IUYUS2SO.js} +4 -1
- package/dist/{chunk-AXBRWRGV.js → chunk-JQLS3MZB.js} +1 -1
- package/dist/{chunk-FGYET26P.js → chunk-KJW2AS57.js} +1 -1
- package/dist/{chunk-QIXMNOBD.js → chunk-KYZMN6I6.js} +2 -2
- package/dist/{chunk-73A7D5CE.js → chunk-L4WZSVMT.js} +3 -1
- package/dist/{chunk-OOMXLJ3S.js → chunk-LFSIKGRQ.js} +13 -1
- package/dist/{chunk-W7QBBKUE.js → chunk-MJW6SQYB.js} +7 -3
- package/dist/{chunk-GMU6SQ6B.js → chunk-MRMHZ437.js} +3 -3
- package/dist/{chunk-ULPL26BU.js → chunk-N5SKHIAP.js} +1 -1
- package/dist/{chunk-LV4APO72.js → chunk-NQGPD6NX.js} +1 -1
- package/dist/{chunk-7UYONN6K.js → chunk-OSZDHN5Z.js} +2 -2
- package/dist/chunk-P6WFZDKS.js +111 -0
- package/dist/{chunk-CPEPST4S.js → chunk-PJIPUEJ3.js} +1 -1
- package/dist/{chunk-QS4ZGTEU.js → chunk-PPFX6GRK.js} +1 -1
- package/dist/{chunk-7DZDSSJS.js → chunk-RH2NCQBZ.js} +5 -4
- package/dist/{chunk-3VD3G3IL.js → chunk-T5RQGI6O.js} +1 -1
- package/dist/{chunk-F2KY4RLI.js → chunk-TVRBQMIX.js} +5 -3
- package/dist/{chunk-QEFHYUCY.js → chunk-UWGUKMBK.js} +1 -1
- package/dist/{chunk-5YLON2PW.js → chunk-UYZZV4DZ.js} +1 -1
- package/dist/{chunk-BQ7AKL2N.js → chunk-VKKUGZ3G.js} +3 -1
- package/dist/{chunk-5VCG26CV.js → chunk-W3HYWD63.js} +4 -4
- package/dist/{chunk-DEJHAOC5.js → chunk-WMXAX6VA.js} +1 -1
- package/dist/{chunk-6JVRY5DQ.js → chunk-WNAYQQ6Y.js} +2 -2
- package/dist/{chunk-VDPJGP4Q.js → chunk-WX2NIG4G.js} +1 -1
- package/dist/{chunk-ZU3DUXD2.js → chunk-WZGYIVYH.js} +1 -1
- package/dist/chunk-XGBLRDSU.js +446 -0
- package/dist/{chunk-22CQQDFW.js → chunk-XMRTFPWX.js} +2 -2
- package/dist/{chunk-HUVG2FFT.js → chunk-Y5BD4MTE.js} +4 -2
- package/dist/chunk-YSGLEHND.js +56 -0
- package/dist/generated/index.d.ts +2 -0
- package/dist/generated/index.js +93 -90
- package/dist/index.js +93 -90
- package/dist/styles.css +862 -130
- package/dist/utils/focusModality.d.ts +41 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +2 -1
- package/package.json +3 -3
- package/dist/LivePreview-SRO7KHO4.css +0 -65
- package/dist/chunk-KF6YGL4B.js +0 -160
- package/dist/chunk-TYKQ33CL.js +0 -35
- package/dist/{chunk-3P4Y5RX6.js → chunk-4BYHAOHH.js} +1 -1
- package/dist/{chunk-3WCNHYXE.js → chunk-5BP6IS3N.js} +0 -0
- package/dist/{chunk-KD2IRYCT.js → chunk-5WDXPHEW.js} +1 -1
- package/dist/{chunk-OSFA5ROT.js → chunk-FEJANUZK.js} +0 -0
- package/dist/{chunk-FJJHD73S.js → chunk-GYBDPCRC.js} +1 -1
- package/dist/{chunk-VHZ3AXJD.js → chunk-NQCY44B3.js} +1 -1
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type ArtifactKind } from '../ArtifactKindGlyph/index.js';
|
|
2
|
+
/** One kind a reader can start from the row. */
|
|
3
|
+
export interface ArtifactMakeRowItem {
|
|
4
|
+
kind: ArtifactKind;
|
|
5
|
+
/** The kind's name, as what one makes: "Docs". */
|
|
6
|
+
label: string;
|
|
7
|
+
/** What the kind is for, in a few words under its name: "Live company figures". */
|
|
8
|
+
detail?: string | undefined;
|
|
9
|
+
/** Where starting one goes. Left out with `disabledReason`, the item starts nothing. */
|
|
10
|
+
href?: string | undefined;
|
|
11
|
+
/** Why this reader cannot start one. The item stays focusable and says so. */
|
|
12
|
+
disabledReason?: string | undefined;
|
|
13
|
+
}
|
|
14
|
+
export interface ArtifactMakeRowProps {
|
|
15
|
+
/** The kinds, in the order they are offered. */
|
|
16
|
+
items: readonly ArtifactMakeRowItem[];
|
|
17
|
+
/** What the row is called for assistive technology, when no heading names it. */
|
|
18
|
+
'aria-label'?: string | undefined;
|
|
19
|
+
/** The id of the heading that names the row. */
|
|
20
|
+
'aria-labelledby'?: string | undefined;
|
|
21
|
+
className?: string | undefined;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The kinds a reader can start, as one quiet tray above their work: each
|
|
25
|
+
* kind's glyph on its own tint, its name and what it is for, the whole item
|
|
26
|
+
* one link. A toolbar for making things rather than a hero: one line high on
|
|
27
|
+
* a wide page, the details dropped before a name is cut, and three across on
|
|
28
|
+
* a phone.
|
|
29
|
+
*
|
|
30
|
+
* THE TRAY IS A WORKBENCH, Crewlet's dotted field under the kinds the way the
|
|
31
|
+
* org chart's canvas sits under its seats, and an item lifts off it as a card
|
|
32
|
+
* under the pointer. The glyph is the one coloured thing in each item, so six
|
|
33
|
+
* hues read as six kinds and never as six coloured boxes.
|
|
34
|
+
*
|
|
35
|
+
* AN ITEM THAT CANNOT START is still a stop, so a reader moving through the
|
|
36
|
+
* row by keyboard hears why (`disabledReason`) rather than finding a kind
|
|
37
|
+
* missing.
|
|
38
|
+
*/
|
|
39
|
+
export declare function ArtifactMakeRow({ items, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, className, }: ArtifactMakeRowProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The Make something new tray.
|
|
3
|
+
*
|
|
4
|
+
* Every colour is a token: the tray's ground, its dots and its hairlines are
|
|
5
|
+
* the surface and border steps, and each kind's mark reads the kind's own
|
|
6
|
+
* Fill, Line and Ink (`ArtifactKinds.css`), so the tray repaints with the
|
|
7
|
+
* theme and holds no colour of its own.
|
|
8
|
+
*
|
|
9
|
+
* THE TRAY SIZES ITSELF BY ITS OWN WIDTH, never the window's: it sits in a
|
|
10
|
+
* page column a sidebar narrows, so three steps are container queries on the
|
|
11
|
+
* tray. Under 560px three across in two lines; from 560px the six in one
|
|
12
|
+
* line, each its mark over its name, so a long name is never cut; from 920px
|
|
13
|
+
* the mark beside the name and what the kind is for under it.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
.crewlet-make-row {
|
|
17
|
+
container-type: inline-size;
|
|
18
|
+
/* A WORKBENCH: the canvas's dotted field on the sheet itself, one step
|
|
19
|
+
quieter than a canvas that pans, inside a hairline ring. */
|
|
20
|
+
border: 1px solid var(--color-border-default);
|
|
21
|
+
border-radius: var(--radius-lg);
|
|
22
|
+
background-color: var(--color-surface-background);
|
|
23
|
+
background-image: radial-gradient(var(--color-border-default) 1px, transparent 1.2px);
|
|
24
|
+
background-size: var(--spacing-4) var(--spacing-4);
|
|
25
|
+
background-position: calc(var(--spacing-4) / 2) calc(var(--spacing-4) / 2);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.crewlet-make-row__list {
|
|
29
|
+
display: grid;
|
|
30
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
31
|
+
gap: var(--spacing-1);
|
|
32
|
+
margin: 0;
|
|
33
|
+
padding: var(--spacing-1);
|
|
34
|
+
list-style: none;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.crewlet-make-row__cell {
|
|
38
|
+
display: flex;
|
|
39
|
+
min-width: 0;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.crewlet-make-row__item {
|
|
43
|
+
display: flex;
|
|
44
|
+
flex: 1;
|
|
45
|
+
flex-direction: column;
|
|
46
|
+
align-items: center;
|
|
47
|
+
gap: var(--spacing-2);
|
|
48
|
+
min-width: 0;
|
|
49
|
+
box-sizing: border-box;
|
|
50
|
+
padding: var(--spacing-3) var(--spacing-2);
|
|
51
|
+
border: 1px solid transparent;
|
|
52
|
+
border-radius: var(--radius-md);
|
|
53
|
+
color: var(--color-text-primary);
|
|
54
|
+
text-decoration: none;
|
|
55
|
+
outline: none;
|
|
56
|
+
transition:
|
|
57
|
+
background-color var(--motion-duration-fast) var(--motion-easing-out),
|
|
58
|
+
border-color var(--motion-duration-fast) var(--motion-easing-out),
|
|
59
|
+
box-shadow var(--motion-duration-fast) var(--motion-easing-out);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/* THE GLYPH ON ITS KIND'S TINT, the one coloured thing in the item. */
|
|
63
|
+
.crewlet-make-row__mark {
|
|
64
|
+
display: inline-flex;
|
|
65
|
+
flex: none;
|
|
66
|
+
align-items: center;
|
|
67
|
+
justify-content: center;
|
|
68
|
+
width: 32px;
|
|
69
|
+
height: 32px;
|
|
70
|
+
border-radius: var(--radius-md);
|
|
71
|
+
background: var(--crewlet-kind-fill);
|
|
72
|
+
box-shadow: inset 0 0 0 1px var(--crewlet-kind-line);
|
|
73
|
+
color: var(--crewlet-kind-ink);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.crewlet-make-row__words {
|
|
77
|
+
display: flex;
|
|
78
|
+
flex-direction: column;
|
|
79
|
+
align-items: center;
|
|
80
|
+
min-width: 0;
|
|
81
|
+
max-width: 100%;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.crewlet-make-row__name,
|
|
85
|
+
.crewlet-make-row__detail {
|
|
86
|
+
max-width: 100%;
|
|
87
|
+
overflow: hidden;
|
|
88
|
+
text-overflow: ellipsis;
|
|
89
|
+
white-space: nowrap;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.crewlet-make-row__name {
|
|
93
|
+
font-size: var(--font-size-sm);
|
|
94
|
+
font-weight: var(--font-weight-medium);
|
|
95
|
+
line-height: 1.3;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/* WHAT IT IS FOR is the widest step's: on a narrower tray the name alone
|
|
99
|
+
says it, and the details are kept as the item's description. */
|
|
100
|
+
.crewlet-make-row__detail {
|
|
101
|
+
display: none;
|
|
102
|
+
color: var(--color-text-tertiary);
|
|
103
|
+
font-size: var(--font-size-xs);
|
|
104
|
+
line-height: 1.35;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
@container (width >= 560px) {
|
|
108
|
+
.crewlet-make-row__list {
|
|
109
|
+
grid-template-columns: repeat(6, minmax(0, 1fr));
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.crewlet-make-row__item {
|
|
113
|
+
padding: var(--spacing-2) var(--spacing-1);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
@container (width >= 920px) {
|
|
118
|
+
.crewlet-make-row__item {
|
|
119
|
+
flex-direction: row;
|
|
120
|
+
gap: var(--spacing-3);
|
|
121
|
+
padding: var(--spacing-2);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.crewlet-make-row__words {
|
|
125
|
+
align-items: flex-start;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.crewlet-make-row__detail {
|
|
129
|
+
display: block;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/* AN ITEM LIFTS OFF THE BENCH under the pointer as a card: the card's
|
|
134
|
+
ground, the hairline a card is found by and the lightest shadow, and
|
|
135
|
+
nothing inside it moves. */
|
|
136
|
+
a.crewlet-make-row__item:hover {
|
|
137
|
+
border-color: var(--color-border-default);
|
|
138
|
+
background-color: var(--color-surface-subtle);
|
|
139
|
+
box-shadow: var(--shadow-xs);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
a.crewlet-make-row__item:active {
|
|
143
|
+
background-color: var(--color-surface-pressed);
|
|
144
|
+
box-shadow: none;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/* ON ITS OWN EDGE: an item draws a hairline once lifted, so the ring sits on
|
|
148
|
+
it rather than standing off it with a gap between two edges. */
|
|
149
|
+
.crewlet-make-row__item:focus-visible {
|
|
150
|
+
outline: 2px solid var(--color-focus);
|
|
151
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.crewlet-make-row__item--disabled {
|
|
155
|
+
cursor: not-allowed;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
.crewlet-make-row__item--disabled .crewlet-make-row__mark,
|
|
159
|
+
.crewlet-make-row__item--disabled .crewlet-make-row__words {
|
|
160
|
+
opacity: 0.55;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
@media (prefers-reduced-motion: reduce) {
|
|
164
|
+
.crewlet-make-row__item {
|
|
165
|
+
transition: none;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
@@ -26,6 +26,13 @@ export interface ArtifactPanelProps {
|
|
|
26
26
|
onExpandedChange?: ((expanded: boolean) => void) | undefined;
|
|
27
27
|
/** Controls in the head, before expand and close. */
|
|
28
28
|
actions?: ReactNode;
|
|
29
|
+
/**
|
|
30
|
+
* What stays under the body however far it scrolls: the panel's own
|
|
31
|
+
* commit, such as a hand-off's Send. Drawn on a hairline at the panel's
|
|
32
|
+
* foot, never inside the scrolling body, so it is in reach while the
|
|
33
|
+
* reader is at the top of a long form.
|
|
34
|
+
*/
|
|
35
|
+
footer?: ReactNode;
|
|
29
36
|
/**
|
|
30
37
|
* Whether focus moves to the panel's heading when it opens. True when the
|
|
31
38
|
* reader opened it; false for a panel a link opened on arrival, which must
|
|
@@ -56,7 +63,7 @@ export interface ArtifactPanelProps {
|
|
|
56
63
|
* portalled out of it, and the press that closes one of them never reaches
|
|
57
64
|
* this.
|
|
58
65
|
*/
|
|
59
|
-
export declare function ArtifactPanel({ title, icon, onClose, size, expanded, onExpandedChange, actions, focusOnOpen, labels, className, children, }: ArtifactPanelProps): import("react").JSX.Element;
|
|
66
|
+
export declare function ArtifactPanel({ title, icon, onClose, size, expanded, onExpandedChange, actions, footer, focusOnOpen, labels, className, children, }: ArtifactPanelProps): import("react").JSX.Element;
|
|
60
67
|
export interface ArtifactWorkspaceProps {
|
|
61
68
|
/** The open panel, if any: an [ArtifactPanel]. */
|
|
62
69
|
panel?: ReactNode;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { ARTIFACT_PANEL_LABELS, ArtifactPanel, ArtifactWorkspace } from '../chunk-
|
|
1
|
+
export { ARTIFACT_PANEL_LABELS, ArtifactPanel, ArtifactWorkspace } from '../chunk-Y5BD4MTE.js';
|
|
2
2
|
import '../chunk-PQADV6P6.js';
|
|
3
3
|
import '../chunk-4FQT6ZAY.js';
|
|
4
4
|
import '../chunk-BZFWDIV6.js';
|
|
@@ -117,6 +117,15 @@
|
|
|
117
117
|
overscroll-behavior: contain;
|
|
118
118
|
}
|
|
119
119
|
|
|
120
|
+
/* THE FOOT holds the panel's own commit, outside the scrolling body, so it
|
|
121
|
+
stays in reach at every scroll. Its inset is the body's. */
|
|
122
|
+
.crewlet-artifact-panel__foot {
|
|
123
|
+
flex: none;
|
|
124
|
+
padding: var(--spacing-3) var(--spacing-4);
|
|
125
|
+
border-top: 1px solid var(--color-border-default);
|
|
126
|
+
background: var(--color-surface-background);
|
|
127
|
+
}
|
|
128
|
+
|
|
120
129
|
/* NOT ROOM FOR TWO COLUMNS: the panel slides over the artifact's end edge,
|
|
121
130
|
raised off it, rather than squeezing the artifact under a useful width. */
|
|
122
131
|
@container crewlet-artifact-workspace (width < 960px) {
|
package/dist/AuthLayout/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { AuthLayout } from '../chunk-
|
|
1
|
+
export { AuthLayout } from '../chunk-WX2NIG4G.js';
|
|
2
2
|
import '../chunk-7KBNFFM3.js';
|
|
3
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-5QXRI35B.js';
|
|
4
4
|
import '../chunk-AV2DXAEL.js';
|
|
5
5
|
import '../chunk-BHHIIK3M.js';
|
|
6
6
|
import '../chunk-PQADV6P6.js';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { AvatarPicker } from '../chunk-
|
|
1
|
+
export { AvatarPicker } from '../chunk-GYBDPCRC.js';
|
|
2
2
|
import '../chunk-SUXP4OBT.js';
|
|
3
3
|
import '../chunk-K3IJQNB7.js';
|
|
4
|
-
import '../chunk-YEVG2X5R.js';
|
|
5
4
|
import '../chunk-AYKXMIOR.js';
|
|
5
|
+
import '../chunk-YEVG2X5R.js';
|
|
6
6
|
import '../chunk-CCAXYHQS.js';
|
|
7
7
|
import '../chunk-VL6CUNSX.js';
|
|
8
8
|
import '../chunk-RKKO7QHH.js';
|
package/dist/Canvas/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { CANVAS_COMPOSE_CONTEXT, CANVAS_FIT_MAX_ZOOM, CANVAS_FIT_PADDING, CANVAS_FOCUS_CONTEXT, CANVAS_MAX_ZOOM, CANVAS_MIN_ZOOM, CANVAS_PAN_MARGIN, CANVAS_PAN_STEP, CANVAS_REVEAL_PADDING, CANVAS_TAP_SLOP, CANVAS_WHEEL_LINE_PX, CANVAS_WHEEL_ZOOM_PER_PIXEL, CANVAS_ZOOM_CEILING, CANVAS_ZOOM_LIMITS, CANVAS_ZOOM_STEP, Canvas, IDENTITY_VIEW, ShortcutTip, anchorView, beyondSlop, clampPan, clampZoom, fitView, gridOf, panBy, pinchView, regionView, revealView, screenRect, toScreen, toWorld, wheelPixels, wheelZoomFactor, zoomAt, zoomLimits } from '../chunk-
|
|
1
|
+
export { CANVAS_COMPOSE_CONTEXT, CANVAS_FIT_MAX_ZOOM, CANVAS_FIT_PADDING, CANVAS_FOCUS_CONTEXT, CANVAS_MAX_ZOOM, CANVAS_MIN_ZOOM, CANVAS_PAN_MARGIN, CANVAS_PAN_STEP, CANVAS_REVEAL_PADDING, CANVAS_TAP_SLOP, CANVAS_WHEEL_LINE_PX, CANVAS_WHEEL_ZOOM_PER_PIXEL, CANVAS_ZOOM_CEILING, CANVAS_ZOOM_LIMITS, CANVAS_ZOOM_STEP, Canvas, IDENTITY_VIEW, ShortcutTip, anchorView, beyondSlop, clampPan, clampZoom, fitView, gridOf, panBy, pinchView, regionView, revealView, screenRect, toScreen, toWorld, wheelPixels, wheelZoomFactor, zoomAt, zoomLimits } from '../chunk-4BYHAOHH.js';
|
|
2
2
|
import '../chunk-LM3ISVJA.js';
|
|
3
|
-
import '../chunk-SMBKXWML.js';
|
|
4
3
|
import '../chunk-6ZJ3N7QI.js';
|
|
4
|
+
import '../chunk-SMBKXWML.js';
|
|
5
5
|
import '../chunk-OMV5W53A.js';
|
|
6
6
|
import '../chunk-R25RGPUB.js';
|
|
7
7
|
import '../chunk-OG6CL3EB.js';
|
|
@@ -48,9 +48,10 @@
|
|
|
48
48
|
* are counter-scaled by the zoom, so a board's label is readable, its edge is
|
|
49
49
|
* a hairline and its handle is a full pointer target whatever the zoom, while
|
|
50
50
|
* the board itself scales with the canvas. What a board says is held to the
|
|
51
|
-
* room it is drawn in
|
|
51
|
+
* room it is drawn in: a name with too little room is shortened to a few
|
|
52
|
+
* letters, then to the board's number, and only then left out (`boardName`),
|
|
52
53
|
* and a placeholder drops the lines it has no room for rather than spill them
|
|
53
|
-
* over the boards beside it.
|
|
54
|
+
* over the boards beside it (`boardRoom`).
|
|
54
55
|
*/
|
|
55
56
|
import { type ReactNode, type Ref } from 'react';
|
|
56
57
|
import { type CanvasHandle, type CanvasLabels, type CanvasPoint } from '../Canvas/index.js';
|
|
@@ -215,19 +216,32 @@ export interface CanvasBoardProps {
|
|
|
215
216
|
className?: string | undefined;
|
|
216
217
|
}
|
|
217
218
|
/**
|
|
218
|
-
* WHAT A BOARD HAS ROOM TO SAY, from its size on screen
|
|
219
|
-
*
|
|
220
|
-
*
|
|
221
|
-
*
|
|
222
|
-
* [BOARD_TITLE_MIN_WIDTH] goes unnamed until it is zoomed into. `lines` is how
|
|
223
|
-
* many of a placeholder's two lines (its size, then why it is not running) fit
|
|
224
|
-
* inside it at the chrome's own type, so the lines it has no room for are left
|
|
225
|
-
* out rather than clipped at both ends.
|
|
219
|
+
* WHAT A BOARD'S PLACEHOLDER HAS ROOM TO SAY, from its size on screen: how
|
|
220
|
+
* many of its two lines (its size, then why it is not running) fit inside it
|
|
221
|
+
* at the chrome's own type, so the lines it has no room for are left out
|
|
222
|
+
* rather than clipped at both ends.
|
|
226
223
|
*/
|
|
227
224
|
export declare function boardRoom(width: number, height: number): {
|
|
228
|
-
title: boolean;
|
|
229
225
|
lines: 0 | 1 | 2;
|
|
230
226
|
};
|
|
231
|
-
/**
|
|
232
|
-
|
|
227
|
+
/**
|
|
228
|
+
* WHAT A BOARD IS CALLED ABOVE IT, from the room its name row has on screen
|
|
229
|
+
* (`room`, in screen pixels: the board's width, less what the row's other
|
|
230
|
+
* controls take).
|
|
231
|
+
*
|
|
232
|
+
* Its name, while at least [BOARD_NAME_MIN_CHARS] letters and an ellipsis
|
|
233
|
+
* fit, so a shortened name still says which board it is ("Hom..." rather than
|
|
234
|
+
* "H..." or a lone ellipsis); `whole` is false once the name may be shortened,
|
|
235
|
+
* so the full name can be offered as a tooltip. Narrower than that, its place
|
|
236
|
+
* in the design ("3"), which a reader can count to and which stays legible
|
|
237
|
+
* down to a single digit's width. Narrower still, nothing: a mark that narrow
|
|
238
|
+
* reads as a stray scratch. The name row is counter-scaled, so the type is the
|
|
239
|
+
* same size at every zoom and only the room changes.
|
|
240
|
+
*/
|
|
241
|
+
export declare function boardName(title: string, position: number, room: number): {
|
|
242
|
+
text: string;
|
|
243
|
+
whole: boolean;
|
|
244
|
+
} | null;
|
|
245
|
+
/** The fewest letters a shortened board name keeps before its ellipsis. */
|
|
246
|
+
export declare const BOARD_NAME_MIN_CHARS = 3;
|
|
233
247
|
export declare function CanvasBoard({ label, boards, notes, renderBoard, maxLive, minLiveWidth, editable, minSide, maxSide, onBoardChange, onNoteChange, onNoteRemove, onNoteCreate, onBoardCreate, onBoardRemove, onOpen, onActivate, selected: heldSelection, onSelectedChange, controlsExtra, toolbar, labels, canvasLabels, canvasRef, className, }: CanvasBoardProps): import("react").JSX.Element;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import './CanvasBoard.css';
|
|
2
|
-
export {
|
|
2
|
+
export { BOARD_NAME_MIN_CHARS, CanvasBoard, CANVAS_BOARD_MIN_ZOOM, CANVAS_NOTE_COLORS, TITLE_GLYPH_EM, boardName, boardRoom, titleSize, } from './CanvasBoard.js';
|
|
3
3
|
export type { CanvasBoardItem, CanvasBoardLabels, CanvasBoardNote, CanvasBoardProps, CanvasBoardRect, CanvasBoardSelection, CanvasBoardTool, CanvasNoteColor, } from './CanvasBoard.js';
|
|
4
4
|
export { CANVAS_BOARD_MAX_LIVE, CANVAS_BOARD_MIN_LIVE_WIDTH, liveBoards } from './budget.js';
|
|
5
5
|
export type { BoardFrame } from './budget.js';
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { BOARD_NAME_MIN_CHARS, CANVAS_BOARD_MAX_LIVE, CANVAS_BOARD_MIN_LIVE_WIDTH, CANVAS_BOARD_MIN_ZOOM, CANVAS_NOTE_COLORS, CanvasBoard, TITLE_GLYPH_EM, boardName, boardRoom, liveBoards, titleSize } from '../chunk-FHHYXZSP.js';
|
|
2
2
|
import '../chunk-5SZGKSGL.js';
|
|
3
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-7VAUGG6B.js';
|
|
4
4
|
import '../chunk-PGRPNDWM.js';
|
|
5
|
-
import '../chunk-
|
|
5
|
+
import '../chunk-4BYHAOHH.js';
|
|
6
6
|
import '../chunk-LM3ISVJA.js';
|
|
7
|
-
import '../chunk-SMBKXWML.js';
|
|
8
7
|
import '../chunk-6ZJ3N7QI.js';
|
|
8
|
+
import '../chunk-SMBKXWML.js';
|
|
9
9
|
import '../chunk-OMV5W53A.js';
|
|
10
10
|
import '../chunk-R25RGPUB.js';
|
|
11
11
|
import '../chunk-OG6CL3EB.js';
|
|
@@ -82,19 +82,26 @@
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
/*
|
|
85
|
-
* HOVER, then SELECTION
|
|
86
|
-
* the
|
|
87
|
-
*
|
|
85
|
+
* HOVER, then SELECTION: one screen pixel each, over the hairline. Hover is
|
|
86
|
+
* the selected edge, the accent mixed toward the canvas, so pointing at a
|
|
87
|
+
* board previews the pick without claiming it; selection is the full accent,
|
|
88
|
+
* crisp, with its four corners drawn, which are what say "this one" on a
|
|
89
|
+
* canvas where a board's own content can be any colour. It was two pixels,
|
|
90
|
+
* the focus ring's weight in the focus ring's hue, so a picked board and the
|
|
91
|
+
* board the keyboard was on read alike; the 2px ring is the live board's now
|
|
92
|
+
* alone ([data-active], below), which takes the pointer like a focused frame.
|
|
93
|
+
* Hovering a board's name is hovering its board, which is how a reader finds
|
|
94
|
+
* the board a name belongs to on a crowded canvas.
|
|
88
95
|
*/
|
|
89
96
|
.crewlet-canvas-board__board:hover .crewlet-canvas-board__body,
|
|
90
97
|
.crewlet-canvas-board__note:hover {
|
|
91
|
-
outline: calc(1px * var(--crewlet-canvas-board-unzoom)) solid var(--color-
|
|
98
|
+
outline: calc(1px * var(--crewlet-canvas-board-unzoom)) solid var(--color-border-selected);
|
|
92
99
|
outline-offset: 0;
|
|
93
100
|
}
|
|
94
101
|
|
|
95
102
|
.crewlet-canvas-board__board[data-selected] .crewlet-canvas-board__body,
|
|
96
103
|
.crewlet-canvas-board__note[data-selected] {
|
|
97
|
-
outline: calc(
|
|
104
|
+
outline: calc(1px * var(--crewlet-canvas-board-unzoom)) solid var(--color-brand-accent);
|
|
98
105
|
outline-offset: 0;
|
|
99
106
|
}
|
|
100
107
|
|
|
@@ -202,7 +209,7 @@
|
|
|
202
209
|
transform-origin: bottom left;
|
|
203
210
|
}
|
|
204
211
|
|
|
205
|
-
/* A board drawn too narrow
|
|
212
|
+
/* A board drawn too narrow for even its number goes unnamed (`boardName`). */
|
|
206
213
|
.crewlet-canvas-board__board[data-untitled] > .crewlet-canvas-board__chrome {
|
|
207
214
|
display: none;
|
|
208
215
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { CanvasToolbar, toolForKey } from '../chunk-
|
|
1
|
+
export { CanvasToolbar, toolForKey } from '../chunk-7VAUGG6B.js';
|
|
2
2
|
import '../chunk-PGRPNDWM.js';
|
|
3
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-4BYHAOHH.js';
|
|
4
4
|
import '../chunk-LM3ISVJA.js';
|
|
5
|
-
import '../chunk-SMBKXWML.js';
|
|
6
5
|
import '../chunk-6ZJ3N7QI.js';
|
|
6
|
+
import '../chunk-SMBKXWML.js';
|
|
7
7
|
import '../chunk-OMV5W53A.js';
|
|
8
8
|
import '../chunk-R25RGPUB.js';
|
|
9
9
|
import '../chunk-OG6CL3EB.js';
|
package/dist/Card/index.js
CHANGED
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
* `box-shadow: <shadow>, none` is invalid at computed-value time, so the
|
|
43
43
|
* declaration is dropped and the light card loses the elevation the list was
|
|
44
44
|
* built around. Alone on a pseudo element the same token is valid in both
|
|
45
|
-
* themes, and it composes with
|
|
45
|
+
* themes, and it composes with a chosen card's edge rather than replacing
|
|
46
46
|
* whichever was declared last, exactly as the rail does.
|
|
47
47
|
*/
|
|
48
48
|
.crewlet-card--elevated::after {
|
|
@@ -116,8 +116,8 @@
|
|
|
116
116
|
/*
|
|
117
117
|
* THE FLUSH RECIPE. The slots reach the card's edges, and the clip is what
|
|
118
118
|
* makes the header's hairline and a table's own corners follow the radius
|
|
119
|
-
* instead of crossing it.
|
|
120
|
-
*
|
|
119
|
+
* instead of crossing it. A chosen card's edge and fill survive the clip
|
|
120
|
+
* because they are its own border and background.
|
|
121
121
|
*/
|
|
122
122
|
.crewlet-card--flush {
|
|
123
123
|
overflow: hidden;
|
|
@@ -200,29 +200,34 @@
|
|
|
200
200
|
|
|
201
201
|
/* One ring, over the card's own boundary rather than 2px off it, which is two
|
|
202
202
|
edges with a gap between them: the rule every field keeps (see Input.css).
|
|
203
|
-
|
|
204
|
-
|
|
203
|
+
On a chosen card it covers the selected edge, and the selected fill inside
|
|
204
|
+
it still says the card is chosen. */
|
|
205
205
|
.crewlet-card.is-interactive:focus-visible {
|
|
206
206
|
outline: 2px solid var(--color-focus);
|
|
207
207
|
outline-offset: var(--size-focus-ring-inset-offset);
|
|
208
208
|
}
|
|
209
209
|
|
|
210
210
|
/*
|
|
211
|
-
* Chosen
|
|
212
|
-
*
|
|
213
|
-
*
|
|
211
|
+
* Chosen, as every chosen option in the package is drawn: the selected edge
|
|
212
|
+
* (the accent mixed toward the card) over the selected fill. It was the full
|
|
213
|
+
* accent border under --shadow-selection, a second accent ring two pixels
|
|
214
|
+
* deep, which is the focus ring's weight in the focus ring's hue, so a grid
|
|
215
|
+
* of cards showed the pick and the keyboard's place alike. The fill is laid
|
|
216
|
+
* as an IMAGE over the card's own surface rather than in place of it, so the
|
|
217
|
+
* card keeps its ground and the tint composites over it, as it does over a
|
|
218
|
+
* row.
|
|
214
219
|
*/
|
|
215
220
|
.crewlet-card.is-selected {
|
|
216
|
-
|
|
217
|
-
|
|
221
|
+
border-color: var(--color-border-selected);
|
|
222
|
+
background-image: linear-gradient(var(--color-surface-selected), var(--color-surface-selected));
|
|
218
223
|
}
|
|
219
224
|
|
|
220
225
|
/* ---- Rails ------------------------------------------------------------- */
|
|
221
226
|
|
|
222
227
|
/*
|
|
223
228
|
* A state down the leading edge. Drawn as a pseudo element rather than a
|
|
224
|
-
* border or an inset shadow, so it composes with the elevated shadow and
|
|
225
|
-
*
|
|
229
|
+
* border or an inset shadow, so it composes with the elevated shadow and a
|
|
230
|
+
* chosen card's edge instead of replacing whichever one was declared last.
|
|
226
231
|
*/
|
|
227
232
|
.crewlet-card--rail-info::before,
|
|
228
233
|
.crewlet-card--rail-warning::before,
|
package/dist/ChangeMark/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { ChangeMark } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { ChangeMark } from '../chunk-47JQAGRV.js';
|
|
2
|
+
import '../chunk-LFSIKGRQ.js';
|
|
3
3
|
import '../chunk-Z7JYG5TF.js';
|
|
4
4
|
import '../chunk-AYKXMIOR.js';
|
|
5
5
|
import '../chunk-6ZJ3N7QI.js';
|
package/dist/Checkbox/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export { Checkbox, CheckboxGroup } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { Checkbox, CheckboxGroup } from '../chunk-PJIPUEJ3.js';
|
|
2
|
+
import '../chunk-IUYUS2SO.js';
|
|
3
|
+
import '../chunk-YSGLEHND.js';
|
|
3
4
|
import '../chunk-PQADV6P6.js';
|
|
4
5
|
import '../chunk-4FQT6ZAY.js';
|
|
5
6
|
import '../chunk-BZFWDIV6.js';
|
|
@@ -36,6 +36,16 @@
|
|
|
36
36
|
border-color var(--motion-duration-fast) var(--motion-easing-default);
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
+
/*
|
|
40
|
+
* AN OPTION WITH A DETAIL STARTS AT ITS TOP. Laid out as tiles (a host's grid
|
|
41
|
+
* of columns), the options in one row stretch to the tallest, and centred
|
|
42
|
+
* text put a one-line detail's label lower than its neighbour's two-line
|
|
43
|
+
* one. A column of options is unchanged: each is as tall as its own text.
|
|
44
|
+
*/
|
|
45
|
+
.crewlet-choice-buttons__option:has(.crewlet-choice-buttons__detail) {
|
|
46
|
+
align-items: flex-start;
|
|
47
|
+
}
|
|
48
|
+
|
|
39
49
|
.crewlet-choice-buttons__option:hover:not([aria-disabled='true']) {
|
|
40
50
|
background: var(--color-surface-elevated);
|
|
41
51
|
border-color: var(--color-border-strong-hover);
|
package/dist/ChoiceList/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { ChoiceList } from '../chunk-
|
|
1
|
+
export { ChoiceList } from '../chunk-WZGYIVYH.js';
|
|
2
2
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* A short list of answers in one bordered box: a radio, the label with a line
|
|
3
3
|
* of detail under it, and a tag at the row's end. The selected row takes the
|
|
4
|
-
* accent's soft
|
|
4
|
+
* selected fill (the accent's soft tint), so the answer reads at a glance; the
|
|
5
|
+
* radio is the mark that clears 3:1, and no row is ever ringed in the accent,
|
|
6
|
+
* which is the focus ring's colour.
|
|
5
7
|
*/
|
|
6
8
|
.crewlet-choice-list {
|
|
7
9
|
/* The platform's radio, sized here so a panel can line up with the text beside it. */
|
|
@@ -66,21 +68,47 @@
|
|
|
66
68
|
}
|
|
67
69
|
|
|
68
70
|
.crewlet-choice-list__row.is-checked {
|
|
69
|
-
background: var(--color-
|
|
71
|
+
background: var(--color-surface-selected);
|
|
70
72
|
}
|
|
71
73
|
|
|
72
74
|
.crewlet-choice-list.is-disabled .crewlet-choice-list__row {
|
|
73
75
|
cursor: not-allowed;
|
|
74
76
|
}
|
|
75
77
|
|
|
78
|
+
/*
|
|
79
|
+
* THE RADIO IS DRAWN, not the platform's. In a dark palette the platform's
|
|
80
|
+
* own radio fills an unchosen answer with a grey disc, which beside the one
|
|
81
|
+
* chosen read as a second, muted choice. Drawn here, an unchosen answer is an
|
|
82
|
+
* empty ring on the control boundary (3:1 on every ground) and the chosen one
|
|
83
|
+
* the accent ring round an accent dot. Forced colours hand it back to the
|
|
84
|
+
* platform, which draws it in the system's own colours.
|
|
85
|
+
*/
|
|
76
86
|
.crewlet-choice-list__radio {
|
|
87
|
+
appearance: none;
|
|
88
|
+
display: inline-grid;
|
|
89
|
+
place-content: center;
|
|
90
|
+
flex: none;
|
|
91
|
+
box-sizing: border-box;
|
|
77
92
|
width: var(--crewlet-choice-list-radio-size);
|
|
78
93
|
height: var(--crewlet-choice-list-radio-size);
|
|
79
94
|
margin: 3px 0 0;
|
|
80
|
-
|
|
95
|
+
border: 1px solid var(--color-border-control);
|
|
96
|
+
border-radius: 50%;
|
|
97
|
+
background: transparent;
|
|
81
98
|
cursor: inherit;
|
|
82
99
|
}
|
|
83
100
|
|
|
101
|
+
.crewlet-choice-list__radio:checked {
|
|
102
|
+
border-color: var(--color-brand-accent);
|
|
103
|
+
background: radial-gradient(circle, var(--color-brand-accent) 0 3px, transparent 3.5px);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
@media (forced-colors: active) {
|
|
107
|
+
.crewlet-choice-list__radio {
|
|
108
|
+
appearance: auto;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
84
112
|
/* A radio draws its own edge, so the ring sits on it, as a checkbox's does. */
|
|
85
113
|
.crewlet-choice-list__radio:focus-visible {
|
|
86
114
|
outline: 2px solid var(--color-focus);
|
|
@@ -105,13 +133,16 @@
|
|
|
105
133
|
overflow-wrap: anywhere;
|
|
106
134
|
}
|
|
107
135
|
|
|
136
|
+
/* A tag says something ABOUT an answer ("Suggested"), so it is set in the
|
|
137
|
+
tertiary ink: in the accent ink it was a second accent mark on the chosen
|
|
138
|
+
row, beside the radio and the fill that already say which one is chosen. */
|
|
108
139
|
.crewlet-choice-list__tag {
|
|
109
140
|
padding-top: 2px;
|
|
110
141
|
font-size: var(--font-size-2xs);
|
|
111
142
|
font-weight: 500;
|
|
112
143
|
letter-spacing: 0.05em;
|
|
113
144
|
text-transform: uppercase;
|
|
114
|
-
color: var(--color-
|
|
145
|
+
color: var(--color-text-tertiary);
|
|
115
146
|
white-space: nowrap;
|
|
116
147
|
}
|
|
117
148
|
|
|
@@ -131,7 +162,7 @@
|
|
|
131
162
|
padding: var(--spacing-1) var(--spacing-2) var(--spacing-3) calc(var(--spacing-2) + var(--crewlet-choice-list-radio-size) + var(--spacing-3));
|
|
132
163
|
border-end-start-radius: var(--radius-sm);
|
|
133
164
|
border-end-end-radius: var(--radius-sm);
|
|
134
|
-
background: var(--color-
|
|
165
|
+
background: var(--color-surface-selected);
|
|
135
166
|
}
|
|
136
167
|
|
|
137
168
|
.crewlet-choice-list__footer {
|