@crewlethq/ui 0.27.1 → 0.29.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 (114) hide show
  1. package/README.md +42 -2
  2. package/dist/AccessDeniedCard/index.js +3 -3
  3. package/dist/Accordion/index.js +3 -3
  4. package/dist/AppShell/index.js +3 -3
  5. package/dist/{AppShell-APHZKJYH.css → AppShell-GCM4TDVY.css} +4 -1
  6. package/dist/ArrangeGrid/ArrangeGrid.d.ts +22 -0
  7. package/dist/ArrangeGrid/index.d.ts +3 -0
  8. package/dist/ArrangeGrid/index.js +2 -0
  9. package/dist/ArrangeGrid-XM4ZFTED.css +17 -0
  10. package/dist/ArrangeGroup/index.js +1 -1
  11. package/dist/{ArrangeGroup-SHFHA7BE.css → ArrangeGroup-GY5YMP6E.css} +3 -4
  12. package/dist/ArtifactBar/ArtifactBar.d.ts +143 -0
  13. package/dist/ArtifactBar/index.d.ts +3 -0
  14. package/dist/ArtifactBar/index.js +25 -0
  15. package/dist/ArtifactBar-IBWB5POL.css +358 -0
  16. package/dist/ArtifactCard/index.js +3 -3
  17. package/dist/ArtifactCover/index.js +4 -4
  18. package/dist/ArtifactIcon/index.js +4 -4
  19. package/dist/ArtifactPanel/ArtifactPanel.d.ts +81 -0
  20. package/dist/ArtifactPanel/index.d.ts +3 -0
  21. package/dist/ArtifactPanel/index.js +5 -0
  22. package/dist/ArtifactPanel-YFXT5O77.css +132 -0
  23. package/dist/AuthLayout/index.js +3 -3
  24. package/dist/AvatarPicker/index.js +4 -4
  25. package/dist/Canvas/index.js +2 -2
  26. package/dist/CanvasBoard/index.js +4 -4
  27. package/dist/Card/index.js +2 -2
  28. package/dist/ChangeMark/index.js +1 -1
  29. package/dist/Charts/index.js +1 -1
  30. package/dist/{Charts-JYW4X5ZL.css → Charts-RY4JN5FC.css} +12 -0
  31. package/dist/CommandPalette/index.js +5 -5
  32. package/dist/CommentThread/index.js +4 -4
  33. package/dist/Composer/index.js +2 -2
  34. package/dist/DataTable/DataTable.d.ts +9 -0
  35. package/dist/DataTable/index.js +4 -4
  36. package/dist/DataView/index.js +10 -10
  37. package/dist/DatasetSource/index.js +1 -1
  38. package/dist/{DatasetSource-47LBDMPR.css → DatasetSource-XFPZBRXL.css} +12 -4
  39. package/dist/DateTimePicker/index.js +3 -3
  40. package/dist/Disclosure/index.js +3 -3
  41. package/dist/FollowBanner/index.js +2 -2
  42. package/dist/HuePicker/index.js +2 -2
  43. package/dist/LinkInterstitial/index.js +3 -3
  44. package/dist/ListInput/index.js +2 -2
  45. package/dist/MarkdownEditor/index.js +1 -1
  46. package/dist/Menu/index.js +2 -2
  47. package/dist/Modal/index.js +2 -2
  48. package/dist/Note/Note.d.ts +10 -0
  49. package/dist/Note/index.js +1 -1
  50. package/dist/{Note-RT4L6VUT.css → Note-ONSKKTOA.css} +10 -0
  51. package/dist/PeopleRail/PeopleRail.d.ts +8 -1
  52. package/dist/PeopleRail/index.js +2 -2
  53. package/dist/{PeopleRail-R64WVOSH.css → PeopleRail-SZGHZXVT.css} +8 -0
  54. package/dist/PresenceStack/index.js +1 -1
  55. package/dist/PresenterView/index.js +1 -1
  56. package/dist/ShareDialog/index.js +4 -4
  57. package/dist/SheetGrid/index.js +4 -4
  58. package/dist/SlideCompare/index.js +1 -1
  59. package/dist/Switcher/index.js +4 -4
  60. package/dist/ThemeSwitcher/index.js +1 -1
  61. package/dist/TimeWindowPicker/index.js +3 -3
  62. package/dist/TreeCanvas/index.js +3 -3
  63. package/dist/VersionCompare/index.js +2 -2
  64. package/dist/WidgetFrame/WidgetFrame.d.ts +14 -1
  65. package/dist/WidgetFrame/index.js +1 -1
  66. package/dist/WidgetFrame-LRZIL62O.css +206 -0
  67. package/dist/{chunk-V2Z24W2Z.js → chunk-4JUKWWUD.js} +1 -1
  68. package/dist/{chunk-MLT2HBPN.js → chunk-77DRMDXR.js} +7 -2
  69. package/dist/{chunk-BQYQWJPK.js → chunk-AAOH2P6Y.js} +8 -2
  70. package/dist/{chunk-35XVR5JQ.js → chunk-B4EBHPK3.js} +2 -2
  71. package/dist/chunk-CJKMURZO.js +31 -0
  72. package/dist/{chunk-INTEH4F3.js → chunk-CT4EZF62.js} +2 -2
  73. package/dist/{chunk-SVW3VG72.js → chunk-EBJREOKS.js} +5 -4
  74. package/dist/{chunk-BFQK7CYJ.js → chunk-EBNI36UQ.js} +2 -2
  75. package/dist/{chunk-M2VJGNCD.js → chunk-FKULOLKG.js} +2 -2
  76. package/dist/{chunk-6J35F334.js → chunk-GOSQXEZU.js} +1 -1
  77. package/dist/{chunk-5OY4LJFH.js → chunk-HVNTQ36V.js} +2 -2
  78. package/dist/chunk-I3BSQUKN.js +121 -0
  79. package/dist/{chunk-3D7PSL2L.js → chunk-JODJS7MR.js} +2 -2
  80. package/dist/{chunk-URUGEAFB.js → chunk-JQLTG4KH.js} +1 -1
  81. package/dist/{chunk-S4RCG44T.js → chunk-MICH6QSJ.js} +1 -1
  82. package/dist/chunk-QBA5B2Z5.js +17 -0
  83. package/dist/chunk-QMBP23BL.js +347 -0
  84. package/dist/{chunk-G2AVKPSL.js → chunk-RIAZM6L3.js} +1 -1
  85. package/dist/{chunk-OJRDEVHV.js → chunk-RODMM35O.js} +5 -5
  86. package/dist/{chunk-RSC7UJCR.js → chunk-S6VG5ZFZ.js} +1 -1
  87. package/dist/{chunk-PRNX5AFE.js → chunk-TGYDROIB.js} +1 -1
  88. package/dist/{chunk-G3EEUNZQ.js → chunk-UB7TJEKZ.js} +1 -1
  89. package/dist/chunk-UQHKFF2N.js +106 -0
  90. package/dist/{chunk-WHZFDS62.js → chunk-VDPJGP4Q.js} +1 -1
  91. package/dist/{chunk-GTLJXJ3U.js → chunk-VVRL27HM.js} +2 -2
  92. package/dist/{chunk-MQEEQVG6.js → chunk-XALUCIG5.js} +1 -1
  93. package/dist/{chunk-ZZDY4XL7.js → chunk-ZB5O3ELS.js} +12 -12
  94. package/dist/{chunk-L2OQRPXJ.js → chunk-ZR5VN5IV.js} +1 -1
  95. package/dist/generated/index.d.ts +3 -0
  96. package/dist/generated/index.js +91 -88
  97. package/dist/index.js +91 -88
  98. package/dist/styles.css +658 -23
  99. package/package.json +3 -3
  100. package/dist/WidgetFrame-4EFJOJMW.css +0 -127
  101. package/dist/chunk-63WJLRB2.js +0 -24
  102. package/dist/chunk-FVLCTCMV.js +0 -96
  103. package/dist/{chunk-UFKUWVMV.js → chunk-2HIOJ4YZ.js} +1 -1
  104. package/dist/{chunk-RIEDQSA4.js → chunk-7DZDSSJS.js} +1 -1
  105. package/dist/{chunk-YZCJ63JF.js → chunk-ACA27MZH.js} +1 -1
  106. package/dist/{chunk-ENJUPIND.js → chunk-FZVJDJFN.js} +1 -1
  107. package/dist/{chunk-F4DPAJCN.js → chunk-I3KKZ2O3.js} +1 -1
  108. package/dist/{chunk-SLRKS5PF.js → chunk-IFNQKWUO.js} +0 -0
  109. package/dist/{chunk-FW7HN6AP.js → chunk-LDJ3J4TQ.js} +1 -1
  110. package/dist/{chunk-SGIQCI6Y.js → chunk-LIXSV5YI.js} +1 -1
  111. package/dist/{chunk-KZOGQXSP.js → chunk-OJ45PPCV.js} +1 -1
  112. package/dist/{chunk-LREN6TUG.js → chunk-UZ6MA2V6.js} +2 -2
  113. package/dist/{chunk-WG5WUFBX.js → chunk-Y5NQ2LMS.js} +1 -1
  114. package/dist/{chunk-D5JZN3ML.js → chunk-Z6VW6CXX.js} +1 -1
@@ -0,0 +1,358 @@
1
+ /*
2
+ * One row, one hairline under it, the height of a large row. The lead (the
3
+ * way back, the glyph, the title, the version) takes what the end leaves it
4
+ * and the title is what gives way, ellipsised; the views sit between the two,
5
+ * centred while both sides have room, because the lead and the end each grow
6
+ * from a zero basis and the end never shrinks below its controls.
7
+ *
8
+ * Three widths of its OWN fold it (a container query, since a sidebar or a
9
+ * panel beside it decides its room, not the window): under a laptop sheet's
10
+ * width the presence stack goes (the People control still counts who is
11
+ * here), then the labelled tools' words, and under a phone's two panes the
12
+ * views, the unlabelled tools and the kind's glyph fold away, the first two
13
+ * into More.
14
+ */
15
+
16
+ .crewlet-artifact-bar {
17
+ container: crewlet-artifact-bar / inline-size;
18
+ display: block;
19
+ min-width: 0;
20
+ background: var(--color-surface-background);
21
+ border-bottom: 1px solid var(--color-border-default);
22
+ }
23
+
24
+ .crewlet-artifact-bar__row {
25
+ display: flex;
26
+ align-items: center;
27
+ gap: var(--spacing-3);
28
+ height: var(--size-row-lg);
29
+ padding: 0 var(--spacing-3);
30
+ min-width: 0;
31
+ }
32
+
33
+ .crewlet-artifact-bar__lead {
34
+ display: flex;
35
+ flex: 1 1 0;
36
+ align-items: center;
37
+ gap: var(--spacing-1);
38
+ min-width: 0;
39
+ }
40
+
41
+ .crewlet-artifact-bar__end {
42
+ display: flex;
43
+ flex: none;
44
+ align-items: center;
45
+ justify-content: flex-end;
46
+ gap: var(--spacing-2);
47
+ margin-inline-start: auto;
48
+ }
49
+
50
+ /* WITH VIEWS TO CENTRE, the end grows from zero as the lead does, so the two
51
+ sides stay equal while there is room and the views sit in the middle; the
52
+ end never shrinks below its controls, so it is the title that gives way. */
53
+ .crewlet-artifact-bar__row--centred .crewlet-artifact-bar__end {
54
+ flex: 1 0 0;
55
+ min-width: max-content;
56
+ }
57
+
58
+ .crewlet-artifact-bar__modes {
59
+ display: flex;
60
+ flex: none;
61
+ align-items: center;
62
+ }
63
+
64
+ .crewlet-artifact-bar__glyph {
65
+ display: inline-flex;
66
+ flex: none;
67
+ align-items: center;
68
+ justify-content: center;
69
+ width: var(--size-control-sm);
70
+ height: var(--size-control-sm);
71
+ color: var(--color-text-secondary);
72
+ }
73
+
74
+ /* THE TITLE. Read only, it is text; renamable, its words are a button drawn
75
+ as text that answers the pointer with the hover ground, as a field would. */
76
+ .crewlet-artifact-bar__title {
77
+ position: relative;
78
+ display: flex;
79
+ min-width: 0;
80
+ margin: 0;
81
+ overflow: hidden;
82
+ color: var(--color-text-primary);
83
+ font-family: var(--font-family-sans);
84
+ font-size: var(--font-size-sm);
85
+ font-weight: var(--font-weight-semibold);
86
+ letter-spacing: var(--font-letter-spacing-tight);
87
+ line-height: var(--font-line-height-snug);
88
+ text-overflow: ellipsis;
89
+ white-space: nowrap;
90
+ }
91
+
92
+ .crewlet-artifact-bar__title--editing {
93
+ overflow: visible;
94
+ }
95
+
96
+ .crewlet-artifact-bar__rename {
97
+ min-width: 0;
98
+ max-width: 100%;
99
+ margin: 0;
100
+ padding: var(--spacing-1) var(--spacing-2);
101
+ overflow: hidden;
102
+ border: 0;
103
+ border-radius: var(--radius-sm);
104
+ background: transparent;
105
+ color: inherit;
106
+ font: inherit;
107
+ letter-spacing: inherit;
108
+ text-align: start;
109
+ text-overflow: ellipsis;
110
+ white-space: nowrap;
111
+ cursor: text;
112
+ transition: background-color var(--motion-duration-fast) var(--motion-easing-default);
113
+ }
114
+
115
+ .crewlet-artifact-bar__rename:hover {
116
+ background: var(--color-surface-hover);
117
+ }
118
+
119
+ .crewlet-artifact-bar__rename:focus-visible {
120
+ outline: 2px solid var(--color-focus);
121
+ outline-offset: var(--size-focus-ring-inset-offset);
122
+ }
123
+
124
+ /* The field is as wide as what is typed in it: the grid cell is sized by a
125
+ hidden copy of the text, and the field fills that cell. */
126
+ .crewlet-artifact-bar__sizer {
127
+ display: inline-grid;
128
+ min-width: 0;
129
+ max-width: 100%;
130
+ }
131
+
132
+ .crewlet-artifact-bar__sizer::after {
133
+ content: attr(data-value) ' ';
134
+ visibility: hidden;
135
+ grid-area: 1 / 1;
136
+ padding: var(--spacing-1) var(--spacing-2);
137
+ overflow: hidden;
138
+ white-space: pre;
139
+ font: inherit;
140
+ }
141
+
142
+ .crewlet-artifact-bar__field {
143
+ grid-area: 1 / 1;
144
+ min-width: 0;
145
+ width: 100%;
146
+ margin: 0;
147
+ padding: calc(var(--spacing-1) - 1px) calc(var(--spacing-2) - 1px);
148
+ border: 1px solid var(--color-border-control);
149
+ border-radius: var(--radius-sm);
150
+ background: var(--color-surface-elevated);
151
+ color: var(--color-text-primary);
152
+ font: inherit;
153
+ letter-spacing: inherit;
154
+ }
155
+
156
+ .crewlet-artifact-bar__field:focus {
157
+ outline: 2px solid var(--color-focus);
158
+ outline-offset: var(--size-focus-ring-inset-offset);
159
+ }
160
+
161
+ .crewlet-artifact-bar__field[aria-invalid='true'] {
162
+ border-color: var(--color-feedback-danger);
163
+ }
164
+
165
+ .crewlet-artifact-bar__error {
166
+ position: absolute;
167
+ top: calc(100% + var(--spacing-1));
168
+ left: 0;
169
+ z-index: var(--z-index-dropdown);
170
+ padding: var(--spacing-1) var(--spacing-2);
171
+ border: 1px solid var(--color-border-default);
172
+ border-radius: var(--radius-sm);
173
+ background: var(--color-surface-elevated);
174
+ box-shadow: var(--shadow-md);
175
+ color: var(--color-feedback-danger-ink);
176
+ font-size: var(--font-size-xs);
177
+ font-weight: var(--font-weight-regular);
178
+ white-space: nowrap;
179
+ }
180
+
181
+ .crewlet-artifact-bar__placeholder {
182
+ display: block;
183
+ flex: 0 1 12rem;
184
+ height: var(--font-size-sm);
185
+ border-radius: var(--radius-sm);
186
+ background: var(--color-surface-subtle);
187
+ }
188
+
189
+ .crewlet-artifact-bar__version {
190
+ display: inline-flex;
191
+ flex: none;
192
+ margin-inline-start: var(--spacing-1);
193
+ }
194
+
195
+ .crewlet-artifact-bar__presence {
196
+ display: inline-flex;
197
+ align-items: center;
198
+ margin-inline-end: var(--spacing-1);
199
+ }
200
+
201
+ .crewlet-artifact-bar__tools {
202
+ display: inline-flex;
203
+ align-items: center;
204
+ gap: var(--spacing-1);
205
+ }
206
+
207
+ .crewlet-artifact-bar__tool {
208
+ position: relative;
209
+ display: inline-flex;
210
+ }
211
+
212
+ /* A figure on the glyph's corner, inside the button's own box so it never
213
+ reaches past the bar's edge. */
214
+ .crewlet-artifact-bar__badge {
215
+ position: absolute;
216
+ top: calc(-1 * var(--spacing-1));
217
+ right: calc(-1 * var(--spacing-1));
218
+ min-width: var(--spacing-4);
219
+ height: var(--spacing-4);
220
+ padding: 0 var(--spacing-1);
221
+ border-radius: var(--radius-pill);
222
+ background: var(--color-brand-accent);
223
+ color: var(--color-text-on-accent);
224
+ font-size: var(--font-size-2xs);
225
+ font-weight: var(--font-weight-semibold);
226
+ font-variant-numeric: tabular-nums;
227
+ line-height: var(--spacing-4);
228
+ text-align: center;
229
+ pointer-events: none;
230
+ }
231
+
232
+ /* WHILE THE PRESENCE STACK IS DRAWN it says who is here, so a tool's figure
233
+ saying the same is not drawn beside it; it comes back where the stack
234
+ folds away. */
235
+ .crewlet-artifact-bar--present .crewlet-artifact-bar__badge {
236
+ display: none;
237
+ }
238
+
239
+ /* A rule between two groups of tools: the kind's, then every artifact's. */
240
+ .crewlet-artifact-bar__rule {
241
+ width: 1px;
242
+ height: var(--spacing-4);
243
+ margin: 0 var(--spacing-1);
244
+ background: var(--color-border-default);
245
+ }
246
+
247
+ .crewlet-artifact-bar__tip {
248
+ display: inline-flex;
249
+ align-items: center;
250
+ gap: var(--spacing-2);
251
+ }
252
+
253
+ /* Both arrangements are drawn; the bar's width says which one shows. */
254
+ .crewlet-artifact-bar__narrow,
255
+ .crewlet-artifact-bar__tight {
256
+ display: none;
257
+ }
258
+
259
+ .crewlet-artifact-bar__wide,
260
+ .crewlet-artifact-bar__roomy {
261
+ display: inline-flex;
262
+ }
263
+
264
+ @container crewlet-artifact-bar (width < 860px) {
265
+ .crewlet-artifact-bar__presence {
266
+ display: none;
267
+ }
268
+
269
+ .crewlet-artifact-bar--present .crewlet-artifact-bar__badge {
270
+ display: block;
271
+ }
272
+ }
273
+
274
+ @container crewlet-artifact-bar (width < 720px) {
275
+ .crewlet-artifact-bar__roomy {
276
+ display: none;
277
+ }
278
+
279
+ .crewlet-artifact-bar__tight {
280
+ display: inline-flex;
281
+ }
282
+ }
283
+
284
+ @container crewlet-artifact-bar (width < 640px) {
285
+ .crewlet-artifact-bar__row {
286
+ gap: var(--spacing-1);
287
+ padding: 0 var(--spacing-2);
288
+ }
289
+
290
+ /* The title has the row's room before the kind's glyph does: the glyph
291
+ says again what the title already names. */
292
+ .crewlet-artifact-bar__wide,
293
+ .crewlet-artifact-bar__glyph {
294
+ display: none;
295
+ }
296
+
297
+ .crewlet-artifact-bar__narrow {
298
+ display: inline-flex;
299
+ }
300
+
301
+ /* The views have folded, so there is nothing to centre: the title takes
302
+ the room. */
303
+ .crewlet-artifact-bar__row--centred .crewlet-artifact-bar__end {
304
+ flex: none;
305
+ min-width: 0;
306
+ }
307
+ }
308
+
309
+ /*
310
+ * THE VERSION CHIP: quiet at rest, the hover ground under the pointer, and
311
+ * the accent's soft ground while an older version than the newest is on
312
+ * show, so history never passes for the present.
313
+ */
314
+ .crewlet-version-chip {
315
+ display: inline-flex;
316
+ align-items: center;
317
+ gap: var(--spacing-1);
318
+ height: var(--size-target-min);
319
+ padding: 0 var(--spacing-2);
320
+ border: 0;
321
+ border-radius: var(--radius-pill);
322
+ background: var(--color-surface-subtle);
323
+ color: var(--color-text-secondary);
324
+ font-family: var(--font-family-sans);
325
+ font-size: var(--font-size-xs);
326
+ font-weight: var(--font-weight-medium);
327
+ font-variant-numeric: tabular-nums;
328
+ white-space: nowrap;
329
+ cursor: pointer;
330
+ transition: background-color var(--motion-duration-fast) var(--motion-easing-default);
331
+ }
332
+
333
+ .crewlet-version-chip:hover {
334
+ background: var(--color-surface-hover);
335
+ color: var(--color-text-primary);
336
+ }
337
+
338
+ .crewlet-version-chip:focus-visible {
339
+ outline: 2px solid var(--color-focus);
340
+ outline-offset: var(--size-focus-ring-inset-offset);
341
+ }
342
+
343
+ .crewlet-version-chip--older {
344
+ background: var(--color-brand-accent-soft);
345
+ color: var(--color-brand-accent-ink);
346
+ }
347
+
348
+ .crewlet-version-chip--older:hover {
349
+ background: var(--color-brand-accent-soft-strong);
350
+ color: var(--color-brand-accent-ink);
351
+ }
352
+
353
+ @media (prefers-reduced-motion: reduce) {
354
+ .crewlet-artifact-bar__rename,
355
+ .crewlet-version-chip {
356
+ transition: none;
357
+ }
358
+ }
@@ -1,12 +1,12 @@
1
- export { ARTIFACT_KINDS, ArtifactCard, ArtifactKindGlyph } from '../chunk-6J35F334.js';
1
+ export { ARTIFACT_KINDS, ArtifactCard, ArtifactKindGlyph } from '../chunk-GOSQXEZU.js';
2
2
  import '../chunk-4KP4RC3O.js';
3
3
  import '../chunk-3CZ7XAVY.js';
4
4
  import '../chunk-EUCC37WY.js';
5
5
  import '../chunk-UAN5NE7M.js';
6
6
  import '../chunk-5OM447RW.js';
7
- import '../chunk-YZCJ63JF.js';
7
+ import '../chunk-ACA27MZH.js';
8
8
  import '../chunk-AV2DXAEL.js';
9
- import '../chunk-PQADV6P6.js';
10
9
  import '../chunk-BHHIIK3M.js';
10
+ import '../chunk-PQADV6P6.js';
11
11
  import '../chunk-BZFWDIV6.js';
12
12
  import '../chunk-ODEQTPFM.js';
@@ -1,14 +1,14 @@
1
- export { DashboardCover, DocCover, SHEET_COVER_COLUMNS, SHEET_COVER_ROWS, SheetCover } from '../chunk-MQEEQVG6.js';
1
+ export { DashboardCover, DocCover, SHEET_COVER_COLUMNS, SHEET_COVER_ROWS, SheetCover } from '../chunk-XALUCIG5.js';
2
2
  import '../chunk-WI6K5M5X.js';
3
- import '../chunk-6J35F334.js';
3
+ import '../chunk-GOSQXEZU.js';
4
4
  import '../chunk-4KP4RC3O.js';
5
5
  import '../chunk-3CZ7XAVY.js';
6
6
  import '../chunk-EUCC37WY.js';
7
7
  import '../chunk-UAN5NE7M.js';
8
8
  import '../chunk-5OM447RW.js';
9
- import '../chunk-YZCJ63JF.js';
9
+ import '../chunk-ACA27MZH.js';
10
10
  import '../chunk-AV2DXAEL.js';
11
- import '../chunk-PQADV6P6.js';
12
11
  import '../chunk-BHHIIK3M.js';
12
+ import '../chunk-PQADV6P6.js';
13
13
  import '../chunk-BZFWDIV6.js';
14
14
  import '../chunk-ODEQTPFM.js';
@@ -1,13 +1,13 @@
1
- export { ARTIFACT_ICON_WORDS, ArtifactIcon, artifactIconGlyph } from '../chunk-V2Z24W2Z.js';
2
- import '../chunk-6J35F334.js';
1
+ export { ARTIFACT_ICON_WORDS, ArtifactIcon, artifactIconGlyph } from '../chunk-4JUKWWUD.js';
2
+ import '../chunk-GOSQXEZU.js';
3
3
  import '../chunk-4KP4RC3O.js';
4
4
  import '../chunk-3CZ7XAVY.js';
5
5
  import '../chunk-EUCC37WY.js';
6
6
  import '../chunk-UAN5NE7M.js';
7
7
  import '../chunk-5OM447RW.js';
8
- import '../chunk-YZCJ63JF.js';
8
+ import '../chunk-ACA27MZH.js';
9
9
  import '../chunk-AV2DXAEL.js';
10
- import '../chunk-PQADV6P6.js';
11
10
  import '../chunk-BHHIIK3M.js';
11
+ import '../chunk-PQADV6P6.js';
12
12
  import '../chunk-BZFWDIV6.js';
13
13
  import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,81 @@
1
+ import { type ReactNode, type Ref } from 'react';
2
+ /** How wide a panel rests beside the artifact: facts, a list, or a table. */
3
+ export type ArtifactPanelSize = 'sm' | 'md' | 'lg';
4
+ export interface ArtifactPanelLabels {
5
+ close: (title: string) => string;
6
+ expand: string;
7
+ collapse: string;
8
+ }
9
+ export declare const ARTIFACT_PANEL_LABELS: ArtifactPanelLabels;
10
+ export interface ArtifactPanelProps {
11
+ title: string;
12
+ /** A glyph before the title: the one on the bar's control that opened it. */
13
+ icon?: ReactNode;
14
+ onClose: () => void;
15
+ size?: ArtifactPanelSize | undefined;
16
+ /**
17
+ * The panel takes the whole workspace, the artifact hidden behind it, for a
18
+ * table or a comparison the side's width cannot hold. With `onExpandedChange`
19
+ * the head carries the control that toggles it.
20
+ */
21
+ expanded?: boolean | undefined;
22
+ onExpandedChange?: ((expanded: boolean) => void) | undefined;
23
+ /** Controls in the head, before expand and close. */
24
+ actions?: ReactNode;
25
+ /**
26
+ * Whether focus moves to the panel's heading when it opens. True when the
27
+ * reader opened it; false for a panel a link opened on arrival, which must
28
+ * not take focus from wherever the page put it.
29
+ */
30
+ focusOnOpen?: boolean | undefined;
31
+ labels?: Partial<ArtifactPanelLabels> | undefined;
32
+ className?: string | undefined;
33
+ children: ReactNode;
34
+ }
35
+ /**
36
+ * A panel at the artifact's side: its details, its history, its data, who is
37
+ * here, its settings. One at a time, opened from the bar's controls.
38
+ *
39
+ * A COMPLEMENTARY REGION, NOT A DIALOG. The artifact beside it stays live and
40
+ * reachable, so the panel is an `aside` named by its heading and never traps
41
+ * focus; the reader moves between the two with Tab as between any two parts
42
+ * of a page.
43
+ *
44
+ * FOCUS IS STILL MANAGED, because a panel opened from a control that is then
45
+ * pressed again, or closed from inside, would otherwise leave focus on nothing.
46
+ * Opening moves focus to the heading, so a screen reader announces what
47
+ * opened; closing with focus inside hands it back to whatever held it before
48
+ * (the bar's control, as a rule), and leaves it alone otherwise.
49
+ *
50
+ * ESCAPE CLOSES IT from anywhere inside, a field included, unless something
51
+ * inside answered the press first: a menu or a dialog opened from the panel is
52
+ * portalled out of it, and the press that closes one of them never reaches
53
+ * this.
54
+ */
55
+ export declare function ArtifactPanel({ title, icon, onClose, size, expanded, onExpandedChange, actions, focusOnOpen, labels, className, children, }: ArtifactPanelProps): import("react").JSX.Element;
56
+ export interface ArtifactWorkspaceProps {
57
+ /** The open panel, if any: an [ArtifactPanel]. */
58
+ panel?: ReactNode;
59
+ /** Whether the open panel takes the whole workspace. */
60
+ expanded?: boolean | undefined;
61
+ /** The artifact's own body: the element a caller scrolls, measures or listens on. */
62
+ bodyRef?: Ref<HTMLDivElement> | undefined;
63
+ bodyClassName?: string | undefined;
64
+ /** Names the body region: the artifact's title. */
65
+ bodyLabel?: string | undefined;
66
+ className?: string | undefined;
67
+ children: ReactNode;
68
+ }
69
+ /**
70
+ * The artifact's body and its one open panel, side by side.
71
+ *
72
+ * THE PANEL IS A COLUMN WHERE THERE IS ROOM FOR TWO, AND A DRAWER WHERE THERE
73
+ * IS NOT. Measured on the workspace itself (a container query), since a
74
+ * sidebar beside it decides its room: wide, the artifact narrows to make room
75
+ * and the two are read together, which is the point of a panel of history or
76
+ * of who is here; narrower than two useful columns, the panel slides over the
77
+ * artifact's end edge; on a phone it covers the artifact whole. An expanded
78
+ * panel takes the workspace at every width, with the artifact kept mounted
79
+ * behind it so a page's state survives the look at its data.
80
+ */
81
+ export declare function ArtifactWorkspace({ panel, expanded, bodyRef, bodyClassName, bodyLabel, className, children, }: ArtifactWorkspaceProps): import("react").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './ArtifactPanel.css';
2
+ export { ARTIFACT_PANEL_LABELS, ArtifactPanel, ArtifactWorkspace } from './ArtifactPanel.js';
3
+ export type { ArtifactPanelLabels, ArtifactPanelProps, ArtifactPanelSize, ArtifactWorkspaceProps, } from './ArtifactPanel.js';
@@ -0,0 +1,5 @@
1
+ export { ARTIFACT_PANEL_LABELS, ArtifactPanel, ArtifactWorkspace } from '../chunk-I3BSQUKN.js';
2
+ import '../chunk-PQADV6P6.js';
3
+ import '../chunk-4FQT6ZAY.js';
4
+ import '../chunk-BZFWDIV6.js';
5
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,132 @@
1
+ /*
2
+ * The workspace is a row: the artifact's body, then at most one panel. The
3
+ * body scrolls itself, so a panel beside it stays in view however far the
4
+ * artifact is read; the panel's own body scrolls under its head.
5
+ *
6
+ * ONE HAIRLINE between the two, the panel's start edge, and none at the
7
+ * workspace's own edges: whatever frames the workspace already draws those.
8
+ */
9
+
10
+ .crewlet-artifact-workspace {
11
+ container: crewlet-artifact-workspace / inline-size;
12
+ position: relative;
13
+ display: flex;
14
+ min-width: 0;
15
+ min-height: 0;
16
+ }
17
+
18
+ .crewlet-artifact-workspace__body {
19
+ flex: 1 1 auto;
20
+ min-width: 0;
21
+ min-height: 0;
22
+ overflow: auto;
23
+ }
24
+
25
+ /* EXPANDED, the panel is the workspace; the body stays mounted behind it. */
26
+ .crewlet-artifact-workspace[data-panel='expanded'] > .crewlet-artifact-workspace__body {
27
+ display: none;
28
+ }
29
+
30
+ .crewlet-artifact-panel {
31
+ --crewlet-artifact-panel-width: 25rem;
32
+ display: flex;
33
+ flex: none;
34
+ flex-direction: column;
35
+ width: var(--crewlet-artifact-panel-width);
36
+ min-height: 0;
37
+ border-left: 1px solid var(--color-border-default);
38
+ background: var(--color-surface-background);
39
+ }
40
+
41
+ .crewlet-artifact-panel--sm {
42
+ --crewlet-artifact-panel-width: 20rem;
43
+ }
44
+
45
+ .crewlet-artifact-panel--lg {
46
+ --crewlet-artifact-panel-width: 36rem;
47
+ }
48
+
49
+ .crewlet-artifact-panel[data-expanded] {
50
+ flex: 1 1 auto;
51
+ width: auto;
52
+ border-left: 0;
53
+ }
54
+
55
+ .crewlet-artifact-panel__head {
56
+ display: flex;
57
+ flex: none;
58
+ align-items: center;
59
+ gap: var(--spacing-2);
60
+ height: var(--size-row-lg);
61
+ padding: 0 var(--spacing-2) 0 var(--spacing-4);
62
+ border-bottom: 1px solid var(--color-border-default);
63
+ }
64
+
65
+ .crewlet-artifact-panel__icon {
66
+ display: inline-flex;
67
+ flex: none;
68
+ color: var(--color-text-tertiary);
69
+ }
70
+
71
+ .crewlet-artifact-panel__title {
72
+ flex: 1 1 auto;
73
+ min-width: 0;
74
+ margin: 0;
75
+ overflow: hidden;
76
+ color: var(--color-text-primary);
77
+ font-size: var(--font-size-sm);
78
+ font-weight: var(--font-weight-semibold);
79
+ line-height: var(--font-line-height-snug);
80
+ text-overflow: ellipsis;
81
+ white-space: nowrap;
82
+ }
83
+
84
+ .crewlet-artifact-panel__title:focus-visible {
85
+ outline: 2px solid var(--color-focus);
86
+ outline-offset: var(--size-focus-ring-inset-offset);
87
+ border-radius: var(--radius-sm);
88
+ }
89
+
90
+ .crewlet-artifact-panel__actions {
91
+ display: inline-flex;
92
+ flex: none;
93
+ align-items: center;
94
+ gap: var(--spacing-1);
95
+ }
96
+
97
+ .crewlet-artifact-panel__body {
98
+ flex: 1 1 auto;
99
+ min-height: 0;
100
+ padding: var(--spacing-4);
101
+ overflow: auto;
102
+ overscroll-behavior: contain;
103
+ }
104
+
105
+ /* NOT ROOM FOR TWO COLUMNS: the panel slides over the artifact's end edge,
106
+ raised off it, rather than squeezing the artifact under a useful width. */
107
+ @container crewlet-artifact-workspace (width < 960px) {
108
+ .crewlet-artifact-panel {
109
+ position: absolute;
110
+ inset-block: 0;
111
+ inset-inline-end: 0;
112
+ z-index: var(--z-index-overlay);
113
+ width: min(var(--crewlet-artifact-panel-width), 100%);
114
+ box-shadow: var(--shadow-lg);
115
+ }
116
+
117
+ .crewlet-artifact-panel[data-expanded] {
118
+ inset-inline-start: 0;
119
+ width: auto;
120
+ box-shadow: none;
121
+ }
122
+ }
123
+
124
+ /* A PHONE: the panel is the screen until it is closed. */
125
+ @container crewlet-artifact-workspace (width < 640px) {
126
+ .crewlet-artifact-panel {
127
+ inset-inline-start: 0;
128
+ width: auto;
129
+ border-left: 0;
130
+ box-shadow: none;
131
+ }
132
+ }
@@ -1,8 +1,8 @@
1
- export { AuthLayout } from '../chunk-WHZFDS62.js';
1
+ export { AuthLayout } from '../chunk-VDPJGP4Q.js';
2
2
  import '../chunk-7KBNFFM3.js';
3
- import '../chunk-YZCJ63JF.js';
3
+ import '../chunk-ACA27MZH.js';
4
4
  import '../chunk-AV2DXAEL.js';
5
- import '../chunk-PQADV6P6.js';
6
5
  import '../chunk-BHHIIK3M.js';
6
+ import '../chunk-PQADV6P6.js';
7
7
  import '../chunk-BZFWDIV6.js';
8
8
  import '../chunk-ODEQTPFM.js';
@@ -1,10 +1,10 @@
1
- export { AvatarPicker } from '../chunk-PRNX5AFE.js';
2
- import '../chunk-SGIQCI6Y.js';
3
- import '../chunk-RCQXUT5K.js';
4
- import '../chunk-HJEVSQN6.js';
1
+ export { AvatarPicker } from '../chunk-TGYDROIB.js';
2
+ import '../chunk-LIXSV5YI.js';
5
3
  import '../chunk-BWRGFKJP.js';
6
4
  import '../chunk-AYKXMIOR.js';
7
5
  import '../chunk-HVIX5ECM.js';
6
+ import '../chunk-RCQXUT5K.js';
7
+ import '../chunk-HJEVSQN6.js';
8
8
  import '../chunk-RKKO7QHH.js';
9
9
  import '../chunk-5OM447RW.js';
10
10
  import '../chunk-BHHIIK3M.js';
@@ -1,8 +1,8 @@
1
- export { CANVAS_COMPOSE_CONTEXT, CANVAS_FIT_MAX_ZOOM, CANVAS_FIT_PADDING, CANVAS_FOCUS_CONTEXT, CANVAS_MAX_ZOOM, CANVAS_MIN_ZOOM, CANVAS_PAN_MARGIN, CANVAS_PAN_STEP, CANVAS_REVEAL_PADDING, CANVAS_TAP_SLOP, CANVAS_WHEEL_LINE_PX, CANVAS_WHEEL_ZOOM_PER_PIXEL, CANVAS_ZOOM_CEILING, CANVAS_ZOOM_LIMITS, CANVAS_ZOOM_STEP, Canvas, IDENTITY_VIEW, anchorView, beyondSlop, clampPan, clampZoom, fitView, panBy, pinchView, regionView, revealView, screenRect, toScreen, toWorld, wheelPixels, wheelZoomFactor, zoomAt, zoomLimits } from '../chunk-KZOGQXSP.js';
1
+ export { CANVAS_COMPOSE_CONTEXT, CANVAS_FIT_MAX_ZOOM, CANVAS_FIT_PADDING, CANVAS_FOCUS_CONTEXT, CANVAS_MAX_ZOOM, CANVAS_MIN_ZOOM, CANVAS_PAN_MARGIN, CANVAS_PAN_STEP, CANVAS_REVEAL_PADDING, CANVAS_TAP_SLOP, CANVAS_WHEEL_LINE_PX, CANVAS_WHEEL_ZOOM_PER_PIXEL, CANVAS_ZOOM_CEILING, CANVAS_ZOOM_LIMITS, CANVAS_ZOOM_STEP, Canvas, IDENTITY_VIEW, anchorView, beyondSlop, clampPan, clampZoom, fitView, panBy, pinchView, regionView, revealView, screenRect, toScreen, toWorld, wheelPixels, wheelZoomFactor, zoomAt, zoomLimits } from '../chunk-OJ45PPCV.js';
2
2
  import '../chunk-VYOKRN2I.js';
3
- import '../chunk-OG6CL3EB.js';
4
3
  import '../chunk-HMPFGIWM.js';
5
4
  import '../chunk-R25RGPUB.js';
5
+ import '../chunk-OG6CL3EB.js';
6
6
  import '../chunk-4FQT6ZAY.js';
7
7
  import '../chunk-BZFWDIV6.js';
8
8
  import '../chunk-ODEQTPFM.js';
@@ -1,10 +1,10 @@
1
- export { CANVAS_BOARD_MAX_LIVE, CANVAS_BOARD_MIN_LIVE_WIDTH, CANVAS_NOTE_COLORS, CanvasBoard, liveBoards } from '../chunk-3D7PSL2L.js';
2
- import '../chunk-63WJLRB2.js';
3
- import '../chunk-KZOGQXSP.js';
1
+ export { CANVAS_BOARD_MAX_LIVE, CANVAS_BOARD_MIN_LIVE_WIDTH, CANVAS_NOTE_COLORS, CanvasBoard, liveBoards } from '../chunk-JODJS7MR.js';
2
+ import '../chunk-CJKMURZO.js';
3
+ import '../chunk-OJ45PPCV.js';
4
4
  import '../chunk-VYOKRN2I.js';
5
- import '../chunk-OG6CL3EB.js';
6
5
  import '../chunk-HMPFGIWM.js';
7
6
  import '../chunk-R25RGPUB.js';
7
+ import '../chunk-OG6CL3EB.js';
8
8
  import '../chunk-4FQT6ZAY.js';
9
9
  import '../chunk-BZFWDIV6.js';
10
10
  import '../chunk-ODEQTPFM.js';