@crewlethq/ui 0.55.0 → 0.57.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 (315) hide show
  1. package/README.md +97 -4
  2. package/dist/Accordion/index.js +2 -2
  3. package/dist/AgentHandoffPanel/index.js +14 -9
  4. package/dist/AppShell/AppShell.d.ts +84 -1
  5. package/dist/AppShell/ResizeHandle.d.ts +74 -0
  6. package/dist/AppShell/index.d.ts +7 -2
  7. package/dist/AppShell/index.js +6 -4
  8. package/dist/AppShell/regions.d.ts +36 -0
  9. package/dist/AppShell/storedWidth.d.ts +47 -0
  10. package/dist/{AppShell-5LPXYUV3.css → AppShell-ZVCJRGXH.css} +172 -1
  11. package/dist/ArrangeFrame/index.js +2 -2
  12. package/dist/ArrangeList/index.js +5 -5
  13. package/dist/ArtifactBar/ArtifactBar.d.ts +13 -2
  14. package/dist/ArtifactBar/index.js +9 -8
  15. package/dist/{ArtifactBar-UMZCTARR.css → ArtifactBar-LEBMR35Y.css} +19 -1
  16. package/dist/ArtifactCard/index.js +6 -6
  17. package/dist/ArtifactNameCell/ArtifactNameCell.d.ts +7 -1
  18. package/dist/ArtifactNameCell/index.js +1 -1
  19. package/dist/ArtifactPanel/ArtifactPanel.d.ts +11 -17
  20. package/dist/ArtifactPanel/index.d.ts +3 -0
  21. package/dist/ArtifactPanel/index.js +8 -2
  22. package/dist/ArtifactPanel-TN4FFK2F.css +43 -0
  23. package/dist/AvatarPicker/index.js +9 -8
  24. package/dist/Button/index.js +2 -1
  25. package/dist/{Button-UWKBTKYD.css → Button-VXJ7M5XF.css} +9 -32
  26. package/dist/Canvas/index.js +5 -4
  27. package/dist/CanvasBoard/index.js +7 -6
  28. package/dist/CanvasToolbar/index.js +6 -5
  29. package/dist/ChangeList/ChangeList.d.ts +114 -0
  30. package/dist/ChangeList/index.d.ts +3 -0
  31. package/dist/ChangeList/index.js +10 -0
  32. package/dist/ChangeList-CB2DLR5S.css +151 -0
  33. package/dist/ChatThread/ChatThread.d.ts +53 -0
  34. package/dist/ChatThread/index.d.ts +3 -0
  35. package/dist/ChatThread/index.js +6 -0
  36. package/dist/ChatThread-52KMDXHB.css +58 -0
  37. package/dist/Checkbox/index.js +4 -4
  38. package/dist/CodeBlock/index.js +5 -4
  39. package/dist/ColorField/index.js +4 -4
  40. package/dist/ColorSwatch/index.js +5 -4
  41. package/dist/Combobox/index.js +5 -5
  42. package/dist/CommandPalette/index.js +9 -8
  43. package/dist/CommentThread/index.js +9 -7
  44. package/dist/Composer/Composer.d.ts +39 -2
  45. package/dist/Composer/index.js +5 -4
  46. package/dist/Composer-JSGTOW3F.css +192 -0
  47. package/dist/ConfirmField/index.js +4 -4
  48. package/dist/ConflictNote/index.js +3 -2
  49. package/dist/ContrastHelp/index.js +2 -2
  50. package/dist/Copyable/index.js +4 -3
  51. package/dist/DataGrid/driving.d.ts +48 -0
  52. package/dist/DataGrid/index.d.ts +2 -0
  53. package/dist/DataGrid/index.js +8 -7
  54. package/dist/DataTable/index.js +10 -9
  55. package/dist/DataView/index.js +14 -13
  56. package/dist/DatasetSource/index.js +2 -2
  57. package/dist/DateTimePicker/index.js +4 -3
  58. package/dist/DiffList/DiffList.d.ts +12 -3
  59. package/dist/DiffList/index.d.ts +1 -1
  60. package/dist/DiffList/index.js +1 -1
  61. package/dist/{DiffList-3EX64AAE.css → DiffList-GE6YBRLJ.css} +53 -0
  62. package/dist/Disclosure/anatomy.d.ts +14 -1
  63. package/dist/Disclosure/index.js +2 -2
  64. package/dist/{Disclosure-P4FH3C35.css → Disclosure-FVMA4RW2.css} +36 -0
  65. package/dist/DocTabsEditor/index.js +8 -7
  66. package/dist/DownloadButton/DownloadButton.d.ts +21 -4
  67. package/dist/DownloadButton/index.d.ts +1 -1
  68. package/dist/DownloadButton/index.js +4 -3
  69. package/dist/EditingStatus/index.js +2 -2
  70. package/dist/{Editor-GNKMX3VF.js → Editor-S4HARQ7V.js} +8 -7
  71. package/dist/EntityList/EntityList.d.ts +37 -0
  72. package/dist/EntityList/index.d.ts +3 -0
  73. package/dist/EntityList/index.js +10 -0
  74. package/dist/EntityList-XIICECVC.css +55 -0
  75. package/dist/ErrorBoundary/index.js +3 -2
  76. package/dist/FileDrop/index.js +3 -2
  77. package/dist/FollowBanner/index.js +3 -2
  78. package/dist/HuePicker/index.js +8 -7
  79. package/dist/IconButton/IconButton.d.ts +6 -1
  80. package/dist/IconButton/index.js +1 -1
  81. package/dist/{IconButton-K24JQHLF.css → IconButton-6WA7UEBJ.css} +44 -21
  82. package/dist/IconTile/IconTile.d.ts +8 -2
  83. package/dist/IconTile/index.js +1 -1
  84. package/dist/{IconTile-4GNWTLAW.css → IconTile-G52XZVR4.css} +3 -0
  85. package/dist/InlineEditor/index.js +6 -5
  86. package/dist/Input/index.js +3 -3
  87. package/dist/LinkInterstitial/index.js +6 -5
  88. package/dist/ListInput/index.js +7 -6
  89. package/dist/LogoSlot/index.js +4 -3
  90. package/dist/MarkdownEditor/index.js +8 -7
  91. package/dist/Menu/index.js +4 -3
  92. package/dist/MergeConflicts/index.js +8 -7
  93. package/dist/MessageBubble/MessageBubble.d.ts +34 -0
  94. package/dist/MessageBubble/index.d.ts +3 -0
  95. package/dist/MessageBubble/index.js +2 -0
  96. package/dist/MessageBubble-GKO6X3QG.css +71 -0
  97. package/dist/Modal/index.js +5 -4
  98. package/dist/OpenInAppCard/OpenInAppCard.d.ts +44 -0
  99. package/dist/OpenInAppCard/index.d.ts +3 -0
  100. package/dist/OpenInAppCard/index.js +15 -0
  101. package/dist/OpenInAppCard-CKHCK7DO.css +24 -0
  102. package/dist/OrgTable/index.js +3 -3
  103. package/dist/PeekRail/PeekHost.d.ts +90 -0
  104. package/dist/PeekRail/PeekRail.d.ts +83 -0
  105. package/dist/PeekRail/activation.d.ts +30 -0
  106. package/dist/PeekRail/index.d.ts +8 -0
  107. package/dist/PeekRail/index.js +8 -0
  108. package/dist/PeekRail-4L5YUQMW.css +95 -0
  109. package/dist/PeopleRail/index.js +4 -3
  110. package/dist/PinTile/index.js +2 -2
  111. package/dist/PresenterView/index.js +5 -4
  112. package/dist/PrincipalPicker/index.js +6 -6
  113. package/dist/ProposalCard/ProposalCard.d.ts +183 -0
  114. package/dist/ProposalCard/index.d.ts +3 -0
  115. package/dist/ProposalCard/index.js +17 -0
  116. package/dist/ProposalCard-23575F4C.css +29 -0
  117. package/dist/ReceiptStrip/ReceiptStrip.d.ts +78 -0
  118. package/dist/ReceiptStrip/index.d.ts +3 -0
  119. package/dist/ReceiptStrip/index.js +5 -0
  120. package/dist/ReceiptStrip-IIRKRTBG.css +93 -0
  121. package/dist/RefusalCard/RefusalCard.d.ts +34 -0
  122. package/dist/RefusalCard/index.d.ts +3 -0
  123. package/dist/RefusalCard/index.js +10 -0
  124. package/dist/RefusalCard-UM67F5HB.css +8 -0
  125. package/dist/RelativeTime/clock.d.ts +0 -6
  126. package/dist/RelativeTime/index.js +1 -1
  127. package/dist/ResizeHandle-2UNSZ4ZQ.css +59 -0
  128. package/dist/ResultTableCard/ResultTableCard.d.ts +64 -0
  129. package/dist/ResultTableCard/index.d.ts +3 -0
  130. package/dist/ResultTableCard/index.js +16 -0
  131. package/dist/ResultTableCard-HZRUDNTX.css +40 -0
  132. package/dist/ReviewList/index.js +2 -2
  133. package/dist/RichEditor/index.js +3 -2
  134. package/dist/RunChip/RunChip.d.ts +53 -0
  135. package/dist/RunChip/index.d.ts +3 -0
  136. package/dist/RunChip/index.js +10 -0
  137. package/dist/RunChip-I2S4VZ3R.css +43 -0
  138. package/dist/SandboxedFrame/index.js +3 -2
  139. package/dist/SegmentedControl/index.js +7 -6
  140. package/dist/SelectionBar/index.js +4 -3
  141. package/dist/SendButton/SendButton.d.ts +38 -0
  142. package/dist/SendButton/index.d.ts +2 -0
  143. package/dist/SendButton/index.js +4 -0
  144. package/dist/SetupWizard/index.js +6 -5
  145. package/dist/ShareDialog/index.js +8 -7
  146. package/dist/SheetColumnEditor/index.js +13 -12
  147. package/dist/SheetGrid/index.js +7 -6
  148. package/dist/SidePanel/SidePanel.d.ts +137 -0
  149. package/dist/SidePanel/SidePanelBase.d.ts +59 -0
  150. package/dist/SidePanel/index.d.ts +5 -0
  151. package/dist/SidePanel/index.js +11 -0
  152. package/dist/SidePanel-ERBUIELD.css +235 -0
  153. package/dist/SlideCompare/index.js +3 -2
  154. package/dist/SlideFilmstrip/index.js +7 -6
  155. package/dist/SlideNav/index.js +2 -2
  156. package/dist/Spinner/Spinner.d.ts +35 -0
  157. package/dist/Spinner/index.d.ts +3 -0
  158. package/dist/Spinner/index.js +2 -0
  159. package/dist/Spinner-XZ2TVYE5.css +46 -0
  160. package/dist/StatusCard/StatusCard.d.ts +59 -0
  161. package/dist/StatusCard/index.d.ts +3 -0
  162. package/dist/StatusCard/index.js +9 -0
  163. package/dist/StatusCard-6RPEE6UU.css +62 -0
  164. package/dist/StepList-A4YVU4JI.css +119 -0
  165. package/dist/Stepper/StepList.d.ts +72 -0
  166. package/dist/Stepper/index.d.ts +3 -0
  167. package/dist/Stepper/index.js +2 -1
  168. package/dist/SuggestionRow/SuggestionRow.d.ts +45 -0
  169. package/dist/SuggestionRow/index.d.ts +3 -0
  170. package/dist/SuggestionRow/index.js +3 -0
  171. package/dist/SuggestionRow-OKBGNHSS.css +102 -0
  172. package/dist/Switcher/index.js +9 -8
  173. package/dist/Table/Table.d.ts +23 -2
  174. package/dist/Table/index.d.ts +1 -1
  175. package/dist/Table/index.js +1 -1
  176. package/dist/{Table-TGCS4C3F.css → Table-RUYMMWXT.css} +49 -0
  177. package/dist/TableCells/index.js +2 -2
  178. package/dist/Tabs/index.js +6 -5
  179. package/dist/TagsInput/index.js +4 -4
  180. package/dist/ThemeGallery/index.js +2 -2
  181. package/dist/ThemeSwitcher/index.js +8 -7
  182. package/dist/ThemeToggle/index.js +2 -2
  183. package/dist/TimeRangePicker/TimeRangePicker.d.ts +121 -0
  184. package/dist/TimeRangePicker/index.d.ts +2 -0
  185. package/dist/TimeRangePicker/index.js +23 -0
  186. package/dist/TimeWindowPicker/index.js +8 -7
  187. package/dist/Toaster/Toaster.d.ts +27 -3
  188. package/dist/Toaster/index.d.ts +2 -2
  189. package/dist/Toaster/index.js +1 -1
  190. package/dist/{Toaster-C6BQ7L6I.css → Toaster-MX7TBMC3.css} +32 -11
  191. package/dist/TreeCanvas/index.js +6 -5
  192. package/dist/TreeGrid/index.js +2 -2
  193. package/dist/VersionCompare/index.js +9 -8
  194. package/dist/VersionTimeline/index.js +4 -3
  195. package/dist/WidgetFrame/index.js +2 -2
  196. package/dist/{chunk-KHKZPZHO.js → chunk-272Y3YMV.js} +3 -3
  197. package/dist/{chunk-LACA4JGC.js → chunk-2BQYODY3.js} +1 -1
  198. package/dist/{chunk-CCPOLCZL.js → chunk-2TTFDRR3.js} +2 -2
  199. package/dist/{chunk-4BJK7FE5.js → chunk-3EYSYEXP.js} +1 -1
  200. package/dist/chunk-3LI4TRUR.js +22 -0
  201. package/dist/{chunk-ATCHK6LC.js → chunk-3NQS6KYG.js} +1 -1
  202. package/dist/{chunk-V2N3BMOT.js → chunk-45KMH3E3.js} +11 -4
  203. package/dist/{chunk-ZMBPEHYH.js → chunk-4CBGIRVU.js} +1 -1
  204. package/dist/{chunk-DFW5PDU5.js → chunk-4OINEWR4.js} +1 -1
  205. package/dist/{chunk-5XKI4ITH.js → chunk-56P72ZBE.js} +4 -4
  206. package/dist/{chunk-J24Q4HTD.js → chunk-5NT6OIPP.js} +13 -3
  207. package/dist/{chunk-O2KT7HBD.js → chunk-5OMV75GE.js} +3 -3
  208. package/dist/{chunk-6RMZH7P7.js → chunk-672GLRBU.js} +2 -2
  209. package/dist/{chunk-MFXN46NN.js → chunk-67F2AM4R.js} +3 -3
  210. package/dist/{chunk-NQCY44B3.js → chunk-67MW366X.js} +2 -2
  211. package/dist/{chunk-URV6MGWT.js → chunk-6KLK7E76.js} +2 -2
  212. package/dist/{chunk-ZFM5L7M4.js → chunk-6NJW5KSX.js} +2 -2
  213. package/dist/{chunk-A4GFEMVI.js → chunk-6T6V5565.js} +1 -1
  214. package/dist/{chunk-THDGBD6Y.js → chunk-AKFHMLEX.js} +1 -1
  215. package/dist/{chunk-CNGHOTHV.js → chunk-AWSFK2IK.js} +2 -2
  216. package/dist/{chunk-HQJ24WPM.js → chunk-AZ5BKSGV.js} +1 -1
  217. package/dist/chunk-BLPT6GHV.js +31 -0
  218. package/dist/chunk-C3FX7ZSU.js +30 -0
  219. package/dist/{chunk-LDGQIDIZ.js → chunk-CGT4R7LW.js} +64 -2
  220. package/dist/chunk-CIYHSTIF.js +182 -0
  221. package/dist/chunk-CZNG3V6L.js +55 -0
  222. package/dist/{chunk-DM4JG4M5.js → chunk-D5OSP3KI.js} +3 -3
  223. package/dist/{chunk-BTHQFWMG.js → chunk-DOPPU6TZ.js} +4 -4
  224. package/dist/{chunk-AC22RZKC.js → chunk-DRT4L4WC.js} +17 -5
  225. package/dist/chunk-EA23JG6R.js +9 -0
  226. package/dist/{chunk-WHL3XZCK.js → chunk-EBG3V4MK.js} +6 -6
  227. package/dist/{chunk-5JDHMDMQ.js → chunk-EDNZHW4K.js} +57 -7
  228. package/dist/{chunk-E6HXFFWO.js → chunk-EGL24VY5.js} +2 -2
  229. package/dist/{chunk-7SHAFLEX.js → chunk-ES4HR34Y.js} +2 -2
  230. package/dist/chunk-EVWTLFKI.js +102 -0
  231. package/dist/chunk-FA44M2YT.js +25 -0
  232. package/dist/{chunk-LKBZV5IT.js → chunk-FLTMDSC3.js} +1 -1
  233. package/dist/{chunk-XANKR3EP.js → chunk-FXQLNETQ.js} +2 -2
  234. package/dist/{chunk-G22NPQG4.js → chunk-GCASX3FD.js} +4 -4
  235. package/dist/{chunk-OGXHZHRX.js → chunk-GG4QZWMQ.js} +2 -2
  236. package/dist/{chunk-XP7EXNKF.js → chunk-GPW4M4OI.js} +2 -2
  237. package/dist/chunk-GZMEWWXW.js +78 -0
  238. package/dist/{chunk-OG6CL3EB.js → chunk-HD4QJ2SI.js} +3 -2
  239. package/dist/{chunk-SYY26XBX.js → chunk-HGCDJOEF.js} +2 -2
  240. package/dist/chunk-HGYHWWA5.js +54 -0
  241. package/dist/{chunk-ZS63CFDO.js → chunk-HL4CPLEK.js} +7 -7
  242. package/dist/{chunk-BEHFTRMZ.js → chunk-HNK43Z3P.js} +23 -5
  243. package/dist/{chunk-UO7JZVCO.js → chunk-HVEDVKXL.js} +1 -1
  244. package/dist/{chunk-FS4IH7VB.js → chunk-I7VG6RQE.js} +2 -2
  245. package/dist/{chunk-3RCHEFIL.js → chunk-ICJRP6QW.js} +2 -2
  246. package/dist/{chunk-YRIZAIU6.js → chunk-IDQBSMMZ.js} +2 -2
  247. package/dist/chunk-JILNCBBS.js +27 -0
  248. package/dist/{chunk-W5GM452Z.js → chunk-JJ3NOBJ6.js} +5 -5
  249. package/dist/chunk-JLRXCKTS.js +97 -0
  250. package/dist/{chunk-OJCVVCAZ.js → chunk-JMMS2PQU.js} +1 -1
  251. package/dist/{chunk-IVAR7NRW.js → chunk-JS2TRHBF.js} +3 -3
  252. package/dist/{chunk-3CZ7XAVY.js → chunk-KS7YIJ4S.js} +10 -6
  253. package/dist/{chunk-MU5KH3JF.js → chunk-LQ6AGUDL.js} +2 -2
  254. package/dist/chunk-LXYSWQNE.js +214 -0
  255. package/dist/chunk-LZXY6IMO.js +68 -0
  256. package/dist/{chunk-EKLEYNGR.js → chunk-MYX4XABB.js} +3 -3
  257. package/dist/{chunk-PM3JVNRY.js → chunk-N3ISZVLK.js} +1 -1
  258. package/dist/chunk-NEHSV55H.js +119 -0
  259. package/dist/{chunk-LLHO4FJK.js → chunk-NHJQXDHA.js} +1 -1
  260. package/dist/{chunk-F6CKQX5D.js → chunk-NK3D66PB.js} +2 -2
  261. package/dist/{chunk-RHPBTE3F.js → chunk-NQGZRMUG.js} +1 -1
  262. package/dist/chunk-NVZCANJ5.js +3 -0
  263. package/dist/{chunk-RRO7UEYU.js → chunk-OHBXOEP3.js} +1 -1
  264. package/dist/{chunk-USVUSO3S.js → chunk-OHG7762N.js} +1 -1
  265. package/dist/{chunk-OBUQVGEG.js → chunk-OJ2QULVH.js} +1 -1
  266. package/dist/{chunk-ITTECHM4.js → chunk-OOZ5AGPS.js} +5 -5
  267. package/dist/{chunk-BZXY2L2D.js → chunk-OYAXKHVW.js} +1 -1
  268. package/dist/{chunk-WQQ5T5SA.js → chunk-OZIBNFLO.js} +1 -1
  269. package/dist/{chunk-DFK5EQTU.js → chunk-PDTEPN4D.js} +1 -1
  270. package/dist/chunk-PIYJNCN7.js +124 -0
  271. package/dist/{chunk-ZVV2VERB.js → chunk-Q6R6EUQ4.js} +3 -3
  272. package/dist/chunk-QYEOGGVS.js +161 -0
  273. package/dist/{chunk-NWGGH2LN.js → chunk-QZ4B72FP.js} +3 -3
  274. package/dist/chunk-RV2FGESF.js +98 -0
  275. package/dist/{chunk-TQ3C3Q7V.js → chunk-S5C64PTT.js} +1 -1
  276. package/dist/chunk-SDSBVVLL.js +45 -0
  277. package/dist/{chunk-ZNOXQACX.js → chunk-T4D7RZNI.js} +2 -2
  278. package/dist/{chunk-TDVPYBNL.js → chunk-TA72CURM.js} +1 -1
  279. package/dist/{chunk-WXOYHVWG.js → chunk-TD3UHDFY.js} +4 -4
  280. package/dist/{chunk-H7FUQCQY.js → chunk-TDQZ4LB5.js} +8 -6
  281. package/dist/chunk-TFGCNBWP.js +64 -0
  282. package/dist/{chunk-TMM32U7D.js → chunk-TKS7FTTO.js} +2 -2
  283. package/dist/{chunk-NKHS2RQ2.js → chunk-U5PJSGHG.js} +1 -1
  284. package/dist/{chunk-7CGPPAYR.js → chunk-UV4LOQ3E.js} +1 -1
  285. package/dist/{chunk-ON2E46DX.js → chunk-VRNUKH2W.js} +1 -1
  286. package/dist/{chunk-XX2VQE55.js → chunk-WBRC3MNE.js} +1 -1
  287. package/dist/{chunk-NTZQN7OR.js → chunk-WBTCOFMZ.js} +2 -2
  288. package/dist/chunk-WDIVALLP.js +51 -0
  289. package/dist/{chunk-QMIWMLFI.js → chunk-WOW5SCEK.js} +1 -1
  290. package/dist/chunk-XODESBSR.js +250 -0
  291. package/dist/{chunk-EJWPYEG4.js → chunk-XRZGGB6I.js} +1 -1
  292. package/dist/{chunk-34C7NYIQ.js → chunk-Y73BQL74.js} +1 -1
  293. package/dist/{chunk-KIRQZG3G.js → chunk-YCGZK2E4.js} +1 -1
  294. package/dist/{chunk-5TK3C6RG.js → chunk-YCZ2FBKA.js} +1 -1
  295. package/dist/{chunk-TV2QW6GX.js → chunk-YEURM24I.js} +3 -3
  296. package/dist/{chunk-34ANLQW2.js → chunk-YGC7BFX2.js} +211 -9
  297. package/dist/{chunk-IW55G7XG.js → chunk-YNRKVY7X.js} +11 -1
  298. package/dist/{chunk-LFHCXZO5.js → chunk-Z3GDMNMU.js} +3 -3
  299. package/dist/{chunk-LQPU5O3B.js → chunk-Z7PJF6F3.js} +3 -3
  300. package/dist/{chunk-HDHL773Z.js → chunk-ZH4MJM73.js} +1 -1
  301. package/dist/generated/index.d.ts +17 -0
  302. package/dist/generated/index.js +140 -121
  303. package/dist/index.js +140 -121
  304. package/dist/styles.css +1887 -218
  305. package/dist/utils/index.js +1 -1
  306. package/dist/utils/useDownload.d.ts +6 -0
  307. package/package.json +3 -3
  308. package/dist/ArtifactPanel-KKUUIPEU.css +0 -159
  309. package/dist/Composer-TXULCPPV.css +0 -99
  310. package/dist/chunk-4E5MWUUJ.js +0 -48
  311. package/dist/chunk-FZVJDJFN.js +0 -54
  312. package/dist/chunk-IXJHTFXG.js +0 -17
  313. package/dist/chunk-NBDN5JZV.js +0 -123
  314. package/dist/{chunk-UTESMBPL.js → chunk-ESUZ27TS.js} +1 -1
  315. /package/dist/{chunk-55MPFB2U.js → chunk-EWTPXRRM.js} +0 -0
@@ -0,0 +1,214 @@
1
+ import { useAppShellPeek, ResizeHandle } from './chunk-PIYJNCN7.js';
2
+ import { ButtonLink } from './chunk-HD4QJ2SI.js';
3
+ import { IconButton } from './chunk-2BQYODY3.js';
4
+ import { cx } from './chunk-ODEQTPFM.js';
5
+ import './HitArea-QUOS6ZDJ.css';
6
+ import './ResizeHandle-2UNSZ4ZQ.css';
7
+ import './PeekRail-4L5YUQMW.css';
8
+ import { createContext, useRef, useEffect, useState, useMemo, useContext, Fragment as Fragment$1 } from 'react';
9
+ import { ChevronUpGlyph, ChevronDownGlyph, ArrowUpRightGlyph, XGlyph } from '@crewlethq/icons/glyphs';
10
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
11
+
12
+ var PEEK_RAIL_WIDTH = 420;
13
+ var PEEK_RAIL_MIN_WIDTH = 330;
14
+ var PEEK_RAIL_MAX_WIDTH = 640;
15
+ var PEEK_RAIL_LABELS = {
16
+ previous: "Previous",
17
+ next: "Next",
18
+ close: "Close",
19
+ open: "Open",
20
+ resize: "Resize the detail panel"
21
+ };
22
+ function PeekRail({
23
+ label,
24
+ shape: asked,
25
+ width = PEEK_RAIL_WIDTH,
26
+ minWidth = PEEK_RAIL_MIN_WIDTH,
27
+ maxWidth = PEEK_RAIL_MAX_WIDTH,
28
+ defaultWidth = PEEK_RAIL_WIDTH,
29
+ reserve,
30
+ onWidthChange,
31
+ onWidthCommit,
32
+ onClose,
33
+ onStep,
34
+ openHref,
35
+ labels,
36
+ className,
37
+ children
38
+ }) {
39
+ const words = { ...PEEK_RAIL_LABELS, ...labels };
40
+ const slot = useAppShellPeek();
41
+ const shape = asked ?? slot?.shape ?? "column";
42
+ const rail = useRef(null);
43
+ const close = useRef(onClose);
44
+ close.current = onClose;
45
+ useEffect(() => {
46
+ const element = rail.current;
47
+ if (!element) return void 0;
48
+ const doc = element.ownerDocument;
49
+ const onKeyDown = (event) => {
50
+ if (event.key !== "Escape" || event.defaultPrevented || event.isComposing) return;
51
+ if (!(event.target instanceof Node) || !element.contains(event.target)) return;
52
+ event.preventDefault();
53
+ close.current();
54
+ };
55
+ doc.addEventListener("keydown", onKeyDown);
56
+ return () => doc.removeEventListener("keydown", onKeyDown);
57
+ }, []);
58
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
59
+ shape === "drawer" ? (
60
+ // A press on the page behind the drawer closes it, as a press on
61
+ // nothing does beside a column. The veil is a pointer convenience:
62
+ // the keyboard closes the rail with Close or Escape.
63
+ /* @__PURE__ */ jsx("div", { className: "crewlet-peek-rail__veil", role: "presentation", onClick: onClose })
64
+ ) : null,
65
+ /* @__PURE__ */ jsxs(
66
+ "aside",
67
+ {
68
+ ref: rail,
69
+ className: cx("crewlet-peek-rail", className),
70
+ "data-shape": shape,
71
+ "aria-label": label,
72
+ style: {
73
+ ["--crewlet-peek-rail-width"]: `${width}px`,
74
+ ...reserve === void 0 ? null : { ["--crewlet-peek-rail-reserve"]: `${reserve}px` }
75
+ },
76
+ children: [
77
+ shape === "column" && onWidthChange ? /* @__PURE__ */ jsx(
78
+ ResizeHandle,
79
+ {
80
+ label: words.resize,
81
+ value: width,
82
+ min: minWidth,
83
+ max: maxWidth,
84
+ defaultValue: defaultWidth,
85
+ onValueChange: onWidthChange,
86
+ onValueCommit: onWidthCommit,
87
+ edge: "left"
88
+ }
89
+ ) : null,
90
+ /* @__PURE__ */ jsxs("div", { className: "crewlet-peek-rail__bar", children: [
91
+ onStep ? /* @__PURE__ */ jsxs(Fragment, { children: [
92
+ /* @__PURE__ */ jsx(
93
+ IconButton,
94
+ {
95
+ size: "sm",
96
+ variant: "ghost",
97
+ icon: /* @__PURE__ */ jsx(ChevronUpGlyph, { size: "sm" }),
98
+ label: words.previous,
99
+ title: words.previousHint,
100
+ onClick: () => onStep(-1)
101
+ }
102
+ ),
103
+ /* @__PURE__ */ jsx(
104
+ IconButton,
105
+ {
106
+ size: "sm",
107
+ variant: "ghost",
108
+ icon: /* @__PURE__ */ jsx(ChevronDownGlyph, { size: "sm" }),
109
+ label: words.next,
110
+ title: words.nextHint,
111
+ onClick: () => onStep(1)
112
+ }
113
+ )
114
+ ] }) : null,
115
+ /* @__PURE__ */ jsx("span", { className: "crewlet-peek-rail__spacer" }),
116
+ openHref ? /* @__PURE__ */ jsx(
117
+ ButtonLink,
118
+ {
119
+ size: "small",
120
+ variant: "secondary",
121
+ href: openHref,
122
+ trailingIcon: /* @__PURE__ */ jsx(ArrowUpRightGlyph, { size: "sm" }),
123
+ children: words.open
124
+ }
125
+ ) : null,
126
+ /* @__PURE__ */ jsx(
127
+ IconButton,
128
+ {
129
+ size: "sm",
130
+ variant: "ghost",
131
+ icon: /* @__PURE__ */ jsx(XGlyph, { size: "sm" }),
132
+ label: words.close,
133
+ title: words.closeHint,
134
+ onClick: onClose
135
+ }
136
+ )
137
+ ] }),
138
+ /* @__PURE__ */ jsx("div", { className: "crewlet-peek-rail__body", children })
139
+ ]
140
+ }
141
+ )
142
+ ] });
143
+ }
144
+ var NeighbourContext = createContext(null);
145
+ var NOTHING = { tokens: [] };
146
+ function PeekNeighbours({ children }) {
147
+ const [published, publish] = useState(NOTHING);
148
+ const value = useMemo(() => ({ ...published, publish }), [published]);
149
+ return /* @__PURE__ */ jsx(NeighbourContext.Provider, { value, children });
150
+ }
151
+ function usePeekOrder() {
152
+ const host = useContext(NeighbourContext);
153
+ return host ? { tokens: host.tokens, query: host.query } : NOTHING;
154
+ }
155
+ function usePeekNeighbours(tokens, query) {
156
+ const publish = useContext(NeighbourContext)?.publish;
157
+ const key = tokens.join("\0");
158
+ const queryKey = query ? new URLSearchParams(query).toString() : "";
159
+ useEffect(() => {
160
+ if (!publish) return void 0;
161
+ const order = {
162
+ tokens: key === "" ? [] : key.split("\0"),
163
+ ...queryKey === "" ? null : { query: Object.fromEntries(new URLSearchParams(queryKey)) }
164
+ };
165
+ publish(order);
166
+ return () => publish(NOTHING);
167
+ }, [key, queryKey, publish]);
168
+ }
169
+ function usePeekStep(current, move) {
170
+ const { tokens } = usePeekOrder();
171
+ if (current === null) return void 0;
172
+ const at = tokens.indexOf(current);
173
+ if (at < 0 || tokens.length < 2) return void 0;
174
+ return (delta) => {
175
+ const next = tokens[Math.max(0, Math.min(tokens.length - 1, at + delta))];
176
+ if (next !== void 0 && next !== current) move(next);
177
+ };
178
+ }
179
+ function PeekHost({ current, render, label, onClose, onMove, openHref, boundary, ...rail }) {
180
+ const order = usePeekOrder();
181
+ const step = usePeekStep(current, onMove);
182
+ const body = current === null ? void 0 : render(current);
183
+ const missing = current !== null && body === void 0;
184
+ useEffect(() => {
185
+ if (missing) onClose();
186
+ }, [missing, onClose]);
187
+ if (current === null || body === void 0) return null;
188
+ const query = order.tokens.includes(current) ? order.query : void 0;
189
+ return /* @__PURE__ */ jsx(PeekRail, { ...rail, label: label(current), onClose, onStep: step, openHref: openHref?.(current, query), children: /* @__PURE__ */ jsx(Fragment$1, { children: boundary ? boundary(current, body) : body }, current) });
190
+ }
191
+
192
+ // src/PeekRail/activation.ts
193
+ function isPlainPress(event) {
194
+ return !event.defaultPrevented && event.button === 0 && !event.metaKey && !event.ctrlKey && !event.shiftKey && !event.altKey;
195
+ }
196
+ function peekClickHandler(open) {
197
+ if (!open) return void 0;
198
+ return (event) => {
199
+ if (!isPlainPress(event)) return;
200
+ event.preventDefault();
201
+ open();
202
+ };
203
+ }
204
+ function peekRowActivation(open) {
205
+ return (row, event) => {
206
+ if (!("button" in event)) {
207
+ open(row);
208
+ return;
209
+ }
210
+ peekClickHandler(() => open(row))?.(event);
211
+ };
212
+ }
213
+
214
+ export { PEEK_RAIL_LABELS, PEEK_RAIL_MAX_WIDTH, PEEK_RAIL_MIN_WIDTH, PEEK_RAIL_WIDTH, PeekHost, PeekNeighbours, PeekRail, isPlainPress, peekClickHandler, peekRowActivation, usePeekNeighbours, usePeekOrder, usePeekStep };
@@ -0,0 +1,68 @@
1
+ import { Button } from './chunk-HD4QJ2SI.js';
2
+ import { cx } from './chunk-ODEQTPFM.js';
3
+ import './ReceiptStrip-IIRKRTBG.css';
4
+ import { CircleAlertGlyph, TriangleAlertGlyph, InfoGlyph, CircleCheckGlyph } from '@crewlethq/icons/glyphs';
5
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
6
+
7
+ var ICONS = {
8
+ success: /* @__PURE__ */ jsx(CircleCheckGlyph, { size: "md" }),
9
+ neutral: /* @__PURE__ */ jsx(InfoGlyph, { size: "md" }),
10
+ info: /* @__PURE__ */ jsx(InfoGlyph, { size: "md" }),
11
+ warning: /* @__PURE__ */ jsx(TriangleAlertGlyph, { size: "md" }),
12
+ danger: /* @__PURE__ */ jsx(CircleAlertGlyph, { size: "md" })
13
+ };
14
+ function ReceiptStrip({
15
+ tone = "success",
16
+ icon,
17
+ children,
18
+ actions,
19
+ announce = true,
20
+ className,
21
+ ...rest
22
+ }) {
23
+ return /* @__PURE__ */ jsxs(
24
+ "div",
25
+ {
26
+ ...rest,
27
+ role: announce ? tone === "danger" ? "alert" : "status" : void 0,
28
+ className: cx("crewlet-receipt-strip", `crewlet-receipt-strip--${tone}`, className),
29
+ children: [
30
+ /* @__PURE__ */ jsx("span", { className: "crewlet-receipt-strip__icon", "aria-hidden": "true", children: icon ?? ICONS[tone] }),
31
+ /* @__PURE__ */ jsx("div", { className: "crewlet-receipt-strip__text", children }),
32
+ actions === void 0 || actions === null || actions === false ? null : /* @__PURE__ */ jsx("div", { className: "crewlet-receipt-strip__actions", children: actions })
33
+ ]
34
+ }
35
+ );
36
+ }
37
+ var REFUSAL_STRIP_LABELS = { retry: "Try again", dismiss: "Dismiss" };
38
+ function RefusalStrip({
39
+ children,
40
+ hint,
41
+ onRetry,
42
+ retrying = false,
43
+ onDismiss,
44
+ placement = "inline",
45
+ announce = true,
46
+ labels: overrides,
47
+ className,
48
+ ...rest
49
+ }) {
50
+ const labels = overrides ? { ...REFUSAL_STRIP_LABELS, ...overrides } : REFUSAL_STRIP_LABELS;
51
+ const actions = onRetry || onDismiss ? /* @__PURE__ */ jsxs(Fragment, { children: [
52
+ onRetry ? /* @__PURE__ */ jsx(Button, { size: "small", variant: "ghost", loading: retrying, onClick: onRetry, children: labels.retry }) : null,
53
+ onDismiss ? /* @__PURE__ */ jsx(Button, { size: "small", variant: "ghost", onClick: onDismiss, children: labels.dismiss }) : null
54
+ ] }) : void 0;
55
+ const words = /* @__PURE__ */ jsxs(Fragment, { children: [
56
+ /* @__PURE__ */ jsx("span", { className: "crewlet-refusal-strip__sentence", children }),
57
+ hint === void 0 || hint === null ? null : /* @__PURE__ */ jsx("span", { className: "crewlet-refusal-strip__hint", children: hint })
58
+ ] });
59
+ if (placement === "foot") {
60
+ return /* @__PURE__ */ jsx(ReceiptStrip, { ...rest, tone: "danger", announce, actions, className: cx("crewlet-refusal-strip--foot", className), children: words });
61
+ }
62
+ return /* @__PURE__ */ jsxs("span", { ...rest, role: announce ? "alert" : void 0, className: cx("crewlet-refusal-strip", className), children: [
63
+ words,
64
+ actions
65
+ ] });
66
+ }
67
+
68
+ export { REFUSAL_STRIP_LABELS, ReceiptStrip, RefusalStrip };
@@ -1,10 +1,10 @@
1
1
  import { Select } from './chunk-XQZ6EWOE.js';
2
2
  import { today, shiftMonth, CalendarGrid, compareDays } from './chunk-GXQ3B46I.js';
3
3
  import { Popover } from './chunk-KHJIEPZV.js';
4
- import { Input } from './chunk-XANKR3EP.js';
5
- import { Button } from './chunk-OG6CL3EB.js';
4
+ import { Input } from './chunk-FXQLNETQ.js';
5
+ import { Button } from './chunk-HD4QJ2SI.js';
6
6
  import { isComposing } from './chunk-H5XTJ7GJ.js';
7
- import { IconButton } from './chunk-LACA4JGC.js';
7
+ import { IconButton } from './chunk-2BQYODY3.js';
8
8
  import { useFocusModality } from './chunk-NUZHC6MM.js';
9
9
  import { cx } from './chunk-ODEQTPFM.js';
10
10
  import './TimeWindowPicker-I3HXC74I.css';
@@ -1,5 +1,5 @@
1
1
  import { useThemePreference, useSystemTheme, resolveTheme } from './chunk-Z24ZUSTX.js';
2
- import { IconButton } from './chunk-LACA4JGC.js';
2
+ import { IconButton } from './chunk-2BQYODY3.js';
3
3
  import { SunGlyph, MoonGlyph } from '@crewlethq/icons/glyphs';
4
4
  import { jsx } from 'react/jsx-runtime';
5
5
 
@@ -0,0 +1,119 @@
1
+ import { DiffList } from './chunk-Z3GDMNMU.js';
2
+ import { Tag } from './chunk-KYIAFNU7.js';
3
+ import { Disclosure } from './chunk-GG4QZWMQ.js';
4
+ import { VisuallyHidden } from './chunk-BZFWDIV6.js';
5
+ import { cx } from './chunk-ODEQTPFM.js';
6
+ import './ChangeList-CB2DLR5S.css';
7
+ import { useId } from 'react';
8
+ import { ArrowRightGlyph } from '@crewlethq/icons/glyphs';
9
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
10
+
11
+ var CHANGE_LIST_LABELS = {
12
+ changedFrom: "Changed from",
13
+ to: "to",
14
+ added: "Added:",
15
+ removed: "Removed:",
16
+ isNew: "New",
17
+ addedWords: "added",
18
+ removedWords: "removed",
19
+ showWhole: "Show the whole change"
20
+ };
21
+ var CHANGE_LIST_COLLAPSE_OVER = 80;
22
+ var ELLIPSIS = "\u2026";
23
+ function shortenUnchanged(text, place, max = CHANGE_LIST_COLLAPSE_OVER) {
24
+ if (text.length <= max) return text;
25
+ const keep = place === "middle" ? Math.floor(max / 2) : max;
26
+ const words = text.trim();
27
+ const head = () => {
28
+ const cut = words.slice(0, keep);
29
+ const space = cut.lastIndexOf(" ");
30
+ return (space > 0 ? cut.slice(0, space) : cut).trim();
31
+ };
32
+ const tail = () => {
33
+ const cut = words.slice(Math.max(0, words.length - keep));
34
+ const space = cut.indexOf(" ");
35
+ return (space >= 0 ? cut.slice(space + 1) : cut).trim();
36
+ };
37
+ const lead = /^\s/.test(text) ? " " : "";
38
+ const trail = /\s$/.test(text) ? " " : "";
39
+ if (place === "first") return `${ELLIPSIS} ${tail()}${trail}`;
40
+ if (place === "last") return `${lead}${head()} ${ELLIPSIS}`;
41
+ return `${lead}${head()} ${ELLIPSIS} ${tail()}${trail}`;
42
+ }
43
+ function WordDiff({ row, labels }) {
44
+ const max = row.collapseOver ?? CHANGE_LIST_COLLAPSE_OVER;
45
+ const changes = row.words.map((part, index) => part.op === "=" ? -1 : index).filter((index) => index >= 0);
46
+ const firstChange = changes[0] ?? Number.POSITIVE_INFINITY;
47
+ const lastChange = changes[changes.length - 1] ?? Number.NEGATIVE_INFINITY;
48
+ return /* @__PURE__ */ jsx("p", { className: "crewlet-change-list__words", children: row.words.map((part, index) => {
49
+ if (part.op === "+") {
50
+ return /* @__PURE__ */ jsxs("ins", { className: "crewlet-change-list__inserted", children: [
51
+ /* @__PURE__ */ jsx(VisuallyHidden, { children: `${labels.addedWords} ` }),
52
+ part.text
53
+ ] }, index);
54
+ }
55
+ if (part.op === "-") {
56
+ return /* @__PURE__ */ jsxs("del", { className: "crewlet-change-list__deleted", children: [
57
+ /* @__PURE__ */ jsx(VisuallyHidden, { children: `${labels.removedWords} ` }),
58
+ part.text
59
+ ] }, index);
60
+ }
61
+ const place = index < firstChange ? "first" : index > lastChange ? "last" : "middle";
62
+ return /* @__PURE__ */ jsx("span", { children: shortenUnchanged(part.text, place, max) }, index);
63
+ }) });
64
+ }
65
+ function Value({ row, labels }) {
66
+ switch (row.kind) {
67
+ case "fact":
68
+ return /* @__PURE__ */ jsx("span", { className: "crewlet-change-list__fact", children: row.value });
69
+ case "changed":
70
+ return /* @__PURE__ */ jsxs("span", { className: "crewlet-change-list__pair", children: [
71
+ /* @__PURE__ */ jsx(VisuallyHidden, { children: `${labels.changedFrom} ` }),
72
+ /* @__PURE__ */ jsx("del", { className: "crewlet-change-list__from", children: row.from }),
73
+ /* @__PURE__ */ jsxs("span", { className: "crewlet-change-list__next", children: [
74
+ /* @__PURE__ */ jsx(ArrowRightGlyph, { size: "sm", className: "crewlet-change-list__arrow" }),
75
+ /* @__PURE__ */ jsx(VisuallyHidden, { children: ` ${labels.to} ` }),
76
+ /* @__PURE__ */ jsx("ins", { className: "crewlet-change-list__to", children: row.to })
77
+ ] })
78
+ ] });
79
+ case "added":
80
+ return /* @__PURE__ */ jsxs("span", { className: "crewlet-change-list__pair", children: [
81
+ /* @__PURE__ */ jsxs("ins", { className: "crewlet-change-list__to", children: [
82
+ /* @__PURE__ */ jsx(VisuallyHidden, { children: `${labels.added} ` }),
83
+ row.to
84
+ ] }),
85
+ row.isNew ? /* @__PURE__ */ jsx(Tag, { size: "xs", variant: "success", children: labels.isNew }) : null
86
+ ] });
87
+ case "removed":
88
+ return /* @__PURE__ */ jsxs("del", { className: "crewlet-change-list__removed", children: [
89
+ /* @__PURE__ */ jsx(VisuallyHidden, { children: `${labels.removed} ` }),
90
+ row.from
91
+ ] });
92
+ }
93
+ }
94
+ function ChangeList({ rows, heading, settled = false, labels: overrides, diffLabels, className }) {
95
+ const labels = overrides ? { ...CHANGE_LIST_LABELS, ...overrides } : CHANGE_LIST_LABELS;
96
+ const headingId = useId();
97
+ return /* @__PURE__ */ jsxs("div", { className: cx("crewlet-change-list", settled && "crewlet-change-list--settled", className), children: [
98
+ heading === void 0 || heading === null ? null : /* @__PURE__ */ jsx("div", { id: headingId, className: "crewlet-change-list__heading", children: heading }),
99
+ /* @__PURE__ */ jsx("dl", { className: "crewlet-change-list__rows", "aria-labelledby": heading === void 0 || heading === null ? void 0 : headingId, children: rows.map((row, index) => /* @__PURE__ */ jsxs(
100
+ "div",
101
+ {
102
+ className: cx("crewlet-change-list__row", `crewlet-change-list__row--${row.kind}`),
103
+ children: [
104
+ /* @__PURE__ */ jsx("dt", { className: "crewlet-change-list__label", children: row.label }),
105
+ /* @__PURE__ */ jsxs("dd", { className: "crewlet-change-list__value", children: [
106
+ row.kind === "text" ? /* @__PURE__ */ jsxs(Fragment, { children: [
107
+ /* @__PURE__ */ jsx(WordDiff, { row, labels }),
108
+ row.whole && row.whole.length > 0 ? /* @__PURE__ */ jsx(Disclosure, { title: labels.showWhole, headingLevel: "none", size: "compact", className: "crewlet-change-list__whole", children: /* @__PURE__ */ jsx(DiffList, { rows: [...row.whole], layout: "auto", labels: diffLabels }) }) : null
109
+ ] }) : /* @__PURE__ */ jsx(Value, { row, labels }),
110
+ row.note === void 0 || row.note === null ? null : /* @__PURE__ */ jsx("span", { className: "crewlet-change-list__note", children: row.note })
111
+ ] })
112
+ ]
113
+ },
114
+ `${index}:${row.label}`
115
+ )) })
116
+ ] });
117
+ }
118
+
119
+ export { CHANGE_LIST_COLLAPSE_OVER, CHANGE_LIST_LABELS, ChangeList, shortenUnchanged };
@@ -1,4 +1,4 @@
1
- import { FormField } from './chunk-XANKR3EP.js';
1
+ import { FormField } from './chunk-FXQLNETQ.js';
2
2
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './Checkbox-MB22OW6P.css';
@@ -1,7 +1,7 @@
1
1
  import { Toolbar } from './chunk-NR4CPM4T.js';
2
- import { Button } from './chunk-OG6CL3EB.js';
3
- import { returnFocus } from './chunk-NUZHC6MM.js';
4
2
  import { announce } from './chunk-RSAQOKH3.js';
3
+ import { Button } from './chunk-HD4QJ2SI.js';
4
+ import { returnFocus } from './chunk-NUZHC6MM.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
6
6
  import './SelectionBar-XPWKUOSC.css';
7
7
  import { useRef, useEffect } from 'react';
@@ -1,4 +1,4 @@
1
- import { Copyable } from './chunk-7SHAFLEX.js';
1
+ import { Copyable } from './chunk-ES4HR34Y.js';
2
2
  import { normalizeHex } from './chunk-7W3LYIOC.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './ColorSwatch-DNMUFHNS.css';
@@ -0,0 +1,3 @@
1
+ import './HitArea-QUOS6ZDJ.css';
2
+ import './ResizeHandle-2UNSZ4ZQ.css';
3
+ import './SidePanel-ERBUIELD.css';
@@ -1,4 +1,4 @@
1
- import { IconButton } from './chunk-LACA4JGC.js';
1
+ import { IconButton } from './chunk-2BQYODY3.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
3
  import './SlideNav-BLFJF6AH.css';
4
4
  import { ChevronLeftGlyph, ChevronRightGlyph } from '@crewlethq/icons/glyphs';
@@ -1,5 +1,5 @@
1
1
  import { diffLines, diffStat, collapseDiff, DiffSummary, DiffView } from './chunk-BVWSLXTY.js';
2
- import { SegmentedControl } from './chunk-CNGHOTHV.js';
2
+ import { SegmentedControl } from './chunk-AWSFK2IK.js';
3
3
  import { EmptyState } from './chunk-PPUR46MK.js';
4
4
  import { useHeadingLevel, headingTag, nextHeadingLevel, HeadingLevelProvider } from './chunk-PQADV6P6.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
@@ -1,4 +1,4 @@
1
- import { IconTile } from './chunk-IXJHTFXG.js';
1
+ import { IconTile } from './chunk-3LI4TRUR.js';
2
2
  import { Tag } from './chunk-KYIAFNU7.js';
3
3
  import { useHeadingLevel, headingTag } from './chunk-PQADV6P6.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
@@ -1,12 +1,12 @@
1
1
  import { Select } from './chunk-XQZ6EWOE.js';
2
- import { Modal } from './chunk-NWGGH2LN.js';
3
- import { CopyButton } from './chunk-7SHAFLEX.js';
2
+ import { CopyButton } from './chunk-ES4HR34Y.js';
3
+ import { Modal } from './chunk-QZ4B72FP.js';
4
4
  import { Callout } from './chunk-BPCY7ZID.js';
5
5
  import { PrincipalAvatar } from './chunk-CI3VPIJN.js';
6
- import { useMediaMatch } from './chunk-RTPQDNW3.js';
7
6
  import { useHeadingLevel, headingTag } from './chunk-PQADV6P6.js';
8
- import { Button } from './chunk-OG6CL3EB.js';
9
- import { IconButton } from './chunk-LACA4JGC.js';
7
+ import { useMediaMatch } from './chunk-RTPQDNW3.js';
8
+ import { Button } from './chunk-HD4QJ2SI.js';
9
+ import { IconButton } from './chunk-2BQYODY3.js';
10
10
  import { cx } from './chunk-ODEQTPFM.js';
11
11
  import './ShareDialog-4QDCBWMH.css';
12
12
  import { useState, useId } from 'react';
@@ -1,5 +1,5 @@
1
1
  import { NODE_HUES, NODE_HUE_NAMES } from './chunk-AYKXMIOR.js';
2
- import { SegmentedControl } from './chunk-CNGHOTHV.js';
2
+ import { SegmentedControl } from './chunk-AWSFK2IK.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import { jsx } from 'react/jsx-runtime';
5
5
 
@@ -1,7 +1,7 @@
1
1
  import { frameThemeMessage, readFrameHello, frameOriginMatches, negotiateBridge, FRAME_MESSAGE, portTargetOrigin, checkFrameSandbox, httpOrigin, isFrameNonce, frameFragment, readOpenLink, externalUrl, isFocusExit } from './chunk-F6V2PTN6.js';
2
2
  import { Callout } from './chunk-BPCY7ZID.js';
3
3
  import { Skeleton } from './chunk-TEUQWOWZ.js';
4
- import { Button } from './chunk-OG6CL3EB.js';
4
+ import { Button } from './chunk-HD4QJ2SI.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
6
6
  import './SandboxedFrame-P5NASXB7.css';
7
7
  import { useState, useMemo, useRef, useEffect } from 'react';
@@ -1,5 +1,5 @@
1
1
  import { Skeleton } from './chunk-TEUQWOWZ.js';
2
- import { RelativeTime } from './chunk-3CZ7XAVY.js';
2
+ import { RelativeTime } from './chunk-KS7YIJ4S.js';
3
3
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
5
  import './WidgetFrame-BTFW3CRK.css';
@@ -0,0 +1,124 @@
1
+ import { HIT_AREA_CLASS } from './chunk-2YTOOH3A.js';
2
+ import { cx } from './chunk-ODEQTPFM.js';
3
+ import { createContext, useContext, useState, useRef, useCallback } from 'react';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ var AsideContext = createContext(null);
7
+ var PeekContext = createContext(null);
8
+ function useAppShellAside() {
9
+ return useContext(AsideContext);
10
+ }
11
+ function useAppShellPeek() {
12
+ return useContext(PeekContext);
13
+ }
14
+ var RESIZE_HANDLE_STEP = 16;
15
+ var RESIZE_HANDLE_LARGE_STEP = 64;
16
+ function clampSize(value, min, max) {
17
+ const ceiling = Math.max(min, max);
18
+ return Math.round(Math.min(ceiling, Math.max(min, value)));
19
+ }
20
+ function ResizeHandle({
21
+ value,
22
+ min,
23
+ max,
24
+ onValueChange,
25
+ onValueCommit,
26
+ defaultValue,
27
+ label,
28
+ edge = "left",
29
+ controls,
30
+ valueText = (px) => `${px} pixels`,
31
+ step = RESIZE_HANDLE_STEP,
32
+ largeStep = RESIZE_HANDLE_LARGE_STEP,
33
+ className
34
+ }) {
35
+ const now = clampSize(value, min, max);
36
+ const ceiling = Math.max(min, max);
37
+ const [dragging, setDragging] = useState(false);
38
+ const drag = useRef(null);
39
+ const grows = edge === "left" ? -1 : 1;
40
+ const change = useCallback(
41
+ (next, commit) => {
42
+ const clamped = clampSize(next, min, max);
43
+ if (clamped !== now) onValueChange(clamped);
44
+ if (commit) onValueCommit?.(clamped);
45
+ },
46
+ [max, min, now, onValueChange, onValueCommit]
47
+ );
48
+ const onKeyDown = (event) => {
49
+ const by = event.shiftKey ? largeStep : step;
50
+ switch (event.key) {
51
+ case "ArrowLeft":
52
+ change(now - by * grows, true);
53
+ break;
54
+ case "ArrowRight":
55
+ change(now + by * grows, true);
56
+ break;
57
+ case "Home":
58
+ change(min, true);
59
+ break;
60
+ case "End":
61
+ change(ceiling, true);
62
+ break;
63
+ case "Enter":
64
+ if (defaultValue === void 0) return;
65
+ change(defaultValue, true);
66
+ break;
67
+ default:
68
+ return;
69
+ }
70
+ event.preventDefault();
71
+ };
72
+ const onPointerDown = (event) => {
73
+ if (event.button !== 0) return;
74
+ event.preventDefault();
75
+ drag.current = { x: event.clientX, from: now, last: now, pointer: event.pointerId };
76
+ event.currentTarget.setPointerCapture?.(event.pointerId);
77
+ setDragging(true);
78
+ };
79
+ const onPointerMove = (event) => {
80
+ const start = drag.current;
81
+ if (!start || start.pointer !== event.pointerId) return;
82
+ const next = clampSize(start.from + (event.clientX - start.x) * grows, min, max);
83
+ if (next === start.last) return;
84
+ start.last = next;
85
+ onValueChange(next);
86
+ };
87
+ const end = (event) => {
88
+ const start = drag.current;
89
+ if (!start || start.pointer !== event.pointerId) return;
90
+ drag.current = null;
91
+ setDragging(false);
92
+ onValueCommit?.(start.last);
93
+ };
94
+ return (
95
+ // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- see above
96
+ /* @__PURE__ */ jsx(
97
+ "div",
98
+ {
99
+ role: "separator",
100
+ "aria-orientation": "vertical",
101
+ "aria-label": label,
102
+ "aria-valuenow": now,
103
+ "aria-valuemin": min,
104
+ "aria-valuemax": ceiling,
105
+ "aria-valuetext": valueText(now),
106
+ "aria-controls": controls,
107
+ tabIndex: 0,
108
+ className: cx("crewlet-resize-handle", `crewlet-resize-handle--${edge}`, HIT_AREA_CLASS, className),
109
+ "data-dragging": dragging || void 0,
110
+ onKeyDown,
111
+ onPointerDown,
112
+ onPointerMove,
113
+ onPointerUp: end,
114
+ onPointerCancel: end,
115
+ onLostPointerCapture: end,
116
+ onDoubleClick: () => {
117
+ if (defaultValue !== void 0) change(defaultValue, true);
118
+ }
119
+ }
120
+ )
121
+ );
122
+ }
123
+
124
+ export { AsideContext, PeekContext, RESIZE_HANDLE_LARGE_STEP, RESIZE_HANDLE_STEP, ResizeHandle, clampSize, useAppShellAside, useAppShellPeek };
@@ -1,7 +1,7 @@
1
1
  import { Note } from './chunk-5SZGKSGL.js';
2
- import { CanvasToolbar, toolForKey } from './chunk-MU5KH3JF.js';
3
- import { IDENTITY_VIEW, Canvas } from './chunk-TV2QW6GX.js';
4
- import { IconButton } from './chunk-LACA4JGC.js';
2
+ import { CanvasToolbar, toolForKey } from './chunk-LQ6AGUDL.js';
3
+ import { IDENTITY_VIEW, Canvas } from './chunk-YEURM24I.js';
4
+ import { IconButton } from './chunk-2BQYODY3.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
6
6
  import './CanvasBoard-JMYNIAHK.css';
7
7
  import { useState, useRef, useImperativeHandle, useCallback, useMemo, useEffect } from 'react';