@crewlethq/ui 0.37.0 → 0.38.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 (210) hide show
  1. package/README.md +58 -0
  2. package/dist/Accordion/index.js +1 -1
  3. package/dist/AgentHandoffPanel/index.js +5 -5
  4. package/dist/AppShell/index.d.ts +1 -0
  5. package/dist/AppShell/index.js +5 -3
  6. package/dist/{AppShell-JTSEOA57.css → AppShell-NDU4XMGF.css} +51 -6
  7. package/dist/ArrangeList/index.js +4 -4
  8. package/dist/ArtifactBar/index.js +9 -7
  9. package/dist/ArtifactCard/index.js +2 -2
  10. package/dist/ArtifactCover/index.js +3 -3
  11. package/dist/ArtifactMakeRow/ArtifactMakeRow.d.ts +3 -1
  12. package/dist/ArtifactMakeRow/index.d.ts +1 -0
  13. package/dist/ArtifactMakeRow/index.js +2 -1
  14. package/dist/{ArtifactMakeRow-XBA2MPSY.css → ArtifactMakeRow-6UX2LTF7.css} +49 -6
  15. package/dist/AuthLayout/index.js +2 -2
  16. package/dist/AvatarPicker/index.js +8 -6
  17. package/dist/Canvas/index.js +4 -3
  18. package/dist/CanvasBoard/index.js +7 -6
  19. package/dist/CanvasToolbar/index.js +6 -5
  20. package/dist/Card/index.js +1 -1
  21. package/dist/{Card-QOVASQNU.css → Card-G2ZGT5Z6.css} +43 -0
  22. package/dist/ChangeMark/index.js +4 -3
  23. package/dist/Checkbox/index.js +3 -3
  24. package/dist/ChoiceList/index.d.ts +1 -0
  25. package/dist/ChoiceList/index.js +2 -1
  26. package/dist/{ChoiceList-EA2W6MOS.css → ChoiceList-KFYFAECP.css} +26 -4
  27. package/dist/Combobox/index.d.ts +1 -0
  28. package/dist/Combobox/index.js +6 -5
  29. package/dist/{Combobox-4FUVYIE7.css → Combobox-YDONYDTM.css} +2 -1
  30. package/dist/CommandPalette/index.d.ts +1 -0
  31. package/dist/CommandPalette/index.js +7 -6
  32. package/dist/{CommandPalette-7CFGVBND.css → CommandPalette-TOZYLWLE.css} +5 -1
  33. package/dist/CommentThread/index.js +5 -5
  34. package/dist/Composer/index.js +3 -3
  35. package/dist/{Composer-PXITWNEK.css → Composer-TXULCPPV.css} +1 -1
  36. package/dist/ConfirmField/index.js +3 -3
  37. package/dist/DataTable/index.js +7 -7
  38. package/dist/DataView/index.js +12 -12
  39. package/dist/DatasetSource/index.d.ts +1 -0
  40. package/dist/DatasetSource/index.js +3 -2
  41. package/dist/{DatasetSource-SMGX4PS5.css → DatasetSource-FFKTD3ZU.css} +16 -1
  42. package/dist/DateTimePicker/index.js +4 -4
  43. package/dist/{DateTimePicker-2IVTKFV2.css → DateTimePicker-3A7JIIVL.css} +3 -3
  44. package/dist/DescriptionList/DescriptionList.d.ts +12 -1
  45. package/dist/DescriptionList/index.js +1 -1
  46. package/dist/{DescriptionList-IXMRCSMK.css → DescriptionList-DEZISDLQ.css} +8 -1
  47. package/dist/Disclosure/index.js +1 -1
  48. package/dist/{Disclosure-VKBJJIZ7.css → Disclosure-P4FH3C35.css} +28 -2
  49. package/dist/DocTabsEditor/index.js +6 -6
  50. package/dist/Document/index.js +2 -2
  51. package/dist/{Document-YFWTWXJP.css → Document-TZ2NBLOR.css} +2 -2
  52. package/dist/{Editor-HORWMUM3.js → Editor-QV4JP242.js} +6 -6
  53. package/dist/FactList/index.js +4 -3
  54. package/dist/FollowBanner/index.js +3 -2
  55. package/dist/HitArea/hitArea.d.ts +7 -0
  56. package/dist/HitArea/index.d.ts +2 -0
  57. package/dist/HitArea/index.js +2 -0
  58. package/dist/HitArea-QUOS6ZDJ.css +35 -0
  59. package/dist/HuePicker/index.js +4 -3
  60. package/dist/Input/index.js +2 -2
  61. package/dist/{Input-ABGOFENS.css → Input-OQZBCRX5.css} +9 -4
  62. package/dist/Layer/index.js +2 -1
  63. package/dist/LinkInterstitial/index.js +4 -3
  64. package/dist/ListInput/index.js +5 -5
  65. package/dist/Listbox/index.js +3 -2
  66. package/dist/{Listbox-6WJNJQVQ.css → Listbox-NQV6E3FS.css} +3 -0
  67. package/dist/LivePreview/index.js +1 -1
  68. package/dist/{LivePreview-BROGKR4N.css → LivePreview-KQEDMQCY.css} +13 -0
  69. package/dist/MarkdownEditor/index.js +8 -6
  70. package/dist/Menu/index.js +3 -2
  71. package/dist/MergeConflicts/index.js +5 -4
  72. package/dist/Modal/index.js +3 -2
  73. package/dist/OrgTable/index.js +4 -3
  74. package/dist/Popover/index.js +3 -2
  75. package/dist/PresenterView/index.js +4 -3
  76. package/dist/PricingCard/index.js +2 -2
  77. package/dist/PrincipalPicker/index.js +7 -6
  78. package/dist/RichEditor/index.js +1 -1
  79. package/dist/SegmentedControl/index.d.ts +1 -0
  80. package/dist/SegmentedControl/index.js +4 -3
  81. package/dist/{SegmentedControl-FLI45IOW.css → SegmentedControl-B7XCUOML.css} +9 -2
  82. package/dist/Select/index.d.ts +1 -0
  83. package/dist/Select/index.js +5 -4
  84. package/dist/{Select-W3CHTZXP.css → Select-F526HLNR.css} +5 -4
  85. package/dist/ShareDialog/index.js +7 -6
  86. package/dist/SheetColumnEditor/index.js +12 -11
  87. package/dist/SheetGrid/index.js +9 -8
  88. package/dist/{SheetGrid-YRDXTIIZ.css → SheetGrid-XK7T7M34.css} +9 -4
  89. package/dist/Shortcut/index.js +3 -2
  90. package/dist/SidebarNav/index.d.ts +1 -0
  91. package/dist/SidebarNav/index.js +2 -1
  92. package/dist/{SidebarNav-KF66MLOM.css → SidebarNav-7SGUZYKK.css} +21 -2
  93. package/dist/SlideCompare/index.js +4 -3
  94. package/dist/SlideFilmstrip/index.js +6 -5
  95. package/dist/SlideGrid/index.js +4 -3
  96. package/dist/SlideStage/index.js +3 -2
  97. package/dist/SourceEditor/index.js +2 -2
  98. package/dist/{SourceEditor-QAYE2JS6.css → SourceEditor-OKPWPFXK.css} +1 -1
  99. package/dist/StatGroup/StatGroup.d.ts +11 -7
  100. package/dist/StatGroup/index.js +1 -1
  101. package/dist/StatGroup-DOFHX5QJ.css +168 -0
  102. package/dist/Switcher/index.js +8 -8
  103. package/dist/TableCells/index.js +2 -2
  104. package/dist/Tabs/index.d.ts +1 -0
  105. package/dist/Tabs/index.js +2 -1
  106. package/dist/{Tabs-MMZXV5EF.css → Tabs-WIF7457H.css} +20 -3
  107. package/dist/Tag/index.js +1 -1
  108. package/dist/{Tag-SRGTK5KI.css → Tag-2DQOVE6W.css} +15 -5
  109. package/dist/TagsInput/index.js +6 -6
  110. package/dist/{TagsInput-7EGBBXHS.css → TagsInput-CLFHP6I2.css} +1 -1
  111. package/dist/ThemeGallery/index.js +4 -3
  112. package/dist/ThemeSwitcher/index.js +5 -4
  113. package/dist/TimeWindowPicker/index.js +8 -7
  114. package/dist/{TimeWindowPicker-DEFDV77Z.css → TimeWindowPicker-I3HXC74I.css} +3 -3
  115. package/dist/Toaster/index.js +2 -1
  116. package/dist/Toolbar/index.js +3 -2
  117. package/dist/Tooltip/index.js +3 -2
  118. package/dist/TreeCanvas/index.js +5 -4
  119. package/dist/TreeGrid/index.js +3 -2
  120. package/dist/VersionCompare/index.js +5 -4
  121. package/dist/{chunk-CCAXYHQS.js → chunk-2QZ2VPHR.js} +3 -1
  122. package/dist/chunk-2YTOOH3A.js +4 -0
  123. package/dist/{chunk-QWNVSR6G.js → chunk-3KYVFG47.js} +1 -1
  124. package/dist/{chunk-H5NOLRGH.js → chunk-3V5T5K5H.js} +1 -1
  125. package/dist/{chunk-BIQDJOJZ.js → chunk-3ZUINC7C.js} +2 -2
  126. package/dist/{chunk-K4VP6ZKE.js → chunk-4BJK7FE5.js} +1 -1
  127. package/dist/chunk-4ISUIS6F.js +3 -0
  128. package/dist/{chunk-FG4O64DV.js → chunk-4L2BWSHR.js} +5 -5
  129. package/dist/{chunk-PLTCDSTU.js → chunk-4LRAJXHL.js} +1 -1
  130. package/dist/{chunk-4ZJLOKSS.js → chunk-5BUOMF6N.js} +2 -2
  131. package/dist/{chunk-47JQAGRV.js → chunk-66X5WDKE.js} +1 -1
  132. package/dist/{chunk-66NGUD5S.js → chunk-6NNY5WBF.js} +8 -7
  133. package/dist/{chunk-5RT5O4JR.js → chunk-7CGPPAYR.js} +1 -1
  134. package/dist/{chunk-F73MC7EZ.js → chunk-7KHM2FZH.js} +2 -2
  135. package/dist/{chunk-VL6CUNSX.js → chunk-7SDUKCNW.js} +4 -1
  136. package/dist/{chunk-JML75PGJ.js → chunk-A23KDROH.js} +3 -3
  137. package/dist/{chunk-PJIPUEJ3.js → chunk-AXS6MBNH.js} +1 -1
  138. package/dist/{chunk-2FPENTCF.js → chunk-AYHIF6DH.js} +1 -1
  139. package/dist/{chunk-J6ON5SYE.js → chunk-B5J23C73.js} +1 -1
  140. package/dist/{chunk-7VAUGG6B.js → chunk-B5UHX5UC.js} +2 -2
  141. package/dist/{chunk-AOLCZDZ6.js → chunk-BH52LIY6.js} +5 -5
  142. package/dist/{chunk-WX2NIG4G.js → chunk-BJI3RFXG.js} +1 -1
  143. package/dist/{chunk-JXRI5YD2.js → chunk-BT5H2THK.js} +2 -1
  144. package/dist/{chunk-FHHYXZSP.js → chunk-C7OKDYBH.js} +2 -2
  145. package/dist/{chunk-JBUMD6DS.js → chunk-CFGGE3HO.js} +1 -1
  146. package/dist/{chunk-WYKWXRJ4.js → chunk-CQFQGAZI.js} +1 -1
  147. package/dist/{chunk-GMLAKNFY.js → chunk-D2OL3ZSS.js} +1 -1
  148. package/dist/{chunk-D7GNNID2.js → chunk-D3EJSLCL.js} +2 -2
  149. package/dist/{chunk-BUVCV3WI.js → chunk-D6FEHY5G.js} +3 -2
  150. package/dist/{chunk-4BYHAOHH.js → chunk-DAERKOOG.js} +3 -2
  151. package/dist/{chunk-PGZ2R3ON.js → chunk-DYB66CNM.js} +23 -7
  152. package/dist/{chunk-PPFX6GRK.js → chunk-EAEJ7CDM.js} +6 -3
  153. package/dist/{chunk-WZGYIVYH.js → chunk-EAQLI2SO.js} +4 -2
  154. package/dist/{chunk-GYBDPCRC.js → chunk-ECGGQX2H.js} +2 -2
  155. package/dist/{chunk-RH2NCQBZ.js → chunk-ETVEGR2Y.js} +2 -2
  156. package/dist/{chunk-SUXP4OBT.js → chunk-F4LPQA4E.js} +1 -1
  157. package/dist/{chunk-KYZMN6I6.js → chunk-FBW3Q2OY.js} +2 -2
  158. package/dist/{chunk-JQLS3MZB.js → chunk-FWBKMPNR.js} +1 -1
  159. package/dist/{chunk-OOWPSBIS.js → chunk-GMW4ZHST.js} +3 -3
  160. package/dist/{chunk-R25RGPUB.js → chunk-H5XTJ7GJ.js} +2 -3
  161. package/dist/{chunk-6ZJ3N7QI.js → chunk-I33UIUZD.js} +1 -1
  162. package/dist/{chunk-GRYZ5EP3.js → chunk-IPWU6ERC.js} +14 -3
  163. package/dist/{chunk-W3HYWD63.js → chunk-JZPK4IXR.js} +16 -9
  164. package/dist/{chunk-K3IJQNB7.js → chunk-KHJIEPZV.js} +3 -2
  165. package/dist/{chunk-GFV4LJHH.js → chunk-KYIAFNU7.js} +1 -1
  166. package/dist/{chunk-F2XSYBKH.js → chunk-MFS6F2P7.js} +4 -1
  167. package/dist/chunk-MICRGE3J.js +1 -0
  168. package/dist/{chunk-PGRPNDWM.js → chunk-NR4CPM4T.js} +1 -1
  169. package/dist/{chunk-5WDXPHEW.js → chunk-NRBAXRWE.js} +1 -1
  170. package/dist/{chunk-YSGLEHND.js → chunk-NUZHC6MM.js} +14 -2
  171. package/dist/{chunk-WGD2HX2A.js → chunk-OED6LUWE.js} +1 -1
  172. package/dist/{chunk-MICH6QSJ.js → chunk-OGXHZHRX.js} +1 -1
  173. package/dist/{chunk-OHA6WSAG.js → chunk-OTCXRJ7D.js} +1 -1
  174. package/dist/{chunk-N5SKHIAP.js → chunk-PAQXOP2M.js} +8 -6
  175. package/dist/{chunk-KJW2AS57.js → chunk-PEUGPAKH.js} +1 -1
  176. package/dist/{chunk-IPAU6FLH.js → chunk-PPHTIKZO.js} +1 -1
  177. package/dist/{chunk-44WJLPQS.js → chunk-PT6WKXKW.js} +2 -2
  178. package/dist/{chunk-P6WFZDKS.js → chunk-PWG3VHRQ.js} +2 -2
  179. package/dist/{chunk-EAKC24BW.js → chunk-R2IBCEU6.js} +16 -4
  180. package/dist/{chunk-HOIZ6MIS.js → chunk-RLJXVFEH.js} +1 -1
  181. package/dist/{chunk-NQGPD6NX.js → chunk-RMEBFYL7.js} +1 -1
  182. package/dist/{chunk-APDKUGSH.js → chunk-S27UBCVX.js} +5 -4
  183. package/dist/{chunk-XEGZHHRH.js → chunk-SVGARBDY.js} +1 -1
  184. package/dist/{chunk-UWGUKMBK.js → chunk-SYBYFQTY.js} +2 -2
  185. package/dist/{chunk-IUYUS2SO.js → chunk-TYONQSOK.js} +2 -2
  186. package/dist/{chunk-DQSXWQMJ.js → chunk-U3ILLCR2.js} +1 -1
  187. package/dist/{chunk-L4WZSVMT.js → chunk-UB6MLXUL.js} +3 -3
  188. package/dist/{chunk-EARDAJQY.js → chunk-UWRBD2YO.js} +2 -2
  189. package/dist/{chunk-F23N4MVU.js → chunk-UXYEOWG5.js} +1 -1
  190. package/dist/{chunk-UCCC7YVZ.js → chunk-W7PAIVAP.js} +4 -2
  191. package/dist/{chunk-T5RQGI6O.js → chunk-X3UYTAOG.js} +1 -1
  192. package/dist/{chunk-EOQFPZEE.js → chunk-XBURIXHO.js} +2 -2
  193. package/dist/{chunk-VKKUGZ3G.js → chunk-XQZ6EWOE.js} +8 -5
  194. package/dist/{chunk-TVRBQMIX.js → chunk-YPMGP2X4.js} +6 -6
  195. package/dist/{chunk-GS7ZTHPF.js → chunk-YQG4PZGC.js} +7 -7
  196. package/dist/{chunk-5QXRI35B.js → chunk-ZK3VYY7L.js} +1 -1
  197. package/dist/{chunk-2QEDJSJC.js → chunk-ZMDYQ2HH.js} +1 -1
  198. package/dist/{chunk-27GD7LVR.js → chunk-ZMWXE4GT.js} +1 -1
  199. package/dist/{chunk-RIAZM6L3.js → chunk-ZNOXQACX.js} +1 -1
  200. package/dist/generated/index.d.ts +1 -0
  201. package/dist/generated/index.js +106 -104
  202. package/dist/index.js +106 -104
  203. package/dist/styles.css +508 -102
  204. package/dist/utils/focusModality.d.ts +17 -1
  205. package/dist/utils/index.d.ts +1 -1
  206. package/dist/utils/index.js +1 -1
  207. package/package.json +3 -3
  208. package/dist/StatGroup-PADTJCUQ.css +0 -86
  209. package/dist/chunk-WKEPORNM.js +0 -2
  210. /package/dist/{chunk-PNNYVN52.js → chunk-4QQ3MND5.js} +0 -0
package/README.md CHANGED
@@ -204,6 +204,64 @@ places:
204
204
  - A surface that pans or zooms dispatches `LAYER_REPOSITION_EVENT` on its host
205
205
  when the content beneath it moves, and every panel anchored inside follows.
206
206
 
207
+ ## Changes in 0.38.0
208
+
209
+ ### Icons
210
+
211
+ **`VendorMark` draws Crewlet's own mark** (`vendor="crewlet"`), for the services built into Crewlet (its tracker, its knowledge base) where a catalogue of integrations lists them beside the third-party apps they stand in for. It is drawn from the brand mark `@crewlethq/icons` already carries (`CrewletIcon`), not a second copy, and takes the same `size` and `muted` as every other vendor. `VENDORS` lists it, so the VendorMark story shows it with the others.
212
+
213
+ **Every vendor mark draws at one weight in its square.** GitLab's press-kit drawing framed its logo in twice its own width, so at 20px it drew 10px beside marks of 20; it is cropped to its logo. Crewlet's mark is framed in the square its own extent fits rather than in the wide brand file's artwork margins, so at 20px it draws 20 by 10 where it drew 17 by 9. The VendorMark story's One weight draws every mark at 20px in a 48px box.
214
+
215
+ ### Layout
216
+
217
+ These come from a layout audit of the engine dashboard at 1440, 1024 and 390 in both themes; each names what was measured.
218
+
219
+ **A stat row folds by its own width** (`StatGroup`). It dropped to two columns under a 1024px window, but a row is as wide as its column leaves it: beside the rail and a settings column at 1024 a four-column row was 489px and cut its figures ("Not s…"), and on a phone three tiles stood two and a lone third at double width. The row is a size container on twelve tracks: four a row fold to two under 640px of row, three stack one a row under 480px, and the hairlines follow. The row carries `data-columns` beside `--crewlet-stat-group-cols`. An application that restated the old `width < 1024px` step for a stat row drops it.
220
+
221
+ **A stat row in a card is flush without being told.** A `StatGroup` that is a `Card`'s content, or a `Card.Body`'s, gives up its own surface, edge and corner, so a card no longer draws a box inside a box (or a third frame inside a padded body). `flush` stays for any other host.
222
+
223
+ **A disclosure's fact gives way before its title** (`Disclosure`, `Accordion`). The fact (`meta`) held its full width and the title shrank to nothing beside a long one: a log row stopped saying which log it was, and its fact ran under the status badge beside it. The fact now shrinks first, at a hundred to the title's one, ends in an ellipsis, and keeps a floor of one glyph. It is still the toggle's name in full.
224
+
225
+ **A narrow card's subtitle takes a line of its own** (`Card.Header`). Under 480px of card the head wraps: the title and the card's controls keep the first line, and the subtitle takes the whole of the next and wraps there rather than ending ("Resets today at midnight, the week…"). Only a card whose head has a subtitle becomes a size container. An application that wrapped a subtitle under the title for itself at narrow widths can drop that rule.
226
+
227
+ **Description lists on one page share a term column** (`DescriptionList`). The term track is `--crewlet-description-list-term`, inherited, so a page sets it once and every list under it starts its values on one line; `termWidth` sets it on one list. The default track, `fit` and the narrow step are unchanged.
228
+
229
+ **The make row lays out the kinds it is given** (`ArtifactMakeRow`). Five kinds stood in six fixed columns with an empty sixth at the end of the line, and three across on a phone left a hole after the fifth. The line takes a column per kind (`--crewlet-make-row-count`, with `data-count`, both set from `items`), and on a narrow tray a short last row is centred and two or four kinds stand two a row.
230
+
231
+ **The rail foot stands on the nav's columns** (`AppShell`). A foot row's transparent boundary spends a pixel of its row pad, as it spent one of its block inset, so its mark and words start where the nav's do rather than a pixel right. In the foot, `AccountRow` takes the nav row's pad and glyph-to-word gap and centres its badge over a glyph's width, so the avatar is centred on the glyph column and the name starts on the word line.
232
+
233
+ **The top bar lines up with the content** (`AppShell`). It stood 16px from each edge over content inset 20px, and the scroller's reserved gutter moved the content's end in further, so with classic scrollbars every page's actions ended 15px past the cards under them. The bar now takes the content's inset on both sides and, at its end, the scroller's gutter, which the shell measures and sets as `--crewlet-app-shell-gutter` on its root (0 with overlay scrollbars).
234
+
235
+ ### Colour
236
+
237
+ **The neutral outline tag is drawn in the neutral pill's edge** (`Tag`). It took the plain hairline, which on a dark card measured 1.07:1, so "Off" beside a filled "Default" read as a loose word. It takes the strong step the neutral soft pill draws (1.49:1 dark, 1.52:1 light on the card) and keeps its tertiary ink and empty ground, so the two neutral pills differ by their fill alone.
238
+
239
+ **Every hairline inside a card is easier to see.** `@crewlethq/tokens` holds the plain hairline to dE 5 on the card and the sheet (it held dE 3), and the default dark hairline moves from 1.07:1 to 1.13:1 on the card. A stat row's dividers, a card head's rule, a tile's footer rule and a code block's edge all draw it. See the tokens README.
240
+
241
+ ## Changes in 0.37.1
242
+
243
+ ### Sheets
244
+
245
+ **`SheetGrid`'s Add column fits the header's end.** Its track was the 24px pointer-target floor, narrower than the small icon button it holds (26px at the normal density, more at comfortable), so the square filled the track edge to edge and pushed it wider. The track is now the button's square plus a 4px inset on each side, at every density, and the plus is drawn at the button's own glyph size.
246
+
247
+ **`SheetGrid` with Add column no longer scrolls sideways by a few pixels.** The grid was held to the scroller's width less an assumed width for the Add column control, so it overflowed by however much wider the control drew (2px at the default density), and the platform drew a horizontal scrollbar under a sheet with room to spare. The grid now grows into whatever room the control leaves.
248
+
249
+ **`fit="content"` makes room for a horizontal scrollbar.** Sized exactly to its rows, a sheet wider than its box lost the scrollbar's height to it wherever the platform draws scrollbars in the layout, and scrolled down by that much as well. The grid measures the bar and adds its height, so a wide, short sheet scrolls sideways only.
250
+
251
+ **A `LivePreview` still copy draws no scrollbar,** and nor does the live layer it is copied from. A copy of a box that scrolled (a sheet wider than its card) is a picture of its first view, and its scrollbar sat across the card as a stray band; with none in the live layer either, a sheet there leaves no room for one under its rows.
252
+
253
+ ### Focus
254
+
255
+ **Focus handed back after a pointer press draws no ring.** A trigger focused again when its palette, menu, listbox or popover closes matched `:focus-visible`, because the field inside always did, so a palette opened with a click and closed with Escape left the sidebar's search box ringed. `returnFocus(el)` (exported with `FOCUS_RETURNED_ATTRIBUTE`) focuses the element and marks it until it blurs, and the base stylesheet in `@crewlethq/tokens` keeps the ring off a marked element while the modality is the pointer's. A key pressed afterwards brings it back. The modal stack, `Menu`, `Popover`, `Select`, `Switcher`, `Canvas`'s zoom field and `ArtifactBar`'s rename all hand focus back through it.
256
+
257
+ **A shortcut outside a field is the keyboard** (`trackFocusModality`). Cmd+K or Ctrl+K opens the palette, so closing it with Escape rings whatever focus returns to. Inside a field a shortcut is still neither, since it is copy, paste or undo.
258
+
259
+ **The palette's search field draws no ring under the pointer either.** Every field's pointer narrowing now matches the modality inside `:where()`, so it narrows a ring and never outranks a variant's own. Matched bare, it beat `Input`'s command variant and drew a square accent hairline round the palette's borderless field.
260
+
261
+ ### Hit areas
262
+
263
+ **The rows of a list meet at their targets.** A list draws its rows a step apart, and the gap between two rows used to belong to no row: a pointer crossing a list slowly met the list itself there, so the hand turned into the arrow and the hover fill went out between every two rows and came back on the next, which reads as the cursor flickering. Measured on the sheet create page's "Start from" list, a slow pass down it switched the cursor 14 times and crossed six dead strips of 4px; it now switches twice, on entering and leaving. Each row reaches half the gap on each side with an empty `::after`, so the drawn spacing is unchanged and the targets meet in the middle of the gap. The reach is `HIT_AREA_CLASS` (`HitArea.css`), set on the row from the gap its list is laid out with as `--crewlet-hit-area-block` and `--crewlet-hit-area-inline`, measured from the row's padding edge. `ChoiceList` (with the answer after a dashed rule reaching up across it, and a row with its panel open reaching nothing downward), `SidebarNav`'s rows and nested rows, the rail foot's `AppShellRailRow` and `AccountRow`, `ArtifactMakeRow`'s tray, `Tabs` in every variant, `SegmentedControl`, `Select`'s and `Combobox`'s options, `DatasetSourceList`'s entries and the command palette's scopes take it. A list of an application's own takes it the same way (Foundations / Hit areas). No scroller grows: the reach stays inside each list's padding, and a scrolling row of tabs reaches nothing past its first and last tab.
264
+
207
265
  ## Changes in 0.37.0
208
266
 
209
267
  ### An artifact list with an identity
@@ -1,4 +1,4 @@
1
- export { Accordion, AccordionItem } from '../chunk-RIAZM6L3.js';
1
+ export { Accordion, AccordionItem } from '../chunk-ZNOXQACX.js';
2
2
  import '../chunk-FZVJDJFN.js';
3
3
  import '../chunk-BHHIIK3M.js';
4
4
  import '../chunk-PQADV6P6.js';
@@ -1,16 +1,16 @@
1
- export { AGENT_HANDOFF_LABELS, AgentHandoffPanel } from '../chunk-EOQFPZEE.js';
1
+ export { AGENT_HANDOFF_LABELS, AgentHandoffPanel } from '../chunk-XBURIXHO.js';
2
2
  import '../chunk-AUQPBL4O.js';
3
3
  import '../chunk-3TFDQLW3.js';
4
- import '../chunk-MICH6QSJ.js';
5
- import '../chunk-RH2NCQBZ.js';
4
+ import '../chunk-OGXHZHRX.js';
5
+ import '../chunk-ETVEGR2Y.js';
6
6
  import '../chunk-Y5BD4MTE.js';
7
- import '../chunk-IUYUS2SO.js';
8
- import '../chunk-YSGLEHND.js';
9
7
  import '../chunk-SMBKXWML.js';
8
+ import '../chunk-TYONQSOK.js';
10
9
  import '../chunk-FZVJDJFN.js';
11
10
  import '../chunk-BHHIIK3M.js';
12
11
  import '../chunk-PQADV6P6.js';
13
12
  import '../chunk-OG6CL3EB.js';
14
13
  import '../chunk-4FQT6ZAY.js';
14
+ import '../chunk-NUZHC6MM.js';
15
15
  import '../chunk-BZFWDIV6.js';
16
16
  import '../chunk-ODEQTPFM.js';
@@ -1,3 +1,4 @@
1
+ import '../HitArea/HitArea.css';
1
2
  import './AppShell.css';
2
3
  export { AppShell, AppShellRail, AppShellRailRow, AppShellToggle, AppShellTopbar, useAppShell } from './AppShell.js';
3
4
  export { AccountRow } from './AccountRow.js';
@@ -1,9 +1,11 @@
1
- export { AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellToggle, AppShellTopbar, useAppShell } from '../chunk-PGZ2R3ON.js';
1
+ export { AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellToggle, AppShellTopbar, useAppShell } from '../chunk-DYB66CNM.js';
2
2
  import '../chunk-RTPQDNW3.js';
3
- import '../chunk-BUVCV3WI.js';
3
+ import '../chunk-D6FEHY5G.js';
4
4
  import '../chunk-OMV5W53A.js';
5
- import '../chunk-R25RGPUB.js';
5
+ import '../chunk-H5XTJ7GJ.js';
6
+ import '../chunk-2YTOOH3A.js';
6
7
  import '../chunk-OG6CL3EB.js';
7
8
  import '../chunk-4FQT6ZAY.js';
9
+ import '../chunk-NUZHC6MM.js';
8
10
  import '../chunk-BZFWDIV6.js';
9
11
  import '../chunk-ODEQTPFM.js';
@@ -146,10 +146,11 @@
146
146
  /* The same gutter the nav takes, so what the foot says lines up with the rows
147
147
  above it rather than sitting further out. */
148
148
  .crewlet-app-shell__rail-foot {
149
+ --crewlet-rail-foot-gap: var(--spacing-1);
149
150
  flex: none;
150
151
  display: flex;
151
152
  flex-direction: column;
152
- gap: var(--spacing-1);
153
+ gap: var(--crewlet-rail-foot-gap);
153
154
  padding: var(--spacing-2) var(--size-nav-gutter);
154
155
  border-top: 1px solid var(--color-border-default);
155
156
  }
@@ -180,7 +181,9 @@
180
181
  * compact density cannot take the target under it.
181
182
  *
182
183
  * And the boundary is TRANSPARENT rather than absent, spending one pixel of
183
- * that step rather than adding one on top of it. A button carries one at every
184
+ * that step rather than adding one on top of it. It spends a pixel of the row
185
+ * pad too: added to it, the boundary stood the row's mark and words a pixel
186
+ * right of every nav glyph and word above them. A button carries one at every
184
187
  * variant so that a bordered variant and a borderless one stand the same
185
188
  * height, and the row this package draws carries the same one for the same
186
189
  * reason: without it the two rows in one foot are 34px and 36px, and the
@@ -195,7 +198,7 @@
195
198
  width: 100%;
196
199
  min-width: 0;
197
200
  min-height: var(--size-row-sm);
198
- padding: calc(var(--spacing-2) - 1px) var(--size-nav-row-pad);
201
+ padding: calc(var(--spacing-2) - 1px) calc(var(--size-nav-row-pad) - 1px);
199
202
  border: 1px solid transparent;
200
203
  border-radius: var(--radius-md);
201
204
  background: transparent;
@@ -209,6 +212,10 @@
209
212
 
210
213
  .crewlet-app-shell__rail-row--action,
211
214
  .crewlet-app-shell__rail-foot > .crewlet-btn {
215
+ /* Half the foot's gap to each neighbour, so the rows' targets meet
216
+ (HitArea.css), across the row's 1px border; the account row below
217
+ reaches back the same way. */
218
+ --crewlet-hit-area-block: calc(var(--crewlet-rail-foot-gap, 0px) / 2 + 1px);
212
219
  cursor: pointer;
213
220
  transition:
214
221
  background var(--motion-duration-fast) var(--motion-easing-default),
@@ -422,13 +429,22 @@
422
429
  overflow: hidden;
423
430
  }
424
431
 
432
+ /*
433
+ * THE BAR'S INSET IS THE CONTENT'S, so a page's first line starts under the
434
+ * bar's title and its cards end under the bar's last control. It stood 16px
435
+ * from each edge over a content column inset 20px, and at its end the
436
+ * content also gives up the scroller's gutter, which the bar, not scrolling,
437
+ * did not: with scrollbars drawn in the layout every page's actions ended
438
+ * 15px past the cards under them. The gutter is measured by the shell
439
+ * (`--crewlet-app-shell-gutter`, 0 where scrollbars overlay the content).
440
+ */
425
441
  .crewlet-app-shell__topbar {
426
442
  display: flex;
427
443
  align-items: center;
428
444
  gap: var(--spacing-3);
429
445
  flex: none;
430
446
  height: var(--crewlet-app-shell-topbar);
431
- padding: 0 var(--spacing-4);
447
+ padding: 0 calc(var(--spacing-5) + var(--crewlet-app-shell-gutter, 0px)) 0 var(--spacing-5);
432
448
  border-bottom: 1px solid var(--color-border-default);
433
449
  background: var(--color-surface-background);
434
450
  }
@@ -611,7 +627,12 @@
611
627
  }
612
628
 
613
629
  /* THE TOP BAR'S GUTTER, 16px: the content's 12px stood every page's first
614
- line 4px left of the title and the controls over it. */
630
+ line 4px left of the title and the controls over it. The bar and the
631
+ content take it together. */
632
+ .crewlet-app-shell__topbar {
633
+ padding: 0 calc(var(--spacing-4) + var(--crewlet-app-shell-gutter, 0px)) 0 var(--spacing-4);
634
+ }
635
+
615
636
  .crewlet-app-shell__content {
616
637
  padding: var(--spacing-4) var(--spacing-4) var(--spacing-9);
617
638
  }
@@ -635,11 +656,12 @@
635
656
  * the controls off the rail.
636
657
  */
637
658
  .crewlet-account-row {
659
+ --crewlet-account-row-pad: var(--spacing-1);
638
660
  display: flex;
639
661
  align-items: center;
640
662
  gap: var(--spacing-1);
641
663
  min-width: 0;
642
- padding: var(--spacing-1) 0;
664
+ padding: var(--crewlet-account-row-pad) 0;
643
665
  }
644
666
 
645
667
  .crewlet-account-row__who {
@@ -656,6 +678,29 @@
656
678
  transition: background var(--motion-duration-fast) var(--motion-easing-default);
657
679
  }
658
680
 
681
+ /*
682
+ * In the rail's foot, the account row reaches up across its own padding to
683
+ * half the foot's gap, to meet the row above (HitArea.css).
684
+ *
685
+ * AND IT STANDS ON THE NAV'S COLUMNS: the avatar centred on the column every
686
+ * nav glyph is centred on, and the name starting on the line every nav word
687
+ * starts on. On a 4px inset with an 8px gap a 26px avatar stood 2px left of
688
+ * the glyphs above it and the name 2px right of their words. The avatar's box
689
+ * takes a nav glyph's width (`sm`, 14px) and the badge is centred over it, so
690
+ * whatever size of badge a caller hands the row, it is centred where a glyph
691
+ * is, and the row takes the nav row's pad and its glyph-to-word gap.
692
+ */
693
+ .crewlet-app-shell__rail-foot .crewlet-account-row__who {
694
+ --crewlet-hit-area-block-start: calc(var(--crewlet-rail-foot-gap) / 2 + var(--crewlet-account-row-pad));
695
+ gap: calc(var(--spacing-2) + var(--spacing-1) / 2);
696
+ padding-inline-start: var(--size-nav-row-pad);
697
+ }
698
+
699
+ .crewlet-app-shell__rail-foot .crewlet-account-row__avatar {
700
+ justify-content: center;
701
+ width: 14px;
702
+ }
703
+
659
704
  /* The row as the reader's menu button: a button drawn as the link is. */
660
705
  button.crewlet-account-row__who {
661
706
  width: 100%;
@@ -1,11 +1,11 @@
1
- export { ArrangeList, DEFAULT_ARRANGE_LABELS } from '../chunk-27GD7LVR.js';
1
+ export { ArrangeList, DEFAULT_ARRANGE_LABELS } from '../chunk-ZMWXE4GT.js';
2
2
  import '../chunk-A722MUNR.js';
3
3
  import '../chunk-XJ2QEBMM.js';
4
- import '../chunk-PJIPUEJ3.js';
5
- import '../chunk-IUYUS2SO.js';
6
- import '../chunk-YSGLEHND.js';
4
+ import '../chunk-AXS6MBNH.js';
5
+ import '../chunk-TYONQSOK.js';
7
6
  import '../chunk-PQADV6P6.js';
8
7
  import '../chunk-RSAQOKH3.js';
9
8
  import '../chunk-4FQT6ZAY.js';
9
+ import '../chunk-NUZHC6MM.js';
10
10
  import '../chunk-BZFWDIV6.js';
11
11
  import '../chunk-ODEQTPFM.js';
@@ -1,17 +1,19 @@
1
- export { ARTIFACT_BAR_LABELS, ArtifactBar, ArtifactVersionChip } from '../chunk-APDKUGSH.js';
2
- import '../chunk-WKEPORNM.js';
3
- import '../chunk-6ZJ3N7QI.js';
4
- import '../chunk-CCAXYHQS.js';
5
- import '../chunk-VL6CUNSX.js';
1
+ export { ARTIFACT_BAR_LABELS, ArtifactBar, ArtifactVersionChip } from '../chunk-S27UBCVX.js';
2
+ import '../chunk-4ISUIS6F.js';
3
+ import '../chunk-2QZ2VPHR.js';
4
+ import '../chunk-7SDUKCNW.js';
6
5
  import '../chunk-RKKO7QHH.js';
6
+ import '../chunk-I33UIUZD.js';
7
7
  import '../chunk-ILDNJHRU.js';
8
8
  import '../chunk-CE2THTQR.js';
9
9
  import '../chunk-SMBKXWML.js';
10
10
  import '../chunk-BHHIIK3M.js';
11
- import '../chunk-BUVCV3WI.js';
11
+ import '../chunk-D6FEHY5G.js';
12
12
  import '../chunk-OMV5W53A.js';
13
- import '../chunk-R25RGPUB.js';
13
+ import '../chunk-H5XTJ7GJ.js';
14
+ import '../chunk-2YTOOH3A.js';
14
15
  import '../chunk-OG6CL3EB.js';
15
16
  import '../chunk-4FQT6ZAY.js';
17
+ import '../chunk-NUZHC6MM.js';
16
18
  import '../chunk-BZFWDIV6.js';
17
19
  import '../chunk-ODEQTPFM.js';
@@ -1,10 +1,10 @@
1
- export { ArtifactCard, ArtifactCardSkeleton, ArtifactPreviewGlyph } from '../chunk-OHA6WSAG.js';
1
+ export { ArtifactCard, ArtifactCardSkeleton, ArtifactPreviewGlyph } from '../chunk-OTCXRJ7D.js';
2
2
  import '../chunk-TEUQWOWZ.js';
3
3
  import '../chunk-CI3VPIJN.js';
4
4
  import '../chunk-3CZ7XAVY.js';
5
5
  import '../chunk-EUCC37WY.js';
6
6
  import '../chunk-UBZDYOCA.js';
7
- import '../chunk-5QXRI35B.js';
7
+ import '../chunk-ZK3VYY7L.js';
8
8
  import '../chunk-AV2DXAEL.js';
9
9
  import '../chunk-5AQBPHZD.js';
10
10
  import '../chunk-PZKHBB7D.js';
@@ -1,5 +1,5 @@
1
- export { DashboardCover, DocCover, SHEET_COVER_COLUMNS, SHEET_COVER_ROWS, SheetCover } from '../chunk-JQLS3MZB.js';
2
- import '../chunk-P6WFZDKS.js';
1
+ export { DashboardCover, DocCover, SHEET_COVER_COLUMNS, SHEET_COVER_ROWS, SheetCover } from '../chunk-FWBKMPNR.js';
2
+ import '../chunk-PWG3VHRQ.js';
3
3
  import '../chunk-CE2THTQR.js';
4
- import '../chunk-YSGLEHND.js';
4
+ import '../chunk-NUZHC6MM.js';
5
5
  import '../chunk-ODEQTPFM.js';
@@ -25,7 +25,9 @@ export interface ArtifactMakeRowProps {
25
25
  * kind's glyph on its own tint, its name and what it is for, the whole item
26
26
  * one link. A toolbar for making things rather than a hero: one line high on
27
27
  * a wide page, the details dropped before a name is cut, and three across on
28
- * a phone.
28
+ * a phone. However many kinds a reader is offered, the tray holds no empty
29
+ * cell: the line has a column per kind, and on a phone a short last row is
30
+ * centred, or four kinds stand two by two.
29
31
  *
30
32
  * THE TRAY IS A WORKBENCH, Crewlet's dotted field under the kinds the way the
31
33
  * org chart's canvas sits under its seats, and an item lifts off it as a card
@@ -1,3 +1,4 @@
1
+ import '../HitArea/HitArea.css';
1
2
  import '../ArtifactKindIllustration/ArtifactKinds.css';
2
3
  import './ArtifactMakeRow.css';
3
4
  export { ArtifactMakeRow } from './ArtifactMakeRow.js';
@@ -1,4 +1,5 @@
1
- export { ArtifactMakeRow } from '../chunk-EAKC24BW.js';
1
+ export { ArtifactMakeRow } from '../chunk-R2IBCEU6.js';
2
2
  import '../chunk-CE2THTQR.js';
3
+ import '../chunk-2YTOOH3A.js';
3
4
  import '../chunk-BZFWDIV6.js';
4
5
  import '../chunk-ODEQTPFM.js';
@@ -8,9 +8,16 @@
8
8
  *
9
9
  * THE TRAY SIZES ITSELF BY ITS OWN WIDTH, never the window's: it sits in a
10
10
  * page column a sidebar narrows, so three steps are container queries on the
11
- * tray. Under 560px three across in two lines; from 560px the six in one
12
- * line, each its mark over its name, so a long name is never cut; from 920px
13
- * the mark beside the name and what the kind is for under it.
11
+ * tray. Under 560px three across, each its mark over its name; from 560px
12
+ * every kind in one line, still mark over name, so a long name is never cut;
13
+ * from 920px the mark beside the name and what the kind is for under it.
14
+ *
15
+ * AND BY ITS OWN COUNT. A reader is offered the kinds their company runs, so
16
+ * a tray holds five as often as six, and a grid fixed at six columns left an
17
+ * empty sixth of dotted field at the end of the line, and three across left a
18
+ * hole after the fifth. The line takes one column per kind
19
+ * (`--crewlet-make-row-count`, set from the items), and the narrow tray fills
20
+ * its rows by the count (`data-count`): see the narrow step below.
14
21
  */
15
22
 
16
23
  .crewlet-make-row {
@@ -26,9 +33,10 @@
26
33
  }
27
34
 
28
35
  .crewlet-make-row__list {
36
+ --crewlet-make-row-gap: var(--spacing-1);
29
37
  display: grid;
30
- grid-template-columns: repeat(3, minmax(0, 1fr));
31
- gap: var(--spacing-1);
38
+ grid-template-columns: repeat(6, minmax(0, 1fr));
39
+ gap: var(--crewlet-make-row-gap);
32
40
  margin: 0;
33
41
  padding: var(--spacing-1);
34
42
  list-style: none;
@@ -53,6 +61,10 @@
53
61
  color: var(--color-text-primary);
54
62
  text-decoration: none;
55
63
  outline: none;
64
+ /* Half the gap to each neighbour, so the targets meet (HitArea.css), and
65
+ the 1px border the reach is measured inside of. */
66
+ --crewlet-hit-area-block: calc(var(--crewlet-make-row-gap) / 2 + 1px);
67
+ --crewlet-hit-area-inline: calc(var(--crewlet-make-row-gap) / 2 + 1px);
56
68
  transition:
57
69
  background-color var(--motion-duration-fast) var(--motion-easing-out),
58
70
  border-color var(--motion-duration-fast) var(--motion-easing-out),
@@ -104,9 +116,40 @@
104
116
  line-height: 1.35;
105
117
  }
106
118
 
119
+ /*
120
+ * THE NARROW TRAY, on six tracks, each kind two of them: three a row. A last
121
+ * row that is short is centred under the full one rather than left with a
122
+ * hole after it, so five kinds stand three and two, the two in the middle.
123
+ * Two and four kinds stand two a row, which fills every row, and one kind
124
+ * takes the tray.
125
+ */
126
+ @container (width < 560px) {
127
+ .crewlet-make-row__cell {
128
+ grid-column: span 2;
129
+ }
130
+
131
+ /* One kind short of a full last row: the first of the two moves in a track. */
132
+ .crewlet-make-row__cell:nth-child(3n + 1):nth-last-child(2) {
133
+ grid-column: 2 / span 2;
134
+ }
135
+
136
+ /* A last row of one stands in the middle. */
137
+ .crewlet-make-row__cell:nth-child(3n + 1):last-child {
138
+ grid-column: 3 / span 2;
139
+ }
140
+
141
+ .crewlet-make-row__list:is([data-count='2'], [data-count='4']) > .crewlet-make-row__cell {
142
+ grid-column: span 3;
143
+ }
144
+
145
+ .crewlet-make-row__list[data-count='1'] > .crewlet-make-row__cell {
146
+ grid-column: span 6;
147
+ }
148
+ }
149
+
107
150
  @container (width >= 560px) {
108
151
  .crewlet-make-row__list {
109
- grid-template-columns: repeat(6, minmax(0, 1fr));
152
+ grid-template-columns: repeat(var(--crewlet-make-row-count, 6), minmax(0, 1fr));
110
153
  }
111
154
 
112
155
  .crewlet-make-row__item {
@@ -1,6 +1,6 @@
1
- export { AuthLayout } from '../chunk-WX2NIG4G.js';
1
+ export { AuthLayout } from '../chunk-BJI3RFXG.js';
2
2
  import '../chunk-7KBNFFM3.js';
3
- import '../chunk-5QXRI35B.js';
3
+ import '../chunk-ZK3VYY7L.js';
4
4
  import '../chunk-AV2DXAEL.js';
5
5
  import '../chunk-BHHIIK3M.js';
6
6
  import '../chunk-PQADV6P6.js';
@@ -1,14 +1,16 @@
1
- export { AvatarPicker } from '../chunk-GYBDPCRC.js';
2
- import '../chunk-SUXP4OBT.js';
3
- import '../chunk-K3IJQNB7.js';
1
+ export { AvatarPicker } from '../chunk-ECGGQX2H.js';
2
+ import '../chunk-F4LPQA4E.js';
3
+ import '../chunk-KHJIEPZV.js';
4
4
  import '../chunk-AYKXMIOR.js';
5
5
  import '../chunk-YEVG2X5R.js';
6
- import '../chunk-CCAXYHQS.js';
7
- import '../chunk-VL6CUNSX.js';
6
+ import '../chunk-2QZ2VPHR.js';
7
+ import '../chunk-7SDUKCNW.js';
8
8
  import '../chunk-RKKO7QHH.js';
9
9
  import '../chunk-PZKHBB7D.js';
10
10
  import '../chunk-BHHIIK3M.js';
11
11
  import '../chunk-OMV5W53A.js';
12
- import '../chunk-R25RGPUB.js';
12
+ import '../chunk-H5XTJ7GJ.js';
13
+ import '../chunk-2YTOOH3A.js';
14
+ import '../chunk-NUZHC6MM.js';
13
15
  import '../chunk-BZFWDIV6.js';
14
16
  import '../chunk-ODEQTPFM.js';
@@ -1,10 +1,11 @@
1
- export { CANVAS_COMPOSE_CONTEXT, CANVAS_FIT_MAX_ZOOM, CANVAS_FIT_PADDING, CANVAS_FOCUS_CONTEXT, CANVAS_MAX_ZOOM, CANVAS_MIN_ZOOM, CANVAS_PAN_MARGIN, CANVAS_PAN_STEP, CANVAS_REVEAL_PADDING, CANVAS_TAP_SLOP, CANVAS_WHEEL_LINE_PX, CANVAS_WHEEL_ZOOM_PER_PIXEL, CANVAS_ZOOM_CEILING, CANVAS_ZOOM_LIMITS, CANVAS_ZOOM_STEP, Canvas, IDENTITY_VIEW, ShortcutTip, anchorView, beyondSlop, clampPan, clampZoom, fitView, gridOf, panBy, pinchView, regionView, revealView, screenRect, toScreen, toWorld, wheelPixels, wheelZoomFactor, zoomAt, zoomLimits } from '../chunk-4BYHAOHH.js';
1
+ export { CANVAS_COMPOSE_CONTEXT, CANVAS_FIT_MAX_ZOOM, CANVAS_FIT_PADDING, CANVAS_FOCUS_CONTEXT, CANVAS_MAX_ZOOM, CANVAS_MIN_ZOOM, CANVAS_PAN_MARGIN, CANVAS_PAN_STEP, CANVAS_REVEAL_PADDING, CANVAS_TAP_SLOP, CANVAS_WHEEL_LINE_PX, CANVAS_WHEEL_ZOOM_PER_PIXEL, CANVAS_ZOOM_CEILING, CANVAS_ZOOM_LIMITS, CANVAS_ZOOM_STEP, Canvas, IDENTITY_VIEW, ShortcutTip, anchorView, beyondSlop, clampPan, clampZoom, fitView, gridOf, panBy, pinchView, regionView, revealView, screenRect, toScreen, toWorld, wheelPixels, wheelZoomFactor, zoomAt, zoomLimits } from '../chunk-DAERKOOG.js';
2
2
  import '../chunk-LM3ISVJA.js';
3
- import '../chunk-6ZJ3N7QI.js';
3
+ import '../chunk-I33UIUZD.js';
4
4
  import '../chunk-SMBKXWML.js';
5
5
  import '../chunk-OMV5W53A.js';
6
- import '../chunk-R25RGPUB.js';
6
+ import '../chunk-H5XTJ7GJ.js';
7
7
  import '../chunk-OG6CL3EB.js';
8
8
  import '../chunk-4FQT6ZAY.js';
9
+ import '../chunk-NUZHC6MM.js';
9
10
  import '../chunk-BZFWDIV6.js';
10
11
  import '../chunk-ODEQTPFM.js';
@@ -1,14 +1,15 @@
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';
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-C7OKDYBH.js';
2
2
  import '../chunk-5SZGKSGL.js';
3
- import '../chunk-7VAUGG6B.js';
4
- import '../chunk-PGRPNDWM.js';
5
- import '../chunk-4BYHAOHH.js';
3
+ import '../chunk-B5UHX5UC.js';
4
+ import '../chunk-NR4CPM4T.js';
5
+ import '../chunk-DAERKOOG.js';
6
6
  import '../chunk-LM3ISVJA.js';
7
- import '../chunk-6ZJ3N7QI.js';
7
+ import '../chunk-I33UIUZD.js';
8
8
  import '../chunk-SMBKXWML.js';
9
9
  import '../chunk-OMV5W53A.js';
10
- import '../chunk-R25RGPUB.js';
10
+ import '../chunk-H5XTJ7GJ.js';
11
11
  import '../chunk-OG6CL3EB.js';
12
12
  import '../chunk-4FQT6ZAY.js';
13
+ import '../chunk-NUZHC6MM.js';
13
14
  import '../chunk-BZFWDIV6.js';
14
15
  import '../chunk-ODEQTPFM.js';
@@ -1,12 +1,13 @@
1
- export { CanvasToolbar, toolForKey } from '../chunk-7VAUGG6B.js';
2
- import '../chunk-PGRPNDWM.js';
3
- import '../chunk-4BYHAOHH.js';
1
+ export { CanvasToolbar, toolForKey } from '../chunk-B5UHX5UC.js';
2
+ import '../chunk-NR4CPM4T.js';
3
+ import '../chunk-DAERKOOG.js';
4
4
  import '../chunk-LM3ISVJA.js';
5
- import '../chunk-6ZJ3N7QI.js';
5
+ import '../chunk-I33UIUZD.js';
6
6
  import '../chunk-SMBKXWML.js';
7
7
  import '../chunk-OMV5W53A.js';
8
- import '../chunk-R25RGPUB.js';
8
+ import '../chunk-H5XTJ7GJ.js';
9
9
  import '../chunk-OG6CL3EB.js';
10
10
  import '../chunk-4FQT6ZAY.js';
11
+ import '../chunk-NUZHC6MM.js';
11
12
  import '../chunk-BZFWDIV6.js';
12
13
  import '../chunk-ODEQTPFM.js';
@@ -1,4 +1,4 @@
1
- export { Card } from '../chunk-5QXRI35B.js';
1
+ export { Card } from '../chunk-ZK3VYY7L.js';
2
2
  export { useCardHeaderSlot } from '../chunk-AV2DXAEL.js';
3
3
  import '../chunk-BHHIIK3M.js';
4
4
  import '../chunk-PQADV6P6.js';
@@ -452,6 +452,49 @@
452
452
  min-width: 0;
453
453
  }
454
454
 
455
+ /*
456
+ * ON A NARROW CARD THE SUBTITLE TAKES A LINE OF ITS OWN, under the title and
457
+ * the card's controls, and wraps there rather than ending.
458
+ *
459
+ * One line is right while the subtitle has room to say something beside the
460
+ * title. In a card under 480px wide it had none: on a phone an Agent seats
461
+ * card drew "Resets today at midnight, the week…" in 202px of a 361px
462
+ * sentence, and the half it cut was the half that said when. On its own line
463
+ * the subtitle has the head's whole width, and the title and the controls
464
+ * keep the first.
465
+ *
466
+ * THE CARD IS THE CONTAINER, and only a card whose head has a subtitle, since
467
+ * that is the one card this changes. Inline-size containment takes a card's
468
+ * width from where it stands, never from its contents, which is how a panel
469
+ * is laid out anyway; a card that sized itself to its contents (a tile in a
470
+ * row that does not stretch it) and carried no subtitle is untouched.
471
+ *
472
+ * THE NAME BLOCK TAKES THE FIRST LINE'S ROOM rather than its own width. With
473
+ * the row free to wrap, a title wider than what the controls leave would
474
+ * otherwise push the controls onto a second line; from a zero basis it grows
475
+ * into the room they leave and clips there, exactly as the one-line head does.
476
+ */
477
+ .crewlet-card:has(> .crewlet-card__header > .crewlet-card__subtitle) {
478
+ container: crewlet-card / inline-size;
479
+ }
480
+
481
+ @container crewlet-card (width < 480px) {
482
+ .crewlet-card__header:has(> .crewlet-card__subtitle) {
483
+ flex-wrap: wrap;
484
+ row-gap: var(--spacing-1);
485
+ }
486
+
487
+ .crewlet-card__header:has(> .crewlet-card__subtitle) > .crewlet-card__header-main {
488
+ flex: 1 1 0;
489
+ }
490
+
491
+ .crewlet-card__header > .crewlet-card__subtitle {
492
+ order: 1;
493
+ flex: 1 1 100%;
494
+ white-space: normal;
495
+ }
496
+ }
497
+
455
498
  .crewlet-card__description {
456
499
  margin: 0;
457
500
  font-size: var(--font-size-compact);
@@ -1,8 +1,9 @@
1
- export { ChangeMark } from '../chunk-47JQAGRV.js';
1
+ export { ChangeMark } from '../chunk-66X5WDKE.js';
2
2
  import '../chunk-LFSIKGRQ.js';
3
3
  import '../chunk-Z7JYG5TF.js';
4
4
  import '../chunk-AYKXMIOR.js';
5
- import '../chunk-6ZJ3N7QI.js';
5
+ import '../chunk-I33UIUZD.js';
6
6
  import '../chunk-OMV5W53A.js';
7
- import '../chunk-R25RGPUB.js';
7
+ import '../chunk-H5XTJ7GJ.js';
8
+ import '../chunk-NUZHC6MM.js';
8
9
  import '../chunk-ODEQTPFM.js';
@@ -1,7 +1,7 @@
1
- export { Checkbox, CheckboxGroup } from '../chunk-PJIPUEJ3.js';
2
- import '../chunk-IUYUS2SO.js';
3
- import '../chunk-YSGLEHND.js';
1
+ export { Checkbox, CheckboxGroup } from '../chunk-AXS6MBNH.js';
2
+ import '../chunk-TYONQSOK.js';
4
3
  import '../chunk-PQADV6P6.js';
5
4
  import '../chunk-4FQT6ZAY.js';
5
+ import '../chunk-NUZHC6MM.js';
6
6
  import '../chunk-BZFWDIV6.js';
7
7
  import '../chunk-ODEQTPFM.js';
@@ -1,3 +1,4 @@
1
+ import '../HitArea/HitArea.css';
1
2
  import './ChoiceList.css';
2
3
  export { ChoiceList } from './ChoiceList.js';
3
4
  export type { ChoiceListOption, ChoiceListProps } from './ChoiceList.js';
@@ -1,2 +1,3 @@
1
- export { ChoiceList } from '../chunk-WZGYIVYH.js';
1
+ export { ChoiceList } from '../chunk-EAQLI2SO.js';
2
+ import '../chunk-2YTOOH3A.js';
2
3
  import '../chunk-ODEQTPFM.js';