@crewlethq/ui 0.84.1 → 0.85.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 +40 -2
- package/dist/Accordion/index.js +1 -1
- package/dist/AgentHandoffPanel/index.js +2 -2
- package/dist/ArtifactBar/index.js +1 -1
- package/dist/AttentionList/AttentionList.d.ts +82 -0
- package/dist/AttentionList/index.d.ts +3 -0
- package/dist/AttentionList/index.js +9 -0
- package/dist/AttentionList-LVX7KRET.css +212 -0
- package/dist/AvatarPicker/index.js +2 -2
- package/dist/ChangeList/index.js +2 -2
- package/dist/ChoiceCards/ChoiceCards.d.ts +35 -6
- package/dist/ChoiceCards/index.d.ts +1 -1
- package/dist/ChoiceCards/index.js +1 -1
- package/dist/{ChoiceCards-TVMBO3HZ.css → ChoiceCards-KHJW2FKO.css} +49 -0
- package/dist/ChoiceList/ChoiceList.d.ts +2 -2
- package/dist/ChoiceList/index.js +1 -1
- package/dist/{ChoiceList-JN4PPNFW.css → ChoiceList-ZQMZTEZX.css} +33 -17
- package/dist/CodeBlock/index.js +2 -2
- package/dist/ColorSwatch/index.js +2 -2
- package/dist/ContrastBadge/index.js +2 -2
- package/dist/ContrastHelp/index.js +3 -3
- package/dist/Copyable/index.js +1 -1
- package/dist/{Copyable-IS3MHMPL.css → Copyable-P5AMRHFX.css} +18 -4
- package/dist/DataGrid/index.js +1 -1
- package/dist/{DataGrid-Q26F2V5Q.css → DataGrid-SAHEL4SN.css} +57 -0
- package/dist/DeepWorkCard/index.js +4 -4
- package/dist/Disclosure/Disclosure.d.ts +10 -1
- package/dist/Disclosure/index.js +1 -1
- package/dist/{Disclosure-D727FN5X.css → Disclosure-RJSKKO7Z.css} +20 -0
- package/dist/ListDetail/index.js +1 -1
- package/dist/{ListDetail-JGESKTR7.css → ListDetail-Q7SFVKSO.css} +12 -0
- package/dist/LogoSlot/index.js +3 -3
- package/dist/MarkdownEditor/index.js +1 -1
- package/dist/MemberPicker/MemberPicker.d.ts +86 -0
- package/dist/MemberPicker/index.d.ts +3 -0
- package/dist/MemberPicker/index.js +11 -0
- package/dist/MemberPicker-ZD35VEK6.css +162 -0
- package/dist/MergeConflicts/index.js +1 -1
- package/dist/ProposalCard/index.js +3 -3
- package/dist/RunChip/index.js +3 -3
- package/dist/SegmentedControl/index.js +1 -1
- package/dist/{SegmentedControl-B7XCUOML.css → SegmentedControl-7GY2KM44.css} +11 -0
- package/dist/SetupWizard/index.js +3 -3
- package/dist/ShareDialog/index.js +2 -2
- package/dist/{StepList-A4YVU4JI.css → StepList-OAJ45IBX.css} +12 -1
- package/dist/Stepper/StepList.d.ts +7 -4
- package/dist/Stepper/index.js +1 -1
- package/dist/ThemeSwitcher/index.js +1 -1
- package/dist/TimeRangePicker/index.js +1 -1
- package/dist/VersionCompare/index.js +1 -1
- package/dist/{chunk-IYI6HWKN.js → chunk-35CKF77R.js} +3 -3
- package/dist/{chunk-K6RWEQ6P.js → chunk-3BVNNQZY.js} +2 -2
- package/dist/{chunk-AOJ6ZA77.js → chunk-3MFRTZH6.js} +1 -1
- package/dist/{chunk-QSWQJX27.js → chunk-4ME4J3YY.js} +1 -1
- package/dist/{chunk-6FBPFG3C.js → chunk-6EZX26BD.js} +1 -1
- package/dist/chunk-AELKT34H.js +121 -0
- package/dist/{chunk-X7VZQKIW.js → chunk-AQ7ZV3CH.js} +1 -1
- package/dist/{chunk-XNC3M4IN.js → chunk-E2QPZGLG.js} +1 -1
- package/dist/{chunk-T5GBTXNC.js → chunk-ETNQYT5O.js} +1 -1
- package/dist/{chunk-36WK24AI.js → chunk-EVM6GYZ2.js} +1 -1
- package/dist/{chunk-B7NX425Z.js → chunk-JDMJVVVQ.js} +12 -4
- package/dist/chunk-KA4RBKQV.js +148 -0
- package/dist/{chunk-ABRWL5FJ.js → chunk-L2QRKIL4.js} +3 -2
- package/dist/{chunk-P7HMY3BQ.js → chunk-M33DABTW.js} +2 -2
- package/dist/{chunk-LVJGN5II.js → chunk-NAHA62WD.js} +3 -1
- package/dist/{chunk-6SFDL4QH.js → chunk-P3LNA6G4.js} +1 -1
- package/dist/{chunk-O4VTQMEF.js → chunk-SNJM5KPV.js} +1 -1
- package/dist/{chunk-WMO722J2.js → chunk-TBQFZV4H.js} +1 -1
- package/dist/{chunk-RJWO2PC5.js → chunk-TMML7BHT.js} +14 -5
- package/dist/{chunk-DD7RBNT4.js → chunk-XH55NRHO.js} +1 -1
- package/dist/{chunk-6RW2MUTY.js → chunk-XU7RQNT6.js} +1 -1
- package/dist/{chunk-AQNP3KQU.js → chunk-Y7PPKQFQ.js} +1 -1
- package/dist/generated/index.d.ts +2 -0
- package/dist/generated/index.js +75 -73
- package/dist/index.js +75 -73
- package/dist/styles.css +600 -30
- package/package.json +3 -3
- package/dist/{chunk-22CU7V4J.js → chunk-K2HEYQJL.js} +1 -1
- package/dist/{chunk-REEZQCML.js → chunk-VIX3GZCD.js} +0 -0
- package/dist/{chunk-2ZSCHQOA.js → chunk-WMSXPF7T.js} +1 -1
|
@@ -6,8 +6,14 @@
|
|
|
6
6
|
* which is the focus ring's colour.
|
|
7
7
|
*/
|
|
8
8
|
.crewlet-choice-list {
|
|
9
|
-
/*
|
|
10
|
-
|
|
9
|
+
/*
|
|
10
|
+
* THE COMPACT CONTROL STEP, the box a compact Checkbox draws beside the same
|
|
11
|
+
* 13px words: a control takes the step of the text it sits beside (16px
|
|
12
|
+
* beside 14px, 14px beside 13px), and at 13px this radio matched no other
|
|
13
|
+
* control in the kit, so a list nested under a card's 16px radio, or beside
|
|
14
|
+
* a compact checkbox, drew a third size.
|
|
15
|
+
*/
|
|
16
|
+
--crewlet-choice-list-radio-size: 14px;
|
|
11
17
|
/* The step between two answers. Every row's pointer target reaches half of it. */
|
|
12
18
|
--crewlet-choice-list-gap: var(--spacing-1);
|
|
13
19
|
/*
|
|
@@ -133,7 +139,8 @@
|
|
|
133
139
|
box-sizing: border-box;
|
|
134
140
|
width: var(--crewlet-choice-list-radio-size);
|
|
135
141
|
height: var(--crewlet-choice-list-radio-size);
|
|
136
|
-
|
|
142
|
+
/* Centred on the label's first line: its 13px in the body's leading. */
|
|
143
|
+
margin: calc((var(--font-size-compact) * var(--font-line-height-body) - var(--crewlet-choice-list-radio-size)) / 2) 0 0;
|
|
137
144
|
border: 1px solid var(--color-border-control);
|
|
138
145
|
border-radius: 50%;
|
|
139
146
|
background: transparent;
|
|
@@ -175,28 +182,37 @@
|
|
|
175
182
|
overflow-wrap: anywhere;
|
|
176
183
|
}
|
|
177
184
|
|
|
178
|
-
/*
|
|
185
|
+
/*
|
|
186
|
+
* WHY A DISABLED CHOICE CANNOT BE MADE, on a line of its own under the
|
|
187
|
+
* detail, in the warning ink, as a ChoiceCards card puts it on its own row.
|
|
188
|
+
* Run on after the detail, it read as the detail's next clause, and in a
|
|
189
|
+
* narrow column it wrapped wherever the detail happened to end.
|
|
190
|
+
*/
|
|
179
191
|
.crewlet-choice-list__reason {
|
|
192
|
+
display: block;
|
|
180
193
|
color: var(--color-feedback-warning-ink);
|
|
181
194
|
}
|
|
182
195
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
row, beside the radio and the fill that already say which one is chosen. */
|
|
196
|
+
/* A tag says something ABOUT an answer ("Recommended"), so it is set in a
|
|
197
|
+
quiet ink: in the accent ink it was a second accent mark on the chosen row,
|
|
198
|
+
beside the radio and the fill that already say which one is chosen. It is
|
|
199
|
+
the pill a ChoiceCards card draws its tag in, so one word beside a choice's
|
|
200
|
+
name reads the same in a list as on a card in the same step, where it was an
|
|
201
|
+
11px capital label here and a pill there. It stands on the label's line. */
|
|
190
202
|
.crewlet-choice-list__tag {
|
|
191
|
-
padding
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
color: var(--color-text-tertiary);
|
|
203
|
+
padding: 0 var(--spacing-2);
|
|
204
|
+
border: 1px solid var(--color-border-default);
|
|
205
|
+
border-radius: var(--radius-pill);
|
|
206
|
+
color: var(--color-text-secondary);
|
|
207
|
+
font-size: var(--font-size-xs);
|
|
197
208
|
white-space: nowrap;
|
|
198
209
|
}
|
|
199
210
|
|
|
211
|
+
/* On the selected fill the default edge all but vanishes in light, so the tag takes the strong one, as a chosen card's does. */
|
|
212
|
+
.crewlet-choice-list__row.is-checked .crewlet-choice-list__tag {
|
|
213
|
+
border-color: var(--color-border-strong);
|
|
214
|
+
}
|
|
215
|
+
|
|
200
216
|
/* A SELECTED CHOICE'S PANEL is part of the choice: it continues the row's
|
|
201
217
|
fill under it, and its content starts where the label does, not under the
|
|
202
218
|
radio. */
|
package/dist/CodeBlock/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { ColorSwatch } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { ColorSwatch } from '../chunk-6EZX26BD.js';
|
|
2
|
+
import '../chunk-ETNQYT5O.js';
|
|
3
3
|
import '../chunk-STJ7QBC3.js';
|
|
4
4
|
import '../chunk-DTIW4CHZ.js';
|
|
5
5
|
import '../chunk-7W3LYIOC.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { ContrastBadge, ContrastLevelTag, contrastLevel, contrastRatio, formatContrastRatio } from '../chunk-
|
|
2
|
-
import '../chunk-LBGKLYBY.js';
|
|
1
|
+
export { ContrastBadge, ContrastLevelTag, contrastLevel, contrastRatio, formatContrastRatio } from '../chunk-WMSXPF7T.js';
|
|
3
2
|
import '../chunk-7W3LYIOC.js';
|
|
3
|
+
import '../chunk-LBGKLYBY.js';
|
|
4
4
|
import '../chunk-CYQBDZ6M.js';
|
|
5
5
|
import '../chunk-UT6CW3C7.js';
|
|
6
6
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { ContrastHelp } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { ContrastHelp } from '../chunk-TBQFZV4H.js';
|
|
2
|
+
import '../chunk-WMSXPF7T.js';
|
|
3
|
+
import '../chunk-7W3LYIOC.js';
|
|
3
4
|
import '../chunk-LBGKLYBY.js';
|
|
4
5
|
import '../chunk-EC6EUIAD.js';
|
|
5
|
-
import '../chunk-7W3LYIOC.js';
|
|
6
6
|
import '../chunk-CYQBDZ6M.js';
|
|
7
7
|
import '../chunk-L72URIHR.js';
|
|
8
8
|
import '../chunk-OMV5W53A.js';
|
package/dist/Copyable/index.js
CHANGED
|
@@ -78,11 +78,15 @@
|
|
|
78
78
|
|
|
79
79
|
/* ---- inline ------------------------------------------------------------ */
|
|
80
80
|
|
|
81
|
+
/* INLINE TAKES THE ROW'S OWN REGISTER: in a detail row it is one of the
|
|
82
|
+
row's values, so it is their size and ink, in the mono face. At a fixed
|
|
83
|
+
12px in the secondary ink, an address was the one value in its list a step
|
|
84
|
+
smaller and quieter than the values around it. */
|
|
81
85
|
.crewlet-copyable--inline .crewlet-copyable__value {
|
|
82
|
-
font-size:
|
|
86
|
+
font-size: inherit;
|
|
83
87
|
background: transparent;
|
|
84
88
|
padding: 0;
|
|
85
|
-
color:
|
|
89
|
+
color: inherit;
|
|
86
90
|
}
|
|
87
91
|
|
|
88
92
|
/* ---- block ------------------------------------------------------------- */
|
|
@@ -103,13 +107,23 @@
|
|
|
103
107
|
padding: var(--spacing-2) var(--spacing-3);
|
|
104
108
|
}
|
|
105
109
|
|
|
110
|
+
/*
|
|
111
|
+
* A BLOCK SHOWS ITS VALUE WHOLE, wrapped at any character and with every
|
|
112
|
+
* space kept: it is the variant for an address a reader must allowlist or a
|
|
113
|
+
* command they must check before running it. Held to one line, it scrolled
|
|
114
|
+
* past a phone's width behind an ellipsis, with no scrollbar to say there was
|
|
115
|
+
* more, and the reader saw "https://example.com/webho…" of the address they
|
|
116
|
+
* were asked to copy into a vendor's form.
|
|
117
|
+
*/
|
|
106
118
|
.crewlet-copyable--block .crewlet-copyable__value {
|
|
107
119
|
font-size: var(--font-size-compact);
|
|
108
120
|
color: var(--color-text-primary);
|
|
109
121
|
background: transparent;
|
|
110
122
|
padding: 0;
|
|
111
|
-
white-space:
|
|
112
|
-
overflow
|
|
123
|
+
white-space: pre-wrap;
|
|
124
|
+
overflow: visible;
|
|
125
|
+
overflow-wrap: anywhere;
|
|
126
|
+
text-overflow: clip;
|
|
113
127
|
flex: 1;
|
|
114
128
|
}
|
|
115
129
|
|
package/dist/DataGrid/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { ChooserList, ColumnChooser, DATA_GRID_ICON_TRACK, DataGrid, columnChoicesOf, countDataGridRows, fitGridColumns, nextGridSort, parseGridSort, useAnyDataGridDriving, useDataGridDriving } from '../chunk-
|
|
1
|
+
export { ChooserList, ColumnChooser, DATA_GRID_ICON_TRACK, DataGrid, columnChoicesOf, countDataGridRows, fitGridColumns, nextGridSort, parseGridSort, useAnyDataGridDriving, useDataGridDriving } from '../chunk-L2QRKIL4.js';
|
|
2
2
|
import '../chunk-YQ7Q52XU.js';
|
|
3
3
|
import '../chunk-YJQXESOJ.js';
|
|
4
4
|
import '../chunk-PPUR46MK.js';
|
|
@@ -665,6 +665,63 @@ button.crewlet-data-grid__row-link {
|
|
|
665
665
|
overflow-wrap: anywhere;
|
|
666
666
|
}
|
|
667
667
|
|
|
668
|
+
/* A VALUE THAT LEADS WITH A PICTURE IS NAMED ON ITS WORDS' LINE. The name
|
|
669
|
+
stands on the value's first baseline, and a row of a mark beside two lines
|
|
670
|
+
(a vendor's mark beside a name and its host) reads its baseline off its
|
|
671
|
+
first item, the picture, whose baseline is its bottom edge: the name stood
|
|
672
|
+
on the second line. The words after the picture take part in baseline
|
|
673
|
+
alignment instead, so the row's baseline is theirs; beside a picture no
|
|
674
|
+
taller than they are, they keep the place they had.
|
|
675
|
+
ONLY A PICTURE WITH NO WORDS OF ITS OWN: an svg or an img, or a box that
|
|
676
|
+
holds nothing but one. A monogram avatar or an avatar stack has its
|
|
677
|
+
initials' baseline already, and its name stood on its line; matched by its
|
|
678
|
+
role, the shorter words beside it rose to the top of the row, off the
|
|
679
|
+
picture's centre. */
|
|
680
|
+
:where(.crewlet-data-grid[data-stacked])
|
|
681
|
+
.crewlet-data-grid__cell
|
|
682
|
+
> *
|
|
683
|
+
> :is(svg, img, :has(> :is(svg, img)):not(:has(> :not(svg, img)))):first-child
|
|
684
|
+
+ * {
|
|
685
|
+
align-self: baseline;
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
/* THE ROW'S ACTIONS STAND ON ITS FIRST LINE, at its end, as a card's head
|
|
689
|
+
carries its menu. On a line of their own after every value they sat alone
|
|
690
|
+
under the names, with nothing beside them to say whose they were. */
|
|
691
|
+
:where(.crewlet-data-grid[data-stacked]:not([data-phone-rows='compact']))
|
|
692
|
+
.crewlet-data-grid__row:has(> .crewlet-data-grid__cell--action) {
|
|
693
|
+
display: grid;
|
|
694
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
695
|
+
align-items: start;
|
|
696
|
+
column-gap: var(--spacing-2);
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
:where(.crewlet-data-grid[data-stacked]:not([data-phone-rows='compact']))
|
|
700
|
+
.crewlet-data-grid__row:has(> .crewlet-data-grid__cell--action)
|
|
701
|
+
> .crewlet-data-grid__cell:not(.crewlet-data-grid__cell--action) {
|
|
702
|
+
grid-column: 1;
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
/* ONLY THE FIRST LINE SHARES ITS WIDTH WITH THE ACTIONS. Their track is sized
|
|
706
|
+
to them, and a line held to the other track gave that width up with nothing
|
|
707
|
+
beside it: every line of a card ended a third of a phone's row short of its
|
|
708
|
+
edge, and its value wrapped. Every line after the first (a value with
|
|
709
|
+
nothing in it draws none) spans the row. */
|
|
710
|
+
:where(.crewlet-data-grid[data-stacked]:not([data-phone-rows='compact']))
|
|
711
|
+
.crewlet-data-grid__row:has(> .crewlet-data-grid__cell--action)
|
|
712
|
+
> .crewlet-data-grid__cell:not(.crewlet-data-grid__cell--action):not(:empty)
|
|
713
|
+
~ .crewlet-data-grid__cell:not(.crewlet-data-grid__cell--action) {
|
|
714
|
+
grid-column: 1 / -1;
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
:where(.crewlet-data-grid[data-stacked]:not([data-phone-rows='compact']))
|
|
718
|
+
.crewlet-data-grid__row
|
|
719
|
+
> .crewlet-data-grid__cell--action {
|
|
720
|
+
grid-column: 2;
|
|
721
|
+
grid-row: 1;
|
|
722
|
+
align-self: center;
|
|
723
|
+
}
|
|
724
|
+
|
|
668
725
|
/* ---- THE COMPACT ROW (`phoneRows="compact"`) ---------------------------
|
|
669
726
|
TWO LINES, NO LABELS: what the row is, then its marks. One flex run that
|
|
670
727
|
breaks once: the lead cells first, a zero-height full-width `::after`
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
export { DEEP_WORK_CARD_LABELS, DEEP_WORK_STATES, DEEP_WORK_STATE_LABELS, DeepWorkCard } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-RQFRRPV6.js';
|
|
1
|
+
export { DEEP_WORK_CARD_LABELS, DEEP_WORK_STATES, DEEP_WORK_STATE_LABELS, DeepWorkCard } from '../chunk-35CKF77R.js';
|
|
2
|
+
import '../chunk-TMML7BHT.js';
|
|
4
3
|
import '../chunk-ZWCK4N4L.js';
|
|
4
|
+
import '../chunk-RQFRRPV6.js';
|
|
5
5
|
import '../chunk-FLW5U7YS.js';
|
|
6
6
|
import '../chunk-LBGKLYBY.js';
|
|
7
7
|
import '../chunk-U2IQNDDR.js';
|
|
8
8
|
import '../chunk-AV2DXAEL.js';
|
|
9
9
|
import '../chunk-CYQBDZ6M.js';
|
|
10
|
-
import '../chunk-
|
|
10
|
+
import '../chunk-NAHA62WD.js';
|
|
11
11
|
import '../chunk-DGXZ635L.js';
|
|
12
12
|
import '../chunk-XSPCITPN.js';
|
|
13
13
|
import '../chunk-ULYHDP7U.js';
|
|
@@ -35,6 +35,15 @@ export interface DisclosureProps extends Omit<HTMLAttributes<HTMLDivElement>, 't
|
|
|
35
35
|
lazy?: boolean | undefined;
|
|
36
36
|
variant?: DisclosureVariant | undefined;
|
|
37
37
|
size?: DisclosureSize | undefined;
|
|
38
|
+
/**
|
|
39
|
+
* Its chevron and its panel start on the line its box starts on: the
|
|
40
|
+
* trigger's inset is taken back at the start, so only its hover ground and
|
|
41
|
+
* ring reach past the line, and the panel takes no inset of its own. For a
|
|
42
|
+
* section opened under a line of text (a request's arguments under the
|
|
43
|
+
* sentence that asks for it), whose chevron and content then stand on the
|
|
44
|
+
* words' own edge, as a flush Button does.
|
|
45
|
+
*/
|
|
46
|
+
flush?: boolean | undefined;
|
|
38
47
|
/**
|
|
39
48
|
* The heading the trigger is wrapped in. Defaults to the level the
|
|
40
49
|
* surrounding surface declares, so the same section is an `h3` on a page
|
|
@@ -53,4 +62,4 @@ export interface DisclosureProps extends Omit<HTMLAttributes<HTMLDivElement>, 't
|
|
|
53
62
|
* controls outside its summary. Two expanders that behave the same and look
|
|
54
63
|
* different is the specific thing a component library exists to stop.
|
|
55
64
|
*/
|
|
56
|
-
export declare function Disclosure({ title, meta, count, mono, actions, open: controlledOpen, defaultOpen, onOpenChange, lazy, variant, size, headingLevel, className, children, ...rest }: DisclosureProps): import("react").JSX.Element;
|
|
65
|
+
export declare function Disclosure({ title, meta, count, mono, actions, open: controlledOpen, defaultOpen, onOpenChange, lazy, variant, size, flush, headingLevel, className, children, ...rest }: DisclosureProps): import("react").JSX.Element;
|
package/dist/Disclosure/index.js
CHANGED
|
@@ -217,6 +217,26 @@
|
|
|
217
217
|
padding: var(--spacing-1) var(--spacing-2);
|
|
218
218
|
}
|
|
219
219
|
|
|
220
|
+
/*
|
|
221
|
+
* FLUSH: the chevron and the panel start on the line the words around the
|
|
222
|
+
* section start on. The trigger's start inset is taken back (its hover ground
|
|
223
|
+
* and its inset ring reach into the gutter instead, as a flush Button's do),
|
|
224
|
+
* and the panel keeps no inset of either side. Inset, a section opened under
|
|
225
|
+
* a sentence put its chevron and its content a step in from that sentence.
|
|
226
|
+
*/
|
|
227
|
+
.crewlet-disclosure--flush .crewlet-disclosure__trigger {
|
|
228
|
+
margin-inline-start: calc(-1 * var(--spacing-2));
|
|
229
|
+
width: calc(100% + var(--spacing-2));
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
.crewlet-disclosure--flush .crewlet-disclosure__bar > .crewlet-disclosure__trigger {
|
|
233
|
+
width: auto;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
.crewlet-disclosure--flush .crewlet-disclosure__panel {
|
|
237
|
+
padding-inline: 0;
|
|
238
|
+
}
|
|
239
|
+
|
|
220
240
|
/*
|
|
221
241
|
* An aside: what was considered, not what was decided. The rule down its edge
|
|
222
242
|
* is what lets a reader skip the block by its shape.
|
package/dist/ListDetail/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { ListDetail } from '../chunk-
|
|
1
|
+
export { ListDetail } from '../chunk-SNJM5KPV.js';
|
|
2
2
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -74,6 +74,18 @@
|
|
|
74
74
|
border-right: 1px solid var(--color-border-default);
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
+
/* A DIRECTORY RUNS TO THE HAIRLINE. A DirectoryList is navigation: its lines
|
|
78
|
+
draw their own inset and their hover and selected grounds, as the rail's
|
|
79
|
+
do, and its groups keep their own step before the scrollbar. Inside the
|
|
80
|
+
list's inset as well, a line's state ended 60px before the hairline, a
|
|
81
|
+
column of nothing between the word and the line it stands against. So a
|
|
82
|
+
list pane holding one gives its end inset back, and the lines run to the
|
|
83
|
+
hairline as the rail's run to its edge. Folded to one pane, the pane takes
|
|
84
|
+
the screen's inset again (below). */
|
|
85
|
+
.crewlet-list-detail__list:has(> .crewlet-directory) {
|
|
86
|
+
padding-right: 0;
|
|
87
|
+
}
|
|
88
|
+
|
|
77
89
|
.crewlet-list-detail__detail {
|
|
78
90
|
display: flex;
|
|
79
91
|
flex-direction: column;
|
package/dist/LogoSlot/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { LogoSlot, LogoSlotGroup } from '../chunk-
|
|
1
|
+
export { LogoSlot, LogoSlotGroup } from '../chunk-P3LNA6G4.js';
|
|
2
2
|
import '../chunk-KQWJWTED.js';
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-LBGKLYBY.js';
|
|
3
|
+
import '../chunk-WMSXPF7T.js';
|
|
5
4
|
import '../chunk-7W3LYIOC.js';
|
|
5
|
+
import '../chunk-LBGKLYBY.js';
|
|
6
6
|
import '../chunk-CYQBDZ6M.js';
|
|
7
7
|
import '../chunk-DGXZ635L.js';
|
|
8
8
|
import '../chunk-XSPCITPN.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { MARKDOWN_FORMATS, MARKDOWN_TEXT_FORMATS, MarkdownEditor, formatMarkdown, insertMarkdown, markdownWords } from '../chunk-TQKQRS2J.js';
|
|
2
2
|
import '../chunk-NXFTCPF6.js';
|
|
3
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-EVM6GYZ2.js';
|
|
4
4
|
import '../chunk-AZYE7NR4.js';
|
|
5
5
|
import '../chunk-MVKUE4FI.js';
|
|
6
6
|
import '../chunk-EGMQURBR.js';
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
/** One member a group holds: an agent, a person. */
|
|
3
|
+
export interface MemberPickerMember {
|
|
4
|
+
/** Stable identity, and what the value names. */
|
|
5
|
+
key: string;
|
|
6
|
+
/** The member's name: its checkbox's name. */
|
|
7
|
+
name: string;
|
|
8
|
+
/** One quiet line under the name: what it does, its role. */
|
|
9
|
+
detail?: ReactNode;
|
|
10
|
+
/** Its face, decorative beside the name: an avatar. */
|
|
11
|
+
avatar?: ReactNode;
|
|
12
|
+
}
|
|
13
|
+
/** A group of members granted as one: a team, whose grant reaches members who join it later. */
|
|
14
|
+
export interface MemberPickerGroup {
|
|
15
|
+
key: string;
|
|
16
|
+
/** The group's name: its checkbox's name. */
|
|
17
|
+
label: string;
|
|
18
|
+
members: readonly MemberPickerMember[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* What is chosen: whole groups, members on their own, and members left out of
|
|
22
|
+
* a chosen group. A member is in when its group is chosen and it is not left
|
|
23
|
+
* out, or when it is chosen on its own.
|
|
24
|
+
*/
|
|
25
|
+
export interface MemberPickerValue {
|
|
26
|
+
groups: readonly string[];
|
|
27
|
+
members: readonly string[];
|
|
28
|
+
except: readonly string[];
|
|
29
|
+
}
|
|
30
|
+
export interface MemberPickerLabels {
|
|
31
|
+
/** Under a chosen group's name. */
|
|
32
|
+
later: string;
|
|
33
|
+
/** A member's mark while its group reaches it: "Through Product". */
|
|
34
|
+
through: (group: string) => string;
|
|
35
|
+
/** A member's mark once left out of its chosen group. */
|
|
36
|
+
leftOut: string;
|
|
37
|
+
/** The live count: "4 of 6 agents". */
|
|
38
|
+
summary: (chosen: number, total: number) => string;
|
|
39
|
+
/** A group's member count: "6 agents". */
|
|
40
|
+
count: (n: number) => string;
|
|
41
|
+
/** The expand control's name: "Show the agents in Product". */
|
|
42
|
+
expand: (group: string) => string;
|
|
43
|
+
}
|
|
44
|
+
export declare const MEMBER_PICKER_LABELS: MemberPickerLabels;
|
|
45
|
+
export interface MemberPickerProps {
|
|
46
|
+
/** Names the picker for a screen reader: "Who gets Sentry". */
|
|
47
|
+
label: string;
|
|
48
|
+
groups: readonly MemberPickerGroup[];
|
|
49
|
+
/** Members in no group, listed after the groups. */
|
|
50
|
+
ungrouped?: readonly MemberPickerMember[] | undefined;
|
|
51
|
+
value: MemberPickerValue;
|
|
52
|
+
onChange: (value: MemberPickerValue) => void;
|
|
53
|
+
/** Groups open at first; every group with a member chosen on its own or left out opens too. */
|
|
54
|
+
defaultOpen?: readonly string[] | undefined;
|
|
55
|
+
labels?: Partial<MemberPickerLabels> | undefined;
|
|
56
|
+
className?: string | undefined;
|
|
57
|
+
}
|
|
58
|
+
/** Every member the value reaches, each once. */
|
|
59
|
+
export declare function chosenMembers(groups: readonly MemberPickerGroup[], ungrouped: readonly MemberPickerMember[], value: MemberPickerValue): Set<string>;
|
|
60
|
+
/**
|
|
61
|
+
* Who gets something, as one list: each group a row with a three-state box,
|
|
62
|
+
* its member count and, once chosen, that it reaches members who join later;
|
|
63
|
+
* each group opens to its members, every member a row with its face, its name
|
|
64
|
+
* and one quiet line. A member a chosen group reaches says so ("Through
|
|
65
|
+
* Product"), and unticking it leaves it out of that group's grant rather than
|
|
66
|
+
* dropping the group; a member of an unchosen group is chosen on its own. The
|
|
67
|
+
* count of everyone reached stays at the top as the choice moves.
|
|
68
|
+
*
|
|
69
|
+
* GROUP FIRST, MEMBERS AS OVERRIDES, because a group's grant is the one that
|
|
70
|
+
* survives the organization changing: it reaches whoever joins, where a list
|
|
71
|
+
* of names reaches only the names. So choosing a group clears the overrides
|
|
72
|
+
* inside it, and unchoosing it drops them too, leaving no stale exception.
|
|
73
|
+
*
|
|
74
|
+
* A GROUP'S BOX SAYS WHETHER THE GROUP ITSELF IS CHOSEN: ticked when it is
|
|
75
|
+
* and it reaches every member, mixed when it is chosen with members left out,
|
|
76
|
+
* or when only some of its members are chosen on their own (even all of them,
|
|
77
|
+
* since a member who joins later would not be), and empty when nobody in it
|
|
78
|
+
* is reached. Ticking a mixed group chooses it whole.
|
|
79
|
+
*
|
|
80
|
+
* NATIVE CHECKBOXES, a group's partly chosen state set as the DOM's own
|
|
81
|
+
* `indeterminate`, so a screen reader says "mixed" and Space toggles as the
|
|
82
|
+
* platform does. The open control is the kit's IconButton with
|
|
83
|
+
* `aria-expanded`. Ids come from positions, never keys, since a key may hold
|
|
84
|
+
* a space and an id reference list splits on whitespace.
|
|
85
|
+
*/
|
|
86
|
+
export declare function MemberPicker({ label, groups, ungrouped, value, onChange, defaultOpen, labels: overrides, className, }: MemberPickerProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { MEMBER_PICKER_LABELS, MemberPicker, chosenMembers } from '../chunk-KA4RBKQV.js';
|
|
2
|
+
import '../chunk-YQ7Q52XU.js';
|
|
3
|
+
import '../chunk-O7N6W52M.js';
|
|
4
|
+
import '../chunk-PGCLHYVP.js';
|
|
5
|
+
import '../chunk-TUEM2XIW.js';
|
|
6
|
+
import '../chunk-4ITETIGZ.js';
|
|
7
|
+
import '../chunk-UAUP6XGK.js';
|
|
8
|
+
import '../chunk-PQADV6P6.js';
|
|
9
|
+
import '../chunk-2G355KDJ.js';
|
|
10
|
+
import '../chunk-UT6CW3C7.js';
|
|
11
|
+
import '../chunk-ODEQTPFM.js';
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Who gets something, as one list: a group row with its box, its name and
|
|
3
|
+
* its count, opening to its members, each a row of face, name and one quiet
|
|
4
|
+
* line. Rows stand at the kit's compact list height; the only colour is the
|
|
5
|
+
* box's own accent and a left-out member's quieter ink.
|
|
6
|
+
*
|
|
7
|
+
* A LIST'S TYPE, NOT A FORM'S: names in the 13px every list and table row
|
|
8
|
+
* sets a name in, at the medium weight a group's name takes, and every box the
|
|
9
|
+
* compact Checkbox's (14px beside 13px words). At the body's 14px, with a
|
|
10
|
+
* 16px box over 14px ones, it read a step larger than every list around it.
|
|
11
|
+
*/
|
|
12
|
+
.crewlet-member-picker {
|
|
13
|
+
display: grid;
|
|
14
|
+
gap: var(--spacing-2);
|
|
15
|
+
min-width: 0;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.crewlet-member-picker__summary {
|
|
19
|
+
margin: 0;
|
|
20
|
+
color: var(--color-text-secondary);
|
|
21
|
+
font-size: var(--font-size-compact);
|
|
22
|
+
font-variant-numeric: tabular-nums;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.crewlet-member-picker__list,
|
|
26
|
+
.crewlet-member-picker__members {
|
|
27
|
+
display: grid;
|
|
28
|
+
margin: 0;
|
|
29
|
+
padding: 0;
|
|
30
|
+
list-style: none;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.crewlet-member-picker__list {
|
|
34
|
+
border: 1px solid var(--color-border-default);
|
|
35
|
+
border-radius: var(--radius-md);
|
|
36
|
+
overflow: hidden;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.crewlet-member-picker__group + .crewlet-member-picker__group {
|
|
40
|
+
border-top: 1px solid var(--color-border-default);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.crewlet-member-picker__group-row {
|
|
44
|
+
display: grid;
|
|
45
|
+
grid-template-columns: auto minmax(0, 1fr) auto;
|
|
46
|
+
align-items: center;
|
|
47
|
+
gap: var(--spacing-2);
|
|
48
|
+
padding: var(--spacing-2) var(--spacing-3) var(--spacing-2) var(--spacing-1);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/* The open control is the kit's small ghost IconButton; only its chevron
|
|
52
|
+
turns here, a quarter turn once the group is open. */
|
|
53
|
+
.crewlet-member-picker__toggle svg {
|
|
54
|
+
transition: transform var(--motion-duration-fast) var(--motion-easing-default);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.crewlet-member-picker__group.is-open .crewlet-member-picker__toggle svg {
|
|
58
|
+
transform: rotate(90deg);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
@media (prefers-reduced-motion: reduce) {
|
|
62
|
+
.crewlet-member-picker__toggle svg {
|
|
63
|
+
transition: none;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.crewlet-member-picker__count {
|
|
68
|
+
color: var(--color-text-tertiary);
|
|
69
|
+
font-size: var(--font-size-xs);
|
|
70
|
+
font-variant-numeric: tabular-nums;
|
|
71
|
+
white-space: nowrap;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.crewlet-member-picker__members {
|
|
75
|
+
border-top: 1px solid var(--color-border-default);
|
|
76
|
+
background: var(--color-surface-subtle);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.crewlet-member-picker__member {
|
|
80
|
+
display: grid;
|
|
81
|
+
grid-template-columns: auto auto minmax(0, 1fr) auto;
|
|
82
|
+
align-items: center;
|
|
83
|
+
gap: var(--spacing-2);
|
|
84
|
+
min-height: var(--size-control-lg);
|
|
85
|
+
/* Each member's box under its group's, past the open control and its gap. */
|
|
86
|
+
padding: var(--spacing-1) var(--spacing-3) var(--spacing-1) calc(var(--spacing-1) + var(--size-control-sm) + var(--spacing-2));
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/* A MEMBER'S BOX STANDS UNDER ITS GROUP'S. The bare Checkbox centres its box
|
|
90
|
+
on the square the pointer floor allows, which set the box half the
|
|
91
|
+
difference in from the row's edge, a few pixels right of the group's box
|
|
92
|
+
above it. That inset is taken back, and the pointer square reaches into
|
|
93
|
+
the row's padding instead. */
|
|
94
|
+
.crewlet-member-picker__members:not(.is-ungrouped) .crewlet-checkbox--bare {
|
|
95
|
+
margin-inline-start: calc((var(--crewlet-checkbox-size) - var(--size-target-min)) / 2);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.crewlet-member-picker__members.is-ungrouped {
|
|
99
|
+
border-top: 0;
|
|
100
|
+
background: transparent;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.crewlet-member-picker__members.is-ungrouped .crewlet-member-picker__member {
|
|
104
|
+
padding-inline-start: var(--spacing-3);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.crewlet-member-picker__avatar {
|
|
108
|
+
display: inline-flex;
|
|
109
|
+
flex: none;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/* The name and its line label the member's box, so they take the pointer a
|
|
113
|
+
Checkbox's own words take. */
|
|
114
|
+
.crewlet-member-picker__text {
|
|
115
|
+
display: flex;
|
|
116
|
+
flex-direction: column;
|
|
117
|
+
min-width: 0;
|
|
118
|
+
cursor: pointer;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.crewlet-member-picker__name {
|
|
122
|
+
overflow: hidden;
|
|
123
|
+
color: var(--color-text-primary);
|
|
124
|
+
font-size: var(--font-size-compact);
|
|
125
|
+
text-overflow: ellipsis;
|
|
126
|
+
white-space: nowrap;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.crewlet-member-picker__detail {
|
|
130
|
+
overflow: hidden;
|
|
131
|
+
color: var(--color-text-tertiary);
|
|
132
|
+
font-size: var(--font-size-xs);
|
|
133
|
+
text-overflow: ellipsis;
|
|
134
|
+
white-space: nowrap;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.crewlet-member-picker__mark {
|
|
138
|
+
color: var(--color-text-secondary);
|
|
139
|
+
font-size: var(--font-size-xs);
|
|
140
|
+
white-space: nowrap;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.crewlet-member-picker__member.is-left-out .crewlet-member-picker__name,
|
|
144
|
+
.crewlet-member-picker__mark.is-left-out {
|
|
145
|
+
color: var(--color-text-tertiary);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
@media (width < 480px) {
|
|
149
|
+
.crewlet-member-picker__member {
|
|
150
|
+
grid-template-columns: auto auto minmax(0, 1fr);
|
|
151
|
+
padding-inline-start: var(--spacing-3);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.crewlet-member-picker__mark {
|
|
155
|
+
grid-column: 3;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/* A group's name is the row's title: the medium weight, at the list's 13px. */
|
|
160
|
+
.crewlet-member-picker__group-row .crewlet-checkbox__label {
|
|
161
|
+
font-weight: var(--font-weight-medium);
|
|
162
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { PROPOSAL_CARD_LABELS, PROPOSAL_FAILURE_OUTCOMES, PROPOSAL_STATES, PROPOSAL_TONES, ProposalCard } from '../chunk-
|
|
1
|
+
export { PROPOSAL_CARD_LABELS, PROPOSAL_FAILURE_OUTCOMES, PROPOSAL_STATES, PROPOSAL_TONES, ProposalCard } from '../chunk-M33DABTW.js';
|
|
2
2
|
import '../chunk-ZWCK4N4L.js';
|
|
3
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-3MFRTZH6.js';
|
|
4
4
|
import '../chunk-LR4IWUWQ.js';
|
|
5
5
|
import '../chunk-FLW5U7YS.js';
|
|
6
6
|
import '../chunk-LBGKLYBY.js';
|
|
@@ -8,7 +8,7 @@ import '../chunk-U2IQNDDR.js';
|
|
|
8
8
|
import '../chunk-AV2DXAEL.js';
|
|
9
9
|
import '../chunk-YQ7Q52XU.js';
|
|
10
10
|
import '../chunk-CYQBDZ6M.js';
|
|
11
|
-
import '../chunk-
|
|
11
|
+
import '../chunk-NAHA62WD.js';
|
|
12
12
|
import '../chunk-O7N6W52M.js';
|
|
13
13
|
import '../chunk-PGCLHYVP.js';
|
|
14
14
|
import '../chunk-DGXZ635L.js';
|