@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
@@ -0,0 +1,4 @@
1
+ import './ChatScale.css';
2
+ import './ChatMessage.css';
3
+ export { CHAT_MESSAGE_CLASS, CHAT_MESSAGE_FAILURE_LABELS, ChatMessage, ChatMessageFailure } from './ChatMessage.js';
4
+ export type { ChatMessageActionsPlacement, ChatMessageFailureLabels, ChatMessageFailureProps, ChatMessageHighlight, ChatMessagePending, ChatMessageProps, } from './ChatMessage.js';
@@ -0,0 +1,5 @@
1
+ export { CHAT_MESSAGE_CLASS, CHAT_MESSAGE_FAILURE_LABELS, ChatMessage, ChatMessageFailure } from '../chunk-IUBOLGHG.js';
2
+ import '../chunk-DGXZ635L.js';
3
+ import '../chunk-XSPCITPN.js';
4
+ import '../chunk-UT6CW3C7.js';
5
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,304 @@
1
+ /*
2
+ * One message in a transcript: a face in a gutter, the head line, the words
3
+ * and a footer stack. Every size reads the conversation scale
4
+ * (ChatScale.css); every edge and fill the quiet scale in @crewlethq/tokens.
5
+ */
6
+
7
+ .crewlet-chat-message {
8
+ /* Where the row's first line starts: the toolbar rests on it. */
9
+ --crewlet-chat-row-top: var(--spacing-2);
10
+ position: relative;
11
+ display: grid;
12
+ grid-template-columns: var(--crewlet-chat-avatar) minmax(0, 1fr);
13
+ column-gap: var(--crewlet-chat-gap);
14
+ padding: var(--crewlet-chat-row-top) var(--crewlet-chat-pad-x) var(--spacing-1);
15
+ font-size: var(--crewlet-chat-text);
16
+ line-height: var(--crewlet-chat-line);
17
+ transition: background var(--motion-duration-fast) var(--motion-easing-default);
18
+ /* A message the reader is taken to stops under the day's pinned pill. */
19
+ scroll-margin-top: calc(var(--crewlet-chat-day-pin) + var(--crewlet-chat-day-pill) + var(--spacing-2));
20
+ }
21
+
22
+ .crewlet-chat-message.is-continuation {
23
+ --crewlet-chat-row-top: 1px;
24
+ padding-bottom: 1px;
25
+ }
26
+
27
+ .crewlet-chat-message:hover,
28
+ .crewlet-chat-message:focus-visible,
29
+ .crewlet-chat-message:has(:focus-visible),
30
+ .crewlet-chat-message.is-active {
31
+ background: var(--color-fill-row);
32
+ }
33
+
34
+ .crewlet-chat-message:focus-visible {
35
+ outline: 2px solid var(--color-focus);
36
+ outline-offset: var(--size-focus-ring-inset-offset);
37
+ }
38
+
39
+ /* A row that names the reader: its wash and the warning bar on its edge. It
40
+ keeps its wash, and only its wash, under the pointer: the toolbar and the
41
+ gutter's time say which row is pointed at, and a hover step laid over the
42
+ wash took the row's quiet text under 4.5:1 on the darker palettes. */
43
+ .crewlet-chat-message.is-mention,
44
+ .crewlet-chat-message.is-mention:hover,
45
+ .crewlet-chat-message.is-mention:focus-visible,
46
+ .crewlet-chat-message.is-mention:has(:focus-visible),
47
+ .crewlet-chat-message.is-mention.is-active {
48
+ background: var(--crewlet-chat-mention);
49
+ box-shadow: inset 2px 0 0 var(--color-feedback-warning);
50
+ }
51
+
52
+ /* The row a link or a search opened at: a wash of the accent that fades back
53
+ to whatever the row draws of its own (the mention wash included), so there
54
+ is no last keyframe to name it. */
55
+ .crewlet-chat-message.is-flash {
56
+ animation: crewlet-chat-message-flash calc(var(--motion-duration-moderate) * 8) var(--motion-easing-out);
57
+ }
58
+
59
+ @keyframes crewlet-chat-message-flash {
60
+ 0%,
61
+ 40% {
62
+ background: var(--color-brand-accent-soft-strong);
63
+ }
64
+ }
65
+
66
+ .crewlet-chat-message.is-sending .crewlet-chat-message__body {
67
+ color: var(--color-text-tertiary);
68
+ }
69
+
70
+ /* The face starts a hairline under the top of the name's line box, so across
71
+ the name and the first line of words it sits centred on the pair. It keeps
72
+ its own height: stretched to the row, the face's button (and its focus
73
+ ring) ran the full height of a long message. */
74
+ .crewlet-chat-message__gutter {
75
+ display: flex;
76
+ align-items: flex-start;
77
+ justify-content: center;
78
+ padding-top: 2px;
79
+ }
80
+
81
+ /* A face that opens the author's profile: the face is the whole control. */
82
+ .crewlet-chat-message__gutter > button {
83
+ display: inline-flex;
84
+ padding: 0;
85
+ border: 0;
86
+ border-radius: var(--radius-md);
87
+ background: transparent;
88
+ cursor: pointer;
89
+ }
90
+
91
+ .crewlet-chat-message__gutter > button:focus-visible {
92
+ outline: 2px solid var(--color-focus);
93
+ outline-offset: 2px;
94
+ }
95
+
96
+ /* A continuation's time sits on the baseline of the first line of its words.
97
+ The two are in different columns and set at different sizes, so the grid
98
+ aligns them by baseline rather than by sharing a line height. It ends on
99
+ the column's edge: a time is wider than a face, and centred it ran into the
100
+ gap before the words. */
101
+ .crewlet-chat-message.is-continuation > .crewlet-chat-message__gutter {
102
+ justify-content: flex-end;
103
+ padding-top: 0;
104
+ }
105
+
106
+ .crewlet-chat-message.is-continuation > .crewlet-chat-message__gutter,
107
+ .crewlet-chat-message.is-continuation > .crewlet-chat-message__main {
108
+ align-self: baseline;
109
+ }
110
+
111
+ .crewlet-chat-message__gutter-time {
112
+ visibility: hidden;
113
+ color: var(--color-text-tertiary);
114
+ font-size: var(--font-size-2xs);
115
+ font-variant-numeric: tabular-nums;
116
+ line-height: 1;
117
+ white-space: nowrap;
118
+ }
119
+
120
+ .crewlet-chat-message:hover .crewlet-chat-message__gutter-time,
121
+ .crewlet-chat-message:focus-visible .crewlet-chat-message__gutter-time,
122
+ .crewlet-chat-message:has(:focus-visible) .crewlet-chat-message__gutter-time,
123
+ .crewlet-chat-message.is-active .crewlet-chat-message__gutter-time {
124
+ visibility: visible;
125
+ }
126
+
127
+ .crewlet-chat-message__main {
128
+ display: flex;
129
+ flex-direction: column;
130
+ min-width: 0;
131
+ }
132
+
133
+ /* THE HEAD IS SET AS TEXT, not as a flex row. Every line of it, the first or
134
+ one a narrow pane wraps the time onto, is held to one body line by the
135
+ block's strut, and the smaller meta stands on the name's baseline inside
136
+ it. As a wrapping flex row the line grew a pixel to fit the time's own
137
+ line box, and a time wrapped alone got a short line of its own. */
138
+ .crewlet-chat-message__head {
139
+ min-width: 0;
140
+ line-height: calc(var(--crewlet-chat-text) * var(--crewlet-chat-line));
141
+ }
142
+
143
+ /* The gap follows each part, so a part a narrow pane wraps starts flush. */
144
+ .crewlet-chat-message__head > * {
145
+ white-space: nowrap;
146
+ }
147
+
148
+ .crewlet-chat-message__head > :not(:last-child) {
149
+ margin-inline-end: var(--spacing-2);
150
+ }
151
+
152
+ /* A label beside the name ("Agent") is centred on the lower-case letters, as
153
+ text sets an inline mark. */
154
+ .crewlet-chat-message__head > .crewlet-tag {
155
+ vertical-align: middle;
156
+ }
157
+
158
+ .crewlet-chat-message__author {
159
+ color: var(--color-text-primary);
160
+ font-weight: var(--font-weight-medium);
161
+ }
162
+
163
+ /* A name that opens the author's profile reads as the name, not a button. */
164
+ .crewlet-chat-message__author > button {
165
+ padding: 0;
166
+ border: 0;
167
+ border-radius: var(--radius-xs);
168
+ background: transparent;
169
+ color: inherit;
170
+ font: inherit;
171
+ cursor: pointer;
172
+ }
173
+
174
+ .crewlet-chat-message__author > button:hover {
175
+ text-decoration: underline;
176
+ text-underline-offset: 2px;
177
+ }
178
+
179
+ .crewlet-chat-message__author > button:focus-visible {
180
+ outline: 2px solid var(--color-focus);
181
+ outline-offset: 2px;
182
+ }
183
+
184
+ /* Meta on the head shares the name's baseline. A line height of its own
185
+ would sit its smaller text lower in a box as tall as the name's and grow
186
+ the line by a pixel, so it takes none. */
187
+ .crewlet-chat-message__time {
188
+ color: var(--color-text-tertiary);
189
+ font-size: var(--crewlet-chat-meta);
190
+ font-variant-numeric: tabular-nums;
191
+ line-height: 1;
192
+ }
193
+
194
+ .crewlet-chat-message__body {
195
+ min-width: 0;
196
+ color: var(--color-text-primary);
197
+ overflow-wrap: anywhere;
198
+ }
199
+
200
+ /* Emphasis in a message is the semibold step, as it is everywhere else in
201
+ the product: the browser's own bold read heavier than the names. */
202
+ .crewlet-chat-message__body :is(b, strong) {
203
+ font-weight: var(--font-weight-semibold);
204
+ }
205
+
206
+ /* Previews, reactions and the thread line: one stack, one gap. */
207
+ .crewlet-chat-message__footer {
208
+ display: flex;
209
+ flex-direction: column;
210
+ align-items: flex-start;
211
+ gap: var(--crewlet-chat-stack);
212
+ margin-top: var(--crewlet-chat-stack);
213
+ }
214
+
215
+ /* NO PIECE UNDER A MESSAGE IS WIDER THAN ITS COLUMN. Stacked on the start
216
+ edge, each piece takes its one-line width, and an agent's working line set
217
+ it wider than a phone's column: the transcript scrolled sideways. */
218
+ .crewlet-chat-message__footer > * {
219
+ max-width: 100%;
220
+ }
221
+
222
+ /* THE TOOLBAR STANDS ON THE ROW'S FIRST LINE, over the row above, and over
223
+ the day's pinned pill as well as the rows: a toolbar that slid under the
224
+ pill lost its middle buttons wherever the two crossed. */
225
+ .crewlet-chat-message__actions {
226
+ position: absolute;
227
+ top: calc(var(--crewlet-chat-row-top) - var(--crewlet-chat-toolbar));
228
+ right: var(--crewlet-chat-pad-x);
229
+ z-index: calc(var(--z-index-sticky) + var(--z-index-raised));
230
+ opacity: 0;
231
+ pointer-events: none;
232
+ transition: opacity var(--motion-duration-fast) var(--motion-easing-default);
233
+ }
234
+
235
+ .crewlet-chat-message:hover > .crewlet-chat-message__actions,
236
+ .crewlet-chat-message:focus-visible > .crewlet-chat-message__actions,
237
+ .crewlet-chat-message:has(:focus-visible) > .crewlet-chat-message__actions,
238
+ .crewlet-chat-message.is-active > .crewlet-chat-message__actions {
239
+ opacity: 1;
240
+ pointer-events: auto;
241
+ }
242
+
243
+ /* With no row above to stand over (see ChatMessage.tsx), or when the host
244
+ asks, it is drawn inside the row's own head. */
245
+ .crewlet-chat-message.has-actions-inside > .crewlet-chat-message__actions {
246
+ top: var(--spacing-1);
247
+ }
248
+
249
+ /* A row's quiet controls, the add-reaction pill among them, show while the
250
+ row is pointed at or holds keyboard focus, and while their picker is open. */
251
+ .crewlet-chat-message .crewlet-reaction--add {
252
+ opacity: 0;
253
+ }
254
+
255
+ .crewlet-chat-message:hover .crewlet-reaction--add,
256
+ .crewlet-chat-message:has(:focus-visible) .crewlet-reaction--add,
257
+ .crewlet-chat-message.is-active .crewlet-reaction--add,
258
+ .crewlet-chat-message .crewlet-reaction--add[aria-expanded='true'] {
259
+ opacity: 1;
260
+ }
261
+
262
+ /* A TOUCH SCREEN HAS NO HOVER: a tap on the row (which focuses it) shows the
263
+ toolbar, so replying in a thread, saving and the More menu are reached by
264
+ touch as well as by pointer and keyboard. The add pill is always shown
265
+ there, so a reaction is one tap away without finding the toolbar first. */
266
+ @media (hover: none) {
267
+ .crewlet-chat-message:focus-within > .crewlet-chat-message__actions {
268
+ opacity: 1;
269
+ pointer-events: auto;
270
+ }
271
+
272
+ .crewlet-chat-message .crewlet-reaction--add {
273
+ opacity: 1;
274
+ }
275
+ }
276
+
277
+ /* The line under a message that was not sent. */
278
+ .crewlet-chat-message-failure {
279
+ display: flex;
280
+ flex-wrap: wrap;
281
+ align-items: center;
282
+ gap: var(--spacing-1);
283
+ color: var(--color-feedback-danger-ink);
284
+ font-size: var(--crewlet-chat-meta);
285
+ line-height: var(--crewlet-chat-line);
286
+ }
287
+
288
+ .crewlet-chat-message-failure__words {
289
+ margin-inline-end: var(--spacing-1);
290
+ }
291
+
292
+ @media (prefers-reduced-motion: reduce) {
293
+ .crewlet-chat-message {
294
+ transition: none;
295
+ }
296
+
297
+ .crewlet-chat-message.is-flash {
298
+ animation: none;
299
+ }
300
+
301
+ .crewlet-chat-message__actions {
302
+ transition: none;
303
+ }
304
+ }
@@ -0,0 +1,42 @@
1
+ /*
2
+ * ONE SCALE FOR A CONVERSATION. Every part of a transcript reads from these:
3
+ * the message rows, their toolbar, reactions and thread line, the day's rule
4
+ * and pill, the New line and the link previews. A name, the words under it
5
+ * and the box they were typed in are one size, and everything around them
6
+ * (times, counts, the second lines of previews) is one step down. A surface
7
+ * that wants a denser or roomier transcript sets them once, on itself.
8
+ *
9
+ * A sheet of its own, imported by every part that reads it, so a consumer
10
+ * that imports one part (`@crewlethq/ui/ChatDay`) still gets the scale.
11
+ */
12
+ :root {
13
+ /* The words: names, bodies and the message box, on one line height. */
14
+ --crewlet-chat-text: var(--font-size-sm);
15
+ --crewlet-chat-line: var(--font-line-height-normal);
16
+ /* Times, counts, reactions and second lines: one step down. */
17
+ --crewlet-chat-meta: var(--font-size-xs);
18
+ /* The row's side inset, the face column, the gap after it, and the space
19
+ between the pieces stacked under a message's words. */
20
+ --crewlet-chat-pad-x: var(--spacing-5);
21
+ --crewlet-chat-avatar: 36px;
22
+ --crewlet-chat-gap: var(--spacing-3);
23
+ --crewlet-chat-stack: 6px;
24
+ /* One width for every link preview, so a stack of them shares both edges. */
25
+ --crewlet-chat-card: 440px;
26
+ /* A day: the pill's height, the room above and below its rule, and how far
27
+ under the list's top edge the pill pins. A host with a bar floating over
28
+ the list's top (an unread banner) moves the pin down past it. */
29
+ --crewlet-chat-day-pill: 24px;
30
+ --crewlet-chat-day-gap: var(--spacing-5);
31
+ --crewlet-chat-day-pin: var(--spacing-3);
32
+ /* The hover toolbar: a medium control, big enough to aim at while the
33
+ pointer is passing, inside its inset and its hairline, twice. */
34
+ --crewlet-chat-toolbar-inset: var(--spacing-1);
35
+ --crewlet-chat-toolbar: calc(var(--size-control-md) + (var(--crewlet-chat-toolbar-inset) + 1px) * 2);
36
+ /* The ground the transcript is set on. A host that sets it on another fill
37
+ names that fill here, and everything lifted off the rows (the toolbar,
38
+ the day's pill, the open thread line) is filled with it. */
39
+ --crewlet-chat-ground: var(--color-surface-background);
40
+ /* A row that names the reader: a light wash of the warning hue. */
41
+ --crewlet-chat-mention: var(--color-feedback-warning-soft);
42
+ }
@@ -13,12 +13,26 @@ export interface ChatThreadHandle {
13
13
  /** Scrolls to the end and follows it again. */
14
14
  scrollToLatest: () => void;
15
15
  /**
16
- * Brings an item that needs a decision into view: the whole of it when it
17
- * fits, and otherwise its head at the top of the view, never past it, so
18
- * its actions are reached by reading rather than skipped over.
16
+ * Brings an item into view in the MIDDLE of the log, with what came before
17
+ * and after it in sight: a message opened from a link, a mention or a
18
+ * search, or a card that needs a decision. An item taller than the view
19
+ * lands with its head at the top instead, never past it, so its actions are
20
+ * reached by reading rather than skipped over. The item's own
21
+ * `scroll-margin-top` and `scroll-margin-bottom` are kept clear, so an item
22
+ * that names the height of a pinned day pill stops under it. The Jump to
23
+ * latest row the move brings in is accounted for: the item is placed in the
24
+ * view that is left once the row stands under the log.
19
25
  */
20
26
  reveal: (element: HTMLElement) => void;
27
+ /**
28
+ * The scrolling element, for a host that measures or moves what is inside
29
+ * it (a windowed transcript, or one that keeps its place while an older
30
+ * page is added above). Null before the log has mounted.
31
+ */
32
+ scroller: () => HTMLDivElement | null;
21
33
  }
34
+ /** Where a short transcript rests in its view: under the top, or on the foot. */
35
+ export type ChatThreadRest = 'start' | 'end';
22
36
  export interface ChatThreadProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role' | 'children'> {
23
37
  /** Names the log for a screen reader: "Conversation". */
24
38
  label: string;
@@ -29,6 +43,19 @@ export interface ChatThreadProps extends Omit<HTMLAttributes<HTMLDivElement>, 'r
29
43
  * default; `false` never moves the scroll on its own.
30
44
  */
31
45
  follow?: boolean | undefined;
46
+ /**
47
+ * Draws the Jump to latest row under the log while the reader is scrolled
48
+ * away from the end. `true` by default; `false` for a log that offers its
49
+ * own way back (a day's Jump to menu), so nothing is added under it.
50
+ */
51
+ jump?: boolean | undefined;
52
+ /**
53
+ * Where a transcript shorter than the view rests: `start` (the default)
54
+ * under the top, or `end`, on the foot, against the composer under it, as a
55
+ * conversation's newest messages always are. The items keep no gap of their
56
+ * own in `end`, since a conversation's rows set their own spacing.
57
+ */
58
+ rest?: ChatThreadRest | undefined;
32
59
  /** The thread's blocks, one child per item, oldest first. */
33
60
  children?: ReactNode;
34
61
  labels?: Partial<ChatThreadLabels> | undefined;
@@ -57,6 +84,8 @@ export interface ChatThreadProps extends Omit<HTMLAttributes<HTMLDivElement>, 'r
57
84
  * and growth is followed; the reader's own wheel, touch or key ends it.
58
85
  *
59
86
  * THE PILL COVERS NOTHING: it sits under the log, in the thread's own column,
60
- * rather than over the last lines of whatever is being read.
87
+ * rather than over the last lines of whatever is being read. A log that
88
+ * offers its own way back (a day's Jump to menu) leaves it out with
89
+ * `jump={false}`.
61
90
  */
62
91
  export declare const ChatThread: import("react").ForwardRefExoticComponent<ChatThreadProps & import("react").RefAttributes<ChatThreadHandle>>;
@@ -1,3 +1,3 @@
1
1
  import './ChatThread.css';
2
2
  export { CHAT_THREAD_FOLLOW_WITHIN, CHAT_THREAD_LABELS, ChatThread } from './ChatThread.js';
3
- export type { ChatThreadHandle, ChatThreadLabels, ChatThreadProps } from './ChatThread.js';
3
+ export type { ChatThreadHandle, ChatThreadLabels, ChatThreadProps, ChatThreadRest } from './ChatThread.js';
@@ -1,5 +1,5 @@
1
- export { CHAT_THREAD_FOLLOW_WITHIN, CHAT_THREAD_LABELS, ChatThread } from '../chunk-R5OATXWU.js';
2
- import '../chunk-RTPQDNW3.js';
1
+ export { CHAT_THREAD_FOLLOW_WITHIN, CHAT_THREAD_LABELS, ChatThread } from '../chunk-VONEKR3J.js';
2
+ import '../chunk-YJQXESOJ.js';
3
3
  import '../chunk-DGXZ635L.js';
4
4
  import '../chunk-XSPCITPN.js';
5
5
  import '../chunk-UT6CW3C7.js';
@@ -53,6 +53,23 @@
53
53
  flex: none;
54
54
  }
55
55
 
56
+ /*
57
+ * A SHORT TRANSCRIPT RESTS ON ITS FOOT (`rest="end"`), against the composer
58
+ * under it, as a conversation's newest messages always are, rather than
59
+ * under the top with an empty band between it and the box. The scroller is a
60
+ * column and the items take the room above them; a conversation's rows set
61
+ * their own spacing, so the items keep no gap.
62
+ */
63
+ .crewlet-chat-thread--rest-end .crewlet-chat-thread__scroller {
64
+ display: flex;
65
+ flex-direction: column;
66
+ }
67
+
68
+ .crewlet-chat-thread--rest-end .crewlet-chat-thread__items {
69
+ margin-top: auto;
70
+ gap: 0;
71
+ }
72
+
56
73
  /*
57
74
  * The pill, centred in a row of its own under the log. IN FLOW, NOT FLOATING:
58
75
  * laid over the scroller it covered the last lines of whatever was being read,
@@ -1,11 +1,11 @@
1
- export { CheckGrid } from '../chunk-MGQKF7GK.js';
2
- import '../chunk-LMQG3VPG.js';
3
- import '../chunk-FB3TCNQP.js';
1
+ export { CheckGrid } from '../chunk-NN475NAP.js';
2
+ import '../chunk-YQ7Q52XU.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';
@@ -1,10 +1,10 @@
1
- export { Checkbox, CheckboxGroup } from '../chunk-LMQG3VPG.js';
2
- import '../chunk-FB3TCNQP.js';
1
+ export { Checkbox, CheckboxGroup } from '../chunk-YQ7Q52XU.js';
2
+ import '../chunk-O7N6W52M.js';
3
3
  import '../chunk-PGCLHYVP.js';
4
+ import '../chunk-TUEM2XIW.js';
5
+ import '../chunk-4ITETIGZ.js';
6
+ import '../chunk-UAUP6XGK.js';
4
7
  import '../chunk-PQADV6P6.js';
5
8
  import '../chunk-2G355KDJ.js';
6
- import '../chunk-H5XTJ7GJ.js';
7
- import '../chunk-UAUP6XGK.js';
8
- import '../chunk-NUZHC6MM.js';
9
9
  import '../chunk-UT6CW3C7.js';
10
10
  import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,82 @@
1
+ import { type InputHTMLAttributes, type ReactNode, type Ref } from 'react';
2
+ /** One chosen item, drawn as a chip in the field. */
3
+ export interface ChipFieldItem {
4
+ id: string;
5
+ /** Its name on the chip, and in the chip's Remove control. */
6
+ label: string;
7
+ /** A small face or glyph before the name (an `xs` `Avatar`). Decorative. */
8
+ leading?: ReactNode;
9
+ }
10
+ /**
11
+ * How the field is drawn. `boxed` is a field like any other, a box with the
12
+ * field's ring. `bare` is a full-width row with a rule under it, for the
13
+ * address line at the top of a view ("To:"), whose focus is a bar along
14
+ * that rule.
15
+ */
16
+ export type ChipFieldVariant = 'boxed' | 'bare';
17
+ /** The words the field says, for a host that sets its own. */
18
+ export interface ChipFieldLabels {
19
+ /** Names a chip's Remove control. */
20
+ remove: (label: string) => string;
21
+ /** Said when a chip is removed. */
22
+ removed: (label: string) => string;
23
+ /** Names the list of chips. */
24
+ chosen: string;
25
+ }
26
+ export declare const CHIP_FIELD_LABELS: ChipFieldLabels;
27
+ export interface ChipFieldProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange' | 'prefix' | 'children' | 'aria-label' | 'type'> {
28
+ /** What is chosen, in the order it was chosen. */
29
+ items: readonly ChipFieldItem[];
30
+ /** A chip's Remove control, and Backspace in an empty query, which removes the last chip. */
31
+ onRemove: (id: string) => void;
32
+ /** The words being typed. */
33
+ query: string;
34
+ onQueryChange: (query: string) => void;
35
+ /**
36
+ * Enter with words typed: the host takes its first match. Enter is taken
37
+ * from the form round the field only when this is given and there are
38
+ * words to commit.
39
+ */
40
+ onCommit?: (() => void) | undefined;
41
+ /** The text box's name: "Find people and agents", "Who the message is to". */
42
+ label: string;
43
+ /** A leading word inside the row, before the chips: "To:". */
44
+ prefix?: ReactNode;
45
+ variant?: ChipFieldVariant | undefined;
46
+ /** The text box, for a host that moves focus to it. */
47
+ inputRef?: Ref<HTMLInputElement> | undefined;
48
+ labels?: Partial<ChipFieldLabels> | undefined;
49
+ /** Classes on the field's outer box. */
50
+ className?: string | undefined;
51
+ }
52
+ /**
53
+ * The chosen items of a picker as chips INSIDE the field, before a bare text
54
+ * box: the recipients of a new message, the people being added to a room.
55
+ * The host owns what is offered (a list of `PersonRow`s under the field, or
56
+ * a listbox the field points at) and what typing finds; the field owns the
57
+ * chips, the box and the keys.
58
+ *
59
+ * NOT `TagsInput`. That field is a form value, its chips above the box so the
60
+ * box keeps its width and an ordered chain has room for its Move controls.
61
+ * Here the chips ARE the line being addressed, read left to right with the
62
+ * caret after the last one, and each carries a face.
63
+ *
64
+ * THE RULES IT KEEPS.
65
+ *
66
+ * - BACKSPACE IN AN EMPTY BOX REMOVES THE LAST CHIP, and says so through the
67
+ * shared `Announcer`.
68
+ * - ENTER WITH WORDS TYPED IS THE HOST'S (`onCommit`): it takes the first
69
+ * match. Enter with nothing typed is left to the form round the field.
70
+ * - FOCUS STAYS IN THE BOX when a chip is removed, by its control or by
71
+ * Backspace, so the next name can be typed at once.
72
+ * - THE HOST'S KEYS COME FIRST. `onKeyDown` runs before the field's own, and
73
+ * a key it handles (its default prevented) is left alone: a host that makes
74
+ * the box a combobox over `useListbox` takes Enter, the arrows and Escape.
75
+ * Every other attribute (`role`, `aria-controls`, `aria-expanded`,
76
+ * `aria-activedescendant`) is passed to the box.
77
+ * - NOTHING IS TAKEN MID-COMPOSITION. While an input method is composing a
78
+ * word, Enter and Backspace are its own.
79
+ * - A PRESS ON THE FIELD'S EMPTY SPACE PUTS THE CARET IN THE BOX, as a press
80
+ * anywhere in a text field does.
81
+ */
82
+ export declare function ChipField({ items, onRemove, query, onQueryChange, onCommit, label, prefix, variant, inputRef, labels: overrides, className, disabled, onKeyDown, ...input }: ChipFieldProps): import("react").JSX.Element;
@@ -0,0 +1,4 @@
1
+ import '../Tag/Tag.css';
2
+ import './ChipField.css';
3
+ export { CHIP_FIELD_LABELS, ChipField } from './ChipField.js';
4
+ export type { ChipFieldItem, ChipFieldLabels, ChipFieldProps, ChipFieldVariant } from './ChipField.js';
@@ -0,0 +1,9 @@
1
+ export { CHIP_FIELD_LABELS, ChipField } from '../chunk-TRXTO3WC.js';
2
+ import '../chunk-LBGKLYBY.js';
3
+ import '../chunk-CYQBDZ6M.js';
4
+ import '../chunk-OMV5W53A.js';
5
+ import '../chunk-TUEM2XIW.js';
6
+ import '../chunk-4ITETIGZ.js';
7
+ import '../chunk-2G355KDJ.js';
8
+ import '../chunk-UT6CW3C7.js';
9
+ import '../chunk-ODEQTPFM.js';