@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,235 @@
1
+ /*
2
+ * A side panel and the frame that lays it beside the content or over it
3
+ * (`SidePanel`, `SidePanelFrame`, and their artifact presets).
4
+ *
5
+ * The frame is a row: the content, then at most one panel. The content
6
+ * scrolls itself, so a panel beside it stays in view however far it is read;
7
+ * the panel's own body scrolls under its head.
8
+ *
9
+ * ONE HAIRLINE between the two, the panel's start edge, and none at the
10
+ * frame's own edges: whatever holds the frame already draws those.
11
+ */
12
+
13
+ .crewlet-side-panel-frame {
14
+ container: crewlet-side-panel-frame / inline-size;
15
+ position: relative;
16
+ display: flex;
17
+ min-width: 0;
18
+ min-height: 0;
19
+ }
20
+
21
+ .crewlet-side-panel-frame__body {
22
+ flex: 1 1 auto;
23
+ min-width: 0;
24
+ min-height: 0;
25
+ overflow: auto;
26
+ }
27
+
28
+ /* EXPANDED, the panel is the frame; the content stays mounted behind it, so
29
+ a page's state survives the look at its data. */
30
+ .crewlet-side-panel-frame[data-panel='expanded'] > .crewlet-side-panel-frame__body {
31
+ display: none;
32
+ }
33
+
34
+ /*
35
+ * THE PANEL. Its width is one variable (`--crewlet-side-panel-width`), which
36
+ * the `width` prop sets on the element itself, and its head stands at the page
37
+ * bar's height (`--crewlet-side-panel-head-height`), so beside the shell's bar
38
+ * the two lines meet. Positioned, so the grip on its start edge has a box to
39
+ * stand against.
40
+ */
41
+ .crewlet-side-panel {
42
+ --crewlet-side-panel-width: 26.25rem;
43
+ --crewlet-side-panel-head-height: var(--size-shell-topbar);
44
+ --crewlet-side-panel-inset: var(--spacing-4);
45
+ position: relative;
46
+ display: flex;
47
+ flex: none;
48
+ flex-direction: column;
49
+ width: var(--crewlet-side-panel-width);
50
+ min-height: 0;
51
+ border-left: 1px solid var(--color-border-default);
52
+ background: var(--color-surface-background);
53
+ }
54
+
55
+ /* IN THE SHELL'S ASIDE the panel fills the aside's sheet, which draws the
56
+ edge, the corner and the ground, and whose track is the width. */
57
+ .crewlet-side-panel--fill {
58
+ flex: 1 1 auto;
59
+ width: auto;
60
+ border-left: 0;
61
+ background: transparent;
62
+ }
63
+
64
+ .crewlet-side-panel[data-expanded] {
65
+ flex: 1 1 auto;
66
+ width: auto;
67
+ border-left: 0;
68
+ }
69
+
70
+ /* The grip straddles the panel's hairline, which is the edge it moves. */
71
+ .crewlet-side-panel > .crewlet-resize-handle--left {
72
+ left: calc(var(--crewlet-resize-handle-width) / -2);
73
+ }
74
+
75
+ /*
76
+ * THE HEAD: the mark, the title, and the actions at the end. The title keeps
77
+ * what the actions leave it and truncates, so the actions never wrap. Its
78
+ * start inset is the body's, so the mark stands on the line the body's
79
+ * content starts on.
80
+ */
81
+ .crewlet-side-panel__head {
82
+ display: flex;
83
+ flex: none;
84
+ align-items: center;
85
+ gap: var(--spacing-2);
86
+ height: var(--crewlet-side-panel-head-height);
87
+ padding: 0 var(--spacing-2) 0 var(--spacing-4);
88
+ border-bottom: 1px solid var(--color-border-default);
89
+ }
90
+
91
+ .crewlet-side-panel__icon {
92
+ display: inline-flex;
93
+ flex: none;
94
+ color: var(--color-text-tertiary);
95
+ }
96
+
97
+ .crewlet-side-panel__title {
98
+ flex: 1 1 auto;
99
+ min-width: 0;
100
+ margin: 0;
101
+ overflow: hidden;
102
+ color: var(--color-text-primary);
103
+ font-size: var(--font-size-sm);
104
+ font-weight: var(--font-weight-semibold);
105
+ line-height: var(--font-line-height-snug);
106
+ text-overflow: ellipsis;
107
+ white-space: nowrap;
108
+ }
109
+
110
+ /* THE HEADING TAKES FOCUS WITHOUT A RING. It is focused so a screen reader
111
+ announces what opened, and it is not a control: a ring round a title reads
112
+ as something to press. Transparent rather than none, so forced colours,
113
+ which draw every outline in the system colour, still show where focus is. */
114
+ .crewlet-side-panel__title--quiet:focus-visible {
115
+ outline: 2px solid transparent;
116
+ }
117
+
118
+ /* Named for assistive technology only, where the mark beside it says it. */
119
+ .crewlet-side-panel__title--hidden {
120
+ position: absolute;
121
+ width: 1px;
122
+ height: 1px;
123
+ overflow: hidden;
124
+ clip-path: inset(50%);
125
+ white-space: nowrap;
126
+ }
127
+
128
+ .crewlet-side-panel__actions {
129
+ display: inline-flex;
130
+ flex: none;
131
+ align-items: center;
132
+ gap: var(--spacing-1);
133
+ margin-left: auto;
134
+ }
135
+
136
+ /* THE BODY'S INSET IS PUBLISHED (--crewlet-side-panel-inset) for content
137
+ that sticks to its scrollport: a sticky edge stops at the padding, so a
138
+ foot with `bottom: 0` would leave a band under it that the content
139
+ scrolled through; such a foot offsets itself by the inset to sit on the
140
+ edge. */
141
+ .crewlet-side-panel__body {
142
+ /* THE PANEL'S OWN MEASURE, so what it holds folds to the panel's width
143
+ rather than the window's; and its sections head at the panel title's
144
+ step, a level under it and never louder than it. */
145
+ container: crewlet-side-panel / inline-size;
146
+ --crewlet-section-title-size: var(--font-size-sm);
147
+
148
+ /* A COLUMN, so content that should fit the panel rather than scroll it
149
+ can: a child that sets `min-height: 0` shrinks to the room the body has,
150
+ and every other child keeps its content's height and scrolls the body. */
151
+ display: flex;
152
+ flex-direction: column;
153
+ flex: 1 1 auto;
154
+ min-height: 0;
155
+ padding: var(--crewlet-side-panel-inset);
156
+ overflow: auto;
157
+ overscroll-behavior: contain;
158
+ }
159
+
160
+ /* FLUSH, the body draws no inset of its own: what it holds owns its edges
161
+ (a chat thread that scrolls and insets itself). The published inset reads 0
162
+ inside it, so anything that offsets itself by the inset follows. */
163
+ .crewlet-side-panel__body--flush {
164
+ --crewlet-side-panel-inset: 0px;
165
+ }
166
+
167
+ /* THE FOOT holds the panel's own commit, outside the scrolling body, so it
168
+ stays in reach at every scroll. Its inset is the body's. */
169
+ .crewlet-side-panel__foot {
170
+ flex: none;
171
+ padding: var(--spacing-3) var(--spacing-4);
172
+ border-top: 1px solid var(--color-border-default);
173
+ background: var(--color-surface-background);
174
+ }
175
+
176
+ /* ── shapes the host decides ─────────────────────────────────────────── */
177
+
178
+ /* A COLUMN keeps the content its floor: a width dragged in a wide frame is
179
+ capped at what leaves the content `--crewlet-side-panel-reserve` wide. */
180
+ .crewlet-side-panel-frame[data-shape='column'] > .crewlet-side-panel:not([data-expanded]) {
181
+ width: min(var(--crewlet-side-panel-width), max(0px, 100% - var(--crewlet-side-panel-reserve, 0px)));
182
+ }
183
+
184
+ /* A DRAWER slides over the content's end edge, raised off it, rather than
185
+ squeezing the content under a useful width. */
186
+ .crewlet-side-panel-frame[data-shape='drawer'] > .crewlet-side-panel:not([data-expanded]) {
187
+ position: absolute;
188
+ inset-block: 0;
189
+ inset-inline-end: 0;
190
+ z-index: var(--z-index-overlay);
191
+ width: min(var(--crewlet-side-panel-width), 100%);
192
+ /* THE DRAWER'S LIFT, the shell's own rail drawer's: a smaller step left
193
+ the panel's start edge reading as a cut through the content rather than
194
+ a sheet over it. */
195
+ box-shadow: var(--shadow-xl);
196
+ }
197
+
198
+ /* A SHEET is the frame until it is closed. */
199
+ .crewlet-side-panel-frame[data-shape='sheet'] > .crewlet-side-panel {
200
+ position: absolute;
201
+ inset: 0;
202
+ z-index: var(--z-index-overlay);
203
+ width: auto;
204
+ border-left: 0;
205
+ }
206
+
207
+ /* ── shapes the frame measures (no `shape`) ─────────────────────────── */
208
+
209
+ /* NOT ROOM FOR TWO COLUMNS: the drawer, as above. */
210
+ @container crewlet-side-panel-frame (width < 960px) {
211
+ .crewlet-side-panel-frame[data-shape='auto'] > .crewlet-side-panel {
212
+ position: absolute;
213
+ inset-block: 0;
214
+ inset-inline-end: 0;
215
+ z-index: var(--z-index-overlay);
216
+ width: min(var(--crewlet-side-panel-width), 100%);
217
+ box-shadow: var(--shadow-xl);
218
+ }
219
+
220
+ .crewlet-side-panel-frame[data-shape='auto'] > .crewlet-side-panel[data-expanded] {
221
+ inset-inline-start: 0;
222
+ width: auto;
223
+ box-shadow: none;
224
+ }
225
+ }
226
+
227
+ /* A PHONE: the panel is the frame until it is closed. */
228
+ @container crewlet-side-panel-frame (width < 640px) {
229
+ .crewlet-side-panel-frame[data-shape='auto'] > .crewlet-side-panel {
230
+ inset-inline-start: 0;
231
+ width: auto;
232
+ border-left: 0;
233
+ box-shadow: none;
234
+ }
235
+ }
@@ -1,7 +1,8 @@
1
- export { SLIDE_COMPARE_LABELS, SlideCompare } from '../chunk-7CGPPAYR.js';
1
+ export { SLIDE_COMPARE_LABELS, SlideCompare } from '../chunk-UV4LOQ3E.js';
2
2
  import '../chunk-RMEBFYL7.js';
3
+ import '../chunk-HD4QJ2SI.js';
4
+ import '../chunk-EA23JG6R.js';
3
5
  import '../chunk-OMV5W53A.js';
4
- import '../chunk-OG6CL3EB.js';
5
6
  import '../chunk-H5XTJ7GJ.js';
6
7
  import '../chunk-NUZHC6MM.js';
7
8
  import '../chunk-BZFWDIV6.js';
@@ -1,13 +1,14 @@
1
- export { SlideFilmstrip } from '../chunk-QMIWMLFI.js';
1
+ export { SlideFilmstrip } from '../chunk-WOW5SCEK.js';
2
2
  import '../chunk-RMEBFYL7.js';
3
3
  import '../chunk-XJ2QEBMM.js';
4
- import '../chunk-TMM32U7D.js';
5
- import '../chunk-OMV5W53A.js';
6
4
  import '../chunk-SMBKXWML.js';
7
- import '../chunk-OG6CL3EB.js';
5
+ import '../chunk-RSAQOKH3.js';
6
+ import '../chunk-TKS7FTTO.js';
7
+ import '../chunk-HD4QJ2SI.js';
8
+ import '../chunk-EA23JG6R.js';
9
+ import '../chunk-OMV5W53A.js';
8
10
  import '../chunk-H5XTJ7GJ.js';
9
- import '../chunk-LACA4JGC.js';
11
+ import '../chunk-2BQYODY3.js';
10
12
  import '../chunk-NUZHC6MM.js';
11
- import '../chunk-RSAQOKH3.js';
12
13
  import '../chunk-BZFWDIV6.js';
13
14
  import '../chunk-ODEQTPFM.js';
@@ -1,4 +1,4 @@
1
- export { SLIDE_NAV_LABELS, SlideNav } from '../chunk-RRO7UEYU.js';
2
- import '../chunk-LACA4JGC.js';
1
+ export { SLIDE_NAV_LABELS, SlideNav } from '../chunk-OHBXOEP3.js';
2
+ import '../chunk-2BQYODY3.js';
3
3
  import '../chunk-BZFWDIV6.js';
4
4
  import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,35 @@
1
+ import type { HTMLAttributes } from 'react';
2
+ /**
3
+ * How big the ring draws. `em` (the default) follows the text around it, which
4
+ * is what a button's leading slot wants; the steps are the glyph scale of
5
+ * `@crewlethq/icons` (12, 14 and 16px), so a ring that stands in a glyph's
6
+ * place in a status column is exactly the glyph's size and nothing moves when
7
+ * the work finishes and the ring becomes a check.
8
+ */
9
+ export type SpinnerSize = 'em' | 'xs' | 'sm' | 'md';
10
+ export interface SpinnerProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {
11
+ size?: SpinnerSize | undefined;
12
+ }
13
+ /**
14
+ * Work under way, drawn as the package's one ring: a 2px ring in the current
15
+ * ink with its right quarter open, turning once per slow motion step.
16
+ *
17
+ * ONE RING FOR THE WHOLE PACKAGE. A button's pending state, a request's state
18
+ * column and a status tag all draw this element, so a screen that shows three
19
+ * of them at once shows one kind of mark at three places rather than three
20
+ * kinds of mark. The ink is `currentColor`, so the ring takes whatever the
21
+ * words beside it are drawn in.
22
+ *
23
+ * `display: inline-block`, stated, because a ring is a box with a border: as
24
+ * an inline box inside a line of text its width and height are ignored and
25
+ * only a sliver of its left border is drawn.
26
+ *
27
+ * UNDER REDUCED MOTION IT STOPS AND STAYS OPEN. A closed ring reads as an
28
+ * empty status circle, which says "nothing here"; the open one still reads as
29
+ * pending without moving.
30
+ *
31
+ * DECORATION. It is hidden from assistive technology, because a ring has no
32
+ * words: whatever draws it says what is under way (a button sets `aria-busy`,
33
+ * a status says "Working").
34
+ */
35
+ export declare function Spinner({ size, className, ...rest }: SpinnerProps): import("react").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './Spinner.css';
2
+ export { Spinner } from './Spinner.js';
3
+ export type { SpinnerProps, SpinnerSize } from './Spinner.js';
@@ -0,0 +1,2 @@
1
+ export { Spinner } from '../chunk-EA23JG6R.js';
2
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,46 @@
1
+ /*
2
+ * The package's one ring. See Spinner.tsx for why it is inline-block, why it
3
+ * stays open when it stops, and why its ink is the current colour.
4
+ */
5
+ .crewlet-spinner {
6
+ display: inline-block;
7
+ box-sizing: border-box;
8
+ flex: none;
9
+ width: 1em;
10
+ height: 1em;
11
+ border: 2px solid currentColor;
12
+ border-right-color: transparent;
13
+ border-radius: var(--radius-circle);
14
+ opacity: 0.7;
15
+ animation: crewlet-spinner-turn var(--motion-duration-slow) linear infinite;
16
+ }
17
+
18
+ /* The glyph scale of @crewlethq/icons: xs 12px, sm 14px, md 16px. */
19
+ .crewlet-spinner--xs {
20
+ width: var(--font-size-xs);
21
+ height: var(--font-size-xs);
22
+ }
23
+
24
+ .crewlet-spinner--sm {
25
+ width: var(--font-size-sm);
26
+ height: var(--font-size-sm);
27
+ }
28
+
29
+ .crewlet-spinner--md {
30
+ width: var(--font-size-md);
31
+ height: var(--font-size-md);
32
+ }
33
+
34
+ @keyframes crewlet-spinner-turn {
35
+ to {
36
+ transform: rotate(360deg);
37
+ }
38
+ }
39
+
40
+ /* It stops, and keeps its open quarter: a closed ring reads as an empty status
41
+ circle, the open one still reads as pending. */
42
+ @media (prefers-reduced-motion: reduce) {
43
+ .crewlet-spinner {
44
+ animation: none;
45
+ }
46
+ }
@@ -0,0 +1,59 @@
1
+ import { type HTMLAttributes, type ReactNode } from 'react';
2
+ import { type CardSectionPadding } from '../Card/index.js';
3
+ import { type TagVariant } from '../Tag/index.js';
4
+ /** A card's state, drawn as a `Tag` at the end of its head. */
5
+ export interface StatusCardStatus {
6
+ /** The state in words: "Needs your approval", "Applied", "Not permitted". */
7
+ label: string;
8
+ tone: TagVariant;
9
+ /** The Tag's leading mark, at `xs`: a glyph, or a `Spinner` while the card's work runs. */
10
+ icon?: ReactNode;
11
+ }
12
+ /**
13
+ * How the foot's controls stand. A foot that holds a DECISION (a primary
14
+ * action) is end-aligned, where a reader finishes reading the card; a foot of
15
+ * utilities only (downloads, a copy, a link elsewhere) starts on the card's
16
+ * text edge, with a ghost button's padding pulled out so its glyph sits on
17
+ * that edge.
18
+ */
19
+ export type StatusCardActionsAlign = 'end' | 'start';
20
+ export interface StatusCardProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
21
+ /** What the card is, in sentence case: the action proposed, the result shown. */
22
+ title: string;
23
+ /** A second line beside the title, under it on a card narrower than 480px. */
24
+ subtitle?: ReactNode;
25
+ /** Puts the subtitle under the title at every width. */
26
+ subtitlePlacement?: 'beside' | 'below' | undefined;
27
+ /** The card's state, at the end of its head. Part of the card's name. */
28
+ status?: StatusCardStatus | undefined;
29
+ /**
30
+ * The card's work is over (applied, declined, expired): its body steps back
31
+ * to the secondary ink so the foot strip reads first, and what it recorded
32
+ * stays legible.
33
+ */
34
+ settled?: boolean | undefined;
35
+ /** The body's inset. `md` by default; `none` lets a table run to the card's edges. */
36
+ bodyPadding?: CardSectionPadding | undefined;
37
+ /** What happened, as a `ReceiptStrip` at the card's foot, above any actions. */
38
+ strip?: ReactNode;
39
+ /** The foot's controls. */
40
+ actions?: ReactNode;
41
+ /** `end` (the default) for a foot holding a decision; `start` for utilities only. */
42
+ actionsAlign?: StatusCardActionsAlign | undefined;
43
+ children?: ReactNode;
44
+ }
45
+ /**
46
+ * A record with a state, as the product's own card: the default `Card`, one
47
+ * hairline, a sentence-case title over the head's rule, the state as a `Tag`
48
+ * at the end of the head, and what happened as a strip at the foot. No tone
49
+ * rail and no tinted head: the Tag says the state in words, and a rail beside
50
+ * it only repeated it in colour.
51
+ *
52
+ * A SECTION NAMED BY ITS TITLE AND ITS STATE ("Create task, Needs your
53
+ * approval"), so a reader moving by region hears both before reading the
54
+ * body.
55
+ *
56
+ * THE FOOT FOLLOWS ONE RULE: a decision ends the row, utilities start it. On
57
+ * a card narrower than 360px a decision's buttons share the row as blocks.
58
+ */
59
+ export declare function StatusCard({ title, subtitle, subtitlePlacement, status, settled, bodyPadding, strip, actions, actionsAlign, className, children, ...rest }: StatusCardProps): import("react").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './StatusCard.css';
2
+ export { StatusCard } from './StatusCard.js';
3
+ export type { StatusCardActionsAlign, StatusCardProps, StatusCardStatus } from './StatusCard.js';
@@ -0,0 +1,9 @@
1
+ export { StatusCard } from '../chunk-WDIVALLP.js';
2
+ import '../chunk-KYIAFNU7.js';
3
+ import '../chunk-WIATRXEJ.js';
4
+ import '../chunk-INHXF2CL.js';
5
+ import '../chunk-AV2DXAEL.js';
6
+ import '../chunk-BHHIIK3M.js';
7
+ import '../chunk-PQADV6P6.js';
8
+ import '../chunk-BZFWDIV6.js';
9
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,62 @@
1
+ /*
2
+ * A record with a state. The card, its head, its body and its foot are
3
+ * Card's; only what a status card adds is said here.
4
+ */
5
+
6
+ /* The body holds a sentence, a list and a note, one gap apart. */
7
+ .crewlet-status-card__body {
8
+ display: flex;
9
+ flex-direction: column;
10
+ gap: var(--spacing-3);
11
+ min-width: 0;
12
+ font-size: var(--font-size-compact);
13
+ line-height: var(--font-line-height-normal);
14
+ color: var(--color-text-primary);
15
+ }
16
+
17
+ .crewlet-status-card__body > p {
18
+ margin: 0;
19
+ }
20
+
21
+ /* Settled: the body steps back so the strip at the foot reads first. */
22
+ .crewlet-status-card--settled .crewlet-status-card__body {
23
+ color: var(--color-text-secondary);
24
+ }
25
+
26
+ /* The strip fills its flush footer edge to edge. */
27
+ .crewlet-status-card__strip {
28
+ display: block;
29
+ }
30
+
31
+ /*
32
+ * THE FOOT'S ONE RULE. A decision ends the row; utilities start it, with a
33
+ * ghost button at either end pulled out by its padding and edge so its glyph
34
+ * sits on the card's text edge.
35
+ */
36
+ .crewlet-status-card__actions {
37
+ flex-wrap: wrap;
38
+ container: crewlet-status-card-actions / inline-size;
39
+ }
40
+
41
+ .crewlet-status-card__actions--end {
42
+ justify-content: flex-end;
43
+ }
44
+
45
+ .crewlet-status-card__actions--start {
46
+ justify-content: flex-start;
47
+ }
48
+
49
+ .crewlet-status-card__actions--start > .crewlet-btn--ghost.crewlet-btn--small:first-child {
50
+ margin-inline-start: calc(-1 * (var(--spacing-2) + 1px));
51
+ }
52
+
53
+ .crewlet-status-card__actions--start > .crewlet-btn--ghost.crewlet-btn--small:last-child {
54
+ margin-inline-end: calc(-1 * (var(--spacing-2) + 1px));
55
+ }
56
+
57
+ /* A decision on a narrow card (a phone sheet): its buttons share the row as blocks. */
58
+ @container crewlet-status-card-actions (width < 328px) {
59
+ .crewlet-status-card__actions--end > .crewlet-btn {
60
+ flex: 1 1 0;
61
+ }
62
+ }
@@ -0,0 +1,119 @@
1
+ /*
2
+ * A request's steps: a well on the inset ground, an ordered list of steps
3
+ * each on a three-track grid (the 16px state column, the words, the
4
+ * duration), every track aligned to the label's first line.
5
+ */
6
+
7
+ /*
8
+ * A STATE'S MARK, shared with the run chip: a 16px box, the mark centred in
9
+ * it at the glyph's 14px, inked by state. The box's height is the line it
10
+ * stands on (`--crewlet-step-mark-line`), so it sits on that line's middle.
11
+ */
12
+ .crewlet-step-mark {
13
+ display: inline-flex;
14
+ flex: none;
15
+ align-items: center;
16
+ justify-content: center;
17
+ width: var(--font-size-md);
18
+ height: var(--crewlet-step-mark-line, var(--font-size-md));
19
+ }
20
+
21
+ .crewlet-step-mark--running {
22
+ color: var(--color-text-secondary);
23
+ }
24
+
25
+ .crewlet-step-mark--done {
26
+ color: var(--color-feedback-success-ink);
27
+ }
28
+
29
+ .crewlet-step-mark--failed {
30
+ color: var(--color-feedback-danger-ink);
31
+ }
32
+
33
+ .crewlet-step-mark--waiting {
34
+ color: var(--color-feedback-warning-ink);
35
+ }
36
+
37
+ .crewlet-step-mark--refused,
38
+ .crewlet-step-mark--stopped {
39
+ color: var(--color-text-tertiary);
40
+ }
41
+
42
+ .crewlet-step-list {
43
+ --crewlet-step-list-line: calc(var(--font-size-compact) * var(--font-line-height-normal));
44
+
45
+ display: flex;
46
+ flex-direction: column;
47
+ gap: var(--spacing-1);
48
+ min-width: 0;
49
+ padding: var(--spacing-2) var(--spacing-3);
50
+ border-radius: var(--radius-md);
51
+ background: var(--color-surface-inset);
52
+ }
53
+
54
+ .crewlet-step-list__summary {
55
+ font-size: var(--font-size-xs);
56
+ font-variant-numeric: tabular-nums;
57
+ color: var(--color-text-tertiary);
58
+ }
59
+
60
+ .crewlet-step-list__steps {
61
+ display: flex;
62
+ flex-direction: column;
63
+ gap: var(--spacing-2);
64
+ margin: 0;
65
+ padding: 0;
66
+ list-style: none;
67
+ }
68
+
69
+ .crewlet-step-list__step {
70
+ --crewlet-step-mark-line: var(--crewlet-step-list-line);
71
+
72
+ display: grid;
73
+ grid-template-columns: var(--font-size-md) minmax(0, 1fr) auto;
74
+ align-items: start;
75
+ gap: var(--spacing-2);
76
+ font-size: var(--font-size-compact);
77
+ line-height: var(--crewlet-step-list-line);
78
+ color: var(--color-text-primary);
79
+ }
80
+
81
+ .crewlet-step-list__text {
82
+ display: flex;
83
+ flex-direction: column;
84
+ min-width: 0;
85
+ }
86
+
87
+ .crewlet-step-list__label {
88
+ overflow-wrap: anywhere;
89
+ }
90
+
91
+ /*
92
+ * WHAT THE STEP ASKED FOR, in the mono face. Each piece between separators is
93
+ * one inline block, so a line breaks only between pieces (at a space, or
94
+ * after `/`, `?` or `&`) and a piece wraps inside itself only when it alone
95
+ * is wider than the line.
96
+ */
97
+ .crewlet-step-list__detail {
98
+ display: block;
99
+ font-family: var(--font-family-mono);
100
+ font-size: var(--font-size-2xs);
101
+ line-height: var(--font-line-height-snug);
102
+ font-variant-ligatures: none;
103
+ color: var(--color-text-tertiary);
104
+ }
105
+
106
+ .crewlet-step-list__piece {
107
+ display: inline-block;
108
+ max-width: 100%;
109
+ overflow-wrap: anywhere;
110
+ }
111
+
112
+ .crewlet-step-list__duration {
113
+ font-family: var(--font-family-mono);
114
+ font-size: var(--font-size-2xs);
115
+ line-height: var(--crewlet-step-list-line);
116
+ font-variant-numeric: tabular-nums;
117
+ color: var(--color-text-tertiary);
118
+ white-space: nowrap;
119
+ }