@crewlethq/ui 0.35.1 → 0.36.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 (164) hide show
  1. package/README.md +73 -0
  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/ArtifactBar/ArtifactBar.d.ts +2 -1
  10. package/dist/ArtifactBar/index.js +2 -2
  11. package/dist/{ArtifactBar-HV5AT4RG.css → ArtifactBar-FWPBBKQ5.css} +8 -0
  12. package/dist/ArtifactCard/index.js +3 -3
  13. package/dist/ArtifactCover/index.js +3 -2
  14. package/dist/ArtifactKindIllustration/ArtifactKindIllustration.d.ts +16 -7
  15. package/dist/ArtifactKindIllustration/index.js +1 -1
  16. package/dist/{ArtifactKindIllustration-5FPRJQ3P.css → ArtifactKindIllustration-5KTP43QS.css} +36 -0
  17. package/dist/ArtifactMakeRow/ArtifactMakeRow.d.ts +39 -0
  18. package/dist/ArtifactMakeRow/index.d.ts +4 -0
  19. package/dist/ArtifactMakeRow/index.js +4 -0
  20. package/dist/ArtifactMakeRow-RWUTS5MC.css +167 -0
  21. package/dist/ArtifactPanel/ArtifactPanel.d.ts +8 -1
  22. package/dist/ArtifactPanel/index.js +1 -1
  23. package/dist/{ArtifactPanel-HW3SU7CP.css → ArtifactPanel-KKUUIPEU.css} +9 -0
  24. package/dist/AuthLayout/index.js +2 -2
  25. package/dist/AvatarPicker/index.js +2 -2
  26. package/dist/Canvas/index.js +2 -2
  27. package/dist/CanvasBoard/CanvasBoard.d.ts +27 -13
  28. package/dist/CanvasBoard/index.d.ts +1 -1
  29. package/dist/CanvasBoard/index.js +4 -4
  30. package/dist/{CanvasBoard-5NNSKY6A.css → CanvasBoard-TS4P356F.css} +13 -6
  31. package/dist/CanvasToolbar/index.js +3 -3
  32. package/dist/Card/index.js +1 -1
  33. package/dist/{Card-KJOYHDTJ.css → Card-QOVASQNU.css} +17 -12
  34. package/dist/Checkbox/index.js +3 -2
  35. package/dist/ChoiceButtons/index.js +1 -1
  36. package/dist/{ChoiceButtons-DJ5EOGUA.css → ChoiceButtons-FLIFXFFS.css} +10 -0
  37. package/dist/ChoiceList/index.js +1 -1
  38. package/dist/{ChoiceList-RBL7FNQL.css → ChoiceList-EA2W6MOS.css} +36 -5
  39. package/dist/Combobox/index.js +3 -2
  40. package/dist/CommandPalette/index.js +3 -2
  41. package/dist/CommentThread/index.js +6 -5
  42. package/dist/Composer/Composer.d.ts +4 -0
  43. package/dist/Composer/index.js +3 -2
  44. package/dist/{Composer-ABGJIAIR.css → Composer-PXITWNEK.css} +26 -15
  45. package/dist/ConfirmField/index.js +3 -2
  46. package/dist/DataTable/index.js +5 -4
  47. package/dist/DataView/index.js +9 -8
  48. package/dist/DatasetSource/DatasetSource.d.ts +4 -0
  49. package/dist/DatasetSource/index.js +1 -1
  50. package/dist/{DatasetSource-XFPZBRXL.css → DatasetSource-SMGX4PS5.css} +38 -4
  51. package/dist/DateTimePicker/index.js +2 -1
  52. package/dist/{DateTimePicker-HG2KQXQ6.css → DateTimePicker-2IVTKFV2.css} +15 -2
  53. package/dist/DocTabsEditor/index.js +4 -3
  54. package/dist/Document/Document.d.ts +15 -3
  55. package/dist/Document/index.js +2 -1
  56. package/dist/{Document-JUGCSQ4L.css → Document-YFWTWXJP.css} +34 -2
  57. package/dist/{Editor-BVQHBF7L.js → Editor-HORWMUM3.js} +2 -1
  58. package/dist/FilterChip/index.js +1 -1
  59. package/dist/{FilterChip-EZ4QMW4E.css → FilterChip-VL33P3JL.css} +5 -1
  60. package/dist/Input/index.js +2 -1
  61. package/dist/{Input-GBZSFXLU.css → Input-ABGOFENS.css} +46 -10
  62. package/dist/LayersList/index.js +1 -1
  63. package/dist/{LayersList-NQZEIPZB.css → LayersList-TBNF4XGL.css} +16 -3
  64. package/dist/LinkInterstitial/index.js +2 -2
  65. package/dist/ListInput/index.js +4 -3
  66. package/dist/LivePreview/LivePreview.d.ts +105 -25
  67. package/dist/LivePreview/budget.d.ts +64 -20
  68. package/dist/LivePreview/index.d.ts +5 -3
  69. package/dist/LivePreview/index.js +1 -1
  70. package/dist/LivePreview/stills.d.ts +57 -0
  71. package/dist/LivePreview-BROGKR4N.css +113 -0
  72. package/dist/PresenterView/index.js +2 -2
  73. package/dist/PrincipalPicker/index.js +4 -3
  74. package/dist/RichEditor/index.js +1 -1
  75. package/dist/Select/index.js +2 -1
  76. package/dist/{Select-A54YS5EP.css → Select-W3CHTZXP.css} +18 -2
  77. package/dist/ShareDialog/index.js +5 -4
  78. package/dist/SheetColumnEditor/index.js +6 -5
  79. package/dist/SheetGrid/index.js +4 -4
  80. package/dist/SlideCompare/index.js +2 -2
  81. package/dist/SlideFilmstrip/index.js +3 -3
  82. package/dist/{SlideFilmstrip-4ITZLMO4.css → SlideFilmstrip-PAT7P4OG.css} +26 -7
  83. package/dist/SlideGrid/index.js +2 -2
  84. package/dist/{SlideGrid-S4LTJ4UU.css → SlideGrid-FJA33DV4.css} +11 -1
  85. package/dist/SlideStage/index.js +1 -1
  86. package/dist/{SlideStage-S2FISF4C.css → SlideStage-ZTTEQSS2.css} +4 -2
  87. package/dist/SourceEditor/index.js +2 -1
  88. package/dist/{SourceEditor-G2C3STPX.css → SourceEditor-QAYE2JS6.css} +19 -12
  89. package/dist/Switcher/index.js +5 -4
  90. package/dist/TagsInput/index.js +3 -2
  91. package/dist/{TagsInput-XMXTI5Q4.css → TagsInput-7EGBBXHS.css} +7 -1
  92. package/dist/ThemeGallery/index.js +1 -1
  93. package/dist/{ThemeGallery-HSUKBDWY.css → ThemeGallery-X35Y25EX.css} +26 -5
  94. package/dist/TimeWindowPicker/index.js +4 -3
  95. package/dist/{TimeWindowPicker-T763GLXH.css → TimeWindowPicker-DEFDV77Z.css} +15 -2
  96. package/dist/TreeCanvas/index.js +3 -3
  97. package/dist/VersionTimeline/index.js +2 -2
  98. package/dist/{chunk-V43UVX4H.js → chunk-27GD7LVR.js} +1 -1
  99. package/dist/{chunk-CCLNGVCM.js → chunk-2DV4THNQ.js} +2 -2
  100. package/dist/{chunk-2CQLNML5.js → chunk-3PTUDKSR.js} +4 -2
  101. package/dist/{chunk-ONL54WMH.js → chunk-46RL3E54.js} +1 -1
  102. package/dist/{chunk-UHJQDFKQ.js → chunk-4ZJLOKSS.js} +1 -1
  103. package/dist/{chunk-ACA27MZH.js → chunk-5QXRI35B.js} +1 -1
  104. package/dist/{chunk-LL5AFXU7.js → chunk-5RT5O4JR.js} +1 -1
  105. package/dist/chunk-66ADEPFB.js +51 -0
  106. package/dist/{chunk-3Y56GQPM.js → chunk-7VAUGG6B.js} +1 -1
  107. package/dist/{chunk-NKZCJRKO.js → chunk-APDKUGSH.js} +2 -2
  108. package/dist/{chunk-YSJC7AZC.js → chunk-BWOIUOO3.js} +1 -1
  109. package/dist/{chunk-PI7HKLIT.js → chunk-D7GNNID2.js} +3 -1
  110. package/dist/{chunk-THROPJZC.js → chunk-DEMALFHY.js} +1 -1
  111. package/dist/chunk-EOQFPZEE.js +138 -0
  112. package/dist/{chunk-QFNWMWWY.js → chunk-ES4RKQ7B.js} +4 -4
  113. package/dist/{chunk-J6YZ4IYV.js → chunk-FG4O64DV.js} +3 -3
  114. package/dist/{chunk-E35CMI5D.js → chunk-FHHYXZSP.js} +31 -13
  115. package/dist/{chunk-AYB6AYNH.js → chunk-GMLAKNFY.js} +1 -1
  116. package/dist/{chunk-ZB5O3ELS.js → chunk-GRYZ5EP3.js} +4 -2
  117. package/dist/{chunk-ILAEBSLJ.js → chunk-H5NOLRGH.js} +2 -2
  118. package/dist/{chunk-W3UVOZKL.js → chunk-IPAU6FLH.js} +6 -2
  119. package/dist/{chunk-Z6VW6CXX.js → chunk-IQH3DDZ2.js} +2 -2
  120. package/dist/{chunk-6QFAK2WV.js → chunk-IUYUS2SO.js} +4 -1
  121. package/dist/{chunk-AXBRWRGV.js → chunk-JQLS3MZB.js} +1 -1
  122. package/dist/{chunk-FGYET26P.js → chunk-KJW2AS57.js} +1 -1
  123. package/dist/{chunk-QIXMNOBD.js → chunk-KYZMN6I6.js} +2 -2
  124. package/dist/{chunk-73A7D5CE.js → chunk-L4WZSVMT.js} +3 -1
  125. package/dist/{chunk-W7QBBKUE.js → chunk-MJW6SQYB.js} +7 -3
  126. package/dist/{chunk-GMU6SQ6B.js → chunk-MRMHZ437.js} +3 -3
  127. package/dist/{chunk-ULPL26BU.js → chunk-N5SKHIAP.js} +1 -1
  128. package/dist/{chunk-LV4APO72.js → chunk-NQGPD6NX.js} +1 -1
  129. package/dist/{chunk-7UYONN6K.js → chunk-OSZDHN5Z.js} +2 -2
  130. package/dist/chunk-P6WFZDKS.js +111 -0
  131. package/dist/{chunk-CPEPST4S.js → chunk-PJIPUEJ3.js} +1 -1
  132. package/dist/{chunk-QS4ZGTEU.js → chunk-PPFX6GRK.js} +1 -1
  133. package/dist/{chunk-7DZDSSJS.js → chunk-RH2NCQBZ.js} +5 -4
  134. package/dist/{chunk-3VD3G3IL.js → chunk-T5RQGI6O.js} +1 -1
  135. package/dist/{chunk-F2KY4RLI.js → chunk-TVRBQMIX.js} +5 -3
  136. package/dist/{chunk-QEFHYUCY.js → chunk-UWGUKMBK.js} +1 -1
  137. package/dist/{chunk-5YLON2PW.js → chunk-UYZZV4DZ.js} +1 -1
  138. package/dist/{chunk-BQ7AKL2N.js → chunk-VKKUGZ3G.js} +3 -1
  139. package/dist/{chunk-DEJHAOC5.js → chunk-WMXAX6VA.js} +1 -1
  140. package/dist/{chunk-6JVRY5DQ.js → chunk-WNAYQQ6Y.js} +2 -2
  141. package/dist/{chunk-VDPJGP4Q.js → chunk-WX2NIG4G.js} +1 -1
  142. package/dist/{chunk-ZU3DUXD2.js → chunk-WZGYIVYH.js} +1 -1
  143. package/dist/chunk-XGBLRDSU.js +446 -0
  144. package/dist/{chunk-22CQQDFW.js → chunk-XMRTFPWX.js} +2 -2
  145. package/dist/{chunk-HUVG2FFT.js → chunk-Y5BD4MTE.js} +4 -2
  146. package/dist/chunk-YSGLEHND.js +56 -0
  147. package/dist/generated/index.d.ts +2 -0
  148. package/dist/generated/index.js +95 -92
  149. package/dist/index.js +95 -92
  150. package/dist/styles.css +862 -130
  151. package/dist/utils/focusModality.d.ts +41 -0
  152. package/dist/utils/index.d.ts +2 -0
  153. package/dist/utils/index.js +2 -1
  154. package/package.json +3 -3
  155. package/dist/LivePreview-SRO7KHO4.css +0 -65
  156. package/dist/chunk-KF6YGL4B.js +0 -160
  157. package/dist/chunk-TYKQ33CL.js +0 -35
  158. package/dist/{chunk-3P4Y5RX6.js → chunk-4BYHAOHH.js} +1 -1
  159. package/dist/{chunk-3WCNHYXE.js → chunk-5BP6IS3N.js} +0 -0
  160. package/dist/{chunk-KD2IRYCT.js → chunk-5WDXPHEW.js} +1 -1
  161. package/dist/{chunk-OSFA5ROT.js → chunk-FEJANUZK.js} +0 -0
  162. package/dist/{chunk-FJJHD73S.js → chunk-GYBDPCRC.js} +1 -1
  163. package/dist/{chunk-VHZ3AXJD.js → chunk-NQCY44B3.js} +1 -1
  164. package/dist/{chunk-FF5OZV77.js → chunk-W3HYWD63.js} +2 -2
@@ -1,5 +1,5 @@
1
- export { SLIDE_COMPARE_LABELS, SlideCompare } from '../chunk-LL5AFXU7.js';
2
- import '../chunk-LV4APO72.js';
1
+ export { SLIDE_COMPARE_LABELS, SlideCompare } from '../chunk-5RT5O4JR.js';
2
+ import '../chunk-NQGPD6NX.js';
3
3
  import '../chunk-OMV5W53A.js';
4
4
  import '../chunk-R25RGPUB.js';
5
5
  import '../chunk-OG6CL3EB.js';
@@ -1,12 +1,12 @@
1
- export { SlideFilmstrip } from '../chunk-QIXMNOBD.js';
2
- import '../chunk-LV4APO72.js';
1
+ export { SlideFilmstrip } from '../chunk-KYZMN6I6.js';
2
+ import '../chunk-NQGPD6NX.js';
3
3
  import '../chunk-XJ2QEBMM.js';
4
4
  import '../chunk-SMBKXWML.js';
5
+ import '../chunk-RSAQOKH3.js';
5
6
  import '../chunk-BUVCV3WI.js';
6
7
  import '../chunk-OMV5W53A.js';
7
8
  import '../chunk-R25RGPUB.js';
8
9
  import '../chunk-OG6CL3EB.js';
9
- import '../chunk-RSAQOKH3.js';
10
10
  import '../chunk-4FQT6ZAY.js';
11
11
  import '../chunk-BZFWDIV6.js';
12
12
  import '../chunk-ODEQTPFM.js';
@@ -2,8 +2,13 @@
2
2
  * SlideFilmstrip: the column of slide thumbnails beside a deck's stage, or
3
3
  * the row under it on a phone.
4
4
  *
5
- * The selected slide is ringed in the brand accent rather than filled, so its
6
- * thumbnail still shows the slide's own colours.
5
+ * The selected slide is ringed rather than filled, so its thumbnail still
6
+ * shows the slide's own colours: the selected edge (a tint of the accent) on
7
+ * the thumbnail's own line, the selected fill as a soft band outside it, and
8
+ * its number in the accent ink. It was a 2px ring in the full accent, the
9
+ * same weight and colour as the focus ring beside it, so the slide being
10
+ * edited and the slide the keyboard was on could not be told apart. The
11
+ * number is the mark that clears 3:1, so the state never rests on the tint.
7
12
  *
8
13
  * THE STRIP IS ITS OWN SCROLLER: a host bounds it (a column's max-height, a
9
14
  * row's width) and the strip scrolls inside that, keeping the selected slide
@@ -48,24 +53,38 @@
48
53
  border: 0;
49
54
  background: transparent;
50
55
  border-radius: var(--radius-sm);
51
- outline: 1px solid var(--color-border-default);
56
+ /* THE STRONG LINE AT REST: a deck's slides are mostly dark, and on the dark
57
+ page the plain hairline sat within a few steps of both the page and the
58
+ slide, so a strip of them had no edges at all. Under the pointer it takes
59
+ the strong line's own hover step, so pointing still moves the edge. */
60
+ outline: 1px solid var(--color-border-strong);
52
61
  cursor: pointer;
53
62
  overflow: hidden;
54
63
  }
55
64
 
56
65
  .crewlet-slide-filmstrip__thumb:hover {
57
- outline-color: var(--color-border-hover);
66
+ outline-color: var(--color-border-strong-hover);
58
67
  }
59
68
 
60
69
  .crewlet-slide-filmstrip__item[data-selected='true'] .crewlet-slide-filmstrip__thumb {
61
- outline: 2px solid var(--color-brand-accent);
70
+ outline-color: var(--color-border-selected);
71
+ box-shadow: 0 0 0 3px var(--color-surface-selected);
72
+ }
73
+
74
+ .crewlet-slide-filmstrip__item[data-selected='true'] .crewlet-slide-filmstrip__number {
75
+ color: var(--color-brand-accent-ink);
76
+ font-weight: var(--font-weight-semibold);
62
77
  }
63
78
 
64
79
  /* ONE RING, OVER THE THUMBNAIL'S OWN EDGE: the focus outline takes the place
65
- of the edge rather than standing off it as a second one. */
80
+ of the edge rather than standing off it as a second one, and grows OUTWARD
81
+ from it onto the strip's ground. It used to sit on the inset offset, inside
82
+ the thumbnail, where a dark slide (most of a deck's themes) swallowed it:
83
+ the focus colour measured close to the slide's own ground, and tabbing
84
+ through the strip showed nothing at all. The list's own padding holds it. */
66
85
  .crewlet-slide-filmstrip__thumb:focus-visible {
67
86
  outline: 2px solid var(--color-focus);
68
- outline-offset: var(--size-focus-ring-inset-offset);
87
+ outline-offset: 0;
69
88
  }
70
89
 
71
90
  .crewlet-slide-filmstrip__item[data-hidden='true'] .crewlet-slide-stage {
@@ -1,5 +1,5 @@
1
- export { SlideGrid } from '../chunk-ILAEBSLJ.js';
2
- import '../chunk-LV4APO72.js';
1
+ export { SlideGrid } from '../chunk-H5NOLRGH.js';
2
+ import '../chunk-NQGPD6NX.js';
3
3
  import '../chunk-OMV5W53A.js';
4
4
  import '../chunk-R25RGPUB.js';
5
5
  import '../chunk-ODEQTPFM.js';
@@ -42,8 +42,18 @@
42
42
  outline-color: var(--color-border-hover);
43
43
  }
44
44
 
45
+ /* THE CURRENT SLIDE, drawn as the filmstrip draws it: the selected edge on
46
+ the slide's own line, the selected fill as a soft band outside it, and its
47
+ number in the accent ink, the mark that clears 3:1. Never the full accent
48
+ at 2px, which is the focus ring's weight and colour. */
45
49
  .crewlet-slide-grid__card[aria-current='true'] .crewlet-slide-stage {
46
- outline: 2px solid var(--color-brand-accent);
50
+ outline-color: var(--color-border-selected);
51
+ box-shadow: 0 0 0 3px var(--color-surface-selected);
52
+ }
53
+
54
+ .crewlet-slide-grid__card[aria-current='true'] .crewlet-slide-grid__number {
55
+ color: var(--color-brand-accent-ink);
56
+ font-weight: var(--font-weight-semibold);
47
57
  }
48
58
 
49
59
  /* ONE RING, round the whole card (its slide and its caption), on the inset
@@ -1,4 +1,4 @@
1
- export { SLIDE_HEIGHT, SLIDE_WIDTH, SlideStage, useSlideKeys } from '../chunk-LV4APO72.js';
1
+ export { SLIDE_HEIGHT, SLIDE_WIDTH, SlideStage, useSlideKeys } from '../chunk-NQGPD6NX.js';
2
2
  import '../chunk-OMV5W53A.js';
3
3
  import '../chunk-R25RGPUB.js';
4
4
  import '../chunk-ODEQTPFM.js';
@@ -19,10 +19,12 @@
19
19
  /* THE SLIDE'S OWN EDGE: the box is the slide (or, for a show in the page,
20
20
  the room it was measured into), so its outline is the slide's edge, drawn over the slide's corners rather than outside them. A host that
21
21
  marks a stage (selected, current) recolours this outline rather than adding
22
- a second line. */
22
+ a second line. It takes the STRONG border, not the default one: most decks
23
+ are dark, and in the dark theme the default border is a step off the page,
24
+ so a dark slide on a dark page had no edge at all. */
23
25
  .crewlet-slide-stage--framed {
24
26
  border-radius: var(--radius-sm);
25
- outline: 1px solid var(--color-border-default);
27
+ outline: 1px solid var(--color-border-strong);
26
28
  }
27
29
 
28
30
  :fullscreen .crewlet-slide-stage--framed,
@@ -1,3 +1,4 @@
1
- export { SOURCE_EDITOR_KEYS, SourceEditor, lineStart } from '../chunk-PI7HKLIT.js';
1
+ export { SOURCE_EDITOR_KEYS, SourceEditor, lineStart } from '../chunk-D7GNNID2.js';
2
+ import '../chunk-YSGLEHND.js';
2
3
  import '../chunk-BZFWDIV6.js';
3
4
  import '../chunk-ODEQTPFM.js';
@@ -5,7 +5,11 @@
5
5
  * so a number and a mark always sit on the line they name; the layers follow
6
6
  * the field's scroll by a transform.
7
7
  *
8
- * The BOX takes the focus ring, as the Composer's does.
8
+ * The BOX takes the focus ring every field draws (see Input.css): 2px in the
9
+ * focus colour for the keyboard, one pixel of the selected edge where a
10
+ * pointer put the caret. It used to recolour its border to the accent and lay
11
+ * a 2px soft halo outside it, two highlights for one state, as the Composer's
12
+ * did.
9
13
  */
10
14
  .crewlet-source-editor {
11
15
  --crewlet-source-inset: var(--spacing-2);
@@ -21,18 +25,21 @@
21
25
  font-family: var(--font-family-mono);
22
26
  font-size: var(--font-size-xs);
23
27
  line-height: var(--font-line-height-normal);
24
- transition:
25
- border-color var(--motion-duration-fast) var(--motion-easing-default),
26
- box-shadow var(--motion-duration-fast) var(--motion-easing-default);
28
+ transition: border-color var(--motion-duration-fast) var(--motion-easing-default);
27
29
  }
28
30
 
29
31
  .crewlet-source-editor:hover {
30
32
  border-color: var(--color-border-strong-hover);
31
33
  }
32
34
 
33
- .crewlet-source-editor:focus-within {
34
- border-color: var(--color-brand-accent);
35
- box-shadow: 0 0 0 2px var(--color-brand-accent-soft);
35
+ .crewlet-source-editor:has(.crewlet-source-editor__field:focus-visible) {
36
+ outline: 2px solid var(--color-focus);
37
+ outline-offset: -1px;
38
+ }
39
+
40
+ :root[data-crewlet-focus='pointer'] .crewlet-source-editor:has(.crewlet-source-editor__field:focus-visible) {
41
+ outline-width: 1px;
42
+ outline-color: var(--color-border-selected);
36
43
  }
37
44
 
38
45
  .crewlet-source-editor.is-fill {
@@ -135,11 +142,11 @@
135
142
  color: var(--color-text-tertiary);
136
143
  }
137
144
 
138
- /* The ring is the box's, above. A transparent outline stays, because forced
139
- colors drops the box's shadow and paints an outline in its place. */
140
- .crewlet-source-editor .crewlet-source-editor__field:focus-visible {
141
- outline: 2px solid transparent;
142
- outline-offset: -2px;
145
+ /* The ring is the box's, above, an outline that forced colours repaint, so
146
+ the field inside draws none of its own. Stated at rest, as the Composer's
147
+ field is. */
148
+ .crewlet-source-editor .crewlet-source-editor__field {
149
+ outline: none;
143
150
  }
144
151
 
145
152
  .crewlet-source-editor .crewlet-source-editor__field[readonly] {
@@ -1,16 +1,17 @@
1
- export { Switcher } from '../chunk-GMU6SQ6B.js';
1
+ export { Switcher } from '../chunk-MRMHZ437.js';
2
2
  import '../chunk-XEGZHHRH.js';
3
3
  import '../chunk-F73MC7EZ.js';
4
- import '../chunk-K3IJQNB7.js';
5
4
  import '../chunk-FYTIJM2T.js';
6
- import '../chunk-6QFAK2WV.js';
5
+ import '../chunk-K3IJQNB7.js';
7
6
  import '../chunk-TEUQWOWZ.js';
7
+ import '../chunk-IUYUS2SO.js';
8
+ import '../chunk-YSGLEHND.js';
8
9
  import '../chunk-PQADV6P6.js';
10
+ import '../chunk-RSAQOKH3.js';
9
11
  import '../chunk-RTPQDNW3.js';
10
12
  import '../chunk-OMV5W53A.js';
11
13
  import '../chunk-R25RGPUB.js';
12
14
  import '../chunk-OG6CL3EB.js';
13
- import '../chunk-RSAQOKH3.js';
14
15
  import '../chunk-4FQT6ZAY.js';
15
16
  import '../chunk-BZFWDIV6.js';
16
17
  import '../chunk-ODEQTPFM.js';
@@ -1,10 +1,11 @@
1
- export { TagsInput } from '../chunk-2CQLNML5.js';
1
+ export { TagsInput } from '../chunk-3PTUDKSR.js';
2
2
  import '../chunk-GFV4LJHH.js';
3
3
  import '../chunk-WIATRXEJ.js';
4
4
  import '../chunk-F73MC7EZ.js';
5
+ import '../chunk-YSGLEHND.js';
6
+ import '../chunk-RSAQOKH3.js';
5
7
  import '../chunk-OMV5W53A.js';
6
8
  import '../chunk-R25RGPUB.js';
7
- import '../chunk-RSAQOKH3.js';
8
9
  import '../chunk-4FQT6ZAY.js';
9
10
  import '../chunk-BZFWDIV6.js';
10
11
  import '../chunk-ODEQTPFM.js';
@@ -72,10 +72,16 @@
72
72
  * the whole reason they sit above the field instead of inside it.
73
73
  */
74
74
  .crewlet-tags-input__box:focus-visible {
75
- outline: 1px solid var(--color-focus);
75
+ outline: 2px solid var(--color-focus);
76
76
  outline-offset: -1px;
77
77
  }
78
78
 
79
+ /* Narrowed and tinted for a pointer, as the text box's ring is. See Input.css. */
80
+ :root[data-crewlet-focus='pointer'] .crewlet-tags-input__box:focus-visible {
81
+ outline-width: 1px;
82
+ outline-color: var(--color-border-selected);
83
+ }
84
+
79
85
  .crewlet-tags-input.is-disabled {
80
86
  opacity: 0.6;
81
87
  }
@@ -1,4 +1,4 @@
1
- export { ThemeGallery } from '../chunk-W3UVOZKL.js';
1
+ export { ThemeGallery } from '../chunk-IPAU6FLH.js';
2
2
  import '../chunk-MNFU2RNT.js';
3
3
  import '../chunk-F73MC7EZ.js';
4
4
  import '../chunk-RKKO7QHH.js';
@@ -33,8 +33,15 @@
33
33
 
34
34
  /*
35
35
  * A CARD IS ITS BORDER. Resting, the plain hairline; under the pointer, the
36
- * strong one; chosen, the accent. One line round the card in every state, so
37
- * the chosen card is never a card inside a frame.
36
+ * strong one; chosen, the selected edge (the accent mixed toward the card)
37
+ * over the selected fill, with a check beside the name. One line round the
38
+ * card in every state, so the chosen card is never a card inside a frame.
39
+ *
40
+ * THE CHOSEN CARD IS CALM ON PURPOSE. It was the full accent, which on a grid
41
+ * of six read as the loudest edge on the page and as a second focus ring. The
42
+ * tint and the fill say which card is on at a glance; the check says it at
43
+ * the 3:1 a state mark clears, so the state never rests on the tint alone;
44
+ * and the focus ring stays the one 2px accent line, for the keyboard only.
38
45
  */
39
46
  .crewlet-theme-gallery__card {
40
47
  display: flex;
@@ -51,14 +58,15 @@
51
58
  cursor: pointer;
52
59
  }
53
60
 
54
- /* Not on the chosen card: under the pointer it keeps the accent, or the one
55
- card that says "this one" would stop saying it while it is being pointed at. */
61
+ /* Not on the chosen card: under the pointer it keeps its selected edge, or the
62
+ one card that says "this one" would stop saying it while it is pointed at. */
56
63
  .crewlet-theme-gallery__card:hover:not(:disabled):not(.is-chosen) {
57
64
  border-color: var(--color-border-strong);
58
65
  }
59
66
 
60
67
  .crewlet-theme-gallery__card.is-chosen {
61
- border-color: var(--color-brand-accent);
68
+ border-color: var(--color-border-selected);
69
+ background: var(--color-surface-selected);
62
70
  }
63
71
 
64
72
  /* The ring is drawn OVER the border, inset by its width, never a second line outside it. */
@@ -72,6 +80,19 @@
72
80
  opacity: 0.5;
73
81
  }
74
82
 
83
+ .crewlet-theme-gallery__label {
84
+ display: flex;
85
+ align-items: center;
86
+ gap: var(--spacing-1);
87
+ min-width: 0;
88
+ }
89
+
90
+ .crewlet-theme-gallery__check {
91
+ flex: none;
92
+ margin-inline-start: auto;
93
+ color: var(--color-brand-accent-ink);
94
+ }
95
+
75
96
  .crewlet-theme-gallery__name {
76
97
  overflow: hidden;
77
98
  font-size: var(--font-size-xs);
@@ -1,9 +1,10 @@
1
- export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-F2KY4RLI.js';
2
- import '../chunk-BQ7AKL2N.js';
1
+ export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-TVRBQMIX.js';
2
+ import '../chunk-VKKUGZ3G.js';
3
3
  import '../chunk-F73MC7EZ.js';
4
4
  import '../chunk-GXQ3B46I.js';
5
5
  import '../chunk-K3IJQNB7.js';
6
- import '../chunk-6QFAK2WV.js';
6
+ import '../chunk-IUYUS2SO.js';
7
+ import '../chunk-YSGLEHND.js';
7
8
  import '../chunk-PQADV6P6.js';
8
9
  import '../chunk-OMV5W53A.js';
9
10
  import '../chunk-R25RGPUB.js';
@@ -47,10 +47,17 @@
47
47
  */
48
48
  .crewlet-time-window:focus-visible,
49
49
  .crewlet-time-window.is-open {
50
- outline: 1px solid var(--color-focus);
50
+ outline: 2px solid var(--color-focus);
51
51
  outline-offset: -1px;
52
52
  }
53
53
 
54
+ /* Narrowed and tinted for a pointer, as the text box's ring is. See Input.css. */
55
+ :root[data-crewlet-focus='pointer'] .crewlet-time-window:focus-visible,
56
+ :root[data-crewlet-focus='pointer'] .crewlet-time-window.is-open {
57
+ outline-width: 1px;
58
+ outline-color: var(--color-border-selected);
59
+ }
60
+
54
61
  .crewlet-time-window.is-disabled,
55
62
  .crewlet-time-window:disabled {
56
63
  opacity: 0.55;
@@ -318,10 +325,16 @@ svg.crewlet-time-window__tick {
318
325
  * own boundary (see Input.css), keyed on the box's own input.
319
326
  */
320
327
  .crewlet-time-window__masked:has(.crewlet-time-window__masked-input:focus-visible) {
321
- outline: 1px solid var(--color-focus);
328
+ outline: 2px solid var(--color-focus);
322
329
  outline-offset: -1px;
323
330
  }
324
331
 
332
+ /* Narrowed and tinted for a pointer, as the text box's ring is. See Input.css. */
333
+ :root[data-crewlet-focus='pointer'] .crewlet-time-window__masked:has(.crewlet-time-window__masked-input:focus-visible) {
334
+ outline-width: 1px;
335
+ outline-color: var(--color-border-selected);
336
+ }
337
+
325
338
  .crewlet-time-window__masked-input {
326
339
  min-width: 0;
327
340
  /* The `size` attribute the component sets is what holds the width open in
@@ -1,9 +1,9 @@
1
- export { TreeCanvas } from '../chunk-UHJQDFKQ.js';
1
+ export { TreeCanvas } from '../chunk-4ZJLOKSS.js';
2
2
  import '../chunk-MY374UUD.js';
3
- import '../chunk-3P4Y5RX6.js';
3
+ import '../chunk-4BYHAOHH.js';
4
4
  import '../chunk-LM3ISVJA.js';
5
- import '../chunk-SMBKXWML.js';
6
5
  import '../chunk-6ZJ3N7QI.js';
6
+ import '../chunk-SMBKXWML.js';
7
7
  import '../chunk-OMV5W53A.js';
8
8
  import '../chunk-R25RGPUB.js';
9
9
  import '../chunk-OG6CL3EB.js';
@@ -1,10 +1,10 @@
1
- export { VersionTimeline } from '../chunk-VHZ3AXJD.js';
2
- import '../chunk-AUQPBL4O.js';
1
+ export { VersionTimeline } from '../chunk-NQCY44B3.js';
3
2
  import '../chunk-CI3VPIJN.js';
4
3
  import '../chunk-3CZ7XAVY.js';
5
4
  import '../chunk-EUCC37WY.js';
6
5
  import '../chunk-5AQBPHZD.js';
7
6
  import '../chunk-PZKHBB7D.js';
7
+ import '../chunk-AUQPBL4O.js';
8
8
  import '../chunk-OG6CL3EB.js';
9
9
  import '../chunk-BZFWDIV6.js';
10
10
  import '../chunk-ODEQTPFM.js';
@@ -1,6 +1,6 @@
1
1
  import { Switch } from './chunk-A722MUNR.js';
2
2
  import { useReorder } from './chunk-XJ2QEBMM.js';
3
- import { Checkbox } from './chunk-CPEPST4S.js';
3
+ import { Checkbox } from './chunk-PJIPUEJ3.js';
4
4
  import { IconButton } from './chunk-4FQT6ZAY.js';
5
5
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
6
6
  import { cx } from './chunk-ODEQTPFM.js';
@@ -1,6 +1,6 @@
1
- import { Select } from './chunk-BQ7AKL2N.js';
2
- import { CopyButton } from './chunk-W46LPU4R.js';
1
+ import { Select } from './chunk-VKKUGZ3G.js';
3
2
  import { Modal } from './chunk-XEGZHHRH.js';
3
+ import { CopyButton } from './chunk-W46LPU4R.js';
4
4
  import { Callout } from './chunk-SZZRIHGT.js';
5
5
  import { PrincipalAvatar } from './chunk-CI3VPIJN.js';
6
6
  import { useHeadingLevel, headingTag } from './chunk-PQADV6P6.js';
@@ -1,10 +1,11 @@
1
1
  import { Tag } from './chunk-GFV4LJHH.js';
2
2
  import { useListbox } from './chunk-F73MC7EZ.js';
3
- import { isComposing } from './chunk-R25RGPUB.js';
3
+ import { useFocusModality } from './chunk-YSGLEHND.js';
4
4
  import { announce } from './chunk-RSAQOKH3.js';
5
+ import { isComposing } from './chunk-R25RGPUB.js';
5
6
  import { IconButton } from './chunk-4FQT6ZAY.js';
6
7
  import { cx } from './chunk-ODEQTPFM.js';
7
- import './TagsInput-XMXTI5Q4.css';
8
+ import './TagsInput-7EGBBXHS.css';
8
9
  import { forwardRef, useState, useRef, useId, useImperativeHandle, useEffect, useMemo, useLayoutEffect } from 'react';
9
10
  import { CheckGlyph, ChevronLeftGlyph, ChevronRightGlyph } from '@crewlethq/icons/glyphs';
10
11
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
@@ -40,6 +41,7 @@ var TagsInput = forwardRef(function TagsInput2({
40
41
  "aria-describedby": describedBy,
41
42
  "aria-invalid": invalid
42
43
  }, ref) {
44
+ useFocusModality();
43
45
  const [draft, setDraft] = useState("");
44
46
  const [open, setOpen] = useState(false);
45
47
  const field = useRef(null);
@@ -1,6 +1,6 @@
1
1
  import { useRoving } from './chunk-RKKO7QHH.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
- import './LayersList-NQZEIPZB.css';
3
+ import './LayersList-TBNF4XGL.css';
4
4
  import { jsxs, jsx } from 'react/jsx-runtime';
5
5
 
6
6
  var LAYERS_LIST_LABELS = {
@@ -1,5 +1,5 @@
1
1
  import { useTreeState, useMeasuredSizes, layoutForest, treeAncestors, useLayoutAnchor, treeExpandable, layoutConnectors, treeItemAction, treeStep, treePosInSet, treeSetSize, treeLevel, placeGroups } from './chunk-MY374UUD.js';
2
- import { CANVAS_COMPOSE_CONTEXT, CANVAS_FIT_MAX_ZOOM, Canvas } from './chunk-3P4Y5RX6.js';
2
+ import { CANVAS_COMPOSE_CONTEXT, CANVAS_FIT_MAX_ZOOM, Canvas } from './chunk-4BYHAOHH.js';
3
3
  import { focusables } from './chunk-R25RGPUB.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
5
  import './TreeCanvas-L2XYONWL.css';
@@ -2,7 +2,7 @@ import { CardHeaderSlotContext } from './chunk-AV2DXAEL.js';
2
2
  import { Count } from './chunk-BHHIIK3M.js';
3
3
  import { useHeadingLevel, HeadingLevelProvider, nextHeadingLevel, headingTag } from './chunk-PQADV6P6.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
- import './Card-KJOYHDTJ.css';
5
+ import './Card-QOVASQNU.css';
6
6
  import { createContext, useId, useState, isValidElement, useRef, useCallback, useMemo, Children, cloneElement, useContext, useEffect, Fragment } from 'react';
7
7
  import { jsx, jsxs } from 'react/jsx-runtime';
8
8
 
@@ -1,4 +1,4 @@
1
- import { SlideStage } from './chunk-LV4APO72.js';
1
+ import { SlideStage } from './chunk-NQGPD6NX.js';
2
2
  import { Button } from './chunk-OG6CL3EB.js';
3
3
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
@@ -0,0 +1,51 @@
1
+ import { ArtifactKindGlyph } from './chunk-CE2THTQR.js';
2
+ import { VisuallyHidden } from './chunk-BZFWDIV6.js';
3
+ import { cx } from './chunk-ODEQTPFM.js';
4
+ import './ArtifactKinds-CVD3FCYO.css';
5
+ import './ArtifactMakeRow-RWUTS5MC.css';
6
+ import { useId } from 'react';
7
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
8
+
9
+ function ArtifactMakeRow({
10
+ items,
11
+ "aria-label": ariaLabel,
12
+ "aria-labelledby": ariaLabelledBy,
13
+ className
14
+ }) {
15
+ return /* @__PURE__ */ jsx("div", { className: cx("crewlet-make-row", className), children: /* @__PURE__ */ jsx("ul", { className: "crewlet-make-row__list", "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, children: items.map((item) => /* @__PURE__ */ jsx("li", { className: "crewlet-make-row__cell", children: /* @__PURE__ */ jsx(MakeItem, { item }) }, item.kind)) }) });
16
+ }
17
+ function MakeItem({ item }) {
18
+ const { kind, label, detail, href, disabledReason } = item;
19
+ const detailId = useId();
20
+ const reasonId = useId();
21
+ const off = disabledReason !== void 0 || href === void 0;
22
+ const body = /* @__PURE__ */ jsxs(Fragment, { children: [
23
+ /* @__PURE__ */ jsx("span", { className: cx("crewlet-make-row__mark", `crewlet-kind--${kind}`), "aria-hidden": "true", children: /* @__PURE__ */ jsx(ArtifactKindGlyph, { kind, size: "sm" }) }),
24
+ /* @__PURE__ */ jsxs("span", { className: "crewlet-make-row__words", children: [
25
+ /* @__PURE__ */ jsx("span", { className: "crewlet-make-row__name", children: label }),
26
+ detail ? /* @__PURE__ */ jsx("span", { id: detailId, className: "crewlet-make-row__detail", children: detail }) : null
27
+ ] })
28
+ ] });
29
+ const describedBy = detail ? detailId : void 0;
30
+ if (off) {
31
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
32
+ /* @__PURE__ */ jsx(
33
+ "span",
34
+ {
35
+ role: "link",
36
+ tabIndex: 0,
37
+ "aria-label": label,
38
+ "aria-disabled": "true",
39
+ "aria-describedby": disabledReason ? reasonId : describedBy,
40
+ title: disabledReason,
41
+ className: "crewlet-make-row__item crewlet-make-row__item--disabled",
42
+ children: body
43
+ }
44
+ ),
45
+ disabledReason ? /* @__PURE__ */ jsx(VisuallyHidden, { id: reasonId, children: disabledReason }) : null
46
+ ] });
47
+ }
48
+ return /* @__PURE__ */ jsx("a", { href, "aria-label": label, "aria-describedby": describedBy, className: "crewlet-make-row__item", children: body });
49
+ }
50
+
51
+ export { ArtifactMakeRow };
@@ -1,5 +1,5 @@
1
1
  import { Toolbar } from './chunk-PGRPNDWM.js';
2
- import { ShortcutTip } from './chunk-3P4Y5RX6.js';
2
+ import { ShortcutTip } from './chunk-4BYHAOHH.js';
3
3
  import { IconButton } from './chunk-4FQT6ZAY.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
5
  import './CanvasToolbar-EM5EVZED.css';
@@ -1,13 +1,13 @@
1
- import { isApplePlatform, Kbd } from './chunk-SMBKXWML.js';
2
1
  import { Tooltip } from './chunk-6ZJ3N7QI.js';
3
2
  import { SegmentedControl } from './chunk-CCAXYHQS.js';
4
3
  import { ArtifactIcon } from './chunk-ILDNJHRU.js';
4
+ import { isApplePlatform, Kbd } from './chunk-SMBKXWML.js';
5
5
  import { Menu } from './chunk-BUVCV3WI.js';
6
6
  import { Button } from './chunk-OG6CL3EB.js';
7
7
  import { IconButton } from './chunk-4FQT6ZAY.js';
8
8
  import { cx } from './chunk-ODEQTPFM.js';
9
9
  import './ArtifactKinds-CVD3FCYO.css';
10
- import './ArtifactBar-HV5AT4RG.css';
10
+ import './ArtifactBar-FWPBBKQ5.css';
11
11
  import { useId, useState, useRef, useEffect } from 'react';
12
12
  import { ChevronLeftGlyph, EllipsisGlyph, ChevronDownGlyph } from '@crewlethq/icons/glyphs';
13
13
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -1,6 +1,6 @@
1
1
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
- import './ChoiceButtons-DJ5EOGUA.css';
3
+ import './ChoiceButtons-FLIFXFFS.css';
4
4
  import { useId } from 'react';
5
5
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
6
6
 
@@ -1,6 +1,7 @@
1
+ import { useFocusModality } from './chunk-YSGLEHND.js';
1
2
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
2
3
  import { cx } from './chunk-ODEQTPFM.js';
3
- import './SourceEditor-G2C3STPX.css';
4
+ import './SourceEditor-QAYE2JS6.css';
4
5
  import { forwardRef, useRef, useId, useState, useImperativeHandle, useLayoutEffect } from 'react';
5
6
  import { jsxs, jsx } from 'react/jsx-runtime';
6
7
 
@@ -37,6 +38,7 @@ var SourceEditor = forwardRef(
37
38
  "aria-describedby": describedBy,
38
39
  ...rest
39
40
  }, ref) {
41
+ useFocusModality();
40
42
  const field = useRef(null);
41
43
  const tabLeaves = useRef(false);
42
44
  const keysId = useId();
@@ -1,5 +1,5 @@
1
+ import { SlideStage, SLIDE_WIDTH, SLIDE_HEIGHT } from './chunk-NQGPD6NX.js';
1
2
  import { SlideNav } from './chunk-6VOS2GMB.js';
2
- import { SlideStage, SLIDE_WIDTH, SLIDE_HEIGHT } from './chunk-LV4APO72.js';
3
3
  import { Eyebrow } from './chunk-RK4XPHVG.js';
4
4
  import { Button } from './chunk-OG6CL3EB.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';