@crewlethq/ui 0.35.1 → 0.37.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 (176) hide show
  1. package/README.md +90 -1
  2. package/dist/AgentHandoffPanel/AgentHandoffPanel.d.ts +99 -0
  3. package/dist/AgentHandoffPanel/index.d.ts +3 -0
  4. package/dist/AgentHandoffPanel/index.js +16 -0
  5. package/dist/AgentHandoffPanel-JWSW62GU.css +151 -0
  6. package/dist/ArrangeFrame/index.js +1 -1
  7. package/dist/{ArrangeFrame-3PLZAG22.css → ArrangeFrame-QXOQTFAH.css} +22 -5
  8. package/dist/ArrangeList/index.js +4 -3
  9. package/dist/ArtifactAccess/ArtifactAccess.d.ts +40 -0
  10. package/dist/ArtifactAccess/index.d.ts +3 -0
  11. package/dist/ArtifactAccess/index.js +2 -0
  12. package/dist/ArtifactAccess-Y53ZTRFS.css +31 -0
  13. package/dist/ArtifactBar/ArtifactBar.d.ts +2 -1
  14. package/dist/ArtifactBar/index.js +2 -2
  15. package/dist/{ArtifactBar-HV5AT4RG.css → ArtifactBar-FWPBBKQ5.css} +8 -0
  16. package/dist/ArtifactCard/ArtifactCard.d.ts +1 -6
  17. package/dist/ArtifactCard/index.d.ts +2 -1
  18. package/dist/ArtifactCard/index.js +4 -3
  19. package/dist/ArtifactCover/index.js +3 -2
  20. package/dist/ArtifactKindIllustration/ArtifactKindIllustration.d.ts +16 -7
  21. package/dist/ArtifactKindIllustration/index.js +1 -1
  22. package/dist/{ArtifactKindIllustration-5FPRJQ3P.css → ArtifactKindIllustration-KLFL7KBG.css} +37 -1
  23. package/dist/ArtifactMakeRow/ArtifactMakeRow.d.ts +39 -0
  24. package/dist/ArtifactMakeRow/index.d.ts +4 -0
  25. package/dist/ArtifactMakeRow/index.js +4 -0
  26. package/dist/ArtifactMakeRow-XBA2MPSY.css +167 -0
  27. package/dist/ArtifactNameCell/ArtifactNameCell.d.ts +37 -0
  28. package/dist/ArtifactNameCell/index.d.ts +4 -0
  29. package/dist/ArtifactNameCell/index.js +4 -0
  30. package/dist/ArtifactNameCell-RTVP4LO4.css +104 -0
  31. package/dist/ArtifactPanel/ArtifactPanel.d.ts +8 -1
  32. package/dist/ArtifactPanel/index.js +1 -1
  33. package/dist/{ArtifactPanel-HW3SU7CP.css → ArtifactPanel-KKUUIPEU.css} +9 -0
  34. package/dist/AuthLayout/index.js +2 -2
  35. package/dist/AvatarPicker/index.js +2 -2
  36. package/dist/Canvas/index.js +2 -2
  37. package/dist/CanvasBoard/CanvasBoard.d.ts +27 -13
  38. package/dist/CanvasBoard/index.d.ts +1 -1
  39. package/dist/CanvasBoard/index.js +4 -4
  40. package/dist/{CanvasBoard-5NNSKY6A.css → CanvasBoard-TS4P356F.css} +13 -6
  41. package/dist/CanvasToolbar/index.js +3 -3
  42. package/dist/Card/index.js +1 -1
  43. package/dist/{Card-KJOYHDTJ.css → Card-QOVASQNU.css} +17 -12
  44. package/dist/Checkbox/index.js +3 -2
  45. package/dist/ChoiceButtons/index.js +1 -1
  46. package/dist/{ChoiceButtons-DJ5EOGUA.css → ChoiceButtons-FLIFXFFS.css} +10 -0
  47. package/dist/ChoiceList/index.js +1 -1
  48. package/dist/{ChoiceList-RBL7FNQL.css → ChoiceList-EA2W6MOS.css} +36 -5
  49. package/dist/Combobox/index.js +3 -2
  50. package/dist/CommandPalette/index.js +3 -2
  51. package/dist/CommentThread/index.js +6 -5
  52. package/dist/Composer/Composer.d.ts +4 -0
  53. package/dist/Composer/index.js +3 -2
  54. package/dist/{Composer-ABGJIAIR.css → Composer-PXITWNEK.css} +26 -15
  55. package/dist/ConfirmField/index.js +3 -2
  56. package/dist/DataTable/index.js +4 -3
  57. package/dist/DataView/index.js +7 -6
  58. package/dist/DatasetSource/DatasetSource.d.ts +4 -0
  59. package/dist/DatasetSource/index.js +1 -1
  60. package/dist/{DatasetSource-XFPZBRXL.css → DatasetSource-SMGX4PS5.css} +38 -4
  61. package/dist/DateTimePicker/index.js +2 -1
  62. package/dist/{DateTimePicker-HG2KQXQ6.css → DateTimePicker-2IVTKFV2.css} +15 -2
  63. package/dist/DocTabsEditor/index.js +3 -2
  64. package/dist/Document/Document.d.ts +15 -3
  65. package/dist/Document/index.js +2 -1
  66. package/dist/{Document-JUGCSQ4L.css → Document-YFWTWXJP.css} +34 -2
  67. package/dist/{Editor-BVQHBF7L.js → Editor-HORWMUM3.js} +2 -1
  68. package/dist/FilterChip/index.js +1 -1
  69. package/dist/{FilterChip-EZ4QMW4E.css → FilterChip-VL33P3JL.css} +5 -1
  70. package/dist/Input/index.js +2 -1
  71. package/dist/{Input-GBZSFXLU.css → Input-ABGOFENS.css} +46 -10
  72. package/dist/LayersList/index.js +1 -1
  73. package/dist/{LayersList-NQZEIPZB.css → LayersList-TBNF4XGL.css} +16 -3
  74. package/dist/LinkInterstitial/index.js +2 -2
  75. package/dist/ListInput/index.js +3 -2
  76. package/dist/LivePreview/LivePreview.d.ts +120 -28
  77. package/dist/LivePreview/budget.d.ts +64 -20
  78. package/dist/LivePreview/index.d.ts +6 -4
  79. package/dist/LivePreview/index.js +1 -1
  80. package/dist/LivePreview/stills.d.ts +57 -0
  81. package/dist/LivePreview-BROGKR4N.css +113 -0
  82. package/dist/PresenterView/index.js +2 -2
  83. package/dist/PrincipalPicker/index.js +4 -3
  84. package/dist/RichEditor/index.js +1 -1
  85. package/dist/Select/index.js +2 -1
  86. package/dist/{Select-A54YS5EP.css → Select-W3CHTZXP.css} +18 -2
  87. package/dist/ShareDialog/index.js +3 -2
  88. package/dist/SheetColumnEditor/index.js +6 -5
  89. package/dist/SheetGrid/index.js +3 -3
  90. package/dist/SlideCompare/index.js +2 -2
  91. package/dist/SlideFilmstrip/index.js +2 -2
  92. package/dist/{SlideFilmstrip-4ITZLMO4.css → SlideFilmstrip-PAT7P4OG.css} +26 -7
  93. package/dist/SlideGrid/index.js +2 -2
  94. package/dist/{SlideGrid-S4LTJ4UU.css → SlideGrid-FJA33DV4.css} +11 -1
  95. package/dist/SlideStage/index.js +1 -1
  96. package/dist/{SlideStage-S2FISF4C.css → SlideStage-ZTTEQSS2.css} +4 -2
  97. package/dist/SourceEditor/index.js +2 -1
  98. package/dist/{SourceEditor-G2C3STPX.css → SourceEditor-QAYE2JS6.css} +19 -12
  99. package/dist/Switcher/index.js +4 -3
  100. package/dist/TagsInput/index.js +2 -1
  101. package/dist/{TagsInput-XMXTI5Q4.css → TagsInput-7EGBBXHS.css} +7 -1
  102. package/dist/ThemeGallery/index.js +1 -1
  103. package/dist/{ThemeGallery-HSUKBDWY.css → ThemeGallery-X35Y25EX.css} +26 -5
  104. package/dist/TimeWindowPicker/index.js +4 -3
  105. package/dist/{TimeWindowPicker-T763GLXH.css → TimeWindowPicker-DEFDV77Z.css} +15 -2
  106. package/dist/TreeCanvas/index.js +3 -3
  107. package/dist/VersionTimeline/index.js +2 -2
  108. package/dist/{chunk-V43UVX4H.js → chunk-27GD7LVR.js} +1 -1
  109. package/dist/{chunk-6JVRY5DQ.js → chunk-44WJLPQS.js} +2 -2
  110. package/dist/{chunk-ONL54WMH.js → chunk-46RL3E54.js} +1 -1
  111. package/dist/{chunk-UHJQDFKQ.js → chunk-4ZJLOKSS.js} +1 -1
  112. package/dist/{chunk-ACA27MZH.js → chunk-5QXRI35B.js} +1 -1
  113. package/dist/{chunk-LL5AFXU7.js → chunk-5RT5O4JR.js} +1 -1
  114. package/dist/{chunk-GMU6SQ6B.js → chunk-66NGUD5S.js} +2 -2
  115. package/dist/{chunk-3Y56GQPM.js → chunk-7VAUGG6B.js} +1 -1
  116. package/dist/{chunk-2CQLNML5.js → chunk-AOLCZDZ6.js} +3 -1
  117. package/dist/{chunk-NKZCJRKO.js → chunk-APDKUGSH.js} +2 -2
  118. package/dist/chunk-BGLKLXL3.js +29 -0
  119. package/dist/{chunk-Z6VW6CXX.js → chunk-BIQDJOJZ.js} +1 -1
  120. package/dist/{chunk-YSJC7AZC.js → chunk-BWOIUOO3.js} +1 -1
  121. package/dist/{chunk-PI7HKLIT.js → chunk-D7GNNID2.js} +3 -1
  122. package/dist/chunk-EAKC24BW.js +51 -0
  123. package/dist/{chunk-CCLNGVCM.js → chunk-EARDAJQY.js} +1 -1
  124. package/dist/chunk-EOQFPZEE.js +138 -0
  125. package/dist/{chunk-THROPJZC.js → chunk-F23N4MVU.js} +1 -1
  126. package/dist/{chunk-J6YZ4IYV.js → chunk-FG4O64DV.js} +3 -3
  127. package/dist/{chunk-E35CMI5D.js → chunk-FHHYXZSP.js} +31 -13
  128. package/dist/{chunk-AYB6AYNH.js → chunk-GMLAKNFY.js} +1 -1
  129. package/dist/{chunk-ZB5O3ELS.js → chunk-GRYZ5EP3.js} +4 -2
  130. package/dist/{chunk-QFNWMWWY.js → chunk-GS7ZTHPF.js} +4 -4
  131. package/dist/{chunk-ILAEBSLJ.js → chunk-H5NOLRGH.js} +2 -2
  132. package/dist/{chunk-W3UVOZKL.js → chunk-IPAU6FLH.js} +6 -2
  133. package/dist/{chunk-6QFAK2WV.js → chunk-IUYUS2SO.js} +4 -1
  134. package/dist/{chunk-22CQQDFW.js → chunk-JML75PGJ.js} +1 -1
  135. package/dist/{chunk-AXBRWRGV.js → chunk-JQLS3MZB.js} +1 -1
  136. package/dist/{chunk-FGYET26P.js → chunk-KJW2AS57.js} +1 -1
  137. package/dist/{chunk-QIXMNOBD.js → chunk-KYZMN6I6.js} +2 -2
  138. package/dist/{chunk-73A7D5CE.js → chunk-L4WZSVMT.js} +3 -1
  139. package/dist/{chunk-ULPL26BU.js → chunk-N5SKHIAP.js} +1 -1
  140. package/dist/{chunk-LV4APO72.js → chunk-NQGPD6NX.js} +1 -1
  141. package/dist/{chunk-7UYONN6K.js → chunk-OHA6WSAG.js} +6 -11
  142. package/dist/chunk-P5VGSVWG.js +39 -0
  143. package/dist/chunk-P6WFZDKS.js +111 -0
  144. package/dist/{chunk-CPEPST4S.js → chunk-PJIPUEJ3.js} +1 -1
  145. package/dist/{chunk-QS4ZGTEU.js → chunk-PPFX6GRK.js} +1 -1
  146. package/dist/{chunk-7DZDSSJS.js → chunk-RH2NCQBZ.js} +5 -4
  147. package/dist/{chunk-3VD3G3IL.js → chunk-T5RQGI6O.js} +1 -1
  148. package/dist/{chunk-F2KY4RLI.js → chunk-TVRBQMIX.js} +5 -3
  149. package/dist/{chunk-W7QBBKUE.js → chunk-UBZDYOCA.js} +7 -3
  150. package/dist/{chunk-QEFHYUCY.js → chunk-UWGUKMBK.js} +1 -1
  151. package/dist/{chunk-5YLON2PW.js → chunk-UYZZV4DZ.js} +1 -1
  152. package/dist/{chunk-BQ7AKL2N.js → chunk-VKKUGZ3G.js} +3 -1
  153. package/dist/{chunk-DEJHAOC5.js → chunk-WMXAX6VA.js} +1 -1
  154. package/dist/{chunk-VDPJGP4Q.js → chunk-WX2NIG4G.js} +1 -1
  155. package/dist/chunk-WYKWXRJ4.js +456 -0
  156. package/dist/{chunk-ZU3DUXD2.js → chunk-WZGYIVYH.js} +1 -1
  157. package/dist/{chunk-HUVG2FFT.js → chunk-Y5BD4MTE.js} +4 -2
  158. package/dist/chunk-YSGLEHND.js +56 -0
  159. package/dist/generated/index.d.ts +4 -0
  160. package/dist/generated/index.js +105 -100
  161. package/dist/index.js +105 -100
  162. package/dist/styles.css +1036 -163
  163. package/dist/utils/focusModality.d.ts +41 -0
  164. package/dist/utils/index.d.ts +2 -0
  165. package/dist/utils/index.js +2 -1
  166. package/package.json +3 -3
  167. package/dist/LivePreview-SRO7KHO4.css +0 -65
  168. package/dist/chunk-KF6YGL4B.js +0 -160
  169. package/dist/chunk-TYKQ33CL.js +0 -35
  170. package/dist/{chunk-3P4Y5RX6.js → chunk-4BYHAOHH.js} +1 -1
  171. package/dist/{chunk-KD2IRYCT.js → chunk-5WDXPHEW.js} +1 -1
  172. package/dist/{chunk-OSFA5ROT.js → chunk-FEJANUZK.js} +0 -0
  173. package/dist/{chunk-FJJHD73S.js → chunk-GYBDPCRC.js} +1 -1
  174. package/dist/{chunk-VHZ3AXJD.js → chunk-NQCY44B3.js} +1 -1
  175. package/dist/{chunk-3WCNHYXE.js → chunk-PNNYVN52.js} +0 -0
  176. package/dist/{chunk-FF5OZV77.js → chunk-W3HYWD63.js} +2 -2
@@ -1,13 +1,14 @@
1
- export { ArtifactCard, ArtifactCardSkeleton, ArtifactPreviewGlyph } from '../chunk-7UYONN6K.js';
1
+ export { ArtifactCard, ArtifactCardSkeleton, ArtifactPreviewGlyph } from '../chunk-OHA6WSAG.js';
2
2
  import '../chunk-TEUQWOWZ.js';
3
3
  import '../chunk-CI3VPIJN.js';
4
4
  import '../chunk-3CZ7XAVY.js';
5
5
  import '../chunk-EUCC37WY.js';
6
- import '../chunk-W7QBBKUE.js';
7
- import '../chunk-ACA27MZH.js';
6
+ import '../chunk-UBZDYOCA.js';
7
+ import '../chunk-5QXRI35B.js';
8
8
  import '../chunk-AV2DXAEL.js';
9
9
  import '../chunk-5AQBPHZD.js';
10
10
  import '../chunk-PZKHBB7D.js';
11
+ import '../chunk-BGLKLXL3.js';
11
12
  export { ARTIFACT_KINDS, ArtifactKindGlyph } from '../chunk-CE2THTQR.js';
12
13
  import '../chunk-BHHIIK3M.js';
13
14
  import '../chunk-PQADV6P6.js';
@@ -1,4 +1,5 @@
1
- export { DashboardCover, DocCover, SHEET_COVER_COLUMNS, SHEET_COVER_ROWS, SheetCover } from '../chunk-AXBRWRGV.js';
2
- import '../chunk-TYKQ33CL.js';
1
+ export { DashboardCover, DocCover, SHEET_COVER_COLUMNS, SHEET_COVER_ROWS, SheetCover } from '../chunk-JQLS3MZB.js';
2
+ import '../chunk-P6WFZDKS.js';
3
3
  import '../chunk-CE2THTQR.js';
4
+ import '../chunk-YSGLEHND.js';
4
5
  import '../chunk-ODEQTPFM.js';
@@ -20,8 +20,8 @@ export declare function ArtifactKindIllustration({ kind, className }: {
20
20
  }): import("react").JSX.Element;
21
21
  /**
22
22
  * A kind's drawing on its tinted ground: the stand-in a preview shows while
23
- * nothing live is drawn (off screen, still loading, over the live budget,
24
- * failed or empty), and the face of a Make something new tile.
23
+ * nothing live is drawn (never yet near, still loading, over the live budget,
24
+ * failed or empty), and the face of a kind tile.
25
25
  */
26
26
  export declare function ArtifactKindGround({ kind, className, children, }: {
27
27
  kind: ArtifactKind;
@@ -31,7 +31,7 @@ export declare function ArtifactKindGround({ kind, className, children, }: {
31
31
  }): import("react").JSX.Element;
32
32
  export interface ArtifactKindTileProps {
33
33
  kind: ArtifactKind;
34
- /** The kind's name, under the tile: "Docs". */
34
+ /** The name under the tile: "Docs", or a starting point's "Landing page". */
35
35
  label: string;
36
36
  /** Where starting one goes. Left out with `disabledReason`, the tile starts nothing. */
37
37
  href?: string | undefined;
@@ -41,6 +41,13 @@ export interface ArtifactKindTileProps {
41
41
  * button. `href` wins where both are given.
42
42
  */
43
43
  onSelect?: (() => void) | undefined;
44
+ /**
45
+ * For a tile that is a button: whether it is the one chosen (a starting
46
+ * layout already picked). Drawn as every chosen option is, the selected
47
+ * edge over the selected fill with a check beside the name, and announced
48
+ * as a pressed button. Left out, the tile is an action with no state.
49
+ */
50
+ selected?: boolean | undefined;
44
51
  /**
45
52
  * Drawn on the kind's ground in place of its drawing: a picture of this
46
53
  * particular starting point, such as a design layout's schematic.
@@ -55,12 +62,14 @@ export interface ArtifactKindTileProps {
55
62
  className?: string | undefined;
56
63
  }
57
64
  /**
58
- * One kind on a "Make something new" row: the kind's drawing on its tinted
59
- * ground, framed, with its name under it. The whole tile is one link named by
60
- * the kind's name.
65
+ * One kind, or one starting point of a kind, as a tile: the kind's drawing on
66
+ * its tinted ground (or the starting point's own `face`), framed, with its
67
+ * name under it, such as a create page's starting layouts. The whole tile is
68
+ * one link or button named by the name. The gallery's "Start a new artifact" row
69
+ * is the quieter `ArtifactMakeRow`, a toolbar of glyphs rather than pictures.
61
70
  *
62
71
  * A TILE THAT CANNOT START is still a stop on the row, so a reader moving
63
72
  * through it by keyboard hears why (`disabledReason`) rather than finding a
64
73
  * kind missing.
65
74
  */
66
- export declare function ArtifactKindTile({ kind, label, href, onSelect, face, detail, badge, disabledReason, className, }: ArtifactKindTileProps): import("react").JSX.Element;
75
+ export declare function ArtifactKindTile({ kind, label, href, onSelect, selected, face, detail, badge, disabledReason, className, }: ArtifactKindTileProps): import("react").JSX.Element;
@@ -1,3 +1,3 @@
1
- export { ArtifactKindGround, ArtifactKindIllustration, ArtifactKindTile } from '../chunk-W7QBBKUE.js';
1
+ export { ArtifactKindGround, ArtifactKindIllustration, ArtifactKindTile } from '../chunk-UBZDYOCA.js';
2
2
  import '../chunk-BZFWDIV6.js';
3
3
  import '../chunk-ODEQTPFM.js';
@@ -1,5 +1,5 @@
1
1
  /*
2
- * A kind's drawing, its tinted ground and the Make something new tile.
2
+ * A kind's drawing, its tinted ground and the "Start a new artifact" tile.
3
3
  *
4
4
  * Every colour is the kind's token, `--color-artifact-kind-<kind>` and its
5
5
  * Fill and Line steps, set once per kind on `--crewlet-kind-*`
@@ -201,6 +201,42 @@ a.crewlet-kind-tile:hover .crewlet-kind-tile__frame,
201
201
  outline-offset: var(--size-focus-ring-inset-offset);
202
202
  }
203
203
 
204
+ /*
205
+ * A TILE THAT STARTS SOMETHING IN PLACE (a create page's starting layouts)
206
+ * DRAWS ONE EDGE. Its face is a picture of the layout, with boards of its
207
+ * own, so the ground's tinted inner line was a second outline a few pixels
208
+ * inside the frame's, and with the focus ring over the frame the tile read as
209
+ * three nested rings. The frame is the tile's one edge; the ground keeps its
210
+ * tint.
211
+ */
212
+ .crewlet-kind-tile--button .crewlet-kind-tile__ground {
213
+ box-shadow: none;
214
+ }
215
+
216
+ /*
217
+ * CHOSEN, as every chosen option is drawn: the selected edge (the accent
218
+ * mixed toward the page) on the frame, over the selected fill, and a check
219
+ * beside the name, the mark that clears 3:1. Under the pointer it keeps its
220
+ * edge, and the focus ring is drawn over it for the keyboard alone.
221
+ */
222
+ .crewlet-kind-tile--button.is-selected .crewlet-kind-tile__frame,
223
+ .crewlet-kind-tile--button.is-selected:hover .crewlet-kind-tile__frame {
224
+ border-color: var(--color-border-selected);
225
+ background-image: linear-gradient(var(--color-surface-selected), var(--color-surface-selected));
226
+ }
227
+
228
+ .crewlet-kind-tile__check {
229
+ flex: none;
230
+ margin-inline-start: auto;
231
+ color: var(--color-brand-accent-ink);
232
+ }
233
+
234
+ @media (forced-colors: active) {
235
+ .crewlet-kind-tile--button.is-selected .crewlet-kind-tile__frame {
236
+ border-color: Highlight;
237
+ }
238
+ }
239
+
204
240
  .crewlet-kind-tile--disabled {
205
241
  cursor: not-allowed;
206
242
  }
@@ -0,0 +1,39 @@
1
+ import { type ArtifactKind } from '../ArtifactKindGlyph/index.js';
2
+ /** One kind a reader can start from the row. */
3
+ export interface ArtifactMakeRowItem {
4
+ kind: ArtifactKind;
5
+ /** The kind's name, as what one makes: "Docs". */
6
+ label: string;
7
+ /** What the kind is for, in a few words under its name: "Live company figures". */
8
+ detail?: string | undefined;
9
+ /** Where starting one goes. Left out with `disabledReason`, the item starts nothing. */
10
+ href?: string | undefined;
11
+ /** Why this reader cannot start one. The item stays focusable and says so. */
12
+ disabledReason?: string | undefined;
13
+ }
14
+ export interface ArtifactMakeRowProps {
15
+ /** The kinds, in the order they are offered. */
16
+ items: readonly ArtifactMakeRowItem[];
17
+ /** What the row is called for assistive technology, when no heading names it. */
18
+ 'aria-label'?: string | undefined;
19
+ /** The id of the heading that names the row. */
20
+ 'aria-labelledby'?: string | undefined;
21
+ className?: string | undefined;
22
+ }
23
+ /**
24
+ * The kinds a reader can start, as one quiet tray above their work: each
25
+ * kind's glyph on its own tint, its name and what it is for, the whole item
26
+ * one link. A toolbar for making things rather than a hero: one line high on
27
+ * a wide page, the details dropped before a name is cut, and three across on
28
+ * a phone.
29
+ *
30
+ * THE TRAY IS A WORKBENCH, Crewlet's dotted field under the kinds the way the
31
+ * org chart's canvas sits under its seats, and an item lifts off it as a card
32
+ * under the pointer. The glyph is the one coloured thing in each item, so six
33
+ * hues read as six kinds and never as six coloured boxes.
34
+ *
35
+ * AN ITEM THAT CANNOT START is still a stop, so a reader moving through the
36
+ * row by keyboard hears why (`disabledReason`) rather than finding a kind
37
+ * missing.
38
+ */
39
+ export declare function ArtifactMakeRow({ items, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, className, }: ArtifactMakeRowProps): import("react").JSX.Element;
@@ -0,0 +1,4 @@
1
+ import '../ArtifactKindIllustration/ArtifactKinds.css';
2
+ import './ArtifactMakeRow.css';
3
+ export { ArtifactMakeRow } from './ArtifactMakeRow.js';
4
+ export type { ArtifactMakeRowItem, ArtifactMakeRowProps } from './ArtifactMakeRow.js';
@@ -0,0 +1,4 @@
1
+ export { ArtifactMakeRow } from '../chunk-EAKC24BW.js';
2
+ import '../chunk-CE2THTQR.js';
3
+ import '../chunk-BZFWDIV6.js';
4
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,167 @@
1
+ /*
2
+ * The "Start a new artifact" tray.
3
+ *
4
+ * Every colour is a token: the tray's ground, its dots and its hairlines are
5
+ * the surface and border steps, and each kind's mark reads the kind's own
6
+ * Fill, Line and Ink (`ArtifactKinds.css`), so the tray repaints with the
7
+ * theme and holds no colour of its own.
8
+ *
9
+ * THE TRAY SIZES ITSELF BY ITS OWN WIDTH, never the window's: it sits in a
10
+ * page column a sidebar narrows, so three steps are container queries on the
11
+ * tray. Under 560px three across in two lines; from 560px the six in one
12
+ * line, each its mark over its name, so a long name is never cut; from 920px
13
+ * the mark beside the name and what the kind is for under it.
14
+ */
15
+
16
+ .crewlet-make-row {
17
+ container-type: inline-size;
18
+ /* A WORKBENCH: the canvas's dotted field on the sheet itself, one step
19
+ quieter than a canvas that pans, inside a hairline ring. */
20
+ border: 1px solid var(--color-border-default);
21
+ border-radius: var(--radius-lg);
22
+ background-color: var(--color-surface-background);
23
+ background-image: radial-gradient(var(--color-border-default) 1px, transparent 1.2px);
24
+ background-size: var(--spacing-4) var(--spacing-4);
25
+ background-position: calc(var(--spacing-4) / 2) calc(var(--spacing-4) / 2);
26
+ }
27
+
28
+ .crewlet-make-row__list {
29
+ display: grid;
30
+ grid-template-columns: repeat(3, minmax(0, 1fr));
31
+ gap: var(--spacing-1);
32
+ margin: 0;
33
+ padding: var(--spacing-1);
34
+ list-style: none;
35
+ }
36
+
37
+ .crewlet-make-row__cell {
38
+ display: flex;
39
+ min-width: 0;
40
+ }
41
+
42
+ .crewlet-make-row__item {
43
+ display: flex;
44
+ flex: 1;
45
+ flex-direction: column;
46
+ align-items: center;
47
+ gap: var(--spacing-2);
48
+ min-width: 0;
49
+ box-sizing: border-box;
50
+ padding: var(--spacing-3) var(--spacing-2);
51
+ border: 1px solid transparent;
52
+ border-radius: var(--radius-md);
53
+ color: var(--color-text-primary);
54
+ text-decoration: none;
55
+ outline: none;
56
+ transition:
57
+ background-color var(--motion-duration-fast) var(--motion-easing-out),
58
+ border-color var(--motion-duration-fast) var(--motion-easing-out),
59
+ box-shadow var(--motion-duration-fast) var(--motion-easing-out);
60
+ }
61
+
62
+ /* THE GLYPH ON ITS KIND'S TINT, the one coloured thing in the item. */
63
+ .crewlet-make-row__mark {
64
+ display: inline-flex;
65
+ flex: none;
66
+ align-items: center;
67
+ justify-content: center;
68
+ width: 32px;
69
+ height: 32px;
70
+ border-radius: var(--radius-md);
71
+ background: var(--crewlet-kind-fill);
72
+ box-shadow: inset 0 0 0 1px var(--crewlet-kind-line);
73
+ color: var(--crewlet-kind-ink);
74
+ }
75
+
76
+ .crewlet-make-row__words {
77
+ display: flex;
78
+ flex-direction: column;
79
+ align-items: center;
80
+ min-width: 0;
81
+ max-width: 100%;
82
+ }
83
+
84
+ .crewlet-make-row__name,
85
+ .crewlet-make-row__detail {
86
+ max-width: 100%;
87
+ overflow: hidden;
88
+ text-overflow: ellipsis;
89
+ white-space: nowrap;
90
+ }
91
+
92
+ .crewlet-make-row__name {
93
+ font-size: var(--font-size-sm);
94
+ font-weight: var(--font-weight-medium);
95
+ line-height: 1.3;
96
+ }
97
+
98
+ /* WHAT IT IS FOR is the widest step's: on a narrower tray the name alone
99
+ says it, and the details are kept as the item's description. */
100
+ .crewlet-make-row__detail {
101
+ display: none;
102
+ color: var(--color-text-tertiary);
103
+ font-size: var(--font-size-xs);
104
+ line-height: 1.35;
105
+ }
106
+
107
+ @container (width >= 560px) {
108
+ .crewlet-make-row__list {
109
+ grid-template-columns: repeat(6, minmax(0, 1fr));
110
+ }
111
+
112
+ .crewlet-make-row__item {
113
+ padding: var(--spacing-2) var(--spacing-1);
114
+ }
115
+ }
116
+
117
+ @container (width >= 920px) {
118
+ .crewlet-make-row__item {
119
+ flex-direction: row;
120
+ gap: var(--spacing-3);
121
+ padding: var(--spacing-2);
122
+ }
123
+
124
+ .crewlet-make-row__words {
125
+ align-items: flex-start;
126
+ }
127
+
128
+ .crewlet-make-row__detail {
129
+ display: block;
130
+ }
131
+ }
132
+
133
+ /* AN ITEM LIFTS OFF THE BENCH under the pointer as a card: the card's
134
+ ground, the hairline a card is found by and the lightest shadow, and
135
+ nothing inside it moves. */
136
+ a.crewlet-make-row__item:hover {
137
+ border-color: var(--color-border-default);
138
+ background-color: var(--color-surface-subtle);
139
+ box-shadow: var(--shadow-xs);
140
+ }
141
+
142
+ a.crewlet-make-row__item:active {
143
+ background-color: var(--color-surface-pressed);
144
+ box-shadow: none;
145
+ }
146
+
147
+ /* ON ITS OWN EDGE: an item draws a hairline once lifted, so the ring sits on
148
+ it rather than standing off it with a gap between two edges. */
149
+ .crewlet-make-row__item:focus-visible {
150
+ outline: 2px solid var(--color-focus);
151
+ outline-offset: var(--size-focus-ring-inset-offset);
152
+ }
153
+
154
+ .crewlet-make-row__item--disabled {
155
+ cursor: not-allowed;
156
+ }
157
+
158
+ .crewlet-make-row__item--disabled .crewlet-make-row__mark,
159
+ .crewlet-make-row__item--disabled .crewlet-make-row__words {
160
+ opacity: 0.55;
161
+ }
162
+
163
+ @media (prefers-reduced-motion: reduce) {
164
+ .crewlet-make-row__item {
165
+ transition: none;
166
+ }
167
+ }
@@ -0,0 +1,37 @@
1
+ import { type ArtifactKind } from '../ArtifactKindGlyph/index.js';
2
+ export interface ArtifactNameCellLabels {
3
+ kinds: Record<ArtifactKind, string>;
4
+ pinned: string;
5
+ }
6
+ export interface ArtifactNameCellProps {
7
+ kind: ArtifactKind;
8
+ title: string;
9
+ /**
10
+ * What it is about, in a line under the title after the kind's word: the
11
+ * artifact's own description. Left out, the kind's word stands alone.
12
+ */
13
+ detail?: string | undefined;
14
+ pinned?: boolean | undefined;
15
+ /** It is in the trash: its mark is drawn without its kind's tint. */
16
+ trashed?: boolean | undefined;
17
+ className?: string | undefined;
18
+ labels?: Partial<ArtifactNameCellLabels> | undefined;
19
+ }
20
+ /**
21
+ * An artifact's name in a list: its kind's glyph on the kind's tint, the
22
+ * title, and under it the kind's word and what it is about.
23
+ *
24
+ * THE SAME MARK AS THE MAKE ROW'S, so a reader who started a doc from the
25
+ * tray finds it in the list by the same tile in the same colour, and the
26
+ * grid's badge and the list's mark name one kind one way. The mark is the one
27
+ * coloured thing on the row; the words are the text steps.
28
+ *
29
+ * TWO LINES, ONE NAME. The title is the row's name and the line under it is
30
+ * its description, each cut on one line with the whole of it on hover, so a
31
+ * list of long titles keeps one row height. The kind's word is printed rather
32
+ * than only drawn, which is what lets the list drop a Type column of its own.
33
+ *
34
+ * Not a link: the row it sits in is. The mark is decorative because the kind
35
+ * is printed beside it.
36
+ */
37
+ export declare function ArtifactNameCell({ kind, title, detail, pinned, trashed, className, labels }: ArtifactNameCellProps): import("react").JSX.Element;
@@ -0,0 +1,4 @@
1
+ import '../ArtifactKindIllustration/ArtifactKinds.css';
2
+ import './ArtifactNameCell.css';
3
+ export { ArtifactNameCell } from './ArtifactNameCell.js';
4
+ export type { ArtifactNameCellLabels, ArtifactNameCellProps } from './ArtifactNameCell.js';
@@ -0,0 +1,4 @@
1
+ export { ArtifactNameCell } from '../chunk-P5VGSVWG.js';
2
+ import '../chunk-CE2THTQR.js';
3
+ import '../chunk-BZFWDIV6.js';
4
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,104 @@
1
+ /*
2
+ * An artifact's name in a list: the kind's mark on its tint, the title over
3
+ * one quiet line. Every colour is a token: the mark reads the kind's own Fill,
4
+ * Line and Ink (`ArtifactKinds.css`), the words the text steps.
5
+ */
6
+
7
+ .crewlet-artifact-name {
8
+ display: flex;
9
+ align-items: center;
10
+ gap: var(--spacing-3);
11
+ min-width: 0;
12
+ max-width: 100%;
13
+ padding-block: var(--spacing-1);
14
+ }
15
+
16
+ /* THE MARK, the Make row's tile at a list's size: the kind's glyph on its
17
+ tint inside the kind's hairline. */
18
+ .crewlet-artifact-name__mark {
19
+ display: inline-flex;
20
+ flex: none;
21
+ align-items: center;
22
+ justify-content: center;
23
+ width: 32px;
24
+ height: 32px;
25
+ box-sizing: border-box;
26
+ border-radius: var(--radius-md);
27
+ background: var(--crewlet-kind-fill);
28
+ box-shadow: inset 0 0 0 1px var(--crewlet-kind-line);
29
+ color: var(--crewlet-kind-ink);
30
+ transition: box-shadow var(--motion-duration-fast) var(--motion-easing-out);
31
+ }
32
+
33
+ /* UNDER THE POINTER the row's ground moves (the row's own hover), and the
34
+ mark's hairline takes the kind's hue, so the one coloured thing on the row
35
+ answers too. No lift and no movement: a list is read down, not played. */
36
+ :is(tr, [role='row']):hover .crewlet-artifact-name__mark {
37
+ box-shadow: inset 0 0 0 1px var(--crewlet-kind-hue);
38
+ }
39
+
40
+ .crewlet-artifact-name--trashed .crewlet-artifact-name__mark {
41
+ background: var(--color-surface-inset);
42
+ box-shadow: inset 0 0 0 1px var(--color-border-default);
43
+ color: var(--color-text-tertiary);
44
+ }
45
+
46
+ .crewlet-artifact-name__words {
47
+ display: flex;
48
+ flex-direction: column;
49
+ gap: 2px;
50
+ min-width: 0;
51
+ }
52
+
53
+ .crewlet-artifact-name__title-row {
54
+ display: flex;
55
+ align-items: center;
56
+ gap: var(--spacing-1);
57
+ min-width: 0;
58
+ }
59
+
60
+ .crewlet-artifact-name__title {
61
+ min-width: 0;
62
+ overflow: hidden;
63
+ text-overflow: ellipsis;
64
+ white-space: nowrap;
65
+ color: var(--color-text-primary);
66
+ font-size: var(--font-size-sm);
67
+ font-weight: var(--font-weight-medium);
68
+ line-height: 1.35;
69
+ }
70
+
71
+ .crewlet-artifact-name__pin {
72
+ display: inline-flex;
73
+ flex: none;
74
+ color: var(--color-text-tertiary);
75
+ }
76
+
77
+ .crewlet-artifact-name__detail {
78
+ display: flex;
79
+ align-items: baseline;
80
+ gap: var(--spacing-1);
81
+ min-width: 0;
82
+ overflow: hidden;
83
+ white-space: nowrap;
84
+ color: var(--color-text-tertiary);
85
+ font-size: var(--font-size-xs);
86
+ line-height: 1.35;
87
+ }
88
+
89
+ .crewlet-artifact-name__kind,
90
+ .crewlet-artifact-name__dot {
91
+ flex: none;
92
+ }
93
+
94
+ .crewlet-artifact-name__about {
95
+ min-width: 0;
96
+ overflow: hidden;
97
+ text-overflow: ellipsis;
98
+ }
99
+
100
+ @media (prefers-reduced-motion: reduce) {
101
+ .crewlet-artifact-name__mark {
102
+ transition: none;
103
+ }
104
+ }
@@ -26,6 +26,13 @@ export interface ArtifactPanelProps {
26
26
  onExpandedChange?: ((expanded: boolean) => void) | undefined;
27
27
  /** Controls in the head, before expand and close. */
28
28
  actions?: ReactNode;
29
+ /**
30
+ * What stays under the body however far it scrolls: the panel's own
31
+ * commit, such as a hand-off's Send. Drawn on a hairline at the panel's
32
+ * foot, never inside the scrolling body, so it is in reach while the
33
+ * reader is at the top of a long form.
34
+ */
35
+ footer?: ReactNode;
29
36
  /**
30
37
  * Whether focus moves to the panel's heading when it opens. True when the
31
38
  * reader opened it; false for a panel a link opened on arrival, which must
@@ -56,7 +63,7 @@ export interface ArtifactPanelProps {
56
63
  * portalled out of it, and the press that closes one of them never reaches
57
64
  * this.
58
65
  */
59
- export declare function ArtifactPanel({ title, icon, onClose, size, expanded, onExpandedChange, actions, focusOnOpen, labels, className, children, }: ArtifactPanelProps): import("react").JSX.Element;
66
+ export declare function ArtifactPanel({ title, icon, onClose, size, expanded, onExpandedChange, actions, footer, focusOnOpen, labels, className, children, }: ArtifactPanelProps): import("react").JSX.Element;
60
67
  export interface ArtifactWorkspaceProps {
61
68
  /** The open panel, if any: an [ArtifactPanel]. */
62
69
  panel?: ReactNode;
@@ -1,4 +1,4 @@
1
- export { ARTIFACT_PANEL_LABELS, ArtifactPanel, ArtifactWorkspace } from '../chunk-HUVG2FFT.js';
1
+ export { ARTIFACT_PANEL_LABELS, ArtifactPanel, ArtifactWorkspace } from '../chunk-Y5BD4MTE.js';
2
2
  import '../chunk-PQADV6P6.js';
3
3
  import '../chunk-4FQT6ZAY.js';
4
4
  import '../chunk-BZFWDIV6.js';
@@ -117,6 +117,15 @@
117
117
  overscroll-behavior: contain;
118
118
  }
119
119
 
120
+ /* THE FOOT holds the panel's own commit, outside the scrolling body, so it
121
+ stays in reach at every scroll. Its inset is the body's. */
122
+ .crewlet-artifact-panel__foot {
123
+ flex: none;
124
+ padding: var(--spacing-3) var(--spacing-4);
125
+ border-top: 1px solid var(--color-border-default);
126
+ background: var(--color-surface-background);
127
+ }
128
+
120
129
  /* NOT ROOM FOR TWO COLUMNS: the panel slides over the artifact's end edge,
121
130
  raised off it, rather than squeezing the artifact under a useful width. */
122
131
  @container crewlet-artifact-workspace (width < 960px) {
@@ -1,6 +1,6 @@
1
- export { AuthLayout } from '../chunk-VDPJGP4Q.js';
1
+ export { AuthLayout } from '../chunk-WX2NIG4G.js';
2
2
  import '../chunk-7KBNFFM3.js';
3
- import '../chunk-ACA27MZH.js';
3
+ import '../chunk-5QXRI35B.js';
4
4
  import '../chunk-AV2DXAEL.js';
5
5
  import '../chunk-BHHIIK3M.js';
6
6
  import '../chunk-PQADV6P6.js';
@@ -1,8 +1,8 @@
1
- export { AvatarPicker } from '../chunk-FJJHD73S.js';
1
+ export { AvatarPicker } from '../chunk-GYBDPCRC.js';
2
2
  import '../chunk-SUXP4OBT.js';
3
3
  import '../chunk-K3IJQNB7.js';
4
- import '../chunk-YEVG2X5R.js';
5
4
  import '../chunk-AYKXMIOR.js';
5
+ import '../chunk-YEVG2X5R.js';
6
6
  import '../chunk-CCAXYHQS.js';
7
7
  import '../chunk-VL6CUNSX.js';
8
8
  import '../chunk-RKKO7QHH.js';
@@ -1,7 +1,7 @@
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, ShortcutTip, anchorView, beyondSlop, clampPan, clampZoom, fitView, gridOf, panBy, pinchView, regionView, revealView, screenRect, toScreen, toWorld, wheelPixels, wheelZoomFactor, zoomAt, zoomLimits } from '../chunk-3P4Y5RX6.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, ShortcutTip, anchorView, beyondSlop, clampPan, clampZoom, fitView, gridOf, panBy, pinchView, regionView, revealView, screenRect, toScreen, toWorld, wheelPixels, wheelZoomFactor, zoomAt, zoomLimits } from '../chunk-4BYHAOHH.js';
2
2
  import '../chunk-LM3ISVJA.js';
3
- import '../chunk-SMBKXWML.js';
4
3
  import '../chunk-6ZJ3N7QI.js';
4
+ import '../chunk-SMBKXWML.js';
5
5
  import '../chunk-OMV5W53A.js';
6
6
  import '../chunk-R25RGPUB.js';
7
7
  import '../chunk-OG6CL3EB.js';
@@ -48,9 +48,10 @@
48
48
  * are counter-scaled by the zoom, so a board's label is readable, its edge is
49
49
  * a hairline and its handle is a full pointer target whatever the zoom, while
50
50
  * the board itself scales with the canvas. What a board says is held to the
51
- * room it is drawn in (`boardRoom`): a name too narrow to read is not drawn,
51
+ * room it is drawn in: a name with too little room is shortened to a few
52
+ * letters, then to the board's number, and only then left out (`boardName`),
52
53
  * and a placeholder drops the lines it has no room for rather than spill them
53
- * over the boards beside it.
54
+ * over the boards beside it (`boardRoom`).
54
55
  */
55
56
  import { type ReactNode, type Ref } from 'react';
56
57
  import { type CanvasHandle, type CanvasLabels, type CanvasPoint } from '../Canvas/index.js';
@@ -215,19 +216,32 @@ export interface CanvasBoardProps {
215
216
  className?: string | undefined;
216
217
  }
217
218
  /**
218
- * WHAT A BOARD HAS ROOM TO SAY, from its size on screen.
219
- *
220
- * `title` is whether its name is drawn above it: a name narrower than a few
221
- * letters reads as a stray mark, so a board drawn narrower than
222
- * [BOARD_TITLE_MIN_WIDTH] goes unnamed until it is zoomed into. `lines` is how
223
- * many of a placeholder's two lines (its size, then why it is not running) fit
224
- * inside it at the chrome's own type, so the lines it has no room for are left
225
- * out rather than clipped at both ends.
219
+ * WHAT A BOARD'S PLACEHOLDER HAS ROOM TO SAY, from its size on screen: how
220
+ * many of its two lines (its size, then why it is not running) fit inside it
221
+ * at the chrome's own type, so the lines it has no room for are left out
222
+ * rather than clipped at both ends.
226
223
  */
227
224
  export declare function boardRoom(width: number, height: number): {
228
- title: boolean;
229
225
  lines: 0 | 1 | 2;
230
226
  };
231
- /** The narrowest a board is drawn, in screen pixels, with its name above it. */
232
- export declare const BOARD_TITLE_MIN_WIDTH = 40;
227
+ /**
228
+ * WHAT A BOARD IS CALLED ABOVE IT, from the room its name row has on screen
229
+ * (`room`, in screen pixels: the board's width, less what the row's other
230
+ * controls take).
231
+ *
232
+ * Its name, while at least [BOARD_NAME_MIN_CHARS] letters and an ellipsis
233
+ * fit, so a shortened name still says which board it is ("Hom..." rather than
234
+ * "H..." or a lone ellipsis); `whole` is false once the name may be shortened,
235
+ * so the full name can be offered as a tooltip. Narrower than that, its place
236
+ * in the design ("3"), which a reader can count to and which stays legible
237
+ * down to a single digit's width. Narrower still, nothing: a mark that narrow
238
+ * reads as a stray scratch. The name row is counter-scaled, so the type is the
239
+ * same size at every zoom and only the room changes.
240
+ */
241
+ export declare function boardName(title: string, position: number, room: number): {
242
+ text: string;
243
+ whole: boolean;
244
+ } | null;
245
+ /** The fewest letters a shortened board name keeps before its ellipsis. */
246
+ export declare const BOARD_NAME_MIN_CHARS = 3;
233
247
  export declare function CanvasBoard({ label, boards, notes, renderBoard, maxLive, minLiveWidth, editable, minSide, maxSide, onBoardChange, onNoteChange, onNoteRemove, onNoteCreate, onBoardCreate, onBoardRemove, onOpen, onActivate, selected: heldSelection, onSelectedChange, controlsExtra, toolbar, labels, canvasLabels, canvasRef, className, }: CanvasBoardProps): import("react").JSX.Element;
@@ -1,5 +1,5 @@
1
1
  import './CanvasBoard.css';
2
- export { BOARD_TITLE_MIN_WIDTH, CanvasBoard, CANVAS_BOARD_MIN_ZOOM, CANVAS_NOTE_COLORS, TITLE_GLYPH_EM, boardRoom, titleSize, } from './CanvasBoard.js';
2
+ export { BOARD_NAME_MIN_CHARS, CanvasBoard, CANVAS_BOARD_MIN_ZOOM, CANVAS_NOTE_COLORS, TITLE_GLYPH_EM, boardName, boardRoom, titleSize, } from './CanvasBoard.js';
3
3
  export type { CanvasBoardItem, CanvasBoardLabels, CanvasBoardNote, CanvasBoardProps, CanvasBoardRect, CanvasBoardSelection, CanvasBoardTool, CanvasNoteColor, } from './CanvasBoard.js';
4
4
  export { CANVAS_BOARD_MAX_LIVE, CANVAS_BOARD_MIN_LIVE_WIDTH, liveBoards } from './budget.js';
5
5
  export type { BoardFrame } from './budget.js';