@crewlethq/ui 0.81.2 → 0.83.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 (410) hide show
  1. package/README.md +89 -4
  2. package/dist/Accordion/index.js +3 -3
  3. package/dist/ActionCard/ActionCard.d.ts +49 -0
  4. package/dist/ActionCard/index.d.ts +4 -0
  5. package/dist/ActionCard/index.js +2 -0
  6. package/dist/ActionCard-47WSZ2O5.css +110 -0
  7. package/dist/ActivityLine/ActivityLine.d.ts +27 -0
  8. package/dist/ActivityLine/index.d.ts +4 -0
  9. package/dist/ActivityLine/index.js +4 -0
  10. package/dist/ActivityLine-AMSERTOB.css +74 -0
  11. package/dist/AgentHandoffPanel/index.js +15 -15
  12. package/dist/AppShell/AccountRow.d.ts +19 -1
  13. package/dist/AppShell/AppShell.d.ts +62 -4
  14. package/dist/AppShell/index.d.ts +1 -1
  15. package/dist/AppShell/index.js +12 -6
  16. package/dist/AppShell/railMotion.d.ts +60 -0
  17. package/dist/AppShell/railShape.d.ts +22 -0
  18. package/dist/{AppShell-2IBUS4TH.css → AppShell-U7D2MUUF.css} +291 -20
  19. package/dist/ArrangeFrame/index.js +2 -2
  20. package/dist/ArrangeGroup/index.js +2 -2
  21. package/dist/ArrangeList/index.js +8 -7
  22. package/dist/ArtifactBar/index.js +13 -11
  23. package/dist/ArtifactCard/index.js +13 -13
  24. package/dist/ArtifactCover/index.js +3 -3
  25. package/dist/ArtifactKindIllustration/index.js +1 -1
  26. package/dist/ArtifactKinds-3EH4KR3F.css +18 -0
  27. package/dist/ArtifactMakeRow/index.js +1 -1
  28. package/dist/ArtifactNameCell/index.js +1 -1
  29. package/dist/ArtifactPanel/index.js +5 -5
  30. package/dist/AttachmentChip/index.js +2 -2
  31. package/dist/AuthLayout/index.js +5 -4
  32. package/dist/Avatar/Avatar.d.ts +30 -28
  33. package/dist/Avatar/AvatarStack.d.ts +2 -2
  34. package/dist/Avatar/index.d.ts +1 -1
  35. package/dist/Avatar/index.js +2 -2
  36. package/dist/{Avatar-VJSJGFRG.css → Avatar-MNE3WBZO.css} +56 -54
  37. package/dist/AvatarPicker/index.js +13 -12
  38. package/dist/{AvatarStack-7I3P7LCK.css → AvatarStack-KEHD3GWY.css} +16 -4
  39. package/dist/BrandLockup/BrandLockup.d.ts +6 -0
  40. package/dist/BrandLockup/index.js +2 -1
  41. package/dist/BriefCard/BriefCard.d.ts +23 -1
  42. package/dist/BriefCard/index.d.ts +2 -2
  43. package/dist/BriefCard/index.js +7 -7
  44. package/dist/{BriefCard-VKTH3BSW.css → BriefCard-QCL7MVUV.css} +26 -0
  45. package/dist/Canvas/index.js +8 -6
  46. package/dist/CanvasBoard/index.js +11 -9
  47. package/dist/CanvasToolbar/index.js +10 -8
  48. package/dist/Card/index.js +2 -2
  49. package/dist/ChangeList/index.js +5 -5
  50. package/dist/ChangeMark/index.js +6 -4
  51. package/dist/CharacterPicker/index.js +2 -2
  52. package/dist/ChatDay/ChatDay.d.ts +53 -0
  53. package/dist/ChatDay/index.d.ts +5 -0
  54. package/dist/ChatDay/index.js +3 -0
  55. package/dist/ChatDay-E3FF5HWF.css +116 -0
  56. package/dist/ChatDivider/ChatDivider.d.ts +31 -0
  57. package/dist/ChatDivider/index.d.ts +4 -0
  58. package/dist/ChatDivider/index.js +2 -0
  59. package/dist/ChatDivider-7ZNDL2PZ.css +76 -0
  60. package/dist/ChatMessage/ChatMessage.d.ts +111 -0
  61. package/dist/ChatMessage/index.d.ts +4 -0
  62. package/dist/ChatMessage/index.js +5 -0
  63. package/dist/ChatMessage-FH7VRVCH.css +304 -0
  64. package/dist/ChatScale-L4SIHSKL.css +42 -0
  65. package/dist/ChatThread/ChatThread.d.ts +33 -4
  66. package/dist/ChatThread/index.d.ts +1 -1
  67. package/dist/ChatThread/index.js +2 -2
  68. package/dist/{ChatThread-2KO3FZKQ.css → ChatThread-HAECJMP6.css} +17 -0
  69. package/dist/CheckGrid/index.js +6 -6
  70. package/dist/Checkbox/index.js +5 -5
  71. package/dist/ChipField/ChipField.d.ts +82 -0
  72. package/dist/ChipField/index.d.ts +4 -0
  73. package/dist/ChipField/index.js +9 -0
  74. package/dist/ChipField-D4CW6XFA.css +108 -0
  75. package/dist/ColorField/index.js +5 -5
  76. package/dist/Combobox/index.js +7 -7
  77. package/dist/CommandPalette/index.js +12 -11
  78. package/dist/CommentThread/index.js +14 -14
  79. package/dist/CompactNav/CompactNav.d.ts +175 -0
  80. package/dist/CompactNav/index.d.ts +4 -0
  81. package/dist/CompactNav/index.js +9 -0
  82. package/dist/CompactNav-CU2AQXBC.css +322 -0
  83. package/dist/Composer/Composer.d.ts +26 -2
  84. package/dist/Composer/index.d.ts +2 -1
  85. package/dist/Composer/index.js +7 -7
  86. package/dist/{Composer-HQIMTMRC.css → Composer-ZEGHEAFE.css} +71 -0
  87. package/dist/ConfirmField/index.js +5 -5
  88. package/dist/ContrastBadge/index.js +2 -2
  89. package/dist/ContrastHelp/index.js +7 -6
  90. package/dist/Count/Count.d.ts +24 -6
  91. package/dist/Count/index.d.ts +1 -1
  92. package/dist/Count/index.js +1 -1
  93. package/dist/{Count-ZJ6ID4ZU.css → Count-2HXBBYPO.css} +19 -0
  94. package/dist/DataGrid/index.js +8 -8
  95. package/dist/DataTable/index.js +11 -10
  96. package/dist/DataView/index.js +18 -17
  97. package/dist/DatasetSource/index.js +3 -3
  98. package/dist/DateTimePicker/index.js +6 -5
  99. package/dist/DeepWorkCard/index.js +9 -9
  100. package/dist/Disclosure/index.js +3 -3
  101. package/dist/DocTabsEditor/index.js +11 -9
  102. package/dist/DockColumn/DockColumn.d.ts +68 -0
  103. package/dist/DockColumn/index.d.ts +3 -0
  104. package/dist/DockColumn/index.js +6 -0
  105. package/dist/DockColumn-SMJCXHS4.css +61 -0
  106. package/dist/Document/index.js +2 -2
  107. package/dist/EditingStatus/index.js +2 -2
  108. package/dist/{Editor-IMYESOW7.js → Editor-5D5Z3LBQ.js} +9 -8
  109. package/dist/EmojiPicker/EmojiPicker.d.ts +51 -0
  110. package/dist/EmojiPicker/emoji.d.ts +24 -0
  111. package/dist/EmojiPicker/index.d.ts +5 -0
  112. package/dist/EmojiPicker/index.js +15 -0
  113. package/dist/EmojiPicker-FMWYN2WX.css +63 -0
  114. package/dist/EntityChip/index.js +3 -3
  115. package/dist/EntityList/index.js +6 -6
  116. package/dist/FactList/index.js +6 -4
  117. package/dist/FolderTile/index.js +3 -3
  118. package/dist/FollowBanner/index.js +4 -4
  119. package/dist/HuePicker/index.js +9 -8
  120. package/dist/ImageUpload/ImageUpload.d.ts +6 -7
  121. package/dist/ImageUpload/index.js +3 -3
  122. package/dist/{ImageUpload-OWI7CCG7.css → ImageUpload-IFXZROFZ.css} +6 -37
  123. package/dist/InlineEditor/index.js +7 -7
  124. package/dist/Input/index.js +4 -4
  125. package/dist/Kbd/Kbd.d.ts +9 -0
  126. package/dist/Kbd/index.d.ts +1 -1
  127. package/dist/Kbd/index.js +1 -1
  128. package/dist/Layer/index.js +2 -2
  129. package/dist/LinkCard/LinkCard.d.ts +64 -0
  130. package/dist/LinkCard/index.d.ts +5 -0
  131. package/dist/LinkCard/index.js +5 -0
  132. package/dist/LinkCard-5I4MYU6I.css +155 -0
  133. package/dist/LinkInterstitial/index.js +7 -6
  134. package/dist/ListInput/index.js +10 -9
  135. package/dist/Listbox/index.js +3 -3
  136. package/dist/LogoSlot/index.js +3 -3
  137. package/dist/MarkdownEditor/format.d.ts +9 -1
  138. package/dist/MarkdownEditor/index.d.ts +2 -2
  139. package/dist/MarkdownEditor/index.js +10 -9
  140. package/dist/MediaMatch/index.d.ts +1 -1
  141. package/dist/MediaMatch/index.js +1 -1
  142. package/dist/MediaMatch/useMediaMatch.d.ts +14 -0
  143. package/dist/MentionChip/MentionChip.d.ts +25 -0
  144. package/dist/MentionChip/index.d.ts +3 -0
  145. package/dist/MentionChip/index.js +2 -0
  146. package/dist/MentionChip-W7MZZVRZ.css +42 -0
  147. package/dist/MentionMenu/MentionMenu.d.ts +82 -0
  148. package/dist/MentionMenu/index.d.ts +4 -0
  149. package/dist/MentionMenu/index.js +3 -0
  150. package/dist/MentionMenu-4NAQ45S4.css +65 -0
  151. package/dist/Menu/index.js +5 -4
  152. package/dist/MergeConflicts/index.js +9 -8
  153. package/dist/MessageActions/MessageActions.d.ts +58 -0
  154. package/dist/MessageActions/index.d.ts +4 -0
  155. package/dist/MessageActions/index.js +18 -0
  156. package/dist/MessageActions-Q4F5UH3S.css +73 -0
  157. package/dist/Modal/Modal.d.ts +12 -0
  158. package/dist/Modal/index.js +6 -5
  159. package/dist/{Modal-FYQYEI3N.css → Modal-GKUOO7PZ.css} +26 -1
  160. package/dist/OpenInAppCard/index.js +8 -8
  161. package/dist/OrgLabel/index.js +3 -3
  162. package/dist/OrgNode/index.js +4 -4
  163. package/dist/OrgTable/index.js +7 -7
  164. package/dist/Outline/index.js +2 -1
  165. package/dist/PeekRail/index.js +1 -1
  166. package/dist/PeopleRail/index.js +4 -4
  167. package/dist/PersonRow/PersonRow.d.ts +70 -0
  168. package/dist/PersonRow/index.d.ts +3 -0
  169. package/dist/PersonRow/index.js +2 -0
  170. package/dist/PersonRow-V5GTPNVP.css +161 -0
  171. package/dist/Popover/index.js +4 -3
  172. package/dist/Presence/index.d.ts +2 -0
  173. package/dist/Presence/index.js +4 -0
  174. package/dist/Presence/usePresence.d.ts +109 -0
  175. package/dist/PresenceStack/index.js +3 -3
  176. package/dist/{PresenceStack-ZV67BH4V.css → PresenceStack-2DTYRADY.css} +4 -6
  177. package/dist/PresenterView/index.js +5 -5
  178. package/dist/PricingCard/index.js +2 -2
  179. package/dist/Principal/index.js +3 -3
  180. package/dist/PrincipalPicker/index.js +11 -11
  181. package/dist/ProposalCard/index.js +15 -15
  182. package/dist/ReactionBar/ReactionBar.d.ts +84 -0
  183. package/dist/ReactionBar/index.d.ts +4 -0
  184. package/dist/ReactionBar/index.js +17 -0
  185. package/dist/ReactionBar-XXI4V7XG.css +93 -0
  186. package/dist/RecordChip/index.js +5 -4
  187. package/dist/RefusalCard/index.js +6 -6
  188. package/dist/RelatedRow/index.js +3 -3
  189. package/dist/Reorder/index.js +2 -1
  190. package/dist/ResultTableCard/index.js +7 -7
  191. package/dist/ReviewList/index.js +2 -2
  192. package/dist/RichEditor/index.js +2 -2
  193. package/dist/RunChip/index.js +5 -5
  194. package/dist/SandboxedFrame/index.js +2 -2
  195. package/dist/SectionFrame/index.js +2 -2
  196. package/dist/SegmentedControl/index.js +8 -7
  197. package/dist/Select/index.js +4 -4
  198. package/dist/SelectionBar/index.js +6 -6
  199. package/dist/SetupWizard/index.js +6 -6
  200. package/dist/ShareDialog/index.js +13 -12
  201. package/dist/SheetColumnEditor/index.js +17 -16
  202. package/dist/SheetGrid/index.js +14 -12
  203. package/dist/Shortcut/index.js +3 -3
  204. package/dist/SidePanel/SidePanel.d.ts +8 -1
  205. package/dist/SidePanel/SidePanelBase.d.ts +3 -1
  206. package/dist/SidePanel/index.js +5 -5
  207. package/dist/{SidePanel-VXKUKLOJ.css → SidePanel-BKWT6Q6Z.css} +36 -0
  208. package/dist/SidebarNav/SidebarNav.d.ts +52 -3
  209. package/dist/SidebarNav/index.js +1 -1
  210. package/dist/{SidebarNav-VTQ3G4AE.css → SidebarNav-E7PZGGA6.css} +132 -7
  211. package/dist/Skeleton/index.js +1 -1
  212. package/dist/{Skeleton-7ZA5ETJM.css → Skeleton-GIXV3KK5.css} +3 -1
  213. package/dist/SlideCompare/index.js +5 -5
  214. package/dist/SlideFilmstrip/index.js +11 -9
  215. package/dist/SlideGrid/index.js +4 -4
  216. package/dist/SlideStage/index.js +3 -3
  217. package/dist/SourceEditor/index.js +2 -2
  218. package/dist/StatusCard/index.js +5 -5
  219. package/dist/Switcher/index.js +13 -12
  220. package/dist/TableCells/index.js +5 -5
  221. package/dist/Tabs/index.js +7 -6
  222. package/dist/Tag/Tag.d.ts +9 -2
  223. package/dist/Tag/index.js +1 -1
  224. package/dist/{Tag-JTJVZM2D.css → Tag-WLDOROB5.css} +24 -0
  225. package/dist/TagsInput/index.js +6 -6
  226. package/dist/ThemeGallery/index.js +5 -5
  227. package/dist/ThemeSwitcher/index.js +9 -8
  228. package/dist/ThinkingIndicator/index.js +1 -1
  229. package/dist/{ThinkingIndicator-JMK2TNMZ.css → ThinkingIndicator-S7ZL2C77.css} +8 -0
  230. package/dist/ThreadSummary/ThreadSummary.d.ts +43 -0
  231. package/dist/ThreadSummary/index.d.ts +4 -0
  232. package/dist/ThreadSummary/index.js +6 -0
  233. package/dist/ThreadSummary-AGR4NDMD.css +90 -0
  234. package/dist/TimeRangePicker/index.js +13 -12
  235. package/dist/TimeWindowPicker/index.js +11 -10
  236. package/dist/Toaster/index.js +2 -2
  237. package/dist/Toolbar/index.js +3 -3
  238. package/dist/Tooltip/Tooltip.d.ts +30 -3
  239. package/dist/Tooltip/index.js +5 -3
  240. package/dist/TreeCanvas/index.js +10 -7
  241. package/dist/TreeGrid/index.js +3 -3
  242. package/dist/ValueField/index.js +9 -9
  243. package/dist/VersionCompare/index.js +10 -9
  244. package/dist/VersionTimeline/index.js +4 -4
  245. package/dist/WidgetFrame/index.js +2 -2
  246. package/dist/{chunk-LOWQK2PB.js → chunk-22CU7V4J.js} +4 -4
  247. package/dist/{chunk-WCDPFTJZ.js → chunk-25JQNHTC.js} +92 -28
  248. package/dist/{chunk-6LXS3X7A.js → chunk-2L4WHYMT.js} +1 -1
  249. package/dist/{chunk-6G6WHTC7.js → chunk-2O5CMV76.js} +1 -1
  250. package/dist/{chunk-FQI62PIZ.js → chunk-2SVQBQAD.js} +2 -2
  251. package/dist/{chunk-7PJFUQMY.js → chunk-2ZSCHQOA.js} +1 -1
  252. package/dist/chunk-3BRXEMYT.js +46 -0
  253. package/dist/{chunk-H22SR76M.js → chunk-3H6OZUZ3.js} +1 -1
  254. package/dist/{chunk-VK45YJLH.js → chunk-3IWZVEXA.js} +2 -2
  255. package/dist/{chunk-2STOSJT3.js → chunk-46FIBJCV.js} +7 -7
  256. package/dist/chunk-4DEKONVJ.js +87 -0
  257. package/dist/{chunk-NUZHC6MM.js → chunk-4ITETIGZ.js} +12 -1
  258. package/dist/{chunk-73GUXYYE.js → chunk-5AHNW5CP.js} +1 -1
  259. package/dist/{chunk-FFGEJUAP.js → chunk-5ILRWUE7.js} +2 -2
  260. package/dist/chunk-5JPOFAVN.js +58 -0
  261. package/dist/{chunk-S5QJZOPL.js → chunk-5K5SZGBI.js} +1 -1
  262. package/dist/{chunk-YB64PWIN.js → chunk-5V6GW6HK.js} +1 -1
  263. package/dist/{chunk-LM6VYJTV.js → chunk-5YXMKZUA.js} +1 -1
  264. package/dist/{chunk-5XBNJNSO.js → chunk-65RFU7LF.js} +1 -1
  265. package/dist/{chunk-7MGXHCVK.js → chunk-6M2N6ETA.js} +1 -1
  266. package/dist/{chunk-OWHETZIU.js → chunk-6SFDL4QH.js} +1 -1
  267. package/dist/{chunk-WK4FQPYW.js → chunk-77VOASOY.js} +5 -5
  268. package/dist/{chunk-UYF2B2TH.js → chunk-7ELFH3RJ.js} +1 -1
  269. package/dist/{chunk-HPI5J6AR.js → chunk-7K6LVM5I.js} +2 -2
  270. package/dist/{chunk-YQDRJZ5J.js → chunk-7M7WKYOV.js} +8 -8
  271. package/dist/{chunk-A5YKNRG6.js → chunk-7QCSISHM.js} +2 -1
  272. package/dist/{chunk-CYYBE2MM.js → chunk-7U6PK242.js} +1 -1
  273. package/dist/{chunk-I33UIUZD.js → chunk-7ZSEUO5Q.js} +51 -40
  274. package/dist/{chunk-LCZULGMB.js → chunk-ABRWL5FJ.js} +2 -2
  275. package/dist/{chunk-VG3SIJ3M.js → chunk-AFLS26AC.js} +2 -2
  276. package/dist/{chunk-4XF7ENQA.js → chunk-AOJ6ZA77.js} +2 -2
  277. package/dist/{chunk-Q2T4L6ML.js → chunk-AQNP3KQU.js} +5 -5
  278. package/dist/{chunk-6X5PGHEX.js → chunk-AUSFKGKL.js} +2 -2
  279. package/dist/{chunk-6R334YT3.js → chunk-AZYE7NR4.js} +2 -2
  280. package/dist/{chunk-WKKWF277.js → chunk-BN5FEJL5.js} +2 -2
  281. package/dist/{chunk-MPVMB2DV.js → chunk-BVML4UVB.js} +3 -2
  282. package/dist/{chunk-EAIOXW2W.js → chunk-BXGBGYKH.js} +8 -14
  283. package/dist/chunk-C4256UXE.js +21 -0
  284. package/dist/{chunk-2FMBZCFR.js → chunk-C42XW5YP.js} +1 -1
  285. package/dist/{chunk-4MRFLHJC.js → chunk-C46DDVTK.js} +1 -1
  286. package/dist/{chunk-5BOFC5OP.js → chunk-CF4M6N6A.js} +20 -4
  287. package/dist/{chunk-ANTAQAR4.js → chunk-CMAZZY2I.js} +7 -1
  288. package/dist/{chunk-3JXX5S3Z.js → chunk-CV2LU2T2.js} +2 -2
  289. package/dist/{chunk-MLDTLZAO.js → chunk-D2GT3CR4.js} +3 -3
  290. package/dist/{chunk-57AKYFML.js → chunk-DD7RBNT4.js} +3 -3
  291. package/dist/{chunk-KL6A7JGH.js → chunk-DRFOTWJE.js} +2 -2
  292. package/dist/{chunk-MUFBHVCT.js → chunk-DWQYV5AV.js} +2 -2
  293. package/dist/{chunk-CNEHFH2A.js → chunk-EAHEJNVJ.js} +1 -1
  294. package/dist/chunk-EALRMP7N.js +69 -0
  295. package/dist/{chunk-E35HYQMK.js → chunk-EBVZHVPD.js} +12 -5
  296. package/dist/{chunk-KHJIEPZV.js → chunk-EC6EUIAD.js} +9 -6
  297. package/dist/{chunk-XNNY27SC.js → chunk-ED4A6Q24.js} +1 -1
  298. package/dist/{chunk-6LN64KGG.js → chunk-F7HZYTZT.js} +6 -3
  299. package/dist/{chunk-RTMNULTL.js → chunk-FLW5U7YS.js} +2 -2
  300. package/dist/{chunk-JQEXAH7G.js → chunk-FPU7AA3X.js} +5 -16
  301. package/dist/{chunk-GHQG4VZA.js → chunk-G3CACE5L.js} +3 -3
  302. package/dist/{chunk-JMTBK55P.js → chunk-G4EHZHKM.js} +2 -2
  303. package/dist/{chunk-45M73G5A.js → chunk-GLKQHN7G.js} +5 -5
  304. package/dist/{chunk-N2BF272H.js → chunk-HF5L56YQ.js} +1 -1
  305. package/dist/chunk-HTBTAIH6.js +37 -0
  306. package/dist/chunk-HTS5RJ7S.js +6 -0
  307. package/dist/{chunk-BRLZXYPA.js → chunk-I4IUX3JF.js} +1 -1
  308. package/dist/{chunk-BXCL6P5Z.js → chunk-I4PBFJGX.js} +1 -1
  309. package/dist/{chunk-ADGNISEI.js → chunk-IAP7APOX.js} +5 -5
  310. package/dist/chunk-ICE3D63E.js +384 -0
  311. package/dist/{chunk-BT3GB7HC.js → chunk-IRONPJB4.js} +3 -3
  312. package/dist/chunk-IUBOLGHG.js +140 -0
  313. package/dist/chunk-JLOESTT2.js +10 -0
  314. package/dist/{chunk-5EFLA6BW.js → chunk-K6RWEQ6P.js} +2 -2
  315. package/dist/{chunk-ZQEJSEPS.js → chunk-K6Y6CDEZ.js} +2 -2
  316. package/dist/chunk-K774LUN3.js +20 -0
  317. package/dist/{chunk-7KBNFFM3.js → chunk-KXWJJWBD.js} +6 -3
  318. package/dist/{chunk-53J2YNQA.js → chunk-L5VU3LZT.js} +1 -1
  319. package/dist/chunk-L72URIHR.js +36 -0
  320. package/dist/{chunk-VERJCAJ4.js → chunk-LBGKLYBY.js} +1 -1
  321. package/dist/{chunk-PRN5IP2R.js → chunk-LMEMH6DO.js} +1 -1
  322. package/dist/{chunk-I22MUEG7.js → chunk-LNQSNXGJ.js} +1 -1
  323. package/dist/chunk-LT44RL62.js +50 -0
  324. package/dist/{chunk-222VILSP.js → chunk-LVJGN5II.js} +1 -1
  325. package/dist/{chunk-AYHIF6DH.js → chunk-LZNPL266.js} +1 -1
  326. package/dist/{chunk-R45VM5EX.js → chunk-MMV7NEAC.js} +1 -1
  327. package/dist/{chunk-2IIHMJMZ.js → chunk-MVKUE4FI.js} +2 -2
  328. package/dist/{chunk-37U3Z65B.js → chunk-MVMVMHYI.js} +1 -1
  329. package/dist/{chunk-JD7P2GJP.js → chunk-MYAARF4Z.js} +1 -1
  330. package/dist/{chunk-OBPINJNO.js → chunk-NCUSI4ZU.js} +3 -3
  331. package/dist/{chunk-NKBKQEKS.js → chunk-NFXCJGHG.js} +1 -1
  332. package/dist/{chunk-OZAZHM55.js → chunk-NKBKHOMU.js} +1 -1
  333. package/dist/{chunk-MGQKF7GK.js → chunk-NN475NAP.js} +1 -1
  334. package/dist/{chunk-6EWNMSS4.js → chunk-NNZRTR5M.js} +2 -2
  335. package/dist/{chunk-JT7WRPZ6.js → chunk-NTRKC2JV.js} +1 -1
  336. package/dist/{chunk-63GBSOLU.js → chunk-NXBCAXP5.js} +2 -2
  337. package/dist/{chunk-NR4CPM4T.js → chunk-NXFTCPF6.js} +1 -1
  338. package/dist/chunk-O3MYBNRO.js +80 -0
  339. package/dist/{chunk-RMEBFYL7.js → chunk-O6EV6GKI.js} +1 -1
  340. package/dist/{chunk-YL7AR6PR.js → chunk-O7KG4CXB.js} +3 -3
  341. package/dist/{chunk-FB3TCNQP.js → chunk-O7N6W52M.js} +3 -3
  342. package/dist/chunk-ONHYFU7D.js +25 -0
  343. package/dist/{chunk-T24HBEU6.js → chunk-OOOVL77Y.js} +1 -1
  344. package/dist/{chunk-BLGBD2D2.js → chunk-P7HMY3BQ.js} +4 -4
  345. package/dist/chunk-PCAT2EFB.js +104 -0
  346. package/dist/{chunk-TPIMOGOZ.js → chunk-PEBQMX5X.js} +1 -1
  347. package/dist/{chunk-UY3FWQWG.js → chunk-PGBKZSSQ.js} +201 -22
  348. package/dist/{chunk-4TMBAOXK.js → chunk-PW57R4BN.js} +1 -1
  349. package/dist/chunk-PX5BOALQ.js +13 -0
  350. package/dist/{chunk-CFTBESST.js → chunk-Q6TCUSQA.js} +2 -2
  351. package/dist/{chunk-ZWXHTXZO.js → chunk-QGEDXYLB.js} +2 -2
  352. package/dist/{chunk-ZKLEAK7M.js → chunk-QM3432PH.js} +7 -7
  353. package/dist/{chunk-WTXCK46H.js → chunk-R2QBQ6NO.js} +1 -1
  354. package/dist/{chunk-Z6JKZI4E.js → chunk-RBQRTGXX.js} +1 -1
  355. package/dist/{chunk-TJIBTHWJ.js → chunk-RDIQB5ZE.js} +3 -3
  356. package/dist/{chunk-TPCBPGSB.js → chunk-RO5JU6SN.js} +4 -4
  357. package/dist/{chunk-O222F2IX.js → chunk-SGMWLUYQ.js} +6 -6
  358. package/dist/{chunk-HEA6TERQ.js → chunk-SHH7UD5U.js} +1 -1
  359. package/dist/{chunk-CLJGFOTV.js → chunk-SKGOKLJD.js} +31 -18
  360. package/dist/{chunk-CSXJIIO4.js → chunk-SNQ7PH3D.js} +1 -1
  361. package/dist/chunk-SPNTUQBV.js +244 -0
  362. package/dist/{chunk-RIAPCEB5.js → chunk-T3S3D4FC.js} +5 -5
  363. package/dist/chunk-TDFLCUBE.js +6 -0
  364. package/dist/{chunk-OQG4P5KU.js → chunk-TGGYSQRD.js} +5 -6
  365. package/dist/{chunk-7FF6CZW5.js → chunk-TQKQRS2J.js} +36 -8
  366. package/dist/chunk-TRXTO3WC.js +114 -0
  367. package/dist/{chunk-H5XTJ7GJ.js → chunk-TUEM2XIW.js} +1 -1
  368. package/dist/{chunk-4AUTALJA.js → chunk-U2IQNDDR.js} +1 -1
  369. package/dist/{chunk-IVTQWOXV.js → chunk-ULYHDP7U.js} +1 -1
  370. package/dist/{chunk-DGSK4LLS.js → chunk-V6WDJUYK.js} +1 -1
  371. package/dist/{chunk-Z2MZTI3H.js → chunk-VB3FVKNI.js} +1 -1
  372. package/dist/{chunk-R5OATXWU.js → chunk-VONEKR3J.js} +38 -15
  373. package/dist/{chunk-CZQ7UITX.js → chunk-WANKINXG.js} +3 -3
  374. package/dist/{chunk-HQOEAUDJ.js → chunk-WMO722J2.js} +2 -2
  375. package/dist/{chunk-D7G2QGET.js → chunk-X3US25XJ.js} +1 -1
  376. package/dist/{chunk-GPFYITOF.js → chunk-X7VZQKIW.js} +1 -1
  377. package/dist/{chunk-L4HHWG4V.js → chunk-XA2QKGBJ.js} +3 -3
  378. package/dist/{chunk-DV5L2GRY.js → chunk-XJMES7AE.js} +1 -1
  379. package/dist/{chunk-5NJMSYDZ.js → chunk-XNC3M4IN.js} +1 -1
  380. package/dist/{chunk-B2YSFWUG.js → chunk-XRWHDW6F.js} +9 -9
  381. package/dist/{chunk-TKUAGWNR.js → chunk-XTJHMP3W.js} +2 -2
  382. package/dist/{chunk-KTIQSSME.js → chunk-XZY6S3UC.js} +6 -3
  383. package/dist/{chunk-7KHM2FZH.js → chunk-YGRTX67J.js} +1 -1
  384. package/dist/{chunk-RTPQDNW3.js → chunk-YJQXESOJ.js} +5 -1
  385. package/dist/chunk-YP2FS6SH.js +54 -0
  386. package/dist/{chunk-LMQG3VPG.js → chunk-YQ7Q52XU.js} +1 -1
  387. package/dist/{chunk-G4CGDUCP.js → chunk-YRNNUCQP.js} +1 -1
  388. package/dist/{chunk-5CEQ3HLH.js → chunk-YXKSUILG.js} +6 -6
  389. package/dist/{chunk-NHLNHH4J.js → chunk-ZB3E2Z4Y.js} +1 -1
  390. package/dist/{chunk-IL3XLDW7.js → chunk-ZDWAIVWL.js} +1 -1
  391. package/dist/{chunk-SNIPM6K7.js → chunk-ZJVLGYE3.js} +3 -3
  392. package/dist/{chunk-BFM5G2Z6.js → chunk-ZPTKAYJK.js} +1 -1
  393. package/dist/{chunk-2PIH6JHJ.js → chunk-ZXTDWTXS.js} +1 -1
  394. package/dist/{chunk-C667GCU7.js → chunk-ZXXZESCD.js} +9 -7
  395. package/dist/generated/index.d.ts +17 -0
  396. package/dist/generated/index.js +184 -163
  397. package/dist/index.js +184 -163
  398. package/dist/styles.css +2769 -156
  399. package/dist/utils/composedRef.d.ts +39 -0
  400. package/dist/utils/focusModality.d.ts +14 -0
  401. package/dist/utils/heldHint.d.ts +6 -0
  402. package/dist/utils/index.d.ts +3 -1
  403. package/dist/utils/index.js +4 -2
  404. package/dist/utils/tokenMs.d.ts +6 -0
  405. package/package.json +5 -5
  406. package/dist/ArtifactKinds-O3CALPVX.css +0 -16
  407. package/dist/{chunk-PLNJEDGI.js → chunk-I4IO56EY.js} +1 -1
  408. package/dist/{chunk-FEJANUZK.js → chunk-KBSD476L.js} +0 -0
  409. package/dist/{chunk-624X3RVA.js → chunk-O55JQ7BE.js} +1 -1
  410. /package/dist/{chunk-CDFQ7MQK.js → chunk-REEZQCML.js} +0 -0
@@ -59,8 +59,11 @@
59
59
  import { type AriaAttributes, type HTMLAttributes, type MouseEventHandler, type ReactNode, type Ref } from 'react';
60
60
  import type { Tone } from '../utils/tone.js';
61
61
  import { type AppShellAsideShape, type AppShellPeekShape } from './regions.js';
62
+ import { type AppShellRailShape } from './railShape.js';
62
63
  export { useAppShellAside, useAppShellPeek } from './regions.js';
63
64
  export type { AppShellAsideShape, AppShellPeekShape, AppShellRegionValue } from './regions.js';
65
+ export type { AppShellRailShape } from './railShape.js';
66
+ export type { AppShellRailMotion } from './railMotion.js';
64
67
  /** The aside's resting width, in px, where the host names none. */
65
68
  export declare const APP_SHELL_ASIDE_WIDTH = 420;
66
69
  /** How the reader resizes the aside while it is a column. */
@@ -91,6 +94,14 @@ interface AppShellContextValue {
91
94
  railId: string;
92
95
  toggleLabel: string;
93
96
  hasRail: boolean;
97
+ /**
98
+ * The shape the rail is drawn in NOW: `compact` only where the host asked
99
+ * for it and the layout is wide, `full` in the drawer and everywhere else,
100
+ * so an application picks `CompactNav` or `SidebarNav` from this alone.
101
+ * While the rail folds it is still `full`, and it turns `compact` when the
102
+ * rail reaches the compact column (see `railMotion.ts`).
103
+ */
104
+ rail: AppShellRailShape;
94
105
  }
95
106
  export type { AppShellContextValue };
96
107
  /**
@@ -124,8 +135,14 @@ export interface AppShellProps extends Omit<HTMLAttributes<HTMLDivElement>, 'tit
124
135
  * Gives the screen the whole height left under the bar, as a flex column,
125
136
  * for a canvas or a split view that draws to the bottom of the window
126
137
  * instead of scrolling.
138
+ *
139
+ * `flush` is the same column EDGE TO EDGE: the content column gives up its
140
+ * pad, its measure and its gap, and the scroller reserves no gutter, for a
141
+ * screen that draws its own frame to the sheet's edges (a conversation with
142
+ * a list and a pane either side of it). The column is positioned, so a
143
+ * `LayerHost` the screen keeps inside it fills exactly the screen.
127
144
  */
128
- fill?: boolean | undefined;
145
+ fill?: boolean | 'flush' | undefined;
129
146
  /**
130
147
  * Any value that changes when the reader goes somewhere. The drawer closes
131
148
  * when it does: a drawer left open over the screen you have just navigated
@@ -136,6 +153,33 @@ export interface AppShellProps extends Omit<HTMLAttributes<HTMLDivElement>, 'tit
136
153
  toggleLabel?: string | undefined;
137
154
  /** The link that precedes everything, for a keyboard reader. */
138
155
  skipLabel?: string | undefined;
156
+ /**
157
+ * The rail's shape the reader chose: the full navigation, or the compact
158
+ * column of glyphs. A desktop choice: under the shell step the rail is a
159
+ * drawer drawn full whatever this says, and `useAppShell().rail` reports
160
+ * the shape actually drawn.
161
+ */
162
+ rail?: AppShellRailShape | undefined;
163
+ /**
164
+ * Called with the other shape when the reader presses the fold control.
165
+ * Given, the shell draws THE fold control (never in the drawer): a minus in
166
+ * the rail's top left corner while it is full, and a plus in the same place
167
+ * while it is compact. Keeping the choice, and binding a key to it, are the
168
+ * application's.
169
+ */
170
+ onRailChange?: ((next: AppShellRailShape) => void) | undefined;
171
+ /**
172
+ * The keys the application binds to the fold (`['Mod', '\\']`), drawn in
173
+ * the control's tooltip and set as its `aria-keyshortcuts`. The shell binds
174
+ * nothing: the same press may mean something else where the rail is a
175
+ * drawer, and only the application knows.
176
+ */
177
+ railFoldKeys?: readonly string[] | undefined;
178
+ /** The fold control's two names. Defaults to "Collapse the sidebar" and "Expand the sidebar". */
179
+ railFoldLabels?: {
180
+ collapse: string;
181
+ expand: string;
182
+ } | undefined;
139
183
  /**
140
184
  * A panel the frame keeps beside every screen: the assistant. Nothing (or
141
185
  * null) means no aside and no track. Normally a `SidePanel`, which leaves
@@ -181,7 +225,7 @@ export interface AppShellProps extends Omit<HTMLAttributes<HTMLDivElement>, 'tit
181
225
  peekShape?: AppShellPeekShape | undefined;
182
226
  children?: ReactNode;
183
227
  }
184
- export declare function AppShell({ sidebar, topbar, banner, footer, mainId, mainRef, fill, navigationKey, toggleLabel, skipLabel, aside, asideWidth, asideReserve, asideLabel, asideShape, asideModal, onAsideClose, asideResize, peek, peekShape, className, style, children, ...rest }: AppShellProps): import("react").JSX.Element;
228
+ export declare function AppShell({ sidebar, topbar, banner, footer, mainId, mainRef, fill, navigationKey, toggleLabel, skipLabel, rail: railChoice, onRailChange, railFoldKeys, railFoldLabels, aside, asideWidth, asideReserve, asideLabel, asideShape, asideModal, onAsideClose, asideResize, peek, peekShape, className, style, children, ...rest }: AppShellProps): import("react").JSX.Element;
185
229
  export declare namespace AppShell {
186
230
  var Rail: typeof AppShellRail;
187
231
  var RailRow: import("react").ForwardRefExoticComponent<AppShellRailRowProps & import("react").RefAttributes<HTMLElement>>;
@@ -209,7 +253,8 @@ export interface AppShellRailProps {
209
253
  * A compact status at the end of the head's line, beside the name the head
210
254
  * carries: an `<AppShell.RailStatus>`, the application's own state in a
211
255
  * dot and a count. It takes its own width, so the name keeps the rest and
212
- * truncates there, and it stands in the drawer's head the same way.
256
+ * truncates there, and it stands in the drawer's head the same way. In the
257
+ * compact rail it has a row of its own under the head's mark.
213
258
  */
214
259
  status?: ReactNode;
215
260
  /**
@@ -222,7 +267,20 @@ export interface AppShellRailProps {
222
267
  className?: string | undefined;
223
268
  children?: ReactNode;
224
269
  }
225
- /** The rail's three regions: a head, a scrolling middle, and a foot. */
270
+ /**
271
+ * The rail's three regions: a head, a scrolling middle, and a foot.
272
+ *
273
+ * ONE RAIL IN BOTH SHAPES, its slots kept. Compact, the head holds the brand
274
+ * alone (the lockup shows its mark, over the column's centre, and keeps its
275
+ * name as the link's name and title); the field is not drawn, because a
276
+ * 76px column has no room for one and the application draws a Search tile
277
+ * among its `CompactNav` places instead; and the status stands in a row of
278
+ * its own under the mark, as its dot and count, since the head has no line
279
+ * left beside the mark. That row is the first thing under the head in the
280
+ * column, before the places, so the state a reader checks at a glance is
281
+ * where their eye starts. The middle and the foot are drawn as the
282
+ * application gives them.
283
+ */
226
284
  export declare function AppShellRail({ header, search, status, footer, className, children }: AppShellRailProps): import("react").JSX.Element;
227
285
  /**
228
286
  * A figure at the end of a row in the foot, and what it counts.
@@ -9,4 +9,4 @@ export { useScreenBelow, useScreenWidth } from './screenWidth.js';
9
9
  export type { StoredWidth, StoredWidthOptions, WidthStorage } from './storedWidth.js';
10
10
  export { AccountRow } from './AccountRow.js';
11
11
  export type { AccountRowMenu, AccountRowProps } from './AccountRow.js';
12
- export type { ActionRailRowProps, ActionRailStatusProps, AppShellAsideResize, AppShellAsideShape, AppShellContextValue, AppShellPeekShape, AppShellProps, AppShellRailProps, AppShellRailRowProps, AppShellRailStatusProps, AppShellRegionValue, AppShellToggleProps, AppShellTopbarProps, RailRowCount, StaticRailRowProps, StaticRailStatusProps, } from './AppShell.js';
12
+ export type { ActionRailRowProps, ActionRailStatusProps, AppShellAsideResize, AppShellAsideShape, AppShellContextValue, AppShellPeekShape, AppShellProps, AppShellRailMotion, AppShellRailShape, AppShellRailProps, AppShellRailRowProps, AppShellRailStatusProps, AppShellRegionValue, AppShellToggleProps, AppShellTopbarProps, RailRowCount, StaticRailRowProps, StaticRailStatusProps, } from './AppShell.js';
@@ -1,13 +1,19 @@
1
- export { APP_SHELL_ASIDE_WIDTH, AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellRailStatus, AppShellToggle, AppShellTopbar, readStoredWidth, useAppShell, useScreenBelow, useScreenWidth, useStoredWidth } from '../chunk-UY3FWQWG.js';
2
- import '../chunk-RTPQDNW3.js';
3
- import '../chunk-OQG4P5KU.js';
1
+ export { APP_SHELL_ASIDE_WIDTH, AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellRailStatus, AppShellToggle, AppShellTopbar, readStoredWidth, useAppShell, useScreenBelow, useScreenWidth, useStoredWidth } from '../chunk-PGBKZSSQ.js';
2
+ import '../chunk-PCAT2EFB.js';
3
+ import '../chunk-JLOESTT2.js';
4
+ import '../chunk-YJQXESOJ.js';
5
+ import '../chunk-7ZSEUO5Q.js';
6
+ import '../chunk-HTS5RJ7S.js';
7
+ import '../chunk-TGGYSQRD.js';
8
+ import '../chunk-L72URIHR.js';
4
9
  export { RESIZE_HANDLE_LARGE_STEP, RESIZE_HANDLE_STEP, ResizeHandle, clampSize, useAppShellAside, useAppShellPeek } from '../chunk-PIYJNCN7.js';
10
+ import '../chunk-CMAZZY2I.js';
5
11
  import '../chunk-DGXZ635L.js';
12
+ import '../chunk-XSPCITPN.js';
6
13
  import '../chunk-OMV5W53A.js';
7
14
  import '../chunk-2YTOOH3A.js';
8
- import '../chunk-XSPCITPN.js';
9
- import '../chunk-H5XTJ7GJ.js';
15
+ import '../chunk-TUEM2XIW.js';
16
+ import '../chunk-4ITETIGZ.js';
10
17
  import '../chunk-UAUP6XGK.js';
11
- import '../chunk-NUZHC6MM.js';
12
18
  import '../chunk-UT6CW3C7.js';
13
19
  import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,60 @@
1
+ /**
2
+ * How the rail moves between its two shapes.
3
+ *
4
+ * THE STYLESHEET MOVES IT, THIS DECIDES THE ORDER. The rail's width eases
5
+ * between the full rail and the compact column (AppShell.css), and its
6
+ * content is laid out at the width of the shape drawn, clipped by the moving
7
+ * edge, so nothing in it rewraps at a width it will never rest at. What the
8
+ * stylesheet cannot decide is WHEN the content changes shape, because the
9
+ * application draws a different tree for each one:
10
+ *
11
+ * - UNFOLDING, the full rail is drawn at once, and the moving edge uncovers
12
+ * it while its words fade in (`unfold`).
13
+ * - FOLDING, the full rail stays drawn, inert, while the edge narrows over it
14
+ * and its words fade out (`fold`), and the compact column is drawn once the
15
+ * rail's motion has ended, fading in (`folded`). Drawn at once instead, the
16
+ * column would replace the words before the reader saw them go.
17
+ *
18
+ * ONE MECHANISM FOR EVERY COLUMN THAT EASES. Both shapes are a `usePresence`
19
+ * each, waiting on the motion actually running on the rail, as a
20
+ * `DockColumn` waits on its own: no duration is written again here, nothing
21
+ * waits under reduced motion, and where nothing moves the new shape is drawn
22
+ * in the same commit, before any paint.
23
+ */
24
+ import { type RefObject } from 'react';
25
+ import type { AppShellRailShape } from './railShape.js';
26
+ /**
27
+ * Where a change of shape is: `fold` while the rail narrows over the full
28
+ * rail's fading words, `folded` while the compact column fades in after it,
29
+ * `unfold` while the rail widens and the full rail's words fade in, and
30
+ * `reverse` while a fold pressed again mid way widens the rail back and its
31
+ * words return from wherever their fade had reached.
32
+ */
33
+ export type AppShellRailMotion = 'fold' | 'folded' | 'unfold' | 'reverse';
34
+ /**
35
+ * The rail's own motion, which a change of shape waits for: its width, on the
36
+ * rail itself, and the keyframes its words arrive by (AppShell.css), wherever
37
+ * they run inside it. Named, so that nothing else moving inside the rail (a
38
+ * meter filling, a badge arriving, a paused animation) holds a fold. The
39
+ * words LEAVE by a transition of their opacity, which a reversal turns back
40
+ * from where it is, and the rail's width outlasts it.
41
+ */
42
+ export declare const RAIL_MOTION: {
43
+ readonly transitions: readonly ["width"];
44
+ readonly animations: readonly ["crewlet-app-shell-rail-unfold", "crewlet-app-shell-rail-settle"];
45
+ };
46
+ /**
47
+ * The shape to draw the rail's content in, the phase of the change under
48
+ * way, and whether the content drawn is only leaving (and so inert), for a
49
+ * rail whose chosen shape is `target`.
50
+ *
51
+ * `moves` is whether a change may animate at all: never in the drawer, where
52
+ * the rail is always the full list and a shape is not a width. A change that
53
+ * arrives WITH the window crossing into the wide layout does not animate
54
+ * either: the reader resized a window, they did not fold a rail.
55
+ */
56
+ export declare function useRailMotion(target: AppShellRailShape, moves: boolean, rail: RefObject<HTMLElement | null>): {
57
+ drawn: AppShellRailShape;
58
+ motion: AppShellRailMotion | null;
59
+ leaving: boolean;
60
+ };
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Which shape the shell's rail is drawn in, for the pieces that stand in it
3
+ * and are also used outside a shell: the brand lockup and the account row.
4
+ *
5
+ * A CONTEXT OF ITS OWN, AND ONE THAT NEVER THROWS, because those pieces are
6
+ * drawn on screens with no shell at all (a sign-in page draws the lockup), and
7
+ * there the answer is simply the full shape. `useAppShell().rail` is the same
8
+ * answer for code that is always inside a shell.
9
+ */
10
+ /**
11
+ * The rail's two shapes: `full`, the navigation's rows under their headings,
12
+ * and `compact`, the same places folded to a column of glyphs (`CompactNav`).
13
+ */
14
+ export type AppShellRailShape = 'full' | 'compact';
15
+ export declare const RailShapeContext: import("react").Context<AppShellRailShape>;
16
+ /** The shape the rail around this component is drawn in now: `full` outside a shell, and in the drawer. */
17
+ export declare function useRailShape(): AppShellRailShape;
18
+ /**
19
+ * Whether the rail's content is drawn only to finish leaving, while the rail
20
+ * folds over it (railMotion.ts): `AppShell.Rail` makes it inert then.
21
+ */
22
+ export declare const RailLeavingContext: import("react").Context<boolean>;
@@ -27,30 +27,40 @@
27
27
  --crewlet-app-shell-rail: var(--size-shell-rail);
28
28
  --crewlet-app-shell-topbar: var(--size-shell-topbar);
29
29
  /* What stands on the frame to the sheet's left: the rail's column, or
30
- nothing where there is no rail or the rail is a drawer. The aside's cap
31
- below subtracts it, so it is one name for both. */
30
+ nothing where there is no rail or the rail is a drawer. */
32
31
  --crewlet-app-shell-beside: var(--crewlet-app-shell-rail);
33
- /* THE ASIDE'S TRACK, while it is a column: the panel's width and the inset
34
- it is held off the window's edge by, capped so the sheet keeps the
35
- host's floor (`--crewlet-app-shell-aside-reserve`, the page's sheet with
36
- its own inset and hairlines). The host publishes both widths on this
37
- element; with no reserve the panel takes the width it was given. */
38
- --crewlet-app-shell-aside-track: calc(
39
- min(
40
- var(--crewlet-app-shell-aside),
41
- max(
42
- 0px,
43
- 100% - var(--crewlet-app-shell-beside) - var(--crewlet-app-shell-aside-reserve, 0px) - var(--size-shell-inset)
44
- )
45
- ) +
46
- var(--size-shell-inset)
32
+ /*
33
+ * THE ASIDE'S TRACK, while it is a column: the inset it is held off the
34
+ * window's edge by at least, and the panel's width and that inset at most.
35
+ * THE CAP IS THE GRID'S. The page's sheet takes the host's floor as its
36
+ * own track's minimum (`--crewlet-app-shell-aside-reserve`, the page's sheet
37
+ * with its own inset and hairlines), and the grid hands the aside what is
38
+ * left once the rail and that floor have theirs, up to its width. The rail's
39
+ * track is the rail's live width, so while the rail eases between its
40
+ * shapes the cap eases with it: a cap computed from the rail's VARIABLE
41
+ * named the shape drawn, and jumped at both ends of a fold. With no reserve
42
+ * the panel takes the width it was given, as far as the window holds it.
43
+ */
44
+ --crewlet-app-shell-aside-track: minmax(
45
+ var(--size-shell-inset),
46
+ calc(var(--crewlet-app-shell-aside) + var(--size-shell-inset))
47
+ );
48
+ /* The page's floor beside an aside column, never more than the window
49
+ leaves it: on a window too narrow for the floor, the page gives way rather
50
+ than the shell growing past the window's edge. */
51
+ --crewlet-app-shell-sheet-floor: min(
52
+ var(--crewlet-app-shell-aside-reserve, 0px),
53
+ max(0px, 100% - var(--crewlet-app-shell-beside) - var(--size-shell-inset))
47
54
  );
48
55
  /* Where the drawer's veil sits while it is open. The shell replaces it with
49
56
  the surface's own place in the layer band; this default only has to clear
50
57
  the page chrome for the moment before that lands. */
51
58
  --crewlet-app-shell-drawer-z: var(--z-index-overlay);
52
59
  display: grid;
53
- grid-template-columns: var(--crewlet-app-shell-rail) minmax(0, 1fr);
60
+ /* The rail's track is the rail's own width (`auto`), and the rail takes
61
+ `--crewlet-app-shell-rail` itself, so the track follows it while it eases
62
+ between its two shapes (see the rail's motion, below). */
63
+ grid-template-columns: auto minmax(0, 1fr);
54
64
  /* One row, the viewport's height less nothing: the sheet's own margin is
55
65
  what holds it off the frame's edges, and a row sized by its content would
56
66
  let a tall screen push the sheet's bottom edge off the window. */
@@ -89,11 +99,11 @@
89
99
  keeps its column and is only narrower, so nothing under the bar moves but
90
100
  its end edge. */
91
101
  .crewlet-app-shell[data-aside='column'] {
92
- grid-template-columns: var(--crewlet-app-shell-rail) minmax(0, 1fr) var(--crewlet-app-shell-aside-track);
102
+ grid-template-columns: auto minmax(var(--crewlet-app-shell-sheet-floor), 1fr) var(--crewlet-app-shell-aside-track);
93
103
  }
94
104
 
95
105
  .crewlet-app-shell--no-rail[data-aside='column'] {
96
- grid-template-columns: minmax(0, 1fr) var(--crewlet-app-shell-aside-track);
106
+ grid-template-columns: minmax(var(--crewlet-app-shell-sheet-floor), 1fr) var(--crewlet-app-shell-aside-track);
97
107
  }
98
108
 
99
109
  /* The skip link, drawn only while it holds focus, over everything. */
@@ -133,16 +143,31 @@
133
143
  * run the height of the window parallel to it, eight pixels off.
134
144
  */
135
145
  .crewlet-app-shell__rail {
146
+ /* The fold control's containing block. Re-declared as `fixed` by the
147
+ narrow block below, which comes later at the same weight, so the drawer
148
+ keeps its layer. */
149
+ position: relative;
136
150
  display: flex;
137
151
  flex-direction: column;
152
+ width: var(--crewlet-app-shell-rail);
138
153
  min-height: 0;
139
154
  min-width: 0;
155
+ /* THE MOVING EDGE CUTS WHAT IT PASSES. While the rail eases between its
156
+ shapes its content keeps the width of the shape drawn (below), and the
157
+ edge clips it rather than squeezing it. Across only: a ring or a badge
158
+ at a row's top or bottom is never cut. */
159
+ overflow-x: clip;
140
160
  background: var(--color-surface-frame);
161
+ transition: width var(--motion-duration-slow) var(--motion-easing-emphasized);
141
162
  }
142
163
 
164
+ /* THE CONTENT IS LAID OUT AT ITS SHAPE'S WIDTH, never at a width between the
165
+ two, so no word in the rail rewraps while it moves and nothing drifts with
166
+ the edge: the column stands still and the edge travels over it. */
143
167
  .crewlet-app-shell__rail-inner {
144
168
  display: flex;
145
169
  flex-direction: column;
170
+ width: var(--crewlet-app-shell-rail);
146
171
  min-height: 0;
147
172
  height: 100%;
148
173
  }
@@ -718,6 +743,24 @@
718
743
  height: 100%;
719
744
  }
720
745
 
746
+ /*
747
+ * A FLUSH SCREEN draws its own frame to the sheet's edges: the column gives up
748
+ * its pad, its measure and its gap, and the scroller reserves no gutter, since
749
+ * nothing in it scrolls and a strip at its end would cut the screen's own
750
+ * edge. The column is the containing block for a `LayerHost` the screen
751
+ * keeps, so its layers fill the screen rather than the window.
752
+ */
753
+ .crewlet-app-shell--fill-flush .crewlet-app-shell__main {
754
+ scrollbar-gutter: auto;
755
+ }
756
+
757
+ .crewlet-app-shell--fill-flush .crewlet-app-shell__content {
758
+ position: relative;
759
+ gap: 0;
760
+ max-width: none;
761
+ padding: 0;
762
+ }
763
+
721
764
  /* Hidden by default, revealed by the breakpoint below: the wide layout has the
722
765
  rail on screen already, so the control that opens it has nothing to do. */
723
766
  .crewlet-app-shell__toggle {
@@ -867,6 +910,180 @@
867
910
  animation: crewlet-app-shell-aside-slide var(--motion-duration-slow) var(--motion-easing-emphasized);
868
911
  }
869
912
 
913
+ /*
914
+ * THE COMPACT RAIL: the same rail, narrowed to the compact column. One
915
+ * variable is the rail's width for the grid, the aside's cap and the drawer
916
+ * alike, so folding the rail is this one declaration. The shell writes the
917
+ * attribute only where the layout is wide: the drawer under the step is
918
+ * always the full list.
919
+ */
920
+ .crewlet-app-shell[data-rail='compact'] {
921
+ --crewlet-app-shell-rail: var(--size-shell-rail-compact);
922
+ }
923
+
924
+ /*
925
+ * THE FOLD CONTROL stands in the rail's top left corner, in both shapes, so
926
+ * it never moves under the pointer that pressed it: a minus while the rail is
927
+ * full and a plus while it is compact. The corner is the square the head
928
+ * leaves empty up and to the left of the brand's mark, and the control is the
929
+ * target floor (`--size-target-min`), so it ends short of the mark on the
930
+ * compact column's centre at every density.
931
+ *
932
+ * Quiet until the rail is pointed at: the tertiary ink, which holds 3:1 on
933
+ * the frame, then the secondary, and the ghost's own primary under the
934
+ * pointer. Its ring is drawn inside its own box, because the corner it
935
+ * stands in is the window's, and a ring outside it would be cut there.
936
+ */
937
+ .crewlet-app-shell__fold {
938
+ position: absolute;
939
+ top: 0;
940
+ left: 0;
941
+ z-index: 1;
942
+ display: inline-flex;
943
+ }
944
+
945
+ .crewlet-app-shell__fold > .crewlet-icon-btn {
946
+ width: var(--size-target-min);
947
+ height: var(--size-target-min);
948
+ color: var(--color-text-tertiary);
949
+ }
950
+
951
+ .crewlet-app-shell__rail:hover > .crewlet-app-shell__fold > .crewlet-icon-btn:not(:hover) {
952
+ color: var(--color-text-secondary);
953
+ }
954
+
955
+ .crewlet-app-shell__fold > .crewlet-icon-btn:focus-visible {
956
+ outline-offset: var(--size-focus-ring-inset-offset);
957
+ }
958
+
959
+ /*
960
+ * THE MARK STANDS WHERE THE COMPACT RAIL'S DOES, in both shapes: centred over
961
+ * the compact column, in the head. Full, the name follows it; compact, the
962
+ * name is not drawn (the link keeps it as its name and title).
963
+ */
964
+ .crewlet-app-shell--foldable .crewlet-app-shell__rail-head > .crewlet-brand,
965
+ .crewlet-app-shell[data-rail='compact'] .crewlet-app-shell__rail-head > .crewlet-brand {
966
+ padding-left: calc((var(--size-shell-rail-compact) - var(--crewlet-brand-mark)) / 2);
967
+ }
968
+
969
+ .crewlet-app-shell[data-rail='compact'] .crewlet-brand__name,
970
+ .crewlet-app-shell[data-rail='compact'] .crewlet-brand__context {
971
+ display: none;
972
+ }
973
+
974
+ /*
975
+ * COMPACT, THE STATUS HAS A ROW OF ITS OWN under the mark, a small control
976
+ * step tall, its dot and its count centred in the column: the first thing
977
+ * under the head, before the places, where the fold control stood before it
978
+ * moved to the corner.
979
+ */
980
+ .crewlet-app-shell[data-rail='compact'] .crewlet-app-shell__rail-inner > .crewlet-app-shell__rail-status {
981
+ justify-content: center;
982
+ min-width: 0;
983
+ min-height: var(--size-control-sm);
984
+ margin: 0;
985
+ }
986
+
987
+ .crewlet-app-shell[data-rail='compact'] .crewlet-app-shell__rail-body {
988
+ padding: var(--spacing-1) 0;
989
+ scrollbar-width: thin;
990
+ }
991
+
992
+ /*
993
+ * The compact foot: what the full foot holds, centred in the column, a step
994
+ * apart: a Settings tile, the reader's face.
995
+ */
996
+ .crewlet-app-shell[data-rail='compact'] .crewlet-app-shell__rail-foot {
997
+ align-items: center;
998
+ gap: var(--spacing-2);
999
+ padding: var(--spacing-1) 0 var(--spacing-3);
1000
+ }
1001
+
1002
+ .crewlet-app-shell[data-rail='compact'] .crewlet-app-shell__rail-foot > .crewlet-compact-nav {
1003
+ align-self: stretch;
1004
+ }
1005
+
1006
+ /*
1007
+ * THE COMPACT FACE IS CENTRED ON THE TILES' LINE. It gives up the full row's
1008
+ * badge column and the step after it (above): kept, the step stood the face
1009
+ * 4px left of the column's centre, in a box 8px wider than the face, so the
1010
+ * face sat off the line every tile above it is centred on.
1011
+ */
1012
+ .crewlet-app-shell__rail-foot .crewlet-account-row--compact .crewlet-account-row__avatar {
1013
+ width: auto;
1014
+ margin-inline-end: 0;
1015
+ }
1016
+
1017
+ /*
1018
+ * THE RAIL'S MOTION (railMotion.ts). The rail's width eases between the two
1019
+ * shapes on the slow step with the emphasized curve, the motion a
1020
+ * `DockColumn` opens and closes by, so a column of the frame and a column of
1021
+ * a screen move as one. What the rail holds keeps the width of the shape
1022
+ * drawn, so the moving edge clips the words rather than squeezing them.
1023
+ *
1024
+ * FOLDING, the full rail stays drawn, inert, while the edge narrows to the
1025
+ * compact column, and its words fade out on the base step; the compact column
1026
+ * is drawn when the rail's motion has ended, and fades in on the fast step.
1027
+ * UNFOLDING, the full rail is drawn at once and fades in while the edge
1028
+ * uncovers it. The brand's mark and the fold control are in the same place in
1029
+ * both shapes, so neither fades.
1030
+ *
1031
+ * THE WORDS LEAVE BY A TRANSITION and arrive by keyframes. A fold takes their
1032
+ * opacity to nothing; a fold pressed again mid way (`reverse`) declares
1033
+ * nothing of its own, so the same transition takes the opacity back from
1034
+ * wherever it had reached. Faded out by keyframes instead, a reversal could
1035
+ * only start an entrance from nothing, and the words blinked out and back.
1036
+ * The transition is declared only while the rail moves, so nothing else that
1037
+ * sets these parts' opacity is eased.
1038
+ */
1039
+ .crewlet-app-shell[data-rail-motion='fold'] > .crewlet-app-shell__rail {
1040
+ width: var(--size-shell-rail-compact);
1041
+ }
1042
+
1043
+ /* Two names for one entrance, so an unfold pressed while the compact column
1044
+ is still arriving starts the full rail's entrance afresh. */
1045
+ @keyframes crewlet-app-shell-rail-unfold {
1046
+ from {
1047
+ opacity: 0;
1048
+ }
1049
+ }
1050
+
1051
+ @keyframes crewlet-app-shell-rail-settle {
1052
+ from {
1053
+ opacity: 0;
1054
+ }
1055
+ }
1056
+
1057
+ .crewlet-app-shell[data-rail-motion] .crewlet-app-shell__rail-body,
1058
+ .crewlet-app-shell[data-rail-motion] .crewlet-app-shell__rail-foot,
1059
+ .crewlet-app-shell[data-rail-motion] .crewlet-app-shell__rail-status,
1060
+ .crewlet-app-shell[data-rail-motion] .crewlet-app-shell__rail-head .crewlet-brand__name,
1061
+ .crewlet-app-shell[data-rail-motion] .crewlet-app-shell__rail-head .crewlet-brand__context {
1062
+ transition: opacity var(--motion-duration-base) var(--motion-easing-out);
1063
+ }
1064
+
1065
+ .crewlet-app-shell[data-rail-motion='fold'] .crewlet-app-shell__rail-body,
1066
+ .crewlet-app-shell[data-rail-motion='fold'] .crewlet-app-shell__rail-foot,
1067
+ .crewlet-app-shell[data-rail-motion='fold'] .crewlet-app-shell__rail-status,
1068
+ .crewlet-app-shell[data-rail-motion='fold'] .crewlet-app-shell__rail-head .crewlet-brand__name,
1069
+ .crewlet-app-shell[data-rail-motion='fold'] .crewlet-app-shell__rail-head .crewlet-brand__context {
1070
+ opacity: 0;
1071
+ }
1072
+
1073
+ .crewlet-app-shell[data-rail-motion='unfold'] .crewlet-app-shell__rail-body,
1074
+ .crewlet-app-shell[data-rail-motion='unfold'] .crewlet-app-shell__rail-foot,
1075
+ .crewlet-app-shell[data-rail-motion='unfold'] .crewlet-app-shell__rail-status,
1076
+ .crewlet-app-shell[data-rail-motion='unfold'] .crewlet-app-shell__rail-head .crewlet-brand__name,
1077
+ .crewlet-app-shell[data-rail-motion='unfold'] .crewlet-app-shell__rail-head .crewlet-brand__context {
1078
+ animation: crewlet-app-shell-rail-unfold var(--motion-duration-slow) var(--motion-easing-out);
1079
+ }
1080
+
1081
+ .crewlet-app-shell[data-rail-motion='folded'] .crewlet-app-shell__rail-body,
1082
+ .crewlet-app-shell[data-rail-motion='folded'] .crewlet-app-shell__rail-foot,
1083
+ .crewlet-app-shell[data-rail-motion='folded'] .crewlet-app-shell__rail-status {
1084
+ animation: crewlet-app-shell-rail-settle var(--motion-duration-fast) var(--motion-easing-out);
1085
+ }
1086
+
870
1087
  @media (width < 1024px) {
871
1088
  .crewlet-app-shell {
872
1089
  --crewlet-app-shell-beside: 0px;
@@ -877,7 +1094,7 @@
877
1094
  step is still a column; the rail is a drawer here and takes no track. */
878
1095
  .crewlet-app-shell[data-aside='column'],
879
1096
  .crewlet-app-shell--no-rail[data-aside='column'] {
880
- grid-template-columns: minmax(0, 1fr) var(--crewlet-app-shell-aside-track);
1097
+ grid-template-columns: minmax(var(--crewlet-app-shell-sheet-floor), 1fr) var(--crewlet-app-shell-aside-track);
881
1098
  }
882
1099
 
883
1100
  .crewlet-app-shell--no-rail {
@@ -942,6 +1159,12 @@
942
1159
  transition: transform var(--motion-duration-slow) var(--motion-easing-emphasized);
943
1160
  }
944
1161
 
1162
+ /* The drawer never changes shape, and on a window narrower than the rail
1163
+ it is the window's width: its content fills it rather than being cut. */
1164
+ .crewlet-app-shell__rail-inner {
1165
+ width: auto;
1166
+ }
1167
+
945
1168
  .crewlet-app-shell__toggle {
946
1169
  display: inline-flex;
947
1170
  }
@@ -976,6 +1199,27 @@
976
1199
  .crewlet-app-shell__aside[data-shape='sheet'] {
977
1200
  animation: none;
978
1201
  }
1202
+
1203
+ /* Under reduced motion the shell draws the new shape at once
1204
+ (`usePresence`), so no phase starts; these hold even if one did. */
1205
+ .crewlet-app-shell[data-rail-motion] .crewlet-app-shell__rail-body,
1206
+ .crewlet-app-shell[data-rail-motion] .crewlet-app-shell__rail-foot,
1207
+ .crewlet-app-shell[data-rail-motion] .crewlet-app-shell__rail-status,
1208
+ .crewlet-app-shell[data-rail-motion] .crewlet-app-shell__rail-head .crewlet-brand__name,
1209
+ .crewlet-app-shell[data-rail-motion] .crewlet-app-shell__rail-head .crewlet-brand__context {
1210
+ transition: none;
1211
+ }
1212
+
1213
+ .crewlet-app-shell[data-rail-motion='unfold'] .crewlet-app-shell__rail-body,
1214
+ .crewlet-app-shell[data-rail-motion='unfold'] .crewlet-app-shell__rail-foot,
1215
+ .crewlet-app-shell[data-rail-motion='unfold'] .crewlet-app-shell__rail-status,
1216
+ .crewlet-app-shell[data-rail-motion='unfold'] .crewlet-app-shell__rail-head .crewlet-brand__name,
1217
+ .crewlet-app-shell[data-rail-motion='unfold'] .crewlet-app-shell__rail-head .crewlet-brand__context,
1218
+ .crewlet-app-shell[data-rail-motion='folded'] .crewlet-app-shell__rail-body,
1219
+ .crewlet-app-shell[data-rail-motion='folded'] .crewlet-app-shell__rail-foot,
1220
+ .crewlet-app-shell[data-rail-motion='folded'] .crewlet-app-shell__rail-status {
1221
+ animation: none;
1222
+ }
979
1223
  }
980
1224
 
981
1225
  /* ── the account row ───────────────────────────────────────────────────── */
@@ -1176,6 +1420,33 @@ button.crewlet-account-row__who:focus-visible {
1176
1420
  gap: var(--spacing-1);
1177
1421
  }
1178
1422
 
1423
+ /*
1424
+ * THE COMPACT ACCOUNT: the reader's face alone, centred in the compact rail's
1425
+ * foot, the face's own corner carrying the lift, the hover and the ring. It
1426
+ * keeps the row's link and menu rules above (hover, current, ring), with no
1427
+ * pad of its own, so the box is the face.
1428
+ */
1429
+ .crewlet-account-row--compact {
1430
+ justify-content: center;
1431
+ padding: 0;
1432
+ }
1433
+
1434
+ .crewlet-account-row__who--compact,
1435
+ .crewlet-app-shell__rail-foot .crewlet-account-row__who--compact {
1436
+ flex: none;
1437
+ width: auto;
1438
+ min-height: 0;
1439
+ padding: calc(var(--spacing-1) / 2);
1440
+ border-radius: var(--radius-md);
1441
+ }
1442
+
1443
+ /* The ring stands off the face, outside it: drawn inside, it would cover the
1444
+ face's own edge and status. */
1445
+ .crewlet-account-row__who.crewlet-account-row__who--compact:focus-visible {
1446
+ outline: 2px solid var(--color-focus);
1447
+ outline-offset: 2px;
1448
+ }
1449
+
1179
1450
  @media (prefers-reduced-motion: reduce) {
1180
1451
  .crewlet-account-row__who {
1181
1452
  transition: none;
@@ -1,5 +1,5 @@
1
- export { ArrangeFrame, useGridResize } from '../chunk-PLNJEDGI.js';
2
- import '../chunk-2G355KDJ.js';
1
+ export { ArrangeFrame, useGridResize } from '../chunk-I4IO56EY.js';
3
2
  import '../chunk-UAUP6XGK.js';
3
+ import '../chunk-2G355KDJ.js';
4
4
  import '../chunk-UT6CW3C7.js';
5
5
  import '../chunk-ODEQTPFM.js';
@@ -1,4 +1,4 @@
1
- export { ArrangeGroup } from '../chunk-CYYBE2MM.js';
2
- import '../chunk-MLDTLZAO.js';
1
+ export { ArrangeGroup } from '../chunk-7U6PK242.js';
2
+ import '../chunk-D2GT3CR4.js';
3
3
  import '../chunk-UT6CW3C7.js';
4
4
  import '../chunk-ODEQTPFM.js';
@@ -1,13 +1,14 @@
1
- export { ArrangeList, DEFAULT_ARRANGE_LABELS } from '../chunk-TKUAGWNR.js';
1
+ export { ArrangeList, DEFAULT_ARRANGE_LABELS } from '../chunk-XTJHMP3W.js';
2
2
  import '../chunk-3XDT5ZWL.js';
3
- import '../chunk-MPVMB2DV.js';
4
- import '../chunk-LMQG3VPG.js';
5
- import '../chunk-FB3TCNQP.js';
3
+ import '../chunk-BVML4UVB.js';
4
+ import '../chunk-YQ7Q52XU.js';
5
+ import '../chunk-YJQXESOJ.js';
6
+ import '../chunk-O7N6W52M.js';
6
7
  import '../chunk-PGCLHYVP.js';
8
+ import '../chunk-TUEM2XIW.js';
9
+ import '../chunk-4ITETIGZ.js';
10
+ import '../chunk-UAUP6XGK.js';
7
11
  import '../chunk-PQADV6P6.js';
8
12
  import '../chunk-2G355KDJ.js';
9
- import '../chunk-H5XTJ7GJ.js';
10
- import '../chunk-UAUP6XGK.js';
11
- import '../chunk-NUZHC6MM.js';
12
13
  import '../chunk-UT6CW3C7.js';
13
14
  import '../chunk-ODEQTPFM.js';