@crewlethq/ui 0.23.0 → 0.25.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 (175) hide show
  1. package/README.md +75 -3
  2. package/dist/ArrangeList/index.js +2 -2
  3. package/dist/ArtifactCard/ArtifactCard.d.ts +3 -2
  4. package/dist/ArtifactCard/index.js +1 -1
  5. package/dist/ArtifactCover/ArtifactCover.d.ts +37 -0
  6. package/dist/ArtifactCover/DashboardCover.d.ts +46 -0
  7. package/dist/ArtifactCover/index.d.ts +6 -0
  8. package/dist/ArtifactCover/index.js +14 -0
  9. package/dist/ArtifactCover-D4MBEJ5H.css +67 -0
  10. package/dist/ArtifactIcon/ArtifactIcon.d.ts +29 -0
  11. package/dist/ArtifactIcon/index.d.ts +2 -0
  12. package/dist/ArtifactIcon/index.js +13 -0
  13. package/dist/AvatarPicker/index.js +6 -6
  14. package/dist/Canvas/Canvas.d.ts +13 -2
  15. package/dist/Canvas/index.js +1 -1
  16. package/dist/CanvasBoard/CanvasBoard.d.ts +117 -0
  17. package/dist/CanvasBoard/budget.d.ts +38 -0
  18. package/dist/CanvasBoard/index.d.ts +5 -0
  19. package/dist/CanvasBoard/index.js +10 -0
  20. package/dist/CanvasBoard-ZLPDINSM.css +236 -0
  21. package/dist/CanvasSchematic/CanvasSchematic.d.ts +31 -0
  22. package/dist/CanvasSchematic/index.d.ts +3 -0
  23. package/dist/CanvasSchematic/index.js +2 -0
  24. package/dist/CanvasSchematic-PLB3N46J.css +36 -0
  25. package/dist/ChangeMark/index.js +3 -3
  26. package/dist/CharacterPicker/index.js +2 -2
  27. package/dist/Checkbox/Checkbox.d.ts +6 -0
  28. package/dist/Checkbox/index.js +1 -1
  29. package/dist/{Checkbox-KT7RS6QQ.css → Checkbox-5UORUG3F.css} +16 -0
  30. package/dist/CommentThread/index.js +2 -2
  31. package/dist/DashboardCover-RMINBODB.css +143 -0
  32. package/dist/DataTable/index.js +3 -3
  33. package/dist/DataView/index.js +5 -5
  34. package/dist/DatasetSource/DatasetSource.d.ts +83 -0
  35. package/dist/DatasetSource/index.d.ts +3 -0
  36. package/dist/DatasetSource/index.js +7 -0
  37. package/dist/DatasetSource-47LBDMPR.css +129 -0
  38. package/dist/DocTabsEditor/DocTabsEditor.d.ts +60 -0
  39. package/dist/DocTabsEditor/index.d.ts +3 -0
  40. package/dist/DocTabsEditor/index.js +9 -0
  41. package/dist/DocTabsEditor-RCOWHX5J.css +78 -0
  42. package/dist/DownloadButton/index.js +2 -2
  43. package/dist/HuePicker/index.js +4 -4
  44. package/dist/LinkInterstitial/index.js +2 -2
  45. package/dist/MarkdownEditor/index.js +5 -5
  46. package/dist/MergeConflicts/MergeConflicts.d.ts +51 -0
  47. package/dist/MergeConflicts/index.d.ts +3 -0
  48. package/dist/MergeConflicts/index.js +9 -0
  49. package/dist/MergeConflicts-O44ESH4T.css +77 -0
  50. package/dist/Meter/index.js +1 -1
  51. package/dist/{Meter-5VCSFMZW.css → Meter-ZZRFUEOH.css} +15 -0
  52. package/dist/ObjectHeader/ObjectHeader.d.ts +7 -1
  53. package/dist/ObjectHeader/index.js +1 -1
  54. package/dist/{ObjectHeader-UNVYM2KD.css → ObjectHeader-D7GU7QNI.css} +15 -0
  55. package/dist/PeopleRail/index.js +3 -3
  56. package/dist/PresenceModel/index.d.ts +1 -1
  57. package/dist/PresenceModel/index.js +1 -1
  58. package/dist/PresenceModel/presence.d.ts +10 -2
  59. package/dist/PresenceStack/index.js +3 -3
  60. package/dist/PresenterView/PresenterView.d.ts +52 -0
  61. package/dist/PresenterView/index.d.ts +3 -0
  62. package/dist/PresenterView/index.js +8 -0
  63. package/dist/PresenterView-T2C6ZZ3N.css +103 -0
  64. package/dist/Section/index.js +1 -1
  65. package/dist/{Section-QRUPRIQ2.css → Section-QR3ILQVK.css} +4 -1
  66. package/dist/SegmentedControl/SegmentedControl.d.ts +17 -0
  67. package/dist/SegmentedControl/index.js +4 -4
  68. package/dist/{SegmentedControl-PKBLJVSA.css → SegmentedControl-FLI45IOW.css} +13 -0
  69. package/dist/ShareDialog/index.js +3 -3
  70. package/dist/SheetGrid/SheetGrid.d.ts +24 -2
  71. package/dist/SheetGrid/index.js +11 -7
  72. package/dist/{SheetGrid-4HOXDVIB.css → SheetGrid-J3TKKXZL.css} +87 -17
  73. package/dist/SheetModel/edits.d.ts +7 -1
  74. package/dist/SheetModel/index.js +2 -2
  75. package/dist/SheetModel/labels.d.ts +9 -0
  76. package/dist/SheetModel/types.d.ts +6 -0
  77. package/dist/SlideCompare/SlideCompare.d.ts +52 -0
  78. package/dist/SlideCompare/index.d.ts +3 -0
  79. package/dist/SlideCompare/index.js +7 -0
  80. package/dist/SlideCompare-MGM3U2ME.css +80 -0
  81. package/dist/SlideFilmstrip/SlideFilmstrip.d.ts +50 -0
  82. package/dist/SlideFilmstrip/index.d.ts +3 -0
  83. package/dist/SlideFilmstrip/index.js +8 -0
  84. package/dist/SlideFilmstrip-BCLNAHFX.css +108 -0
  85. package/dist/SlideGrid/SlideGrid.d.ts +32 -0
  86. package/dist/SlideGrid/index.d.ts +3 -0
  87. package/dist/SlideGrid/index.js +5 -0
  88. package/dist/SlideGrid-RT6QEQEE.css +82 -0
  89. package/dist/SlideStage/SlideStage.d.ts +47 -0
  90. package/dist/SlideStage/index.d.ts +5 -0
  91. package/dist/SlideStage/index.js +4 -0
  92. package/dist/SlideStage/useSlideKeys.d.ts +21 -0
  93. package/dist/SlideStage-XIOTMMRU.css +32 -0
  94. package/dist/Switcher/index.js +2 -2
  95. package/dist/TableCells/index.js +2 -2
  96. package/dist/Tabs/index.js +2 -2
  97. package/dist/Tabs/roving.d.ts +1 -0
  98. package/dist/TagGroup/TagGroup.d.ts +16 -1
  99. package/dist/TagGroup/index.js +1 -1
  100. package/dist/{TagGroup-BCQZD7ZD.css → TagGroup-NAXTJHDS.css} +22 -0
  101. package/dist/ThemeGallery/index.js +2 -2
  102. package/dist/ThemeSwitcher/index.js +5 -5
  103. package/dist/TreeCanvas/index.js +2 -2
  104. package/dist/VersionCompare/VersionCompare.d.ts +8 -1
  105. package/dist/VersionCompare/index.js +5 -5
  106. package/dist/VersionTimeline/index.js +1 -1
  107. package/dist/{VersionTimeline-EBJ6MIPJ.css → VersionTimeline-6KRXEEOO.css} +7 -7
  108. package/dist/WidgetFrame/WidgetFrame.d.ts +73 -0
  109. package/dist/WidgetFrame/index.d.ts +3 -0
  110. package/dist/WidgetFrame/index.js +6 -0
  111. package/dist/WidgetFrame-4EFJOJMW.css +127 -0
  112. package/dist/chunk-3D7PSL2L.js +438 -0
  113. package/dist/{chunk-SJCKMSQK.js → chunk-5LUI3WQP.js} +1 -1
  114. package/dist/{chunk-TODND5AD.js → chunk-6J35F334.js} +7 -4
  115. package/dist/{chunk-IASV5UCP.js → chunk-7T42VQQT.js} +3 -1
  116. package/dist/{chunk-BJCFNRGH.js → chunk-BEHFTRMZ.js} +1 -1
  117. package/dist/chunk-BQYQWJPK.js +80 -0
  118. package/dist/{chunk-KLIEPFEZ.js → chunk-C2FRTWKO.js} +1 -1
  119. package/dist/{chunk-APS747CR.js → chunk-EHQTPVV4.js} +5 -3
  120. package/dist/{chunk-A2UXBCLO.js → chunk-FAQGGX2Z.js} +1 -1
  121. package/dist/chunk-FQCLKD7U.js +2 -0
  122. package/dist/{chunk-J4OKGJQ6.js → chunk-FVLCTCMV.js} +1 -1
  123. package/dist/{chunk-XJFOOXCF.js → chunk-HJEVSQN6.js} +1 -1
  124. package/dist/chunk-HONZQ4UR.js +107 -0
  125. package/dist/{chunk-5PSXBL73.js → chunk-HVIX5ECM.js} +1 -1
  126. package/dist/{chunk-36CWC2NH.js → chunk-INTEH4F3.js} +271 -143
  127. package/dist/{chunk-F6NZOVWL.js → chunk-IW55G7XG.js} +6 -2
  128. package/dist/chunk-KNLJL3VP.js +101 -0
  129. package/dist/chunk-KSSSFLE2.js +105 -0
  130. package/dist/{chunk-TXAFKH2A.js → chunk-KZOGQXSP.js} +6 -0
  131. package/dist/{chunk-CS65QSIJ.js → chunk-LZHLSQYK.js} +2 -2
  132. package/dist/chunk-MQEEQVG6.js +62 -0
  133. package/dist/chunk-NBWNLYWZ.js +62 -0
  134. package/dist/{chunk-YYZRLLLY.js → chunk-NHBP2XS5.js} +19 -3
  135. package/dist/chunk-O2EGEONV.js +90 -0
  136. package/dist/{chunk-YM3GJHGW.js → chunk-ODT5H4MN.js} +1 -1
  137. package/dist/{chunk-JCSXFAXG.js → chunk-OJRDEVHV.js} +1 -1
  138. package/dist/{chunk-U63Y5OCW.js → chunk-PRNX5AFE.js} +2 -2
  139. package/dist/chunk-Q4A5CGUB.js +43 -0
  140. package/dist/{chunk-7QL2OFP6.js → chunk-RCQXUT5K.js} +25 -9
  141. package/dist/{chunk-CBOICT64.js → chunk-RKKO7QHH.js} +2 -0
  142. package/dist/{chunk-TBIZSQHB.js → chunk-RSC7UJCR.js} +1 -1
  143. package/dist/chunk-RWA4H2TV.js +73 -0
  144. package/dist/{chunk-OQT7GSKJ.js → chunk-SGIQCI6Y.js} +1 -1
  145. package/dist/{chunk-35UKQ33X.js → chunk-SVW3VG72.js} +2 -2
  146. package/dist/{chunk-4PZ6FJKW.js → chunk-UGNUUVRI.js} +2 -2
  147. package/dist/chunk-UOR7TOAU.js +191 -0
  148. package/dist/{chunk-XMGB3ZAT.js → chunk-URUGEAFB.js} +3 -2
  149. package/dist/chunk-UZ7ZUSLH.js +179 -0
  150. package/dist/chunk-V2Z24W2Z.js +75 -0
  151. package/dist/{chunk-I7WXZOWA.js → chunk-VGE3G3T4.js} +3 -1
  152. package/dist/{chunk-UNZ7TVV5.js → chunk-W4XYY73O.js} +7 -9
  153. package/dist/{chunk-IPM2E6UI.js → chunk-WJDQ7XQA.js} +1 -1
  154. package/dist/{chunk-PPAQFGS2.js → chunk-YEKYVJQR.js} +1 -1
  155. package/dist/chunk-Z54BPRL6.js +74 -0
  156. package/dist/{chunk-S35G6PNC.js → chunk-Z7JYG5TF.js} +5 -4
  157. package/dist/chunk-ZZDY4XL7.js +112 -0
  158. package/dist/generated/index.d.ts +13 -0
  159. package/dist/generated/index.js +92 -79
  160. package/dist/index.js +92 -79
  161. package/dist/styles.css +1644 -153
  162. package/dist/utils/csv.d.ts +18 -0
  163. package/dist/utils/elementToPng.d.ts +49 -0
  164. package/dist/utils/index.d.ts +4 -1
  165. package/dist/utils/index.js +2 -2
  166. package/dist/utils/useDownload.d.ts +14 -4
  167. package/package.json +3 -3
  168. package/dist/chunk-E6UWRXNM.js +0 -52
  169. package/dist/chunk-M54K52ZU.js +0 -2
  170. package/dist/chunk-U5LQ2AS5.js +0 -1
  171. package/dist/{chunk-KG6XRG5Z.js → chunk-5OY4LJFH.js} +1 -1
  172. package/dist/{chunk-ZM7HLFOA.js → chunk-L2OQRPXJ.js} +1 -1
  173. package/dist/{chunk-MUGM7SEG.js → chunk-LFNUH4GY.js} +1 -1
  174. package/dist/{chunk-PBNP7H2C.js → chunk-M2VJGNCD.js} +1 -1
  175. /package/dist/{chunk-MSSZHDZI.js → chunk-SLRKS5PF.js} +0 -0
@@ -0,0 +1,236 @@
1
+ /*
2
+ * A canvas of artboards and notes (CanvasBoard.tsx). Boards and notes are laid
3
+ * out in canvas pixels inside the canvas's world and scale with it; their
4
+ * chrome (titles, handles, tools) is counter-scaled by the zoom the component
5
+ * writes on the layer, so it stays one size on screen.
6
+ */
7
+
8
+ .crewlet-canvas-board {
9
+ height: 100%;
10
+ min-height: 0;
11
+ }
12
+
13
+ .crewlet-canvas-board__layer {
14
+ --crewlet-canvas-board-zoom: 1;
15
+ --crewlet-canvas-board-unzoom: calc(1 / var(--crewlet-canvas-board-zoom));
16
+ position: relative;
17
+ }
18
+
19
+ /* ---- a board ------------------------------------------------------------ */
20
+
21
+ .crewlet-canvas-board__board {
22
+ position: absolute;
23
+ box-sizing: border-box;
24
+ }
25
+
26
+ .crewlet-canvas-board__body {
27
+ position: absolute;
28
+ inset: 0;
29
+ overflow: hidden;
30
+ background: var(--color-surface-elevated);
31
+ border: 1px solid var(--color-border-default);
32
+ box-shadow: var(--shadow-xs);
33
+ }
34
+
35
+ /* The page a live board runs fills its frame exactly. */
36
+ .crewlet-canvas-board__body > :not(.crewlet-canvas-board__shield) {
37
+ width: 100%;
38
+ height: 100%;
39
+ }
40
+
41
+ .crewlet-canvas-board__board[data-active] .crewlet-canvas-board__body {
42
+ outline: calc(2px * var(--crewlet-canvas-board-unzoom)) solid var(--color-focus);
43
+ outline-offset: 0;
44
+ }
45
+
46
+ /*
47
+ * THE SHIELD over a live board that does not hold the pointer: a press on it
48
+ * pans the canvas as the field around it does, because a sandboxed page would
49
+ * otherwise swallow every press that began over it.
50
+ */
51
+ .crewlet-canvas-board__shield {
52
+ position: absolute;
53
+ inset: 0;
54
+ cursor: pointer;
55
+ }
56
+
57
+ .crewlet-canvas-board[data-editable] .crewlet-canvas-board__shield {
58
+ cursor: inherit;
59
+ }
60
+
61
+ /* A board that is not running draws its title and size at screen size. */
62
+ .crewlet-canvas-board__placeholder {
63
+ position: absolute;
64
+ inset: 0;
65
+ display: flex;
66
+ align-items: center;
67
+ justify-content: center;
68
+ overflow: hidden;
69
+ background: var(--color-surface-subtle);
70
+ color: var(--color-text-tertiary);
71
+ font-size: var(--font-size-xs);
72
+ text-align: center;
73
+ }
74
+
75
+ /* ONE BLOCK, SCALED ONCE: its lines keep their spacing at screen size rather
76
+ than each line shrinking back into the space the zoom left it. */
77
+ .crewlet-canvas-board__placeholder-text {
78
+ display: flex;
79
+ flex-direction: column;
80
+ align-items: center;
81
+ gap: var(--spacing-1);
82
+ flex: none;
83
+ transform: scale(var(--crewlet-canvas-board-unzoom));
84
+ }
85
+
86
+ .crewlet-canvas-board__placeholder-title {
87
+ color: var(--color-text-secondary);
88
+ font-size: var(--font-size-sm);
89
+ font-weight: var(--font-weight-medium);
90
+ }
91
+
92
+ /* ---- chrome, at screen size --------------------------------------------- */
93
+
94
+ .crewlet-canvas-board__chrome {
95
+ position: absolute;
96
+ bottom: 100%;
97
+ left: 0;
98
+ display: flex;
99
+ align-items: center;
100
+ gap: var(--spacing-1);
101
+ box-sizing: border-box;
102
+ width: calc(100% * var(--crewlet-canvas-board-zoom));
103
+ padding-bottom: var(--spacing-1);
104
+ transform: scale(var(--crewlet-canvas-board-unzoom));
105
+ transform-origin: bottom left;
106
+ }
107
+
108
+ .crewlet-canvas-board__title {
109
+ min-width: 0;
110
+ overflow: hidden;
111
+ color: var(--color-text-secondary);
112
+ font-size: var(--font-size-xs);
113
+ font-weight: var(--font-weight-medium);
114
+ text-overflow: ellipsis;
115
+ white-space: nowrap;
116
+ }
117
+
118
+ .crewlet-canvas-board__handle {
119
+ appearance: none;
120
+ margin: 0;
121
+ padding: var(--spacing-1) var(--spacing-2);
122
+ border: 1px solid transparent;
123
+ border-radius: var(--radius-sm);
124
+ background: transparent;
125
+ font: inherit;
126
+ cursor: move;
127
+ touch-action: none;
128
+ }
129
+
130
+ .crewlet-canvas-board__handle:hover {
131
+ background: var(--color-surface-hover);
132
+ border-color: var(--color-border-default);
133
+ }
134
+
135
+ /* Both handles draw an edge of their own, so the ring sits over it. */
136
+ .crewlet-canvas-board__handle:focus-visible,
137
+ .crewlet-canvas-board__resize:focus-visible {
138
+ outline: 2px solid var(--color-focus);
139
+ outline-offset: var(--size-focus-ring-inset-offset);
140
+ }
141
+
142
+ .crewlet-canvas-board__resize {
143
+ position: absolute;
144
+ right: 0;
145
+ bottom: 0;
146
+ width: var(--spacing-4);
147
+ height: var(--spacing-4);
148
+ margin: 0;
149
+ padding: 0;
150
+ border: 2px solid var(--color-brand-accent);
151
+ border-radius: var(--radius-xs);
152
+ background: var(--color-surface-elevated);
153
+ cursor: nwse-resize;
154
+ touch-action: none;
155
+ transform: translate(50%, 50%) scale(var(--crewlet-canvas-board-unzoom));
156
+ }
157
+
158
+ .crewlet-canvas-board__hint {
159
+ position: absolute;
160
+ top: 100%;
161
+ left: 0;
162
+ margin: 0;
163
+ padding-top: var(--spacing-1);
164
+ color: var(--color-text-tertiary);
165
+ font-size: var(--font-size-xs);
166
+ white-space: nowrap;
167
+ transform: scale(var(--crewlet-canvas-board-unzoom));
168
+ transform-origin: top left;
169
+ }
170
+
171
+ /* ---- a note ------------------------------------------------------------- */
172
+
173
+ .crewlet-canvas-board__note {
174
+ position: absolute;
175
+ box-sizing: border-box;
176
+ }
177
+
178
+ /*
179
+ * A TITLE IS SET IN ITS BOX'S OWN HEIGHT, so the author's frame is the type
180
+ * size: a heading over a group of boards is as large as the box drawn for it.
181
+ */
182
+ .crewlet-canvas-board__note[data-kind='title'] {
183
+ container-type: size;
184
+ display: flex;
185
+ align-items: center;
186
+ color: var(--color-text-primary);
187
+ }
188
+
189
+ .crewlet-canvas-board__note[data-kind='title'] .crewlet-canvas-board__note-text {
190
+ font-size: 60cqh;
191
+ font-weight: var(--font-weight-semibold);
192
+ letter-spacing: var(--font-letter-spacing-tight);
193
+ line-height: var(--font-line-height-tight);
194
+ white-space: nowrap;
195
+ }
196
+
197
+ .crewlet-canvas-board__note-text {
198
+ margin: 0;
199
+ white-space: pre-wrap;
200
+ }
201
+
202
+ .crewlet-canvas-board__note-field {
203
+ box-sizing: border-box;
204
+ width: 100%;
205
+ height: 100%;
206
+ padding: 0;
207
+ border: none;
208
+ background: transparent;
209
+ color: inherit;
210
+ font: inherit;
211
+ resize: none;
212
+ }
213
+
214
+ .crewlet-canvas-board__note-field:focus-visible {
215
+ outline: 2px solid var(--color-focus);
216
+ outline-offset: var(--size-focus-ring-inset-offset);
217
+ }
218
+
219
+ .crewlet-canvas-board__note-tools {
220
+ position: absolute;
221
+ bottom: 100%;
222
+ left: 0;
223
+ display: flex;
224
+ align-items: center;
225
+ gap: var(--spacing-1);
226
+ padding-bottom: var(--spacing-1);
227
+ transform: scale(var(--crewlet-canvas-board-unzoom));
228
+ transform-origin: bottom left;
229
+ }
230
+
231
+ .crewlet-canvas-board__note-move {
232
+ width: var(--spacing-6);
233
+ height: var(--spacing-6);
234
+ background-image: radial-gradient(var(--color-text-tertiary) 1px, transparent 1.5px);
235
+ background-size: var(--spacing-2) var(--spacing-2);
236
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * A design drawn as a schematic: every artboard's rectangle where the canvas
3
+ * places it, the cover board marked and titled, the notes as faint blocks.
4
+ *
5
+ * A COVER DRAWN, NEVER A SCREENSHOT. A gallery card shows where a design's
6
+ * boards sit without running a single page: it is drawn from the canvas's
7
+ * numbers alone (a design's outline), so a gallery of fifty designs frames
8
+ * nothing, and the drawing follows the reader's theme.
9
+ */
10
+ import type { HTMLAttributes } from 'react';
11
+ /** A rectangle of the schematic, in the canvas's own pixels. */
12
+ export interface CanvasSchematicRect {
13
+ x: number;
14
+ y: number;
15
+ w: number;
16
+ h: number;
17
+ }
18
+ /** One board of the schematic. */
19
+ export interface CanvasSchematicBoard extends CanvasSchematicRect {
20
+ id: string;
21
+ title?: string | undefined;
22
+ }
23
+ export interface CanvasSchematicProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
24
+ /** The accessible description of the drawing, such as "Launch page, 4 boards". */
25
+ label: string;
26
+ boards: readonly CanvasSchematicBoard[];
27
+ notes?: readonly CanvasSchematicRect[] | undefined;
28
+ /** The board drawn as the cover, and titled. */
29
+ cover?: string | undefined;
30
+ }
31
+ export declare function CanvasSchematic({ label, boards, notes, cover, className, ...rest }: CanvasSchematicProps): import("react").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './CanvasSchematic.css';
2
+ export { CanvasSchematic } from './CanvasSchematic.js';
3
+ export type { CanvasSchematicBoard, CanvasSchematicProps, CanvasSchematicRect, } from './CanvasSchematic.js';
@@ -0,0 +1,2 @@
1
+ export { CanvasSchematic } from '../chunk-NBWNLYWZ.js';
2
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,36 @@
1
+ /*
2
+ * A design's schematic (CanvasSchematic.tsx): rectangles drawn in the
3
+ * canvas's own coordinates, filling the box they are given.
4
+ */
5
+
6
+ .crewlet-canvas-schematic {
7
+ display: flex;
8
+ width: 100%;
9
+ height: 100%;
10
+ min-height: 0;
11
+ }
12
+
13
+ .crewlet-canvas-schematic svg {
14
+ width: 100%;
15
+ height: 100%;
16
+ }
17
+
18
+ .crewlet-canvas-schematic__board {
19
+ fill: var(--color-surface-elevated);
20
+ stroke: var(--color-border-strong);
21
+ stroke-width: 1;
22
+ }
23
+
24
+ .crewlet-canvas-schematic__board[data-cover] {
25
+ fill: var(--color-brand-accent-soft);
26
+ stroke: var(--color-brand-accent);
27
+ }
28
+
29
+ .crewlet-canvas-schematic__note {
30
+ fill: var(--color-surface-inset);
31
+ }
32
+
33
+ .crewlet-canvas-schematic__title {
34
+ fill: var(--color-brand-accent-ink);
35
+ font-weight: var(--font-weight-semibold);
36
+ }
@@ -1,6 +1,6 @@
1
- export { ChangeMark } from '../chunk-PPAQFGS2.js';
2
- import '../chunk-YYZRLLLY.js';
3
- import '../chunk-S35G6PNC.js';
1
+ export { ChangeMark } from '../chunk-YEKYVJQR.js';
2
+ import '../chunk-NHBP2XS5.js';
3
+ import '../chunk-Z7JYG5TF.js';
4
4
  import '../chunk-QWOPX2MN.js';
5
5
  import '../chunk-AYKXMIOR.js';
6
6
  import '../chunk-HMPFGIWM.js';
@@ -1,5 +1,5 @@
1
1
  import '../chunk-3L5NHASN.js';
2
- export { CHARACTER_PICKER_COLUMNS, CharacterPicker } from '../chunk-5PSXBL73.js';
3
- import '../chunk-CBOICT64.js';
2
+ export { CHARACTER_PICKER_COLUMNS, CharacterPicker } from '../chunk-HVIX5ECM.js';
3
+ import '../chunk-RKKO7QHH.js';
4
4
  import '../chunk-5OM447RW.js';
5
5
  import '../chunk-ODEQTPFM.js';
@@ -12,6 +12,12 @@ export interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement
12
12
  tone?: 'default' | 'danger';
13
13
  /** The bordered row a dialog uses for a decision that stands on its own. */
14
14
  framed?: boolean;
15
+ /**
16
+ * The step the label is set at. `sm` sets it at the compact step, beside the
17
+ * small inputs and selects of a dense form row, where a body-step label
18
+ * reads as a heading over the controls around it.
19
+ */
20
+ size?: 'sm' | 'md' | undefined;
15
21
  /**
16
22
  * Neither on nor off: some of what this box stands for is ticked. It is a
17
23
  * DOM property rather than an attribute, so it can only be set from script,
@@ -1,4 +1,4 @@
1
- export { Checkbox, CheckboxGroup } from '../chunk-IASV5UCP.js';
1
+ export { Checkbox, CheckboxGroup } from '../chunk-7T42VQQT.js';
2
2
  import '../chunk-6QFAK2WV.js';
3
3
  import '../chunk-PQADV6P6.js';
4
4
  import '../chunk-4FQT6ZAY.js';
@@ -99,6 +99,22 @@
99
99
  border-radius: var(--radius-lg);
100
100
  }
101
101
 
102
+ /*
103
+ * THE COMPACT STEP, for a box in a dense form row beside small inputs and
104
+ * selects. The label takes their step, so a row of controls reads as one line,
105
+ * and the box shrinks with it; the nudge above is in `em` against the row's own
106
+ * size, so it still sits the box on the label's first line.
107
+ */
108
+ .crewlet-checkbox--sm {
109
+ --crewlet-checkbox-size: 14px;
110
+
111
+ font-size: var(--font-size-compact);
112
+ }
113
+
114
+ .crewlet-checkbox--sm .crewlet-checkbox__label {
115
+ font-size: var(--font-size-compact);
116
+ }
117
+
102
118
  .crewlet-checkbox.is-disabled,
103
119
  .crewlet-checkbox.is-disabled .crewlet-checkbox__control {
104
120
  cursor: not-allowed;
@@ -1,8 +1,8 @@
1
- export { COMMENT_THREAD_LABELS, CommentThread } from '../chunk-PBNP7H2C.js';
2
- import '../chunk-WI6K5M5X.js';
1
+ export { COMMENT_THREAD_LABELS, CommentThread } from '../chunk-M2VJGNCD.js';
3
2
  import '../chunk-RIEDQSA4.js';
4
3
  import '../chunk-SMBKXWML.js';
5
4
  import '../chunk-6QFAK2WV.js';
5
+ import '../chunk-WI6K5M5X.js';
6
6
  import '../chunk-4KP4RC3O.js';
7
7
  import '../chunk-3CZ7XAVY.js';
8
8
  import '../chunk-EUCC37WY.js';
@@ -0,0 +1,143 @@
1
+ /*
2
+ * DashboardCover: a dashboard's cover at a gallery card's preview size (16:9,
3
+ * about 280 by 158 pixels at its smallest). Up to three headline figures, or a
4
+ * schematic of the board's first widgets, or the kind's glyph. Its frame is
5
+ * the shared .crewlet-artifact-cover in ArtifactCover.css.
6
+ */
7
+
8
+ .crewlet-dashboard-cover {
9
+ height: 100%;
10
+ padding: var(--spacing-3);
11
+ color: var(--color-text-tertiary);
12
+ }
13
+
14
+ .crewlet-dashboard-cover--stats {
15
+ display: grid;
16
+ grid-auto-columns: minmax(0, 1fr);
17
+ grid-auto-flow: column;
18
+ align-items: center;
19
+ gap: var(--spacing-2);
20
+ }
21
+
22
+ .crewlet-dashboard-cover__stat {
23
+ display: flex;
24
+ flex-direction: column;
25
+ justify-content: center;
26
+ gap: var(--spacing-1);
27
+ min-width: 0;
28
+ height: 100%;
29
+ max-height: 100%;
30
+ padding: var(--spacing-2) var(--spacing-3);
31
+ border: 1px solid var(--color-border-default);
32
+ border-radius: var(--radius-md);
33
+ background: var(--color-surface-elevated);
34
+ }
35
+
36
+ .crewlet-dashboard-cover__label,
37
+ .crewlet-dashboard-cover__source {
38
+ overflow: hidden;
39
+ font-size: var(--font-size-xs);
40
+ line-height: var(--font-line-height-snug);
41
+ text-overflow: ellipsis;
42
+ white-space: nowrap;
43
+ }
44
+
45
+ .crewlet-dashboard-cover__label {
46
+ color: var(--color-text-secondary);
47
+ }
48
+
49
+ .crewlet-dashboard-cover__value {
50
+ overflow: hidden;
51
+ color: var(--color-text-primary);
52
+ font-size: var(--font-size-xl);
53
+ font-variant-numeric: tabular-nums;
54
+ font-weight: var(--font-weight-semibold);
55
+ line-height: var(--font-line-height-tight);
56
+ text-overflow: ellipsis;
57
+ white-space: nowrap;
58
+ }
59
+
60
+ .crewlet-dashboard-cover__source {
61
+ color: var(--color-text-tertiary);
62
+ }
63
+
64
+ .crewlet-dashboard-cover--layout {
65
+ display: grid;
66
+ grid-auto-rows: minmax(0, 1fr);
67
+ grid-template-columns: repeat(12, minmax(0, 1fr));
68
+ gap: var(--spacing-2);
69
+ }
70
+
71
+ .crewlet-dashboard-cover__block {
72
+ box-sizing: border-box;
73
+ display: flex;
74
+ min-width: 0;
75
+ min-height: 0;
76
+ padding: var(--spacing-2);
77
+ border: 1px solid var(--color-border-default);
78
+ border-radius: var(--radius-sm);
79
+ background: var(--color-surface-elevated);
80
+ }
81
+
82
+ .crewlet-dashboard-cover__block--chart {
83
+ align-items: flex-end;
84
+ gap: var(--spacing-1);
85
+ }
86
+
87
+ .crewlet-dashboard-cover__block--table,
88
+ .crewlet-dashboard-cover__block--note {
89
+ flex-direction: column;
90
+ justify-content: center;
91
+ gap: var(--spacing-1);
92
+ }
93
+
94
+ .crewlet-dashboard-cover__block--stat {
95
+ align-items: center;
96
+ }
97
+
98
+ .crewlet-dashboard-cover__bar {
99
+ flex: 1;
100
+ min-width: 0;
101
+ border-radius: var(--radius-xs);
102
+ background: var(--color-data-1);
103
+ }
104
+
105
+ .crewlet-dashboard-cover__bar:nth-child(1) {
106
+ height: 40%;
107
+ }
108
+
109
+ .crewlet-dashboard-cover__bar:nth-child(2) {
110
+ height: 70%;
111
+ }
112
+
113
+ .crewlet-dashboard-cover__bar:nth-child(3) {
114
+ height: 55%;
115
+ }
116
+
117
+ .crewlet-dashboard-cover__bar:nth-child(4) {
118
+ height: 90%;
119
+ }
120
+
121
+ .crewlet-dashboard-cover__line {
122
+ height: var(--spacing-1);
123
+ border-radius: var(--radius-xs);
124
+ background: var(--color-border-strong);
125
+ }
126
+
127
+ .crewlet-dashboard-cover__line:last-child {
128
+ width: 60%;
129
+ }
130
+
131
+ .crewlet-dashboard-cover__figure {
132
+ width: 50%;
133
+ height: var(--spacing-3);
134
+ border-radius: var(--radius-xs);
135
+ background: var(--color-text-tertiary);
136
+ opacity: 0.5;
137
+ }
138
+
139
+ .crewlet-dashboard-cover--empty {
140
+ display: flex;
141
+ align-items: center;
142
+ justify-content: center;
143
+ }
@@ -1,8 +1,8 @@
1
- export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from '../chunk-35UKQ33X.js';
1
+ export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from '../chunk-SVW3VG72.js';
2
+ import '../chunk-F4DPAJCN.js';
2
3
  import '../chunk-STJ7QBC3.js';
3
4
  import '../chunk-DTIW4CHZ.js';
4
- import '../chunk-F4DPAJCN.js';
5
- import '../chunk-IASV5UCP.js';
5
+ import '../chunk-7T42VQQT.js';
6
6
  import '../chunk-6QFAK2WV.js';
7
7
  import '../chunk-EUCC37WY.js';
8
8
  import '../chunk-AV2DXAEL.js';
@@ -1,15 +1,15 @@
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-JCSXFAXG.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-OJRDEVHV.js';
2
2
  import '../chunk-HOXGBLEY.js';
3
3
  import '../chunk-PGRPNDWM.js';
4
- import '../chunk-35UKQ33X.js';
4
+ import '../chunk-SVW3VG72.js';
5
5
  import '../chunk-WG5WUFBX.js';
6
- import '../chunk-STJ7QBC3.js';
7
- import '../chunk-DTIW4CHZ.js';
8
6
  import '../chunk-F4DPAJCN.js';
9
7
  import '../chunk-F73MC7EZ.js';
10
8
  import '../chunk-SMBKXWML.js';
9
+ import '../chunk-STJ7QBC3.js';
10
+ import '../chunk-DTIW4CHZ.js';
11
11
  import '../chunk-GXQ3B46I.js';
12
- import '../chunk-IASV5UCP.js';
12
+ import '../chunk-7T42VQQT.js';
13
13
  import '../chunk-6QFAK2WV.js';
14
14
  import '../chunk-3CZ7XAVY.js';
15
15
  import '../chunk-EUCC37WY.js';
@@ -0,0 +1,83 @@
1
+ import { type HTMLAttributes, type ReactNode } from 'react';
2
+ import { type TimeValue } from '../RelativeTime/index.js';
3
+ import type { DatasetStatus } from '../WidgetFrame/index.js';
4
+ /**
5
+ * Where a dataset's rows come from: the artifact's own datastore, a named read
6
+ * of the engine's domains, a data file of the version, or a calculation over
7
+ * other datasets.
8
+ */
9
+ export type DatasetSourceKind = 'store' | 'engine' | 'file' | 'calc';
10
+ /** Every source kind, in the order a legend lists them. */
11
+ export declare const DATASET_SOURCE_KINDS: readonly DatasetSourceKind[];
12
+ export interface DatasetSourceLabels {
13
+ kinds: Record<DatasetSourceKind, string>;
14
+ /** The row count, "12 rows". */
15
+ rows: (count: number) => string;
16
+ live: string;
17
+ asOf: string;
18
+ stale: string;
19
+ loading: string;
20
+ /** The sentence drawn for `refused` or `failed` when the host gave no detail. */
21
+ refused: string;
22
+ failed: string;
23
+ /** Said before the refresh promise to a screen reader: "Refreshes: Every 2 min". */
24
+ refresh: string;
25
+ }
26
+ export interface DatasetSourceProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title' | 'children' | 'onSelect'> {
27
+ /** The dataset's title, which every figure drawn from it cites. */
28
+ title: string;
29
+ kind: DatasetSourceKind;
30
+ /** What the dataset reads, in the author's terms: "tracker.items, scope mine". */
31
+ definition: ReactNode;
32
+ /** How it is kept current, in words: "Live", "Every 2 min", "On change". */
33
+ refresh?: string | undefined;
34
+ /** When the rows were true. Unset for a live source or one not read yet. */
35
+ asOf?: TimeValue | undefined;
36
+ status: DatasetStatus;
37
+ /** The refusal or failure sentence, for `refused` and `failed`. */
38
+ detail?: string | undefined;
39
+ /** How many rows the reader holds. Unset while loading, refused or failed. */
40
+ rows?: number | undefined;
41
+ /** Whether this entry is the one the host is showing. */
42
+ selected?: boolean | undefined;
43
+ /** Given, the entry is a toggle button that selects it, announced as pressed. */
44
+ onSelect?: (() => void) | undefined;
45
+ /** Overrides the shared clock, for a story or a suite. */
46
+ now?: number | undefined;
47
+ labels?: Partial<Omit<DatasetSourceLabels, 'kinds'>> & {
48
+ kinds?: Partial<Record<DatasetSourceKind, string>>;
49
+ };
50
+ /** A preview of the rows, drawn under the entry by the host when it is selected. */
51
+ children?: ReactNode;
52
+ }
53
+ /**
54
+ * One entry of a dashboard's Sources rail: a dataset's title, where it reads
55
+ * from, what it reads, how it is kept current, and where it stands now.
56
+ *
57
+ * THE PROVENANCE OF EVERY FIGURE IN ONE PLACE. A widget cites its dataset by
58
+ * title; this is what that citation opens: the definition a reader can check,
59
+ * the refresh promise, and "as of" the instant the rows were true, so a
60
+ * number on the board is never a number nobody can trace.
61
+ *
62
+ * SELECTABLE WITHOUT NESTING. With `onSelect` the summary is a toggle button
63
+ * (`aria-pressed`), and the host's rows preview (`children`) is drawn AFTER
64
+ * it, outside it: a table inside a button is invalid markup and unreachable
65
+ * to a screen reader.
66
+ *
67
+ * A refusal reads as calmly here as on the figure: the reader may not read
68
+ * the data, which is an ordinary state, so it takes the secondary ink and
69
+ * never an error colour.
70
+ */
71
+ export declare function DatasetSource({ title, kind, definition, refresh, asOf, status, detail, rows, selected, onSelect, now, labels, className, children, ...rest }: DatasetSourceProps): import("react").JSX.Element;
72
+ export interface DatasetSourceListProps extends Omit<HTMLAttributes<HTMLUListElement>, 'children'> {
73
+ /** What the list is, for a screen reader: "Sources". */
74
+ label: string;
75
+ /** The entries, each a `DatasetSource`. */
76
+ children: ReactNode;
77
+ }
78
+ /**
79
+ * A dashboard's Sources rail: every dataset the board draws from, one
80
+ * `DatasetSource` per item, as a real list (`role="list"` is kept explicit
81
+ * because Safari drops a list's role once its markers are styled away).
82
+ */
83
+ export declare function DatasetSourceList({ label, className, children, ...rest }: DatasetSourceListProps): import("react").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './DatasetSource.css';
2
+ export { DATASET_SOURCE_KINDS, DatasetSource, DatasetSourceList } from './DatasetSource.js';
3
+ export type { DatasetSourceKind, DatasetSourceLabels, DatasetSourceListProps, DatasetSourceProps, } from './DatasetSource.js';
@@ -0,0 +1,7 @@
1
+ export { DATASET_SOURCE_KINDS, DatasetSource, DatasetSourceList } from '../chunk-ZZDY4XL7.js';
2
+ import '../chunk-GFV4LJHH.js';
3
+ import '../chunk-WIATRXEJ.js';
4
+ import '../chunk-3CZ7XAVY.js';
5
+ import '../chunk-EUCC37WY.js';
6
+ import '../chunk-BZFWDIV6.js';
7
+ import '../chunk-ODEQTPFM.js';