@crewlethq/ui 0.81.2 → 0.82.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 (387) hide show
  1. package/README.md +61 -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 +14 -1
  13. package/dist/AppShell/AppShell.d.ts +52 -3
  14. package/dist/AppShell/index.d.ts +1 -1
  15. package/dist/AppShell/index.js +8 -5
  16. package/dist/AppShell/railShape.d.ts +17 -0
  17. package/dist/{AppShell-2IBUS4TH.css → AppShell-F7RID4P4.css} +150 -0
  18. package/dist/ArrangeFrame/index.js +2 -2
  19. package/dist/ArrangeGroup/index.js +2 -2
  20. package/dist/ArrangeList/index.js +6 -6
  21. package/dist/ArtifactBar/index.js +11 -11
  22. package/dist/ArtifactCard/index.js +13 -13
  23. package/dist/ArtifactCover/index.js +3 -3
  24. package/dist/ArtifactKindIllustration/index.js +1 -1
  25. package/dist/ArtifactKinds-3EH4KR3F.css +18 -0
  26. package/dist/ArtifactMakeRow/index.js +1 -1
  27. package/dist/ArtifactNameCell/index.js +1 -1
  28. package/dist/ArtifactPanel/index.js +5 -5
  29. package/dist/AttachmentChip/index.js +2 -2
  30. package/dist/AuthLayout/index.js +5 -4
  31. package/dist/Avatar/Avatar.d.ts +30 -28
  32. package/dist/Avatar/AvatarStack.d.ts +2 -2
  33. package/dist/Avatar/index.d.ts +1 -1
  34. package/dist/Avatar/index.js +2 -2
  35. package/dist/{Avatar-VJSJGFRG.css → Avatar-MNE3WBZO.css} +56 -54
  36. package/dist/AvatarPicker/index.js +12 -12
  37. package/dist/{AvatarStack-7I3P7LCK.css → AvatarStack-KEHD3GWY.css} +16 -4
  38. package/dist/BrandLockup/BrandLockup.d.ts +6 -0
  39. package/dist/BrandLockup/index.js +2 -1
  40. package/dist/BriefCard/BriefCard.d.ts +23 -1
  41. package/dist/BriefCard/index.d.ts +2 -2
  42. package/dist/BriefCard/index.js +7 -7
  43. package/dist/{BriefCard-VKTH3BSW.css → BriefCard-QCL7MVUV.css} +26 -0
  44. package/dist/Canvas/index.js +6 -6
  45. package/dist/CanvasBoard/index.js +9 -9
  46. package/dist/CanvasToolbar/index.js +8 -8
  47. package/dist/Card/index.js +2 -2
  48. package/dist/ChangeList/index.js +5 -5
  49. package/dist/ChangeMark/index.js +4 -4
  50. package/dist/CharacterPicker/index.js +2 -2
  51. package/dist/ChatDay/ChatDay.d.ts +53 -0
  52. package/dist/ChatDay/index.d.ts +5 -0
  53. package/dist/ChatDay/index.js +3 -0
  54. package/dist/ChatDay-E3FF5HWF.css +116 -0
  55. package/dist/ChatDivider/ChatDivider.d.ts +31 -0
  56. package/dist/ChatDivider/index.d.ts +4 -0
  57. package/dist/ChatDivider/index.js +2 -0
  58. package/dist/ChatDivider-7ZNDL2PZ.css +76 -0
  59. package/dist/ChatMessage/ChatMessage.d.ts +111 -0
  60. package/dist/ChatMessage/index.d.ts +4 -0
  61. package/dist/ChatMessage/index.js +5 -0
  62. package/dist/ChatMessage-FH7VRVCH.css +304 -0
  63. package/dist/ChatScale-L4SIHSKL.css +42 -0
  64. package/dist/ChatThread/ChatThread.d.ts +33 -4
  65. package/dist/ChatThread/index.d.ts +1 -1
  66. package/dist/ChatThread/index.js +1 -1
  67. package/dist/{ChatThread-2KO3FZKQ.css → ChatThread-HAECJMP6.css} +17 -0
  68. package/dist/CheckGrid/index.js +6 -6
  69. package/dist/Checkbox/index.js +5 -5
  70. package/dist/ChipField/ChipField.d.ts +82 -0
  71. package/dist/ChipField/index.d.ts +4 -0
  72. package/dist/ChipField/index.js +9 -0
  73. package/dist/ChipField-D4CW6XFA.css +108 -0
  74. package/dist/ColorField/index.js +5 -5
  75. package/dist/Combobox/index.js +7 -7
  76. package/dist/CommandPalette/index.js +11 -11
  77. package/dist/CommentThread/index.js +14 -14
  78. package/dist/CompactNav/CompactNav.d.ts +175 -0
  79. package/dist/CompactNav/index.d.ts +4 -0
  80. package/dist/CompactNav/index.js +8 -0
  81. package/dist/CompactNav-CU2AQXBC.css +322 -0
  82. package/dist/Composer/Composer.d.ts +26 -2
  83. package/dist/Composer/index.d.ts +2 -1
  84. package/dist/Composer/index.js +7 -7
  85. package/dist/{Composer-HQIMTMRC.css → Composer-ZEGHEAFE.css} +71 -0
  86. package/dist/ConfirmField/index.js +5 -5
  87. package/dist/ContrastBadge/index.js +2 -2
  88. package/dist/ContrastHelp/index.js +6 -6
  89. package/dist/Count/Count.d.ts +24 -6
  90. package/dist/Count/index.d.ts +1 -1
  91. package/dist/Count/index.js +1 -1
  92. package/dist/{Count-ZJ6ID4ZU.css → Count-2HXBBYPO.css} +19 -0
  93. package/dist/DataGrid/index.js +8 -8
  94. package/dist/DataTable/index.js +10 -10
  95. package/dist/DataView/index.js +17 -17
  96. package/dist/DatasetSource/index.js +3 -3
  97. package/dist/DateTimePicker/index.js +5 -5
  98. package/dist/DeepWorkCard/index.js +10 -10
  99. package/dist/Disclosure/index.js +3 -3
  100. package/dist/DocTabsEditor/index.js +8 -8
  101. package/dist/Document/index.js +2 -2
  102. package/dist/EditingStatus/index.js +2 -2
  103. package/dist/{Editor-IMYESOW7.js → Editor-7EQWP3RN.js} +9 -9
  104. package/dist/EmojiPicker/EmojiPicker.d.ts +51 -0
  105. package/dist/EmojiPicker/emoji.d.ts +24 -0
  106. package/dist/EmojiPicker/index.d.ts +5 -0
  107. package/dist/EmojiPicker/index.js +13 -0
  108. package/dist/EmojiPicker-FMWYN2WX.css +63 -0
  109. package/dist/EntityChip/index.js +3 -3
  110. package/dist/EntityList/index.js +6 -6
  111. package/dist/FactList/index.js +4 -4
  112. package/dist/FolderTile/index.js +3 -3
  113. package/dist/FollowBanner/index.js +4 -4
  114. package/dist/HuePicker/index.js +8 -8
  115. package/dist/ImageUpload/ImageUpload.d.ts +6 -7
  116. package/dist/ImageUpload/index.js +3 -3
  117. package/dist/{ImageUpload-OWI7CCG7.css → ImageUpload-IFXZROFZ.css} +6 -37
  118. package/dist/InlineEditor/index.js +7 -7
  119. package/dist/Input/index.js +4 -4
  120. package/dist/Kbd/Kbd.d.ts +9 -0
  121. package/dist/Kbd/index.d.ts +1 -1
  122. package/dist/Kbd/index.js +1 -1
  123. package/dist/Layer/index.js +2 -2
  124. package/dist/LinkCard/LinkCard.d.ts +64 -0
  125. package/dist/LinkCard/index.d.ts +5 -0
  126. package/dist/LinkCard/index.js +5 -0
  127. package/dist/LinkCard-5I4MYU6I.css +155 -0
  128. package/dist/LinkInterstitial/index.js +6 -6
  129. package/dist/ListInput/index.js +8 -8
  130. package/dist/Listbox/index.js +3 -3
  131. package/dist/LogoSlot/index.js +3 -3
  132. package/dist/MarkdownEditor/format.d.ts +9 -1
  133. package/dist/MarkdownEditor/index.d.ts +2 -2
  134. package/dist/MarkdownEditor/index.js +9 -9
  135. package/dist/MentionChip/MentionChip.d.ts +25 -0
  136. package/dist/MentionChip/index.d.ts +3 -0
  137. package/dist/MentionChip/index.js +2 -0
  138. package/dist/MentionChip-W7MZZVRZ.css +42 -0
  139. package/dist/MentionMenu/MentionMenu.d.ts +82 -0
  140. package/dist/MentionMenu/index.d.ts +4 -0
  141. package/dist/MentionMenu/index.js +3 -0
  142. package/dist/MentionMenu-4NAQ45S4.css +65 -0
  143. package/dist/Menu/index.js +4 -4
  144. package/dist/MergeConflicts/index.js +8 -8
  145. package/dist/MessageActions/MessageActions.d.ts +58 -0
  146. package/dist/MessageActions/index.d.ts +4 -0
  147. package/dist/MessageActions/index.js +16 -0
  148. package/dist/MessageActions-Q4F5UH3S.css +73 -0
  149. package/dist/Modal/Modal.d.ts +12 -0
  150. package/dist/Modal/index.js +5 -5
  151. package/dist/{Modal-FYQYEI3N.css → Modal-GKUOO7PZ.css} +26 -1
  152. package/dist/OpenInAppCard/index.js +7 -7
  153. package/dist/OrgLabel/index.js +3 -3
  154. package/dist/OrgNode/index.js +4 -4
  155. package/dist/OrgTable/index.js +7 -7
  156. package/dist/PeekRail/index.js +1 -1
  157. package/dist/PeopleRail/index.js +4 -4
  158. package/dist/PersonRow/PersonRow.d.ts +70 -0
  159. package/dist/PersonRow/index.d.ts +3 -0
  160. package/dist/PersonRow/index.js +2 -0
  161. package/dist/PersonRow-V5GTPNVP.css +161 -0
  162. package/dist/Popover/index.js +3 -3
  163. package/dist/PresenceStack/index.js +3 -3
  164. package/dist/{PresenceStack-ZV67BH4V.css → PresenceStack-2DTYRADY.css} +4 -6
  165. package/dist/PresenterView/index.js +5 -5
  166. package/dist/PricingCard/index.js +2 -2
  167. package/dist/Principal/index.js +3 -3
  168. package/dist/PrincipalPicker/index.js +11 -11
  169. package/dist/ProposalCard/index.js +15 -15
  170. package/dist/ReactionBar/ReactionBar.d.ts +84 -0
  171. package/dist/ReactionBar/index.d.ts +4 -0
  172. package/dist/ReactionBar/index.js +15 -0
  173. package/dist/ReactionBar-XXI4V7XG.css +93 -0
  174. package/dist/RecordChip/index.js +4 -4
  175. package/dist/RefusalCard/index.js +6 -6
  176. package/dist/RelatedRow/index.js +3 -3
  177. package/dist/ResultTableCard/index.js +7 -7
  178. package/dist/ReviewList/index.js +2 -2
  179. package/dist/RichEditor/index.js +2 -2
  180. package/dist/RunChip/index.js +5 -5
  181. package/dist/SandboxedFrame/index.js +2 -2
  182. package/dist/SectionFrame/index.js +2 -2
  183. package/dist/SegmentedControl/index.js +7 -7
  184. package/dist/Select/index.js +4 -4
  185. package/dist/SelectionBar/index.js +6 -6
  186. package/dist/SetupWizard/index.js +6 -6
  187. package/dist/ShareDialog/index.js +11 -11
  188. package/dist/SheetColumnEditor/index.js +16 -16
  189. package/dist/SheetGrid/index.js +12 -12
  190. package/dist/Shortcut/index.js +3 -3
  191. package/dist/SidePanel/SidePanel.d.ts +8 -1
  192. package/dist/SidePanel/SidePanelBase.d.ts +3 -1
  193. package/dist/SidePanel/index.js +5 -5
  194. package/dist/{SidePanel-VXKUKLOJ.css → SidePanel-BKWT6Q6Z.css} +36 -0
  195. package/dist/SidebarNav/SidebarNav.d.ts +52 -3
  196. package/dist/SidebarNav/index.js +1 -1
  197. package/dist/{SidebarNav-VTQ3G4AE.css → SidebarNav-E7PZGGA6.css} +132 -7
  198. package/dist/Skeleton/index.js +1 -1
  199. package/dist/{Skeleton-7ZA5ETJM.css → Skeleton-GIXV3KK5.css} +3 -1
  200. package/dist/SlideCompare/index.js +5 -5
  201. package/dist/SlideFilmstrip/index.js +8 -8
  202. package/dist/SlideGrid/index.js +4 -4
  203. package/dist/SlideStage/index.js +3 -3
  204. package/dist/SourceEditor/index.js +2 -2
  205. package/dist/StatusCard/index.js +5 -5
  206. package/dist/Switcher/index.js +12 -12
  207. package/dist/TableCells/index.js +5 -5
  208. package/dist/Tabs/index.js +6 -6
  209. package/dist/Tag/Tag.d.ts +9 -2
  210. package/dist/Tag/index.js +1 -1
  211. package/dist/{Tag-JTJVZM2D.css → Tag-WLDOROB5.css} +24 -0
  212. package/dist/TagsInput/index.js +6 -6
  213. package/dist/ThemeGallery/index.js +5 -5
  214. package/dist/ThemeSwitcher/index.js +8 -8
  215. package/dist/ThinkingIndicator/index.js +1 -1
  216. package/dist/{ThinkingIndicator-JMK2TNMZ.css → ThinkingIndicator-S7ZL2C77.css} +8 -0
  217. package/dist/ThreadSummary/ThreadSummary.d.ts +43 -0
  218. package/dist/ThreadSummary/index.d.ts +4 -0
  219. package/dist/ThreadSummary/index.js +6 -0
  220. package/dist/ThreadSummary-AGR4NDMD.css +90 -0
  221. package/dist/TimeRangePicker/index.js +12 -12
  222. package/dist/TimeWindowPicker/index.js +10 -10
  223. package/dist/Toaster/index.js +2 -2
  224. package/dist/Toolbar/index.js +3 -3
  225. package/dist/Tooltip/Tooltip.d.ts +30 -3
  226. package/dist/Tooltip/index.js +3 -3
  227. package/dist/TreeCanvas/index.js +7 -7
  228. package/dist/TreeGrid/index.js +3 -3
  229. package/dist/ValueField/index.js +9 -9
  230. package/dist/VersionCompare/index.js +9 -9
  231. package/dist/VersionTimeline/index.js +4 -4
  232. package/dist/WidgetFrame/index.js +2 -2
  233. package/dist/{chunk-WCDPFTJZ.js → chunk-25JQNHTC.js} +92 -28
  234. package/dist/{chunk-ZKLEAK7M.js → chunk-2H6YDUR5.js} +7 -7
  235. package/dist/{chunk-7FF6CZW5.js → chunk-2KJCUCVE.js} +36 -8
  236. package/dist/{chunk-6LXS3X7A.js → chunk-2L4WHYMT.js} +1 -1
  237. package/dist/{chunk-6G6WHTC7.js → chunk-2O5CMV76.js} +1 -1
  238. package/dist/chunk-2TOGGCDM.js +50 -0
  239. package/dist/{chunk-7PJFUQMY.js → chunk-2ZSCHQOA.js} +1 -1
  240. package/dist/chunk-3BRXEMYT.js +46 -0
  241. package/dist/{chunk-H22SR76M.js → chunk-3H6OZUZ3.js} +1 -1
  242. package/dist/{chunk-VK45YJLH.js → chunk-3IWZVEXA.js} +2 -2
  243. package/dist/{chunk-I33UIUZD.js → chunk-3QQIGMY3.js} +49 -14
  244. package/dist/{chunk-NUZHC6MM.js → chunk-4ITETIGZ.js} +12 -1
  245. package/dist/{chunk-FQI62PIZ.js → chunk-4RYELYWG.js} +2 -2
  246. package/dist/{chunk-LCZULGMB.js → chunk-57BFL323.js} +2 -2
  247. package/dist/{chunk-73GUXYYE.js → chunk-5AHNW5CP.js} +1 -1
  248. package/dist/{chunk-FFGEJUAP.js → chunk-5ILRWUE7.js} +2 -2
  249. package/dist/{chunk-S5QJZOPL.js → chunk-5K5SZGBI.js} +1 -1
  250. package/dist/{chunk-LM6VYJTV.js → chunk-5YXMKZUA.js} +1 -1
  251. package/dist/{chunk-5XBNJNSO.js → chunk-65RFU7LF.js} +1 -1
  252. package/dist/{chunk-WKKWF277.js → chunk-6IOQWMYJ.js} +2 -2
  253. package/dist/{chunk-7MGXHCVK.js → chunk-6M2N6ETA.js} +1 -1
  254. package/dist/{chunk-OWHETZIU.js → chunk-6SFDL4QH.js} +1 -1
  255. package/dist/{chunk-JD7P2GJP.js → chunk-6YBBQAEM.js} +1 -1
  256. package/dist/{chunk-WK4FQPYW.js → chunk-77VOASOY.js} +5 -5
  257. package/dist/{chunk-UYF2B2TH.js → chunk-7ELFH3RJ.js} +1 -1
  258. package/dist/{chunk-CYYBE2MM.js → chunk-7U6PK242.js} +1 -1
  259. package/dist/{chunk-VG3SIJ3M.js → chunk-AFLS26AC.js} +2 -2
  260. package/dist/{chunk-JQEXAH7G.js → chunk-AMUXSJ2A.js} +2 -2
  261. package/dist/{chunk-4XF7ENQA.js → chunk-AOJ6ZA77.js} +2 -2
  262. package/dist/{chunk-TJIBTHWJ.js → chunk-B3X4DHRB.js} +2 -2
  263. package/dist/{chunk-BFM5G2Z6.js → chunk-BSAU7QRW.js} +1 -1
  264. package/dist/chunk-C4256UXE.js +21 -0
  265. package/dist/{chunk-4MRFLHJC.js → chunk-C46DDVTK.js} +1 -1
  266. package/dist/{chunk-5EFLA6BW.js → chunk-C75WZMXG.js} +2 -2
  267. package/dist/{chunk-YB64PWIN.js → chunk-C7UHDM7Y.js} +1 -1
  268. package/dist/{chunk-5BOFC5OP.js → chunk-CF4M6N6A.js} +20 -4
  269. package/dist/{chunk-ANTAQAR4.js → chunk-CMAZZY2I.js} +7 -1
  270. package/dist/{chunk-MLDTLZAO.js → chunk-D2GT3CR4.js} +3 -3
  271. package/dist/{chunk-57AKYFML.js → chunk-DD7RBNT4.js} +3 -3
  272. package/dist/{chunk-MUFBHVCT.js → chunk-DWQYV5AV.js} +2 -2
  273. package/dist/{chunk-CNEHFH2A.js → chunk-EAHEJNVJ.js} +1 -1
  274. package/dist/chunk-EALRMP7N.js +69 -0
  275. package/dist/{chunk-E35HYQMK.js → chunk-EBVZHVPD.js} +12 -5
  276. package/dist/{chunk-XNNY27SC.js → chunk-ED4A6Q24.js} +1 -1
  277. package/dist/{chunk-6LN64KGG.js → chunk-F7HZYTZT.js} +6 -3
  278. package/dist/{chunk-YQDRJZ5J.js → chunk-FKAJBN6G.js} +8 -8
  279. package/dist/{chunk-RTMNULTL.js → chunk-FLW5U7YS.js} +2 -2
  280. package/dist/{chunk-JMTBK55P.js → chunk-FVZPSTL2.js} +1 -1
  281. package/dist/{chunk-GHQG4VZA.js → chunk-G3CACE5L.js} +3 -3
  282. package/dist/{chunk-SNIPM6K7.js → chunk-G6ZFSUIH.js} +3 -3
  283. package/dist/chunk-GP5TNTZH.js +386 -0
  284. package/dist/{chunk-7KBNFFM3.js → chunk-GVPUCEWH.js} +6 -3
  285. package/dist/{chunk-6R334YT3.js → chunk-GZVAZ3LL.js} +2 -2
  286. package/dist/{chunk-KL6A7JGH.js → chunk-HA2PL7PA.js} +2 -2
  287. package/dist/{chunk-2IIHMJMZ.js → chunk-HCUECVZ3.js} +2 -2
  288. package/dist/{chunk-N2BF272H.js → chunk-HF5L56YQ.js} +1 -1
  289. package/dist/{chunk-Q2T4L6ML.js → chunk-HFOTRZFU.js} +4 -4
  290. package/dist/{chunk-2STOSJT3.js → chunk-HQFOZJQ4.js} +7 -7
  291. package/dist/chunk-HTBTAIH6.js +37 -0
  292. package/dist/{chunk-BRLZXYPA.js → chunk-I4IUX3JF.js} +1 -1
  293. package/dist/{chunk-BXCL6P5Z.js → chunk-I4PBFJGX.js} +1 -1
  294. package/dist/{chunk-ADGNISEI.js → chunk-IAP7APOX.js} +5 -5
  295. package/dist/{chunk-BT3GB7HC.js → chunk-IRONPJB4.js} +3 -3
  296. package/dist/chunk-ISQANI6Q.js +9 -0
  297. package/dist/chunk-IUBOLGHG.js +140 -0
  298. package/dist/{chunk-O222F2IX.js → chunk-IUWP2LSE.js} +6 -6
  299. package/dist/{chunk-3JXX5S3Z.js → chunk-IYI6HWKN.js} +3 -3
  300. package/dist/{chunk-R5OATXWU.js → chunk-JHQGNFN3.js} +36 -13
  301. package/dist/{chunk-CSXJIIO4.js → chunk-JV6JM6W6.js} +1 -1
  302. package/dist/{chunk-ZQEJSEPS.js → chunk-K6Y6CDEZ.js} +2 -2
  303. package/dist/chunk-K774LUN3.js +20 -0
  304. package/dist/{chunk-LOWQK2PB.js → chunk-KJR5X4II.js} +4 -4
  305. package/dist/{chunk-45M73G5A.js → chunk-KLAVEJIO.js} +4 -4
  306. package/dist/{chunk-53J2YNQA.js → chunk-L5VU3LZT.js} +1 -1
  307. package/dist/{chunk-VERJCAJ4.js → chunk-LBGKLYBY.js} +1 -1
  308. package/dist/{chunk-PRN5IP2R.js → chunk-LMEMH6DO.js} +1 -1
  309. package/dist/{chunk-I22MUEG7.js → chunk-LNQSNXGJ.js} +1 -1
  310. package/dist/chunk-LQRN2XZK.js +87 -0
  311. package/dist/{chunk-HEA6TERQ.js → chunk-LSOR77RZ.js} +1 -1
  312. package/dist/{chunk-222VILSP.js → chunk-LVJGN5II.js} +1 -1
  313. package/dist/{chunk-AYHIF6DH.js → chunk-LZNPL266.js} +1 -1
  314. package/dist/{chunk-R45VM5EX.js → chunk-MMV7NEAC.js} +1 -1
  315. package/dist/chunk-MPYRC3GO.js +244 -0
  316. package/dist/{chunk-37U3Z65B.js → chunk-MVMVMHYI.js} +1 -1
  317. package/dist/{chunk-6X5PGHEX.js → chunk-N2T7Y5KR.js} +2 -2
  318. package/dist/{chunk-NKBKQEKS.js → chunk-NFXCJGHG.js} +1 -1
  319. package/dist/{chunk-OZAZHM55.js → chunk-NKBKHOMU.js} +1 -1
  320. package/dist/{chunk-MGQKF7GK.js → chunk-NN475NAP.js} +1 -1
  321. package/dist/{chunk-6EWNMSS4.js → chunk-NNZRTR5M.js} +2 -2
  322. package/dist/{chunk-JT7WRPZ6.js → chunk-NTRKC2JV.js} +1 -1
  323. package/dist/{chunk-63GBSOLU.js → chunk-NXBCAXP5.js} +2 -2
  324. package/dist/{chunk-NR4CPM4T.js → chunk-NXFTCPF6.js} +1 -1
  325. package/dist/chunk-O3MYBNRO.js +80 -0
  326. package/dist/{chunk-RMEBFYL7.js → chunk-O6EV6GKI.js} +1 -1
  327. package/dist/{chunk-YL7AR6PR.js → chunk-O7KG4CXB.js} +3 -3
  328. package/dist/{chunk-FB3TCNQP.js → chunk-O7N6W52M.js} +3 -3
  329. package/dist/{chunk-2FMBZCFR.js → chunk-OAHRMR4U.js} +1 -1
  330. package/dist/chunk-ONHYFU7D.js +25 -0
  331. package/dist/{chunk-Z2MZTI3H.js → chunk-ONNXUS5Y.js} +1 -1
  332. package/dist/{chunk-T24HBEU6.js → chunk-OOOVL77Y.js} +1 -1
  333. package/dist/{chunk-CZQ7UITX.js → chunk-P6F3PE4V.js} +3 -3
  334. package/dist/{chunk-BLGBD2D2.js → chunk-P7HMY3BQ.js} +4 -4
  335. package/dist/{chunk-TPIMOGOZ.js → chunk-PEBQMX5X.js} +1 -1
  336. package/dist/{chunk-4TMBAOXK.js → chunk-PW57R4BN.js} +1 -1
  337. package/dist/chunk-PX5BOALQ.js +13 -0
  338. package/dist/{chunk-HQOEAUDJ.js → chunk-PXLS6JKL.js} +2 -2
  339. package/dist/{chunk-CFTBESST.js → chunk-Q6TCUSQA.js} +2 -2
  340. package/dist/{chunk-ZWXHTXZO.js → chunk-QGEDXYLB.js} +2 -2
  341. package/dist/{chunk-WTXCK46H.js → chunk-R2QBQ6NO.js} +1 -1
  342. package/dist/{chunk-OBPINJNO.js → chunk-SEKO6P3Y.js} +3 -3
  343. package/dist/{chunk-CLJGFOTV.js → chunk-SKGOKLJD.js} +31 -18
  344. package/dist/{chunk-KHJIEPZV.js → chunk-SM4P2SHB.js} +2 -2
  345. package/dist/{chunk-B2YSFWUG.js → chunk-SYVQXMLO.js} +9 -9
  346. package/dist/{chunk-UY3FWQWG.js → chunk-T4IEESXN.js} +128 -12
  347. package/dist/{chunk-TPCBPGSB.js → chunk-T7WESRZF.js} +3 -3
  348. package/dist/chunk-TDFLCUBE.js +6 -0
  349. package/dist/{chunk-Z6JKZI4E.js → chunk-TGCGLKD4.js} +1 -1
  350. package/dist/chunk-TRXTO3WC.js +114 -0
  351. package/dist/{chunk-H5XTJ7GJ.js → chunk-TUEM2XIW.js} +1 -1
  352. package/dist/{chunk-4AUTALJA.js → chunk-U2IQNDDR.js} +1 -1
  353. package/dist/{chunk-IVTQWOXV.js → chunk-ULYHDP7U.js} +1 -1
  354. package/dist/{chunk-DGSK4LLS.js → chunk-V6WDJUYK.js} +1 -1
  355. package/dist/{chunk-5CEQ3HLH.js → chunk-VGOWSOUA.js} +6 -6
  356. package/dist/{chunk-TKUAGWNR.js → chunk-WT3B76MG.js} +1 -1
  357. package/dist/{chunk-D7G2QGET.js → chunk-X3US25XJ.js} +1 -1
  358. package/dist/{chunk-GPFYITOF.js → chunk-X7VZQKIW.js} +1 -1
  359. package/dist/{chunk-L4HHWG4V.js → chunk-XA2QKGBJ.js} +3 -3
  360. package/dist/{chunk-HPI5J6AR.js → chunk-XGLMPPDW.js} +2 -2
  361. package/dist/{chunk-DV5L2GRY.js → chunk-XJMES7AE.js} +1 -1
  362. package/dist/{chunk-5NJMSYDZ.js → chunk-XNC3M4IN.js} +1 -1
  363. package/dist/{chunk-C667GCU7.js → chunk-XXDB6KPV.js} +6 -3
  364. package/dist/{chunk-EAIOXW2W.js → chunk-XY4O2XMR.js} +8 -14
  365. package/dist/{chunk-KTIQSSME.js → chunk-XZY6S3UC.js} +6 -3
  366. package/dist/{chunk-7KHM2FZH.js → chunk-YGRTX67J.js} +1 -1
  367. package/dist/{chunk-RIAPCEB5.js → chunk-YM77TZ7Q.js} +5 -5
  368. package/dist/{chunk-OQG4P5KU.js → chunk-YOJAGKTS.js} +2 -2
  369. package/dist/chunk-YP2FS6SH.js +54 -0
  370. package/dist/{chunk-LMQG3VPG.js → chunk-YQ7Q52XU.js} +1 -1
  371. package/dist/{chunk-G4CGDUCP.js → chunk-YRNNUCQP.js} +1 -1
  372. package/dist/{chunk-NHLNHH4J.js → chunk-ZB3E2Z4Y.js} +1 -1
  373. package/dist/{chunk-IL3XLDW7.js → chunk-ZDWAIVWL.js} +1 -1
  374. package/dist/{chunk-2PIH6JHJ.js → chunk-ZXTDWTXS.js} +1 -1
  375. package/dist/generated/index.d.ts +15 -0
  376. package/dist/generated/index.js +184 -167
  377. package/dist/index.js +184 -167
  378. package/dist/styles.css +2564 -136
  379. package/dist/utils/focusModality.d.ts +14 -0
  380. package/dist/utils/heldHint.d.ts +6 -0
  381. package/dist/utils/index.d.ts +1 -1
  382. package/dist/utils/index.js +1 -1
  383. package/package.json +3 -3
  384. package/dist/ArtifactKinds-O3CALPVX.css +0 -16
  385. package/dist/{chunk-PLNJEDGI.js → chunk-I4IO56EY.js} +1 -1
  386. package/dist/{chunk-CDFQ7MQK.js → chunk-KLWWNV25.js} +0 -0
  387. package/dist/{chunk-624X3RVA.js → chunk-O55JQ7BE.js} +1 -1
@@ -0,0 +1,175 @@
1
+ /**
2
+ * The rail folded to its marks: each destination is its glyph over its name,
3
+ * in one column, and a whole group can fold into one tile whose flyout lists
4
+ * its places beside the rail.
5
+ *
6
+ * IT IS THE SAME LIST AS `SidebarNav`, DRAWN NARROW. Every prop a place takes
7
+ * here has the type `SidebarNav.Item` gives it (`NavFigure` for a badge and a
8
+ * count, `NavLinkProps` for a router's link, a reason string for a lock), so
9
+ * an application keeps ONE list of its places and hands each to whichever of
10
+ * the two the shell is drawing (`useAppShell().rail`). Two lists would be two
11
+ * answers to "where can I go from here", and the first place added to one of
12
+ * them is the place the other forgets.
13
+ *
14
+ * THE HIGHLIGHT IS ON THE GLYPH'S TILE, not the whole entry: the name under it
15
+ * stays quiet, and the current place reads at a glance down a column of
16
+ * shapes. It is the full rail's own selected row (raised, a hairline, no hue),
17
+ * drawn on the tile and from `aria-current`, so the two shapes say "you are
18
+ * here" the same way.
19
+ *
20
+ * A FIGURE RIDES THE TILE'S CORNER, and is READ as part of the name ("Inbox,
21
+ * 5 unread"), exactly as a full row's figure is, so nothing a reader needs is
22
+ * hidden by the fold: a folded group's tile carries its places' badges added
23
+ * up, and says each of them.
24
+ */
25
+ import { type MouseEventHandler, type ReactNode } from 'react';
26
+ import { type PlacementRect } from '../Layer/index.js';
27
+ import type { NavFigure, NavLinkProps } from '../SidebarNav/index.js';
28
+ export interface CompactNavProps {
29
+ /** Names the navigation region, as `SidebarNav`'s label does. */
30
+ label: string;
31
+ className?: string | undefined;
32
+ children?: ReactNode;
33
+ }
34
+ /** The column of tiles: a navigation landmark holding one list. */
35
+ export declare function CompactNav({ label, className, children }: CompactNavProps): import("react").JSX.Element;
36
+ /** What a place in the compact rail takes, whether it is a tile or a link in a flyout. */
37
+ interface CompactPlace {
38
+ /** The place's name. Drawn under the glyph on a tile, beside it in a flyout. */
39
+ label: string;
40
+ /** The place's glyph (a nav glyph, `size="sm"`). Decoration: the label is the name. */
41
+ icon: ReactNode;
42
+ /** Where it goes. Without it (and without `renderLink`) the tile is a button. */
43
+ href?: string | undefined;
44
+ /** Whether this is the screen the reader is on. */
45
+ current?: boolean | undefined;
46
+ /**
47
+ * How many things here are waiting on the reader: the accent figure on the
48
+ * tile's corner, as `SidebarNav.Item`'s badge.
49
+ */
50
+ badge?: NavFigure | undefined;
51
+ /** How many of something the place holds: the quiet figure, as `SidebarNav.Item`'s count. */
52
+ count?: NavFigure | undefined;
53
+ /**
54
+ * Closed to this reader, and why ("Needs Admin access"). The place stays a
55
+ * link, its name carries the key, and the reason is its title and is read
56
+ * after its name, as `SidebarNav.Item`'s `locked`.
57
+ */
58
+ locked?: string | undefined;
59
+ /** Called when the pointer reaches the place and when it takes focus, as `SidebarNav.Item`'s. */
60
+ onPrefetch?: (() => void) | undefined;
61
+ }
62
+ export interface CompactNavItemProps extends CompactPlace {
63
+ /**
64
+ * The pointer's title. Defaults to the name with its figure and its lock,
65
+ * because the name under a tile is the rail's narrowest line and ends in an
66
+ * ellipsis where it is long: the title is where it is read whole.
67
+ */
68
+ title?: string | undefined;
69
+ /** The tile's shortcut, in the syntax `aria-keyshortcuts` takes: the Search tile's `Meta+K Control+K`. */
70
+ keyshortcuts?: string | undefined;
71
+ onClick?: MouseEventHandler<HTMLElement> | undefined;
72
+ /** Draws the link element, for a router that owns navigation, as `SidebarNav.Item`'s. */
73
+ renderLink?: ((props: NavLinkProps) => ReactNode) | undefined;
74
+ className?: string | undefined;
75
+ }
76
+ /**
77
+ * One destination: its glyph on a tile, its name under it.
78
+ *
79
+ * A LINK WHERE IT GOES SOMEWHERE AND A BUTTON WHERE IT DOES SOMETHING. A place
80
+ * with an `href` is an anchor (a modified press opens a tab, as a full row
81
+ * does); one without is a button, which is what the compact rail's Search tile
82
+ * is, since it opens the palette rather than going anywhere.
83
+ */
84
+ export declare function CompactNavItem({ label, icon, href, current, badge, count, locked, onPrefetch, title, keyshortcuts, onClick, renderLink, className, }: CompactNavItemProps): import("react").JSX.Element;
85
+ export interface CompactNavSeparatorProps {
86
+ /**
87
+ * What the runs either side of it are, said rather than drawn: "Company and
88
+ * Workspace". A separator with no name parts the column for the eye alone.
89
+ */
90
+ label?: string | undefined;
91
+ }
92
+ /**
93
+ * A short rule between two runs of tiles: the full rail's group headings,
94
+ * which a 76px column has no room to print.
95
+ *
96
+ * A SEPARATOR INSIDE AN ENTRY of the list, so the list holds only entries (a
97
+ * list item in another role breaks the list for assistive technology) and the
98
+ * rule is named where it has a name.
99
+ */
100
+ export declare function CompactNavSeparator({ label }: CompactNavSeparatorProps): import("react").JSX.Element;
101
+ /** A place in a folded group's flyout. */
102
+ export interface CompactNavLink extends CompactPlace {
103
+ /** Unique within the group. */
104
+ key: string;
105
+ onClick?: MouseEventHandler<HTMLElement> | undefined;
106
+ }
107
+ export interface CompactNavGroupProps {
108
+ /** The group's name: "Company". Drawn under the tile and at the head of its flyout. */
109
+ label: string;
110
+ /** The group's glyph, for its tile. */
111
+ icon: ReactNode;
112
+ /** The group's places, in the order the full rail lists them. */
113
+ links: readonly CompactNavLink[];
114
+ /** Draws each link's element, for a router that owns navigation. */
115
+ renderLink?: ((props: NavLinkProps) => ReactNode) | undefined;
116
+ className?: string | undefined;
117
+ }
118
+ /**
119
+ * What a folded group's tile carries: its places' badges, ADDED UP, so the
120
+ * fold never hides what is waiting on the reader. One badge is drawn as it
121
+ * is; several are summed, keeping a `+` where any of them stopped counting
122
+ * ("50+" and 3 are "53+"); a value that is not a count is drawn as the first
123
+ * badge's own value with a `+`, since there is more than it says.
124
+ *
125
+ * The quiet counts are not carried: a count says how much a place holds, and
126
+ * a sum of how much six places hold is a figure about nothing.
127
+ */
128
+ export declare function groupBadge(links: readonly Pick<CompactNavLink, 'badge'>[]): (number | string) | undefined;
129
+ /**
130
+ * Where a flyout stands: BESIDE the rail, not beside the tile, so every
131
+ * group's flyout opens on one line a gap off the rail's edge, with its head
132
+ * level with the tile it opened from and slid back inside the bounds where
133
+ * the tile is near the window's foot.
134
+ *
135
+ * Pure arithmetic, in whichever coordinate space the caller uses for all
136
+ * three, for the reason `placePopup` is: none of it can be observed in jsdom.
137
+ */
138
+ export declare function placeFlyout(tile: PlacementRect, railEnd: number, size: {
139
+ width: number;
140
+ height: number;
141
+ }, bounds: PlacementRect,
142
+ /** How far above the tile's top the flyout's top stands: its own edge and inset, so its head is level with the tile. */
143
+ lift?: number): {
144
+ left: number;
145
+ top: number;
146
+ };
147
+ /**
148
+ * A group folded into one tile, and its flyout.
149
+ *
150
+ * THE FLYOUT IS A MENU OF LINKS BESIDE THE RAIL. Pointing at the tile opens it
151
+ * after a moment; a press, Enter, Space or Right opens it too, and the keys
152
+ * put focus on its first place. In the flyout Up and Down move (wrapping),
153
+ * Home and End jump, Escape or Left close it and hand focus back to the tile,
154
+ * and Tab closes it and moves on FROM THE TILE, as if the flyout sat right
155
+ * after it: the flyout is drawn in the layer host at the end of the document,
156
+ * so the browser's own Tab from inside it would have left the rail for
157
+ * whatever came next in the document.
158
+ *
159
+ * EVERY PLACE IS A REAL LINK, so a modified press opens a tab as it does in
160
+ * the full rail; choosing one closes the flyout and, where the keyboard chose
161
+ * it, hands focus back to the tile.
162
+ *
163
+ * WHAT OPENED IT DECIDES WHAT CLOSES IT. Opened by the pointer resting on the
164
+ * tile, it closes when the pointer leaves both; opened by a press or the keys,
165
+ * it stays until it is dismissed, so a reader who clicked does not lose it by
166
+ * moving the pointer toward it the long way round. It is on the shared layer
167
+ * stack, so a press outside closes it and Escape closes it before anything
168
+ * beneath it.
169
+ *
170
+ * THE TILE SAYS WHERE THE READER IS: it is current (`aria-current="true"`,
171
+ * since the tile is not itself the page) while one of its places is, so the
172
+ * fold never hides which part of the product the reader is in.
173
+ */
174
+ export declare function CompactNavGroup({ label, icon, links, renderLink, className }: CompactNavGroupProps): import("react").JSX.Element;
175
+ export {};
@@ -0,0 +1,4 @@
1
+ import '../HitArea/HitArea.css';
2
+ import './CompactNav.css';
3
+ export { CompactNav, CompactNavGroup, CompactNavItem, CompactNavSeparator, groupBadge, placeFlyout } from './CompactNav.js';
4
+ export type { CompactNavGroupProps, CompactNavItemProps, CompactNavLink, CompactNavProps, CompactNavSeparatorProps, } from './CompactNav.js';
@@ -0,0 +1,8 @@
1
+ export { CompactNav, CompactNavGroup, CompactNavItem, CompactNavSeparator, groupBadge, placeFlyout } from '../chunk-GP5TNTZH.js';
2
+ import '../chunk-TEV5REGB.js';
3
+ import '../chunk-OMV5W53A.js';
4
+ import '../chunk-2YTOOH3A.js';
5
+ import '../chunk-TUEM2XIW.js';
6
+ import '../chunk-4ITETIGZ.js';
7
+ import '../chunk-UT6CW3C7.js';
8
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,322 @@
1
+ /*
2
+ * The compact rail: each place its glyph's tile over its name, in one column.
3
+ *
4
+ * A PLACE IS 48PX TALL: a 26px tile, its name under it and a breath. Fourteen
5
+ * places, two rules, and the rail's head and foot stand in a 900px window, so
6
+ * the column a reader folded the rail to see more of the page never scrolls
7
+ * on a laptop.
8
+ *
9
+ * Tokens only. The tile's sizes are component variables, so a surface that
10
+ * draws the compact rail at another width changes them in one place.
11
+ */
12
+
13
+ .crewlet-compact-nav {
14
+ --crewlet-compact-nav-tile-width: 36px;
15
+ --crewlet-compact-nav-tile-height: var(--size-control-sm);
16
+ --crewlet-compact-nav-glyph: 17px;
17
+ width: 100%;
18
+ min-width: 0;
19
+ }
20
+
21
+ .crewlet-compact-nav__list {
22
+ display: flex;
23
+ flex-direction: column;
24
+ align-items: stretch;
25
+ margin: 0;
26
+ padding: 0 var(--spacing-1);
27
+ list-style: none;
28
+ }
29
+
30
+ .crewlet-compact-nav__entry {
31
+ display: flex;
32
+ min-width: 0;
33
+ }
34
+
35
+ /* A place is a link or a button, and a folded group is a button: one look for
36
+ all three. The entry itself draws nothing; the tile is what lifts. */
37
+ .crewlet-compact-nav__item {
38
+ display: flex;
39
+ flex-direction: column;
40
+ align-items: center;
41
+ gap: calc(var(--spacing-1) / 2);
42
+ width: 100%;
43
+ min-width: 0;
44
+ margin: 0;
45
+ padding: calc(var(--spacing-1) - 1px) 0 var(--spacing-1);
46
+ border: 0;
47
+ border-radius: var(--radius-md);
48
+ background: transparent;
49
+ color: var(--color-text-secondary);
50
+ font: inherit;
51
+ text-decoration: none;
52
+ cursor: pointer;
53
+ }
54
+
55
+ /* The ring is drawn on the tile (below), not round the whole entry. The
56
+ entry's own outline is transparent rather than none, so forced colours,
57
+ which paint a transparent outline in the system's ink, still draw one. */
58
+ .crewlet-compact-nav__item:focus {
59
+ outline: 2px solid transparent;
60
+ }
61
+
62
+ .crewlet-compact-nav__tile {
63
+ position: relative;
64
+ display: inline-flex;
65
+ align-items: center;
66
+ justify-content: center;
67
+ flex: none;
68
+ width: var(--crewlet-compact-nav-tile-width);
69
+ height: var(--crewlet-compact-nav-tile-height);
70
+ border-radius: var(--radius-md);
71
+ transition:
72
+ background var(--motion-duration-fast) var(--motion-easing-default),
73
+ color var(--motion-duration-fast) var(--motion-easing-default);
74
+ }
75
+
76
+ /* A step larger than the full rail's 14px glyph: in the compact rail the
77
+ glyph is the place's name at a glance, and the word under it is the
78
+ caption. */
79
+ .crewlet-compact-nav__tile > .crewlet-glyph {
80
+ width: var(--crewlet-compact-nav-glyph);
81
+ height: var(--crewlet-compact-nav-glyph);
82
+ }
83
+
84
+ .crewlet-compact-nav__item:hover .crewlet-compact-nav__tile,
85
+ .crewlet-compact-nav__item[data-open] .crewlet-compact-nav__tile {
86
+ background: var(--color-surface-hover);
87
+ color: var(--color-text-primary);
88
+ }
89
+
90
+ .crewlet-compact-nav__item:hover .crewlet-compact-nav__label,
91
+ .crewlet-compact-nav__item[data-open] .crewlet-compact-nav__label {
92
+ color: var(--color-text-primary);
93
+ }
94
+
95
+ /*
96
+ * WHERE THE READER IS: the full rail's own current row, drawn on the tile.
97
+ * Raised, the plain hairline as an OUTLINE (forced colours keep outlines and
98
+ * drop backgrounds), and the primary ink. After :hover, so the current tile
99
+ * shows its lift rather than the overlay. A folded group's tile is current
100
+ * (`aria-current="true"`) while one of its places is.
101
+ */
102
+ .crewlet-compact-nav__item[aria-current] .crewlet-compact-nav__tile {
103
+ background: var(--color-surface-elevated);
104
+ outline: 1px solid var(--color-border-default);
105
+ outline-offset: -1px;
106
+ color: var(--color-text-primary);
107
+ }
108
+
109
+ .crewlet-compact-nav__item[aria-current] .crewlet-compact-nav__label {
110
+ color: var(--color-text-primary);
111
+ font-weight: var(--font-weight-semibold);
112
+ }
113
+
114
+ /* The ring is the tile's, after the current rule that draws its hairline on
115
+ the same property, so a focused current tile draws the ring. */
116
+ .crewlet-compact-nav__item:focus-visible .crewlet-compact-nav__tile {
117
+ outline: 2px solid var(--color-focus);
118
+ outline-offset: 0;
119
+ }
120
+
121
+ .crewlet-compact-nav__label {
122
+ max-width: 100%;
123
+ box-sizing: border-box;
124
+ padding: 0 calc(var(--spacing-1) / 2);
125
+ overflow: hidden;
126
+ color: var(--color-text-secondary);
127
+ font-family: var(--font-family-sans);
128
+ font-size: var(--font-size-2xs);
129
+ font-weight: var(--font-weight-medium);
130
+ line-height: var(--font-line-height-tight);
131
+ text-align: center;
132
+ text-overflow: ellipsis;
133
+ white-space: nowrap;
134
+ }
135
+
136
+ /* A place the reader holds no access to keeps its name and its key, in the
137
+ quiet ink, as a locked group's rows do in the full rail. */
138
+ .crewlet-compact-nav__item--locked:not([aria-current]):not(:hover) .crewlet-compact-nav__label,
139
+ .crewlet-compact-nav__item--locked:not([aria-current]):not(:hover) .crewlet-compact-nav__tile {
140
+ color: var(--color-text-tertiary);
141
+ }
142
+
143
+ /*
144
+ * THE FIGURE RIDES THE TILE'S TOP END CORNER, cut out of the rail by a ring of
145
+ * the rail's own ground, so it reads apart from the glyph under it. It is the
146
+ * one count badge size the whole chrome draws (`--size-badge`), the accent
147
+ * fill where it is waiting on the reader and the raised ground where it is
148
+ * only a tally.
149
+ */
150
+ .crewlet-compact-nav__figure {
151
+ position: absolute;
152
+ top: calc(var(--spacing-1) * -1 - 1px);
153
+ right: calc(var(--spacing-2) * -1 + 1px);
154
+ display: inline-flex;
155
+ align-items: center;
156
+ justify-content: center;
157
+ min-width: var(--size-badge);
158
+ height: var(--size-badge);
159
+ box-sizing: border-box;
160
+ padding: 0 var(--size-badge-pad);
161
+ border: 2px solid var(--color-surface-frame);
162
+ border-radius: var(--radius-pill);
163
+ background: var(--color-surface-elevated);
164
+ color: var(--color-text-secondary);
165
+ font-family: var(--font-family-sans);
166
+ font-size: var(--font-size-badge);
167
+ font-weight: var(--font-weight-semibold);
168
+ font-variant-numeric: tabular-nums;
169
+ line-height: 1;
170
+ }
171
+
172
+ .crewlet-compact-nav__figure--badge {
173
+ background: var(--color-brand-accent);
174
+ color: var(--color-text-on-accent);
175
+ }
176
+
177
+ /* A short rule between two runs of tiles, centred in the column. */
178
+ .crewlet-compact-nav__separator {
179
+ display: flex;
180
+ justify-content: center;
181
+ padding: calc(var(--spacing-1) + var(--spacing-1) / 2) 0;
182
+ }
183
+
184
+ .crewlet-compact-nav__rule {
185
+ width: var(--spacing-6);
186
+ height: 1px;
187
+ background: var(--color-border-default);
188
+ }
189
+
190
+ /*
191
+ * THE FLYOUT: a folded group's places beside the rail, on the popover's rung.
192
+ * Its rows are the full rail's rows at the menu's step: the glyph, the name,
193
+ * and the figure at the end, so the places read as they do unfolded.
194
+ */
195
+ .crewlet-compact-nav__flyout {
196
+ position: fixed;
197
+ display: flex;
198
+ flex-direction: column;
199
+ gap: 1px;
200
+ min-width: 208px;
201
+ max-width: min(320px, calc(100vw - var(--spacing-4)));
202
+ box-sizing: border-box;
203
+ padding: var(--spacing-1);
204
+ border: 1px solid var(--color-border-default);
205
+ border-radius: var(--radius-lg);
206
+ background: var(--color-surface-elevated);
207
+ box-shadow: var(--shadow-lg);
208
+ font-family: var(--font-family-sans);
209
+ animation: crewlet-compact-nav-flyout-in var(--motion-duration-fast) var(--motion-easing-out);
210
+ }
211
+
212
+ /* Inside a LayerHost the coordinates are the host's own, so the flyout is
213
+ absolute within it rather than fixed against the window. */
214
+ .crewlet-compact-nav__flyout--in-host {
215
+ position: absolute;
216
+ }
217
+
218
+ @keyframes crewlet-compact-nav-flyout-in {
219
+ from {
220
+ opacity: 0;
221
+ transform: translateX(calc(var(--spacing-1) * -1));
222
+ }
223
+ }
224
+
225
+ .crewlet-compact-nav__flyout-head {
226
+ padding: var(--spacing-1) var(--spacing-2);
227
+ color: var(--color-text-secondary);
228
+ font-size: var(--font-size-xs);
229
+ font-weight: var(--font-weight-semibold);
230
+ line-height: var(--font-line-height-tight);
231
+ }
232
+
233
+ /* A router's link is drawn by the caller; its wrapper stays out of the box tree. */
234
+ .crewlet-compact-nav__link-slot {
235
+ display: contents;
236
+ }
237
+
238
+ .crewlet-compact-nav__link {
239
+ display: flex;
240
+ align-items: center;
241
+ gap: var(--spacing-2);
242
+ min-width: 0;
243
+ height: var(--size-control-md);
244
+ padding: 0 var(--spacing-2);
245
+ border-radius: var(--radius-md);
246
+ color: var(--color-text-secondary);
247
+ font-size: var(--font-size-sm);
248
+ text-decoration: none;
249
+ outline: none;
250
+ transition:
251
+ background var(--motion-duration-fast) var(--motion-easing-default),
252
+ color var(--motion-duration-fast) var(--motion-easing-default);
253
+ }
254
+
255
+ .crewlet-compact-nav__link:hover,
256
+ .crewlet-compact-nav__link:focus-visible {
257
+ background: var(--color-surface-hover);
258
+ color: var(--color-text-primary);
259
+ }
260
+
261
+ /* The place the reader is on: the selected fill, the primary ink, a step
262
+ heavier. Declared after the hover so the selected fill holds under it. */
263
+ .crewlet-compact-nav__link[aria-current='page'] {
264
+ background: var(--color-surface-selected);
265
+ color: var(--color-text-primary);
266
+ font-weight: var(--font-weight-semibold);
267
+ }
268
+
269
+ .crewlet-compact-nav__link:focus-visible {
270
+ outline: 2px solid var(--color-focus);
271
+ outline-offset: var(--size-focus-ring-inset-offset);
272
+ }
273
+
274
+ .crewlet-compact-nav__link--locked:not([aria-current]):not(:hover):not(:focus-visible) {
275
+ color: var(--color-text-tertiary);
276
+ }
277
+
278
+ .crewlet-compact-nav__link-icon {
279
+ display: inline-flex;
280
+ flex: none;
281
+ }
282
+
283
+ .crewlet-compact-nav__link-label {
284
+ flex: 1 1 auto;
285
+ min-width: 0;
286
+ overflow: hidden;
287
+ text-overflow: ellipsis;
288
+ white-space: nowrap;
289
+ }
290
+
291
+ .crewlet-compact-nav__link-figure {
292
+ display: inline-flex;
293
+ align-items: center;
294
+ justify-content: center;
295
+ flex: none;
296
+ min-width: var(--size-badge);
297
+ height: var(--size-badge);
298
+ box-sizing: border-box;
299
+ padding: 0 var(--size-badge-pad);
300
+ border-radius: var(--radius-pill);
301
+ color: var(--color-text-tertiary);
302
+ font-size: var(--font-size-badge);
303
+ font-weight: var(--font-weight-semibold);
304
+ font-variant-numeric: tabular-nums;
305
+ line-height: 1;
306
+ }
307
+
308
+ .crewlet-compact-nav__link-figure--badge {
309
+ background: var(--color-brand-accent);
310
+ color: var(--color-text-on-accent);
311
+ }
312
+
313
+ @media (prefers-reduced-motion: reduce) {
314
+ .crewlet-compact-nav__tile,
315
+ .crewlet-compact-nav__link {
316
+ transition: none;
317
+ }
318
+
319
+ .crewlet-compact-nav__flyout {
320
+ animation: none;
321
+ }
322
+ }
@@ -8,6 +8,8 @@ export declare const COMPOSER_COUNTER_AT = 0.8;
8
8
  * every chat surface sends it: Enter sends and Shift+Enter writes a line.
9
9
  */
10
10
  export type ComposerSubmitKey = 'mod-enter' | 'enter';
11
+ /** The box's look: `default`, a form's field, or `chat`, a conversation's message box. */
12
+ export type ComposerAppearance = 'default' | 'chat';
11
13
  export interface ComposerProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'value' | 'onChange' | 'onSubmit' | 'children'> {
12
14
  value: string;
13
15
  onChange: (value: string) => void;
@@ -20,8 +22,29 @@ export interface ComposerProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaE
20
22
  submitOn?: ComposerSubmitKey | undefined;
21
23
  /** Names the field for a screen reader, since it carries no visible label. */
22
24
  label: string;
25
+ /**
26
+ * `chat` is a conversation's message box, on the transcript's own type and
27
+ * ground (the `--crewlet-chat-*` scale): the large corner, the transcript's
28
+ * ground with the row wash and a small shadow, the words at the chat step, a
29
+ * footer with no rule of its own, a tool whose menu is open drawn pressed,
30
+ * and the formatting row's glyphs quiet until the box is in use.
31
+ */
32
+ appearance?: ComposerAppearance | undefined;
23
33
  /** The footer's controls, at its end: Cancel and Submit. */
24
34
  actions?: ReactNode;
35
+ /**
36
+ * Tools at the footer's START, before the actions: what a chat composer
37
+ * offers beside sending (attach, emoji, a mention, drafting with the
38
+ * assistant). They stand where the eye starts, under the words, and the
39
+ * send control keeps the corner.
40
+ */
41
+ tools?: ReactNode;
42
+ /**
43
+ * A row along the box's top, inside its edge and before everything else: a
44
+ * formatting `Toolbar` (bold, italic, a list) that acts on the words below.
45
+ * Pass a `Toolbar` with its own name; the row is laid out, not labelled.
46
+ */
47
+ toolbar?: ReactNode;
25
48
  /**
26
49
  * A control on the field's own row, at its end: the send button of a chat
27
50
  * composer (`SendButton`). With one, the field starts at one line and grows
@@ -49,8 +72,9 @@ export interface ComposerProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaE
49
72
  }
50
73
  /**
51
74
  * A message written in place: a borderless field that grows with its text,
52
- * and a footer strip holding the send shortcut, a counter and the actions, in
53
- * one box that takes the focus ring as a whole.
75
+ * and a footer strip holding the tools, the send shortcut, a counter and the
76
+ * actions, in one box that takes the focus ring as a whole. A formatting row
77
+ * (`toolbar`) may stand along the box's top, above the words it acts on.
54
78
  *
55
79
  * THE FOOTER IS DRAWN ONLY WITH SOMETHING IN IT. With no shortcut, counter or
56
80
  * actions there is no strip at all, and one holding only the shortcut's hint
@@ -1,3 +1,4 @@
1
+ import '../ChatMessage/ChatScale.css';
1
2
  import './Composer.css';
2
3
  export { COMPOSER_COUNTER_AT, Composer } from './Composer.js';
3
- export type { ComposerProps } from './Composer.js';
4
+ export type { ComposerAppearance, ComposerProps } from './Composer.js';
@@ -1,12 +1,12 @@
1
- export { COMPOSER_COUNTER_AT, Composer } from '../chunk-E35HYQMK.js';
2
- import '../chunk-ANTAQAR4.js';
3
- import '../chunk-FB3TCNQP.js';
1
+ export { COMPOSER_COUNTER_AT, Composer } from '../chunk-EBVZHVPD.js';
2
+ import '../chunk-O7N6W52M.js';
4
3
  import '../chunk-PGCLHYVP.js';
5
- import '../chunk-PQADV6P6.js';
6
- import '../chunk-2G355KDJ.js';
4
+ import '../chunk-CMAZZY2I.js';
7
5
  import '../chunk-OMV5W53A.js';
8
- import '../chunk-H5XTJ7GJ.js';
6
+ import '../chunk-TUEM2XIW.js';
7
+ import '../chunk-4ITETIGZ.js';
9
8
  import '../chunk-UAUP6XGK.js';
10
- import '../chunk-NUZHC6MM.js';
9
+ import '../chunk-PQADV6P6.js';
10
+ import '../chunk-2G355KDJ.js';
11
11
  import '../chunk-UT6CW3C7.js';
12
12
  import '../chunk-ODEQTPFM.js';
@@ -136,6 +136,32 @@
136
136
  padding: var(--spacing-2) var(--spacing-3) 0;
137
137
  }
138
138
 
139
+ /*
140
+ * THE FORMATTING ROW, along the box's top on the field's own inset less the
141
+ * small tool's own room round its glyph, so the first glyph starts on the
142
+ * words' line. It belongs to the field rather than to a strip of its own: no
143
+ * rule under it.
144
+ */
145
+ .crewlet-composer__toolbar {
146
+ display: flex;
147
+ align-items: center;
148
+ min-width: 0;
149
+ padding: var(--spacing-1) var(--spacing-1) 0 calc(var(--spacing-3) - (var(--size-control-sm) - var(--font-size-xs)) / 2);
150
+ }
151
+
152
+ /*
153
+ * THE TOOLS AT THE FOOTER'S START, a tight row whose first glyph starts on
154
+ * the words' line, as the formatting row's does. The spacer after them puts
155
+ * the actions at the end.
156
+ */
157
+ .crewlet-composer__tools {
158
+ display: flex;
159
+ align-items: center;
160
+ gap: 2px;
161
+ min-width: 0;
162
+ margin-inline-start: calc(-1 * (var(--size-control-sm) - var(--font-size-xs)) / 2);
163
+ }
164
+
139
165
  /*
140
166
  * DISABLED, AS A FIELD IS: the whole box at the disabled field's 0.6 and the
141
167
  * not-allowed cursor, so it no longer reads as somewhere to type. Faded once:
@@ -212,3 +238,48 @@
212
238
  transition: none;
213
239
  }
214
240
  }
241
+
242
+ /*
243
+ * A CONVERSATION'S MESSAGE BOX (`appearance="chat"`), on the transcript's own
244
+ * scale (ChatMessage/ChatScale.css): the large corner on the transcript's
245
+ * ground with the row wash laid over it, a step lighter than the list, and a
246
+ * small shadow, so the box sits just above the messages, inside the edge
247
+ * scale's strong step, the edge a field draws. The words are set at the
248
+ * transcript's size on one line to start. The footer belongs to the field
249
+ * rather than standing as a strip under it: no rule and no ground of its own.
250
+ */
251
+ .crewlet-composer--chat {
252
+ border-color: var(--color-edge-strong);
253
+ background:
254
+ linear-gradient(var(--color-fill-row), var(--color-fill-row)),
255
+ var(--crewlet-chat-ground);
256
+ box-shadow: var(--shadow-xs);
257
+ }
258
+
259
+ .crewlet-composer--chat .crewlet-composer__field {
260
+ min-height: 0;
261
+ padding: var(--spacing-2) var(--spacing-3);
262
+ font-size: var(--crewlet-chat-text);
263
+ line-height: var(--crewlet-chat-line);
264
+ }
265
+
266
+ .crewlet-composer--chat .crewlet-composer__footer {
267
+ gap: 2px;
268
+ padding: var(--spacing-1);
269
+ padding-inline-start: var(--spacing-3);
270
+ border-top: 0;
271
+ background: transparent;
272
+ }
273
+
274
+ /* A tool whose menu or picker is open reads as held down. */
275
+ .crewlet-composer--chat .crewlet-composer__tools [aria-expanded='true'] {
276
+ background: var(--color-surface-pressed);
277
+ color: var(--color-text-primary);
278
+ }
279
+
280
+ /* The formatting row's glyphs rest in the tertiary ink while the box is not
281
+ in use, so the row reads as part of the field rather than as a toolbar
282
+ competing with the conversation, and take their own ink once it is. */
283
+ .crewlet-composer--chat:not(:focus-within) .crewlet-composer__toolbar :is(button, [role='button']):not(:hover) {
284
+ color: var(--color-text-tertiary);
285
+ }
@@ -1,11 +1,11 @@
1
- export { ConfirmField, confirmMatches } from '../chunk-TPIMOGOZ.js';
1
+ export { ConfirmField, confirmMatches } from '../chunk-PEBQMX5X.js';
2
2
  import '../chunk-PLL7ZJHY.js';
3
- import '../chunk-FB3TCNQP.js';
3
+ import '../chunk-O7N6W52M.js';
4
4
  import '../chunk-PGCLHYVP.js';
5
+ import '../chunk-TUEM2XIW.js';
6
+ import '../chunk-4ITETIGZ.js';
7
+ import '../chunk-UAUP6XGK.js';
5
8
  import '../chunk-PQADV6P6.js';
6
9
  import '../chunk-2G355KDJ.js';
7
- import '../chunk-H5XTJ7GJ.js';
8
- import '../chunk-UAUP6XGK.js';
9
- import '../chunk-NUZHC6MM.js';
10
10
  import '../chunk-UT6CW3C7.js';
11
11
  import '../chunk-ODEQTPFM.js';