@crewlethq/ui 0.51.0 → 0.52.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.
Files changed (109) hide show
  1. package/README.md +18 -0
  2. package/dist/AgentHandoffPanel/index.js +4 -4
  3. package/dist/AppShell/index.js +3 -3
  4. package/dist/ArrangeList/index.js +4 -4
  5. package/dist/ArtifactBar/index.js +5 -5
  6. package/dist/ArtifactCard/index.js +4 -4
  7. package/dist/AvatarPicker/index.js +7 -7
  8. package/dist/Canvas/index.js +2 -2
  9. package/dist/CanvasBoard/index.js +4 -4
  10. package/dist/CanvasToolbar/index.js +3 -3
  11. package/dist/Checkbox/index.js +3 -3
  12. package/dist/ChoiceButtons/ChoiceButtons.d.ts +21 -1
  13. package/dist/ChoiceButtons/index.d.ts +1 -1
  14. package/dist/ChoiceButtons/index.js +1 -1
  15. package/dist/{ChoiceButtons-FLIFXFFS.css → ChoiceButtons-HWXEF2H3.css} +60 -0
  16. package/dist/ColorField/index.js +3 -3
  17. package/dist/Combobox/index.js +3 -3
  18. package/dist/CommandPalette/index.js +3 -3
  19. package/dist/CommentThread/index.js +5 -5
  20. package/dist/Composer/index.js +3 -3
  21. package/dist/ConfirmField/index.js +3 -3
  22. package/dist/ContrastHelp/index.js +1 -1
  23. package/dist/DataGrid/index.js +4 -4
  24. package/dist/DataTable/index.js +5 -5
  25. package/dist/DataView/index.js +7 -7
  26. package/dist/DateTimePicker/index.js +2 -2
  27. package/dist/DocTabsEditor/index.js +4 -4
  28. package/dist/{Editor-MLGK3KOG.js → Editor-ECT7XZNS.js} +3 -3
  29. package/dist/HuePicker/index.js +5 -5
  30. package/dist/Input/FormField.d.ts +7 -1
  31. package/dist/Input/index.js +2 -2
  32. package/dist/{Input-VDSV7VWJ.css → Input-GMOWHZRG.css} +9 -0
  33. package/dist/LinkInterstitial/index.js +1 -1
  34. package/dist/ListInput/ListInput.d.ts +2 -0
  35. package/dist/ListInput/index.js +3 -3
  36. package/dist/{ListInput-P2ECUQJ2.css → ListInput-RLQND5QK.css} +30 -6
  37. package/dist/LogoSlot/LogoSlot.d.ts +9 -1
  38. package/dist/LogoSlot/LogoSlotGroup.d.ts +39 -0
  39. package/dist/LogoSlot/index.d.ts +3 -1
  40. package/dist/LogoSlot/index.js +1 -1
  41. package/dist/{LogoSlot-T2UFOJXU.css → LogoSlot-37RQBUCR.css} +115 -0
  42. package/dist/MarkdownEditor/index.js +5 -5
  43. package/dist/Menu/index.js +2 -2
  44. package/dist/MergeConflicts/index.js +5 -5
  45. package/dist/Modal/index.js +1 -1
  46. package/dist/OrgTable/index.js +1 -1
  47. package/dist/PresenterView/index.js +1 -1
  48. package/dist/PrincipalPicker/index.js +4 -4
  49. package/dist/RichEditor/index.js +1 -1
  50. package/dist/SegmentedControl/index.js +4 -4
  51. package/dist/ShareDialog/index.js +1 -1
  52. package/dist/SheetColumnEditor/index.js +8 -8
  53. package/dist/SheetGrid/index.js +3 -3
  54. package/dist/SlideFilmstrip/index.js +3 -3
  55. package/dist/Switcher/index.js +3 -3
  56. package/dist/Tabs/index.js +3 -3
  57. package/dist/TagsInput/index.js +2 -2
  58. package/dist/ThemeSwitcher/index.js +5 -5
  59. package/dist/TimeWindowPicker/index.js +3 -3
  60. package/dist/TreeCanvas/index.js +3 -3
  61. package/dist/TreeGrid/index.js +1 -1
  62. package/dist/VersionCompare/index.js +5 -5
  63. package/dist/{chunk-NCHKKYPQ.js → chunk-2ZXA2TN4.js} +1 -1
  64. package/dist/{chunk-P5JBDHWC.js → chunk-3AX2O4RT.js} +1 -1
  65. package/dist/{chunk-GHY63X4C.js → chunk-4L5L7HBA.js} +1 -1
  66. package/dist/{chunk-KHP7TJF7.js → chunk-6D4SVNQD.js} +1 -1
  67. package/dist/{chunk-H7NMJ5AI.js → chunk-75BRUZEB.js} +2 -2
  68. package/dist/{chunk-UUTEWGO6.js → chunk-A6XFA2MW.js} +6 -4
  69. package/dist/{chunk-WQ7S7CKZ.js → chunk-BUDVAXGD.js} +2 -2
  70. package/dist/{chunk-2UFUP2ZH.js → chunk-BYOBPRTS.js} +27 -10
  71. package/dist/{chunk-VP2ODUCC.js → chunk-CNTBUK24.js} +2 -2
  72. package/dist/{chunk-R6R2UHVG.js → chunk-EO6DUDKB.js} +2 -2
  73. package/dist/{chunk-SS4XCUUJ.js → chunk-F45VSK2M.js} +2 -2
  74. package/dist/{chunk-73WHPLWQ.js → chunk-GGP7XCRG.js} +1 -1
  75. package/dist/{chunk-ILFEWRLG.js → chunk-GKRPPSWY.js} +1 -1
  76. package/dist/{chunk-VN47PYUF.js → chunk-IRAS2CZ5.js} +3 -3
  77. package/dist/{chunk-SQ4JFHO7.js → chunk-K2FNW3MK.js} +1 -1
  78. package/dist/{chunk-SEPSXOGJ.js → chunk-LXCRHVMZ.js} +1 -1
  79. package/dist/{chunk-D6MTBXAJ.js → chunk-M7MMWXKE.js} +1 -1
  80. package/dist/{chunk-CAVWDJF4.js → chunk-MZ3QFQDL.js} +1 -1
  81. package/dist/{chunk-WXOYHVWG.js → chunk-N224FUS3.js} +1 -1
  82. package/dist/{chunk-X4NIE7CI.js → chunk-NILOJV62.js} +1 -1
  83. package/dist/{chunk-WX6IJJ4U.js → chunk-OW37LQDZ.js} +4 -4
  84. package/dist/{chunk-VTSJMDGP.js → chunk-PLHKAYFI.js} +4 -4
  85. package/dist/{chunk-627KFRON.js → chunk-POPBDDGZ.js} +2 -2
  86. package/dist/{chunk-XS2FJVMT.js → chunk-PZZHO6OS.js} +1 -1
  87. package/dist/{chunk-34RMTXDZ.js → chunk-RBUA7ZNK.js} +1 -1
  88. package/dist/{chunk-6FVGSWLS.js → chunk-SMVWDO72.js} +1 -1
  89. package/dist/{chunk-FB5CFQTG.js → chunk-TVILVNPG.js} +1 -1
  90. package/dist/{chunk-VBIM6HFC.js → chunk-UEPIBHS2.js} +1 -1
  91. package/dist/{chunk-RFPCHMSX.js → chunk-VBEMIZIJ.js} +1 -1
  92. package/dist/{chunk-EXRRTKWT.js → chunk-VS7EXOKP.js} +9 -5
  93. package/dist/{chunk-ZCIL5IHU.js → chunk-WG7G7UY5.js} +1 -1
  94. package/dist/{chunk-KHZYAEGZ.js → chunk-WV5SSDCZ.js} +1 -1
  95. package/dist/chunk-WXRH7NZW.js +80 -0
  96. package/dist/{chunk-MIEBOO7Y.js → chunk-XPRHKEQ2.js} +1 -1
  97. package/dist/{chunk-H55D66IK.js → chunk-Y4E6XL6M.js} +1 -1
  98. package/dist/{chunk-EW2N4FOD.js → chunk-YFUG6ARA.js} +2 -2
  99. package/dist/{chunk-V7GOOXPK.js → chunk-YQB4NNAE.js} +1 -1
  100. package/dist/{chunk-S63QOMXC.js → chunk-ZI4NRAIL.js} +1 -1
  101. package/dist/generated/index.js +71 -71
  102. package/dist/index.js +71 -71
  103. package/dist/styles.css +218 -10
  104. package/package.json +3 -3
  105. package/dist/chunk-BWOIUOO3.js +0 -62
  106. package/dist/{chunk-TMM32U7D.js → chunk-3JIZ2A6K.js} +1 -1
  107. package/dist/{chunk-ZFM5L7M4.js → chunk-I6NNUIIT.js} +1 -1
  108. package/dist/{chunk-D7Q5MQRF.js → chunk-ICPQIAD6.js} +1 -1
  109. package/dist/{chunk-SXBJMBSV.js → chunk-S6J3EWDP.js} +1 -1
@@ -1,17 +1,17 @@
1
1
  import '../chunk-FFMCMSJB.js';
2
- export { HuePicker, HueSwatch } from '../chunk-34RMTXDZ.js';
2
+ export { HuePicker, HueSwatch } from '../chunk-RBUA7ZNK.js';
3
3
  import '../chunk-AYKXMIOR.js';
4
- import '../chunk-6FVGSWLS.js';
5
- import '../chunk-ILFEWRLG.js';
4
+ import '../chunk-SMVWDO72.js';
5
+ import '../chunk-GKRPPSWY.js';
6
6
  import '../chunk-WIATRXEJ.js';
7
7
  import '../chunk-EGMQURBR.js';
8
8
  import '../chunk-BHHIIK3M.js';
9
- import '../chunk-TMM32U7D.js';
9
+ import '../chunk-3JIZ2A6K.js';
10
10
  import '../chunk-OMV5W53A.js';
11
11
  import '../chunk-2YTOOH3A.js';
12
12
  import '../chunk-OG6CL3EB.js';
13
13
  import '../chunk-H5XTJ7GJ.js';
14
- import '../chunk-LACA4JGC.js';
15
14
  import '../chunk-NUZHC6MM.js';
15
+ import '../chunk-LACA4JGC.js';
16
16
  import '../chunk-BZFWDIV6.js';
17
17
  import '../chunk-ODEQTPFM.js';
@@ -45,6 +45,12 @@ export interface FormFieldProps extends Omit<HTMLAttributes<HTMLElement>, 'child
45
45
  * much it is over. See `CharacterCount`.
46
46
  */
47
47
  limit?: FormFieldLimit | undefined;
48
+ /**
49
+ * A count that is not a length, drawn where a length count would be (at the
50
+ * end of the help line) and joined into the description the same way: how
51
+ * many items a list holds of the most it may, "3 of 5".
52
+ */
53
+ tally?: ReactNode;
48
54
  /** A control rendered beside the label, such as an Add button. */
49
55
  labelAction?: ReactNode;
50
56
  /**
@@ -91,4 +97,4 @@ export interface FormFieldProps extends Omit<HTMLAttributes<HTMLElement>, 'child
91
97
  * instant, the only line that said what right looks like disappeared. Both
92
98
  * lines are joined into `aria-describedby` in reading order, help first.
93
99
  */
94
- export declare const FormField: ({ label, required, optional, requiredNews, helper, helperOnFocus, error, limit, labelAction, hideLabel, as, describedBy, htmlFor, className, children, ...rest }: FormFieldProps) => import("react").JSX.Element;
100
+ export declare const FormField: ({ label, required, optional, requiredNews, helper, helperOnFocus, error, limit, tally, labelAction, hideLabel, as, describedBy, htmlFor, className, children, ...rest }: FormFieldProps) => import("react").JSX.Element;
@@ -1,9 +1,9 @@
1
- export { FormField, FormRow, FormSection, Input, InputAffix, Label, ReadOnlyField, Textarea, foldLineBreaks } from '../chunk-EXRRTKWT.js';
1
+ export { FormField, FormRow, FormSection, Input, InputAffix, Label, ReadOnlyField, Textarea, foldLineBreaks } from '../chunk-VS7EXOKP.js';
2
2
  import '../chunk-XCUUI7E7.js';
3
3
  import '../chunk-PQADV6P6.js';
4
4
  import '../chunk-RSAQOKH3.js';
5
5
  import '../chunk-H5XTJ7GJ.js';
6
- import '../chunk-LACA4JGC.js';
7
6
  import '../chunk-NUZHC6MM.js';
7
+ import '../chunk-LACA4JGC.js';
8
8
  import '../chunk-BZFWDIV6.js';
9
9
  import '../chunk-ODEQTPFM.js';
@@ -580,6 +580,15 @@
580
580
  min-width: 0;
581
581
  }
582
582
 
583
+ /* A count that is not a length ("3 of 5"), in the help line's own quiet ink. */
584
+ .crewlet-form-field__tally {
585
+ flex: none;
586
+ color: var(--color-text-tertiary);
587
+ font-size: var(--font-size-xs);
588
+ font-variant-numeric: tabular-nums;
589
+ line-height: var(--font-line-height-normal);
590
+ }
591
+
583
592
  /* SHOWN ONLY WHILE THE FIELD HAS FOCUS (`helperOnFocus`): a dense form reads as
584
593
  labels and values at rest, and the sentence appears under the field the
585
594
  reader is in. Still described, so a screen reader hears it on entry. */
@@ -6,7 +6,7 @@ import '../chunk-PQADV6P6.js';
6
6
  import '../chunk-OMV5W53A.js';
7
7
  import '../chunk-OG6CL3EB.js';
8
8
  import '../chunk-H5XTJ7GJ.js';
9
- import '../chunk-LACA4JGC.js';
10
9
  import '../chunk-NUZHC6MM.js';
10
+ import '../chunk-LACA4JGC.js';
11
11
  import '../chunk-BZFWDIV6.js';
12
12
  import '../chunk-ODEQTPFM.js';
@@ -109,6 +109,8 @@ export interface ListInputProps {
109
109
  itemError?: ((index: number, value: string) => ReactNode) | undefined;
110
110
  /** What the list says in place of the new-item box once it is full. */
111
111
  fullMessage?: ((max: number) => string) | undefined;
112
+ /** How many items the list holds of the most it may, at the end of the help line: "3 of 5". Drawn only with `maxItems`. */
113
+ tallyLabel?: ((count: number, max: number) => string) | undefined;
112
114
  /** The name of the button at the end of the box's row that appends what the box holds: "Add policy". */
113
115
  addLabel?: ((itemName: string) => string) | undefined;
114
116
  /** The word that button shows, which its name begins with: "Add". */
@@ -1,14 +1,14 @@
1
- export { ListInput, withDraft } from '../chunk-UUTEWGO6.js';
1
+ export { ListInput, withDraft } from '../chunk-A6XFA2MW.js';
2
2
  import '../chunk-XJ2QEBMM.js';
3
3
  import '../chunk-SMBKXWML.js';
4
- import '../chunk-EXRRTKWT.js';
4
+ import '../chunk-VS7EXOKP.js';
5
5
  import '../chunk-XCUUI7E7.js';
6
6
  import '../chunk-PQADV6P6.js';
7
7
  import '../chunk-RSAQOKH3.js';
8
8
  import '../chunk-OMV5W53A.js';
9
9
  import '../chunk-OG6CL3EB.js';
10
10
  import '../chunk-H5XTJ7GJ.js';
11
- import '../chunk-LACA4JGC.js';
12
11
  import '../chunk-NUZHC6MM.js';
12
+ import '../chunk-LACA4JGC.js';
13
13
  import '../chunk-BZFWDIV6.js';
14
14
  import '../chunk-ODEQTPFM.js';
@@ -61,7 +61,9 @@
61
61
  .crewlet-list-input__item {
62
62
  display: flex;
63
63
  align-items: center;
64
- gap: var(--spacing-2);
64
+ /* A step and the control's own inset: the ring an edited item draws stands
65
+ a step clear of its number. */
66
+ gap: var(--spacing-3);
65
67
  padding: var(--spacing-1) var(--spacing-3);
66
68
  border-block-end-width: 1px;
67
69
  border-block-end-style: solid;
@@ -169,11 +171,28 @@
169
171
  .crewlet-list-input__item .crewlet-input__control,
170
172
  .crewlet-list-input__item .crewlet-textarea {
171
173
  padding-block: var(--spacing-1);
172
- padding-inline: 0;
174
+ /*
175
+ * EDITING NEVER MOVES THE WORDS. The control keeps an inset of its own, so
176
+ * the boundary that hover and focus draw stands clear of the text rather
177
+ * than touching its first letter, and a negative margin of the same step
178
+ * takes it back, so the words sit exactly where they sat at rest and the
179
+ * caret lands on them without a jump.
180
+ */
181
+ padding-inline: var(--spacing-2);
182
+ margin-inline: calc(var(--spacing-2) * -1);
173
183
  }
174
184
 
175
185
  .crewlet-list-input__index {
176
186
  flex: none;
187
+ /*
188
+ * ON THE TEXT'S FIRST LINE, never centred on a wrapped item: it starts where
189
+ * the words start (the control's edge and its block inset below the row's
190
+ * own padding) and takes their line's height, so the number and the words
191
+ * share a baseline however many lines the item runs to.
192
+ */
193
+ align-self: flex-start;
194
+ padding-block-start: calc(1px + var(--spacing-1));
195
+ line-height: calc(var(--font-size-compact) * var(--font-line-height-normal));
177
196
  min-width: var(--spacing-4);
178
197
  text-align: center;
179
198
  font-size: var(--font-size-xs);
@@ -257,11 +276,16 @@
257
276
  }
258
277
  }
259
278
 
260
- /* The Add button ends the box's row: the field and its Add read as one control. */
279
+ /*
280
+ * The Add button ends the box's row: the field and its Add read as one
281
+ * control. It is the field's height (the medium control step a one-line box
282
+ * stands at) and sits on the box's first line, so the two share one line and
283
+ * the button stays put as a long item grows the box under it.
284
+ */
261
285
  .crewlet-list-input__add-control {
262
286
  display: inline-flex;
263
287
  flex: none;
264
- align-self: center;
288
+ align-self: flex-start;
265
289
  }
266
290
 
267
291
  /*
@@ -279,11 +303,11 @@
279
303
  }
280
304
 
281
305
  .crewlet-list-input__item > .crewlet-list-input__field {
282
- flex-basis: calc(100% - var(--spacing-4) - var(--spacing-2));
306
+ flex-basis: calc(100% - var(--spacing-4) - var(--spacing-3));
283
307
  }
284
308
 
285
309
  .crewlet-list-input__item--draggable > .crewlet-list-input__field {
286
- flex-basis: calc(100% - var(--spacing-4) * 2 - var(--spacing-2) * 2);
310
+ flex-basis: calc(100% - var(--spacing-4) * 2 - var(--spacing-3) * 2);
287
311
  }
288
312
 
289
313
  .crewlet-list-input__item > .crewlet-list-input__actions {
@@ -3,6 +3,12 @@ import { type ReactNode } from 'react';
3
3
  export type LogoSlotGround = 'light' | 'dark';
4
4
  /** A wide logo (a wordmark, a lockup) or a square mark. */
5
5
  export type LogoSlotShape = 'wide' | 'square';
6
+ /**
7
+ * `md` is the slot a logo is chosen in. `sm` is a thumbnail of it, for a
8
+ * summary that shows what is set (a review of the brand): a third of the
9
+ * stage's height with a tighter inset and smaller words, best read-only.
10
+ */
11
+ export type LogoSlotSize = 'md' | 'sm';
6
12
  export interface LogoSlotLabels {
7
13
  /** The picker's label while the slot is empty. */
8
14
  choose: string;
@@ -31,6 +37,8 @@ export interface LogoSlotProps {
31
37
  */
32
38
  groundColor?: string | undefined;
33
39
  shape?: LogoSlotShape | undefined;
40
+ /** `md` (the default), or `sm`, a thumbnail for a summary. */
41
+ size?: LogoSlotSize | undefined;
34
42
  /**
35
43
  * The logo, as an address the host has already validated (the engine's file
36
44
  * route, through the dashboard's checked blob path). Empty, the slot shows
@@ -81,4 +89,4 @@ export interface LogoSlotProps {
81
89
  * The engine checks every file; a refusal comes back as `error`, drawn under
82
90
  * the slot and announced, saying what to change.
83
91
  */
84
- export declare function LogoSlot({ label, description, ground, groundColor, shape, src, alt, guide, uploading, error, editable, onFile, onRemove, accept, download, emptyNote, className, labels, }: LogoSlotProps): import("react").JSX.Element;
92
+ export declare function LogoSlot({ label, description, ground, groundColor, shape, size, src, alt, guide, uploading, error, editable, onFile, onRemove, accept, download, emptyNote, className, labels, }: LogoSlotProps): import("react").JSX.Element;
@@ -0,0 +1,39 @@
1
+ import { type HTMLAttributes, type ReactNode } from 'react';
2
+ /** What a slot inside a group needs: the shared caption it is described by. */
3
+ interface LogoSlotGroupContextValue {
4
+ hintId: string | undefined;
5
+ }
6
+ /** The group a slot stands in, or null for a slot on its own. */
7
+ export declare function useLogoSlotGroup(): LogoSlotGroupContextValue | null;
8
+ export interface LogoSlotGroupProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
9
+ /** The slots, side by side: `LogoSlot`s. */
10
+ children: ReactNode;
11
+ /** Names the group for a screen reader: "Logos". */
12
+ label?: string | undefined;
13
+ /**
14
+ * What may be brought, written once under the row rather than under every
15
+ * slot: "SVG up to 512 KB; PNG or WebP up to 2 MB and 4096 px." Every slot's
16
+ * picker is described by it. Left out, no caption is drawn.
17
+ */
18
+ hint?: ReactNode;
19
+ }
20
+ /**
21
+ * Logo slots side by side, aligned row by row.
22
+ *
23
+ * ONE ROW PER PART ACROSS THE SLOTS. Each slot is a subgrid of the group's
24
+ * rows, so the names and their descriptions, the stages, the notes under them
25
+ * and the action rows each start on one line across every slot, whatever the
26
+ * copy in each: a description that wraps to two lines moves every stage down
27
+ * together rather than its own. The stages are one height, so the previews
28
+ * are one size.
29
+ *
30
+ * THE CAPTION IS WRITTEN ONCE. What may be brought is the same for every
31
+ * slot, so it is drawn once under the row (`hint`) and each picker is
32
+ * described by it, rather than repeated three times.
33
+ *
34
+ * THE COLUMNS FOLLOW THE ROOM: as many as fit at 9rem each, so three stand
35
+ * in one row in a 480px form column, and one under another where the group
36
+ * has under 30rem, each still aligned within itself.
37
+ */
38
+ export declare function LogoSlotGroup({ children, label, hint, className, ...rest }: LogoSlotGroupProps): import("react").JSX.Element;
39
+ export {};
@@ -1,3 +1,5 @@
1
1
  import './LogoSlot.css';
2
2
  export { LogoSlot } from './LogoSlot.js';
3
- export type { LogoSlotGround, LogoSlotLabels, LogoSlotProps, LogoSlotShape } from './LogoSlot.js';
3
+ export { LogoSlotGroup } from './LogoSlotGroup.js';
4
+ export type { LogoSlotGround, LogoSlotLabels, LogoSlotProps, LogoSlotShape, LogoSlotSize } from './LogoSlot.js';
5
+ export type { LogoSlotGroupProps } from './LogoSlotGroup.js';
@@ -1,4 +1,4 @@
1
- export { LogoSlot } from '../chunk-2UFUP2ZH.js';
1
+ export { LogoSlot, LogoSlotGroup } from '../chunk-BYOBPRTS.js';
2
2
  import '../chunk-THDGBD6Y.js';
3
3
  import '../chunk-WW7TU6HE.js';
4
4
  import '../chunk-KYIAFNU7.js';
@@ -124,6 +124,13 @@
124
124
  opacity: 0.5;
125
125
  }
126
126
 
127
+ .crewlet-logo-slot__notes {
128
+ display: flex;
129
+ flex-direction: column;
130
+ gap: var(--spacing-1);
131
+ min-width: 0;
132
+ }
133
+
127
134
  .crewlet-logo-slot__empty {
128
135
  margin: 0;
129
136
  color: var(--color-text-tertiary);
@@ -157,3 +164,111 @@
157
164
  color: var(--color-text-tertiary);
158
165
  font-size: var(--font-size-xs);
159
166
  }
167
+
168
+ /*
169
+ * A GROUP OF SLOTS, aligned row by row (LogoSlotGroup.tsx). Each slot is a
170
+ * subgrid spanning the group's four rows: its name and description, its
171
+ * stage, what is said under it, and its actions. A row holds the tallest of
172
+ * its parts across the slots, so every stage, note and action row starts on
173
+ * one line.
174
+ *
175
+ * NO GRID GAP ANYWHERE IN THE ROWS. A gap between the group's rows is drawn
176
+ * between a subgrid's rows too, so an empty row (no notes in any slot) still
177
+ * stood two gaps tall between the stage and the actions. Every step is a
178
+ * margin on the part that follows it instead, and a row nobody uses takes no
179
+ * room at all; a line of slots is set off from the next (on a narrow page)
180
+ * by the slot's own end margin.
181
+ *
182
+ * THREE ACROSS IN A FORM'S COLUMN. The columns are as many as fit at 9rem,
183
+ * so three slots stand in one row in a 480px column (a setup step's), and
184
+ * the group's own width under 30rem stacks them one under another.
185
+ */
186
+ .crewlet-logo-slot-group {
187
+ container-type: inline-size;
188
+ display: flex;
189
+ flex-direction: column;
190
+ min-width: 0;
191
+ }
192
+
193
+ .crewlet-logo-slot-group__slots {
194
+ display: grid;
195
+ grid-template-columns: repeat(auto-fit, minmax(min(9rem, 100%), 1fr));
196
+ column-gap: var(--spacing-5);
197
+ row-gap: 0;
198
+ }
199
+
200
+ @container (width < 30rem) {
201
+ .crewlet-logo-slot-group__slots {
202
+ grid-template-columns: minmax(0, 1fr);
203
+ }
204
+ }
205
+
206
+ .crewlet-logo-slot-group__slots > .crewlet-logo-slot {
207
+ display: grid;
208
+ grid-row: span 4;
209
+ grid-template-rows: subgrid;
210
+ row-gap: 0;
211
+ align-content: start;
212
+ margin-block-end: var(--spacing-5);
213
+ }
214
+
215
+ .crewlet-logo-slot-group__slots > .crewlet-logo-slot > .crewlet-logo-slot__head {
216
+ grid-row: 1;
217
+ margin-block-end: var(--spacing-2);
218
+ }
219
+
220
+ .crewlet-logo-slot-group__slots > .crewlet-logo-slot > :is(.crewlet-logo-slot__stage, .crewlet-file-drop) {
221
+ grid-row: 2;
222
+ }
223
+
224
+ .crewlet-logo-slot-group__slots > .crewlet-logo-slot > .crewlet-logo-slot__notes {
225
+ grid-row: 3;
226
+ margin-block-start: var(--spacing-2);
227
+ }
228
+
229
+ .crewlet-logo-slot-group__slots > .crewlet-logo-slot > .crewlet-logo-slot__foot {
230
+ grid-row: 4;
231
+ margin-block-start: var(--spacing-2);
232
+ }
233
+
234
+ .crewlet-logo-slot-group__hint {
235
+ margin: 0;
236
+ color: var(--color-text-tertiary);
237
+ font-size: var(--font-size-xs);
238
+ line-height: var(--font-line-height-normal);
239
+ }
240
+
241
+ /*
242
+ * SMALL: a thumbnail of the slot for a summary of what is set. The stage
243
+ * keeps its ground, its edge and the space the logo keeps, at half the height
244
+ * with a tighter inset, and the words step down to the summary's sizes.
245
+ */
246
+ .crewlet-logo-slot--sm {
247
+ --crewlet-logo-slot-height: calc(var(--size-row-lg) * 1.5);
248
+ --crewlet-logo-slot-padding: var(--spacing-2);
249
+ --crewlet-logo-slot-clear: var(--spacing-1);
250
+
251
+ gap: var(--spacing-1);
252
+ }
253
+
254
+ .crewlet-logo-slot--sm .crewlet-logo-slot__label {
255
+ font-size: var(--font-size-xs);
256
+ }
257
+
258
+ .crewlet-logo-slot--sm .crewlet-logo-slot__description,
259
+ .crewlet-logo-slot--sm .crewlet-logo-slot__empty {
260
+ font-size: var(--font-size-2xs);
261
+ }
262
+
263
+ .crewlet-logo-slot--sm .crewlet-logo-slot__stage {
264
+ border-radius: var(--radius-md);
265
+ }
266
+
267
+ .crewlet-logo-slot--sm .crewlet-logo-slot__placeholder {
268
+ width: calc(var(--size-row-lg) * 1.5);
269
+ height: var(--size-row-sm);
270
+ }
271
+
272
+ .crewlet-logo-slot--sm .crewlet-logo-slot__stage--square .crewlet-logo-slot__placeholder {
273
+ width: var(--size-row-sm);
274
+ }
@@ -1,17 +1,17 @@
1
- export { MARKDOWN_FORMATS, MarkdownEditor, formatMarkdown, insertMarkdown, markdownWords } from '../chunk-SS4XCUUJ.js';
1
+ export { MARKDOWN_FORMATS, MarkdownEditor, formatMarkdown, insertMarkdown, markdownWords } from '../chunk-F45VSK2M.js';
2
2
  import '../chunk-NR4CPM4T.js';
3
3
  import '../chunk-OOC7Q67K.js';
4
- import '../chunk-6FVGSWLS.js';
5
- import '../chunk-ILFEWRLG.js';
4
+ import '../chunk-SMVWDO72.js';
5
+ import '../chunk-GKRPPSWY.js';
6
6
  import '../chunk-WIATRXEJ.js';
7
7
  import '../chunk-EGMQURBR.js';
8
8
  import '../chunk-BHHIIK3M.js';
9
- import '../chunk-TMM32U7D.js';
9
+ import '../chunk-3JIZ2A6K.js';
10
10
  import '../chunk-OMV5W53A.js';
11
11
  import '../chunk-2YTOOH3A.js';
12
12
  import '../chunk-OG6CL3EB.js';
13
13
  import '../chunk-H5XTJ7GJ.js';
14
- import '../chunk-LACA4JGC.js';
15
14
  import '../chunk-NUZHC6MM.js';
15
+ import '../chunk-LACA4JGC.js';
16
16
  import '../chunk-BZFWDIV6.js';
17
17
  import '../chunk-ODEQTPFM.js';
@@ -1,8 +1,8 @@
1
- export { Menu } from '../chunk-TMM32U7D.js';
1
+ export { Menu } from '../chunk-3JIZ2A6K.js';
2
2
  import '../chunk-OMV5W53A.js';
3
3
  import '../chunk-OG6CL3EB.js';
4
4
  import '../chunk-H5XTJ7GJ.js';
5
- import '../chunk-LACA4JGC.js';
6
5
  import '../chunk-NUZHC6MM.js';
6
+ import '../chunk-LACA4JGC.js';
7
7
  import '../chunk-BZFWDIV6.js';
8
8
  import '../chunk-ODEQTPFM.js';
@@ -1,16 +1,16 @@
1
- export { MERGE_CONFLICTS_LABELS, MergeConflicts } from '../chunk-XS2FJVMT.js';
1
+ export { MERGE_CONFLICTS_LABELS, MergeConflicts } from '../chunk-PZZHO6OS.js';
2
2
  import '../chunk-OOC7Q67K.js';
3
- import '../chunk-6FVGSWLS.js';
4
- import '../chunk-ILFEWRLG.js';
3
+ import '../chunk-SMVWDO72.js';
4
+ import '../chunk-GKRPPSWY.js';
5
5
  import '../chunk-WIATRXEJ.js';
6
6
  import '../chunk-EGMQURBR.js';
7
7
  import '../chunk-BHHIIK3M.js';
8
- import '../chunk-TMM32U7D.js';
8
+ import '../chunk-3JIZ2A6K.js';
9
9
  import '../chunk-OMV5W53A.js';
10
10
  import '../chunk-2YTOOH3A.js';
11
11
  import '../chunk-OG6CL3EB.js';
12
12
  import '../chunk-H5XTJ7GJ.js';
13
- import '../chunk-LACA4JGC.js';
14
13
  import '../chunk-NUZHC6MM.js';
14
+ import '../chunk-LACA4JGC.js';
15
15
  import '../chunk-BZFWDIV6.js';
16
16
  import '../chunk-ODEQTPFM.js';
@@ -3,7 +3,7 @@ import '../chunk-PQADV6P6.js';
3
3
  import '../chunk-OMV5W53A.js';
4
4
  import '../chunk-OG6CL3EB.js';
5
5
  import '../chunk-H5XTJ7GJ.js';
6
- import '../chunk-LACA4JGC.js';
7
6
  import '../chunk-NUZHC6MM.js';
7
+ import '../chunk-LACA4JGC.js';
8
8
  import '../chunk-BZFWDIV6.js';
9
9
  import '../chunk-ODEQTPFM.js';
@@ -8,7 +8,7 @@ import '../chunk-PZKHBB7D.js';
8
8
  import '../chunk-TROLVEZY.js';
9
9
  import '../chunk-OMV5W53A.js';
10
10
  import '../chunk-H5XTJ7GJ.js';
11
- import '../chunk-LACA4JGC.js';
12
11
  import '../chunk-NUZHC6MM.js';
12
+ import '../chunk-LACA4JGC.js';
13
13
  import '../chunk-BZFWDIV6.js';
14
14
  import '../chunk-ODEQTPFM.js';
@@ -5,7 +5,7 @@ import '../chunk-RK4XPHVG.js';
5
5
  import '../chunk-OMV5W53A.js';
6
6
  import '../chunk-OG6CL3EB.js';
7
7
  import '../chunk-H5XTJ7GJ.js';
8
- import '../chunk-LACA4JGC.js';
9
8
  import '../chunk-NUZHC6MM.js';
9
+ import '../chunk-LACA4JGC.js';
10
10
  import '../chunk-BZFWDIV6.js';
11
11
  import '../chunk-ODEQTPFM.js';
@@ -1,16 +1,16 @@
1
- export { PrincipalPicker } from '../chunk-KHZYAEGZ.js';
2
- import '../chunk-P5JBDHWC.js';
1
+ export { PrincipalPicker } from '../chunk-WV5SSDCZ.js';
2
+ import '../chunk-3AX2O4RT.js';
3
3
  import '../chunk-7KHM2FZH.js';
4
4
  import '../chunk-CI3VPIJN.js';
5
5
  import '../chunk-5AQBPHZD.js';
6
6
  import '../chunk-PZKHBB7D.js';
7
- import '../chunk-EXRRTKWT.js';
7
+ import '../chunk-VS7EXOKP.js';
8
8
  import '../chunk-XCUUI7E7.js';
9
9
  import '../chunk-PQADV6P6.js';
10
10
  import '../chunk-RSAQOKH3.js';
11
11
  import '../chunk-2YTOOH3A.js';
12
12
  import '../chunk-H5XTJ7GJ.js';
13
- import '../chunk-LACA4JGC.js';
14
13
  import '../chunk-NUZHC6MM.js';
14
+ import '../chunk-LACA4JGC.js';
15
15
  import '../chunk-BZFWDIV6.js';
16
16
  import '../chunk-ODEQTPFM.js';
@@ -1,4 +1,4 @@
1
- export { RichEditor, preloadRichEditor } from '../chunk-KHP7TJF7.js';
1
+ export { RichEditor, preloadRichEditor } from '../chunk-6D4SVNQD.js';
2
2
  export { RICH_EDITOR_LABELS, richEditorLabels } from '../chunk-CSQTDGTS.js';
3
3
  import '../chunk-BAKPMH3S.js';
4
4
  import '../chunk-BPCY7ZID.js';
@@ -1,15 +1,15 @@
1
1
  import '../chunk-OOC7Q67K.js';
2
- export { SegmentedControl } from '../chunk-6FVGSWLS.js';
3
- import '../chunk-ILFEWRLG.js';
2
+ export { SegmentedControl } from '../chunk-SMVWDO72.js';
3
+ import '../chunk-GKRPPSWY.js';
4
4
  import '../chunk-WIATRXEJ.js';
5
5
  import '../chunk-EGMQURBR.js';
6
6
  import '../chunk-BHHIIK3M.js';
7
- import '../chunk-TMM32U7D.js';
7
+ import '../chunk-3JIZ2A6K.js';
8
8
  import '../chunk-OMV5W53A.js';
9
9
  import '../chunk-2YTOOH3A.js';
10
10
  import '../chunk-OG6CL3EB.js';
11
11
  import '../chunk-H5XTJ7GJ.js';
12
- import '../chunk-LACA4JGC.js';
13
12
  import '../chunk-NUZHC6MM.js';
13
+ import '../chunk-LACA4JGC.js';
14
14
  import '../chunk-BZFWDIV6.js';
15
15
  import '../chunk-ODEQTPFM.js';
@@ -15,7 +15,7 @@ import '../chunk-OMV5W53A.js';
15
15
  import '../chunk-2YTOOH3A.js';
16
16
  import '../chunk-OG6CL3EB.js';
17
17
  import '../chunk-H5XTJ7GJ.js';
18
- import '../chunk-LACA4JGC.js';
19
18
  import '../chunk-NUZHC6MM.js';
19
+ import '../chunk-LACA4JGC.js';
20
20
  import '../chunk-BZFWDIV6.js';
21
21
  import '../chunk-ODEQTPFM.js';
@@ -1,28 +1,28 @@
1
- export { SHEET_COLUMN_EDITOR_LABELS, SheetColumnEditor, SheetColumnTypeGlyph } from '../chunk-VTSJMDGP.js';
1
+ export { SHEET_COLUMN_EDITOR_LABELS, SheetColumnEditor, SheetColumnTypeGlyph } from '../chunk-PLHKAYFI.js';
2
2
  import '../chunk-XQZ6EWOE.js';
3
3
  import '../chunk-FFMCMSJB.js';
4
4
  import '../chunk-7KHM2FZH.js';
5
5
  import '../chunk-LFSIKGRQ.js';
6
6
  import '../chunk-Z7JYG5TF.js';
7
- import '../chunk-34RMTXDZ.js';
7
+ import '../chunk-RBUA7ZNK.js';
8
8
  import '../chunk-AYKXMIOR.js';
9
- import '../chunk-6FVGSWLS.js';
10
- import '../chunk-ILFEWRLG.js';
9
+ import '../chunk-SMVWDO72.js';
10
+ import '../chunk-GKRPPSWY.js';
11
11
  import '../chunk-WIATRXEJ.js';
12
12
  import '../chunk-EGMQURBR.js';
13
- import '../chunk-NCHKKYPQ.js';
13
+ import '../chunk-2ZXA2TN4.js';
14
14
  import '../chunk-SMBKXWML.js';
15
- import '../chunk-EXRRTKWT.js';
15
+ import '../chunk-VS7EXOKP.js';
16
16
  import '../chunk-XCUUI7E7.js';
17
17
  import '../chunk-BHHIIK3M.js';
18
18
  import '../chunk-PQADV6P6.js';
19
19
  import '../chunk-RSAQOKH3.js';
20
- import '../chunk-TMM32U7D.js';
20
+ import '../chunk-3JIZ2A6K.js';
21
21
  import '../chunk-OMV5W53A.js';
22
22
  import '../chunk-2YTOOH3A.js';
23
23
  import '../chunk-OG6CL3EB.js';
24
24
  import '../chunk-H5XTJ7GJ.js';
25
- import '../chunk-LACA4JGC.js';
26
25
  import '../chunk-NUZHC6MM.js';
26
+ import '../chunk-LACA4JGC.js';
27
27
  import '../chunk-BZFWDIV6.js';
28
28
  import '../chunk-ODEQTPFM.js';
@@ -1,4 +1,4 @@
1
- export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from '../chunk-WXOYHVWG.js';
1
+ export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from '../chunk-N224FUS3.js';
2
2
  import '../chunk-O2EGEONV.js';
3
3
  import '../chunk-CENOOTAV.js';
4
4
  import '../chunk-KYIAFNU7.js';
@@ -14,11 +14,11 @@ import '../chunk-WIATRXEJ.js';
14
14
  import '../chunk-5AQBPHZD.js';
15
15
  import '../chunk-PZKHBB7D.js';
16
16
  import '../chunk-RSAQOKH3.js';
17
- import '../chunk-TMM32U7D.js';
17
+ import '../chunk-3JIZ2A6K.js';
18
18
  import '../chunk-OMV5W53A.js';
19
19
  import '../chunk-OG6CL3EB.js';
20
20
  import '../chunk-H5XTJ7GJ.js';
21
- import '../chunk-LACA4JGC.js';
22
21
  import '../chunk-NUZHC6MM.js';
22
+ import '../chunk-LACA4JGC.js';
23
23
  import '../chunk-BZFWDIV6.js';
24
24
  import '../chunk-ODEQTPFM.js';
@@ -1,13 +1,13 @@
1
- export { SlideFilmstrip } from '../chunk-SQ4JFHO7.js';
1
+ export { SlideFilmstrip } from '../chunk-K2FNW3MK.js';
2
2
  import '../chunk-RMEBFYL7.js';
3
3
  import '../chunk-XJ2QEBMM.js';
4
4
  import '../chunk-SMBKXWML.js';
5
5
  import '../chunk-RSAQOKH3.js';
6
- import '../chunk-TMM32U7D.js';
6
+ import '../chunk-3JIZ2A6K.js';
7
7
  import '../chunk-OMV5W53A.js';
8
8
  import '../chunk-OG6CL3EB.js';
9
9
  import '../chunk-H5XTJ7GJ.js';
10
- import '../chunk-LACA4JGC.js';
11
10
  import '../chunk-NUZHC6MM.js';
11
+ import '../chunk-LACA4JGC.js';
12
12
  import '../chunk-BZFWDIV6.js';
13
13
  import '../chunk-ODEQTPFM.js';
@@ -1,10 +1,10 @@
1
- export { Switcher } from '../chunk-VBIM6HFC.js';
1
+ export { Switcher } from '../chunk-UEPIBHS2.js';
2
2
  import '../chunk-YCC2S7DF.js';
3
3
  import '../chunk-7KHM2FZH.js';
4
4
  import '../chunk-KHJIEPZV.js';
5
5
  import '../chunk-FYTIJM2T.js';
6
6
  import '../chunk-TEUQWOWZ.js';
7
- import '../chunk-EXRRTKWT.js';
7
+ import '../chunk-VS7EXOKP.js';
8
8
  import '../chunk-XCUUI7E7.js';
9
9
  import '../chunk-PQADV6P6.js';
10
10
  import '../chunk-RSAQOKH3.js';
@@ -12,7 +12,7 @@ import '../chunk-RTPQDNW3.js';
12
12
  import '../chunk-OMV5W53A.js';
13
13
  import '../chunk-OG6CL3EB.js';
14
14
  import '../chunk-H5XTJ7GJ.js';
15
- import '../chunk-LACA4JGC.js';
16
15
  import '../chunk-NUZHC6MM.js';
16
+ import '../chunk-LACA4JGC.js';
17
17
  import '../chunk-BZFWDIV6.js';
18
18
  import '../chunk-ODEQTPFM.js';