@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
package/README.md CHANGED
@@ -42,18 +42,18 @@ import { Button } from '@crewlethq/ui/Button'; // 8 KB of CSS, not 182 KB
42
42
  | ---- | ---------- |
43
43
  | Actions | `Button` and `ButtonLink` (variants `primary`, `secondary`, `outline`, `ghost`, `accent`, `danger`; sizes `small`, `medium`, `large`; shapes `square`, `pill`), `IconButton`, `Menu`, `Link`, `Copyable`, `CopyButton`, `DownloadButton`, `Kbd` |
44
44
  | Content and text | `Text` (the eight registers and `inherit`), `Prose`, `Statement`, `Document`, `DocumentTitle` and `DocumentTitleField`, the Markdown grammar (`parseMarkdown`, `parseMarkdownSpans`, `markdownInline`, `safeHref` and the line readers, with no React in it), `Highlight`, `InlineCode`, `List` and `ListItem`, `DescriptionList`, `Timeline`, `RelativeTime`, `Note`, `Divider` |
45
- | Forms | `Input`, `Textarea`, `Label`, `FormField`, `FormRow`, `Checkbox`, `CheckboxGroup`, `ConfirmField`, `Select`, `Tag`, `TagsInput`, `DateTimePicker`, `TimeWindowPicker`, `TimeRangePicker`, `ImageUpload`, `CharacterPicker`, `HuePicker`, `AvatarPicker`, `FactList`, `ChoiceList`, `ChoiceCards`, `Composer`, `MarkdownEditor`, `RichEditor` (with `preloadRichEditor`, and the round trip `roundTripMarkdown` and `canonicalMarkdown` from `@crewlethq/ui/RichEditorMarkdown`) |
45
+ | Forms | `Input`, `Textarea`, `Label`, `FormField`, `FormRow`, `Checkbox`, `CheckboxGroup`, `ConfirmField`, `Select`, `Tag`, `TagsInput`, `DateTimePicker`, `TimeWindowPicker`, `TimeRangePicker`, `ImageUpload`, `CharacterPicker`, `HuePicker`, `AvatarPicker`, `FactList`, `ChoiceList`, `ChoiceCards`, `ChipField` (chosen items as chips inside the field), `PersonRow` (a person or an agent as one row of a list), `Composer`, `MarkdownEditor`, `RichEditor` (with `preloadRichEditor`, and the round trip `roundTripMarkdown` and `canonicalMarkdown` from `@crewlethq/ui/RichEditorMarkdown`) |
46
46
  | Data display | `DataGrid` (with `useDataGridDriving`, `useAnyDataGridDriving` and `countDataGridRows`), `DataTable`, `CopyableCell`, `Table`, the read-only table cells (`TableKeyCell`, `TableNumberCell`, `TableDateCell`, `TableEntityCell`, `TableStatusCell`, `TableTagsCell`, `TableTextCell`), `StatCard`, `Meter`, `SegmentedMeter`, `Stepper`, `PricingCard`, `Avatar`, `AvatarStack`, `EntityChip`, `CodeBlock`, `QrCode`, `ObjectHeader`, `FactLine`, `SetByLine`, `Skeleton`, `Eyebrow`, `StatGroup`, `PinTile`, `IconTile`, `SettingsTable` (with `SettingsTable.Row`), `CatalogTile` |
47
47
  | List screens | `DataView`, and its parts on their own: `DataViewToolbar`, `FilterAxisBar`, `FilterAxisChip`, `FilterPill`, plus the filter model (`filterDefsFromColumns`, `applyColumnFilters`, `filterPredicate`, `blankFilterValue`) |
48
48
  | Feedback and overlays | `Callout`, `ConflictNote`, `EditingStatus`, `Toaster`, `Modal` (with `variant="sheet"`), `ConfirmModal`, `CommandPalette`, `Tooltip`, `Popover`, `Announcer` |
49
49
  | Documents and review | `DiffView` and `DiffSummary` with the line diff they draw (`diffLines`, `diffStat`, `collapseDiff`, `firstChangedLines`, `splitLines`, `MAX_DIFF_LINES`, with no React in it), `DiffList`, `VersionCompare`, `CommentThread` |
50
- | Conversations and the assistant | `ChatThread` (with `ChatThreadHandle`), `MessageBubble`, `RunChip`, `StepList` and `StepStateMark`, `ProposalCard`, `ChangeList` (with `shortenUnchanged`), `StatusCard`, `ReceiptStrip`, `RefusalStrip`, `ResultTableCard`, `OpenInAppCard`, `BriefCard`, `EntityList`, `RecordChip` and `RecordChipList` (a record named in a sentence, opening a peek, and the Also read line), `RefusalCard`, `SuggestionRow` and `SuggestionList`, `SendButton` |
50
+ | Conversations and the assistant | `ChatThread` (with `ChatThreadHandle`), `ChatMessage` and `ChatMessageFailure`, `MessageActions` (with `MessageAction`, `QuickReaction` and `ActionDivider`), `ReactionBar` and `AddReaction` (with `reactionWho`), `EmojiPicker` (with `EMOJI_GROUPS`, `emojiName` and `searchEmoji`), `ThreadSummary`, `ActivityLine`, `MentionChip`, `MessageBubble`, `RunChip`, `StepList` and `StepStateMark`, `ProposalCard`, `ChangeList` (with `shortenUnchanged`), `StatusCard`, `ReceiptStrip`, `RefusalStrip`, `ResultTableCard`, `OpenInAppCard`, `BriefCard` (with `points`, what was said, each citing its message), `EntityList`, `RecordChip` and `RecordChipList` (a record named in a sentence, opening a peek, and the Also read line), `RefusalCard`, `SuggestionRow` and `SuggestionList`, `SendButton`, a transcript's timeline (`ChatDay` with `ChatDayPill`, `ChatDivider`), `LinkCard` (a link unfurled under its message), `MentionMenu` (with `mentionQuery`), `ActionCard` and `ActionCardRow` |
51
51
  | Charts | `Legend`, `BarList`, `StackedBar`, `StackedColumns`, `ActivityStrip`, `TimeSeries`, `Sparkline`, the reading layer they share (`ChartTooltip`, `useChartHover`), and the ramp (`DATA_COLORS`, `DATA_COLOR_OTHER`, `dataColor`) |
52
- | Marks | `Count`, `StatusDot`, `Spinner`, `EmptyValue`, `VisuallyHidden` |
52
+ | Marks | `Count` (with `tone="attention"`), `StatusDot`, `Spinner`, `EmptyValue`, `VisuallyHidden` |
53
53
  | Hooks and seams | `useModalLayer`, `usePopupLayer`, `LayerHost`, `useListbox`, `useOptionKeys`, `useHighlightRest` and `HIGHLIGHT_REST_MS`, `useClipboard`, `useDownload`, `downloadText`, `downloadBlob`, `safeFilename`, `toCsv`, `elementToPng` and `ElementToPngError`, `useOutcome`, `useAnnouncer`, `useNow`, `formatRelative`, `HeadingLevelProvider`, `cx`, the node hues (`NODE_HUES`, `NODE_HUE_NAMES`, `isNodeHue`) |
54
54
  | Layout | `Container`, `Section`, `Card`, `TileGrid`, `ListDetail`, `AsideLayout`, `Tabs`, `Accordion`, `Disclosure`, `Outline` (with `useActiveHeading` and `scrollToHeading`), `TreeGrid` |
55
55
  | Arranging a page | `ArrangeBoard`, `ArrangeGrid`, `ArrangeFrame` (with `useGridResize`), `ArrangeGroup`, `ArrangeList`, and the reorder hooks under them (`useReorder`, `useReorderLists`, `moveKey`) |
56
- | Application shell | `AppShell` with `AppShell.Rail`, the `aside` track and the `peek` slot (`useAppShellAside`, `useAppShellPeek`), `AppShell.ResizeHandle` (also `ResizeHandle`) and `useStoredWidth`, `SidePanel` and `SidePanelFrame`, `PeekRail` and `PeekHost` (with `PeekNeighbours`, `usePeekNeighbours`, `usePeekStep`, `peekClickHandler`, `peekRowActivation`), `SectionFrame` (with `SectionFrame.Nav` and `SectionFrame.Body`), `LockedLabel`, `AppShell.Topbar`, `AppShell.AccountRow` and `useAppShell`, `AuthLayout`, `SidebarNav` and `NavItem`, `DirectoryList`, `BrandLockup`, `SearchTrigger`, `PageHeader`, `Toolbar`, `Stack`, `Inline`, `Spacer`, `AutoGrid`, `ErrorBoundary`, `useShortcut`, `useFullscreen`, `useIdle`, `useMediaMatch` |
56
+ | Application shell | `AppShell` with `AppShell.Rail`, the compact rail (`rail="compact"`, the one fold control from `onRailChange`, and `useAppShell().rail` to pick the shape) and `fill="flush"`, the `aside` track and the `peek` slot (`useAppShellAside`, `useAppShellPeek`), `AppShell.ResizeHandle` (also `ResizeHandle`) and `useStoredWidth`, `SidePanel` and `SidePanelFrame`, `PeekRail` and `PeekHost` (with `PeekNeighbours`, `usePeekNeighbours`, `usePeekStep`, `peekClickHandler`, `peekRowActivation`), `SectionFrame` (with `SectionFrame.Nav` and `SectionFrame.Body`), `DockColumn` and `usePresence`, `LockedLabel`, `AppShell.Topbar`, `AppShell.AccountRow` and `useAppShell`, `AuthLayout`, `SidebarNav` and `NavItem` (with `dense` lists, `unread` and `muted` rows and `collapsible` groups), `CompactNav` with `CompactNavItem`, `CompactNavGroup` and `CompactNavSeparator` (the rail folded to its marks, fed from the same places), `DirectoryList`, `BrandLockup`, `SearchTrigger`, `PageHeader`, `Toolbar`, `Stack`, `Inline`, `Spacer`, `AutoGrid`, `ErrorBoundary`, `useShortcut`, `useFullscreen`, `useIdle`, `useMediaMatch` |
57
57
  | 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 |
58
58
  | 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 |
59
59
  | 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) |
@@ -205,6 +205,91 @@ places:
205
205
  - A surface that pans or zooms dispatches `LAYER_REPOSITION_EVENT` on its host
206
206
  when the content beneath it moves, and every panel anchored inside follows.
207
207
 
208
+ ## Changes in 0.83.0
209
+
210
+ ### The application rail
211
+
212
+ **The fold control is a plus and a minus in the rail's top left corner.** The chevron in the row under the rail's head is gone. In its place `AppShell` draws one control in the corner the head leaves empty, up and to the left of the brand's mark: a minus (`MinusGlyph`) while the rail is full, to make it smaller, and a plus (`PlusGlyph`) while it is compact, to open it. It is the same element in both shapes and never moves, so focus stays on it across a fold. It keeps its names ("Collapse the sidebar" and "Expand the sidebar", or `railFoldLabels`), `aria-controls`, `aria-keyshortcuts` and the keys in its tooltip, and now says `aria-expanded` (true while the rail is full). It stands at the target floor (`--size-target-min`, 24px) at every density, its ring is drawn inside its own box, and it is quiet until the rail is pointed at. Full, the search field keeps the nav's own columns, since nothing stands before it any more. Props are unchanged.
213
+
214
+ **The rail eases between its two shapes.** Its width moves on the slow step with the emphasized curve, the motion a `DockColumn` opens by, and what it holds keeps the width of the shape drawn, so the moving edge clips the rail's words rather than squeezing or rewrapping them, and the column under the edge never drifts. Folding, the full rail's middle, foot and status stay drawn and inert while its words fade out (focus inside them goes to the rail's first live control: the fold control, or the brand's link in the head, which stays live; with neither, the folded rail's first control once it is drawn), then the compact column fades in once the rail has moved; unfolding, the full rail is drawn at once and fades in while the edge uncovers it. The brand's mark and the fold control do not move or fade. Both shapes are a `usePresence` each, so the rail waits on the motion actually running on it, as a `DockColumn` does. `useAppShell().rail` reports the shape drawn, so it stays `full` until a fold has moved; the root's `data-rail-motion` (`fold`, `folded`, `unfold`, and `reverse` for a fold pressed again mid way, type `AppShellRailMotion`) names the phase under way. The words leave by a transition of their opacity, so a reversal brings them back from wherever their fade had reached rather than blinking them out and in; `usePresence` reports such a return as `returning`. Under reduced motion, and wherever nothing moves, the new shape is drawn at once. A change that arrives with the window crossing into the wide layout is drawn at once too. The rail's grid track is now `auto` and the rail takes `--crewlet-app-shell-rail` as its own width, which is still the one variable a host sets for a narrower rail. An aside column capped by the page's floor (`asideReserve`) now takes what the grid leaves it beside the rail's LIVE width, so it widens and narrows with the rail frame by frame, where a cap computed from the rail's variable jumped at both ends of a fold (story: `AppShellAside` Cap Follows A Folding Rail). While the rail moves the shell holds what it measures (the screen's width that `useScreenWidth` and `useScreenBelow` read, the scroller's gutter, the aside's width) and takes each once when the rail comes to rest, so no screen re-renders on every frame of a fold or changes shape mid way; a container query on the content column still follows every frame.
215
+
216
+ **In the compact rail the status has a row of its own under the brand's mark**, where the fold chevron stood, rather than at the top of the foot: the `AppShell.RailStatus` dot and count, centred, a small control step tall, before the places. It keeps its button, its name ("Engine serving, 2 alarms"), its popup attributes and its ref. A panel it opens now stands at the top of the rail, so open it below the status (`side="bottom"`) in both shapes. Full, it stays at the end of the head's line.
217
+
218
+ **The compact account face is centred on the tiles' line.** It took the full row's badge column and the step after it, which stood the face 4px left of the column's centre in a box 8px wider than the face. It now sits in a box of its own size, centred under the tiles. Hand the face at the tiles' height in the compact rail (`Avatar size="sm"`, 26px); the full row keeps `size="md"`.
219
+
220
+ **A place that waits on the reader takes the badge, whichever place it is.** `NavItem` and `CompactNavItem` draw a `badge` as the one filled accent pill, centred on the row's line and ending on the row's end inset, so a column of badges lines up down the rail; a `count` is the quiet figure. Nothing changed in how either is drawn: to show the reader's own work as the inbox is shown, pass `badge` rather than `count`. New stories: `AppShell` Fold Control In Both Shapes, `SidebarNav` Badges On The Rows About You, and `DockColumn` (Pinned Beside A Conversation, Unpinned, At The End).
221
+
222
+ ### Columns that ease open and shut
223
+
224
+ **`usePresence` is new**: something kept drawn while it leaves. `usePresence(shown, ref, { transitions, animations, instant })` answers `present` (draw it), `leaving` (drawn only to finish leaving: make it `inert`) and `entering` (shown again, never on the first draw, while its motion runs: the window a stylesheet scopes an entrance to). It waits only for the surface's OWN motion (`MotionOwnership`), as it is actually running (`getAnimations()`), never for a duration written in code: the transitions on `ref`'s element itself (by property; any, if `transitions` is left out) and the keyframes it names in `animations`, wherever they run under it. A motion something else inside it runs (a meter filling, a badge arriving), a paused one and an endless one (a pulse) are never waited for, a motion replaced mid way is waited out in its turn, a reopen on the way out cancels the wait, and no wait outlasts the motion's own remaining time and a margin (the fast step), so a tab hidden mid motion still settles. Under `prefers-reduced-motion: reduce`, where nothing runs, where the Web Animations API is missing, and for a change the host marks `instant`, it goes straight through in the same commit, before any paint. `afterMotion(element, done, owned)` and `runningMotion(element, owned)` are the same wait for a host with its own state, `tokenMs(motion.duration.fast)` turns a motion token into milliseconds (Tooltip and CompactNav each kept a copy), `releaseFocus(container, target)` takes focus out of something about to turn inert (to the host's `target`, or off it). The reader's motion preference is now asked through one spelling of the query, **`REDUCED_MOTION_QUERY`**, with **`prefersReducedMotion(view)`** for a read outside render, both beside `useMediaMatch`; `ChatThread`, `Outline`, `useReorder` and `TreeCanvas` use them where each kept a copy of the string. The ui-tests helper `apps/ui-tests/src/motion.ts` (`driveMotion`, `settleMotion`, `preferReducedMotion`) starts and ends motion by hand in jsdom.
225
+
226
+ **`DockColumn` is new**: a column a host docks beside its content and takes away again, such as a list of rooms pinned beside a conversation. It stands in the host's own `auto` grid track (or as a flex item that does not grow) and eases its width between none and its panel's (`width`, px or any length) on the slow step with the emphasized curve, so the content beside it resizes frame by frame rather than jumping. The panel keeps its own width and is held to the edge that faces the content, so it slides in from the outer edge, and on close it stays drawn and `inert` until the column has closed over it; opened again on the way out, it is live where it is. Closed from inside (an Unpin in its own head), focus goes to `focusOnClose`, the control that docks it again, and is never left in the panel. `side` (`start`, the default, or `end`) places it, `divider` (on by default) draws the hairline on the edge that faces the content, and `--crewlet-dock-column-ground` gives the panel a ground. It is a plain column, not a landmark: what it holds names itself. Under reduced motion it simply is or is not. Types: `DockColumnProps`, `DockColumnSide`.
227
+
228
+ ### React
229
+
230
+ **The package asks for React 19** (`react` and `react-dom` `>=19`, was `>=18`). The components already used what React 19 brought, `inert` as a boolean prop and `ref` as a plain prop of a function component and of an element (`ArrangeFrame`, `Tooltip`, `ListInput`, and now `DockColumn`, the folding rail and `Popover`), and under React 18 neither fails loudly: `inert` is dropped with a warning, so a panel on its way out stays focusable, and a ref read from props is undefined, so a trigger's own ref is lost. Every Crewlet application is on React 19. A suite holds the peer range to the source.
231
+
232
+ ### Refs
233
+
234
+ **A trigger keeps its own ref across re-renders.** `Tooltip` cloned its trigger with a new ref callback on every render, so React took the element away from the trigger's own ref and gave it back in each commit, and a layout effect earlier in the tree read null while the control stood in the document (a `DockColumn` handing focus to a tooltip-wrapped Pin control as it closed). `Tooltip`, `Popover`, `Menu`'s trigger props and `Modal`'s frame now join their refs with **`useComposedRef(...refs)`** (new, with **`composeRefs`** for code outside a component and **`attachRef`** for one ref), one callback for any number of refs that is the same callback while they are the same and releases each the way React would. `Popover` also keeps the ref its trigger carried, which it used to replace.
235
+
236
+ ## Changes in 0.82.0
237
+
238
+ ### A conversation's messages
239
+
240
+ **The conversation parts.** A transcript of people and agents is now drawn from the kit, every size read from one scale (`ChatMessage/ChatScale.css`, the `--crewlet-chat-*` properties on `:root`: the words and meta steps, the row inset, the face column, the day's pill and pin, the toolbar, the transcript's ground and the mention wash), which each part imports, so a part imported alone still gets it. A surface that wants a denser or roomier transcript sets them once.
241
+
242
+ - **`ChatMessage`**: a focusable article (out of the tab order, `data-message-id`) with the author's face in a gutter, the name at the medium weight, a label and the time on one head line, the words and a `footer` stack. A `continuation` draws no head and shows a face-wide time (`gutterTime`) in its gutter on hover. `highlight="mention"` is a light warning wash with a bar on the edge, kept under the pointer; `flash` is a wash of the accent that fades back to the row's own ground; `pending` is `sending` (faint words) or `failed`; `editing` puts the toolbar away; `active` holds the fill and the toolbar while one of its menus is open. The toolbar (`actions`) rests on the row's first line over the row above, and is drawn inside the row where the scroller's edge would cut it, measured when the pointer arrives or focus enters; `actionsPlacement="inside"` always draws it inside, for a row under a card's head. A tap on a touch screen shows it. ArrowUp and ArrowDown walk the rows of a log. A message the reader is taken to stops under the day's pinned pill (`scroll-margin-top`). `ChatMessageFailure` is the not-sent line with Retry and Discard.
243
+ - **`MessageActions`** is a `Toolbar` drawn as a soft tray: the transcript's ground, the hairline, a small shadow, the large corner and 30px tools. `MessageAction` is one tool whose hint is its name and which can be a `Menu`'s own trigger; `QuickReaction` is an emoji that reacts; `ActionDivider` a hairline between groups.
244
+ - **`ReactionBar`**: one toggle pill to an emoji, a soft fill with no edge at rest, the strong edge under the pointer, and the reader's own in the accent's soft fill and ring with a medium count. Its hint says who reacted with the reader first (`reactionWho`: "You, Product Manager and 1 other", or "You and 2 others" and "3 members" where no names are known). `disabledReason` holds the pills and adds the reason to their hint. `AddReaction` opens the picker from a pill that stays quiet in a row until the row is pointed at, and is always shown on a touch screen.
245
+ - **A reader who cannot react is held everywhere a reaction starts.** `QuickReaction`, `MessageAction` and `AddReaction` take `disabledReason`, as `ReactionBar` does: the control is marked unavailable (`aria-disabled`), does nothing when pressed, and adds the reason to its hint.
246
+ - **`EmojiPicker`**: a searchable grid in a popover. The field has focus on opening, Enter picks the first match, and the grid is one tab stop the arrows walk by its rows.
247
+ - **`ThreadSummary`**: the repliers' faces, the count at the medium weight in the accent's ink, how many are new and when the last reply came; under the pointer View thread takes the time's place.
248
+ - **`ActivityLine`**: who is typing, as a polite status, and the working agent as a `ThinkingIndicator` announcing its label once, in a line that keeps its height when empty.
249
+ - **`MentionChip`**: a name in the words, in the info tone's light blue for others and the warning tone for the reader (`self`) and the whole room (`everyone`); a button with `onPress`, text without.
250
+
251
+ **`ChatThread.reveal()` lands an item in the middle of the view**, with what came before and after it in sight, where it set the item's foot on the view's foot. It keeps the item's `scroll-margin-top` and `scroll-margin-bottom` clear, and places the item again in the view the Jump to latest row leaves once the move has brought that row in, so the row no longer covers the item's last lines. An item taller than the view still lands with its head at the top. **`jump={false}`** leaves the Jump to latest row out, for a log that offers its own way back, and **`ChatThreadHandle.scroller()`** hands a host the scrolling element.
252
+
253
+ **`ThinkingIndicator` is never wider than its column.** In a column that sizes its items by their content (a message's footer) a long status made it as wide as its words, and a phone's transcript scrolled sideways; the status now truncates.
254
+
255
+ ### A conversation's timeline, previews and pickers
256
+
257
+ **`ChatDay` is new**: a day of a conversation under its date. The day's rule is a hairline across the list where the day starts, in the flow; its pill (24px, the transcript's ground, a hairline ring and a small shadow, the secondary ink at the medium weight) sits on the rule and stays pinned a little under the top of the list while any of the day is in view, until the next day pushes it out. The pin is `--crewlet-chat-day-pin`, so a host with a bar floating over the list (an unread banner) moves the pills down past it. `pill` takes the host's own control, such as a Jump to menu whose trigger is the new `ChatDayPill` (a button with a chevron while it opens a menu), and `unread` draws the New line on the day's own rule. A day is a group named by its date.
258
+
259
+ **`ChatDivider` is new**: the New line (`variant="unread"`), a hairline in the danger hue with its word at the end on the transcript's ground, which takes no height, so marking the reader's place moves no message; and a quiet labelled rule (`variant="date"`), as a thread pane sets its reply count. Both are separators named by their words, found again by `data-divider`.
260
+
261
+ **`LinkCard` is new**: what a link points at, unfurled under its message with no box: a 3px bar in the status tone's line colour, the source app's mark and name, the title (the primary ink at the regular weight, two lines at most, the accent ink and an underline under the pointer), a line of details, and the status (a dot in the tone's full colour) and owner (a small face and the name) as words. The preview is one link named by its title and described by the rest. Only an address `safeHref` allows is followed; anything else draws the preview as words. `external` opens a new tab with no referrer or opener and says so; an in-app route opens in place. Tones are `neutral`, `info`, `success`, `warning` and `danger`.
262
+
263
+ **`MentionMenu` is new**: the suggestions a composer opens on "@" or "#", a listbox the message box owns through `aria-activedescendant`, with the keyboard hints at its foot (hidden on a touch screen). Wire it to `useListbox` (`tabCommits: true`) and pass the hook's `listId`, `listRef`, `active` and `setActive`. `mentionQuery(text, caret)` finds the "@word" or "#word" at the caret, and opens nothing inside a word such as an address. Its rows are `PersonRow`s.
264
+
265
+ **`PersonRow` is new**: a person or an agent as one row of a list, the same in a picker's suggestions, a member list and the composer's @ list: the face, the name and an Agent label, what they are doing now or their title, trailing words, and for a row that toggles (`mark="toggle"`, `selected`) a pressed state and a plus that turns into a check. It is a button by default and an option of a listbox with `as="option"` (`selected` is `aria-selected`, `highlighted` the arrows' row). `density="compact"` is one line.
266
+
267
+ **`ChipField` is new**: the chosen items of a picker as chips inside the field, before a bare text box, for the people being added to a room and the address line of a new message (`variant="bare"`, with a `prefix` such as "To:"). Backspace in an empty box removes the last chip and says so, Enter with words typed is the host's first match (`onCommit`), focus stays in the box when a chip goes, and the host's own `onKeyDown` runs first, so the box can be a combobox over `useListbox`. It differs from `TagsInput`, a form value whose chips sit above its box.
268
+
269
+ **`ActionCard` and `ActionCardRow` are new**: a first step offered as a picture, a 148 by 172 card on an artifact kind's colour ground (`tone`: purple, blue, amber, green, teal, magenta, rose) with its title at the top and a drawing at its foot, and a row of them that scrolls sideways and snaps on a narrow width. The hover is quiet: the ground deepens a step and a small shadow lifts the card. Each kind now publishes its Ground steps on `.crewlet-kind--<kind>` (`--crewlet-kind-ground`, `-ground-strong`, `-ground-end`, `-glow`), from the new `--color-artifact-kind-<kind>-ground` tokens.
270
+
271
+ ### Faces, hints, sheets and counts
272
+
273
+ **Every face is one rounded square, a person's and an agent's alike.** A person was a circle and an agent a squircle, so a row of people and agents changed shape from face to face. `Avatar` now draws every face as a square whose corner is two ninths of its side, held between the xs and lg radius steps (8px on a 36px face; `AVATAR_CORNER_RATIO` is 2/9 and `AVATAR_CORNER_RANGE` is `{ min: 4, max: 12 }`, and `avatarCorner(px)` answers both). The kind is said by the face's contents: the initials in the mono face for an agent and the sans face for a person, a character, a picture. A face's outline is the hairline step (`--color-edge-hairline`), whatever it holds, where the neutral badge drew the strong hairline and a hue's plate its own line. The status badge is under a third of the face (0.3 of it, never under 10px) and hangs a twentieth of it past the corner, the size and place of a presence dot. In an `AvatarStack` the ground's ring is the only edge a face draws. `PresenceStack`, `ImageUpload` and `Skeleton`'s face take the same corner. Props are unchanged.
274
+
275
+ **A `Tooltip` stays open for keyboard focus only, and a press closes it.** A mouse press focuses a button too, and so does a layer handing focus back as it closes, so a tip shown for a hover outlived the hover. Focus now holds the tip only when it is the focus `:focus-visible` matches (`isVisibleFocus`, exported beside `returnFocus`, which also refuses a focus handed back while the reader uses a pointer). A press closes the tip, and it opens again on the pointer's next arrival. A ref and any other attribute handed to a `Tooltip` are its trigger's: they are merged onto the child (handlers run after the child's own, `style` merged, descriptions joined), so a tooltip can stand where a `Popover` or a `Menu` expects its trigger. A suite that means keyboard focus focuses through `tabTo` in `apps/ui-tests/src/keyboard.ts`.
276
+
277
+ **`Modal` takes `side="start"`** for a sheet pinned to the inline start, a navigation panel such as a list of rooms: it slides in from that edge with its edge and its shadow (`--shadow-sheet-start`, the sheet's own shadow mirrored) on its inline end. `side` is read on the sheet variant only. A modal's head and foot no longer shrink under a long body.
278
+
279
+ **`Count` takes `tone="attention"`**: a count of what waits on the reader (a mention, a direct message, a new reply to them) as the accent pill at the badge's size (`--size-badge`, its figure at `--font-size-badge`), the same pill a navigation row's badge draws. A count is still never tinted by severity, and `quiet`, the default, is unchanged. The type is `CountTone`.
280
+
281
+ **`Tag` takes `appearance="quiet"`**: a small filled label with no boundary, 16px tall in the label register, for a seat's kind beside its name ("Agent"). It takes no size step.
282
+
283
+ **`SidePanel` takes `subtitle`**: what the panel is about, after the title on its baseline in the tertiary ink ("Thread" then the room it is in). It drops under the title when the two do not fit, and the head grows to hold it.
284
+
285
+ **`Composer` takes `tools` and `toolbar`**: the tools at the footer's start (attach, emoji, a mention), before the actions at its end, and a formatting row along the box's top, inside its edge, above the words it acts on. Either one alone draws its part. **`appearance="chat"`** is a conversation's message box on the transcript's scale: the transcript's ground with the row wash and a small shadow inside the strong edge, the words at the chat step, a footer with no rule of its own, an open tool drawn pressed, and the formatting row quiet until the box is in use. The type is `ComposerAppearance`.
286
+
287
+ **`BriefCard` takes `points`**: what was said, for a brief of a conversation (a room's catch up), a list under the needs named "What was said", each point a sentence and its citation, the host's own press that opens the message it came from (`source`, a `BriefCardAction`). At most five (`BRIEF_CARD_MAX_POINTS`), cut with a warning outside production as the needs are. The type is `BriefCardPoint`.
288
+
289
+ **`ChatThread` takes `rest="end"`**: a transcript shorter than its view rests on its foot, against the composer under it, rather than under its top. `start` is the default. The type is `ChatThreadRest`.
290
+
291
+ **`formatMarkdown` applies `strikethrough`, `quote` and `link`** (`MARKDOWN_TEXT_FORMATS`, type `MarkdownTextFormat`), for a composer's own formatting row. `MarkdownEditor`'s bar does not draw them. A strikethrough wraps in `~~`, a quote toggles `> ` on every line it touches and keeps their own markers, and a link makes the selection its label and selects the address to type over.
292
+
208
293
  ## Changes in 0.81.1
209
294
 
210
295
  **A `DataTable` strip spans the whole row.** On an expandable table the accessory strip under a row spanned one column fewer than the row, so it stopped before the last column, while the opened panel spanned all of it. Unseen while that column was a sliver of spacer, it broke the strip, and the rule under its row, off two thirds across a table sized to its content.
@@ -1,6 +1,6 @@
1
- export { Accordion, AccordionItem } from '../chunk-5NJMSYDZ.js';
2
- import '../chunk-IVTQWOXV.js';
3
- import '../chunk-MLDTLZAO.js';
1
+ export { Accordion, AccordionItem } from '../chunk-XNC3M4IN.js';
2
+ import '../chunk-ULYHDP7U.js';
3
+ import '../chunk-D2GT3CR4.js';
4
4
  import '../chunk-PQADV6P6.js';
5
5
  import '../chunk-UT6CW3C7.js';
6
6
  import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,49 @@
1
+ import type { ButtonHTMLAttributes, ReactNode } from 'react';
2
+ import type { ArtifactKind } from '../ArtifactKindGlyph/index.js';
3
+ /**
4
+ * The colour ground a card is drawn on, named by its hue. Each is an artifact
5
+ * kind's measured colour (purple is design's, blue doc's, amber slides',
6
+ * green sheet's, teal dashboard's, magenta the brand kit's, rose HTML's), so
7
+ * every palette and both modes are already fitted for it.
8
+ */
9
+ export type ActionCardTone = 'purple' | 'blue' | 'amber' | 'green' | 'teal' | 'magenta' | 'rose';
10
+ /** Which kind's colours each tone reads. */
11
+ export declare const ACTION_CARD_GROUND: Readonly<Record<ActionCardTone, ArtifactKind>>;
12
+ export interface ActionCardProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children' | 'title' | 'onSelect'> {
13
+ /** What the card does, as its name: "Add people and agents". */
14
+ title: string;
15
+ tone: ActionCardTone;
16
+ /** The drawing at the card's foot. Decorative: the title says what it does. */
17
+ art: ReactNode;
18
+ /** Pressing the card. */
19
+ onSelect: () => void;
20
+ }
21
+ /**
22
+ * A first step offered as a picture: a tall card on one of the kit's colour
23
+ * grounds, its title at the top and a drawing at its foot. A new room opens
24
+ * with a row of these (add people, add a description, start from a
25
+ * template) until its first message.
26
+ *
27
+ * A QUIET HOVER. The ground deepens a step and a small shadow lifts the card
28
+ * off the page; nothing moves, so a row of cards holds still under a pointer
29
+ * passing over it.
30
+ *
31
+ * A BUTTON NAMED BY ITS TITLE. The drawing is hidden from assistive
32
+ * technology, so a reader hears "Add people and agents, button" and nothing
33
+ * about a picture.
34
+ */
35
+ export declare function ActionCard({ title, tone, art, onSelect, onClick, className, type, ...rest }: ActionCardProps): import("react").JSX.Element;
36
+ export interface ActionCardRowProps {
37
+ /** Names the row for a screen reader: "First steps for this room". */
38
+ label: string;
39
+ /** The cards, in the order they are offered. */
40
+ children: ReactNode;
41
+ className?: string | undefined;
42
+ }
43
+ /**
44
+ * Action cards side by side, in one row that scrolls sideways when it runs
45
+ * out of width: a phone shows two cards and part of the third (the part says
46
+ * there is more) rather than a tall stack, and each card snaps to the row's
47
+ * start.
48
+ */
49
+ export declare function ActionCardRow({ label, children, className }: ActionCardRowProps): import("react").JSX.Element;
@@ -0,0 +1,4 @@
1
+ import '../ArtifactKindIllustration/ArtifactKinds.css';
2
+ import './ActionCard.css';
3
+ export { ACTION_CARD_GROUND, ActionCard, ActionCardRow } from './ActionCard.js';
4
+ export type { ActionCardProps, ActionCardRowProps, ActionCardTone } from './ActionCard.js';
@@ -0,0 +1,2 @@
1
+ export { ACTION_CARD_GROUND, ActionCard, ActionCardRow } from '../chunk-HTBTAIH6.js';
2
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,110 @@
1
+ /*
2
+ * ActionCard: a first step offered as a picture, on an artifact kind's
3
+ * colour ground. The ground is the kind's own Ground steps (ArtifactKinds.css)
4
+ * laid over the card rung, which the palette suite holds to 4.5:1 for the
5
+ * primary text in every palette and both modes, with the kind's glow behind
6
+ * the drawing.
7
+ */
8
+
9
+ /*
10
+ * ONE ROW THAT SCROLLS SIDEWAYS when it runs out of width, so a phone shows
11
+ * two cards and part of the third (the part says there is more) instead of a
12
+ * tall stack. The block padding keeps the focus ring and the hover shadow
13
+ * inside the scroller's clip; the negative margin gives that space back to
14
+ * the layout. A host that runs the row to its container's edges sets the
15
+ * inline padding and `scroll-padding-inline` to its own inset.
16
+ */
17
+ .crewlet-action-cards {
18
+ display: flex;
19
+ gap: var(--spacing-2);
20
+ overflow-x: auto;
21
+ margin-block: calc(var(--spacing-1) * -1) calc(var(--spacing-2) * -1);
22
+ padding-block: var(--spacing-1) var(--spacing-2);
23
+ scroll-snap-type: x mandatory;
24
+ overscroll-behavior-x: contain;
25
+ scrollbar-width: none;
26
+ }
27
+
28
+ .crewlet-action-cards::-webkit-scrollbar {
29
+ display: none;
30
+ }
31
+
32
+ .crewlet-action-card {
33
+ --crewlet-action-card-ground: var(--crewlet-kind-ground);
34
+ position: relative;
35
+ display: flex;
36
+ flex: none;
37
+ flex-direction: column;
38
+ justify-content: space-between;
39
+ width: 148px;
40
+ height: 172px;
41
+ box-sizing: border-box;
42
+ overflow: hidden;
43
+ padding: var(--spacing-3) var(--spacing-3) 0;
44
+ /* The kind's hue itself is the edge: 3:1 or more on the sheet in every
45
+ palette and mode, where the kind's Line step measured 2.5:1. */
46
+ border: 1px solid var(--crewlet-kind-hue);
47
+ border-radius: var(--radius-lg);
48
+ background-color: var(--color-surface-subtle);
49
+ background-image:
50
+ radial-gradient(110% 64% at 50% 100%, var(--crewlet-kind-glow) 0%, transparent 72%),
51
+ linear-gradient(180deg, var(--crewlet-action-card-ground) 0%, var(--crewlet-kind-ground-end) 100%);
52
+ color: var(--color-text-primary);
53
+ font: inherit;
54
+ text-align: left;
55
+ cursor: pointer;
56
+ scroll-snap-align: start;
57
+ transition: box-shadow var(--motion-duration-fast) var(--motion-easing-default);
58
+ }
59
+
60
+ /* A QUIET HOVER: the ground deepens a step and a small shadow lifts the
61
+ card off the page. Nothing moves. */
62
+ .crewlet-action-card:hover {
63
+ --crewlet-action-card-ground: var(--crewlet-kind-ground-strong);
64
+ box-shadow: var(--shadow-sm);
65
+ }
66
+
67
+ /* The card draws its own edge, so the ring is drawn over it. */
68
+ .crewlet-action-card:focus-visible {
69
+ outline: 2px solid var(--color-focus);
70
+ outline-offset: var(--size-focus-ring-inset-offset);
71
+ }
72
+
73
+ /* The title at the medium weight, as every emphasis in a conversation is,
74
+ two lines at most at its width, balanced so neither line is one word. */
75
+ .crewlet-action-card__title {
76
+ max-width: 14ch;
77
+ font-size: var(--font-size-sm);
78
+ font-weight: var(--font-weight-medium);
79
+ line-height: var(--font-line-height-snug);
80
+ text-wrap: balance;
81
+ }
82
+
83
+ /* The drawing stands on the card's foot, still. */
84
+ .crewlet-action-card__art {
85
+ display: flex;
86
+ align-items: flex-end;
87
+ justify-content: center;
88
+ height: 100px;
89
+ margin: 0 calc(var(--spacing-3) * -1);
90
+ }
91
+
92
+ .crewlet-action-card__art .crewlet-kind-illustration {
93
+ width: 112px;
94
+ max-height: 96px;
95
+ margin-bottom: calc(var(--spacing-2) * -1);
96
+ filter: drop-shadow(0 6px 12px var(--crewlet-kind-line));
97
+ }
98
+
99
+ /* FORCED COLORS drops the ground; the hue's border stays as the card's edge. */
100
+ @media (forced-colors: active) {
101
+ .crewlet-action-card {
102
+ border-color: CanvasText;
103
+ }
104
+ }
105
+
106
+ @media (prefers-reduced-motion: reduce) {
107
+ .crewlet-action-card {
108
+ transition: none;
109
+ }
110
+ }
@@ -0,0 +1,27 @@
1
+ import type { HTMLAttributes } from 'react';
2
+ export interface ActivityLineProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
3
+ /** Who is typing, in words: "Product Manager is typing". Empty or left out, nothing is drawn for it. */
4
+ typing?: string | undefined;
5
+ /**
6
+ * The agent at work, in words, beside the Ask Crewlet mark under its
7
+ * shimmer: "Senior Backend Engineer is writing a reply · Reading the diff".
8
+ * It may change with every step.
9
+ */
10
+ working?: string | undefined;
11
+ /**
12
+ * What a screen reader is told once when the agent starts, which never
13
+ * changes with its steps: "Senior Backend Engineer is writing a reply".
14
+ * `working` by default.
15
+ */
16
+ workingLabel?: string | undefined;
17
+ }
18
+ /**
19
+ * Who is typing and which agent is working, in one quiet line under a
20
+ * composer. It keeps one line's height when it is empty, so the box above it
21
+ * never moves as people start and stop.
22
+ *
23
+ * TYPING is announced politely as it changes. WORKING is a
24
+ * `ThinkingIndicator`, which announces its label once and keeps its changing
25
+ * steps to the eye.
26
+ */
27
+ export declare function ActivityLine({ typing, working, workingLabel, className, ...rest }: ActivityLineProps): import("react").JSX.Element;
@@ -0,0 +1,4 @@
1
+ import '../ChatMessage/ChatScale.css';
2
+ import './ActivityLine.css';
3
+ export { ActivityLine } from './ActivityLine.js';
4
+ export type { ActivityLineProps } from './ActivityLine.js';
@@ -0,0 +1,4 @@
1
+ export { ActivityLine } from '../chunk-C4256UXE.js';
2
+ import '../chunk-ED4A6Q24.js';
3
+ import '../chunk-UT6CW3C7.js';
4
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,74 @@
1
+ /*
2
+ * Who is typing and which agent is working, under a composer, in the meta
3
+ * step and the tertiary ink.
4
+ */
5
+
6
+ .crewlet-activity-line {
7
+ display: flex;
8
+ flex-wrap: wrap;
9
+ align-items: center;
10
+ gap: var(--spacing-1) var(--spacing-4);
11
+ min-height: 20px;
12
+ min-width: 0;
13
+ color: var(--color-text-tertiary);
14
+ font-size: var(--crewlet-chat-meta);
15
+ }
16
+
17
+ /* No piece is wider than the line: a long working status truncates. */
18
+ .crewlet-activity-line > * {
19
+ max-width: 100%;
20
+ }
21
+
22
+ /* The working line in the line's own step, over the indicator's. */
23
+ .crewlet-activity-line .crewlet-activity-line__working {
24
+ font-size: var(--crewlet-chat-meta);
25
+ }
26
+
27
+ .crewlet-activity-line__typing {
28
+ display: inline-flex;
29
+ align-items: center;
30
+ gap: var(--spacing-2);
31
+ }
32
+
33
+ .crewlet-activity-line__dots {
34
+ display: inline-flex;
35
+ gap: 2px;
36
+ }
37
+
38
+ .crewlet-activity-line__dots > i {
39
+ width: 4px;
40
+ height: 4px;
41
+ border-radius: var(--radius-circle);
42
+ background: currentColor;
43
+ animation: crewlet-activity-line-typing calc(var(--motion-duration-slow) * 4) var(--motion-easing-in-out) infinite;
44
+ }
45
+
46
+ .crewlet-activity-line__dots > i:nth-child(2) {
47
+ animation-delay: var(--motion-duration-base);
48
+ }
49
+
50
+ .crewlet-activity-line__dots > i:nth-child(3) {
51
+ animation-delay: var(--motion-duration-slow);
52
+ }
53
+
54
+ @keyframes crewlet-activity-line-typing {
55
+ 0%,
56
+ 60%,
57
+ 100% {
58
+ opacity: 0.3;
59
+ transform: none;
60
+ }
61
+
62
+ 30% {
63
+ opacity: 1;
64
+ transform: translateY(-2px);
65
+ }
66
+ }
67
+
68
+ /* Under reduced motion the dots hold still at full strength: the words say
69
+ who is typing. */
70
+ @media (prefers-reduced-motion: reduce) {
71
+ .crewlet-activity-line__dots > i {
72
+ animation: none;
73
+ }
74
+ }
@@ -1,24 +1,24 @@
1
- export { AGENT_HANDOFF_LABELS, AgentHandoffPanel } from '../chunk-57AKYFML.js';
1
+ export { AGENT_HANDOFF_LABELS, AgentHandoffPanel } from '../chunk-DD7RBNT4.js';
2
2
  import '../chunk-4MJN2KN6.js';
3
3
  import '../chunk-WFCWPXJN.js';
4
- import '../chunk-E35HYQMK.js';
5
- import '../chunk-222VILSP.js';
6
- import '../chunk-FFGEJUAP.js';
7
- import '../chunk-CLJGFOTV.js';
8
- import '../chunk-ANTAQAR4.js';
9
- import '../chunk-FB3TCNQP.js';
10
- import '../chunk-PGCLHYVP.js';
11
- import '../chunk-IVTQWOXV.js';
12
- import '../chunk-MLDTLZAO.js';
13
- import '../chunk-PQADV6P6.js';
14
- import '../chunk-2G355KDJ.js';
4
+ import '../chunk-EBVZHVPD.js';
5
+ import '../chunk-LVJGN5II.js';
6
+ import '../chunk-5ILRWUE7.js';
7
+ import '../chunk-SKGOKLJD.js';
15
8
  import '../chunk-PIYJNCN7.js';
9
+ import '../chunk-O7N6W52M.js';
10
+ import '../chunk-PGCLHYVP.js';
11
+ import '../chunk-CMAZZY2I.js';
16
12
  import '../chunk-DGXZ635L.js';
13
+ import '../chunk-XSPCITPN.js';
17
14
  import '../chunk-OMV5W53A.js';
18
15
  import '../chunk-2YTOOH3A.js';
19
- import '../chunk-XSPCITPN.js';
20
- import '../chunk-H5XTJ7GJ.js';
16
+ import '../chunk-TUEM2XIW.js';
17
+ import '../chunk-4ITETIGZ.js';
21
18
  import '../chunk-UAUP6XGK.js';
22
- import '../chunk-NUZHC6MM.js';
19
+ import '../chunk-ULYHDP7U.js';
20
+ import '../chunk-D2GT3CR4.js';
21
+ import '../chunk-PQADV6P6.js';
22
+ import '../chunk-2G355KDJ.js';
23
23
  import '../chunk-UT6CW3C7.js';
24
24
  import '../chunk-ODEQTPFM.js';
@@ -13,6 +13,9 @@ export interface AccountRowProps {
13
13
  /**
14
14
  * The reader's badge, drawn decorative: the name beside it says who it is.
15
15
  * In a rail's foot the row is sized for a medium one (`size="md"`, 32px).
16
+ * In the compact rail the face stands among the compact places' tiles and
17
+ * takes their height, a small one (`size="sm"`, 26px), centred in the
18
+ * column as each tile is.
16
19
  */
17
20
  avatar: ReactNode;
18
21
  /** Who the reader is. */
@@ -38,6 +41,14 @@ export interface AccountRowProps {
38
41
  linkSuffix?: string | undefined;
39
42
  /** Controls at the row's end: a theme toggle, the trigger of a preferences panel. */
40
43
  actions?: ReactNode;
44
+ /**
45
+ * The reader's face alone, for the compact rail's foot: the badge is the
46
+ * link (or the menu's button), the name and the detail are its accessible
47
+ * name and its tooltip, and `actions` are not drawn (the compact rail draws
48
+ * its places, Settings among them, as tiles above it). Defaults to the
49
+ * shape of the rail the row stands in.
50
+ */
51
+ compact?: boolean | undefined;
41
52
  className?: string | undefined;
42
53
  }
43
54
  /**
@@ -61,5 +72,12 @@ export interface AccountRowProps {
61
72
  * button, ending in the up-and-down chevron a menu's trigger draws, and the
62
73
  * account is one item of it. The menu says only what the row does not, in its
63
74
  * header (their access), above the actions.
75
+ *
76
+ * IN THE COMPACT RAIL THE ROW IS THE READER'S FACE (`compact`): the same link
77
+ * or menu button, holding the badge alone, named by the name and the detail
78
+ * as the full row is, and showing them in a tooltip, since a face says who
79
+ * it is only to somebody who already knows. The face is centred in the
80
+ * column on the line the tiles above it are centred on, and at their height
81
+ * when it is handed at the small step.
64
82
  */
65
- export declare function AccountRow({ avatar, name, detail, href, menu, current, title, linkSuffix, actions, className, }: AccountRowProps): import("react").JSX.Element;
83
+ export declare function AccountRow({ avatar, name, detail, href, menu, current, title, linkSuffix, actions, compact: compactProp, className, }: AccountRowProps): import("react").JSX.Element;