@crewlethq/ui 0.84.2 → 0.86.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 +53 -5
- 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/DataView/index.js +2 -2
- package/dist/DeepWorkCard/index.js +3 -3
- 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/KeyValueRows/KeyValueRows.d.ts +125 -0
- package/dist/KeyValueRows/index.d.ts +3 -0
- package/dist/KeyValueRows/index.js +12 -0
- package/dist/KeyValueRows-US5KW7JK.css +44 -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/PresenterView/index.js +2 -2
- package/dist/ProposalCard/index.js +3 -3
- package/dist/RailList/RailList.d.ts +74 -0
- package/dist/RailList/index.d.ts +3 -0
- package/dist/RailList/index.js +17 -0
- package/dist/RailList-N2ZBPRM2.css +97 -0
- package/dist/RelatedRow/index.js +2 -2
- package/dist/RichEditor/index.js +1 -1
- 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 +3 -3
- 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/TableCells/TableCells.d.ts +60 -0
- package/dist/TableCells/index.d.ts +2 -2
- package/dist/TableCells/index.js +2 -1
- package/dist/{TableCells-TKSNLRK3.css → TableCells-ZALZLLEF.css} +28 -0
- package/dist/Text/Text.d.ts +25 -3
- package/dist/Text/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-CV2LU2T2.js → chunk-35CKF77R.js} +2 -2
- package/dist/{chunk-AUSFKGKL.js → chunk-3AMWXJQX.js} +1 -1
- package/dist/{chunk-AFLS26AC.js → chunk-3CALM534.js} +36 -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-EAHEJNVJ.js → chunk-CL3FWLDO.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-QP2P6GDQ.js → chunk-O5CEG7TQ.js} +14 -0
- package/dist/{chunk-6SFDL4QH.js → chunk-P3LNA6G4.js} +1 -1
- package/dist/chunk-REWKR3S4.js +73 -0
- package/dist/{chunk-WMO722J2.js → chunk-TBQFZV4H.js} +1 -1
- package/dist/{chunk-RJWO2PC5.js → chunk-TMML7BHT.js} +14 -5
- package/dist/chunk-TRZS7DLB.js +159 -0
- package/dist/{chunk-K6RWEQ6P.js → chunk-WRZPO4YL.js} +2 -2
- 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 +4 -0
- package/dist/generated/index.js +92 -88
- package/dist/index.js +92 -88
- package/dist/styles.css +763 -30
- package/package.json +3 -3
- package/dist/{Editor-5D5Z3LBQ.js → Editor-VGNB35NJ.js} +1 -1
- package/dist/{chunk-22CU7V4J.js → chunk-K2HEYQJL.js} +1 -1
- package/dist/{chunk-REEZQCML.js → chunk-PAGITACP.js} +0 -0
- package/dist/{chunk-LMEMH6DO.js → chunk-WCJTOKTY.js} +1 -1
- 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`
|
package/dist/DataView/index.js
CHANGED
|
@@ -4,11 +4,11 @@ import '../chunk-K4LZXSKZ.js';
|
|
|
4
4
|
import '../chunk-7K6LVM5I.js';
|
|
5
5
|
import '../chunk-WANKINXG.js';
|
|
6
6
|
import '../chunk-ZXXZESCD.js';
|
|
7
|
+
import '../chunk-YGRTX67J.js';
|
|
7
8
|
import '../chunk-STJ7QBC3.js';
|
|
8
9
|
import '../chunk-DTIW4CHZ.js';
|
|
9
|
-
import '../chunk-YGRTX67J.js';
|
|
10
|
-
import '../chunk-EE3DJMSQ.js';
|
|
11
10
|
import '../chunk-NXFTCPF6.js';
|
|
11
|
+
import '../chunk-EE3DJMSQ.js';
|
|
12
12
|
import '../chunk-EC6EUIAD.js';
|
|
13
13
|
import '../chunk-EJNJMHQG.js';
|
|
14
14
|
import '../chunk-RE3FBGQQ.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { DEEP_WORK_CARD_LABELS, DEEP_WORK_STATES, DEEP_WORK_STATE_LABELS, DeepWorkCard } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { DEEP_WORK_CARD_LABELS, DEEP_WORK_STATES, DEEP_WORK_STATE_LABELS, DeepWorkCard } from '../chunk-35CKF77R.js';
|
|
2
|
+
import '../chunk-TMML7BHT.js';
|
|
3
3
|
import '../chunk-ZWCK4N4L.js';
|
|
4
4
|
import '../chunk-RQFRRPV6.js';
|
|
5
5
|
import '../chunk-FLW5U7YS.js';
|
|
@@ -7,7 +7,7 @@ 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.
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
/** One key and its value: a header and what it carries, a variable and what it is set to. */
|
|
3
|
+
export interface KeyValueRow {
|
|
4
|
+
/**
|
|
5
|
+
* Stable across edits, and unique in the list: the row's identity while its
|
|
6
|
+
* key is typed, emptied or repeated. Two rows may share a key; never an id.
|
|
7
|
+
*/
|
|
8
|
+
id: string;
|
|
9
|
+
key: string;
|
|
10
|
+
value: string;
|
|
11
|
+
}
|
|
12
|
+
/** Every word the rows say, beyond the names of their two columns. */
|
|
13
|
+
export interface KeyValueRowsLabels {
|
|
14
|
+
/** Names a row's key field: "Header 2". */
|
|
15
|
+
key: (position: number) => string;
|
|
16
|
+
/** Names a row's value field by its key: "Value for Authorization", or "Value for header 2" before one is typed. */
|
|
17
|
+
value: (key: string, position: number) => string;
|
|
18
|
+
/** Names a row's remove button: "Remove Authorization". */
|
|
19
|
+
remove: (key: string, position: number) => string;
|
|
20
|
+
/** The add action's words: "Add header". */
|
|
21
|
+
add: string;
|
|
22
|
+
/** Said once a row is removed, since the row's going is otherwise silent: "Removed Authorization". */
|
|
23
|
+
removed: (key: string, position: number) => string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* The rows' words in English, made from the two column names: `Header` and
|
|
27
|
+
* `Value` give "Header 2", "Value for Authorization", "Remove Authorization"
|
|
28
|
+
* and "Add header". A caller whose key column is an acronym (`URL`) or not in
|
|
29
|
+
* English passes its own `labels`.
|
|
30
|
+
*/
|
|
31
|
+
export declare function keyValueRowsLabels(keyLabel: string, valueLabel?: string): KeyValueRowsLabels;
|
|
32
|
+
interface KeyValueRowsBaseProps<T extends KeyValueRow> {
|
|
33
|
+
/**
|
|
34
|
+
* What the list is: "Headers", "Environment variables". The group's legend,
|
|
35
|
+
* read on entering it.
|
|
36
|
+
*/
|
|
37
|
+
label: string;
|
|
38
|
+
/**
|
|
39
|
+
* The legend is kept for assistive technology and drawn for nobody, where
|
|
40
|
+
* the column head or a heading right above already names the list.
|
|
41
|
+
*/
|
|
42
|
+
hideLabel?: boolean | undefined;
|
|
43
|
+
/** The key column's head, and the name each key field is called by: "Header", "Variable". */
|
|
44
|
+
keyLabel: string;
|
|
45
|
+
/** The value column's head. "Value" by default. */
|
|
46
|
+
valueLabel?: string | undefined;
|
|
47
|
+
value: readonly T[];
|
|
48
|
+
onChange: (next: T[]) => void;
|
|
49
|
+
keyPlaceholder?: string | undefined;
|
|
50
|
+
/** The value field's placeholder, the same for every row or per row (a stored secret says so). */
|
|
51
|
+
valuePlaceholder?: string | ((row: T) => string | undefined) | undefined;
|
|
52
|
+
/**
|
|
53
|
+
* The values are secrets (a token, a password): each value field hides what
|
|
54
|
+
* is typed, and no browser offers a saved password for it.
|
|
55
|
+
*/
|
|
56
|
+
secret?: boolean | undefined;
|
|
57
|
+
/**
|
|
58
|
+
* A row whose key may not change, such as one already saved: its key field
|
|
59
|
+
* is read only, and its value and its remove button still work.
|
|
60
|
+
*/
|
|
61
|
+
keyReadOnly?: ((row: T) => boolean) | undefined;
|
|
62
|
+
/** Why a row's key was refused, said under that key and linked to it. */
|
|
63
|
+
keyError?: ((row: T, index: number) => ReactNode) | undefined;
|
|
64
|
+
/** Why a row's value was refused, said under that value and linked to it. */
|
|
65
|
+
valueError?: ((row: T, index: number) => ReactNode) | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* What the list says while it holds no row, in place of the rows. Left out,
|
|
68
|
+
* an empty list is its legend and its add action.
|
|
69
|
+
*/
|
|
70
|
+
empty?: ReactNode;
|
|
71
|
+
/** Where the keys come from, or what shape they take, under the add action. */
|
|
72
|
+
helper?: ReactNode;
|
|
73
|
+
/** Why the list as a whole was refused. */
|
|
74
|
+
error?: ReactNode;
|
|
75
|
+
disabled?: boolean | undefined;
|
|
76
|
+
/** Words in place of the ones `keyValueRowsLabels` makes from `keyLabel` and `valueLabel`. */
|
|
77
|
+
labels?: Partial<KeyValueRowsLabels> | undefined;
|
|
78
|
+
className?: string | undefined;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* A blank row for the add action. Optional while a row is nothing but its id,
|
|
82
|
+
* key and value, when the list makes `{ id, key: '', value: '' }` itself;
|
|
83
|
+
* required once the caller's rows carry a field of their own that a blank row
|
|
84
|
+
* must set.
|
|
85
|
+
*
|
|
86
|
+
* AN EMPTY LIST NAMES NO ROW TYPE. `value={[]}` infers `never`, which no row
|
|
87
|
+
* is assignable to, so a test of assignability alone asked an empty list for
|
|
88
|
+
* a `createRow` it has no use for. A list whose row type was never inferred
|
|
89
|
+
* makes its own blank rows too.
|
|
90
|
+
*/
|
|
91
|
+
type RowMaker<T extends KeyValueRow> = [T] extends [never] ? {
|
|
92
|
+
createRow?: (() => T) | undefined;
|
|
93
|
+
} : KeyValueRow extends T ? {
|
|
94
|
+
createRow?: (() => T) | undefined;
|
|
95
|
+
} : {
|
|
96
|
+
createRow: () => T;
|
|
97
|
+
};
|
|
98
|
+
export type KeyValueRowsProps<T extends KeyValueRow = KeyValueRow> = KeyValueRowsBaseProps<T> & RowMaker<T>;
|
|
99
|
+
/**
|
|
100
|
+
* Keys and their values, edited as rows under one column head: request
|
|
101
|
+
* headers, environment variables, any list of names and what each is set to.
|
|
102
|
+
*
|
|
103
|
+
* ONE HEAD OVER THE COLUMNS, SO EVERY ROW IS THE SAME ROW. The key and value
|
|
104
|
+
* columns are named once, above the first row, and each field's own name is
|
|
105
|
+
* read rather than drawn ("Header 2", "Value for Authorization"). A label
|
|
106
|
+
* drawn on the first row only stood that row taller than the rest, and the
|
|
107
|
+
* value and the remove button beside it lost the line they shared.
|
|
108
|
+
*
|
|
109
|
+
* AN ERROR MOVES NOTHING BESIDE IT. Every row stands on its fields' top edge,
|
|
110
|
+
* so a refused key grows its own cell downward and the value and the remove
|
|
111
|
+
* button stay level with the key's field.
|
|
112
|
+
*
|
|
113
|
+
* THE REMOVE BUTTON IS THE FIELDS' HEIGHT, a square at the control step, so a
|
|
114
|
+
* row is one line of three controls. Add is a flush quiet action under the
|
|
115
|
+
* rows, its words on the fields' own edge.
|
|
116
|
+
*
|
|
117
|
+
* FOCUS NEVER FALLS TO THE PAGE. Add puts it in the new row's key; Remove
|
|
118
|
+
* moves it to the row that took that row's place, else the one before, else
|
|
119
|
+
* Add, and says what went.
|
|
120
|
+
*
|
|
121
|
+
* Controlled: the rows are the caller's, and every edit hands back a new
|
|
122
|
+
* list with each untouched row as it was.
|
|
123
|
+
*/
|
|
124
|
+
export declare function KeyValueRows<T extends KeyValueRow = KeyValueRow>(props: KeyValueRowsProps<T>): import("react").JSX.Element;
|
|
125
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { KeyValueRows, keyValueRowsLabels } from '../chunk-TRZS7DLB.js';
|
|
2
|
+
import '../chunk-O7N6W52M.js';
|
|
3
|
+
import '../chunk-PGCLHYVP.js';
|
|
4
|
+
import '../chunk-DGXZ635L.js';
|
|
5
|
+
import '../chunk-XSPCITPN.js';
|
|
6
|
+
import '../chunk-TUEM2XIW.js';
|
|
7
|
+
import '../chunk-4ITETIGZ.js';
|
|
8
|
+
import '../chunk-UAUP6XGK.js';
|
|
9
|
+
import '../chunk-PQADV6P6.js';
|
|
10
|
+
import '../chunk-2G355KDJ.js';
|
|
11
|
+
import '../chunk-UT6CW3C7.js';
|
|
12
|
+
import '../chunk-ODEQTPFM.js';
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* KeyValueRows: keys and their values as rows under one column head
|
|
3
|
+
* (KeyValueRows.tsx).
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/* The rows, then Add under them, a row's gap apart. */
|
|
7
|
+
.crewlet-key-value-rows__body,
|
|
8
|
+
.crewlet-key-value-rows__table {
|
|
9
|
+
display: flex;
|
|
10
|
+
flex-direction: column;
|
|
11
|
+
gap: var(--spacing-2);
|
|
12
|
+
min-width: 0;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/*
|
|
16
|
+
* EVERY ROW STANDS ON ITS FIELDS' TOP EDGE, so a key's error grows its own
|
|
17
|
+
* cell downward and nothing beside it moves. The last track is the remove
|
|
18
|
+
* button's, a square the fields' height, and the head keeps it empty so the
|
|
19
|
+
* value's name stands over the value column.
|
|
20
|
+
*/
|
|
21
|
+
.crewlet-key-value-rows__head,
|
|
22
|
+
.crewlet-key-value-rows__row {
|
|
23
|
+
display: grid;
|
|
24
|
+
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) var(--size-control-md);
|
|
25
|
+
align-items: start;
|
|
26
|
+
gap: var(--spacing-2);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/* The head stands over the first row at a field label's distance from its field. */
|
|
30
|
+
.crewlet-key-value-rows__head {
|
|
31
|
+
margin-block-end: calc(var(--spacing-1) - var(--spacing-2));
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.crewlet-key-value-rows__empty {
|
|
35
|
+
margin: 0;
|
|
36
|
+
font-size: var(--font-size-compact);
|
|
37
|
+
line-height: var(--font-line-height-normal);
|
|
38
|
+
color: var(--color-text-secondary);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* Add hugs its words, on the fields' start edge, rather than spanning the list. */
|
|
42
|
+
.crewlet-key-value-rows__add {
|
|
43
|
+
display: flex;
|
|
44
|
+
}
|
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';
|