@crewlethq/ui 0.38.0 → 0.40.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.
Files changed (157) hide show
  1. package/README.md +79 -3
  2. package/dist/AgentHandoffPanel/index.js +3 -3
  3. package/dist/AppShell/AppShell.d.ts +13 -2
  4. package/dist/AppShell/index.js +1 -1
  5. package/dist/{AppShell-NDU4XMGF.css → AppShell-NPSWZ3XW.css} +45 -4
  6. package/dist/ArtifactBar/index.js +6 -5
  7. package/dist/{ArtifactBar-FWPBBKQ5.css → ArtifactBar-6PGWGKN2.css} +13 -1
  8. package/dist/ArtifactCard/index.js +2 -2
  9. package/dist/AuthLayout/index.js +2 -2
  10. package/dist/AvatarPicker/index.js +10 -6
  11. package/dist/Card/Card.d.ts +14 -2
  12. package/dist/Card/index.js +1 -1
  13. package/dist/{Card-G2ZGT5Z6.css → Card-JR2UPQH7.css} +20 -0
  14. package/dist/CatalogTile/CatalogTile.d.ts +47 -0
  15. package/dist/CatalogTile/index.d.ts +3 -0
  16. package/dist/CatalogTile/index.js +3 -0
  17. package/dist/CatalogTile-XL4XLFUH.css +135 -0
  18. package/dist/CharacterPicker/index.js +2 -2
  19. package/dist/Charts/Histogram.d.ts +71 -0
  20. package/dist/Charts/index.d.ts +2 -0
  21. package/dist/Charts/index.js +1 -1
  22. package/dist/{Charts-MBJG72BS.css → Charts-TZ744HT6.css} +118 -0
  23. package/dist/CodeBlock/index.js +1 -1
  24. package/dist/{CodeBlock-GYNJ2HI6.css → CodeBlock-N5ETJF24.css} +13 -0
  25. package/dist/CommandPalette/index.js +3 -3
  26. package/dist/CommentThread/index.js +3 -3
  27. package/dist/Composer/index.js +2 -2
  28. package/dist/DataGrid/DataGrid.d.ts +267 -0
  29. package/dist/DataGrid/index.d.ts +3 -0
  30. package/dist/DataGrid/index.js +7 -0
  31. package/dist/DataGrid-AQKPJD7W.css +482 -0
  32. package/dist/DataTable/index.js +2 -2
  33. package/dist/DataView/index.js +4 -4
  34. package/dist/DatasetSource/DatasetSource.d.ts +7 -1
  35. package/dist/DatasetSource/index.js +1 -1
  36. package/dist/HuePicker/index.js +11 -4
  37. package/dist/LayersList/index.js +2 -2
  38. package/dist/LinkInterstitial/index.js +2 -2
  39. package/dist/List/List.d.ts +8 -0
  40. package/dist/List/index.js +1 -1
  41. package/dist/{List-MYJIV6MP.css → List-YHLIZFK4.css} +46 -0
  42. package/dist/ListInput/ListInput.d.ts +9 -1
  43. package/dist/ListInput/index.js +2 -2
  44. package/dist/LockedLabel/LockedLabel.d.ts +34 -0
  45. package/dist/LockedLabel/index.d.ts +3 -0
  46. package/dist/LockedLabel/index.js +3 -0
  47. package/dist/LockedLabel-VQEGEB7G.css +16 -0
  48. package/dist/MarkdownEditor/index.js +8 -5
  49. package/dist/MergeConflicts/index.js +11 -5
  50. package/dist/Modal/index.js +1 -1
  51. package/dist/{Modal-7MWRCWAI.css → Modal-TOEWHDCQ.css} +5 -0
  52. package/dist/ObjectHeader/index.js +1 -1
  53. package/dist/{ObjectHeader-D7GU7QNI.css → ObjectHeader-ZOS22FKX.css} +7 -8
  54. package/dist/PageNote/PageNote.d.ts +14 -0
  55. package/dist/PageNote/index.d.ts +3 -0
  56. package/dist/PageNote/index.js +2 -0
  57. package/dist/PageNote-RHLXH3ML.css +12 -0
  58. package/dist/PropertyList/PropertyList.d.ts +88 -0
  59. package/dist/PropertyList/index.d.ts +3 -0
  60. package/dist/PropertyList/index.js +7 -0
  61. package/dist/PropertyList-SCYM66LL.css +96 -0
  62. package/dist/RelatedRow/RelatedRow.d.ts +27 -0
  63. package/dist/RelatedRow/index.d.ts +3 -0
  64. package/dist/RelatedRow/index.js +9 -0
  65. package/dist/RelatedRow-2FVS6QQA.css +6 -0
  66. package/dist/RichEditor/index.js +1 -1
  67. package/dist/SectionFrame/SectionFrame.d.ts +76 -0
  68. package/dist/SectionFrame/index.d.ts +3 -0
  69. package/dist/SectionFrame/index.js +7 -0
  70. package/dist/SectionFrame-M62UUVFQ.css +164 -0
  71. package/dist/SegmentedControl/index.js +11 -4
  72. package/dist/SettingsTable/SettingsTable.d.ts +66 -0
  73. package/dist/SettingsTable/index.d.ts +3 -0
  74. package/dist/SettingsTable/index.js +3 -0
  75. package/dist/SettingsTable-6DUFAFXG.css +160 -0
  76. package/dist/ShareDialog/index.js +2 -2
  77. package/dist/SheetColumnEditor/index.js +7 -6
  78. package/dist/SheetGrid/index.js +3 -3
  79. package/dist/SidebarNav/SidebarNav.d.ts +35 -2
  80. package/dist/SidebarNav/index.js +2 -1
  81. package/dist/{SidebarNav-7SGUZYKK.css → SidebarNav-YI74SPDC.css} +10 -0
  82. package/dist/StatCard/index.js +1 -1
  83. package/dist/{StatCard-4T7TMWMN.css → StatCard-HAA3F5GX.css} +8 -3
  84. package/dist/StatGroup/index.js +1 -1
  85. package/dist/{StatGroup-DOFHX5QJ.css → StatGroup-ZMW7VQWP.css} +27 -0
  86. package/dist/Switcher/index.js +2 -2
  87. package/dist/Tabs/Tabs.d.ts +55 -1
  88. package/dist/Tabs/fold.d.ts +54 -0
  89. package/dist/Tabs/index.d.ts +1 -1
  90. package/dist/Tabs/index.js +9 -2
  91. package/dist/Tabs/roving.d.ts +3 -3
  92. package/dist/{Tabs-WIF7457H.css → Tabs-S7F4RWAN.css} +77 -0
  93. package/dist/TagsInput/index.js +1 -1
  94. package/dist/ThemeGallery/index.js +2 -2
  95. package/dist/ThemeSwitcher/index.js +12 -5
  96. package/dist/TileGrid/TileGrid.d.ts +33 -0
  97. package/dist/TileGrid/index.d.ts +3 -0
  98. package/dist/TileGrid/index.js +2 -0
  99. package/dist/TileGrid-I6LNYD2H.css +52 -0
  100. package/dist/VersionCompare/index.js +12 -5
  101. package/dist/{chunk-B5J23C73.js → chunk-2PEXZ7L4.js} +1 -1
  102. package/dist/{chunk-S27UBCVX.js → chunk-2VOHUGUA.js} +2 -2
  103. package/dist/{chunk-XBURIXHO.js → chunk-3TXY3PJZ.js} +1 -1
  104. package/dist/{chunk-2QZ2VPHR.js → chunk-4OK4DX3V.js} +2 -2
  105. package/dist/chunk-4RKTZSEW.js +64 -0
  106. package/dist/{chunk-ECGGQX2H.js → chunk-A44YHLCQ.js} +2 -2
  107. package/dist/{chunk-F4LPQA4E.js → chunk-BA32AVKS.js} +1 -1
  108. package/dist/chunk-CV4NES3P.js +9 -0
  109. package/dist/{chunk-PPHTIKZO.js → chunk-E4BOVKNJ.js} +1 -1
  110. package/dist/{chunk-W7PAIVAP.js → chunk-E7QLG3PG.js} +30 -9
  111. package/dist/{chunk-RKKO7QHH.js → chunk-EGMQURBR.js} +5 -4
  112. package/dist/{chunk-GMW4ZHST.js → chunk-EX22Q5SH.js} +2 -2
  113. package/dist/{chunk-A23KDROH.js → chunk-FXBGEANQ.js} +1 -1
  114. package/dist/{chunk-4L2BWSHR.js → chunk-GFYQKMQZ.js} +2 -2
  115. package/dist/{chunk-HG5VF3TZ.js → chunk-HMVQQEHW.js} +91 -2
  116. package/dist/{chunk-IPWU6ERC.js → chunk-HQJ24WPM.js} +4 -2
  117. package/dist/{chunk-SVGARBDY.js → chunk-IAGYPTEJ.js} +2 -2
  118. package/dist/{chunk-ZK3VYY7L.js → chunk-INHXF2CL.js} +24 -11
  119. package/dist/chunk-INVSUFJK.js +71 -0
  120. package/dist/{chunk-6NNY5WBF.js → chunk-JKAGN4V4.js} +1 -1
  121. package/dist/{chunk-4LRAJXHL.js → chunk-JSWOXRRE.js} +1 -1
  122. package/dist/{chunk-DYB66CNM.js → chunk-KKNHMXTE.js} +6 -3
  123. package/dist/{chunk-UWRBD2YO.js → chunk-KNHUBHFX.js} +1 -1
  124. package/dist/{chunk-ZMDYQ2HH.js → chunk-KWWP3D7M.js} +1 -1
  125. package/dist/{chunk-46RL3E54.js → chunk-M6NQ4XGK.js} +1 -1
  126. package/dist/{chunk-PT6WKXKW.js → chunk-MMPKN7WV.js} +1 -1
  127. package/dist/{chunk-NRBAXRWE.js → chunk-N3TFYBN3.js} +1 -1
  128. package/dist/chunk-NNTO3TNC.js +9 -0
  129. package/dist/{chunk-DS2C73RJ.js → chunk-NZWX27J7.js} +2 -2
  130. package/dist/{chunk-VGE3G3T4.js → chunk-ODOJJGXH.js} +1 -1
  131. package/dist/chunk-OHGH7O6T.js +19 -0
  132. package/dist/{chunk-4ISUIS6F.js → chunk-OOC7Q67K.js} +1 -1
  133. package/dist/{chunk-BT5H2THK.js → chunk-OUD75UB2.js} +1 -1
  134. package/dist/chunk-PCT47E7O.js +48 -0
  135. package/dist/{chunk-X3UYTAOG.js → chunk-PFZOFAQ6.js} +1 -1
  136. package/dist/{chunk-YQG4PZGC.js → chunk-QRKT4XTT.js} +2 -2
  137. package/dist/{chunk-BJI3RFXG.js → chunk-S4DREXGM.js} +1 -1
  138. package/dist/{chunk-GDDE4UM7.js → chunk-SEC2GR2V.js} +1 -1
  139. package/dist/{chunk-YEVG2X5R.js → chunk-SNQRGH4A.js} +1 -1
  140. package/dist/chunk-T6MXORP5.js +116 -0
  141. package/dist/{chunk-OTCXRJ7D.js → chunk-U2XAJONO.js} +1 -1
  142. package/dist/{chunk-3ZUINC7C.js → chunk-WYYCPV46.js} +6 -1
  143. package/dist/chunk-X4IXXLWM.js +306 -0
  144. package/dist/{chunk-PAQXOP2M.js → chunk-XGBUUQDU.js} +2 -2
  145. package/dist/chunk-XIDD7PJO.js +416 -0
  146. package/dist/{chunk-XO7PUL4F.js → chunk-YPTTSJPM.js} +1 -1
  147. package/dist/chunk-ZUTUI27P.js +21 -0
  148. package/dist/generated/index.d.ts +9 -0
  149. package/dist/generated/index.js +83 -74
  150. package/dist/index.js +83 -74
  151. package/dist/styles.css +1627 -104
  152. package/package.json +3 -3
  153. package/dist/chunk-7SDUKCNW.js +0 -141
  154. package/dist/{Editor-QV4JP242.js → Editor-IRDQ3JDZ.js} +1 -1
  155. package/dist/{chunk-JZPK4IXR.js → chunk-3PR65I3H.js} +2 -2
  156. package/dist/{chunk-ETVEGR2Y.js → chunk-ISA2O2BK.js} +1 -1
  157. /package/dist/{chunk-4QQ3MND5.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
+ }
@@ -1,7 +1,7 @@
1
- export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from '../chunk-A23KDROH.js';
1
+ export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from '../chunk-FXBGEANQ.js';
2
2
  import '../chunk-STJ7QBC3.js';
3
3
  import '../chunk-DTIW4CHZ.js';
4
- import '../chunk-SVGARBDY.js';
4
+ import '../chunk-IAGYPTEJ.js';
5
5
  import '../chunk-AXS6MBNH.js';
6
6
  import '../chunk-EUCC37WY.js';
7
7
  import '../chunk-AV2DXAEL.js';
@@ -1,10 +1,10 @@
1
- export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from '../chunk-YQG4PZGC.js';
1
+ export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from '../chunk-QRKT4XTT.js';
2
2
  import '../chunk-HOXGBLEY.js';
3
- import '../chunk-A23KDROH.js';
4
3
  import '../chunk-UB6MLXUL.js';
4
+ import '../chunk-FXBGEANQ.js';
5
5
  import '../chunk-STJ7QBC3.js';
6
6
  import '../chunk-DTIW4CHZ.js';
7
- import '../chunk-SVGARBDY.js';
7
+ import '../chunk-IAGYPTEJ.js';
8
8
  import '../chunk-7KHM2FZH.js';
9
9
  import '../chunk-KHJIEPZV.js';
10
10
  import '../chunk-GXQ3B46I.js';
@@ -13,8 +13,8 @@ import '../chunk-AXS6MBNH.js';
13
13
  import '../chunk-3CZ7XAVY.js';
14
14
  import '../chunk-EUCC37WY.js';
15
15
  import '../chunk-AV2DXAEL.js';
16
- import '../chunk-SMBKXWML.js';
17
16
  import '../chunk-TYONQSOK.js';
17
+ import '../chunk-SMBKXWML.js';
18
18
  import '../chunk-BHHIIK3M.js';
19
19
  import '../chunk-PQADV6P6.js';
20
20
  import '../chunk-D6FEHY5G.js';
@@ -26,7 +26,13 @@ export interface DatasetSourceLabels {
26
26
  export interface DatasetSourceProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title' | 'children' | 'onSelect'> {
27
27
  /** The dataset's title, which every figure drawn from it cites. */
28
28
  title: string;
29
- kind: DatasetSourceKind;
29
+ /**
30
+ * Where the dataset reads from, drawn as a tag beside the title. Left out
31
+ * where every entry of a list reads from one place (a picker of the
32
+ * engine's own sources, grouped under headings of their own), since the
33
+ * same tag on every row is a column a reader learns to skip.
34
+ */
35
+ kind?: DatasetSourceKind | undefined;
30
36
  /** What the dataset reads, in the author's terms: "tracker.items, scope mine". */
31
37
  definition: ReactNode;
32
38
  /** How it is kept current, in words: "Live", "Every 2 min", "On change". */
@@ -1,4 +1,4 @@
1
- export { DATASET_SOURCE_KINDS, DatasetSource, DatasetSourceList } from '../chunk-IPWU6ERC.js';
1
+ export { DATASET_SOURCE_KINDS, DatasetSource, DatasetSourceList } from '../chunk-HQJ24WPM.js';
2
2
  import '../chunk-KYIAFNU7.js';
3
3
  import '../chunk-WIATRXEJ.js';
4
4
  import '../chunk-3CZ7XAVY.js';
@@ -1,10 +1,17 @@
1
1
  import '../chunk-FFMCMSJB.js';
2
- export { HuePicker, HueSwatch } from '../chunk-F4LPQA4E.js';
2
+ export { HuePicker, HueSwatch } from '../chunk-BA32AVKS.js';
3
3
  import '../chunk-AYKXMIOR.js';
4
- import '../chunk-2QZ2VPHR.js';
5
- import '../chunk-7SDUKCNW.js';
6
- import '../chunk-RKKO7QHH.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';
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';
@@ -1,3 +1,3 @@
1
- export { LAYERS_LIST_LABELS, LayersList } from '../chunk-46RL3E54.js';
2
- import '../chunk-RKKO7QHH.js';
1
+ export { LAYERS_LIST_LABELS, LayersList } from '../chunk-M6NQ4XGK.js';
2
+ import '../chunk-EGMQURBR.js';
3
3
  import '../chunk-ODEQTPFM.js';
@@ -1,5 +1,5 @@
1
- export { LinkInterstitial, openExternal } from '../chunk-NRBAXRWE.js';
2
- import '../chunk-SVGARBDY.js';
1
+ export { LinkInterstitial, openExternal } from '../chunk-N3TFYBN3.js';
2
+ import '../chunk-IAGYPTEJ.js';
3
3
  import '../chunk-5CLW2CXT.js';
4
4
  import '../chunk-SZZRIHGT.js';
5
5
  import '../chunk-PQADV6P6.js';
@@ -9,6 +9,14 @@ export type ListVariant =
9
9
  | 'bulleted'
10
10
  /** A number per row: an order somebody follows. */
11
11
  | 'numbered'
12
+ /**
13
+ * A number per row in a column of its own, with a hairline between rows:
14
+ * statements a reader counts and cites by number (a company's standing
15
+ * policies), each of which may run to several lines. The numbers are the
16
+ * list's own (an `ol`), drawn in tabular figures so a tenth row's number
17
+ * stands where the first one's does.
18
+ */
19
+ | 'numbered-divided'
12
20
  /**
13
21
  * A hairline between rows: a feed, a set of results, a conversation. THE
14
22
  * DEFAULT, because it is the list every screen in the product draws: rows a
@@ -1,3 +1,3 @@
1
- export { List, ListItem } from '../chunk-DS2C73RJ.js';
1
+ export { List, ListItem } from '../chunk-NZWX27J7.js';
2
2
  import '../chunk-BZFWDIV6.js';
3
3
  import '../chunk-ODEQTPFM.js';
@@ -120,6 +120,52 @@
120
120
  padding-inline: 0;
121
121
  }
122
122
 
123
+ /*
124
+ * NUMBERED AND DIVIDED: the divided list's hairlines, with the number in a
125
+ * column of its own rather than in the margin, so a statement that runs to a
126
+ * second line wraps under its own first word and not under its number. The
127
+ * row grows with its text (no row height), at the body's leading, and the
128
+ * number stands on the first line's baseline.
129
+ *
130
+ * The number is the list's counter, drawn by the row. The `ol` already
131
+ * announces each item's position, so the drawn figure is given empty
132
+ * alternative text and is not read a second time.
133
+ */
134
+ .crewlet-list--numbered-divided {
135
+ counter-reset: crewlet-list-item;
136
+ }
137
+
138
+ .crewlet-list--numbered-divided .crewlet-list__item {
139
+ counter-increment: crewlet-list-item;
140
+ border-bottom: 1px solid var(--color-border-default);
141
+ }
142
+
143
+ .crewlet-list--numbered-divided .crewlet-list__item:last-child {
144
+ border-bottom: none;
145
+ }
146
+
147
+ .crewlet-list--numbered-divided .crewlet-list__row {
148
+ align-items: baseline;
149
+ min-height: 0;
150
+ /* At a card's own inset, since a card is where these stand: the numbers
151
+ line up under the card head's glyph rather than 4px left of it. */
152
+ padding: var(--spacing-3) var(--spacing-4);
153
+ border-radius: 0;
154
+ line-height: var(--font-line-height-body);
155
+ }
156
+
157
+ .crewlet-list--numbered-divided .crewlet-list__row::before {
158
+ content: counter(crewlet-list-item);
159
+ content: counter(crewlet-list-item) / '';
160
+ flex: none;
161
+ min-width: 2ch;
162
+ text-align: end;
163
+ font-size: var(--font-size-xs);
164
+ font-weight: var(--font-weight-medium);
165
+ font-variant-numeric: tabular-nums;
166
+ color: var(--color-text-tertiary);
167
+ }
168
+
123
169
  /* ---- States ------------------------------------------------------------ */
124
170
 
125
171
  /*
@@ -21,6 +21,14 @@ export interface ListInputProps {
21
21
  optional?: boolean | undefined;
22
22
  /** Draws the Enter keycap inside the new-item box, which is what adds one. */
23
23
  enterHint?: boolean | undefined;
24
+ /**
25
+ * Puts the focus in the new-item box when the list mounts, for a form
26
+ * opened to change THIS list ("Edit policies"): the reader lands where the
27
+ * next item is written rather than on the form's first field. It is taken
28
+ * during mount, so a dialog the list opens in keeps it rather than moving
29
+ * focus to its own first control. Named as `TagsInput`'s is.
30
+ */
31
+ focusOnMount?: boolean | undefined;
24
32
  /** The name of the control beside the legend that appends what the box holds. */
25
33
  addLabel?: ((itemName: string) => string) | undefined;
26
34
  itemLabel?: ((name: string, position: string) => string) | undefined;
@@ -67,4 +75,4 @@ export interface ListInputProps {
67
75
  *
68
76
  * Ported from the engine dashboard's `ui/ListField.tsx`.
69
77
  */
70
- export declare function ListInput({ label, itemName, value, onChange, multiline, helper, helperOnFocus, error, placeholder, disabled, optional, enterHint, addLabel, itemLabel, newItemLabel, moveUpLabel, moveDownLabel, removeLabel, addedMessage, removedMessage, movedMessage, }: ListInputProps): import("react").JSX.Element;
78
+ export declare function ListInput({ label, itemName, value, onChange, multiline, helper, helperOnFocus, error, placeholder, disabled, optional, enterHint, focusOnMount, addLabel, itemLabel, newItemLabel, moveUpLabel, moveDownLabel, removeLabel, addedMessage, removedMessage, movedMessage, }: ListInputProps): import("react").JSX.Element;
@@ -1,6 +1,6 @@
1
- export { ListInput } from '../chunk-3ZUINC7C.js';
2
- import '../chunk-SMBKXWML.js';
1
+ export { ListInput } from '../chunk-WYYCPV46.js';
3
2
  import '../chunk-TYONQSOK.js';
3
+ import '../chunk-SMBKXWML.js';
4
4
  import '../chunk-PQADV6P6.js';
5
5
  import '../chunk-RSAQOKH3.js';
6
6
  import '../chunk-OMV5W53A.js';