@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
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Still copies: what a live preview drew, kept as plain DOM with nothing live
3
+ * behind it, and where they are kept between one mount and the next.
4
+ *
5
+ * A COPY IS THE DRAWN DOM, CLONED. It holds no React tree, no subscription,
6
+ * no observer and no timer: it is what the content looked like the moment it
7
+ * said it had drawn, and it never changes after. Nothing in it loads or runs:
8
+ * a canvas is copied as an image of what it drew, and anything that would
9
+ * load again (a frame, a video, audio, an embedded object) is left out of
10
+ * the copy, since a clone of one starts again from nothing.
11
+ *
12
+ * KEPT BY KEY for as long as the store lives. A gallery's cards mount and
13
+ * unmount as its filters, shape and pages change; a card that comes back
14
+ * under the same key is given the copy it already drew, so it reads nothing
15
+ * and draws nothing again until the page is loaded afresh.
16
+ */
17
+ /** A still copy: the nodes, and the width they were laid out at before they were scaled. */
18
+ export interface LivePreviewStill {
19
+ nodes: Node[];
20
+ /** The layout width the content was given, or undefined where it filled the box at its own size. */
21
+ width: number | undefined;
22
+ /** The box's size when it was drawn: a copy with no layout width is good at this size only. */
23
+ size: {
24
+ w: number;
25
+ h: number;
26
+ };
27
+ }
28
+ /** What a key holds: a still copy, or a preview that had nothing to draw. */
29
+ export type LivePreviewKept = LivePreviewStill | 'failed';
30
+ export interface LivePreviewStills {
31
+ get(key: string): LivePreviewKept | undefined;
32
+ put(key: string, kept: LivePreviewKept): void;
33
+ forget(key: string): void;
34
+ /**
35
+ * Tells `told` the box's size whenever it changes, and answers how to stop.
36
+ * ONE ResizeObserver for every copy the store's previews show: a copy is
37
+ * scaled to its box when the box changes size (a window resized, a panel
38
+ * opened), and a gallery holds one observer rather than one per card.
39
+ */
40
+ watch(el: Element, told: (size: {
41
+ w: number;
42
+ h: number;
43
+ }) => void): () => void;
44
+ }
45
+ /**
46
+ * The most still copies a store keeps, the oldest dropped first. Two hundred
47
+ * is four pages of a listing at fifty, the size a gallery asks the engine
48
+ * for; a preview whose copy was dropped draws again when it comes back.
49
+ */
50
+ export declare const LIVE_PREVIEW_STILLS_KEPT = 200;
51
+ export declare function createLivePreviewStills(kept?: number): LivePreviewStills;
52
+ /**
53
+ * A still copy of `nodes`: cloned, each canvas replaced by an image of what
54
+ * it drew (or left blank where its pixels cannot be read), and every element
55
+ * that would load again left out.
56
+ */
57
+ export declare function copyOf(nodes: readonly Node[]): Node[];
@@ -0,0 +1,113 @@
1
+ /*
2
+ * A live preview: the stand-in, the still copy of what the content drew and
3
+ * the live layer it is drawn in, stacked in that order in one box. The box
4
+ * takes its size from its parent (a card's preview area), so it fills it and
5
+ * clips whatever the content lays out past its edge.
6
+ */
7
+
8
+ .crewlet-live-preview {
9
+ position: relative;
10
+ display: block;
11
+ width: 100%;
12
+ height: 100%;
13
+ overflow: hidden;
14
+ contain: layout paint;
15
+ }
16
+
17
+ .crewlet-live-preview__fallback {
18
+ position: absolute;
19
+ inset: 0;
20
+ display: flex;
21
+ }
22
+
23
+ /* THE STILL COPY: static DOM over the stand-in, which it hides. A copy just
24
+ taken fades in; one the preview was given back from its store is simply
25
+ there, so a card scrolled or filtered back to is as it was. */
26
+ .crewlet-live-preview__still {
27
+ position: absolute;
28
+ inset: 0;
29
+ display: block;
30
+ overflow: hidden;
31
+ pointer-events: none;
32
+ user-select: none;
33
+ }
34
+
35
+ .crewlet-live-preview[data-fresh] > .crewlet-live-preview__still {
36
+ animation: crewlet-live-preview-arrive var(--motion-duration-base) var(--motion-easing-out);
37
+ }
38
+
39
+ @keyframes crewlet-live-preview-arrive {
40
+ from {
41
+ opacity: 0;
42
+ }
43
+ }
44
+
45
+ /* A COPY IS FROZEN: what it drew never moves, so nothing in it animates or
46
+ transitions, whatever the content's own styles ask of the elements it
47
+ copied (a skeleton's shimmer, a chart's entrance). */
48
+ .crewlet-live-preview__still *,
49
+ .crewlet-live-preview__still *::before,
50
+ .crewlet-live-preview__still *::after {
51
+ animation: none !important;
52
+ transition: none !important;
53
+ }
54
+
55
+ /* THE LIVE LAYER renders out of sight: content that is copied is never seen
56
+ live, only its copy is. A frame's page is kept rather than copied, so a
57
+ framed preview's live layer is what fades in once it has drawn. */
58
+ .crewlet-live-preview__live {
59
+ position: absolute;
60
+ inset: 0;
61
+ display: block;
62
+ overflow: hidden;
63
+ opacity: 0;
64
+ pointer-events: none;
65
+ user-select: none;
66
+ }
67
+
68
+ .crewlet-live-preview[data-frame] > .crewlet-live-preview__live {
69
+ transition: opacity var(--motion-duration-base) var(--motion-easing-out);
70
+ }
71
+
72
+ .crewlet-live-preview[data-frame][data-state='ready'] > .crewlet-live-preview__live {
73
+ opacity: 1;
74
+ }
75
+
76
+ /* LAID OUT AT ITS OWN SIZE from the top left corner, and scaled from there:
77
+ to the box's width, its top left the box's, or whole and centred. */
78
+ .crewlet-preview-scale {
79
+ position: absolute;
80
+ inset: 0;
81
+ display: block;
82
+ overflow: hidden;
83
+ }
84
+
85
+ .crewlet-preview-scale__layer {
86
+ position: absolute;
87
+ top: 0;
88
+ left: 0;
89
+ display: block;
90
+ overflow: hidden;
91
+ transform-origin: 0 0;
92
+ }
93
+
94
+ /* WHAT IS UNDER A DRAWING is hidden only once it has faded in. Fading the
95
+ stand-in out at the same time showed both at half strength halfway
96
+ through: a double exposure. */
97
+ .crewlet-live-preview[data-state='ready'] > .crewlet-live-preview__fallback {
98
+ visibility: hidden;
99
+ /* Visibility is discrete and stays visible for the whole of a transition
100
+ to hidden, so this holds it exactly as long as the fade above. A copy
101
+ given back from the store is ready from its first style, which runs no
102
+ transition, so its stand-in is never shown at all. */
103
+ transition: visibility var(--motion-duration-base) linear;
104
+ }
105
+
106
+ @media (prefers-reduced-motion: reduce) {
107
+ .crewlet-live-preview[data-fresh] > .crewlet-live-preview__still,
108
+ .crewlet-live-preview[data-frame] > .crewlet-live-preview__live,
109
+ .crewlet-live-preview[data-state='ready'] > .crewlet-live-preview__fallback {
110
+ animation: none;
111
+ transition: none;
112
+ }
113
+ }
@@ -1,6 +1,6 @@
1
- export { PresenterView, formatStopwatch } from '../chunk-THROPJZC.js';
1
+ export { PresenterView, formatStopwatch } from '../chunk-F23N4MVU.js';
2
2
  import '../chunk-6VOS2GMB.js';
3
- import '../chunk-LV4APO72.js';
3
+ import '../chunk-NQGPD6NX.js';
4
4
  import '../chunk-RK4XPHVG.js';
5
5
  import '../chunk-OMV5W53A.js';
6
6
  import '../chunk-R25RGPUB.js';
@@ -1,10 +1,11 @@
1
- export { PrincipalPicker } from '../chunk-AYB6AYNH.js';
2
- import '../chunk-QS4ZGTEU.js';
1
+ export { PrincipalPicker } from '../chunk-GMLAKNFY.js';
2
+ import '../chunk-PPFX6GRK.js';
3
3
  import '../chunk-F73MC7EZ.js';
4
- import '../chunk-6QFAK2WV.js';
5
4
  import '../chunk-CI3VPIJN.js';
6
5
  import '../chunk-5AQBPHZD.js';
7
6
  import '../chunk-PZKHBB7D.js';
7
+ import '../chunk-IUYUS2SO.js';
8
+ import '../chunk-YSGLEHND.js';
8
9
  import '../chunk-PQADV6P6.js';
9
10
  import '../chunk-R25RGPUB.js';
10
11
  import '../chunk-4FQT6ZAY.js';
@@ -1,4 +1,4 @@
1
- export { RichEditor, preloadRichEditor } from '../chunk-3VD3G3IL.js';
1
+ export { RichEditor, preloadRichEditor } from '../chunk-T5RQGI6O.js';
2
2
  export { RICH_EDITOR_LABELS, richEditorLabels } from '../chunk-CSQTDGTS.js';
3
3
  import '../chunk-BAKPMH3S.js';
4
4
  import '../chunk-SZZRIHGT.js';
@@ -1,5 +1,6 @@
1
- export { Select } from '../chunk-BQ7AKL2N.js';
1
+ export { Select } from '../chunk-VKKUGZ3G.js';
2
2
  import '../chunk-F73MC7EZ.js';
3
+ import '../chunk-YSGLEHND.js';
3
4
  import '../chunk-OMV5W53A.js';
4
5
  import '../chunk-R25RGPUB.js';
5
6
  import '../chunk-ODEQTPFM.js';
@@ -71,10 +71,16 @@
71
71
  * leave the other bare.
72
72
  */
73
73
  .crewlet-select:focus-within {
74
- outline: 1px solid var(--color-focus);
74
+ outline: 2px solid var(--color-focus);
75
75
  outline-offset: -1px;
76
76
  }
77
77
 
78
+ /* Narrowed and tinted for a pointer, as the text box's ring is. See Input.css. */
79
+ :root[data-crewlet-focus='pointer'] .crewlet-select:focus-within {
80
+ outline-width: 1px;
81
+ outline-color: var(--color-border-selected);
82
+ }
83
+
78
84
  /*
79
85
  * A FILTER THAT IS ON. The accent border says where the reader is and the
80
86
  * accent INK says what it is set to. It used to be the accent FILL with the
@@ -133,6 +139,10 @@
133
139
  outline-color: var(--color-feedback-danger);
134
140
  }
135
141
 
142
+ :root[data-crewlet-focus='pointer'] .crewlet-select.is-error:focus-within {
143
+ outline-color: var(--color-feedback-danger);
144
+ }
145
+
136
146
  .crewlet-select.is-disabled {
137
147
  opacity: 0.6;
138
148
  cursor: not-allowed;
@@ -426,10 +436,16 @@ svg.crewlet-select__chevron {
426
436
  * outset ring on the input would be cut by the menu's own `overflow: hidden`.
427
437
  */
428
438
  .crewlet-select__search:focus-within {
429
- outline: 1px solid var(--color-focus);
439
+ outline: 2px solid var(--color-focus);
430
440
  outline-offset: -1px;
431
441
  }
432
442
 
443
+ /* Narrowed and tinted for a pointer, as the text box's ring is. See Input.css. */
444
+ :root[data-crewlet-focus='pointer'] .crewlet-select__search:focus-within {
445
+ outline-width: 1px;
446
+ outline-color: var(--color-border-selected);
447
+ }
448
+
433
449
  .crewlet-select__search {
434
450
  display: flex;
435
451
  align-items: center;
@@ -1,5 +1,5 @@
1
- export { ARTIFACT_ROLES, SHAREABLE_ROLES, ShareDialog, roleAtLeast } from '../chunk-CCLNGVCM.js';
2
- import '../chunk-BQ7AKL2N.js';
1
+ export { ARTIFACT_ROLES, SHAREABLE_ROLES, ShareDialog, roleAtLeast } from '../chunk-EARDAJQY.js';
2
+ import '../chunk-VKKUGZ3G.js';
3
3
  import '../chunk-W46LPU4R.js';
4
4
  import '../chunk-STJ7QBC3.js';
5
5
  import '../chunk-DTIW4CHZ.js';
@@ -9,6 +9,7 @@ import '../chunk-SZZRIHGT.js';
9
9
  import '../chunk-CI3VPIJN.js';
10
10
  import '../chunk-5AQBPHZD.js';
11
11
  import '../chunk-PZKHBB7D.js';
12
+ import '../chunk-YSGLEHND.js';
12
13
  import '../chunk-PQADV6P6.js';
13
14
  import '../chunk-RTPQDNW3.js';
14
15
  import '../chunk-OMV5W53A.js';
@@ -1,17 +1,18 @@
1
- export { SHEET_COLUMN_EDITOR_LABELS, SheetColumnEditor, SheetColumnTypeGlyph } from '../chunk-J6YZ4IYV.js';
2
- import '../chunk-BQ7AKL2N.js';
1
+ export { SHEET_COLUMN_EDITOR_LABELS, SheetColumnEditor, SheetColumnTypeGlyph } from '../chunk-FG4O64DV.js';
2
+ import '../chunk-VKKUGZ3G.js';
3
3
  import '../chunk-FFMCMSJB.js';
4
4
  import '../chunk-F73MC7EZ.js';
5
5
  import '../chunk-LFSIKGRQ.js';
6
6
  import '../chunk-Z7JYG5TF.js';
7
7
  import '../chunk-SUXP4OBT.js';
8
8
  import '../chunk-AYKXMIOR.js';
9
- import '../chunk-CPEPST4S.js';
10
- import '../chunk-6QFAK2WV.js';
11
- import '../chunk-SMBKXWML.js';
9
+ import '../chunk-PJIPUEJ3.js';
12
10
  import '../chunk-CCAXYHQS.js';
13
11
  import '../chunk-VL6CUNSX.js';
14
12
  import '../chunk-RKKO7QHH.js';
13
+ import '../chunk-IUYUS2SO.js';
14
+ import '../chunk-YSGLEHND.js';
15
+ import '../chunk-SMBKXWML.js';
15
16
  import '../chunk-BHHIIK3M.js';
16
17
  import '../chunk-PQADV6P6.js';
17
18
  import '../chunk-BUVCV3WI.js';
@@ -1,10 +1,10 @@
1
- export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from '../chunk-FF5OZV77.js';
1
+ export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from '../chunk-W3HYWD63.js';
2
2
  import '../chunk-O2EGEONV.js';
3
3
  import '../chunk-CENOOTAV.js';
4
- import '../chunk-GFV4LJHH.js';
5
- import '../chunk-WIATRXEJ.js';
6
4
  import '../chunk-3BYIWOTV.js';
7
5
  import '../chunk-I6POAB4V.js';
6
+ import '../chunk-GFV4LJHH.js';
7
+ import '../chunk-WIATRXEJ.js';
8
8
  import '../chunk-47JQAGRV.js';
9
9
  import '../chunk-LFSIKGRQ.js';
10
10
  import '../chunk-Z7JYG5TF.js';
@@ -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,5 +1,5 @@
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
5
  import '../chunk-BUVCV3WI.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,10 +1,11 @@
1
- export { Switcher } from '../chunk-GMU6SQ6B.js';
1
+ export { Switcher } from '../chunk-66NGUD5S.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';
9
10
  import '../chunk-RTPQDNW3.js';
10
11
  import '../chunk-OMV5W53A.js';
@@ -1,7 +1,8 @@
1
- export { TagsInput } from '../chunk-2CQLNML5.js';
1
+ export { TagsInput } from '../chunk-AOLCZDZ6.js';
2
2
  import '../chunk-GFV4LJHH.js';
3
3
  import '../chunk-WIATRXEJ.js';
4
4
  import '../chunk-F73MC7EZ.js';
5
+ import '../chunk-YSGLEHND.js';
5
6
  import '../chunk-OMV5W53A.js';
6
7
  import '../chunk-R25RGPUB.js';
7
8
  import '../chunk-RSAQOKH3.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';