@crewlethq/ui 0.36.0 → 0.37.1

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 (201) hide show
  1. package/README.md +41 -1
  2. package/dist/AgentHandoffPanel/index.js +4 -4
  3. package/dist/AppShell/index.d.ts +1 -0
  4. package/dist/AppShell/index.js +5 -3
  5. package/dist/{AppShell-JTSEOA57.css → AppShell-JBCZSSX3.css} +14 -2
  6. package/dist/ArrangeList/index.js +4 -4
  7. package/dist/ArtifactAccess/ArtifactAccess.d.ts +40 -0
  8. package/dist/ArtifactAccess/index.d.ts +3 -0
  9. package/dist/ArtifactAccess/index.js +2 -0
  10. package/dist/ArtifactAccess-Y53ZTRFS.css +31 -0
  11. package/dist/ArtifactBar/index.js +9 -7
  12. package/dist/ArtifactCard/ArtifactCard.d.ts +1 -6
  13. package/dist/ArtifactCard/index.d.ts +2 -1
  14. package/dist/ArtifactCard/index.js +3 -2
  15. package/dist/ArtifactCover/index.js +3 -3
  16. package/dist/ArtifactKindIllustration/ArtifactKindIllustration.d.ts +1 -1
  17. package/dist/ArtifactKindIllustration/index.js +1 -1
  18. package/dist/{ArtifactKindIllustration-5KTP43QS.css → ArtifactKindIllustration-KLFL7KBG.css} +1 -1
  19. package/dist/ArtifactMakeRow/index.d.ts +1 -0
  20. package/dist/ArtifactMakeRow/index.js +2 -1
  21. package/dist/{ArtifactMakeRow-RWUTS5MC.css → ArtifactMakeRow-W3RD5YWZ.css} +7 -2
  22. package/dist/ArtifactNameCell/ArtifactNameCell.d.ts +37 -0
  23. package/dist/ArtifactNameCell/index.d.ts +4 -0
  24. package/dist/ArtifactNameCell/index.js +4 -0
  25. package/dist/ArtifactNameCell-RTVP4LO4.css +104 -0
  26. package/dist/AvatarPicker/index.js +8 -6
  27. package/dist/Canvas/index.js +4 -3
  28. package/dist/CanvasBoard/index.js +7 -6
  29. package/dist/CanvasToolbar/index.js +6 -5
  30. package/dist/ChangeMark/index.js +4 -3
  31. package/dist/Checkbox/index.js +3 -3
  32. package/dist/ChoiceList/index.d.ts +1 -0
  33. package/dist/ChoiceList/index.js +2 -1
  34. package/dist/{ChoiceList-EA2W6MOS.css → ChoiceList-KFYFAECP.css} +26 -4
  35. package/dist/Combobox/index.d.ts +1 -0
  36. package/dist/Combobox/index.js +6 -5
  37. package/dist/{Combobox-4FUVYIE7.css → Combobox-YDONYDTM.css} +2 -1
  38. package/dist/CommandPalette/index.d.ts +1 -0
  39. package/dist/CommandPalette/index.js +7 -6
  40. package/dist/{CommandPalette-7CFGVBND.css → CommandPalette-TOZYLWLE.css} +5 -1
  41. package/dist/CommentThread/index.js +5 -5
  42. package/dist/Composer/index.js +3 -3
  43. package/dist/{Composer-PXITWNEK.css → Composer-TXULCPPV.css} +1 -1
  44. package/dist/ConfirmField/index.js +3 -3
  45. package/dist/DataTable/index.js +7 -7
  46. package/dist/DataView/index.js +12 -12
  47. package/dist/DatasetSource/index.d.ts +1 -0
  48. package/dist/DatasetSource/index.js +2 -1
  49. package/dist/{DatasetSource-SMGX4PS5.css → DatasetSource-FFKTD3ZU.css} +16 -1
  50. package/dist/DateTimePicker/index.js +4 -4
  51. package/dist/{DateTimePicker-2IVTKFV2.css → DateTimePicker-3A7JIIVL.css} +3 -3
  52. package/dist/DocTabsEditor/index.js +5 -5
  53. package/dist/Document/index.js +2 -2
  54. package/dist/{Document-YFWTWXJP.css → Document-TZ2NBLOR.css} +2 -2
  55. package/dist/{Editor-HORWMUM3.js → Editor-QV4JP242.js} +6 -6
  56. package/dist/FactList/index.js +4 -3
  57. package/dist/FollowBanner/index.js +3 -2
  58. package/dist/HitArea/hitArea.d.ts +7 -0
  59. package/dist/HitArea/index.d.ts +2 -0
  60. package/dist/HitArea/index.js +2 -0
  61. package/dist/HitArea-QUOS6ZDJ.css +35 -0
  62. package/dist/HuePicker/index.js +4 -3
  63. package/dist/Input/index.js +2 -2
  64. package/dist/{Input-ABGOFENS.css → Input-OQZBCRX5.css} +9 -4
  65. package/dist/Layer/index.js +2 -1
  66. package/dist/LinkInterstitial/index.js +4 -3
  67. package/dist/ListInput/index.js +4 -4
  68. package/dist/Listbox/index.js +3 -2
  69. package/dist/{Listbox-6WJNJQVQ.css → Listbox-NQV6E3FS.css} +3 -0
  70. package/dist/LivePreview/LivePreview.d.ts +15 -3
  71. package/dist/LivePreview/index.d.ts +2 -2
  72. package/dist/LivePreview/index.js +1 -1
  73. package/dist/{LivePreview-BROGKR4N.css → LivePreview-KQEDMQCY.css} +13 -0
  74. package/dist/MarkdownEditor/index.js +8 -6
  75. package/dist/Menu/index.js +3 -2
  76. package/dist/MergeConflicts/index.js +5 -4
  77. package/dist/Modal/index.js +3 -2
  78. package/dist/OrgTable/index.js +4 -3
  79. package/dist/Popover/index.js +3 -2
  80. package/dist/PresenterView/index.js +4 -3
  81. package/dist/PrincipalPicker/index.js +7 -6
  82. package/dist/RichEditor/index.js +1 -1
  83. package/dist/SegmentedControl/index.d.ts +1 -0
  84. package/dist/SegmentedControl/index.js +4 -3
  85. package/dist/{SegmentedControl-FLI45IOW.css → SegmentedControl-B7XCUOML.css} +9 -2
  86. package/dist/Select/index.d.ts +1 -0
  87. package/dist/Select/index.js +5 -4
  88. package/dist/{Select-W3CHTZXP.css → Select-F526HLNR.css} +5 -4
  89. package/dist/ShareDialog/index.js +7 -6
  90. package/dist/SheetColumnEditor/index.js +12 -11
  91. package/dist/SheetGrid/index.js +7 -6
  92. package/dist/{SheetGrid-YRDXTIIZ.css → SheetGrid-XK7T7M34.css} +9 -4
  93. package/dist/Shortcut/index.js +3 -2
  94. package/dist/SidebarNav/index.d.ts +1 -0
  95. package/dist/SidebarNav/index.js +2 -1
  96. package/dist/{SidebarNav-KF66MLOM.css → SidebarNav-7SGUZYKK.css} +21 -2
  97. package/dist/SlideCompare/index.js +4 -3
  98. package/dist/SlideFilmstrip/index.js +5 -4
  99. package/dist/SlideGrid/index.js +4 -3
  100. package/dist/SlideStage/index.js +3 -2
  101. package/dist/SourceEditor/index.js +2 -2
  102. package/dist/{SourceEditor-QAYE2JS6.css → SourceEditor-OKPWPFXK.css} +1 -1
  103. package/dist/Switcher/index.js +7 -7
  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/TagsInput/index.js +4 -4
  108. package/dist/{TagsInput-7EGBBXHS.css → TagsInput-CLFHP6I2.css} +1 -1
  109. package/dist/ThemeGallery/index.js +4 -3
  110. package/dist/ThemeSwitcher/index.js +5 -4
  111. package/dist/TimeWindowPicker/index.js +8 -7
  112. package/dist/{TimeWindowPicker-DEFDV77Z.css → TimeWindowPicker-I3HXC74I.css} +3 -3
  113. package/dist/Toaster/index.js +2 -1
  114. package/dist/Toolbar/index.js +3 -2
  115. package/dist/Tooltip/index.js +3 -2
  116. package/dist/TreeCanvas/index.js +5 -4
  117. package/dist/TreeGrid/index.js +3 -2
  118. package/dist/VersionCompare/index.js +5 -4
  119. package/dist/{chunk-CCAXYHQS.js → chunk-2QZ2VPHR.js} +3 -1
  120. package/dist/chunk-2YTOOH3A.js +4 -0
  121. package/dist/{chunk-QWNVSR6G.js → chunk-3KYVFG47.js} +1 -1
  122. package/dist/{chunk-3PTUDKSR.js → chunk-3SBM4DGI.js} +4 -4
  123. package/dist/{chunk-H5NOLRGH.js → chunk-3V5T5K5H.js} +1 -1
  124. package/dist/chunk-4ISUIS6F.js +3 -0
  125. package/dist/{chunk-PLTCDSTU.js → chunk-4LRAJXHL.js} +1 -1
  126. package/dist/{chunk-4ZJLOKSS.js → chunk-5BUOMF6N.js} +2 -2
  127. package/dist/{chunk-47JQAGRV.js → chunk-66X5WDKE.js} +1 -1
  128. package/dist/{chunk-MRMHZ437.js → chunk-6NNY5WBF.js} +7 -6
  129. package/dist/{chunk-5RT5O4JR.js → chunk-7CGPPAYR.js} +1 -1
  130. package/dist/{chunk-F73MC7EZ.js → chunk-7KHM2FZH.js} +2 -2
  131. package/dist/{chunk-VL6CUNSX.js → chunk-7SDUKCNW.js} +4 -1
  132. package/dist/{chunk-XMRTFPWX.js → chunk-A23KDROH.js} +3 -3
  133. package/dist/{chunk-N5SKHIAP.js → chunk-A72JPXIV.js} +8 -6
  134. package/dist/{chunk-PJIPUEJ3.js → chunk-AXS6MBNH.js} +1 -1
  135. package/dist/{chunk-2FPENTCF.js → chunk-AYHIF6DH.js} +1 -1
  136. package/dist/{chunk-J6ON5SYE.js → chunk-B5J23C73.js} +1 -1
  137. package/dist/{chunk-7VAUGG6B.js → chunk-B5UHX5UC.js} +2 -2
  138. package/dist/chunk-BGLKLXL3.js +29 -0
  139. package/dist/{chunk-FHHYXZSP.js → chunk-C7OKDYBH.js} +2 -2
  140. package/dist/{chunk-JBUMD6DS.js → chunk-CFGGE3HO.js} +1 -1
  141. package/dist/{chunk-XGBLRDSU.js → chunk-CQFQGAZI.js} +17 -7
  142. package/dist/{chunk-GMLAKNFY.js → chunk-D2OL3ZSS.js} +1 -1
  143. package/dist/{chunk-D7GNNID2.js → chunk-D3EJSLCL.js} +2 -2
  144. package/dist/{chunk-BUVCV3WI.js → chunk-D6FEHY5G.js} +3 -2
  145. package/dist/{chunk-4BYHAOHH.js → chunk-DAERKOOG.js} +3 -2
  146. package/dist/{chunk-IQH3DDZ2.js → chunk-DOLATMGF.js} +2 -2
  147. package/dist/{chunk-W3HYWD63.js → chunk-DZSBFITC.js} +15 -8
  148. package/dist/{chunk-PPFX6GRK.js → chunk-EAEJ7CDM.js} +6 -3
  149. package/dist/{chunk-WZGYIVYH.js → chunk-EAQLI2SO.js} +4 -2
  150. package/dist/{chunk-GYBDPCRC.js → chunk-ECGGQX2H.js} +2 -2
  151. package/dist/{chunk-FG4O64DV.js → chunk-F3WZ5AKM.js} +5 -5
  152. package/dist/{chunk-SUXP4OBT.js → chunk-F4LPQA4E.js} +1 -1
  153. package/dist/{chunk-KYZMN6I6.js → chunk-FBW3Q2OY.js} +2 -2
  154. package/dist/{chunk-JQLS3MZB.js → chunk-FWBKMPNR.js} +1 -1
  155. package/dist/{chunk-OOWPSBIS.js → chunk-GMW4ZHST.js} +3 -3
  156. package/dist/{chunk-R25RGPUB.js → chunk-H5XTJ7GJ.js} +2 -3
  157. package/dist/{chunk-PGZ2R3ON.js → chunk-HDHZWIFL.js} +8 -6
  158. package/dist/{chunk-GRYZ5EP3.js → chunk-HMLAWVG6.js} +13 -2
  159. package/dist/{chunk-6ZJ3N7QI.js → chunk-I33UIUZD.js} +1 -1
  160. package/dist/{chunk-RH2NCQBZ.js → chunk-ISA2O2BK.js} +2 -2
  161. package/dist/{chunk-K3IJQNB7.js → chunk-KHJIEPZV.js} +3 -2
  162. package/dist/{chunk-ES4RKQ7B.js → chunk-MG3HTY6F.js} +7 -7
  163. package/dist/chunk-MICRGE3J.js +1 -0
  164. package/dist/{chunk-WNAYQQ6Y.js → chunk-MMPKN7WV.js} +2 -2
  165. package/dist/{chunk-PGRPNDWM.js → chunk-NR4CPM4T.js} +1 -1
  166. package/dist/{chunk-5WDXPHEW.js → chunk-NRBAXRWE.js} +1 -1
  167. package/dist/{chunk-66ADEPFB.js → chunk-NS4NSHVX.js} +5 -3
  168. package/dist/{chunk-YSGLEHND.js → chunk-NUZHC6MM.js} +14 -2
  169. package/dist/{chunk-WGD2HX2A.js → chunk-OED6LUWE.js} +1 -1
  170. package/dist/{chunk-OSZDHN5Z.js → chunk-OHA6WSAG.js} +5 -10
  171. package/dist/chunk-P5VGSVWG.js +39 -0
  172. package/dist/{chunk-KJW2AS57.js → chunk-PEUGPAKH.js} +1 -1
  173. package/dist/{chunk-IPAU6FLH.js → chunk-PPHTIKZO.js} +1 -1
  174. package/dist/{chunk-P6WFZDKS.js → chunk-PWG3VHRQ.js} +2 -2
  175. package/dist/{chunk-HOIZ6MIS.js → chunk-RLJXVFEH.js} +1 -1
  176. package/dist/{chunk-NQGPD6NX.js → chunk-RMEBFYL7.js} +1 -1
  177. package/dist/{chunk-APDKUGSH.js → chunk-S27UBCVX.js} +5 -4
  178. package/dist/{chunk-XEGZHHRH.js → chunk-SVGARBDY.js} +1 -1
  179. package/dist/{chunk-UWGUKMBK.js → chunk-SYBYFQTY.js} +2 -2
  180. package/dist/{chunk-IUYUS2SO.js → chunk-TYONQSOK.js} +2 -2
  181. package/dist/{chunk-L4WZSVMT.js → chunk-UB6MLXUL.js} +3 -3
  182. package/dist/{chunk-MJW6SQYB.js → chunk-UBZDYOCA.js} +1 -1
  183. package/dist/{chunk-2DV4THNQ.js → chunk-UWRBD2YO.js} +2 -2
  184. package/dist/{chunk-DEMALFHY.js → chunk-UXYEOWG5.js} +1 -1
  185. package/dist/{chunk-UCCC7YVZ.js → chunk-W7PAIVAP.js} +4 -2
  186. package/dist/{chunk-T5RQGI6O.js → chunk-X3UYTAOG.js} +1 -1
  187. package/dist/{chunk-VKKUGZ3G.js → chunk-XQZ6EWOE.js} +8 -5
  188. package/dist/{chunk-TVRBQMIX.js → chunk-YPMGP2X4.js} +6 -6
  189. package/dist/{chunk-EOQFPZEE.js → chunk-YSG3DW7W.js} +1 -1
  190. package/dist/{chunk-2QEDJSJC.js → chunk-ZMDYQ2HH.js} +1 -1
  191. package/dist/{chunk-27GD7LVR.js → chunk-ZMWXE4GT.js} +1 -1
  192. package/dist/generated/index.d.ts +3 -0
  193. package/dist/generated/index.js +109 -105
  194. package/dist/index.js +109 -105
  195. package/dist/styles.css +371 -63
  196. package/dist/utils/focusModality.d.ts +17 -1
  197. package/dist/utils/index.d.ts +1 -1
  198. package/dist/utils/index.js +1 -1
  199. package/package.json +3 -3
  200. package/dist/chunk-WKEPORNM.js +0 -2
  201. /package/dist/{chunk-5BP6IS3N.js → chunk-4QQ3MND5.js} +0 -0
package/README.md CHANGED
@@ -54,7 +54,7 @@ import { Button } from '@crewlethq/ui/Button'; // 8 KB of CSS, not 182 KB
54
54
  | Arranging a page | `ArrangeBoard`, `ArrangeGrid`, `ArrangeFrame` (with `useGridResize`), `ArrangeGroup`, `ArrangeList`, and the reorder hooks under them (`useReorder`, `useReorderLists`, `moveKey`) |
55
55
  | Application shell | `AppShell` with `AppShell.Rail`, `AppShell.Topbar`, `AppShell.AccountRow` and `useAppShell`, `AuthLayout`, `SidebarNav` and `NavItem`, `BrandLockup`, `SearchTrigger`, `PageHeader`, `Toolbar`, `Stack`, `Inline`, `Spacer`, `AutoGrid`, `ErrorBoundary`, `useShortcut`, `useFullscreen`, `useIdle`, `useMediaMatch` |
56
56
  | Preferences | `ThemeToggle`, `ThemeSwitcher`, `DensitySwitcher`, `ThemeGallery`, `ThemeSwatch`, `useThemePreference`, `useDensityPreference`, `useSystemTheme`, `resolveTheme`, `applyStoredPreferences`, and the framework-free `applyTheme`, `applyPalette`, `applyDensity` with `THEME_PREFERENCES`, `DENSITY_PREFERENCES` and their guards |
57
- | Artifacts | `SandboxedFrame` (with `SandboxedFramePlaceholder` and `SandboxedFrameNotice`), `LinkInterstitial` and `openExternal`, `VersionTimeline`, `ShareDialog` with the role ladder (`ARTIFACT_ROLES`, `SHAREABLE_ROLES`, `roleAtLeast`), `PrincipalPicker`, `Principal` and `PrincipalAvatar`, `ArtifactCard`, `ArtifactKindGlyph` and `ArtifactPreviewGlyph` (the preview a card draws with no cover, for a cover with nothing to draw), `ArtifactBar` and `ArtifactVersionChip` (an open artifact's one slim bar), `ArtifactPanel` and `ArtifactWorkspace` (the panels it opens beside or over the artifact), `CanvasBoard` (a design's artboards and notes on a `Canvas`, with the visibility budget `liveBoards`), `CanvasToolbar` (a canvas's tool palette, with `toolForKey`), `LayersList` (the list of a canvas's items beside it, marked by the canvas's selection), `CanvasSchematic` (a design's cover, drawn from its boards' frames), `AccessDeniedCard`, `ArtifactIcon` (with `artifactIconGlyph` and `ARTIFACT_ICON_WORDS`), the native gallery covers (`DocCover`, `SheetCover`, `DashboardCover`), `MergeConflicts`, the dashboard pieces (`WidgetFrame`, `DatasetSource` and `DatasetSourceList`), and `FrameProtocol` (the wire between a host page and an embedded artifact, with no React in it) |
57
+ | Artifacts | `SandboxedFrame` (with `SandboxedFramePlaceholder` and `SandboxedFrameNotice`), `LinkInterstitial` and `openExternal`, `VersionTimeline`, `ShareDialog` with the role ladder (`ARTIFACT_ROLES`, `SHAREABLE_ROLES`, `roleAtLeast`), `PrincipalPicker`, `Principal` and `PrincipalAvatar`, `ArtifactCard`, `ArtifactKindGlyph` and `ArtifactPreviewGlyph` (the preview a card draws with no cover, for a cover with nothing to draw), `ArtifactBar` and `ArtifactVersionChip` (an open artifact's one slim bar), `ArtifactPanel` and `ArtifactWorkspace` (the panels it opens beside or over the artifact), `CanvasBoard` (a design's artboards and notes on a `Canvas`, with the visibility budget `liveBoards`), `CanvasToolbar` (a canvas's tool palette, with `toolForKey`), `LayersList` (the list of a canvas's items beside it, marked by the canvas's selection), `CanvasSchematic` (a design's cover, drawn from its boards' frames), `AccessDeniedCard`, `ArtifactIcon` (with `artifactIconGlyph` and `ARTIFACT_ICON_WORDS`), the native gallery covers (`DocCover`, `SheetCover`, `DashboardCover`), `MergeConflicts`, the dashboard pieces (`WidgetFrame`, `DatasetSource` and `DatasetSourceList`), and `FrameProtocol` (the wire between a host page and an embedded artifact, with no React in it), `ArtifactNameCell` and `ArtifactAccessLabel` (with `ArtifactAccessGlyph`) for a list of artifacts |
58
58
  | Sheets | `SheetGrid`, the cells on their own (`CheckboxCell`, `TextCell`, `LongTextCell`, `NumberCell`, `SelectCell`, `MultiSelectCell`, `PersonCell`, `StatusCell`, `DateCell`, `UrlCell`, `RatingCell`, and `SheetCell` for any type), `ChangeMark`, and `SheetModel` (every rule a sheet is drawn from, with no React in it: values, parsing, the keyboard model, TSV, the pending edits of D23) |
59
59
  | Presence | `PresenceStack`, `PresenceRing` and `presenceHueClass`, `CursorFlag`, `LiveCursor`, `FollowBanner`, `PeopleRail` (with `peopleRailKey`), and `PresenceModel` (the roster order, one entry per person, the session hues from `PRESENCE_HUES`, with no React in it) |
60
60
  | Presentations | `SlideStage` (a slide laid out at 1920 by 1080 and scaled to its box, with `SLIDE_WIDTH` and `SLIDE_HEIGHT`), `useSlideKeys` (the keys a show and a clicker send), `SlideNav` (Previous, the position and Next, with `SLIDE_NAV_LABELS`), `SlideFilmstrip`, `SlideGrid`, `SlideCompare` (with `SLIDE_COMPARE_LABELS`), `PresenterView` (with `formatStopwatch`) |
@@ -204,6 +204,46 @@ 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.37.1
208
+
209
+ ### Sheets
210
+
211
+ **`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.
212
+
213
+ **`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.
214
+
215
+ **`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.
216
+
217
+ **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.
218
+
219
+ ### Focus
220
+
221
+ **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.
222
+
223
+ **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.
224
+
225
+ **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.
226
+
227
+ ### Hit areas
228
+
229
+ **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.
230
+
231
+ ## Changes in 0.37.0
232
+
233
+ ### An artifact list with an identity
234
+
235
+ **`ArtifactNameCell` names an artifact in a list.** The kind's glyph on the kind's tint (the Make row's tile at a list's size, so a doc started from the tray is found in the list by the same mark in the same colour), the title, and under it the kind's word and the artifact's description (`detail`) on one quiet line, each cut on one line with the whole of it on hover. The kind is printed, so a list needs no Type column of its own. Under the pointer the row's ground moves and the mark's hairline takes the kind's hue; nothing lifts. `pinned` draws and says a pin, and `trashed` draws the mark without its tint. Every word is in `labels`.
236
+
237
+ **`ArtifactAccessLabel` says who can open an artifact** as its glyph and a word: Private, Shared or Company (`ARTIFACT_ACCESS_LABELS`), or the caller's own `label` and `title`. Access is a fact about reach, never a status, so it takes no colour: the word is a step stronger where others can open it. The glyphs are `ArtifactAccessGlyph`, which `ArtifactCard` now draws its access with too, and the `ArtifactAccess` type has moved to this module (the card's subpath still exports it).
238
+
239
+ ### Previews
240
+
241
+ **`PreviewScale` fills a box with `fit="fill"`.** The content covers the box edge to edge, centred across and held at the top, wherever that leaves at most a fifth of it outside the box (`PREVIEW_FILL_MAX_CUT`), and is contained whole otherwise. A design's laptop board (16:10) in a gallery card (16:9) was contained, which left an empty strip down each side of the card; filled, it reaches both sides and loses a tenth of its foot. A phone's board is still shown whole. `PreviewFit` names the three fits.
242
+
243
+ ### Wording
244
+
245
+ **The gallery's tray is "Start a new artifact"** in the stories, the tests and the notes on `ArtifactMakeRow` and `ArtifactKindTile`, where it was "Make something new".
246
+
207
247
  ## Changes in 0.36.0
208
248
 
209
249
  ### New on a create page and in the gallery
@@ -1,16 +1,16 @@
1
- export { AGENT_HANDOFF_LABELS, AgentHandoffPanel } from '../chunk-EOQFPZEE.js';
1
+ export { AGENT_HANDOFF_LABELS, AgentHandoffPanel } from '../chunk-YSG3DW7W.js';
2
2
  import '../chunk-AUQPBL4O.js';
3
3
  import '../chunk-3TFDQLW3.js';
4
4
  import '../chunk-MICH6QSJ.js';
5
- import '../chunk-RH2NCQBZ.js';
5
+ import '../chunk-ISA2O2BK.js';
6
6
  import '../chunk-Y5BD4MTE.js';
7
- import '../chunk-IUYUS2SO.js';
7
+ import '../chunk-TYONQSOK.js';
8
8
  import '../chunk-SMBKXWML.js';
9
- import '../chunk-YSGLEHND.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-HDHZWIFL.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
  }
@@ -209,6 +210,10 @@
209
210
 
210
211
  .crewlet-app-shell__rail-row--action,
211
212
  .crewlet-app-shell__rail-foot > .crewlet-btn {
213
+ /* Half the foot's gap to each neighbour, so the rows' targets meet
214
+ (HitArea.css), across the row's 1px border; the account row below
215
+ reaches back the same way. */
216
+ --crewlet-hit-area-block: calc(var(--crewlet-rail-foot-gap, 0px) / 2 + 1px);
212
217
  cursor: pointer;
213
218
  transition:
214
219
  background var(--motion-duration-fast) var(--motion-easing-default),
@@ -635,11 +640,12 @@
635
640
  * the controls off the rail.
636
641
  */
637
642
  .crewlet-account-row {
643
+ --crewlet-account-row-pad: var(--spacing-1);
638
644
  display: flex;
639
645
  align-items: center;
640
646
  gap: var(--spacing-1);
641
647
  min-width: 0;
642
- padding: var(--spacing-1) 0;
648
+ padding: var(--crewlet-account-row-pad) 0;
643
649
  }
644
650
 
645
651
  .crewlet-account-row__who {
@@ -656,6 +662,12 @@
656
662
  transition: background var(--motion-duration-fast) var(--motion-easing-default);
657
663
  }
658
664
 
665
+ /* In the rail's foot, the account row reaches up across its own padding to
666
+ half the foot's gap, to meet the row above (HitArea.css). */
667
+ .crewlet-app-shell__rail-foot .crewlet-account-row__who {
668
+ --crewlet-hit-area-block-start: calc(var(--crewlet-rail-foot-gap) / 2 + var(--crewlet-account-row-pad));
669
+ }
670
+
659
671
  /* The row as the reader's menu button: a button drawn as the link is. */
660
672
  button.crewlet-account-row__who {
661
673
  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';
@@ -0,0 +1,40 @@
1
+ import { type GlyphSize } from '@crewlethq/icons/glyphs';
2
+ /**
3
+ * Who can open an artifact: only its owner (and those they shared it with by
4
+ * name, which the owner alone sees), people it is shared with, or the whole
5
+ * company.
6
+ */
7
+ export type ArtifactAccess = 'private' | 'shared' | 'company';
8
+ /** Every access, from the narrowest to the widest. */
9
+ export declare const ARTIFACT_ACCESSES: readonly ["private", "shared", "company"];
10
+ /**
11
+ * What each access is called where there is room for a word: a list's column,
12
+ * a card's hover text. Short, because a column of them is read down.
13
+ */
14
+ export declare const ARTIFACT_ACCESS_LABELS: Readonly<Record<ArtifactAccess, string>>;
15
+ /**
16
+ * The glyph an access is drawn with, wherever it is drawn: a lock, people or
17
+ * the company's building. Decorative: whatever draws it says the word too,
18
+ * printed or for assistive technology.
19
+ */
20
+ export declare function ArtifactAccessGlyph({ access, size }: {
21
+ access: ArtifactAccess;
22
+ size?: GlyphSize | undefined;
23
+ }): import("react").JSX.Element;
24
+ export interface ArtifactAccessLabelProps {
25
+ access: ArtifactAccess;
26
+ /** The word printed beside the glyph. The design system's short word by default. */
27
+ label?: string | undefined;
28
+ /** The hover text, where the word is not the whole story: "Shared with 3 people". */
29
+ title?: string | undefined;
30
+ className?: string | undefined;
31
+ }
32
+ /**
33
+ * Who can open an artifact, as a glyph and its word: a list's Access column.
34
+ *
35
+ * QUIET FOR PRIVATE, A STEP UP FOR SHARED. The glyph is the tertiary step,
36
+ * and an artifact others can open prints its word a step stronger than one
37
+ * nobody else sees, so a column read down picks out what is shared without
38
+ * a hue: access is a fact about reach, never a status, and takes no colour.
39
+ */
40
+ export declare function ArtifactAccessLabel({ access, label, title, className }: ArtifactAccessLabelProps): import("react").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './ArtifactAccess.css';
2
+ export { ARTIFACT_ACCESSES, ARTIFACT_ACCESS_LABELS, ArtifactAccessGlyph, ArtifactAccessLabel } from './ArtifactAccess.js';
3
+ export type { ArtifactAccess, ArtifactAccessLabelProps } from './ArtifactAccess.js';
@@ -0,0 +1,2 @@
1
+ export { ARTIFACT_ACCESSES, ARTIFACT_ACCESS_LABELS, ArtifactAccessGlyph, ArtifactAccessLabel } from '../chunk-BGLKLXL3.js';
2
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,31 @@
1
+ /*
2
+ * An artifact's access as a glyph and its word. No colour of its own: the
3
+ * glyph is the tertiary step and the word the secondary, one step stronger
4
+ * where others can open it.
5
+ */
6
+
7
+ .crewlet-artifact-access {
8
+ display: inline-flex;
9
+ align-items: center;
10
+ gap: calc(var(--spacing-1) * 1.5);
11
+ min-width: 0;
12
+ max-width: 100%;
13
+ color: var(--color-text-tertiary);
14
+ }
15
+
16
+ .crewlet-artifact-access__glyph {
17
+ display: inline-flex;
18
+ flex: none;
19
+ }
20
+
21
+ .crewlet-artifact-access__word {
22
+ min-width: 0;
23
+ overflow: hidden;
24
+ text-overflow: ellipsis;
25
+ white-space: nowrap;
26
+ }
27
+
28
+ .crewlet-artifact-access--shared,
29
+ .crewlet-artifact-access--company {
30
+ color: var(--color-text-secondary);
31
+ }
@@ -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,4 +1,5 @@
1
1
  import { type ReactNode } from 'react';
2
+ import { type ArtifactAccess } from '../ArtifactAccess/index.js';
2
3
  import { type ArtifactKind } from '../ArtifactKindGlyph/index.js';
3
4
  import { type AvatarStackMember } from '../Avatar/index.js';
4
5
  import { type Principal } from '../Principal/index.js';
@@ -14,12 +15,6 @@ import { type TimeValue } from '../RelativeTime/index.js';
14
15
  export declare function ArtifactPreviewGlyph({ kind }: {
15
16
  kind: ArtifactKind;
16
17
  }): import("react").JSX.Element;
17
- /**
18
- * Who can open an artifact, as its card says it: only its owner (and those
19
- * they shared it with by name, which the owner alone sees), people it is
20
- * shared with, or the whole company.
21
- */
22
- export type ArtifactAccess = 'private' | 'shared' | 'company';
23
18
  export type ArtifactCardSize = 'card' | 'compact';
24
19
  export interface ArtifactCardLabels {
25
20
  kinds: Record<ArtifactKind, string>;
@@ -1,6 +1,7 @@
1
1
  import '../ArtifactKindIllustration/ArtifactKinds.css';
2
2
  import './ArtifactCard.css';
3
3
  export { ArtifactCard, ArtifactCardSkeleton, ArtifactPreviewGlyph } from './ArtifactCard.js';
4
- export type { ArtifactAccess, ArtifactCardLabels, ArtifactCardProps, ArtifactCardSize } from './ArtifactCard.js';
4
+ export type { ArtifactCardLabels, ArtifactCardProps, ArtifactCardSize } from './ArtifactCard.js';
5
5
  export { ARTIFACT_KINDS, ArtifactKindGlyph } from '../ArtifactKindGlyph/index.js';
6
6
  export type { ArtifactKind } from '../ArtifactKindGlyph/index.js';
7
+ export type { ArtifactAccess } from '../ArtifactAccess/index.js';
@@ -1,13 +1,14 @@
1
- export { ArtifactCard, ArtifactCardSkeleton, ArtifactPreviewGlyph } from '../chunk-OSZDHN5Z.js';
1
+ export { ArtifactCard, ArtifactCardSkeleton, ArtifactPreviewGlyph } from '../chunk-OHA6WSAG.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
- import '../chunk-MJW6SQYB.js';
6
+ import '../chunk-UBZDYOCA.js';
7
7
  import '../chunk-5QXRI35B.js';
8
8
  import '../chunk-AV2DXAEL.js';
9
9
  import '../chunk-5AQBPHZD.js';
10
10
  import '../chunk-PZKHBB7D.js';
11
+ import '../chunk-BGLKLXL3.js';
11
12
  export { ARTIFACT_KINDS, ArtifactKindGlyph } from '../chunk-CE2THTQR.js';
12
13
  import '../chunk-BHHIIK3M.js';
13
14
  import '../chunk-PQADV6P6.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';
@@ -65,7 +65,7 @@ export interface ArtifactKindTileProps {
65
65
  * One kind, or one starting point of a kind, as a tile: the kind's drawing on
66
66
  * its tinted ground (or the starting point's own `face`), framed, with its
67
67
  * name under it, such as a create page's starting layouts. The whole tile is
68
- * one link or button named by the name. The gallery's Make something new row
68
+ * one link or button named by the name. The gallery's "Start a new artifact" row
69
69
  * is the quieter `ArtifactMakeRow`, a toolbar of glyphs rather than pictures.
70
70
  *
71
71
  * A TILE THAT CANNOT START is still a stop on the row, so a reader moving
@@ -1,3 +1,3 @@
1
- export { ArtifactKindGround, ArtifactKindIllustration, ArtifactKindTile } from '../chunk-MJW6SQYB.js';
1
+ export { ArtifactKindGround, ArtifactKindIllustration, ArtifactKindTile } from '../chunk-UBZDYOCA.js';
2
2
  import '../chunk-BZFWDIV6.js';
3
3
  import '../chunk-ODEQTPFM.js';
@@ -1,5 +1,5 @@
1
1
  /*
2
- * A kind's drawing, its tinted ground and the Make something new tile.
2
+ * A kind's drawing, its tinted ground and the "Start a new artifact" tile.
3
3
  *
4
4
  * Every colour is the kind's token, `--color-artifact-kind-<kind>` and its
5
5
  * Fill and Line steps, set once per kind on `--crewlet-kind-*`
@@ -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-66ADEPFB.js';
1
+ export { ArtifactMakeRow } from '../chunk-NS4NSHVX.js';
2
2
  import '../chunk-CE2THTQR.js';
3
+ import '../chunk-2YTOOH3A.js';
3
4
  import '../chunk-BZFWDIV6.js';
4
5
  import '../chunk-ODEQTPFM.js';
@@ -1,5 +1,5 @@
1
1
  /*
2
- * The Make something new tray.
2
+ * The "Start a new artifact" tray.
3
3
  *
4
4
  * Every colour is a token: the tray's ground, its dots and its hairlines are
5
5
  * the surface and border steps, and each kind's mark reads the kind's own
@@ -26,9 +26,10 @@
26
26
  }
27
27
 
28
28
  .crewlet-make-row__list {
29
+ --crewlet-make-row-gap: var(--spacing-1);
29
30
  display: grid;
30
31
  grid-template-columns: repeat(3, minmax(0, 1fr));
31
- gap: var(--spacing-1);
32
+ gap: var(--crewlet-make-row-gap);
32
33
  margin: 0;
33
34
  padding: var(--spacing-1);
34
35
  list-style: none;
@@ -53,6 +54,10 @@
53
54
  color: var(--color-text-primary);
54
55
  text-decoration: none;
55
56
  outline: none;
57
+ /* Half the gap to each neighbour, so the targets meet (HitArea.css), and
58
+ the 1px border the reach is measured inside of. */
59
+ --crewlet-hit-area-block: calc(var(--crewlet-make-row-gap) / 2 + 1px);
60
+ --crewlet-hit-area-inline: calc(var(--crewlet-make-row-gap) / 2 + 1px);
56
61
  transition:
57
62
  background-color var(--motion-duration-fast) var(--motion-easing-out),
58
63
  border-color var(--motion-duration-fast) var(--motion-easing-out),
@@ -0,0 +1,37 @@
1
+ import { type ArtifactKind } from '../ArtifactKindGlyph/index.js';
2
+ export interface ArtifactNameCellLabels {
3
+ kinds: Record<ArtifactKind, string>;
4
+ pinned: string;
5
+ }
6
+ export interface ArtifactNameCellProps {
7
+ kind: ArtifactKind;
8
+ title: string;
9
+ /**
10
+ * What it is about, in a line under the title after the kind's word: the
11
+ * artifact's own description. Left out, the kind's word stands alone.
12
+ */
13
+ detail?: string | undefined;
14
+ pinned?: boolean | undefined;
15
+ /** It is in the trash: its mark is drawn without its kind's tint. */
16
+ trashed?: boolean | undefined;
17
+ className?: string | undefined;
18
+ labels?: Partial<ArtifactNameCellLabels> | undefined;
19
+ }
20
+ /**
21
+ * An artifact's name in a list: its kind's glyph on the kind's tint, the
22
+ * title, and under it the kind's word and what it is about.
23
+ *
24
+ * THE SAME MARK AS THE MAKE ROW'S, so a reader who started a doc from the
25
+ * tray finds it in the list by the same tile in the same colour, and the
26
+ * grid's badge and the list's mark name one kind one way. The mark is the one
27
+ * coloured thing on the row; the words are the text steps.
28
+ *
29
+ * TWO LINES, ONE NAME. The title is the row's name and the line under it is
30
+ * its description, each cut on one line with the whole of it on hover, so a
31
+ * list of long titles keeps one row height. The kind's word is printed rather
32
+ * than only drawn, which is what lets the list drop a Type column of its own.
33
+ *
34
+ * Not a link: the row it sits in is. The mark is decorative because the kind
35
+ * is printed beside it.
36
+ */
37
+ export declare function ArtifactNameCell({ kind, title, detail, pinned, trashed, className, labels }: ArtifactNameCellProps): import("react").JSX.Element;
@@ -0,0 +1,4 @@
1
+ import '../ArtifactKindIllustration/ArtifactKinds.css';
2
+ import './ArtifactNameCell.css';
3
+ export { ArtifactNameCell } from './ArtifactNameCell.js';
4
+ export type { ArtifactNameCellLabels, ArtifactNameCellProps } from './ArtifactNameCell.js';
@@ -0,0 +1,4 @@
1
+ export { ArtifactNameCell } from '../chunk-P5VGSVWG.js';
2
+ import '../chunk-CE2THTQR.js';
3
+ import '../chunk-BZFWDIV6.js';
4
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,104 @@
1
+ /*
2
+ * An artifact's name in a list: the kind's mark on its tint, the title over
3
+ * one quiet line. Every colour is a token: the mark reads the kind's own Fill,
4
+ * Line and Ink (`ArtifactKinds.css`), the words the text steps.
5
+ */
6
+
7
+ .crewlet-artifact-name {
8
+ display: flex;
9
+ align-items: center;
10
+ gap: var(--spacing-3);
11
+ min-width: 0;
12
+ max-width: 100%;
13
+ padding-block: var(--spacing-1);
14
+ }
15
+
16
+ /* THE MARK, the Make row's tile at a list's size: the kind's glyph on its
17
+ tint inside the kind's hairline. */
18
+ .crewlet-artifact-name__mark {
19
+ display: inline-flex;
20
+ flex: none;
21
+ align-items: center;
22
+ justify-content: center;
23
+ width: 32px;
24
+ height: 32px;
25
+ box-sizing: border-box;
26
+ border-radius: var(--radius-md);
27
+ background: var(--crewlet-kind-fill);
28
+ box-shadow: inset 0 0 0 1px var(--crewlet-kind-line);
29
+ color: var(--crewlet-kind-ink);
30
+ transition: box-shadow var(--motion-duration-fast) var(--motion-easing-out);
31
+ }
32
+
33
+ /* UNDER THE POINTER the row's ground moves (the row's own hover), and the
34
+ mark's hairline takes the kind's hue, so the one coloured thing on the row
35
+ answers too. No lift and no movement: a list is read down, not played. */
36
+ :is(tr, [role='row']):hover .crewlet-artifact-name__mark {
37
+ box-shadow: inset 0 0 0 1px var(--crewlet-kind-hue);
38
+ }
39
+
40
+ .crewlet-artifact-name--trashed .crewlet-artifact-name__mark {
41
+ background: var(--color-surface-inset);
42
+ box-shadow: inset 0 0 0 1px var(--color-border-default);
43
+ color: var(--color-text-tertiary);
44
+ }
45
+
46
+ .crewlet-artifact-name__words {
47
+ display: flex;
48
+ flex-direction: column;
49
+ gap: 2px;
50
+ min-width: 0;
51
+ }
52
+
53
+ .crewlet-artifact-name__title-row {
54
+ display: flex;
55
+ align-items: center;
56
+ gap: var(--spacing-1);
57
+ min-width: 0;
58
+ }
59
+
60
+ .crewlet-artifact-name__title {
61
+ min-width: 0;
62
+ overflow: hidden;
63
+ text-overflow: ellipsis;
64
+ white-space: nowrap;
65
+ color: var(--color-text-primary);
66
+ font-size: var(--font-size-sm);
67
+ font-weight: var(--font-weight-medium);
68
+ line-height: 1.35;
69
+ }
70
+
71
+ .crewlet-artifact-name__pin {
72
+ display: inline-flex;
73
+ flex: none;
74
+ color: var(--color-text-tertiary);
75
+ }
76
+
77
+ .crewlet-artifact-name__detail {
78
+ display: flex;
79
+ align-items: baseline;
80
+ gap: var(--spacing-1);
81
+ min-width: 0;
82
+ overflow: hidden;
83
+ white-space: nowrap;
84
+ color: var(--color-text-tertiary);
85
+ font-size: var(--font-size-xs);
86
+ line-height: 1.35;
87
+ }
88
+
89
+ .crewlet-artifact-name__kind,
90
+ .crewlet-artifact-name__dot {
91
+ flex: none;
92
+ }
93
+
94
+ .crewlet-artifact-name__about {
95
+ min-width: 0;
96
+ overflow: hidden;
97
+ text-overflow: ellipsis;
98
+ }
99
+
100
+ @media (prefers-reduced-motion: reduce) {
101
+ .crewlet-artifact-name__mark {
102
+ transition: none;
103
+ }
104
+ }
@@ -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';