@crewlethq/ui 0.81.1 → 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 (389) 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 +53 -4
  14. package/dist/AppShell/ResizeHandle.d.ts +1 -1
  15. package/dist/AppShell/index.d.ts +1 -1
  16. package/dist/AppShell/index.js +8 -5
  17. package/dist/AppShell/railShape.d.ts +17 -0
  18. package/dist/{AppShell-2IBUS4TH.css → AppShell-F7RID4P4.css} +150 -0
  19. package/dist/ArrangeFrame/index.js +2 -2
  20. package/dist/ArrangeGroup/index.js +2 -2
  21. package/dist/ArrangeList/index.js +6 -6
  22. package/dist/ArtifactBar/index.js +11 -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 +12 -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 +6 -6
  46. package/dist/CanvasBoard/index.js +9 -9
  47. package/dist/CanvasToolbar/index.js +8 -8
  48. package/dist/Card/index.js +2 -2
  49. package/dist/ChangeList/index.js +5 -5
  50. package/dist/ChangeMark/index.js +4 -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 +1 -1
  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 +11 -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 +8 -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 +6 -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 +10 -10
  96. package/dist/DataView/index.js +17 -17
  97. package/dist/DatasetSource/index.js +3 -3
  98. package/dist/DateTimePicker/index.js +5 -5
  99. package/dist/DeepWorkCard/index.js +10 -10
  100. package/dist/Disclosure/index.js +3 -3
  101. package/dist/DocTabsEditor/index.js +8 -8
  102. package/dist/Document/index.js +2 -2
  103. package/dist/EditingStatus/index.js +2 -2
  104. package/dist/{Editor-BXOWAV46.js → Editor-7EQWP3RN.js} +8 -8
  105. package/dist/EmojiPicker/EmojiPicker.d.ts +51 -0
  106. package/dist/EmojiPicker/emoji.d.ts +24 -0
  107. package/dist/EmojiPicker/index.d.ts +5 -0
  108. package/dist/EmojiPicker/index.js +13 -0
  109. package/dist/EmojiPicker-FMWYN2WX.css +63 -0
  110. package/dist/EntityChip/index.js +3 -3
  111. package/dist/EntityList/index.js +6 -6
  112. package/dist/FactList/index.js +4 -4
  113. package/dist/FolderTile/index.js +3 -3
  114. package/dist/FollowBanner/index.js +4 -4
  115. package/dist/HuePicker/index.js +8 -8
  116. package/dist/ImageUpload/ImageUpload.d.ts +6 -7
  117. package/dist/ImageUpload/index.js +3 -3
  118. package/dist/{ImageUpload-OWI7CCG7.css → ImageUpload-IFXZROFZ.css} +6 -37
  119. package/dist/InlineEditor/index.js +7 -7
  120. package/dist/Input/index.js +4 -4
  121. package/dist/Kbd/Kbd.d.ts +9 -0
  122. package/dist/Kbd/index.d.ts +1 -1
  123. package/dist/Kbd/index.js +1 -1
  124. package/dist/Layer/index.js +2 -2
  125. package/dist/LinkCard/LinkCard.d.ts +64 -0
  126. package/dist/LinkCard/index.d.ts +5 -0
  127. package/dist/LinkCard/index.js +5 -0
  128. package/dist/LinkCard-5I4MYU6I.css +155 -0
  129. package/dist/LinkInterstitial/index.js +6 -6
  130. package/dist/ListInput/index.js +8 -8
  131. package/dist/Listbox/index.js +3 -3
  132. package/dist/LogoSlot/index.js +3 -3
  133. package/dist/MarkdownEditor/format.d.ts +9 -1
  134. package/dist/MarkdownEditor/index.d.ts +2 -2
  135. package/dist/MarkdownEditor/index.js +9 -9
  136. package/dist/MentionChip/MentionChip.d.ts +25 -0
  137. package/dist/MentionChip/index.d.ts +3 -0
  138. package/dist/MentionChip/index.js +2 -0
  139. package/dist/MentionChip-W7MZZVRZ.css +42 -0
  140. package/dist/MentionMenu/MentionMenu.d.ts +82 -0
  141. package/dist/MentionMenu/index.d.ts +4 -0
  142. package/dist/MentionMenu/index.js +3 -0
  143. package/dist/MentionMenu-4NAQ45S4.css +65 -0
  144. package/dist/Menu/index.js +4 -4
  145. package/dist/MergeConflicts/index.js +8 -8
  146. package/dist/MessageActions/MessageActions.d.ts +58 -0
  147. package/dist/MessageActions/index.d.ts +4 -0
  148. package/dist/MessageActions/index.js +16 -0
  149. package/dist/MessageActions-Q4F5UH3S.css +73 -0
  150. package/dist/Modal/Modal.d.ts +12 -0
  151. package/dist/Modal/index.js +5 -5
  152. package/dist/{Modal-FYQYEI3N.css → Modal-GKUOO7PZ.css} +26 -1
  153. package/dist/OpenInAppCard/index.js +7 -7
  154. package/dist/OrgLabel/index.js +3 -3
  155. package/dist/OrgNode/index.js +4 -4
  156. package/dist/OrgTable/index.js +7 -7
  157. package/dist/PeekRail/index.js +1 -1
  158. package/dist/PeopleRail/index.js +4 -4
  159. package/dist/PersonRow/PersonRow.d.ts +70 -0
  160. package/dist/PersonRow/index.d.ts +3 -0
  161. package/dist/PersonRow/index.js +2 -0
  162. package/dist/PersonRow-V5GTPNVP.css +161 -0
  163. package/dist/Popover/index.js +3 -3
  164. package/dist/PresenceStack/index.js +3 -3
  165. package/dist/{PresenceStack-ZV67BH4V.css → PresenceStack-2DTYRADY.css} +4 -6
  166. package/dist/PresenterView/index.js +5 -5
  167. package/dist/PricingCard/index.js +2 -2
  168. package/dist/Principal/index.js +3 -3
  169. package/dist/PrincipalPicker/index.js +11 -11
  170. package/dist/ProposalCard/index.js +15 -15
  171. package/dist/ReactionBar/ReactionBar.d.ts +84 -0
  172. package/dist/ReactionBar/index.d.ts +4 -0
  173. package/dist/ReactionBar/index.js +15 -0
  174. package/dist/ReactionBar-XXI4V7XG.css +93 -0
  175. package/dist/RecordChip/index.js +4 -4
  176. package/dist/RefusalCard/index.js +6 -6
  177. package/dist/RelatedRow/index.js +3 -3
  178. package/dist/ResultTableCard/index.js +7 -7
  179. package/dist/ReviewList/index.js +2 -2
  180. package/dist/RichEditor/index.js +2 -2
  181. package/dist/RunChip/index.js +5 -5
  182. package/dist/SandboxedFrame/index.js +2 -2
  183. package/dist/SectionFrame/index.js +2 -2
  184. package/dist/SegmentedControl/index.js +7 -7
  185. package/dist/Select/index.js +4 -4
  186. package/dist/SelectionBar/index.js +6 -6
  187. package/dist/SetupWizard/index.js +6 -6
  188. package/dist/ShareDialog/index.js +11 -11
  189. package/dist/SheetColumnEditor/index.js +16 -16
  190. package/dist/SheetGrid/index.js +12 -12
  191. package/dist/Shortcut/index.js +3 -3
  192. package/dist/SidePanel/SidePanel.d.ts +10 -3
  193. package/dist/SidePanel/SidePanelBase.d.ts +3 -1
  194. package/dist/SidePanel/index.js +5 -5
  195. package/dist/{SidePanel-VXKUKLOJ.css → SidePanel-BKWT6Q6Z.css} +36 -0
  196. package/dist/SidebarNav/SidebarNav.d.ts +52 -3
  197. package/dist/SidebarNav/index.js +1 -1
  198. package/dist/{SidebarNav-VTQ3G4AE.css → SidebarNav-E7PZGGA6.css} +132 -7
  199. package/dist/Skeleton/index.js +1 -1
  200. package/dist/{Skeleton-7ZA5ETJM.css → Skeleton-GIXV3KK5.css} +3 -1
  201. package/dist/SlideCompare/index.js +5 -5
  202. package/dist/SlideFilmstrip/index.js +8 -8
  203. package/dist/SlideGrid/index.js +4 -4
  204. package/dist/SlideStage/index.js +3 -3
  205. package/dist/SourceEditor/index.js +2 -2
  206. package/dist/StatusCard/index.js +5 -5
  207. package/dist/Switcher/index.js +12 -12
  208. package/dist/TableCells/index.js +5 -5
  209. package/dist/Tabs/index.js +6 -6
  210. package/dist/Tag/Tag.d.ts +9 -2
  211. package/dist/Tag/index.js +1 -1
  212. package/dist/{Tag-JTJVZM2D.css → Tag-WLDOROB5.css} +24 -0
  213. package/dist/TagsInput/index.js +6 -6
  214. package/dist/ThemeGallery/index.js +5 -5
  215. package/dist/ThemeSwitcher/index.js +8 -8
  216. package/dist/ThinkingIndicator/ThinkingIndicator.d.ts +1 -1
  217. package/dist/ThinkingIndicator/index.js +1 -1
  218. package/dist/{ThinkingIndicator-JVF52N7L.css → ThinkingIndicator-S7ZL2C77.css} +10 -2
  219. package/dist/ThreadSummary/ThreadSummary.d.ts +43 -0
  220. package/dist/ThreadSummary/index.d.ts +4 -0
  221. package/dist/ThreadSummary/index.js +6 -0
  222. package/dist/ThreadSummary-AGR4NDMD.css +90 -0
  223. package/dist/TimeRangePicker/index.js +12 -12
  224. package/dist/TimeWindowPicker/index.js +10 -10
  225. package/dist/Toaster/index.js +2 -2
  226. package/dist/Toolbar/index.js +3 -3
  227. package/dist/Tooltip/Tooltip.d.ts +30 -3
  228. package/dist/Tooltip/index.js +3 -3
  229. package/dist/TreeCanvas/index.js +7 -7
  230. package/dist/TreeGrid/index.js +3 -3
  231. package/dist/ValueField/index.js +9 -9
  232. package/dist/VersionCompare/index.js +9 -9
  233. package/dist/VersionTimeline/index.js +4 -4
  234. package/dist/WidgetFrame/index.js +2 -2
  235. package/dist/{chunk-WCDPFTJZ.js → chunk-25JQNHTC.js} +92 -28
  236. package/dist/{chunk-ZKLEAK7M.js → chunk-2H6YDUR5.js} +7 -7
  237. package/dist/{chunk-7FF6CZW5.js → chunk-2KJCUCVE.js} +36 -8
  238. package/dist/{chunk-6LXS3X7A.js → chunk-2L4WHYMT.js} +1 -1
  239. package/dist/{chunk-6G6WHTC7.js → chunk-2O5CMV76.js} +1 -1
  240. package/dist/chunk-2TOGGCDM.js +50 -0
  241. package/dist/{chunk-7PJFUQMY.js → chunk-2ZSCHQOA.js} +1 -1
  242. package/dist/chunk-3BRXEMYT.js +46 -0
  243. package/dist/{chunk-H22SR76M.js → chunk-3H6OZUZ3.js} +1 -1
  244. package/dist/{chunk-VK45YJLH.js → chunk-3IWZVEXA.js} +2 -2
  245. package/dist/{chunk-I33UIUZD.js → chunk-3QQIGMY3.js} +49 -14
  246. package/dist/{chunk-NUZHC6MM.js → chunk-4ITETIGZ.js} +12 -1
  247. package/dist/{chunk-FQI62PIZ.js → chunk-4RYELYWG.js} +2 -2
  248. package/dist/{chunk-LCZULGMB.js → chunk-57BFL323.js} +2 -2
  249. package/dist/{chunk-73GUXYYE.js → chunk-5AHNW5CP.js} +1 -1
  250. package/dist/{chunk-FFGEJUAP.js → chunk-5ILRWUE7.js} +2 -2
  251. package/dist/{chunk-S5QJZOPL.js → chunk-5K5SZGBI.js} +1 -1
  252. package/dist/{chunk-LM6VYJTV.js → chunk-5YXMKZUA.js} +1 -1
  253. package/dist/{chunk-5XBNJNSO.js → chunk-65RFU7LF.js} +1 -1
  254. package/dist/{chunk-WKKWF277.js → chunk-6IOQWMYJ.js} +2 -2
  255. package/dist/{chunk-7MGXHCVK.js → chunk-6M2N6ETA.js} +1 -1
  256. package/dist/{chunk-OWHETZIU.js → chunk-6SFDL4QH.js} +1 -1
  257. package/dist/{chunk-JD7P2GJP.js → chunk-6YBBQAEM.js} +1 -1
  258. package/dist/{chunk-WK4FQPYW.js → chunk-77VOASOY.js} +5 -5
  259. package/dist/{chunk-UYF2B2TH.js → chunk-7ELFH3RJ.js} +1 -1
  260. package/dist/{chunk-CYYBE2MM.js → chunk-7U6PK242.js} +1 -1
  261. package/dist/{chunk-VG3SIJ3M.js → chunk-AFLS26AC.js} +2 -2
  262. package/dist/{chunk-JQEXAH7G.js → chunk-AMUXSJ2A.js} +2 -2
  263. package/dist/{chunk-4XF7ENQA.js → chunk-AOJ6ZA77.js} +2 -2
  264. package/dist/{chunk-TJIBTHWJ.js → chunk-B3X4DHRB.js} +2 -2
  265. package/dist/{chunk-BFM5G2Z6.js → chunk-BSAU7QRW.js} +1 -1
  266. package/dist/chunk-C4256UXE.js +21 -0
  267. package/dist/{chunk-4MRFLHJC.js → chunk-C46DDVTK.js} +1 -1
  268. package/dist/{chunk-5EFLA6BW.js → chunk-C75WZMXG.js} +2 -2
  269. package/dist/{chunk-YB64PWIN.js → chunk-C7UHDM7Y.js} +1 -1
  270. package/dist/{chunk-5BOFC5OP.js → chunk-CF4M6N6A.js} +20 -4
  271. package/dist/{chunk-ANTAQAR4.js → chunk-CMAZZY2I.js} +7 -1
  272. package/dist/{chunk-MLDTLZAO.js → chunk-D2GT3CR4.js} +3 -3
  273. package/dist/{chunk-57AKYFML.js → chunk-DD7RBNT4.js} +3 -3
  274. package/dist/{chunk-MUFBHVCT.js → chunk-DWQYV5AV.js} +2 -2
  275. package/dist/{chunk-CNEHFH2A.js → chunk-EAHEJNVJ.js} +1 -1
  276. package/dist/chunk-EALRMP7N.js +69 -0
  277. package/dist/{chunk-E35HYQMK.js → chunk-EBVZHVPD.js} +12 -5
  278. package/dist/{chunk-M73MMEZY.js → chunk-ED4A6Q24.js} +1 -1
  279. package/dist/{chunk-6LN64KGG.js → chunk-F7HZYTZT.js} +6 -3
  280. package/dist/{chunk-YQDRJZ5J.js → chunk-FKAJBN6G.js} +8 -8
  281. package/dist/{chunk-RTMNULTL.js → chunk-FLW5U7YS.js} +2 -2
  282. package/dist/{chunk-JMTBK55P.js → chunk-FVZPSTL2.js} +1 -1
  283. package/dist/{chunk-GHQG4VZA.js → chunk-G3CACE5L.js} +3 -3
  284. package/dist/{chunk-SNIPM6K7.js → chunk-G6ZFSUIH.js} +3 -3
  285. package/dist/chunk-GP5TNTZH.js +386 -0
  286. package/dist/{chunk-7KBNFFM3.js → chunk-GVPUCEWH.js} +6 -3
  287. package/dist/{chunk-6R334YT3.js → chunk-GZVAZ3LL.js} +2 -2
  288. package/dist/{chunk-KL6A7JGH.js → chunk-HA2PL7PA.js} +2 -2
  289. package/dist/{chunk-2IIHMJMZ.js → chunk-HCUECVZ3.js} +2 -2
  290. package/dist/{chunk-N2BF272H.js → chunk-HF5L56YQ.js} +1 -1
  291. package/dist/{chunk-Q2T4L6ML.js → chunk-HFOTRZFU.js} +4 -4
  292. package/dist/{chunk-2STOSJT3.js → chunk-HQFOZJQ4.js} +7 -7
  293. package/dist/chunk-HTBTAIH6.js +37 -0
  294. package/dist/{chunk-BRLZXYPA.js → chunk-I4IUX3JF.js} +1 -1
  295. package/dist/{chunk-BXCL6P5Z.js → chunk-I4PBFJGX.js} +1 -1
  296. package/dist/{chunk-ADGNISEI.js → chunk-IAP7APOX.js} +5 -5
  297. package/dist/{chunk-BT3GB7HC.js → chunk-IRONPJB4.js} +3 -3
  298. package/dist/chunk-ISQANI6Q.js +9 -0
  299. package/dist/chunk-IUBOLGHG.js +140 -0
  300. package/dist/{chunk-O222F2IX.js → chunk-IUWP2LSE.js} +6 -6
  301. package/dist/{chunk-3JXX5S3Z.js → chunk-IYI6HWKN.js} +3 -3
  302. package/dist/{chunk-R5OATXWU.js → chunk-JHQGNFN3.js} +36 -13
  303. package/dist/{chunk-CSXJIIO4.js → chunk-JV6JM6W6.js} +1 -1
  304. package/dist/{chunk-ZQEJSEPS.js → chunk-K6Y6CDEZ.js} +2 -2
  305. package/dist/chunk-K774LUN3.js +20 -0
  306. package/dist/{chunk-LOWQK2PB.js → chunk-KJR5X4II.js} +4 -4
  307. package/dist/{chunk-45M73G5A.js → chunk-KLAVEJIO.js} +4 -4
  308. package/dist/{chunk-53J2YNQA.js → chunk-L5VU3LZT.js} +1 -1
  309. package/dist/{chunk-VERJCAJ4.js → chunk-LBGKLYBY.js} +1 -1
  310. package/dist/{chunk-PRN5IP2R.js → chunk-LMEMH6DO.js} +1 -1
  311. package/dist/{chunk-I22MUEG7.js → chunk-LNQSNXGJ.js} +1 -1
  312. package/dist/chunk-LQRN2XZK.js +87 -0
  313. package/dist/{chunk-HEA6TERQ.js → chunk-LSOR77RZ.js} +1 -1
  314. package/dist/{chunk-222VILSP.js → chunk-LVJGN5II.js} +1 -1
  315. package/dist/{chunk-AYHIF6DH.js → chunk-LZNPL266.js} +1 -1
  316. package/dist/{chunk-R45VM5EX.js → chunk-MMV7NEAC.js} +1 -1
  317. package/dist/chunk-MPYRC3GO.js +244 -0
  318. package/dist/{chunk-37U3Z65B.js → chunk-MVMVMHYI.js} +1 -1
  319. package/dist/{chunk-MP7DGKB6.js → chunk-N2T7Y5KR.js} +2 -2
  320. package/dist/{chunk-NKBKQEKS.js → chunk-NFXCJGHG.js} +1 -1
  321. package/dist/{chunk-OZAZHM55.js → chunk-NKBKHOMU.js} +1 -1
  322. package/dist/{chunk-MGQKF7GK.js → chunk-NN475NAP.js} +1 -1
  323. package/dist/{chunk-6EWNMSS4.js → chunk-NNZRTR5M.js} +2 -2
  324. package/dist/{chunk-JT7WRPZ6.js → chunk-NTRKC2JV.js} +1 -1
  325. package/dist/{chunk-63GBSOLU.js → chunk-NXBCAXP5.js} +2 -2
  326. package/dist/{chunk-NR4CPM4T.js → chunk-NXFTCPF6.js} +1 -1
  327. package/dist/chunk-O3MYBNRO.js +80 -0
  328. package/dist/{chunk-RMEBFYL7.js → chunk-O6EV6GKI.js} +1 -1
  329. package/dist/{chunk-YL7AR6PR.js → chunk-O7KG4CXB.js} +3 -3
  330. package/dist/{chunk-FB3TCNQP.js → chunk-O7N6W52M.js} +3 -3
  331. package/dist/{chunk-2FMBZCFR.js → chunk-OAHRMR4U.js} +1 -1
  332. package/dist/chunk-ONHYFU7D.js +25 -0
  333. package/dist/{chunk-Z2MZTI3H.js → chunk-ONNXUS5Y.js} +1 -1
  334. package/dist/{chunk-T24HBEU6.js → chunk-OOOVL77Y.js} +1 -1
  335. package/dist/{chunk-CZQ7UITX.js → chunk-P6F3PE4V.js} +3 -3
  336. package/dist/{chunk-BLGBD2D2.js → chunk-P7HMY3BQ.js} +4 -4
  337. package/dist/{chunk-TPIMOGOZ.js → chunk-PEBQMX5X.js} +1 -1
  338. package/dist/{chunk-4TMBAOXK.js → chunk-PW57R4BN.js} +1 -1
  339. package/dist/chunk-PX5BOALQ.js +13 -0
  340. package/dist/{chunk-HQOEAUDJ.js → chunk-PXLS6JKL.js} +2 -2
  341. package/dist/{chunk-CFTBESST.js → chunk-Q6TCUSQA.js} +2 -2
  342. package/dist/{chunk-ZWXHTXZO.js → chunk-QGEDXYLB.js} +2 -2
  343. package/dist/{chunk-WTXCK46H.js → chunk-R2QBQ6NO.js} +1 -1
  344. package/dist/{chunk-OBPINJNO.js → chunk-SEKO6P3Y.js} +3 -3
  345. package/dist/{chunk-CLJGFOTV.js → chunk-SKGOKLJD.js} +31 -18
  346. package/dist/{chunk-KHJIEPZV.js → chunk-SM4P2SHB.js} +2 -2
  347. package/dist/{chunk-B2YSFWUG.js → chunk-SYVQXMLO.js} +9 -9
  348. package/dist/{chunk-UY3FWQWG.js → chunk-T4IEESXN.js} +128 -12
  349. package/dist/{chunk-TPCBPGSB.js → chunk-T7WESRZF.js} +3 -3
  350. package/dist/chunk-TDFLCUBE.js +6 -0
  351. package/dist/{chunk-Z6JKZI4E.js → chunk-TGCGLKD4.js} +1 -1
  352. package/dist/chunk-TRXTO3WC.js +114 -0
  353. package/dist/{chunk-H5XTJ7GJ.js → chunk-TUEM2XIW.js} +1 -1
  354. package/dist/{chunk-4AUTALJA.js → chunk-U2IQNDDR.js} +1 -1
  355. package/dist/{chunk-IVTQWOXV.js → chunk-ULYHDP7U.js} +1 -1
  356. package/dist/{chunk-DGSK4LLS.js → chunk-V6WDJUYK.js} +1 -1
  357. package/dist/{chunk-5CEQ3HLH.js → chunk-VGOWSOUA.js} +6 -6
  358. package/dist/{chunk-TKUAGWNR.js → chunk-WT3B76MG.js} +1 -1
  359. package/dist/{chunk-D7G2QGET.js → chunk-X3US25XJ.js} +1 -1
  360. package/dist/{chunk-GPFYITOF.js → chunk-X7VZQKIW.js} +1 -1
  361. package/dist/{chunk-L4HHWG4V.js → chunk-XA2QKGBJ.js} +3 -3
  362. package/dist/{chunk-HPI5J6AR.js → chunk-XGLMPPDW.js} +2 -2
  363. package/dist/{chunk-DV5L2GRY.js → chunk-XJMES7AE.js} +1 -1
  364. package/dist/{chunk-5NJMSYDZ.js → chunk-XNC3M4IN.js} +1 -1
  365. package/dist/{chunk-C667GCU7.js → chunk-XXDB6KPV.js} +6 -3
  366. package/dist/{chunk-EAIOXW2W.js → chunk-XY4O2XMR.js} +8 -14
  367. package/dist/{chunk-KTIQSSME.js → chunk-XZY6S3UC.js} +6 -3
  368. package/dist/{chunk-7KHM2FZH.js → chunk-YGRTX67J.js} +1 -1
  369. package/dist/{chunk-RIAPCEB5.js → chunk-YM77TZ7Q.js} +5 -5
  370. package/dist/{chunk-OQG4P5KU.js → chunk-YOJAGKTS.js} +2 -2
  371. package/dist/chunk-YP2FS6SH.js +54 -0
  372. package/dist/{chunk-LMQG3VPG.js → chunk-YQ7Q52XU.js} +1 -1
  373. package/dist/{chunk-G4CGDUCP.js → chunk-YRNNUCQP.js} +1 -1
  374. package/dist/{chunk-NHLNHH4J.js → chunk-ZB3E2Z4Y.js} +1 -1
  375. package/dist/{chunk-IL3XLDW7.js → chunk-ZDWAIVWL.js} +1 -1
  376. package/dist/{chunk-2PIH6JHJ.js → chunk-ZXTDWTXS.js} +1 -1
  377. package/dist/generated/index.d.ts +15 -0
  378. package/dist/generated/index.js +181 -164
  379. package/dist/index.js +181 -164
  380. package/dist/styles.css +2566 -138
  381. package/dist/utils/focusModality.d.ts +14 -0
  382. package/dist/utils/heldHint.d.ts +6 -0
  383. package/dist/utils/index.d.ts +1 -1
  384. package/dist/utils/index.js +1 -1
  385. package/package.json +3 -3
  386. package/dist/ArtifactKinds-O3CALPVX.css +0 -16
  387. package/dist/{chunk-PLNJEDGI.js → chunk-I4IO56EY.js} +1 -1
  388. package/dist/{chunk-CDFQ7MQK.js → chunk-KLWWNV25.js} +0 -0
  389. package/dist/{chunk-624X3RVA.js → chunk-O55JQ7BE.js} +1 -1
@@ -1,20 +1,20 @@
1
- export { VERSION_COMPARE_LABELS, VERSION_COMPARE_LENSES, VersionCompare } from '../chunk-Z6JKZI4E.js';
1
+ export { VERSION_COMPARE_LABELS, VERSION_COMPARE_LENSES, VersionCompare } from '../chunk-TGCGLKD4.js';
2
2
  import '../chunk-AOFVXE6V.js';
3
3
  import '../chunk-36WK24AI.js';
4
- import '../chunk-6R334YT3.js';
5
- import '../chunk-2IIHMJMZ.js';
4
+ import '../chunk-GZVAZ3LL.js';
5
+ import '../chunk-HCUECVZ3.js';
6
6
  import '../chunk-EGMQURBR.js';
7
7
  import '../chunk-CYQBDZ6M.js';
8
+ import '../chunk-YOJAGKTS.js';
8
9
  import '../chunk-PPUR46MK.js';
9
- import '../chunk-MLDTLZAO.js';
10
- import '../chunk-PQADV6P6.js';
11
- import '../chunk-OQG4P5KU.js';
12
10
  import '../chunk-DGXZ635L.js';
11
+ import '../chunk-XSPCITPN.js';
13
12
  import '../chunk-OMV5W53A.js';
14
13
  import '../chunk-2YTOOH3A.js';
15
- import '../chunk-XSPCITPN.js';
16
- import '../chunk-H5XTJ7GJ.js';
14
+ import '../chunk-TUEM2XIW.js';
15
+ import '../chunk-4ITETIGZ.js';
17
16
  import '../chunk-UAUP6XGK.js';
18
- import '../chunk-NUZHC6MM.js';
17
+ import '../chunk-D2GT3CR4.js';
18
+ import '../chunk-PQADV6P6.js';
19
19
  import '../chunk-UT6CW3C7.js';
20
20
  import '../chunk-ODEQTPFM.js';
@@ -1,9 +1,9 @@
1
- export { VersionTimeline } from '../chunk-53J2YNQA.js';
2
- import '../chunk-N2BF272H.js';
1
+ export { VersionTimeline } from '../chunk-L5VU3LZT.js';
2
+ import '../chunk-HF5L56YQ.js';
3
3
  import '../chunk-EJNJMHQG.js';
4
4
  import '../chunk-RE3FBGQQ.js';
5
- import '../chunk-BT3GB7HC.js';
6
- import '../chunk-KTIQSSME.js';
5
+ import '../chunk-IRONPJB4.js';
6
+ import '../chunk-XZY6S3UC.js';
7
7
  import '../chunk-4MJN2KN6.js';
8
8
  import '../chunk-DGXZ635L.js';
9
9
  import '../chunk-XSPCITPN.js';
@@ -1,5 +1,5 @@
1
- export { WidgetFrame } from '../chunk-S5QJZOPL.js';
2
- import '../chunk-BRLZXYPA.js';
1
+ export { WidgetFrame } from '../chunk-5K5SZGBI.js';
2
+ import '../chunk-I4IUX3JF.js';
3
3
  import '../chunk-EJNJMHQG.js';
4
4
  import '../chunk-RE3FBGQQ.js';
5
5
  import '../chunk-UT6CW3C7.js';
@@ -4,31 +4,78 @@ import { HIT_AREA_CLASS } from './chunk-2YTOOH3A.js';
4
4
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
6
6
  import './HitArea-QUOS6ZDJ.css';
7
- import './SidebarNav-VTQ3G4AE.css';
8
- import { createContext, useId, useContext, useState } from 'react';
7
+ import './SidebarNav-E7PZGGA6.css';
8
+ import { createContext, useId, useState, useContext } from 'react';
9
9
  import { ChevronDownGlyph } from '@crewlethq/icons/glyphs';
10
10
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
11
11
 
12
12
  var GroupLocked = createContext(false);
13
- function SidebarNav({ label, className, children }) {
14
- return /* @__PURE__ */ jsx("nav", { className: cx("crewlet-sidebar-nav", className), "aria-label": label, children });
13
+ var GroupFolded = createContext(false);
14
+ function SidebarNav({ label, dense = false, className, children }) {
15
+ return /* @__PURE__ */ jsx("nav", { className: cx("crewlet-sidebar-nav", dense && "crewlet-sidebar-nav--dense", className), "aria-label": label, children });
15
16
  }
16
- function NavGroup({ label, action, locked, className, children }) {
17
+ function NavGroup({
18
+ label,
19
+ action,
20
+ locked,
21
+ collapsible = false,
22
+ collapsed,
23
+ defaultCollapsed = false,
24
+ onCollapsedChange,
25
+ className,
26
+ children
27
+ }) {
17
28
  const id = useId();
29
+ const [ownCollapsed, setOwnCollapsed] = useState(defaultCollapsed);
18
30
  const named = label !== void 0 && label !== null && label !== false && label !== "";
19
31
  const groupLocked = named && locked !== void 0 && locked !== "";
32
+ const folds = named && collapsible;
33
+ const folded = folds && (collapsed ?? ownCollapsed);
34
+ function toggle() {
35
+ const next = !folded;
36
+ if (collapsed === void 0) setOwnCollapsed(next);
37
+ onCollapsedChange?.(next);
38
+ }
39
+ const words = /* @__PURE__ */ jsx(LockedLabel, { reason: groupLocked ? locked : void 0, children: label });
20
40
  return /* @__PURE__ */ jsxs(
21
41
  "div",
22
42
  {
23
- className: cx("crewlet-nav-group", groupLocked && "crewlet-nav-group--locked", className),
43
+ className: cx(
44
+ "crewlet-nav-group",
45
+ groupLocked && "crewlet-nav-group--locked",
46
+ folded && "crewlet-nav-group--collapsed",
47
+ className
48
+ ),
24
49
  role: named ? "group" : void 0,
25
50
  "aria-labelledby": named ? id : void 0,
26
51
  children: [
27
52
  named || action ? /* @__PURE__ */ jsxs("div", { className: "crewlet-nav-group__head", children: [
28
- named ? /* @__PURE__ */ jsx("span", { className: "crewlet-nav-group__label", id, children: /* @__PURE__ */ jsx(LockedLabel, { reason: groupLocked ? locked : void 0, children: label }) }) : null,
53
+ folds ? (
54
+ /*
55
+ * THE HEADING IS THE FOLD. Its chevron stands in the glyph column
56
+ * and its words on the label line, so a folded list's headings
57
+ * and rows still read as one grid, and the button is named by the
58
+ * words alone (the chevron is decoration; `aria-expanded` says
59
+ * which way it points).
60
+ */
61
+ /* @__PURE__ */ jsxs(
62
+ "button",
63
+ {
64
+ type: "button",
65
+ className: "crewlet-nav-group__toggle",
66
+ id,
67
+ "aria-expanded": !folded,
68
+ onClick: toggle,
69
+ children: [
70
+ /* @__PURE__ */ jsx("span", { className: "crewlet-nav-group__chevron", "aria-hidden": true, children: /* @__PURE__ */ jsx(ChevronDownGlyph, { size: "xs" }) }),
71
+ /* @__PURE__ */ jsx("span", { className: "crewlet-nav-group__label", children: words })
72
+ ]
73
+ }
74
+ )
75
+ ) : named ? /* @__PURE__ */ jsx("span", { className: "crewlet-nav-group__label", id, children: words }) : null,
29
76
  action ? /* @__PURE__ */ jsx("button", { type: "button", className: "crewlet-nav-group__action", "aria-label": action.label, onClick: action.onClick, children: /* @__PURE__ */ jsx("span", { className: "crewlet-nav-group__action-icon", "aria-hidden": true, children: action.icon }) }) : null
30
77
  ] }) : null,
31
- /* @__PURE__ */ jsx(GroupLocked.Provider, { value: groupLocked, children })
78
+ /* @__PURE__ */ jsx(GroupLocked.Provider, { value: groupLocked, children: /* @__PURE__ */ jsx(GroupFolded.Provider, { value: folded, children }) })
32
79
  ]
33
80
  }
34
81
  );
@@ -52,6 +99,8 @@ function NavItem({
52
99
  current = false,
53
100
  disabledReason,
54
101
  locked,
102
+ unread = false,
103
+ muted = false,
55
104
  title,
56
105
  onPrefetch,
57
106
  renderLink,
@@ -65,10 +114,14 @@ function NavItem({
65
114
  }) {
66
115
  const id = useId();
67
116
  const inLockedGroup = useContext(GroupLocked);
117
+ const inFoldedGroup = useContext(GroupFolded);
68
118
  const [ownExpanded, setOwnExpanded] = useState(defaultExpanded);
69
119
  const open = expanded ?? ownExpanded;
70
120
  const nested = children !== void 0 && children !== null && children !== false;
71
121
  const inert = disabledReason !== void 0;
122
+ const calling = unread && !muted;
123
+ if (inFoldedGroup && !current && !calling) return null;
124
+ const state = muted ? ", muted" : calling && !count && !badge ? ", unread" : "";
72
125
  function toggle() {
73
126
  const next = !open;
74
127
  if (expanded === void 0) setOwnExpanded(next);
@@ -80,7 +133,7 @@ function NavItem({
80
133
  lead ? " " : null,
81
134
  /* @__PURE__ */ jsxs("span", { className: "crewlet-nav-item__label", children: [
82
135
  /* @__PURE__ */ jsx(LockedLabel, { reason: locked, mark: !inLockedGroup, children: label }),
83
- count || badge ? /* @__PURE__ */ jsx(VisuallyHidden, { children: spoken([count, badge]) }) : null
136
+ count || badge || state ? /* @__PURE__ */ jsx(VisuallyHidden, { children: `${spoken([count, badge])}${state}` }) : null
84
137
  ] }),
85
138
  count ? /* @__PURE__ */ jsx(Figure, { figure: count, mark: count.mark, className: "crewlet-nav-item__count" }) : null,
86
139
  badge ? /* @__PURE__ */ jsx(Figure, { figure: badge, className: "crewlet-nav-item__badge" }) : null
@@ -151,25 +204,36 @@ function NavItem({
151
204
  // what a screen reader is told from coming apart; a `data-current` beside
152
205
  // it would be a second answer to one question, and the first stylesheet to
153
206
  // read the wrong one is the one that disagrees.
154
- /* @__PURE__ */ jsxs("div", { className: cx("crewlet-nav-item", className), children: [
155
- /* @__PURE__ */ jsxs("div", { className: "crewlet-nav-item__head", children: [
156
- row,
157
- separateToggle ? /* @__PURE__ */ jsx(
158
- "button",
159
- {
160
- type: "button",
161
- className: "crewlet-nav-item__toggle",
162
- "aria-expanded": open,
163
- "aria-controls": `${id}-children`,
164
- "aria-label": expandLabel ?? (typeof label === "string" ? `${label} sections` : "Sections"),
165
- onClick: toggle,
166
- children: /* @__PURE__ */ jsx("span", { className: cx("crewlet-nav-item__chevron", open && "crewlet-nav-item__chevron--open"), "aria-hidden": true, children: /* @__PURE__ */ jsx(ChevronDownGlyph, { size: "sm" }) })
167
- }
168
- ) : null
169
- ] }),
170
- inert ? /* @__PURE__ */ jsx(VisuallyHidden, { id: `${id}-reason`, children: disabledReason }) : null,
171
- nested ? /* @__PURE__ */ jsx("div", { className: "crewlet-nav-item__children", id: `${id}-children`, hidden: !open, children }) : null
172
- ] })
207
+ /* @__PURE__ */ jsxs(
208
+ "div",
209
+ {
210
+ className: cx(
211
+ "crewlet-nav-item",
212
+ calling && "crewlet-nav-item--unread",
213
+ muted && "crewlet-nav-item--muted",
214
+ className
215
+ ),
216
+ children: [
217
+ /* @__PURE__ */ jsxs("div", { className: "crewlet-nav-item__head", children: [
218
+ row,
219
+ separateToggle ? /* @__PURE__ */ jsx(
220
+ "button",
221
+ {
222
+ type: "button",
223
+ className: "crewlet-nav-item__toggle",
224
+ "aria-expanded": open,
225
+ "aria-controls": `${id}-children`,
226
+ "aria-label": expandLabel ?? (typeof label === "string" ? `${label} sections` : "Sections"),
227
+ onClick: toggle,
228
+ children: /* @__PURE__ */ jsx("span", { className: cx("crewlet-nav-item__chevron", open && "crewlet-nav-item__chevron--open"), "aria-hidden": true, children: /* @__PURE__ */ jsx(ChevronDownGlyph, { size: "sm" }) })
229
+ }
230
+ ) : null
231
+ ] }),
232
+ inert ? /* @__PURE__ */ jsx(VisuallyHidden, { id: `${id}-reason`, children: disabledReason }) : null,
233
+ nested ? /* @__PURE__ */ jsx("div", { className: "crewlet-nav-item__children", id: `${id}-children`, hidden: !open, children: /* @__PURE__ */ jsx(GroupFolded.Provider, { value: false, children }) }) : null
234
+ ]
235
+ }
236
+ )
173
237
  );
174
238
  }
175
239
  SidebarNav.Group = NavGroup;
@@ -1,15 +1,15 @@
1
- import { Skeleton } from './chunk-BRLZXYPA.js';
2
- import { PrincipalAvatar } from './chunk-N2BF272H.js';
1
+ import { Skeleton } from './chunk-I4IUX3JF.js';
2
+ import { PrincipalAvatar } from './chunk-HF5L56YQ.js';
3
3
  import { RelativeTime } from './chunk-EJNJMHQG.js';
4
- import { Card } from './chunk-4AUTALJA.js';
5
- import { AvatarStack } from './chunk-BT3GB7HC.js';
6
- import { ArtifactKindGround } from './chunk-NHLNHH4J.js';
7
- import { Checkbox } from './chunk-LMQG3VPG.js';
4
+ import { Card } from './chunk-U2IQNDDR.js';
5
+ import { AvatarStack } from './chunk-IRONPJB4.js';
6
+ import { ArtifactKindGround } from './chunk-ZB3E2Z4Y.js';
8
7
  import { ArtifactAccessGlyph } from './chunk-DOY3KC6I.js';
8
+ import { Checkbox } from './chunk-YQ7Q52XU.js';
9
9
  import { ArtifactKindGlyph } from './chunk-RSKW25Y5.js';
10
10
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
11
11
  import { cx } from './chunk-ODEQTPFM.js';
12
- import './ArtifactKinds-O3CALPVX.css';
12
+ import './ArtifactKinds-3EH4KR3F.css';
13
13
  import './ArtifactCard-B2QE5CVL.css';
14
14
  import { useId } from 'react';
15
15
  import { PinGlyph } from '@crewlethq/icons/glyphs';
@@ -1,6 +1,6 @@
1
- import { Toolbar } from './chunk-NR4CPM4T.js';
2
- import { SegmentedControl } from './chunk-6R334YT3.js';
3
- import { tabId } from './chunk-2IIHMJMZ.js';
1
+ import { Toolbar } from './chunk-NXFTCPF6.js';
2
+ import { SegmentedControl } from './chunk-GZVAZ3LL.js';
3
+ import { tabId } from './chunk-HCUECVZ3.js';
4
4
  import { IconButton } from './chunk-UAUP6XGK.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
6
6
  import './MarkdownEditor-BLCJRGDC.css';
@@ -20,19 +20,26 @@ var MARKDOWN_FORMATS = [
20
20
  "checklist",
21
21
  "table"
22
22
  ];
23
- var WRAP = { bold: "**", italic: "_", code: "`" };
23
+ var MARKDOWN_TEXT_FORMATS = ["strikethrough", "quote", "link"];
24
+ var WRAP = { bold: "**", italic: "_", code: "`", strikethrough: "~~" };
24
25
  var LINE_MARKER = /^(#{1,6} |- \[[ xX]\] |[-*+] |\d+[.)] )/;
25
26
  function insertMarkdown(value, { start, end }, text) {
26
27
  const next = value.slice(0, start) + text + value.slice(end);
27
28
  const caret = start + text.length;
28
29
  return { value: next, selection: { start: caret, end: caret } };
29
30
  }
31
+ var QUOTE_MARKER = /^> ?/;
30
32
  function formatMarkdown(value, selection, format) {
31
33
  switch (format) {
32
34
  case "bold":
33
35
  case "italic":
34
36
  case "code":
37
+ case "strikethrough":
35
38
  return wrap(value, selection, WRAP[format]);
39
+ case "quote":
40
+ return prefixLines(value, selection, () => "> ", () => true, QUOTE_MARKER);
41
+ case "link":
42
+ return link(value, selection);
36
43
  case "heading2":
37
44
  return prefixLines(value, selection, () => "## ", (marker) => marker === "## ");
38
45
  case "heading3":
@@ -74,18 +81,21 @@ function lineSpan(value, { start, end }) {
74
81
  const newline = value.indexOf("\n", last);
75
82
  return [from, newline === -1 ? value.length : newline];
76
83
  }
77
- function prefixLines(value, selection, marker, has) {
84
+ function prefixLines(value, selection, marker, has, pattern = LINE_MARKER) {
78
85
  const [from, to] = lineSpan(value, selection);
79
86
  const lines = value.slice(from, to).split("\n");
80
87
  const single = lines.length === 1;
81
88
  const written = lines.filter((line) => single || line.trim() !== "");
82
- const off = written.length > 0 && written.every((line) => has(LINE_MARKER.exec(line)?.[0] ?? ""));
89
+ const off = written.length > 0 && written.every((line) => {
90
+ const existing = pattern.exec(line)?.[0];
91
+ return existing !== void 0 && has(existing);
92
+ });
83
93
  let index = 0;
84
94
  let caretShift = 0;
85
95
  const caretLine = value.slice(from, selection.start).split("\n").length - 1;
86
96
  const next = lines.map((line, at) => {
87
97
  if (!single && line.trim() === "") return line;
88
- const old = LINE_MARKER.exec(line)?.[0] ?? "";
98
+ const old = pattern.exec(line)?.[0] ?? "";
89
99
  const body = line.slice(old.length);
90
100
  const added = off ? "" : marker(index);
91
101
  index += 1;
@@ -100,6 +110,24 @@ function prefixLines(value, selection, marker, has) {
100
110
  }
101
111
  return { value: result, selection: { start: from, end: from + block.length } };
102
112
  }
113
+ var LINK = /^\[([^\]\n]*)\]\(([^)\s]*)\)$/;
114
+ var LINK_ADDRESS = "https://";
115
+ function link(value, selection) {
116
+ let { start, end } = selection;
117
+ while (start < end && /\s/.test(value[start] ?? "")) start += 1;
118
+ while (end > start && /\s/.test(value[end - 1] ?? "")) end -= 1;
119
+ const selected = value.slice(start, end);
120
+ const existing = LINK.exec(selected);
121
+ if (existing) {
122
+ const label = existing[1] ?? "";
123
+ return { value: value.slice(0, start) + label + value.slice(end), selection: { start, end: start + label.length } };
124
+ }
125
+ const written = `[${selected}](${LINK_ADDRESS})`;
126
+ const result = value.slice(0, start) + written + value.slice(end);
127
+ if (selected === "") return { value: result, selection: { start: start + 1, end: start + 1 } };
128
+ const address = start + selected.length + 3;
129
+ return { value: result, selection: { start: address, end: address + LINK_ADDRESS.length } };
130
+ }
103
131
  var TABLE = "| Column | Column |\n| --- | --- |\n| | |";
104
132
  function table(value, { start, end }) {
105
133
  const before = value.slice(0, start);
@@ -333,4 +361,4 @@ function MarkdownEditor({
333
361
  );
334
362
  }
335
363
 
336
- export { MARKDOWN_FORMATS, MarkdownEditor, formatMarkdown, insertMarkdown, markdownWords };
364
+ export { MARKDOWN_FORMATS, MARKDOWN_TEXT_FORMATS, MarkdownEditor, formatMarkdown, insertMarkdown, markdownWords };
@@ -1,6 +1,6 @@
1
1
  import { Table } from './chunk-75NQV4R4.js';
2
2
  import { DownloadButton } from './chunk-EHFQMY3B.js';
3
- import { StatusCard } from './chunk-RTMNULTL.js';
3
+ import { StatusCard } from './chunk-FLW5U7YS.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
5
  import './ResultTableCard-AP355LQM.css';
6
6
  import { useState } from 'react';
@@ -1,4 +1,4 @@
1
- import { StatusCard } from './chunk-RTMNULTL.js';
1
+ import { StatusCard } from './chunk-FLW5U7YS.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
3
  import './EntityList-DT3BQLUW.css';
4
4
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -0,0 +1,50 @@
1
+ import { heldHint } from './chunk-TDFLCUBE.js';
2
+ import { emojiName } from './chunk-MPYRC3GO.js';
3
+ import { Toolbar } from './chunk-NXFTCPF6.js';
4
+ import { Tooltip } from './chunk-3QQIGMY3.js';
5
+ import { IconButton } from './chunk-UAUP6XGK.js';
6
+ import { cx } from './chunk-ODEQTPFM.js';
7
+ import './ChatScale-L4SIHSKL.css';
8
+ import './MessageActions-Q4F5UH3S.css';
9
+ import { forwardRef } from 'react';
10
+ import { jsx } from 'react/jsx-runtime';
11
+
12
+ function MessageActions({ label = "Message actions", className, children }) {
13
+ return /* @__PURE__ */ jsx(Toolbar, { label, className: cx("crewlet-message-actions", className), children });
14
+ }
15
+ var MessageAction = forwardRef(function MessageAction2({ label, icon, pressed, disabledReason, ...rest }, ref) {
16
+ return /* @__PURE__ */ jsx(Tooltip, { content: heldHint(label, disabledReason), disabled: rest["aria-expanded"] === true || rest["aria-expanded"] === "true", children: /* @__PURE__ */ jsx(
17
+ IconButton,
18
+ {
19
+ ...rest,
20
+ ref,
21
+ label,
22
+ icon,
23
+ size: "md",
24
+ variant: "ghost",
25
+ pressed,
26
+ disabledReason
27
+ }
28
+ ) });
29
+ });
30
+ function QuickReaction({ emoji, name, onPick, label = (said) => `React with ${said}`, disabledReason }) {
31
+ const words = label(name ?? emojiName(emoji));
32
+ return /* @__PURE__ */ jsx(Tooltip, { content: heldHint(words, disabledReason), children: /* @__PURE__ */ jsx(
33
+ "button",
34
+ {
35
+ type: "button",
36
+ className: "crewlet-message-actions__emoji",
37
+ "aria-label": words,
38
+ "aria-disabled": disabledReason ? true : void 0,
39
+ onClick: () => {
40
+ if (!disabledReason) onPick();
41
+ },
42
+ children: /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: emoji })
43
+ }
44
+ ) });
45
+ }
46
+ function ActionDivider() {
47
+ return /* @__PURE__ */ jsx("span", { className: "crewlet-message-actions__divider", "aria-hidden": "true" });
48
+ }
49
+
50
+ export { ActionDivider, MessageAction, MessageActions, QuickReaction };
@@ -1,5 +1,5 @@
1
+ import { Tag } from './chunk-LBGKLYBY.js';
1
2
  import { normalizeHex } from './chunk-7W3LYIOC.js';
2
- import { Tag } from './chunk-VERJCAJ4.js';
3
3
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
5
  import './ContrastBadge-CBZPGG3G.css';
@@ -0,0 +1,46 @@
1
+ import { PersonRow } from './chunk-EALRMP7N.js';
2
+ import { cx } from './chunk-ODEQTPFM.js';
3
+ import './PersonRow-V5GTPNVP.css';
4
+ import './MentionMenu-4NAQ45S4.css';
5
+ import { jsx, jsxs } from 'react/jsx-runtime';
6
+
7
+ var MENTION_MENU_LABELS = {
8
+ hints: ["\u2191\u2193 to move", "Enter or Tab to choose", "Esc to close"]
9
+ };
10
+ function MentionMenu({ id, label, options, active, onPick, onHover, listRef, footer, labels: overrides, className }) {
11
+ const labels = overrides ? { ...MENTION_MENU_LABELS, ...overrides } : MENTION_MENU_LABELS;
12
+ const foot = footer === void 0 ? /* @__PURE__ */ jsx("div", { className: "crewlet-mention-menu__footer", children: labels.hints.map((hint) => /* @__PURE__ */ jsx("span", { children: hint }, hint)) }) : footer === null ? null : /* @__PURE__ */ jsx("div", { className: "crewlet-mention-menu__footer", children: footer });
13
+ return /* @__PURE__ */ jsxs("div", { className: cx("crewlet-mention-menu", className), children: [
14
+ /* @__PURE__ */ jsx("div", { className: "crewlet-mention-menu__label", "aria-hidden": "true", children: label }),
15
+ /* @__PURE__ */ jsx("ul", { ref: listRef, id, role: "listbox", "aria-label": label, className: "crewlet-mention-menu__list", children: options.map((option, index) => /* @__PURE__ */ jsx(
16
+ PersonRow,
17
+ {
18
+ as: "option",
19
+ id: `${id}-${index}`,
20
+ density: "compact",
21
+ avatar: option.mark,
22
+ name: option.label,
23
+ detail: option.detail,
24
+ meta: option.note,
25
+ selected: index === active,
26
+ highlighted: index === active,
27
+ onMouseDown: (event) => {
28
+ event.preventDefault();
29
+ onPick(option, index);
30
+ },
31
+ onMouseEnter: () => onHover(index)
32
+ },
33
+ option.id
34
+ )) }),
35
+ foot
36
+ ] });
37
+ }
38
+ function mentionQuery(text, caret) {
39
+ const before = text.slice(0, Math.max(0, Math.min(caret, text.length)));
40
+ const match = /(^|\s)([@#])([\p{L}\p{N}_-]*)$/u.exec(before);
41
+ if (!match) return null;
42
+ const query = match[3] ?? "";
43
+ return { trigger: match[2], query, start: before.length - query.length - 1 };
44
+ }
45
+
46
+ export { MENTION_MENU_LABELS, MentionMenu, mentionQuery };
@@ -1,4 +1,4 @@
1
- import { Tag } from './chunk-VERJCAJ4.js';
1
+ import { Tag } from './chunk-LBGKLYBY.js';
2
2
  import { RelativeTime } from './chunk-EJNJMHQG.js';
3
3
  import { HIT_AREA_CLASS } from './chunk-2YTOOH3A.js';
4
4
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
@@ -1,7 +1,7 @@
1
- import { useListbox, useOptionKeys, useHighlightRest } from './chunk-7KHM2FZH.js';
1
+ import { useListbox, useOptionKeys, useHighlightRest } from './chunk-YGRTX67J.js';
2
2
  import { useLayerContainer, viewportBounds, anchorGone, placePopup, LAYER_GAP, LAYER_REPOSITION_EVENT } from './chunk-OMV5W53A.js';
3
3
  import { HIT_AREA_CLASS } from './chunk-2YTOOH3A.js';
4
- import { useFocusModality, returnFocus } from './chunk-NUZHC6MM.js';
4
+ import { useFocusModality, returnFocus } from './chunk-4ITETIGZ.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
6
6
  import './HitArea-QUOS6ZDJ.css';
7
7
  import './Select-6BQPBOHH.css';
@@ -1,5 +1,6 @@
1
1
  import { useLayerContainer, viewportBounds, LAYER_GAP, anchorGone, placePopup, LAYER_REPOSITION_EVENT } from './chunk-OMV5W53A.js';
2
- import { usePopupLayer } from './chunk-H5XTJ7GJ.js';
2
+ import { usePopupLayer } from './chunk-TUEM2XIW.js';
3
+ import { isVisibleFocus } from './chunk-4ITETIGZ.js';
3
4
  import { cx } from './chunk-ODEQTPFM.js';
4
5
  import './Tooltip-LKQF7CE4.css';
5
6
  import { useId, useState, useRef, useCallback, useEffect, useLayoutEffect, cloneElement } from 'react';
@@ -10,6 +11,14 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
10
11
  function ms(value) {
11
12
  return Number.parseFloat(value);
12
13
  }
14
+ function composeHandlers(first, second) {
15
+ if (typeof first !== "function") return second;
16
+ if (typeof second !== "function") return first;
17
+ return (...args) => {
18
+ first(...args);
19
+ second(...args);
20
+ };
21
+ }
13
22
  function attach(ref, el) {
14
23
  if (typeof ref === "function") {
15
24
  const release = ref(el);
@@ -33,7 +42,9 @@ function Tooltip({
33
42
  openDelay = OPEN_DELAY,
34
43
  closeDelay = CLOSE_DELAY,
35
44
  className,
36
- children
45
+ children,
46
+ ref: forwardedRef,
47
+ ...forwarded
37
48
  }) {
38
49
  const id = useId();
39
50
  const panelId = `${id}-tooltip`;
@@ -41,7 +52,7 @@ function Tooltip({
41
52
  const anchor = useRef(null);
42
53
  const panel = useRef(null);
43
54
  const timer = useRef(void 0);
44
- const over = useRef({ pointer: false, focus: false });
55
+ const over = useRef({ pointer: false, focus: false, pressed: false });
45
56
  const [place, setPlace] = useState(null);
46
57
  const container = useLayerContainer();
47
58
  const clear = useCallback(() => {
@@ -76,7 +87,7 @@ function Tooltip({
76
87
  [clear]
77
88
  );
78
89
  const layer = usePopupLayer({ open, onDismiss: () => {
79
- over.current = { pointer: false, focus: false };
90
+ over.current = { pointer: false, focus: false, pressed: false };
80
91
  clear();
81
92
  setOpen(false);
82
93
  } });
@@ -138,41 +149,65 @@ function Tooltip({
138
149
  if (!open) setPlace(null);
139
150
  }, [open]);
140
151
  const child = children;
141
- const describedBy = child.props["aria-describedby"];
152
+ const outer = forwarded;
153
+ const passed = { ...outer };
154
+ for (const key of Object.keys(outer)) {
155
+ if (/^on[A-Z]/.test(key)) passed[key] = composeHandlers(child.props[key], outer[key]);
156
+ }
157
+ if (outer["style"] !== void 0) passed["style"] = { ...child.props["style"], ...outer["style"] };
158
+ const describedBy = cx(child.props["aria-describedby"], outer["aria-describedby"]) || void 0;
142
159
  const ownRef = child.props["ref"];
160
+ const call = (key, event) => (passed[key] ?? child.props[key])?.(event);
143
161
  const trigger = cloneElement(child, {
162
+ ...passed,
144
163
  ref: (el) => {
145
164
  anchor.current = el;
146
165
  layer.insideRef(el);
147
166
  const release = attach(ownRef, el);
167
+ const releaseForwarded = attach(forwardedRef, el);
148
168
  return () => {
149
169
  anchor.current = null;
150
170
  layer.insideRef(null);
151
171
  release();
172
+ releaseForwarded();
152
173
  };
153
174
  },
154
175
  "aria-describedby": open ? cx(describedBy, panelId) : describedBy,
155
176
  onPointerEnter: (event) => {
156
177
  over.current.pointer = true;
157
- show(openDelay);
158
- child.props["onPointerEnter"]?.(event);
178
+ if (!over.current.pressed) show(openDelay);
179
+ call("onPointerEnter", event);
159
180
  },
160
181
  onPointerLeave: (event) => {
161
182
  over.current.pointer = false;
183
+ over.current.pressed = false;
162
184
  hide(closeDelay);
163
- child.props["onPointerLeave"]?.(event);
185
+ call("onPointerLeave", event);
186
+ },
187
+ // A press answers the tip: it closes at once and stays shut while the
188
+ // pointer is still on the control, whatever focus the press brought.
189
+ onPointerDown: (event) => {
190
+ over.current.pressed = true;
191
+ over.current.focus = false;
192
+ clear();
193
+ setOpen(false);
194
+ call("onPointerDown", event);
164
195
  },
165
- // Focus opens with NO delay: a keyboard reader who reached this control
166
- // asked for it, and there is no pointer passing over anything.
196
+ // KEYBOARD focus opens with NO delay: a keyboard reader who reached this
197
+ // control asked for it, and there is no pointer passing over anything.
198
+ // Any other focus (a press, a layer handing focus back) neither opens the
199
+ // tip nor holds it open.
167
200
  onFocus: (event) => {
168
- over.current.focus = true;
169
- show(0);
170
- child.props["onFocus"]?.(event);
201
+ const visible = !over.current.pressed && isVisibleFocus(event.currentTarget);
202
+ over.current.focus = visible;
203
+ if (visible) show(0);
204
+ call("onFocus", event);
171
205
  },
172
206
  onBlur: (event) => {
173
207
  over.current.focus = false;
208
+ over.current.pressed = false;
174
209
  hide(0);
175
- child.props["onBlur"]?.(event);
210
+ call("onBlur", event);
176
211
  }
177
212
  });
178
213
  const style = place ? { left: place.left, top: place.top, zIndex: layer.zIndex } : (
@@ -64,5 +64,16 @@ function returnFocus(el, options) {
64
64
  clear();
65
65
  return false;
66
66
  }
67
+ function isVisibleFocus(el) {
68
+ let visible;
69
+ try {
70
+ visible = el.matches(":focus-visible");
71
+ } catch {
72
+ visible = true;
73
+ }
74
+ if (!visible) return false;
75
+ const pointer = el.ownerDocument.documentElement.getAttribute(FOCUS_MODALITY_ATTRIBUTE) === "pointer";
76
+ return !(pointer && el.hasAttribute(FOCUS_RETURNED_ATTRIBUTE));
77
+ }
67
78
 
68
- export { FOCUS_MODALITY_ATTRIBUTE, FOCUS_RETURNED_ATTRIBUTE, returnFocus, trackFocusModality, useFocusModality };
79
+ export { FOCUS_MODALITY_ATTRIBUTE, FOCUS_RETURNED_ATTRIBUTE, isVisibleFocus, returnFocus, trackFocusModality, useFocusModality };
@@ -1,6 +1,6 @@
1
1
  import { Note } from './chunk-5SZGKSGL.js';
2
- import { CanvasToolbar, toolForKey } from './chunk-KL6A7JGH.js';
3
- import { IDENTITY_VIEW, Canvas } from './chunk-OBPINJNO.js';
2
+ import { CanvasToolbar, toolForKey } from './chunk-HA2PL7PA.js';
3
+ import { IDENTITY_VIEW, Canvas } from './chunk-SEKO6P3Y.js';
4
4
  import { IconButton } from './chunk-UAUP6XGK.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
6
6
  import './CanvasBoard-U6LR5F6H.css';