@crewlethq/ui 0.35.0 → 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 (170) hide show
  1. package/README.md +77 -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/ChangeMark/index.js +2 -2
  35. package/dist/Checkbox/index.js +3 -2
  36. package/dist/ChoiceButtons/index.js +1 -1
  37. package/dist/{ChoiceButtons-DJ5EOGUA.css → ChoiceButtons-FLIFXFFS.css} +10 -0
  38. package/dist/ChoiceList/index.js +1 -1
  39. package/dist/{ChoiceList-RBL7FNQL.css → ChoiceList-EA2W6MOS.css} +36 -5
  40. package/dist/Combobox/index.js +3 -2
  41. package/dist/CommandPalette/index.js +3 -2
  42. package/dist/CommentThread/index.js +6 -5
  43. package/dist/Composer/Composer.d.ts +4 -0
  44. package/dist/Composer/index.js +3 -2
  45. package/dist/{Composer-ABGJIAIR.css → Composer-PXITWNEK.css} +26 -15
  46. package/dist/ConfirmField/index.js +3 -2
  47. package/dist/DataTable/index.js +5 -4
  48. package/dist/DataView/index.js +9 -8
  49. package/dist/DatasetSource/DatasetSource.d.ts +4 -0
  50. package/dist/DatasetSource/index.js +1 -1
  51. package/dist/{DatasetSource-XFPZBRXL.css → DatasetSource-SMGX4PS5.css} +38 -4
  52. package/dist/DateTimePicker/index.js +2 -1
  53. package/dist/{DateTimePicker-HG2KQXQ6.css → DateTimePicker-2IVTKFV2.css} +15 -2
  54. package/dist/DocTabsEditor/index.js +4 -3
  55. package/dist/Document/Document.d.ts +15 -3
  56. package/dist/Document/index.js +2 -1
  57. package/dist/{Document-JUGCSQ4L.css → Document-YFWTWXJP.css} +34 -2
  58. package/dist/{Editor-BVQHBF7L.js → Editor-HORWMUM3.js} +2 -1
  59. package/dist/FilterChip/index.js +1 -1
  60. package/dist/{FilterChip-EZ4QMW4E.css → FilterChip-VL33P3JL.css} +5 -1
  61. package/dist/Input/index.js +2 -1
  62. package/dist/{Input-GBZSFXLU.css → Input-ABGOFENS.css} +46 -10
  63. package/dist/LayersList/index.js +1 -1
  64. package/dist/{LayersList-NQZEIPZB.css → LayersList-TBNF4XGL.css} +16 -3
  65. package/dist/LinkInterstitial/index.js +2 -2
  66. package/dist/ListInput/index.js +4 -3
  67. package/dist/LivePreview/LivePreview.d.ts +105 -25
  68. package/dist/LivePreview/budget.d.ts +64 -20
  69. package/dist/LivePreview/index.d.ts +5 -3
  70. package/dist/LivePreview/index.js +1 -1
  71. package/dist/LivePreview/stills.d.ts +57 -0
  72. package/dist/LivePreview-BROGKR4N.css +113 -0
  73. package/dist/PresenterView/index.js +2 -2
  74. package/dist/PrincipalPicker/index.js +4 -3
  75. package/dist/RichEditor/index.js +1 -1
  76. package/dist/Select/index.js +2 -1
  77. package/dist/{Select-A54YS5EP.css → Select-W3CHTZXP.css} +18 -2
  78. package/dist/ShareDialog/index.js +5 -4
  79. package/dist/SheetColumnEditor/index.js +7 -6
  80. package/dist/SheetGrid/index.js +6 -6
  81. package/dist/SheetModel/columns.d.ts +19 -0
  82. package/dist/SheetModel/index.d.ts +1 -0
  83. package/dist/SheetModel/index.js +1 -1
  84. package/dist/SlideCompare/index.js +2 -2
  85. package/dist/SlideFilmstrip/index.js +3 -3
  86. package/dist/{SlideFilmstrip-4ITZLMO4.css → SlideFilmstrip-PAT7P4OG.css} +26 -7
  87. package/dist/SlideGrid/index.js +2 -2
  88. package/dist/{SlideGrid-S4LTJ4UU.css → SlideGrid-FJA33DV4.css} +11 -1
  89. package/dist/SlideStage/index.js +1 -1
  90. package/dist/{SlideStage-S2FISF4C.css → SlideStage-ZTTEQSS2.css} +4 -2
  91. package/dist/SourceEditor/index.js +2 -1
  92. package/dist/{SourceEditor-G2C3STPX.css → SourceEditor-QAYE2JS6.css} +19 -12
  93. package/dist/Switcher/index.js +5 -4
  94. package/dist/TagsInput/index.js +3 -2
  95. package/dist/{TagsInput-XMXTI5Q4.css → TagsInput-7EGBBXHS.css} +7 -1
  96. package/dist/ThemeGallery/index.js +1 -1
  97. package/dist/{ThemeGallery-HSUKBDWY.css → ThemeGallery-X35Y25EX.css} +26 -5
  98. package/dist/TimeWindowPicker/index.js +4 -3
  99. package/dist/{TimeWindowPicker-T763GLXH.css → TimeWindowPicker-DEFDV77Z.css} +15 -2
  100. package/dist/TreeCanvas/index.js +3 -3
  101. package/dist/VersionTimeline/index.js +2 -2
  102. package/dist/{chunk-V43UVX4H.js → chunk-27GD7LVR.js} +1 -1
  103. package/dist/{chunk-CCLNGVCM.js → chunk-2DV4THNQ.js} +2 -2
  104. package/dist/{chunk-2CQLNML5.js → chunk-3PTUDKSR.js} +4 -2
  105. package/dist/{chunk-ONL54WMH.js → chunk-46RL3E54.js} +1 -1
  106. package/dist/{chunk-HAKTRTRP.js → chunk-47JQAGRV.js} +1 -1
  107. package/dist/{chunk-UHJQDFKQ.js → chunk-4ZJLOKSS.js} +1 -1
  108. package/dist/{chunk-ACA27MZH.js → chunk-5QXRI35B.js} +1 -1
  109. package/dist/{chunk-LL5AFXU7.js → chunk-5RT5O4JR.js} +1 -1
  110. package/dist/chunk-66ADEPFB.js +51 -0
  111. package/dist/{chunk-3Y56GQPM.js → chunk-7VAUGG6B.js} +1 -1
  112. package/dist/{chunk-NKZCJRKO.js → chunk-APDKUGSH.js} +2 -2
  113. package/dist/{chunk-YSJC7AZC.js → chunk-BWOIUOO3.js} +1 -1
  114. package/dist/{chunk-PI7HKLIT.js → chunk-D7GNNID2.js} +3 -1
  115. package/dist/{chunk-THROPJZC.js → chunk-DEMALFHY.js} +1 -1
  116. package/dist/chunk-EOQFPZEE.js +138 -0
  117. package/dist/{chunk-QFNWMWWY.js → chunk-ES4RKQ7B.js} +4 -4
  118. package/dist/{chunk-MAD6WPER.js → chunk-FG4O64DV.js} +5 -6
  119. package/dist/{chunk-E35CMI5D.js → chunk-FHHYXZSP.js} +31 -13
  120. package/dist/{chunk-AYB6AYNH.js → chunk-GMLAKNFY.js} +1 -1
  121. package/dist/{chunk-ZB5O3ELS.js → chunk-GRYZ5EP3.js} +4 -2
  122. package/dist/{chunk-ILAEBSLJ.js → chunk-H5NOLRGH.js} +2 -2
  123. package/dist/{chunk-W3UVOZKL.js → chunk-IPAU6FLH.js} +6 -2
  124. package/dist/{chunk-Z6VW6CXX.js → chunk-IQH3DDZ2.js} +2 -2
  125. package/dist/{chunk-6QFAK2WV.js → chunk-IUYUS2SO.js} +4 -1
  126. package/dist/{chunk-AXBRWRGV.js → chunk-JQLS3MZB.js} +1 -1
  127. package/dist/{chunk-FGYET26P.js → chunk-KJW2AS57.js} +1 -1
  128. package/dist/{chunk-QIXMNOBD.js → chunk-KYZMN6I6.js} +2 -2
  129. package/dist/{chunk-73A7D5CE.js → chunk-L4WZSVMT.js} +3 -1
  130. package/dist/{chunk-OOMXLJ3S.js → chunk-LFSIKGRQ.js} +13 -1
  131. package/dist/{chunk-W7QBBKUE.js → chunk-MJW6SQYB.js} +7 -3
  132. package/dist/{chunk-GMU6SQ6B.js → chunk-MRMHZ437.js} +3 -3
  133. package/dist/{chunk-ULPL26BU.js → chunk-N5SKHIAP.js} +1 -1
  134. package/dist/{chunk-LV4APO72.js → chunk-NQGPD6NX.js} +1 -1
  135. package/dist/{chunk-7UYONN6K.js → chunk-OSZDHN5Z.js} +2 -2
  136. package/dist/chunk-P6WFZDKS.js +111 -0
  137. package/dist/{chunk-CPEPST4S.js → chunk-PJIPUEJ3.js} +1 -1
  138. package/dist/{chunk-QS4ZGTEU.js → chunk-PPFX6GRK.js} +1 -1
  139. package/dist/{chunk-7DZDSSJS.js → chunk-RH2NCQBZ.js} +5 -4
  140. package/dist/{chunk-3VD3G3IL.js → chunk-T5RQGI6O.js} +1 -1
  141. package/dist/{chunk-F2KY4RLI.js → chunk-TVRBQMIX.js} +5 -3
  142. package/dist/{chunk-QEFHYUCY.js → chunk-UWGUKMBK.js} +1 -1
  143. package/dist/{chunk-5YLON2PW.js → chunk-UYZZV4DZ.js} +1 -1
  144. package/dist/{chunk-BQ7AKL2N.js → chunk-VKKUGZ3G.js} +3 -1
  145. package/dist/{chunk-5VCG26CV.js → chunk-W3HYWD63.js} +4 -4
  146. package/dist/{chunk-DEJHAOC5.js → chunk-WMXAX6VA.js} +1 -1
  147. package/dist/{chunk-6JVRY5DQ.js → chunk-WNAYQQ6Y.js} +2 -2
  148. package/dist/{chunk-VDPJGP4Q.js → chunk-WX2NIG4G.js} +1 -1
  149. package/dist/{chunk-ZU3DUXD2.js → chunk-WZGYIVYH.js} +1 -1
  150. package/dist/chunk-XGBLRDSU.js +446 -0
  151. package/dist/{chunk-22CQQDFW.js → chunk-XMRTFPWX.js} +2 -2
  152. package/dist/{chunk-HUVG2FFT.js → chunk-Y5BD4MTE.js} +4 -2
  153. package/dist/chunk-YSGLEHND.js +56 -0
  154. package/dist/generated/index.d.ts +2 -0
  155. package/dist/generated/index.js +93 -90
  156. package/dist/index.js +93 -90
  157. package/dist/styles.css +862 -130
  158. package/dist/utils/focusModality.d.ts +41 -0
  159. package/dist/utils/index.d.ts +2 -0
  160. package/dist/utils/index.js +2 -1
  161. package/package.json +3 -3
  162. package/dist/LivePreview-SRO7KHO4.css +0 -65
  163. package/dist/chunk-KF6YGL4B.js +0 -160
  164. package/dist/chunk-TYKQ33CL.js +0 -35
  165. package/dist/{chunk-3P4Y5RX6.js → chunk-4BYHAOHH.js} +1 -1
  166. package/dist/{chunk-3WCNHYXE.js → chunk-5BP6IS3N.js} +0 -0
  167. package/dist/{chunk-KD2IRYCT.js → chunk-5WDXPHEW.js} +1 -1
  168. package/dist/{chunk-OSFA5ROT.js → chunk-FEJANUZK.js} +0 -0
  169. package/dist/{chunk-FJJHD73S.js → chunk-GYBDPCRC.js} +1 -1
  170. package/dist/{chunk-VHZ3AXJD.js → chunk-NQCY44B3.js} +1 -1
@@ -1,6 +1,7 @@
1
- export { Combobox } from '../chunk-QS4ZGTEU.js';
1
+ export { Combobox } from '../chunk-PPFX6GRK.js';
2
2
  import '../chunk-F73MC7EZ.js';
3
- import '../chunk-6QFAK2WV.js';
3
+ import '../chunk-IUYUS2SO.js';
4
+ import '../chunk-YSGLEHND.js';
4
5
  import '../chunk-PQADV6P6.js';
5
6
  import '../chunk-R25RGPUB.js';
6
7
  import '../chunk-4FQT6ZAY.js';
@@ -1,8 +1,9 @@
1
- export { CommandPalette } from '../chunk-ULPL26BU.js';
1
+ export { CommandPalette } from '../chunk-N5SKHIAP.js';
2
2
  import '../chunk-XEGZHHRH.js';
3
3
  import '../chunk-F73MC7EZ.js';
4
- import '../chunk-6QFAK2WV.js';
4
+ import '../chunk-IUYUS2SO.js';
5
5
  import '../chunk-SMBKXWML.js';
6
+ import '../chunk-YSGLEHND.js';
6
7
  import '../chunk-BHHIIK3M.js';
7
8
  import '../chunk-PQADV6P6.js';
8
9
  import '../chunk-OMV5W53A.js';
@@ -1,13 +1,14 @@
1
- export { COMMENT_THREAD_LABELS, CommentThread } from '../chunk-6JVRY5DQ.js';
2
- import '../chunk-7DZDSSJS.js';
3
- import '../chunk-6QFAK2WV.js';
4
- import '../chunk-SMBKXWML.js';
1
+ export { COMMENT_THREAD_LABELS, CommentThread } from '../chunk-WNAYQQ6Y.js';
5
2
  import '../chunk-CI3VPIJN.js';
6
3
  import '../chunk-3CZ7XAVY.js';
7
4
  import '../chunk-EUCC37WY.js';
8
5
  import '../chunk-5AQBPHZD.js';
9
6
  import '../chunk-PZKHBB7D.js';
10
- import '../chunk-TYKQ33CL.js';
7
+ import '../chunk-P6WFZDKS.js';
8
+ import '../chunk-RH2NCQBZ.js';
9
+ import '../chunk-IUYUS2SO.js';
10
+ import '../chunk-SMBKXWML.js';
11
+ import '../chunk-YSGLEHND.js';
11
12
  import '../chunk-BHHIIK3M.js';
12
13
  import '../chunk-PQADV6P6.js';
13
14
  import '../chunk-OG6CL3EB.js';
@@ -20,6 +20,10 @@ export interface ComposerProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaE
20
20
  * and a footer strip holding the send shortcut, a counter and the actions, in
21
21
  * one box that takes the focus ring as a whole.
22
22
  *
23
+ * THE FOOTER IS DRAWN ONLY WITH SOMETHING IN IT. With no shortcut, counter or
24
+ * actions there is no strip at all, and one holding only the shortcut's hint
25
+ * goes on a phone, where the hint is not drawn, rather than stand there empty.
26
+ *
23
27
  * THE COUNTER IS DRAWN ONLY NEAR THE LIMIT, from [COMPOSER_COUNTER_AT] of
24
28
  * `maxLength`: a count under every short reply is noise, and a field that
25
29
  * stops taking text with no warning reads as a broken keyboard.
@@ -1,6 +1,7 @@
1
- export { COMPOSER_COUNTER_AT, Composer } from '../chunk-7DZDSSJS.js';
2
- import '../chunk-6QFAK2WV.js';
1
+ export { COMPOSER_COUNTER_AT, Composer } from '../chunk-RH2NCQBZ.js';
2
+ import '../chunk-IUYUS2SO.js';
3
3
  import '../chunk-SMBKXWML.js';
4
+ import '../chunk-YSGLEHND.js';
4
5
  import '../chunk-PQADV6P6.js';
5
6
  import '../chunk-4FQT6ZAY.js';
6
7
  import '../chunk-BZFWDIV6.js';
@@ -1,8 +1,11 @@
1
1
  /*
2
2
  * A message written in place: the field and its footer strip in one box. The
3
- * BOX takes the focus ring, an accent border and a 2px soft halo, so the
4
- * field inside draws no border or outline of its own and the footer reads as
5
- * part of what is being written.
3
+ * BOX takes the focus ring every field in the package draws (see Input.css):
4
+ * an outline over its boundary, 2px for the keyboard and the hairline for a
5
+ * pointer, so the field inside draws no border or outline of its own and the
6
+ * footer reads as part of what is being written. It used to recolour the
7
+ * border to the accent AND lay a 2px soft halo outside it: two highlights for
8
+ * one state, and the loudest edge on a page whose field was focused on load.
6
9
  */
7
10
  .crewlet-composer {
8
11
  display: grid;
@@ -10,18 +13,23 @@
10
13
  border: 1px solid var(--color-border-strong);
11
14
  border-radius: var(--radius-md);
12
15
  background: var(--color-surface-background);
13
- transition:
14
- border-color var(--motion-duration-fast) var(--motion-easing-default),
15
- box-shadow var(--motion-duration-fast) var(--motion-easing-default);
16
+ transition: border-color var(--motion-duration-fast) var(--motion-easing-default);
16
17
  }
17
18
 
18
19
  .crewlet-composer:hover {
19
20
  border-color: var(--color-border-strong-hover);
20
21
  }
21
22
 
22
- .crewlet-composer:focus-within {
23
- border-color: var(--color-brand-accent);
24
- box-shadow: 0 0 0 2px var(--color-brand-accent-soft);
23
+ /* Keyed on the FIELD, not :focus-within: the footer holds the send action,
24
+ and a reader tabbing onto it is shown that button's ring, not the box's. */
25
+ .crewlet-composer:has(.crewlet-composer__field:focus-visible) {
26
+ outline: 2px solid var(--color-focus);
27
+ outline-offset: -1px;
28
+ }
29
+
30
+ :root[data-crewlet-focus='pointer'] .crewlet-composer:has(.crewlet-composer__field:focus-visible) {
31
+ outline-width: 1px;
32
+ outline-color: var(--color-border-selected);
25
33
  }
26
34
 
27
35
  .crewlet-composer .crewlet-composer__field {
@@ -34,11 +42,12 @@
34
42
  resize: none;
35
43
  }
36
44
 
37
- /* The ring is the box's, above. A transparent outline stays, because forced
38
- colors drops the box's shadow and paints an outline in its place. */
39
- .crewlet-composer .crewlet-composer__field:focus-visible {
40
- outline: 2px solid transparent;
41
- outline-offset: -2px;
45
+ /* The ring is the box's, above, so the field inside never draws one: left to
46
+ the textarea's own rule it would be a second ring inside the box's, and in
47
+ forced colours the box's outline is the one the system repaints. Stated on
48
+ the field at rest, at a weight the textarea's focus rule cannot outrank. */
49
+ .crewlet-composer .crewlet-composer__field.crewlet-textarea {
50
+ outline: none;
42
51
  }
43
52
 
44
53
  /* Past its cap the field scrolls rather than pushing the page. */
@@ -75,8 +84,10 @@
75
84
  flex: 1;
76
85
  }
77
86
 
87
+ /* On a phone the hint goes, and a footer that held only the hint goes with it. */
78
88
  @media (width < 640px) {
79
- .crewlet-composer__hint {
89
+ .crewlet-composer__hint,
90
+ .crewlet-composer__footer[data-hint-only] {
80
91
  display: none;
81
92
  }
82
93
  }
@@ -1,6 +1,7 @@
1
- export { ConfirmField, confirmMatches } from '../chunk-FGYET26P.js';
1
+ export { ConfirmField, confirmMatches } from '../chunk-KJW2AS57.js';
2
2
  import '../chunk-5CLW2CXT.js';
3
- import '../chunk-6QFAK2WV.js';
3
+ import '../chunk-IUYUS2SO.js';
4
+ import '../chunk-YSGLEHND.js';
4
5
  import '../chunk-PQADV6P6.js';
5
6
  import '../chunk-4FQT6ZAY.js';
6
7
  import '../chunk-BZFWDIV6.js';
@@ -1,11 +1,12 @@
1
- export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from '../chunk-22CQQDFW.js';
1
+ export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from '../chunk-XMRTFPWX.js';
2
+ import '../chunk-XEGZHHRH.js';
2
3
  import '../chunk-STJ7QBC3.js';
3
4
  import '../chunk-DTIW4CHZ.js';
4
- import '../chunk-XEGZHHRH.js';
5
- import '../chunk-CPEPST4S.js';
6
- import '../chunk-6QFAK2WV.js';
5
+ import '../chunk-PJIPUEJ3.js';
7
6
  import '../chunk-EUCC37WY.js';
8
7
  import '../chunk-AV2DXAEL.js';
8
+ import '../chunk-IUYUS2SO.js';
9
+ import '../chunk-YSGLEHND.js';
9
10
  import '../chunk-PQADV6P6.js';
10
11
  import '../chunk-BUVCV3WI.js';
11
12
  import '../chunk-OMV5W53A.js';
@@ -1,20 +1,21 @@
1
- export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from '../chunk-QFNWMWWY.js';
1
+ export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from '../chunk-ES4RKQ7B.js';
2
2
  import '../chunk-HOXGBLEY.js';
3
- import '../chunk-22CQQDFW.js';
4
- import '../chunk-73A7D5CE.js';
5
- import '../chunk-STJ7QBC3.js';
6
- import '../chunk-DTIW4CHZ.js';
3
+ import '../chunk-XMRTFPWX.js';
4
+ import '../chunk-L4WZSVMT.js';
7
5
  import '../chunk-XEGZHHRH.js';
8
6
  import '../chunk-F73MC7EZ.js';
7
+ import '../chunk-STJ7QBC3.js';
8
+ import '../chunk-DTIW4CHZ.js';
9
9
  import '../chunk-GXQ3B46I.js';
10
10
  import '../chunk-PGRPNDWM.js';
11
11
  import '../chunk-K3IJQNB7.js';
12
- import '../chunk-CPEPST4S.js';
13
- import '../chunk-6QFAK2WV.js';
14
- import '../chunk-SMBKXWML.js';
12
+ import '../chunk-PJIPUEJ3.js';
15
13
  import '../chunk-3CZ7XAVY.js';
16
14
  import '../chunk-EUCC37WY.js';
17
15
  import '../chunk-AV2DXAEL.js';
16
+ import '../chunk-IUYUS2SO.js';
17
+ import '../chunk-SMBKXWML.js';
18
+ import '../chunk-YSGLEHND.js';
18
19
  import '../chunk-BHHIIK3M.js';
19
20
  import '../chunk-PQADV6P6.js';
20
21
  import '../chunk-BUVCV3WI.js';
@@ -64,6 +64,10 @@ export interface DatasetSourceProps extends Omit<HTMLAttributes<HTMLDivElement>,
64
64
  * it, outside it: a table inside a button is invalid markup and unreachable
65
65
  * to a screen reader.
66
66
  *
67
+ * AN OPEN ENTRY IS ONE CARD. Once its preview is drawn, the entry frames the
68
+ * summary and the preview together, the summary as the card's head, so the
69
+ * figures read as this source's rather than as the next item of the rail.
70
+ *
67
71
  * A refusal reads as calmly here as on the figure: the reader may not read
68
72
  * the data, which is an ordinary state, so it takes the secondary ink and
69
73
  * never an error colour.
@@ -1,4 +1,4 @@
1
- export { DATASET_SOURCE_KINDS, DatasetSource, DatasetSourceList } from '../chunk-ZB5O3ELS.js';
1
+ export { DATASET_SOURCE_KINDS, DatasetSource, DatasetSourceList } from '../chunk-GRYZ5EP3.js';
2
2
  import '../chunk-GFV4LJHH.js';
3
3
  import '../chunk-WIATRXEJ.js';
4
4
  import '../chunk-3CZ7XAVY.js';
@@ -9,6 +9,8 @@
9
9
  display: flex;
10
10
  flex-direction: column;
11
11
  min-width: 0;
12
+ /* Held transparent at rest so nothing moves when an entry opens. */
13
+ border: 1px solid transparent;
12
14
  border-radius: var(--radius-md);
13
15
  }
14
16
 
@@ -42,12 +44,23 @@ button.crewlet-dataset-source__summary:focus-visible {
42
44
  outline-offset: var(--size-focus-ring-inset-offset);
43
45
  }
44
46
 
45
- /* The accent boundary, as a selected card takes it, and the soft accent fill. */
47
+ /*
48
+ * The selected edge round the WHOLE ENTRY, over the selected fill on its
49
+ * summary, as every chosen option is drawn: a tint of the accent, never the
50
+ * full accent the focus ring is drawn in. The edge used to ring the summary
51
+ * alone, so the settings and figures an open source shows under it hung
52
+ * below the ring with nothing saying they belonged to it; inside one edge they
53
+ * read as the entry's own. The rows it opens are what say which entry is open.
54
+ */
55
+ .crewlet-dataset-source--selected {
56
+ border-color: var(--color-border-selected);
57
+ }
58
+
46
59
  .crewlet-dataset-source--selected .crewlet-dataset-source__summary {
47
- border-color: var(--color-brand-accent);
48
- background: var(--color-brand-accent-soft);
60
+ background: var(--color-surface-selected);
49
61
  }
50
62
 
63
+
51
64
  .crewlet-dataset-source__head {
52
65
  display: flex;
53
66
  align-items: center;
@@ -118,9 +131,30 @@ button.crewlet-dataset-source__summary:focus-visible {
118
131
  color: var(--color-feedback-warning-ink);
119
132
  }
120
133
 
134
+ /*
135
+ * AN OPEN ENTRY IS ONE CARD: the selected edge above frames the summary and
136
+ * the preview together, the summary its head on the selected fill and the
137
+ * preview a well under it, inset on the summary's padding, so the figures in
138
+ * it (cards of their own) stand on a ground that is plainly the source's
139
+ * rather than the rail's. One line separates head from well, in the same
140
+ * selected edge, and the head sits INSIDE the frame rather than over it: its
141
+ * fill laid over the frame's edge would paint that edge out.
142
+ */
143
+ .crewlet-dataset-source--open {
144
+ background: var(--color-surface-inset);
145
+ }
146
+
147
+ .crewlet-dataset-source--open > .crewlet-dataset-source__summary {
148
+ border-block-end-color: var(--color-border-selected);
149
+ border-start-start-radius: calc(var(--radius-md) - 1px);
150
+ border-start-end-radius: calc(var(--radius-md) - 1px);
151
+ border-end-start-radius: 0;
152
+ border-end-end-radius: 0;
153
+ }
154
+
121
155
  .crewlet-dataset-source__preview {
122
156
  min-width: 0;
123
- padding: var(--spacing-2) var(--spacing-3) var(--spacing-3);
157
+ padding: var(--spacing-3);
124
158
  }
125
159
 
126
160
  .crewlet-dataset-source-list {
@@ -1,6 +1,7 @@
1
- export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from '../chunk-73A7D5CE.js';
1
+ export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from '../chunk-L4WZSVMT.js';
2
2
  import '../chunk-GXQ3B46I.js';
3
3
  import '../chunk-K3IJQNB7.js';
4
+ import '../chunk-YSGLEHND.js';
4
5
  import '../chunk-OMV5W53A.js';
5
6
  import '../chunk-R25RGPUB.js';
6
7
  import '../chunk-OG6CL3EB.js';
@@ -51,10 +51,17 @@
51
51
  */
52
52
  .crewlet-datetime:focus-visible,
53
53
  .crewlet-datetime.is-open {
54
- outline: 1px solid var(--color-focus);
54
+ outline: 2px solid var(--color-focus);
55
55
  outline-offset: -1px;
56
56
  }
57
57
 
58
+ /* Narrowed and tinted for a pointer, as the text box's ring is. See Input.css. */
59
+ :root[data-crewlet-focus='pointer'] .crewlet-datetime:focus-visible,
60
+ :root[data-crewlet-focus='pointer'] .crewlet-datetime.is-open {
61
+ outline-width: 1px;
62
+ outline-color: var(--color-border-selected);
63
+ }
64
+
58
65
  .crewlet-datetime.is-disabled,
59
66
  .crewlet-datetime:disabled {
60
67
  opacity: 0.55;
@@ -177,10 +184,16 @@ svg.crewlet-datetime__chevron {
177
184
 
178
185
  /* The same one ring the trigger draws, over the box's own boundary. */
179
186
  .crewlet-datetime__time-input:focus-visible {
180
- outline: 1px solid var(--color-focus);
187
+ outline: 2px solid var(--color-focus);
181
188
  outline-offset: -1px;
182
189
  }
183
190
 
191
+ /* Narrowed and tinted for a pointer, as the text box's ring is. See Input.css. */
192
+ :root[data-crewlet-focus='pointer'] .crewlet-datetime__time-input:focus-visible {
193
+ outline-width: 1px;
194
+ outline-color: var(--color-border-selected);
195
+ }
196
+
184
197
  .crewlet-datetime__footer {
185
198
  display: flex;
186
199
  align-items: center;
@@ -1,12 +1,13 @@
1
- export { DOC_TABS_EDITOR_LABELS, DocTabsEditor } from '../chunk-QEFHYUCY.js';
1
+ export { DOC_TABS_EDITOR_LABELS, DocTabsEditor } from '../chunk-UWGUKMBK.js';
2
2
  import '../chunk-XJ2QEBMM.js';
3
- import '../chunk-6QFAK2WV.js';
3
+ import '../chunk-IUYUS2SO.js';
4
+ import '../chunk-YSGLEHND.js';
4
5
  import '../chunk-PQADV6P6.js';
6
+ import '../chunk-RSAQOKH3.js';
5
7
  import '../chunk-BUVCV3WI.js';
6
8
  import '../chunk-OMV5W53A.js';
7
9
  import '../chunk-R25RGPUB.js';
8
10
  import '../chunk-OG6CL3EB.js';
9
- import '../chunk-RSAQOKH3.js';
10
11
  import '../chunk-4FQT6ZAY.js';
11
12
  import '../chunk-BZFWDIV6.js';
12
13
  import '../chunk-ODEQTPFM.js';
@@ -1,4 +1,4 @@
1
- import type { HTMLAttributes, InputHTMLAttributes } from 'react';
1
+ import { type HTMLAttributes, type TextareaHTMLAttributes } from 'react';
2
2
  export type DocumentSize =
3
3
  /**
4
4
  * A page read on its own: the small step at the relaxed leading, sections at
@@ -61,7 +61,7 @@ export interface DocumentTitleProps extends HTMLAttributes<HTMLHeadingElement> {
61
61
  * a size of its own beside the body it heads.
62
62
  */
63
63
  export declare function DocumentTitle({ as: Tag, className, children, ...rest }: DocumentTitleProps): import("react").JSX.Element;
64
- export interface DocumentTitleFieldProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {
64
+ export interface DocumentTitleFieldProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'rows' | 'cols' | 'wrap'> {
65
65
  /** Marks the title as refused. Sets `aria-invalid`, which is what a screen reader reads. */
66
66
  error?: boolean | undefined;
67
67
  }
@@ -76,5 +76,17 @@ export interface DocumentTitleFieldProps extends Omit<InputHTMLAttributes<HTMLIn
76
76
  * danger ink when the title is refused. The name is the caller's
77
77
  * (`aria-label`, or a label it points at), because a title field's visible
78
78
  * cue is its placeholder, and a placeholder is not a name.
79
+ *
80
+ * IT WRAPS, AND IT IS STILL ONE LINE OF TEXT. A title is set in the page's
81
+ * largest type, and an `<input>` cuts what does not fit: on a phone a long
82
+ * title, or the example in its placeholder, was clipped mid-word ("Weekly
83
+ * planning, Octobe"). So it is a textarea of one row that grows with what it
84
+ * holds, as the title it becomes wraps, and every way it could take a second
85
+ * line is closed: Enter inserts nothing (its `keydown` reaches the caller and
86
+ * the page exactly as an input's does, and in a form with a submit button it
87
+ * submits, as an input's Enter does), and a pasted, dropped or autofilled line
88
+ * break becomes a space before the caller's `onChange` reads the value. It is
89
+ * named to assistive technology as a single-line text field
90
+ * (`aria-multiline="false"`).
79
91
  */
80
- export declare function DocumentTitleField({ error, className, ...rest }: DocumentTitleFieldProps): import("react").JSX.Element;
92
+ export declare const DocumentTitleField: import("react").ForwardRefExoticComponent<DocumentTitleFieldProps & import("react").RefAttributes<HTMLTextAreaElement>>;
@@ -1,2 +1,3 @@
1
- export { Document, DocumentTitle, DocumentTitleField } from '../chunk-TYKQ33CL.js';
1
+ export { Document, DocumentTitle, DocumentTitleField } from '../chunk-P6WFZDKS.js';
2
+ import '../chunk-YSGLEHND.js';
2
3
  import '../chunk-ODEQTPFM.js';
@@ -327,17 +327,34 @@
327
327
  * on no surface of its own, with a line along its foot that answers the
328
328
  * pointer, the focus and a refusal. The line is a border rather than a
329
329
  * shadow, because forced colours keep a border and drop a shadow.
330
+ *
331
+ * ONE PIXEL, AND A TINT, WHERE A POINTER PUT THE CARET. The line is the
332
+ * hairline under the pointer and the selected edge (the accent mixed toward
333
+ * the page) once a click has put the caret in it: the reader is already
334
+ * looking at the title, and a page that focuses its title on load drew a 2px
335
+ * accent bar under it before anybody had touched anything.
336
+ *
337
+ * TWO PIXELS IN THE FOCUS COLOUR FOR THE KEYBOARD, the area WCAG 2.2's focus
338
+ * appearance asks of an indicator: the border takes the focus colour and a
339
+ * shadow lays the second pixel under it, with a transparent outline that
340
+ * forced colours paints in its place. The padding takes the pixel the border
341
+ * no longer reserves, so the title sits where it always did.
330
342
  */
331
343
  .crewlet-document-title-field {
332
344
  display: block;
333
345
  width: 100%;
334
346
  min-width: 0;
335
- padding: 0 0 var(--spacing-1);
347
+ padding: 0 0 calc(var(--spacing-1) + 1px);
336
348
  border: 0;
337
- border-block-end: 2px solid transparent;
349
+ border-block-end: 1px solid transparent;
338
350
  border-radius: 0;
339
351
  background: none;
340
352
  outline: none;
353
+ /* A textarea of one row that grows with the title (DocumentTitleField sets
354
+ its height): no handle, no scrollbar, and the title's own wrapping. */
355
+ resize: none;
356
+ overflow: hidden;
357
+ white-space: pre-wrap;
341
358
  transition: border-color var(--motion-duration-fast) var(--motion-easing-default);
342
359
  }
343
360
 
@@ -352,12 +369,27 @@
352
369
 
353
370
  .crewlet-document-title-field:focus-visible {
354
371
  border-block-end-color: var(--color-focus);
372
+ box-shadow: 0 1px 0 var(--color-focus);
373
+ outline: 2px solid transparent;
374
+ }
375
+
376
+ :root[data-crewlet-focus='pointer'] .crewlet-document-title-field:focus-visible {
377
+ border-block-end-color: var(--color-border-selected);
378
+ box-shadow: none;
355
379
  }
356
380
 
357
381
  .crewlet-document-title-field[aria-invalid='true'] {
358
382
  border-block-end-color: var(--color-feedback-danger);
359
383
  }
360
384
 
385
+ .crewlet-document-title-field[aria-invalid='true']:focus-visible {
386
+ box-shadow: 0 1px 0 var(--color-feedback-danger);
387
+ }
388
+
389
+ :root[data-crewlet-focus='pointer'] .crewlet-document-title-field[aria-invalid='true']:focus-visible {
390
+ border-block-end-color: var(--color-feedback-danger);
391
+ }
392
+
361
393
  @media (prefers-reduced-motion: reduce) {
362
394
  .crewlet-document-title-field {
363
395
  transition: none;
@@ -2,7 +2,8 @@ import { richEditorLabels } from './chunk-CSQTDGTS.js';
2
2
  import { schema, readMarkdown, writeMarkdown } from './chunk-QH6VYJ3X.js';
3
3
  import { safeHref, MARKDOWN_CALLOUT_TONES } from './chunk-BAKPMH3S.js';
4
4
  import { Toolbar } from './chunk-PGRPNDWM.js';
5
- import { FormField, Input } from './chunk-6QFAK2WV.js';
5
+ import { FormField, Input } from './chunk-IUYUS2SO.js';
6
+ import './chunk-YSGLEHND.js';
6
7
  import './chunk-PQADV6P6.js';
7
8
  import { Menu } from './chunk-BUVCV3WI.js';
8
9
  import { placePopup, viewportBounds } from './chunk-OMV5W53A.js';
@@ -1,3 +1,3 @@
1
- export { FILTER_CHIP_ATTRIBUTE, FilterChip, FilterChipGroup } from '../chunk-5YLON2PW.js';
1
+ export { FILTER_CHIP_ATTRIBUTE, FilterChip, FilterChipGroup } from '../chunk-UYZZV4DZ.js';
2
2
  import '../chunk-BZFWDIV6.js';
3
3
  import '../chunk-ODEQTPFM.js';
@@ -81,9 +81,13 @@
81
81
  cursor: not-allowed;
82
82
  }
83
83
 
84
+ /* The selected fill, and the accent's lighter line rather than the selected
85
+ edge: on a pill this small the 0.6 edge, the fill and the accent ink were
86
+ three accent marks on one word. The ink is the mark that clears 4.5:1, and
87
+ the keyboard's 2px focus ring stays the only full-weight line. */
84
88
  .crewlet-filter-chip[aria-pressed='true'],
85
89
  .crewlet-filter-chip[aria-checked='true'] {
86
- background: var(--color-brand-accent-soft);
90
+ background: var(--color-surface-selected);
87
91
  border-color: var(--color-brand-accent-soft-strong);
88
92
  color: var(--color-brand-accent-ink);
89
93
  }
@@ -1,4 +1,5 @@
1
- export { FormField, FormRow, FormSection, Input, InputAffix, Label, ReadOnlyField, Textarea } from '../chunk-6QFAK2WV.js';
1
+ export { FormField, FormRow, FormSection, Input, InputAffix, Label, ReadOnlyField, Textarea } from '../chunk-IUYUS2SO.js';
2
+ import '../chunk-YSGLEHND.js';
2
3
  import '../chunk-PQADV6P6.js';
3
4
  import '../chunk-4FQT6ZAY.js';
4
5
  import '../chunk-BZFWDIV6.js';
@@ -81,14 +81,18 @@
81
81
  * forced-colors mode drops every box-shadow and keeps outlines: a ring drawn
82
82
  * as a shadow disappears for exactly the readers who most need one.
83
83
  *
84
- * It is ONE PIXEL, LAID EXACTLY ON THE BOUNDARY: the field's own hairline,
85
- * drawn in the focus colour, which is how the console's fields say focus. At
86
- * two pixels it was a heavy band round every box a caret landed in, and on a
87
- * form of them the field being typed in read as the loudest thing on the page.
88
- * Drawn on the boundary rather than outside it, a scroller cannot clip it and
89
- * the field does not grow a halo the moment a caret lands in it, which is what
90
- * a filter box in a toolbar of them did to the row it sits in. Every boxed
91
- * field in the package rings this way (`Input.test.tsx` holds them to it).
84
+ * It is TWO PIXELS FOR THE KEYBOARD AND ONE FOR A POINTER, laid over the
85
+ * boundary. Two pixels is the area WCAG 2.2's focus appearance asks of an
86
+ * indicator, and one pixel (the field's own hairline in the focus colour) was
87
+ * half of it for every reader tabbing through a form. But at two pixels round
88
+ * every box a caret landed in, a click into a title or a filter box drew a
89
+ * heavy band round the one thing the reader was already looking at, so the
90
+ * rule after this one narrows the ring where the document says the last move
91
+ * was a pointer. Drawn over the boundary rather than outside it, a scroller
92
+ * cannot clip it and the field does not grow a halo the moment a caret lands
93
+ * in it, which is what a filter box in a toolbar of them did to the row it
94
+ * sits in. Every boxed field in the package rings this way (`Input.test.tsx`
95
+ * holds them to it).
92
96
  *
93
97
  * THE BORDER IS LEFT ALONE. Recolouring it under the ring says nothing the
94
98
  * ring has not already said, and it is what cost the error state its own
@@ -104,10 +108,28 @@
104
108
  * on a pointer press as well as on a tab.
105
109
  */
106
110
  .crewlet-input:has(.crewlet-input__control:focus-visible) {
107
- outline: 1px solid var(--color-focus);
111
+ outline: 2px solid var(--color-focus);
108
112
  outline-offset: -1px;
109
113
  }
110
114
 
115
+ /*
116
+ * NARROWED FOR A POINTER. The ring above is the keyboard's: 2px, the area
117
+ * WCAG 2.2's focus appearance asks of an indicator, drawn over the boundary
118
+ * and one pixel into the box. A field matches :focus-visible on a click as
119
+ * well, and a reader who put the caret there with a pointer is already looking
120
+ * at it, so where the document says the last move was a pointer
121
+ * (`data-crewlet-focus`, kept by `trackFocusModality`, which every field
122
+ * starts) the ring is one pixel in the selected edge, the accent mixed toward
123
+ * the page: a page that focuses its first field on load drew the focus colour
124
+ * round it before anybody had touched a key. A refused field keeps its own
125
+ * colour under a pointer too (below). A document that tracks nothing keeps
126
+ * the keyboard's ring.
127
+ */
128
+ :root[data-crewlet-focus='pointer'] .crewlet-input:has(.crewlet-input__control:focus-visible) {
129
+ outline-width: 1px;
130
+ outline-color: var(--color-border-selected);
131
+ }
132
+
111
133
  .crewlet-input.is-error {
112
134
  border-color: var(--color-feedback-danger);
113
135
  }
@@ -128,6 +150,10 @@
128
150
  outline-color: var(--color-feedback-danger);
129
151
  }
130
152
 
153
+ :root[data-crewlet-focus='pointer'] .crewlet-input.is-error:has(.crewlet-input__control:focus-visible) {
154
+ outline-color: var(--color-feedback-danger);
155
+ }
156
+
131
157
  .crewlet-input.is-disabled {
132
158
  opacity: 0.6;
133
159
  cursor: not-allowed;
@@ -364,10 +390,16 @@
364
390
  on the control itself: a textarea is the field, with nothing wrapped round
365
391
  it and nothing focusable inside it. */
366
392
  .crewlet-textarea:focus-visible {
367
- outline: 1px solid var(--color-focus);
393
+ outline: 2px solid var(--color-focus);
368
394
  outline-offset: -1px;
369
395
  }
370
396
 
397
+ /* Narrowed and tinted for a pointer, as the text box's ring is. See Input.css. */
398
+ :root[data-crewlet-focus='pointer'] .crewlet-textarea:focus-visible {
399
+ outline-width: 1px;
400
+ outline-color: var(--color-border-selected);
401
+ }
402
+
371
403
  .crewlet-textarea.is-error {
372
404
  border-color: var(--color-feedback-danger);
373
405
  }
@@ -376,6 +408,10 @@
376
408
  outline-color: var(--color-feedback-danger);
377
409
  }
378
410
 
411
+ :root[data-crewlet-focus='pointer'] .crewlet-textarea.is-error:focus-visible {
412
+ outline-color: var(--color-feedback-danger);
413
+ }
414
+
379
415
  .crewlet-textarea.is-disabled {
380
416
  opacity: 0.6;
381
417
  cursor: not-allowed;
@@ -1,3 +1,3 @@
1
- export { LAYERS_LIST_LABELS, LayersList } from '../chunk-ONL54WMH.js';
1
+ export { LAYERS_LIST_LABELS, LayersList } from '../chunk-46RL3E54.js';
2
2
  import '../chunk-RKKO7QHH.js';
3
3
  import '../chunk-ODEQTPFM.js';
@@ -68,13 +68,26 @@
68
68
  color: var(--color-text-primary);
69
69
  }
70
70
 
71
- /* The accent edge every current row in the system takes, in the primary ink.
72
- A border, so forced colours keep it. */
71
+ /*
72
+ * THE PICKED ENTRY IS A SELECTION, drawn as the package draws a chosen
73
+ * option: the selected fill under the primary ink, as a canvas's layers panel
74
+ * marks the board picked on it. It used to take the accent rail a CURRENT row
75
+ * takes (the outline's heading, the page in the rail), which says "you are
76
+ * here" and beside a canvas read as a second selection ring. The rail's room
77
+ * is still held, so nothing moves, and forced colours draw it in the system's
78
+ * own selected colour, since they drop the fill.
79
+ */
73
80
  .crewlet-layers-list__item[aria-current='true'] {
74
- border-inline-start-color: var(--color-brand-accent);
81
+ background: var(--color-surface-selected);
75
82
  color: var(--color-text-primary);
76
83
  }
77
84
 
85
+ @media (forced-colors: active) {
86
+ .crewlet-layers-list__item[aria-current='true'] {
87
+ border-inline-start-color: Highlight;
88
+ }
89
+ }
90
+
78
91
  /* The ring lies inside the entry, where the scroller beside it cannot cut it. */
79
92
  .crewlet-layers-list__item:focus-visible {
80
93
  outline: 2px solid var(--color-focus);