@crewlethq/ui 0.39.0 → 0.40.1
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 +47 -1
- package/dist/AppShell/AppShell.d.ts +13 -2
- package/dist/AppShell/index.js +1 -1
- package/dist/{AppShell-NDU4XMGF.css → AppShell-VE2MAV42.css} +71 -7
- package/dist/ArtifactBar/index.js +6 -5
- package/dist/AvatarPicker/index.js +10 -6
- package/dist/CatalogTile/index.js +1 -1
- package/dist/{CatalogTile-TGR2ZZVQ.css → CatalogTile-XL4XLFUH.css} +8 -4
- package/dist/CharacterPicker/index.js +2 -2
- package/dist/Charts/Histogram.d.ts +71 -0
- package/dist/Charts/index.d.ts +2 -0
- package/dist/Charts/index.js +1 -1
- package/dist/{Charts-MBJG72BS.css → Charts-TZ744HT6.css} +118 -0
- package/dist/DataGrid/DataGrid.d.ts +267 -0
- package/dist/DataGrid/index.d.ts +3 -0
- package/dist/DataGrid/index.js +7 -0
- package/dist/DataGrid-AQKPJD7W.css +482 -0
- package/dist/HuePicker/index.js +11 -4
- package/dist/LayersList/index.js +2 -2
- package/dist/LockedLabel/LockedLabel.d.ts +34 -0
- package/dist/LockedLabel/index.d.ts +3 -0
- package/dist/LockedLabel/index.js +3 -0
- package/dist/LockedLabel-VQEGEB7G.css +16 -0
- package/dist/MarkdownEditor/index.js +8 -5
- package/dist/MergeConflicts/index.js +11 -5
- package/dist/PageNote/PageNote.d.ts +14 -0
- package/dist/PageNote/index.d.ts +3 -0
- package/dist/PageNote/index.js +2 -0
- package/dist/PageNote-RHLXH3ML.css +12 -0
- package/dist/PropertyList/PropertyList.d.ts +88 -0
- package/dist/PropertyList/index.d.ts +3 -0
- package/dist/PropertyList/index.js +7 -0
- package/dist/PropertyList-SCYM66LL.css +96 -0
- package/dist/RelatedRow/RelatedRow.d.ts +27 -0
- package/dist/RelatedRow/index.d.ts +3 -0
- package/dist/RelatedRow/index.js +9 -0
- package/dist/RelatedRow-2FVS6QQA.css +6 -0
- package/dist/SectionFrame/SectionFrame.d.ts +76 -0
- package/dist/SectionFrame/index.d.ts +3 -0
- package/dist/SectionFrame/index.js +7 -0
- package/dist/SectionFrame-M62UUVFQ.css +164 -0
- package/dist/SegmentedControl/index.js +11 -4
- package/dist/SheetColumnEditor/index.js +6 -5
- package/dist/SheetGrid/index.js +2 -2
- package/dist/SidebarNav/SidebarNav.d.ts +35 -2
- package/dist/SidebarNav/index.js +2 -1
- package/dist/{SidebarNav-7SGUZYKK.css → SidebarNav-YI74SPDC.css} +10 -0
- package/dist/Tabs/Tabs.d.ts +55 -1
- package/dist/Tabs/fold.d.ts +54 -0
- package/dist/Tabs/index.d.ts +1 -1
- package/dist/Tabs/index.js +9 -2
- package/dist/Tabs/roving.d.ts +3 -3
- package/dist/{Tabs-WIF7457H.css → Tabs-S7F4RWAN.css} +77 -0
- package/dist/TagsInput/index.js +1 -1
- package/dist/ThemeGallery/index.js +2 -2
- package/dist/ThemeSwitcher/index.js +12 -5
- package/dist/VersionCompare/index.js +12 -5
- package/dist/{chunk-B5J23C73.js → chunk-2PEXZ7L4.js} +1 -1
- package/dist/{chunk-TZYFTC4M.js → chunk-2VOHUGUA.js} +1 -1
- package/dist/{chunk-2QZ2VPHR.js → chunk-4OK4DX3V.js} +2 -2
- package/dist/{chunk-ECGGQX2H.js → chunk-A44YHLCQ.js} +2 -2
- package/dist/{chunk-F4LPQA4E.js → chunk-BA32AVKS.js} +1 -1
- package/dist/chunk-CV4NES3P.js +9 -0
- package/dist/{chunk-PPHTIKZO.js → chunk-E4BOVKNJ.js} +1 -1
- package/dist/{chunk-W7PAIVAP.js → chunk-E7QLG3PG.js} +30 -9
- package/dist/{chunk-RKKO7QHH.js → chunk-EGMQURBR.js} +5 -4
- package/dist/{chunk-GMW4ZHST.js → chunk-EX22Q5SH.js} +2 -2
- package/dist/{chunk-F3WZ5AKM.js → chunk-GFYQKMQZ.js} +1 -1
- package/dist/{chunk-DYB66CNM.js → chunk-GR4YM7HT.js} +6 -3
- package/dist/{chunk-HG5VF3TZ.js → chunk-HMVQQEHW.js} +91 -2
- package/dist/chunk-INVSUFJK.js +71 -0
- package/dist/{chunk-4LRAJXHL.js → chunk-JSWOXRRE.js} +1 -1
- package/dist/{chunk-ZMDYQ2HH.js → chunk-KWWP3D7M.js} +1 -1
- package/dist/{chunk-46RL3E54.js → chunk-M6NQ4XGK.js} +1 -1
- package/dist/chunk-OHGH7O6T.js +19 -0
- package/dist/{chunk-4ISUIS6F.js → chunk-OOC7Q67K.js} +1 -1
- package/dist/{chunk-XNXK5MA4.js → chunk-PCT47E7O.js} +1 -1
- package/dist/{chunk-YEVG2X5R.js → chunk-SNQRGH4A.js} +1 -1
- package/dist/chunk-T6MXORP5.js +116 -0
- package/dist/chunk-X4IXXLWM.js +306 -0
- package/dist/chunk-XIDD7PJO.js +416 -0
- package/dist/chunk-ZUTUI27P.js +21 -0
- package/dist/generated/index.d.ts +6 -0
- package/dist/generated/index.js +62 -56
- package/dist/index.js +62 -56
- package/dist/styles.css +1087 -20
- package/package.json +3 -3
- package/dist/chunk-7SDUKCNW.js +0 -141
- package/dist/{chunk-JZPK4IXR.js → chunk-DKNBGL26.js} +1 -1
- /package/dist/{chunk-QRLIWCLX.js → chunk-S3QTFUJX.js} +0 -0
|
@@ -0,0 +1,482 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* DataGrid: a list as columns, one track list on the grid.
|
|
3
|
+
*
|
|
4
|
+
* THE GRID MAKES NO SCROLLPORT OF ITS OWN. `overflow: clip` rounds the rows off
|
|
5
|
+
* at the corner exactly as `hidden` would, and it is the difference between a
|
|
6
|
+
* sticky head that works and one that cannot: `hidden` makes a scroll
|
|
7
|
+
* container, a sticky box is confined to its nearest scrollport, and this one
|
|
8
|
+
* grows to its rows, so its offset is always 0. The head sticks against the
|
|
9
|
+
* page's own scroller; an application whose scroller carries a sticky bar of
|
|
10
|
+
* its own sets `--crewlet-data-grid-sticky-top` to that bar's height.
|
|
11
|
+
*
|
|
12
|
+
* THE COLUMNS BELONG TO THE GRID, NOT TO A ROW. The tracks are declared once,
|
|
13
|
+
* on the grid (its inline `grid-template-columns`), and the head, the body,
|
|
14
|
+
* the bands and the rows are `subgrid` passthroughs, so a head cell and a cell
|
|
15
|
+
* twenty rows down size the same track. Everything that is not a row of cells
|
|
16
|
+
* spans the whole width.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
.crewlet-data-grid {
|
|
20
|
+
display: grid;
|
|
21
|
+
min-width: 0;
|
|
22
|
+
border: 1px solid var(--color-border-hover);
|
|
23
|
+
border-radius: var(--radius-md);
|
|
24
|
+
overflow: clip;
|
|
25
|
+
background: var(--color-surface-subtle);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/*
|
|
29
|
+
* A CARD'S BODY (`flush`, and every grid straight in a Card or its body, told
|
|
30
|
+
* or not): the card is the frame, so the grid draws none of its own and one
|
|
31
|
+
* rule parts it from the card's head. Under the card's header, the header's
|
|
32
|
+
* own rule is that one.
|
|
33
|
+
*/
|
|
34
|
+
.crewlet-data-grid[data-flush],
|
|
35
|
+
.crewlet-card > .crewlet-data-grid,
|
|
36
|
+
.crewlet-card__body > .crewlet-data-grid {
|
|
37
|
+
border: 0;
|
|
38
|
+
border-top: 1px solid var(--color-border-default);
|
|
39
|
+
border-radius: var(--radius-none);
|
|
40
|
+
background: transparent;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.crewlet-card__header + .crewlet-data-grid {
|
|
44
|
+
border-top: 0;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/* A full-width band by default: the head, the body, the foot, the reset and
|
|
48
|
+
the empty state, which is the one child when the grid carries no tracks. */
|
|
49
|
+
.crewlet-data-grid > * {
|
|
50
|
+
grid-column: 1 / -1;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.crewlet-data-grid__head,
|
|
54
|
+
.crewlet-data-grid__body,
|
|
55
|
+
.crewlet-data-grid__band,
|
|
56
|
+
.crewlet-data-grid__row {
|
|
57
|
+
display: grid;
|
|
58
|
+
grid-template-columns: subgrid;
|
|
59
|
+
grid-column: 1 / -1;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.crewlet-data-grid__band-head,
|
|
63
|
+
.crewlet-data-grid__band-foot {
|
|
64
|
+
grid-column: 1 / -1;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/*
|
|
68
|
+
* The head: a floor at the row height (density shrinks the padding, not the
|
|
69
|
+
* label), on the raised ground, sticky at the application's offset.
|
|
70
|
+
*/
|
|
71
|
+
.crewlet-data-grid__head {
|
|
72
|
+
align-items: center;
|
|
73
|
+
min-height: var(--size-row-md);
|
|
74
|
+
border-bottom: 1px solid var(--color-border-hover);
|
|
75
|
+
background: var(--color-surface-elevated);
|
|
76
|
+
position: sticky;
|
|
77
|
+
top: var(--crewlet-data-grid-sticky-top, var(--spacing-0));
|
|
78
|
+
z-index: var(--z-index-sticky);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/*
|
|
82
|
+
* THE LIST TABLE'S HEAD: the micro-label register every table takes, 11/500
|
|
83
|
+
* uppercase. A sortable head is a button with its chrome reset; the reset
|
|
84
|
+
* takes the focus ring with it, so the ring is restated below.
|
|
85
|
+
*/
|
|
86
|
+
.crewlet-data-grid__th {
|
|
87
|
+
display: flex;
|
|
88
|
+
align-items: center;
|
|
89
|
+
gap: var(--spacing-1);
|
|
90
|
+
padding: var(--spacing-2) var(--spacing-3);
|
|
91
|
+
font-size: var(--font-size-2xs);
|
|
92
|
+
font-weight: var(--font-weight-medium);
|
|
93
|
+
text-transform: uppercase;
|
|
94
|
+
letter-spacing: var(--font-letter-spacing-wide);
|
|
95
|
+
color: var(--color-text-tertiary);
|
|
96
|
+
cursor: pointer;
|
|
97
|
+
min-width: 0;
|
|
98
|
+
transition: color var(--motion-duration-fast) var(--motion-easing-default);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.crewlet-data-grid__th--plain {
|
|
102
|
+
cursor: default;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/* A sortable head's control fills the head: the whole cell is the target. */
|
|
106
|
+
.crewlet-data-grid__sort {
|
|
107
|
+
all: unset;
|
|
108
|
+
display: flex;
|
|
109
|
+
align-items: center;
|
|
110
|
+
gap: var(--spacing-1);
|
|
111
|
+
flex: 1 1 auto;
|
|
112
|
+
min-width: 0;
|
|
113
|
+
margin: calc(-1 * var(--spacing-2)) calc(-1 * var(--spacing-3));
|
|
114
|
+
padding: var(--spacing-2) var(--spacing-3);
|
|
115
|
+
cursor: pointer;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.crewlet-data-grid__th--right .crewlet-data-grid__sort {
|
|
119
|
+
justify-content: flex-end;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.crewlet-data-grid__th:not(.crewlet-data-grid__th--plain):hover,
|
|
123
|
+
.crewlet-data-grid__th--sorted {
|
|
124
|
+
color: var(--color-text-primary);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.crewlet-data-grid__th--right {
|
|
128
|
+
justify-content: flex-end;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.crewlet-data-grid__sort:focus-visible,
|
|
132
|
+
.crewlet-data-grid__cols-reset:focus-visible {
|
|
133
|
+
outline: 2px solid var(--color-focus);
|
|
134
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.crewlet-data-grid__body {
|
|
138
|
+
min-width: 0;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.crewlet-data-grid__row {
|
|
142
|
+
align-items: center;
|
|
143
|
+
min-height: var(--size-row-md);
|
|
144
|
+
border-bottom: 1px solid var(--color-border-default);
|
|
145
|
+
color: inherit;
|
|
146
|
+
cursor: pointer;
|
|
147
|
+
/* The containing block for the row's link. */
|
|
148
|
+
position: relative;
|
|
149
|
+
transition: background var(--motion-duration-fast) var(--motion-easing-default);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/* THE ROW'S OWN LINK, STRETCHED OVER IT, out of flow so it takes no track. */
|
|
153
|
+
.crewlet-data-grid__row-link {
|
|
154
|
+
position: absolute;
|
|
155
|
+
inset: 0;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/* A button overlay (a row that acts and has no address) gives up the chrome a
|
|
159
|
+
button brings, and draws the focus ring inside the row. */
|
|
160
|
+
button.crewlet-data-grid__row-link {
|
|
161
|
+
all: unset;
|
|
162
|
+
position: absolute;
|
|
163
|
+
inset: 0;
|
|
164
|
+
cursor: pointer;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.crewlet-data-grid__row-link:focus-visible {
|
|
168
|
+
outline: 2px solid var(--color-focus);
|
|
169
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/*
|
|
173
|
+
* AND THE CELLS' OWN CONTROLS SIT ABOVE IT: positioned and later in the
|
|
174
|
+
* document than the overlay, they win the hit test in the same stacking
|
|
175
|
+
* context, with no z-index to reason about against the sticky head. A cell's
|
|
176
|
+
* element that is not a link or a button but must take its own clicks (a
|
|
177
|
+
* refusal sentence a reader selects) carries `data-above-row`.
|
|
178
|
+
*/
|
|
179
|
+
.crewlet-data-grid__row a:not(.crewlet-data-grid__row-link),
|
|
180
|
+
.crewlet-data-grid__row button:not(.crewlet-data-grid__row-link),
|
|
181
|
+
.crewlet-data-grid__row [data-above-row] {
|
|
182
|
+
position: relative;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.crewlet-data-grid__row:last-child {
|
|
186
|
+
border-bottom: none;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
.crewlet-data-grid__row:hover {
|
|
190
|
+
background: var(--color-surface-hover);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.crewlet-data-grid__row--selected,
|
|
194
|
+
.crewlet-data-grid__row--selected:hover {
|
|
195
|
+
background: var(--color-brand-accent-soft);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
.crewlet-data-grid__row--cursor {
|
|
199
|
+
box-shadow: inset 2px 0 0 var(--color-brand-accent);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/* A FAILED ROW IS MARKED ON ITS EDGE, not tinted: the status column already
|
|
203
|
+
says so, and two signals for one fact teach a reader to trust neither. */
|
|
204
|
+
.crewlet-data-grid__row--failed {
|
|
205
|
+
box-shadow: inset 2px 0 0 var(--color-feedback-danger-ink);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
.crewlet-data-grid__cell {
|
|
209
|
+
padding: var(--spacing-1) var(--spacing-3);
|
|
210
|
+
font-size: var(--font-size-compact);
|
|
211
|
+
min-width: 0;
|
|
212
|
+
display: flex;
|
|
213
|
+
align-items: center;
|
|
214
|
+
gap: var(--spacing-2);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/*
|
|
218
|
+
* A SHRINK COLUMN does not wrap inside its capped track, and does not paint
|
|
219
|
+
* outside it: a nowrap cell narrower than its content would spill over the
|
|
220
|
+
* column beside it. `clip`, since a scrollport here would cut the sticky head.
|
|
221
|
+
*/
|
|
222
|
+
.crewlet-data-grid__th--shrink,
|
|
223
|
+
.crewlet-data-grid__cell--shrink {
|
|
224
|
+
white-space: nowrap;
|
|
225
|
+
overflow: clip;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.crewlet-data-grid__cell--right {
|
|
229
|
+
justify-content: flex-end;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
.crewlet-data-grid__truncate {
|
|
233
|
+
min-width: 0;
|
|
234
|
+
overflow: hidden;
|
|
235
|
+
text-overflow: ellipsis;
|
|
236
|
+
white-space: nowrap;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
.crewlet-data-grid__band + .crewlet-data-grid__band {
|
|
240
|
+
border-top: 1px solid var(--color-border-hover);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
.crewlet-data-grid__band-head,
|
|
244
|
+
.crewlet-data-grid__band-foot {
|
|
245
|
+
display: flex;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/* The band row's one cell lays its parts out on the row's own flex line. */
|
|
249
|
+
.crewlet-data-grid__band-cell {
|
|
250
|
+
display: contents;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
.crewlet-data-grid__band-head {
|
|
254
|
+
display: flex;
|
|
255
|
+
align-items: center;
|
|
256
|
+
gap: var(--spacing-2);
|
|
257
|
+
padding: var(--spacing-2) var(--spacing-3);
|
|
258
|
+
background: var(--color-surface-elevated);
|
|
259
|
+
font-size: var(--font-size-xs);
|
|
260
|
+
font-weight: var(--font-weight-semibold);
|
|
261
|
+
position: sticky;
|
|
262
|
+
/* Under the column heads, which are a row tall and parked at the offset;
|
|
263
|
+
confined to its own band, so it leaves with the band. Above the rows
|
|
264
|
+
(positioned for the row link) and below the heads. */
|
|
265
|
+
top: calc(var(--crewlet-data-grid-sticky-top, var(--spacing-0)) + var(--size-row-md));
|
|
266
|
+
z-index: var(--z-index-raised);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/* A SECOND AXIS IS A BAND INSIDE A BAND, inset and quieter, so it does not
|
|
270
|
+
read as its parent's sibling; and it draws no rule above itself. */
|
|
271
|
+
.crewlet-data-grid__band .crewlet-data-grid__band > .crewlet-data-grid__band-head {
|
|
272
|
+
padding-left: calc(var(--spacing-3) + var(--spacing-4));
|
|
273
|
+
background: var(--color-surface-subtle);
|
|
274
|
+
font-weight: var(--font-weight-medium);
|
|
275
|
+
color: var(--color-text-tertiary);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
.crewlet-data-grid__band .crewlet-data-grid__band + .crewlet-data-grid__band {
|
|
279
|
+
border-top: none;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
.crewlet-data-grid__band-count {
|
|
283
|
+
margin-left: auto;
|
|
284
|
+
color: var(--color-text-tertiary);
|
|
285
|
+
font-weight: var(--font-weight-regular);
|
|
286
|
+
font-variant-numeric: tabular-nums;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
.crewlet-data-grid__band-foot {
|
|
290
|
+
padding: var(--spacing-1) var(--spacing-3);
|
|
291
|
+
font-size: var(--font-size-2xs);
|
|
292
|
+
color: var(--color-text-tertiary);
|
|
293
|
+
background: var(--color-surface-elevated);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
.crewlet-data-grid__band-foot a {
|
|
297
|
+
color: var(--color-brand-accent-ink);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
.crewlet-data-grid__band-foot a:hover {
|
|
301
|
+
color: var(--color-text-primary);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
.crewlet-data-grid__foot {
|
|
305
|
+
display: flex;
|
|
306
|
+
align-items: center;
|
|
307
|
+
gap: var(--spacing-2);
|
|
308
|
+
padding: var(--spacing-2) var(--spacing-3);
|
|
309
|
+
border-top: 1px solid var(--color-border-hover);
|
|
310
|
+
background: var(--color-surface-elevated);
|
|
311
|
+
font-size: var(--font-size-xs);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
.crewlet-data-grid__foot-spacer {
|
|
315
|
+
flex: 1 1 auto;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
.crewlet-data-grid__note {
|
|
319
|
+
font-size: var(--font-size-xs);
|
|
320
|
+
color: var(--color-text-tertiary);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
.crewlet-data-grid__cols-reset {
|
|
324
|
+
all: unset;
|
|
325
|
+
/* After the reset, which takes `grid-column` too. */
|
|
326
|
+
grid-column: 1 / -1;
|
|
327
|
+
padding: var(--spacing-1) var(--spacing-3);
|
|
328
|
+
font-size: var(--font-size-2xs);
|
|
329
|
+
color: var(--color-brand-accent-ink);
|
|
330
|
+
cursor: pointer;
|
|
331
|
+
text-align: left;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/* ---- The column chooser ------------------------------------------------ */
|
|
335
|
+
|
|
336
|
+
.crewlet-column-chooser__label {
|
|
337
|
+
font-size: var(--font-size-2xs);
|
|
338
|
+
font-weight: var(--font-weight-medium);
|
|
339
|
+
letter-spacing: var(--font-letter-spacing-wide);
|
|
340
|
+
text-transform: uppercase;
|
|
341
|
+
color: var(--color-text-tertiary);
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
/* TWO COLUMNS: a single file of short words makes a menu as tall as the grid
|
|
345
|
+
has columns. */
|
|
346
|
+
.crewlet-column-chooser__choices {
|
|
347
|
+
display: grid;
|
|
348
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
349
|
+
gap: var(--spacing-1) var(--spacing-3);
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/* The pointer target is the row, not the 13px box. */
|
|
353
|
+
.crewlet-column-chooser__choice {
|
|
354
|
+
display: flex;
|
|
355
|
+
align-items: center;
|
|
356
|
+
gap: var(--spacing-2);
|
|
357
|
+
min-height: var(--size-target-min);
|
|
358
|
+
font-size: var(--font-size-compact);
|
|
359
|
+
color: var(--color-text-secondary);
|
|
360
|
+
cursor: pointer;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
@media (prefers-reduced-motion: reduce) {
|
|
364
|
+
.crewlet-data-grid__th,
|
|
365
|
+
.crewlet-data-grid__row {
|
|
366
|
+
transition: none;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
/* ---- A ROW IS A CARD ON A PHONE -----------------------------------------
|
|
371
|
+
A GRID IS COLUMNS, AND A PHONE DOES NOT HAVE THEM: the grid clips (for its
|
|
372
|
+
sticky head), so the columns past the edge were cut off with nothing to
|
|
373
|
+
scroll to, and a sideways scroller resolves every flexible track to zero. So
|
|
374
|
+
the head goes and each cell draws its own name beside its value
|
|
375
|
+
(`data-label`); the subgrid chain is unwound to blocks and each cell is a
|
|
376
|
+
flex line, label then value. A cell with nothing in it is no line
|
|
377
|
+
(`:empty`), and a cell that draws a marked absence has content and stays.
|
|
378
|
+
The sort is in the application's state, so a sorted list still arrives
|
|
379
|
+
sorted. */
|
|
380
|
+
@media (width < 640px) {
|
|
381
|
+
.crewlet-data-grid {
|
|
382
|
+
display: block;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
.crewlet-data-grid__head {
|
|
386
|
+
display: none;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
.crewlet-data-grid__body,
|
|
390
|
+
.crewlet-data-grid__band {
|
|
391
|
+
display: block;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
.crewlet-data-grid__row {
|
|
395
|
+
display: block;
|
|
396
|
+
padding: var(--spacing-2) var(--spacing-3);
|
|
397
|
+
min-height: 0;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
/* A FIXED BASIS lines the names up without a track, and the name wraps
|
|
401
|
+
inside it rather than pushing its value past every other card line. */
|
|
402
|
+
.crewlet-data-grid__cell {
|
|
403
|
+
display: flex;
|
|
404
|
+
align-items: baseline;
|
|
405
|
+
gap: var(--spacing-3);
|
|
406
|
+
padding: 1px 0;
|
|
407
|
+
min-width: 0;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
.crewlet-data-grid__cell:empty {
|
|
411
|
+
display: none;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
.crewlet-data-grid__cell[data-label]::before {
|
|
415
|
+
content: attr(data-label);
|
|
416
|
+
flex: 0 0 7rem;
|
|
417
|
+
overflow-wrap: anywhere;
|
|
418
|
+
font-size: var(--font-size-2xs);
|
|
419
|
+
text-transform: uppercase;
|
|
420
|
+
letter-spacing: var(--font-letter-spacing-wide);
|
|
421
|
+
color: var(--color-text-tertiary);
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
/* `shrink` and `right` are column shapes, and there are no columns here. */
|
|
425
|
+
.crewlet-data-grid__cell--shrink,
|
|
426
|
+
.crewlet-data-grid__cell--right {
|
|
427
|
+
white-space: normal;
|
|
428
|
+
justify-content: flex-start;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
.crewlet-data-grid__cell .crewlet-data-grid__truncate {
|
|
432
|
+
white-space: normal;
|
|
433
|
+
overflow: visible;
|
|
434
|
+
text-overflow: clip;
|
|
435
|
+
overflow-wrap: anywhere;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
/* ---- THE COMPACT ROW (`phoneRows="compact"`) ---------------------------
|
|
439
|
+
TWO LINES, NO LABELS: what the row is, then its marks. One flex run that
|
|
440
|
+
breaks once: the lead cells first, a zero-height full-width `::after`
|
|
441
|
+
between them and the rest, then every other cell in column order. */
|
|
442
|
+
.crewlet-data-grid[data-phone-rows='compact'] .crewlet-data-grid__row {
|
|
443
|
+
display: flex;
|
|
444
|
+
flex-wrap: wrap;
|
|
445
|
+
align-items: center;
|
|
446
|
+
gap: var(--spacing-1) var(--spacing-2);
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
.crewlet-data-grid[data-phone-rows='compact'] .crewlet-data-grid__row::after {
|
|
450
|
+
content: '';
|
|
451
|
+
order: 1;
|
|
452
|
+
flex-basis: 100%;
|
|
453
|
+
height: 0;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
.crewlet-data-grid[data-phone-rows='compact'] .crewlet-data-grid__cell {
|
|
457
|
+
order: 2;
|
|
458
|
+
padding: 0;
|
|
459
|
+
align-items: center;
|
|
460
|
+
gap: var(--spacing-1);
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
.crewlet-data-grid[data-phone-rows='compact'] .crewlet-data-grid__cell[data-lead] {
|
|
464
|
+
order: 0;
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
/* The title takes the rest of the first line, beside the key. */
|
|
468
|
+
.crewlet-data-grid[data-phone-rows='compact']
|
|
469
|
+
.crewlet-data-grid__cell[data-lead]:not(.crewlet-data-grid__cell--shrink) {
|
|
470
|
+
flex: 1 1 0;
|
|
471
|
+
min-width: 0;
|
|
472
|
+
font-weight: var(--font-weight-medium);
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
.crewlet-data-grid[data-phone-rows='compact'] .crewlet-data-grid__cell[data-label]::before {
|
|
476
|
+
content: none;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
.crewlet-data-grid[data-phone-rows='compact'] .crewlet-data-grid__cell[data-phone-omit] {
|
|
480
|
+
display: none;
|
|
481
|
+
}
|
|
482
|
+
}
|
package/dist/HuePicker/index.js
CHANGED
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
import '../chunk-FFMCMSJB.js';
|
|
2
|
-
export { HuePicker, HueSwatch } from '../chunk-
|
|
2
|
+
export { HuePicker, HueSwatch } from '../chunk-BA32AVKS.js';
|
|
3
3
|
import '../chunk-AYKXMIOR.js';
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
6
|
-
import '../chunk-
|
|
4
|
+
import '../chunk-4OK4DX3V.js';
|
|
5
|
+
import '../chunk-X4IXXLWM.js';
|
|
6
|
+
import '../chunk-WIATRXEJ.js';
|
|
7
|
+
import '../chunk-EGMQURBR.js';
|
|
7
8
|
import '../chunk-BHHIIK3M.js';
|
|
9
|
+
import '../chunk-D6FEHY5G.js';
|
|
10
|
+
import '../chunk-OMV5W53A.js';
|
|
11
|
+
import '../chunk-H5XTJ7GJ.js';
|
|
8
12
|
import '../chunk-2YTOOH3A.js';
|
|
13
|
+
import '../chunk-OG6CL3EB.js';
|
|
14
|
+
import '../chunk-4FQT6ZAY.js';
|
|
15
|
+
import '../chunk-NUZHC6MM.js';
|
|
9
16
|
import '../chunk-BZFWDIV6.js';
|
|
10
17
|
import '../chunk-ODEQTPFM.js';
|
package/dist/LayersList/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { LAYERS_LIST_LABELS, LayersList } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { LAYERS_LIST_LABELS, LayersList } from '../chunk-M6NQ4XGK.js';
|
|
2
|
+
import '../chunk-EGMQURBR.js';
|
|
3
3
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export interface LockedLabelProps {
|
|
3
|
+
/** What the place is called: a nav row's words, a tab's. */
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
/**
|
|
6
|
+
* Why the reader cannot open it, as a sentence: "Needs Admin access". Left
|
|
7
|
+
* out, nothing is locked and the label is drawn as it is, with no mark.
|
|
8
|
+
*/
|
|
9
|
+
reason?: string | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* Draws the key. Off where the place stands under a heading that already
|
|
12
|
+
* carries it (a nav group whose every row is locked): the reason is still
|
|
13
|
+
* the title and still read after the name, and the key is drawn once, on
|
|
14
|
+
* the heading, rather than down every row.
|
|
15
|
+
*/
|
|
16
|
+
mark?: boolean | undefined;
|
|
17
|
+
className?: string | undefined;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* A place's name with the key after it, where the reader lacks the access it
|
|
21
|
+
* takes: the sidebar's rows, a section column's, a section tab's.
|
|
22
|
+
*
|
|
23
|
+
* LOCKED, NEVER HIDDEN. A place that vanished for a reader without its access
|
|
24
|
+
* is one they cannot know exists, and cannot ask an admin for; so the name
|
|
25
|
+
* stays, the key says it is closed, the pointer's title says why, and a
|
|
26
|
+
* screen reader hears the reason after the name (", Needs Admin access").
|
|
27
|
+
*
|
|
28
|
+
* ONE MARK WHEREVER A PLACE IS OFFERED, so a locked place reads the same in
|
|
29
|
+
* the rail, in a column of sections and in a row of tabs: a tab that drew no
|
|
30
|
+
* key looked open and then refused.
|
|
31
|
+
*
|
|
32
|
+
* Nothing but the label where nothing is missing.
|
|
33
|
+
*/
|
|
34
|
+
export declare function LockedLabel({ children, reason, mark, className }: LockedLabelProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* LockedLabel: a place's words with the key after them. The words keep their
|
|
3
|
+
* own ink and size; the key takes the quiet step, a step closer to the words
|
|
4
|
+
* than the words are to anything else.
|
|
5
|
+
*/
|
|
6
|
+
.crewlet-locked-label {
|
|
7
|
+
display: inline-flex;
|
|
8
|
+
align-items: center;
|
|
9
|
+
gap: var(--spacing-1);
|
|
10
|
+
min-width: 0;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.crewlet-locked-label__key {
|
|
14
|
+
flex: none;
|
|
15
|
+
color: var(--color-text-tertiary);
|
|
16
|
+
}
|
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
export { MARKDOWN_FORMATS, MarkdownEditor, formatMarkdown, insertMarkdown, markdownWords } from '../chunk-
|
|
1
|
+
export { MARKDOWN_FORMATS, MarkdownEditor, formatMarkdown, insertMarkdown, markdownWords } from '../chunk-EX22Q5SH.js';
|
|
2
2
|
import '../chunk-NR4CPM4T.js';
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
6
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-OOC7Q67K.js';
|
|
4
|
+
import '../chunk-4OK4DX3V.js';
|
|
5
|
+
import '../chunk-X4IXXLWM.js';
|
|
6
|
+
import '../chunk-WIATRXEJ.js';
|
|
7
|
+
import '../chunk-EGMQURBR.js';
|
|
7
8
|
import '../chunk-BHHIIK3M.js';
|
|
9
|
+
import '../chunk-D6FEHY5G.js';
|
|
8
10
|
import '../chunk-OMV5W53A.js';
|
|
9
11
|
import '../chunk-H5XTJ7GJ.js';
|
|
10
12
|
import '../chunk-2YTOOH3A.js';
|
|
13
|
+
import '../chunk-OG6CL3EB.js';
|
|
11
14
|
import '../chunk-4FQT6ZAY.js';
|
|
12
15
|
import '../chunk-NUZHC6MM.js';
|
|
13
16
|
import '../chunk-BZFWDIV6.js';
|
|
@@ -1,10 +1,16 @@
|
|
|
1
|
-
export { MERGE_CONFLICTS_LABELS, MergeConflicts } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
1
|
+
export { MERGE_CONFLICTS_LABELS, MergeConflicts } from '../chunk-2PEXZ7L4.js';
|
|
2
|
+
import '../chunk-OOC7Q67K.js';
|
|
3
|
+
import '../chunk-4OK4DX3V.js';
|
|
4
|
+
import '../chunk-X4IXXLWM.js';
|
|
5
|
+
import '../chunk-WIATRXEJ.js';
|
|
6
|
+
import '../chunk-EGMQURBR.js';
|
|
6
7
|
import '../chunk-BHHIIK3M.js';
|
|
8
|
+
import '../chunk-D6FEHY5G.js';
|
|
9
|
+
import '../chunk-OMV5W53A.js';
|
|
10
|
+
import '../chunk-H5XTJ7GJ.js';
|
|
7
11
|
import '../chunk-2YTOOH3A.js';
|
|
8
12
|
import '../chunk-OG6CL3EB.js';
|
|
13
|
+
import '../chunk-4FQT6ZAY.js';
|
|
14
|
+
import '../chunk-NUZHC6MM.js';
|
|
9
15
|
import '../chunk-BZFWDIV6.js';
|
|
10
16
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
export interface PageNoteProps extends HTMLAttributes<HTMLParagraphElement> {
|
|
3
|
+
children?: ReactNode;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* One sentence saying what a screen answers, under the page's own title.
|
|
7
|
+
*
|
|
8
|
+
* NOT A HEADER. A page bar's breadcrumb is the title; what is left is the
|
|
9
|
+
* sentence that explains the screen, worth keeping where the screen answers a
|
|
10
|
+
* question whose shape is not obvious from its name. A quiet line rather than
|
|
11
|
+
* a panel, at the reading measure: a reader who has read it once scans past it
|
|
12
|
+
* for ever after. It keeps no margin: the page's column sets the rhythm.
|
|
13
|
+
*/
|
|
14
|
+
export declare function PageNote({ className, children, ...rest }: PageNoteProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* PageNote: the screen's one quiet sentence. No word alone on its last line
|
|
3
|
+
* (`pretty`), which reads as a sentence that stopped rather than one that
|
|
4
|
+
* ended. No margin of its own: the column it stands in sets the gap.
|
|
5
|
+
*/
|
|
6
|
+
.crewlet-page-note {
|
|
7
|
+
margin: 0;
|
|
8
|
+
max-width: var(--size-measure);
|
|
9
|
+
font-size: var(--font-size-compact);
|
|
10
|
+
color: var(--color-text-tertiary);
|
|
11
|
+
text-wrap: pretty;
|
|
12
|
+
}
|