@crewlethq/ui 0.35.1 → 0.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/README.md +90 -1
  2. package/dist/AgentHandoffPanel/AgentHandoffPanel.d.ts +99 -0
  3. package/dist/AgentHandoffPanel/index.d.ts +3 -0
  4. package/dist/AgentHandoffPanel/index.js +16 -0
  5. package/dist/AgentHandoffPanel-JWSW62GU.css +151 -0
  6. package/dist/ArrangeFrame/index.js +1 -1
  7. package/dist/{ArrangeFrame-3PLZAG22.css → ArrangeFrame-QXOQTFAH.css} +22 -5
  8. package/dist/ArrangeList/index.js +4 -3
  9. package/dist/ArtifactAccess/ArtifactAccess.d.ts +40 -0
  10. package/dist/ArtifactAccess/index.d.ts +3 -0
  11. package/dist/ArtifactAccess/index.js +2 -0
  12. package/dist/ArtifactAccess-Y53ZTRFS.css +31 -0
  13. package/dist/ArtifactBar/ArtifactBar.d.ts +2 -1
  14. package/dist/ArtifactBar/index.js +2 -2
  15. package/dist/{ArtifactBar-HV5AT4RG.css → ArtifactBar-FWPBBKQ5.css} +8 -0
  16. package/dist/ArtifactCard/ArtifactCard.d.ts +1 -6
  17. package/dist/ArtifactCard/index.d.ts +2 -1
  18. package/dist/ArtifactCard/index.js +4 -3
  19. package/dist/ArtifactCover/index.js +3 -2
  20. package/dist/ArtifactKindIllustration/ArtifactKindIllustration.d.ts +16 -7
  21. package/dist/ArtifactKindIllustration/index.js +1 -1
  22. package/dist/{ArtifactKindIllustration-5FPRJQ3P.css → ArtifactKindIllustration-KLFL7KBG.css} +37 -1
  23. package/dist/ArtifactMakeRow/ArtifactMakeRow.d.ts +39 -0
  24. package/dist/ArtifactMakeRow/index.d.ts +4 -0
  25. package/dist/ArtifactMakeRow/index.js +4 -0
  26. package/dist/ArtifactMakeRow-XBA2MPSY.css +167 -0
  27. package/dist/ArtifactNameCell/ArtifactNameCell.d.ts +37 -0
  28. package/dist/ArtifactNameCell/index.d.ts +4 -0
  29. package/dist/ArtifactNameCell/index.js +4 -0
  30. package/dist/ArtifactNameCell-RTVP4LO4.css +104 -0
  31. package/dist/ArtifactPanel/ArtifactPanel.d.ts +8 -1
  32. package/dist/ArtifactPanel/index.js +1 -1
  33. package/dist/{ArtifactPanel-HW3SU7CP.css → ArtifactPanel-KKUUIPEU.css} +9 -0
  34. package/dist/AuthLayout/index.js +2 -2
  35. package/dist/AvatarPicker/index.js +2 -2
  36. package/dist/Canvas/index.js +2 -2
  37. package/dist/CanvasBoard/CanvasBoard.d.ts +27 -13
  38. package/dist/CanvasBoard/index.d.ts +1 -1
  39. package/dist/CanvasBoard/index.js +4 -4
  40. package/dist/{CanvasBoard-5NNSKY6A.css → CanvasBoard-TS4P356F.css} +13 -6
  41. package/dist/CanvasToolbar/index.js +3 -3
  42. package/dist/Card/index.js +1 -1
  43. package/dist/{Card-KJOYHDTJ.css → Card-QOVASQNU.css} +17 -12
  44. package/dist/Checkbox/index.js +3 -2
  45. package/dist/ChoiceButtons/index.js +1 -1
  46. package/dist/{ChoiceButtons-DJ5EOGUA.css → ChoiceButtons-FLIFXFFS.css} +10 -0
  47. package/dist/ChoiceList/index.js +1 -1
  48. package/dist/{ChoiceList-RBL7FNQL.css → ChoiceList-EA2W6MOS.css} +36 -5
  49. package/dist/Combobox/index.js +3 -2
  50. package/dist/CommandPalette/index.js +3 -2
  51. package/dist/CommentThread/index.js +6 -5
  52. package/dist/Composer/Composer.d.ts +4 -0
  53. package/dist/Composer/index.js +3 -2
  54. package/dist/{Composer-ABGJIAIR.css → Composer-PXITWNEK.css} +26 -15
  55. package/dist/ConfirmField/index.js +3 -2
  56. package/dist/DataTable/index.js +4 -3
  57. package/dist/DataView/index.js +7 -6
  58. package/dist/DatasetSource/DatasetSource.d.ts +4 -0
  59. package/dist/DatasetSource/index.js +1 -1
  60. package/dist/{DatasetSource-XFPZBRXL.css → DatasetSource-SMGX4PS5.css} +38 -4
  61. package/dist/DateTimePicker/index.js +2 -1
  62. package/dist/{DateTimePicker-HG2KQXQ6.css → DateTimePicker-2IVTKFV2.css} +15 -2
  63. package/dist/DocTabsEditor/index.js +3 -2
  64. package/dist/Document/Document.d.ts +15 -3
  65. package/dist/Document/index.js +2 -1
  66. package/dist/{Document-JUGCSQ4L.css → Document-YFWTWXJP.css} +34 -2
  67. package/dist/{Editor-BVQHBF7L.js → Editor-HORWMUM3.js} +2 -1
  68. package/dist/FilterChip/index.js +1 -1
  69. package/dist/{FilterChip-EZ4QMW4E.css → FilterChip-VL33P3JL.css} +5 -1
  70. package/dist/Input/index.js +2 -1
  71. package/dist/{Input-GBZSFXLU.css → Input-ABGOFENS.css} +46 -10
  72. package/dist/LayersList/index.js +1 -1
  73. package/dist/{LayersList-NQZEIPZB.css → LayersList-TBNF4XGL.css} +16 -3
  74. package/dist/LinkInterstitial/index.js +2 -2
  75. package/dist/ListInput/index.js +3 -2
  76. package/dist/LivePreview/LivePreview.d.ts +120 -28
  77. package/dist/LivePreview/budget.d.ts +64 -20
  78. package/dist/LivePreview/index.d.ts +6 -4
  79. package/dist/LivePreview/index.js +1 -1
  80. package/dist/LivePreview/stills.d.ts +57 -0
  81. package/dist/LivePreview-BROGKR4N.css +113 -0
  82. package/dist/PresenterView/index.js +2 -2
  83. package/dist/PrincipalPicker/index.js +4 -3
  84. package/dist/RichEditor/index.js +1 -1
  85. package/dist/Select/index.js +2 -1
  86. package/dist/{Select-A54YS5EP.css → Select-W3CHTZXP.css} +18 -2
  87. package/dist/ShareDialog/index.js +3 -2
  88. package/dist/SheetColumnEditor/index.js +6 -5
  89. package/dist/SheetGrid/index.js +3 -3
  90. package/dist/SlideCompare/index.js +2 -2
  91. package/dist/SlideFilmstrip/index.js +2 -2
  92. package/dist/{SlideFilmstrip-4ITZLMO4.css → SlideFilmstrip-PAT7P4OG.css} +26 -7
  93. package/dist/SlideGrid/index.js +2 -2
  94. package/dist/{SlideGrid-S4LTJ4UU.css → SlideGrid-FJA33DV4.css} +11 -1
  95. package/dist/SlideStage/index.js +1 -1
  96. package/dist/{SlideStage-S2FISF4C.css → SlideStage-ZTTEQSS2.css} +4 -2
  97. package/dist/SourceEditor/index.js +2 -1
  98. package/dist/{SourceEditor-G2C3STPX.css → SourceEditor-QAYE2JS6.css} +19 -12
  99. package/dist/Switcher/index.js +4 -3
  100. package/dist/TagsInput/index.js +2 -1
  101. package/dist/{TagsInput-XMXTI5Q4.css → TagsInput-7EGBBXHS.css} +7 -1
  102. package/dist/ThemeGallery/index.js +1 -1
  103. package/dist/{ThemeGallery-HSUKBDWY.css → ThemeGallery-X35Y25EX.css} +26 -5
  104. package/dist/TimeWindowPicker/index.js +4 -3
  105. package/dist/{TimeWindowPicker-T763GLXH.css → TimeWindowPicker-DEFDV77Z.css} +15 -2
  106. package/dist/TreeCanvas/index.js +3 -3
  107. package/dist/VersionTimeline/index.js +2 -2
  108. package/dist/{chunk-V43UVX4H.js → chunk-27GD7LVR.js} +1 -1
  109. package/dist/{chunk-6JVRY5DQ.js → chunk-44WJLPQS.js} +2 -2
  110. package/dist/{chunk-ONL54WMH.js → chunk-46RL3E54.js} +1 -1
  111. package/dist/{chunk-UHJQDFKQ.js → chunk-4ZJLOKSS.js} +1 -1
  112. package/dist/{chunk-ACA27MZH.js → chunk-5QXRI35B.js} +1 -1
  113. package/dist/{chunk-LL5AFXU7.js → chunk-5RT5O4JR.js} +1 -1
  114. package/dist/{chunk-GMU6SQ6B.js → chunk-66NGUD5S.js} +2 -2
  115. package/dist/{chunk-3Y56GQPM.js → chunk-7VAUGG6B.js} +1 -1
  116. package/dist/{chunk-2CQLNML5.js → chunk-AOLCZDZ6.js} +3 -1
  117. package/dist/{chunk-NKZCJRKO.js → chunk-APDKUGSH.js} +2 -2
  118. package/dist/chunk-BGLKLXL3.js +29 -0
  119. package/dist/{chunk-Z6VW6CXX.js → chunk-BIQDJOJZ.js} +1 -1
  120. package/dist/{chunk-YSJC7AZC.js → chunk-BWOIUOO3.js} +1 -1
  121. package/dist/{chunk-PI7HKLIT.js → chunk-D7GNNID2.js} +3 -1
  122. package/dist/chunk-EAKC24BW.js +51 -0
  123. package/dist/{chunk-CCLNGVCM.js → chunk-EARDAJQY.js} +1 -1
  124. package/dist/chunk-EOQFPZEE.js +138 -0
  125. package/dist/{chunk-THROPJZC.js → chunk-F23N4MVU.js} +1 -1
  126. package/dist/{chunk-J6YZ4IYV.js → chunk-FG4O64DV.js} +3 -3
  127. package/dist/{chunk-E35CMI5D.js → chunk-FHHYXZSP.js} +31 -13
  128. package/dist/{chunk-AYB6AYNH.js → chunk-GMLAKNFY.js} +1 -1
  129. package/dist/{chunk-ZB5O3ELS.js → chunk-GRYZ5EP3.js} +4 -2
  130. package/dist/{chunk-QFNWMWWY.js → chunk-GS7ZTHPF.js} +4 -4
  131. package/dist/{chunk-ILAEBSLJ.js → chunk-H5NOLRGH.js} +2 -2
  132. package/dist/{chunk-W3UVOZKL.js → chunk-IPAU6FLH.js} +6 -2
  133. package/dist/{chunk-6QFAK2WV.js → chunk-IUYUS2SO.js} +4 -1
  134. package/dist/{chunk-22CQQDFW.js → chunk-JML75PGJ.js} +1 -1
  135. package/dist/{chunk-AXBRWRGV.js → chunk-JQLS3MZB.js} +1 -1
  136. package/dist/{chunk-FGYET26P.js → chunk-KJW2AS57.js} +1 -1
  137. package/dist/{chunk-QIXMNOBD.js → chunk-KYZMN6I6.js} +2 -2
  138. package/dist/{chunk-73A7D5CE.js → chunk-L4WZSVMT.js} +3 -1
  139. package/dist/{chunk-ULPL26BU.js → chunk-N5SKHIAP.js} +1 -1
  140. package/dist/{chunk-LV4APO72.js → chunk-NQGPD6NX.js} +1 -1
  141. package/dist/{chunk-7UYONN6K.js → chunk-OHA6WSAG.js} +6 -11
  142. package/dist/chunk-P5VGSVWG.js +39 -0
  143. package/dist/chunk-P6WFZDKS.js +111 -0
  144. package/dist/{chunk-CPEPST4S.js → chunk-PJIPUEJ3.js} +1 -1
  145. package/dist/{chunk-QS4ZGTEU.js → chunk-PPFX6GRK.js} +1 -1
  146. package/dist/{chunk-7DZDSSJS.js → chunk-RH2NCQBZ.js} +5 -4
  147. package/dist/{chunk-3VD3G3IL.js → chunk-T5RQGI6O.js} +1 -1
  148. package/dist/{chunk-F2KY4RLI.js → chunk-TVRBQMIX.js} +5 -3
  149. package/dist/{chunk-W7QBBKUE.js → chunk-UBZDYOCA.js} +7 -3
  150. package/dist/{chunk-QEFHYUCY.js → chunk-UWGUKMBK.js} +1 -1
  151. package/dist/{chunk-5YLON2PW.js → chunk-UYZZV4DZ.js} +1 -1
  152. package/dist/{chunk-BQ7AKL2N.js → chunk-VKKUGZ3G.js} +3 -1
  153. package/dist/{chunk-DEJHAOC5.js → chunk-WMXAX6VA.js} +1 -1
  154. package/dist/{chunk-VDPJGP4Q.js → chunk-WX2NIG4G.js} +1 -1
  155. package/dist/chunk-WYKWXRJ4.js +456 -0
  156. package/dist/{chunk-ZU3DUXD2.js → chunk-WZGYIVYH.js} +1 -1
  157. package/dist/{chunk-HUVG2FFT.js → chunk-Y5BD4MTE.js} +4 -2
  158. package/dist/chunk-YSGLEHND.js +56 -0
  159. package/dist/generated/index.d.ts +4 -0
  160. package/dist/generated/index.js +105 -100
  161. package/dist/index.js +105 -100
  162. package/dist/styles.css +1036 -163
  163. package/dist/utils/focusModality.d.ts +41 -0
  164. package/dist/utils/index.d.ts +2 -0
  165. package/dist/utils/index.js +2 -1
  166. package/package.json +3 -3
  167. package/dist/LivePreview-SRO7KHO4.css +0 -65
  168. package/dist/chunk-KF6YGL4B.js +0 -160
  169. package/dist/chunk-TYKQ33CL.js +0 -35
  170. package/dist/{chunk-3P4Y5RX6.js → chunk-4BYHAOHH.js} +1 -1
  171. package/dist/{chunk-KD2IRYCT.js → chunk-5WDXPHEW.js} +1 -1
  172. package/dist/{chunk-OSFA5ROT.js → chunk-FEJANUZK.js} +0 -0
  173. package/dist/{chunk-FJJHD73S.js → chunk-GYBDPCRC.js} +1 -1
  174. package/dist/{chunk-VHZ3AXJD.js → chunk-NQCY44B3.js} +1 -1
  175. package/dist/{chunk-3WCNHYXE.js → chunk-PNNYVN52.js} +0 -0
  176. package/dist/{chunk-FF5OZV77.js → chunk-W3HYWD63.js} +2 -2
@@ -1,11 +1,11 @@
1
- export { BOARD_TITLE_MIN_WIDTH, CANVAS_BOARD_MAX_LIVE, CANVAS_BOARD_MIN_LIVE_WIDTH, CANVAS_BOARD_MIN_ZOOM, CANVAS_NOTE_COLORS, CanvasBoard, TITLE_GLYPH_EM, boardRoom, liveBoards, titleSize } from '../chunk-E35CMI5D.js';
1
+ export { BOARD_NAME_MIN_CHARS, CANVAS_BOARD_MAX_LIVE, CANVAS_BOARD_MIN_LIVE_WIDTH, CANVAS_BOARD_MIN_ZOOM, CANVAS_NOTE_COLORS, CanvasBoard, TITLE_GLYPH_EM, boardName, boardRoom, liveBoards, titleSize } from '../chunk-FHHYXZSP.js';
2
2
  import '../chunk-5SZGKSGL.js';
3
- import '../chunk-3Y56GQPM.js';
3
+ import '../chunk-7VAUGG6B.js';
4
4
  import '../chunk-PGRPNDWM.js';
5
- import '../chunk-3P4Y5RX6.js';
5
+ import '../chunk-4BYHAOHH.js';
6
6
  import '../chunk-LM3ISVJA.js';
7
- import '../chunk-SMBKXWML.js';
8
7
  import '../chunk-6ZJ3N7QI.js';
8
+ import '../chunk-SMBKXWML.js';
9
9
  import '../chunk-OMV5W53A.js';
10
10
  import '../chunk-R25RGPUB.js';
11
11
  import '../chunk-OG6CL3EB.js';
@@ -82,19 +82,26 @@
82
82
  }
83
83
 
84
84
  /*
85
- * HOVER, then SELECTION, in the accent: one screen pixel and then two, over
86
- * the hairline. Hovering a board's name is hovering its board, which is how a
87
- * reader finds the board a name belongs to on a crowded canvas.
85
+ * HOVER, then SELECTION: one screen pixel each, over the hairline. Hover is
86
+ * the selected edge, the accent mixed toward the canvas, so pointing at a
87
+ * board previews the pick without claiming it; selection is the full accent,
88
+ * crisp, with its four corners drawn, which are what say "this one" on a
89
+ * canvas where a board's own content can be any colour. It was two pixels,
90
+ * the focus ring's weight in the focus ring's hue, so a picked board and the
91
+ * board the keyboard was on read alike; the 2px ring is the live board's now
92
+ * alone ([data-active], below), which takes the pointer like a focused frame.
93
+ * Hovering a board's name is hovering its board, which is how a reader finds
94
+ * the board a name belongs to on a crowded canvas.
88
95
  */
89
96
  .crewlet-canvas-board__board:hover .crewlet-canvas-board__body,
90
97
  .crewlet-canvas-board__note:hover {
91
- outline: calc(1px * var(--crewlet-canvas-board-unzoom)) solid var(--color-brand-accent);
98
+ outline: calc(1px * var(--crewlet-canvas-board-unzoom)) solid var(--color-border-selected);
92
99
  outline-offset: 0;
93
100
  }
94
101
 
95
102
  .crewlet-canvas-board__board[data-selected] .crewlet-canvas-board__body,
96
103
  .crewlet-canvas-board__note[data-selected] {
97
- outline: calc(2px * var(--crewlet-canvas-board-unzoom)) solid var(--color-brand-accent);
104
+ outline: calc(1px * var(--crewlet-canvas-board-unzoom)) solid var(--color-brand-accent);
98
105
  outline-offset: 0;
99
106
  }
100
107
 
@@ -202,7 +209,7 @@
202
209
  transform-origin: bottom left;
203
210
  }
204
211
 
205
- /* A board drawn too narrow to name goes unnamed (`boardRoom`). */
212
+ /* A board drawn too narrow for even its number goes unnamed (`boardName`). */
206
213
  .crewlet-canvas-board__board[data-untitled] > .crewlet-canvas-board__chrome {
207
214
  display: none;
208
215
  }
@@ -1,9 +1,9 @@
1
- export { CanvasToolbar, toolForKey } from '../chunk-3Y56GQPM.js';
1
+ export { CanvasToolbar, toolForKey } from '../chunk-7VAUGG6B.js';
2
2
  import '../chunk-PGRPNDWM.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,4 +1,4 @@
1
- export { Card } from '../chunk-ACA27MZH.js';
1
+ export { Card } from '../chunk-5QXRI35B.js';
2
2
  export { useCardHeaderSlot } from '../chunk-AV2DXAEL.js';
3
3
  import '../chunk-BHHIIK3M.js';
4
4
  import '../chunk-PQADV6P6.js';
@@ -42,7 +42,7 @@
42
42
  * `box-shadow: <shadow>, none` is invalid at computed-value time, so the
43
43
  * declaration is dropped and the light card loses the elevation the list was
44
44
  * built around. Alone on a pseudo element the same token is valid in both
45
- * themes, and it composes with the selection ring rather than replacing
45
+ * themes, and it composes with a chosen card's edge rather than replacing
46
46
  * whichever was declared last, exactly as the rail does.
47
47
  */
48
48
  .crewlet-card--elevated::after {
@@ -116,8 +116,8 @@
116
116
  /*
117
117
  * THE FLUSH RECIPE. The slots reach the card's edges, and the clip is what
118
118
  * makes the header's hairline and a table's own corners follow the radius
119
- * instead of crossing it. The selection ring survives the clip because it is
120
- * an INSET shadow; an outset one would be cut off here.
119
+ * instead of crossing it. A chosen card's edge and fill survive the clip
120
+ * because they are its own border and background.
121
121
  */
122
122
  .crewlet-card--flush {
123
123
  overflow: hidden;
@@ -200,29 +200,34 @@
200
200
 
201
201
  /* One ring, over the card's own boundary rather than 2px off it, which is two
202
202
  edges with a gap between them: the rule every field keeps (see Input.css).
203
- A chosen card keeps an accent line inside the ring, since the selection
204
- ring below is two pixels deep and the focus ring covers one of them. */
203
+ On a chosen card it covers the selected edge, and the selected fill inside
204
+ it still says the card is chosen. */
205
205
  .crewlet-card.is-interactive:focus-visible {
206
206
  outline: 2px solid var(--color-focus);
207
207
  outline-offset: var(--size-focus-ring-inset-offset);
208
208
  }
209
209
 
210
210
  /*
211
- * Chosen. A ring rather than a tint, because a card carries its own surface
212
- * and a tint under it would change the ground every value on it was measured
213
- * against.
211
+ * Chosen, as every chosen option in the package is drawn: the selected edge
212
+ * (the accent mixed toward the card) over the selected fill. It was the full
213
+ * accent border under --shadow-selection, a second accent ring two pixels
214
+ * deep, which is the focus ring's weight in the focus ring's hue, so a grid
215
+ * of cards showed the pick and the keyboard's place alike. The fill is laid
216
+ * as an IMAGE over the card's own surface rather than in place of it, so the
217
+ * card keeps its ground and the tint composites over it, as it does over a
218
+ * row.
214
219
  */
215
220
  .crewlet-card.is-selected {
216
- box-shadow: var(--shadow-selection);
217
- border-color: var(--color-brand-accent);
221
+ border-color: var(--color-border-selected);
222
+ background-image: linear-gradient(var(--color-surface-selected), var(--color-surface-selected));
218
223
  }
219
224
 
220
225
  /* ---- Rails ------------------------------------------------------------- */
221
226
 
222
227
  /*
223
228
  * A state down the leading edge. Drawn as a pseudo element rather than a
224
- * border or an inset shadow, so it composes with the elevated shadow and the
225
- * selection ring instead of replacing whichever one was declared last.
229
+ * border or an inset shadow, so it composes with the elevated shadow and a
230
+ * chosen card's edge instead of replacing whichever one was declared last.
226
231
  */
227
232
  .crewlet-card--rail-info::before,
228
233
  .crewlet-card--rail-warning::before,
@@ -1,5 +1,6 @@
1
- export { Checkbox, CheckboxGroup } from '../chunk-CPEPST4S.js';
2
- import '../chunk-6QFAK2WV.js';
1
+ export { Checkbox, CheckboxGroup } from '../chunk-PJIPUEJ3.js';
2
+ import '../chunk-IUYUS2SO.js';
3
+ import '../chunk-YSGLEHND.js';
3
4
  import '../chunk-PQADV6P6.js';
4
5
  import '../chunk-4FQT6ZAY.js';
5
6
  import '../chunk-BZFWDIV6.js';
@@ -1,3 +1,3 @@
1
- export { ChoiceButtons } from '../chunk-YSJC7AZC.js';
1
+ export { ChoiceButtons } from '../chunk-BWOIUOO3.js';
2
2
  import '../chunk-BZFWDIV6.js';
3
3
  import '../chunk-ODEQTPFM.js';
@@ -36,6 +36,16 @@
36
36
  border-color var(--motion-duration-fast) var(--motion-easing-default);
37
37
  }
38
38
 
39
+ /*
40
+ * AN OPTION WITH A DETAIL STARTS AT ITS TOP. Laid out as tiles (a host's grid
41
+ * of columns), the options in one row stretch to the tallest, and centred
42
+ * text put a one-line detail's label lower than its neighbour's two-line
43
+ * one. A column of options is unchanged: each is as tall as its own text.
44
+ */
45
+ .crewlet-choice-buttons__option:has(.crewlet-choice-buttons__detail) {
46
+ align-items: flex-start;
47
+ }
48
+
39
49
  .crewlet-choice-buttons__option:hover:not([aria-disabled='true']) {
40
50
  background: var(--color-surface-elevated);
41
51
  border-color: var(--color-border-strong-hover);
@@ -1,2 +1,2 @@
1
- export { ChoiceList } from '../chunk-ZU3DUXD2.js';
1
+ export { ChoiceList } from '../chunk-WZGYIVYH.js';
2
2
  import '../chunk-ODEQTPFM.js';
@@ -1,7 +1,9 @@
1
1
  /*
2
2
  * A short list of answers in one bordered box: a radio, the label with a line
3
3
  * of detail under it, and a tag at the row's end. The selected row takes the
4
- * accent's soft fill, so the answer reads at a glance without the radio.
4
+ * selected fill (the accent's soft tint), so the answer reads at a glance; the
5
+ * radio is the mark that clears 3:1, and no row is ever ringed in the accent,
6
+ * which is the focus ring's colour.
5
7
  */
6
8
  .crewlet-choice-list {
7
9
  /* The platform's radio, sized here so a panel can line up with the text beside it. */
@@ -66,21 +68,47 @@
66
68
  }
67
69
 
68
70
  .crewlet-choice-list__row.is-checked {
69
- background: var(--color-brand-accent-soft);
71
+ background: var(--color-surface-selected);
70
72
  }
71
73
 
72
74
  .crewlet-choice-list.is-disabled .crewlet-choice-list__row {
73
75
  cursor: not-allowed;
74
76
  }
75
77
 
78
+ /*
79
+ * THE RADIO IS DRAWN, not the platform's. In a dark palette the platform's
80
+ * own radio fills an unchosen answer with a grey disc, which beside the one
81
+ * chosen read as a second, muted choice. Drawn here, an unchosen answer is an
82
+ * empty ring on the control boundary (3:1 on every ground) and the chosen one
83
+ * the accent ring round an accent dot. Forced colours hand it back to the
84
+ * platform, which draws it in the system's own colours.
85
+ */
76
86
  .crewlet-choice-list__radio {
87
+ appearance: none;
88
+ display: inline-grid;
89
+ place-content: center;
90
+ flex: none;
91
+ box-sizing: border-box;
77
92
  width: var(--crewlet-choice-list-radio-size);
78
93
  height: var(--crewlet-choice-list-radio-size);
79
94
  margin: 3px 0 0;
80
- accent-color: var(--color-brand-accent);
95
+ border: 1px solid var(--color-border-control);
96
+ border-radius: 50%;
97
+ background: transparent;
81
98
  cursor: inherit;
82
99
  }
83
100
 
101
+ .crewlet-choice-list__radio:checked {
102
+ border-color: var(--color-brand-accent);
103
+ background: radial-gradient(circle, var(--color-brand-accent) 0 3px, transparent 3.5px);
104
+ }
105
+
106
+ @media (forced-colors: active) {
107
+ .crewlet-choice-list__radio {
108
+ appearance: auto;
109
+ }
110
+ }
111
+
84
112
  /* A radio draws its own edge, so the ring sits on it, as a checkbox's does. */
85
113
  .crewlet-choice-list__radio:focus-visible {
86
114
  outline: 2px solid var(--color-focus);
@@ -105,13 +133,16 @@
105
133
  overflow-wrap: anywhere;
106
134
  }
107
135
 
136
+ /* A tag says something ABOUT an answer ("Suggested"), so it is set in the
137
+ tertiary ink: in the accent ink it was a second accent mark on the chosen
138
+ row, beside the radio and the fill that already say which one is chosen. */
108
139
  .crewlet-choice-list__tag {
109
140
  padding-top: 2px;
110
141
  font-size: var(--font-size-2xs);
111
142
  font-weight: 500;
112
143
  letter-spacing: 0.05em;
113
144
  text-transform: uppercase;
114
- color: var(--color-brand-accent-ink);
145
+ color: var(--color-text-tertiary);
115
146
  white-space: nowrap;
116
147
  }
117
148
 
@@ -131,7 +162,7 @@
131
162
  padding: var(--spacing-1) var(--spacing-2) var(--spacing-3) calc(var(--spacing-2) + var(--crewlet-choice-list-radio-size) + var(--spacing-3));
132
163
  border-end-start-radius: var(--radius-sm);
133
164
  border-end-end-radius: var(--radius-sm);
134
- background: var(--color-brand-accent-soft);
165
+ background: var(--color-surface-selected);
135
166
  }
136
167
 
137
168
  .crewlet-choice-list__footer {
@@ -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,7 +1,8 @@
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
+ import '../chunk-YSGLEHND.js';
5
6
  import '../chunk-SMBKXWML.js';
6
7
  import '../chunk-BHHIIK3M.js';
7
8
  import '../chunk-PQADV6P6.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-44WJLPQS.js';
2
+ import '../chunk-P6WFZDKS.js';
5
3
  import '../chunk-CI3VPIJN.js';
6
4
  import '../chunk-3CZ7XAVY.js';
7
5
  import '../chunk-EUCC37WY.js';
8
6
  import '../chunk-5AQBPHZD.js';
9
7
  import '../chunk-PZKHBB7D.js';
10
- import '../chunk-TYKQ33CL.js';
8
+ import '../chunk-RH2NCQBZ.js';
9
+ import '../chunk-IUYUS2SO.js';
10
+ import '../chunk-YSGLEHND.js';
11
+ import '../chunk-SMBKXWML.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,5 +1,6 @@
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
+ import '../chunk-YSGLEHND.js';
3
4
  import '../chunk-SMBKXWML.js';
4
5
  import '../chunk-PQADV6P6.js';
5
6
  import '../chunk-4FQT6ZAY.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-JML75PGJ.js';
2
2
  import '../chunk-STJ7QBC3.js';
3
3
  import '../chunk-DTIW4CHZ.js';
4
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,7 +1,7 @@
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-GS7ZTHPF.js';
2
2
  import '../chunk-HOXGBLEY.js';
3
- import '../chunk-22CQQDFW.js';
4
- import '../chunk-73A7D5CE.js';
3
+ import '../chunk-JML75PGJ.js';
4
+ import '../chunk-L4WZSVMT.js';
5
5
  import '../chunk-STJ7QBC3.js';
6
6
  import '../chunk-DTIW4CHZ.js';
7
7
  import '../chunk-XEGZHHRH.js';
@@ -9,12 +9,13 @@ import '../chunk-F73MC7EZ.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-YSGLEHND.js';
18
+ import '../chunk-SMBKXWML.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,6 +1,7 @@
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';
5
6
  import '../chunk-BUVCV3WI.js';
6
7
  import '../chunk-OMV5W53A.js';