@crewlethq/ui 0.54.1 → 0.56.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.
- package/README.md +90 -7
- package/dist/Accordion/index.js +2 -2
- package/dist/AgentHandoffPanel/index.js +13 -8
- package/dist/AppShell/AppShell.d.ts +74 -1
- package/dist/AppShell/ResizeHandle.d.ts +74 -0
- package/dist/AppShell/index.d.ts +7 -2
- package/dist/AppShell/index.js +6 -4
- package/dist/AppShell/regions.d.ts +34 -0
- package/dist/AppShell/storedWidth.d.ts +47 -0
- package/dist/{AppShell-5LPXYUV3.css → AppShell-ZVCJRGXH.css} +172 -1
- package/dist/ArrangeFrame/index.js +2 -2
- package/dist/ArrangeList/index.js +4 -4
- package/dist/ArtifactBar/ArtifactBar.d.ts +13 -2
- package/dist/ArtifactBar/index.js +7 -6
- package/dist/{ArtifactBar-UMZCTARR.css → ArtifactBar-LEBMR35Y.css} +19 -1
- package/dist/ArtifactCard/index.js +5 -5
- package/dist/ArtifactNameCell/ArtifactNameCell.d.ts +7 -1
- package/dist/ArtifactNameCell/index.js +1 -1
- package/dist/ArtifactPanel/ArtifactPanel.d.ts +11 -17
- package/dist/ArtifactPanel/index.d.ts +3 -0
- package/dist/ArtifactPanel/index.js +8 -2
- package/dist/ArtifactPanel-TN4FFK2F.css +43 -0
- package/dist/AvatarPicker/index.js +8 -7
- package/dist/Breadcrumb/index.js +1 -1
- package/dist/Button/index.js +2 -1
- package/dist/{Button-UWKBTKYD.css → Button-VXJ7M5XF.css} +9 -32
- package/dist/Canvas/index.js +4 -3
- package/dist/CanvasBoard/index.js +6 -5
- package/dist/CanvasToolbar/index.js +5 -4
- package/dist/ChangeList/ChangeList.d.ts +114 -0
- package/dist/ChangeList/index.d.ts +3 -0
- package/dist/ChangeList/index.js +10 -0
- package/dist/ChangeList-CB2DLR5S.css +151 -0
- package/dist/ChatThread/ChatThread.d.ts +53 -0
- package/dist/ChatThread/index.d.ts +3 -0
- package/dist/ChatThread/index.js +6 -0
- package/dist/ChatThread-52KMDXHB.css +58 -0
- package/dist/Checkbox/index.js +3 -3
- package/dist/CodeBlock/index.js +5 -4
- package/dist/ColorField/index.js +3 -3
- package/dist/ColorSwatch/index.js +5 -4
- package/dist/Combobox/index.js +3 -3
- package/dist/CommandPalette/index.js +6 -5
- package/dist/CommentThread/index.js +8 -6
- package/dist/Composer/Composer.d.ts +39 -2
- package/dist/Composer/index.js +4 -3
- package/dist/Composer-JSGTOW3F.css +192 -0
- package/dist/ConfirmField/index.js +3 -3
- package/dist/ConflictNote/index.js +3 -2
- package/dist/ContrastHelp/index.js +2 -2
- package/dist/Copyable/index.js +4 -3
- package/dist/DataGrid/driving.d.ts +48 -0
- package/dist/DataGrid/index.d.ts +2 -0
- package/dist/DataGrid/index.js +6 -5
- package/dist/DataTable/index.js +8 -7
- package/dist/DataView/index.js +12 -11
- package/dist/DatasetSource/index.js +2 -2
- package/dist/DateTimePicker/index.js +4 -3
- package/dist/DiffList/DiffList.d.ts +12 -3
- package/dist/DiffList/index.d.ts +1 -1
- package/dist/DiffList/index.js +1 -1
- package/dist/{DiffList-3EX64AAE.css → DiffList-GE6YBRLJ.css} +53 -0
- package/dist/Disclosure/anatomy.d.ts +14 -1
- package/dist/Disclosure/index.js +2 -2
- package/dist/{Disclosure-P4FH3C35.css → Disclosure-FVMA4RW2.css} +36 -0
- package/dist/DocTabsEditor/index.js +6 -5
- package/dist/DownloadButton/DownloadButton.d.ts +21 -4
- package/dist/DownloadButton/index.d.ts +1 -1
- package/dist/DownloadButton/index.js +4 -3
- package/dist/EditingStatus/index.js +2 -2
- package/dist/{Editor-FEKMRFBK.js → Editor-X2J47LPD.js} +5 -4
- package/dist/EntityList/EntityList.d.ts +37 -0
- package/dist/EntityList/index.d.ts +3 -0
- package/dist/EntityList/index.js +10 -0
- package/dist/EntityList-XIICECVC.css +55 -0
- package/dist/ErrorBoundary/index.js +3 -2
- package/dist/FileDrop/index.js +3 -2
- package/dist/FollowBanner/index.js +3 -2
- package/dist/HuePicker/index.js +7 -6
- package/dist/IconButton/IconButton.d.ts +6 -1
- package/dist/IconButton/index.js +1 -1
- package/dist/{IconButton-K24JQHLF.css → IconButton-6WA7UEBJ.css} +44 -21
- package/dist/IconTile/IconTile.d.ts +8 -2
- package/dist/IconTile/index.js +1 -1
- package/dist/{IconTile-4GNWTLAW.css → IconTile-G52XZVR4.css} +3 -0
- package/dist/InlineEditor/index.js +5 -4
- package/dist/Input/index.js +2 -2
- package/dist/LinkInterstitial/index.js +5 -4
- package/dist/ListInput/index.js +5 -4
- package/dist/LogoSlot/index.js +4 -3
- package/dist/Markdown/grammar.d.ts +1 -1
- package/dist/MarkdownEditor/index.js +7 -6
- package/dist/Menu/index.js +4 -3
- package/dist/MergeConflicts/index.js +7 -6
- package/dist/MessageBubble/MessageBubble.d.ts +34 -0
- package/dist/MessageBubble/index.d.ts +3 -0
- package/dist/MessageBubble/index.js +2 -0
- package/dist/MessageBubble-GKO6X3QG.css +71 -0
- package/dist/Modal/index.js +4 -3
- package/dist/OpenInAppCard/OpenInAppCard.d.ts +44 -0
- package/dist/OpenInAppCard/index.d.ts +3 -0
- package/dist/OpenInAppCard/index.js +15 -0
- package/dist/OpenInAppCard-CKHCK7DO.css +24 -0
- package/dist/OrgTable/index.js +3 -3
- package/dist/PeekRail/PeekHost.d.ts +90 -0
- package/dist/PeekRail/PeekRail.d.ts +83 -0
- package/dist/PeekRail/activation.d.ts +30 -0
- package/dist/PeekRail/index.d.ts +8 -0
- package/dist/PeekRail/index.js +8 -0
- package/dist/PeekRail-4L5YUQMW.css +95 -0
- package/dist/PeopleRail/index.js +4 -3
- package/dist/PinTile/index.js +2 -2
- package/dist/PresenterView/index.js +5 -4
- package/dist/PrincipalPicker/index.js +4 -4
- package/dist/ProposalCard/ProposalCard.d.ts +134 -0
- package/dist/ProposalCard/index.d.ts +3 -0
- package/dist/ProposalCard/index.js +17 -0
- package/dist/ProposalCard-HLB3FNLA.css +19 -0
- package/dist/ReceiptStrip/ReceiptStrip.d.ts +66 -0
- package/dist/ReceiptStrip/index.d.ts +3 -0
- package/dist/ReceiptStrip/index.js +5 -0
- package/dist/ReceiptStrip-IIRKRTBG.css +93 -0
- package/dist/RefusalCard/RefusalCard.d.ts +34 -0
- package/dist/RefusalCard/index.d.ts +3 -0
- package/dist/RefusalCard/index.js +10 -0
- package/dist/RefusalCard-UM67F5HB.css +8 -0
- package/dist/RelativeTime/clock.d.ts +0 -6
- package/dist/RelativeTime/index.js +1 -1
- package/dist/ResizeHandle-2UNSZ4ZQ.css +59 -0
- package/dist/ResultTableCard/ResultTableCard.d.ts +64 -0
- package/dist/ResultTableCard/index.d.ts +3 -0
- package/dist/ResultTableCard/index.js +16 -0
- package/dist/ResultTableCard-HZRUDNTX.css +40 -0
- package/dist/ReviewList/index.js +2 -2
- package/dist/RichEditor/codec.d.ts +1 -1
- package/dist/RichEditor/index.js +3 -2
- package/dist/RichEditor/roundtrip.d.ts +1 -1
- package/dist/RunChip/RunChip.d.ts +53 -0
- package/dist/RunChip/index.d.ts +3 -0
- package/dist/RunChip/index.js +10 -0
- package/dist/RunChip-I2S4VZ3R.css +43 -0
- package/dist/SandboxedFrame/index.js +3 -2
- package/dist/SegmentedControl/index.js +6 -5
- package/dist/SelectionBar/index.js +3 -2
- package/dist/SendButton/SendButton.d.ts +38 -0
- package/dist/SendButton/index.d.ts +2 -0
- package/dist/SendButton/index.js +4 -0
- package/dist/SetupWizard/index.js +5 -4
- package/dist/ShareDialog/index.js +7 -6
- package/dist/SheetColumnEditor/index.js +10 -9
- package/dist/SheetGrid/index.js +6 -5
- package/dist/SidePanel/SidePanel.d.ts +137 -0
- package/dist/SidePanel/SidePanelBase.d.ts +59 -0
- package/dist/SidePanel/index.d.ts +5 -0
- package/dist/SidePanel/index.js +11 -0
- package/dist/SidePanel-ERBUIELD.css +235 -0
- package/dist/SlideCompare/index.js +3 -2
- package/dist/SlideFilmstrip/index.js +5 -4
- package/dist/SlideNav/index.js +2 -2
- package/dist/Spinner/Spinner.d.ts +35 -0
- package/dist/Spinner/index.d.ts +3 -0
- package/dist/Spinner/index.js +2 -0
- package/dist/Spinner-XZ2TVYE5.css +46 -0
- package/dist/StatusCard/StatusCard.d.ts +59 -0
- package/dist/StatusCard/index.d.ts +3 -0
- package/dist/StatusCard/index.js +9 -0
- package/dist/StatusCard-6RPEE6UU.css +62 -0
- package/dist/StepList-A4YVU4JI.css +119 -0
- package/dist/Stepper/StepList.d.ts +72 -0
- package/dist/Stepper/index.d.ts +3 -0
- package/dist/Stepper/index.js +2 -1
- package/dist/SuggestionRow/SuggestionRow.d.ts +45 -0
- package/dist/SuggestionRow/index.d.ts +3 -0
- package/dist/SuggestionRow/index.js +3 -0
- package/dist/SuggestionRow-OKBGNHSS.css +102 -0
- package/dist/Switcher/index.js +6 -5
- package/dist/Table/Table.d.ts +23 -2
- package/dist/Table/index.d.ts +1 -1
- package/dist/Table/index.js +1 -1
- package/dist/{Table-TGCS4C3F.css → Table-RUYMMWXT.css} +49 -0
- package/dist/TableCells/index.js +2 -2
- package/dist/Tabs/index.js +5 -4
- package/dist/TagsInput/index.js +3 -3
- package/dist/ThemeGallery/index.js +2 -2
- package/dist/ThemeSwitcher/index.js +7 -6
- package/dist/ThemeToggle/index.js +2 -2
- package/dist/TimeRangePicker/TimeRangePicker.d.ts +121 -0
- package/dist/TimeRangePicker/index.d.ts +2 -0
- package/dist/TimeRangePicker/index.js +23 -0
- package/dist/TimeWindowPicker/index.js +5 -4
- package/dist/Toaster/Toaster.d.ts +27 -3
- package/dist/Toaster/index.d.ts +2 -2
- package/dist/Toaster/index.js +1 -1
- package/dist/{Toaster-C6BQ7L6I.css → Toaster-MX7TBMC3.css} +32 -11
- package/dist/TreeCanvas/index.js +5 -4
- package/dist/TreeGrid/index.js +2 -2
- package/dist/VersionCompare/index.js +7 -6
- package/dist/VersionTimeline/index.js +4 -3
- package/dist/WidgetFrame/index.js +2 -2
- package/dist/{chunk-SS4XCUUJ.js → chunk-272Y3YMV.js} +3 -3
- package/dist/{chunk-LACA4JGC.js → chunk-2BQYODY3.js} +1 -1
- package/dist/{chunk-XS2FJVMT.js → chunk-2TTFDRR3.js} +2 -2
- package/dist/{chunk-4BJK7FE5.js → chunk-3EYSYEXP.js} +1 -1
- package/dist/chunk-3LI4TRUR.js +22 -0
- package/dist/{chunk-5WYPSVRX.js → chunk-3NQS6KYG.js} +1 -1
- package/dist/{chunk-V2N3BMOT.js → chunk-45KMH3E3.js} +11 -4
- package/dist/{chunk-2GIWL7IS.js → chunk-4CBGIRVU.js} +1 -1
- package/dist/{chunk-3QSKDZR5.js → chunk-4OINEWR4.js} +1 -1
- package/dist/{chunk-EZ43L6T7.js → chunk-56P72ZBE.js} +4 -4
- package/dist/{chunk-J24Q4HTD.js → chunk-5NT6OIPP.js} +13 -3
- package/dist/{chunk-FNPZ3LLQ.js → chunk-5OMV75GE.js} +3 -3
- package/dist/{chunk-6RMZH7P7.js → chunk-672GLRBU.js} +2 -2
- package/dist/{chunk-GPZXBJFU.js → chunk-67F2AM4R.js} +2 -2
- package/dist/{chunk-NQCY44B3.js → chunk-67MW366X.js} +2 -2
- package/dist/{chunk-SSHDQBHR.js → chunk-6KLK7E76.js} +2 -2
- package/dist/{chunk-ZFM5L7M4.js → chunk-6NJW5KSX.js} +2 -2
- package/dist/{chunk-A4GFEMVI.js → chunk-6T6V5565.js} +1 -1
- package/dist/{chunk-THDGBD6Y.js → chunk-AKFHMLEX.js} +1 -1
- package/dist/{chunk-6FVGSWLS.js → chunk-AWSFK2IK.js} +1 -1
- package/dist/{chunk-HQJ24WPM.js → chunk-AZ5BKSGV.js} +1 -1
- package/dist/chunk-BLPT6GHV.js +31 -0
- package/dist/chunk-C3FX7ZSU.js +30 -0
- package/dist/{chunk-LDGQIDIZ.js → chunk-CGT4R7LW.js} +64 -2
- package/dist/{chunk-WXWMHYKW.js → chunk-D5OSP3KI.js} +2 -2
- package/dist/{chunk-CQEYF3UW.js → chunk-DOPPU6TZ.js} +3 -3
- package/dist/{chunk-AC22RZKC.js → chunk-DRT4L4WC.js} +17 -5
- package/dist/chunk-E4DZOE55.js +162 -0
- package/dist/chunk-EA23JG6R.js +9 -0
- package/dist/{chunk-J53T2QAH.js → chunk-EBG3V4MK.js} +6 -6
- package/dist/{chunk-7PE56HHD.js → chunk-EDNZHW4K.js} +57 -7
- package/dist/{chunk-E6HXFFWO.js → chunk-EGL24VY5.js} +2 -2
- package/dist/{chunk-7SHAFLEX.js → chunk-ES4HR34Y.js} +2 -2
- package/dist/chunk-EVWTLFKI.js +102 -0
- package/dist/chunk-FA44M2YT.js +25 -0
- package/dist/{chunk-VWYT3GVV.js → chunk-FLTMDSC3.js} +1 -1
- package/dist/{chunk-LJHH4WWB.js → chunk-FXQLNETQ.js} +1 -1
- package/dist/{chunk-3NXWH5NC.js → chunk-GCASX3FD.js} +4 -4
- package/dist/{chunk-OGXHZHRX.js → chunk-GG4QZWMQ.js} +2 -2
- package/dist/{chunk-XP7EXNKF.js → chunk-GPW4M4OI.js} +2 -2
- package/dist/chunk-GZMEWWXW.js +78 -0
- package/dist/{chunk-OG6CL3EB.js → chunk-HD4QJ2SI.js} +3 -2
- package/dist/{chunk-SYY26XBX.js → chunk-HGCDJOEF.js} +2 -2
- package/dist/chunk-HGYHWWA5.js +54 -0
- package/dist/{chunk-GRKGLZFM.js → chunk-HL4CPLEK.js} +7 -7
- package/dist/{chunk-BEHFTRMZ.js → chunk-HNK43Z3P.js} +23 -5
- package/dist/{chunk-UO7JZVCO.js → chunk-HVEDVKXL.js} +1 -1
- package/dist/{chunk-ILFEWRLG.js → chunk-I7VG6RQE.js} +1 -1
- package/dist/{chunk-3RCHEFIL.js → chunk-ICJRP6QW.js} +2 -2
- package/dist/{chunk-CUL5XV6O.js → chunk-IDQBSMMZ.js} +2 -2
- package/dist/chunk-JILNCBBS.js +27 -0
- package/dist/{chunk-5O72FSOK.js → chunk-JJ3NOBJ6.js} +5 -5
- package/dist/chunk-JLRXCKTS.js +97 -0
- package/dist/{chunk-OJCVVCAZ.js → chunk-JMMS2PQU.js} +1 -1
- package/dist/{chunk-SXBJMBSV.js → chunk-JS2TRHBF.js} +2 -2
- package/dist/{chunk-3CZ7XAVY.js → chunk-KS7YIJ4S.js} +10 -6
- package/dist/{chunk-VWNC2L6W.js → chunk-KW6KCVM7.js} +1 -1
- package/dist/{chunk-X4NIE7CI.js → chunk-LQ6AGUDL.js} +2 -2
- package/dist/chunk-LXYSWQNE.js +214 -0
- package/dist/{chunk-6VQA2LZC.js → chunk-MYX4XABB.js} +3 -3
- package/dist/{chunk-PM3JVNRY.js → chunk-N3ISZVLK.js} +1 -1
- package/dist/chunk-NEHSV55H.js +119 -0
- package/dist/{chunk-RQI43UJ7.js → chunk-NHJQXDHA.js} +1 -1
- package/dist/{chunk-VVOPDWLX.js → chunk-NI7WUPH3.js} +2 -2
- package/dist/{chunk-OCRVY42T.js → chunk-NK3D66PB.js} +1 -1
- package/dist/{chunk-RHPBTE3F.js → chunk-NQGZRMUG.js} +1 -1
- package/dist/chunk-NVZCANJ5.js +3 -0
- package/dist/{chunk-RRO7UEYU.js → chunk-OHBXOEP3.js} +1 -1
- package/dist/{chunk-RFPCHMSX.js → chunk-OHG7762N.js} +1 -1
- package/dist/{chunk-OBUQVGEG.js → chunk-OJ2QULVH.js} +1 -1
- package/dist/{chunk-PGYIDNGG.js → chunk-OOZ5AGPS.js} +4 -4
- package/dist/{chunk-34RMTXDZ.js → chunk-OYAXKHVW.js} +1 -1
- package/dist/{chunk-WQQ5T5SA.js → chunk-OZIBNFLO.js} +1 -1
- package/dist/{chunk-DFK5EQTU.js → chunk-PDTEPN4D.js} +1 -1
- package/dist/chunk-PIYJNCN7.js +124 -0
- package/dist/{chunk-VP2ODUCC.js → chunk-Q6R6EUQ4.js} +3 -3
- package/dist/chunk-QYEOGGVS.js +161 -0
- package/dist/{chunk-YCC2S7DF.js → chunk-QZ4B72FP.js} +2 -2
- package/dist/chunk-RV2FGESF.js +98 -0
- package/dist/{chunk-SEPSXOGJ.js → chunk-S5C64PTT.js} +1 -1
- package/dist/chunk-SDSBVVLL.js +45 -0
- package/dist/{chunk-ZNOXQACX.js → chunk-T4D7RZNI.js} +2 -2
- package/dist/{chunk-G5SUSCWL.js → chunk-TA72CURM.js} +1 -1
- package/dist/{chunk-WXOYHVWG.js → chunk-TD3UHDFY.js} +4 -4
- package/dist/{chunk-VN47PYUF.js → chunk-TDQZ4LB5.js} +8 -6
- package/dist/chunk-TFGCNBWP.js +64 -0
- package/dist/{chunk-TMM32U7D.js → chunk-TKS7FTTO.js} +2 -2
- package/dist/{chunk-C6Z3MLSA.js → chunk-U5PJSGHG.js} +1 -1
- package/dist/{chunk-7CGPPAYR.js → chunk-UV4LOQ3E.js} +1 -1
- package/dist/{chunk-34ANLQW2.js → chunk-UVYGMCJ4.js} +173 -8
- package/dist/{chunk-ON2E46DX.js → chunk-VRNUKH2W.js} +1 -1
- package/dist/{chunk-XX2VQE55.js → chunk-WBRC3MNE.js} +1 -1
- package/dist/chunk-WDIVALLP.js +51 -0
- package/dist/{chunk-SQ4JFHO7.js → chunk-WOW5SCEK.js} +1 -1
- package/dist/chunk-XODESBSR.js +250 -0
- package/dist/chunk-XQI2OUV4.js +59 -0
- package/dist/{chunk-EJWPYEG4.js → chunk-XRZGGB6I.js} +1 -1
- package/dist/{chunk-34C7NYIQ.js → chunk-Y73BQL74.js} +1 -1
- package/dist/{chunk-KIRQZG3G.js → chunk-YCGZK2E4.js} +1 -1
- package/dist/{chunk-CAVWDJF4.js → chunk-YCZ2FBKA.js} +1 -1
- package/dist/{chunk-D7Q5MQRF.js → chunk-YEURM24I.js} +2 -2
- package/dist/{chunk-IW55G7XG.js → chunk-YNRKVY7X.js} +11 -1
- package/dist/chunk-YY445YFQ.js +55 -0
- package/dist/{chunk-LFHCXZO5.js → chunk-Z3GDMNMU.js} +3 -3
- package/dist/{chunk-NMR7AJSB.js → chunk-Z7PJF6F3.js} +2 -2
- package/dist/{chunk-U3LNU4B2.js → chunk-ZH4MJM73.js} +1 -1
- package/dist/generated/index.d.ts +17 -0
- package/dist/generated/index.js +138 -119
- package/dist/index.js +138 -119
- package/dist/styles.css +1877 -218
- package/dist/utils/index.js +1 -1
- package/dist/utils/useDownload.d.ts +6 -0
- package/package.json +3 -3
- package/dist/ArtifactPanel-KKUUIPEU.css +0 -159
- package/dist/Composer-TXULCPPV.css +0 -99
- package/dist/chunk-FZVJDJFN.js +0 -54
- package/dist/chunk-IXJHTFXG.js +0 -17
- package/dist/chunk-NBDN5JZV.js +0 -123
- package/dist/chunk-UJ4VVK7R.js +0 -48
- package/dist/{chunk-UTESMBPL.js → chunk-ESUZ27TS.js} +1 -1
- /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-
|
|
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-
|
|
1
|
+
export { SlideFilmstrip } from '../chunk-WOW5SCEK.js';
|
|
2
2
|
import '../chunk-RMEBFYL7.js';
|
|
3
3
|
import '../chunk-XJ2QEBMM.js';
|
|
4
4
|
import '../chunk-SMBKXWML.js';
|
|
5
5
|
import '../chunk-RSAQOKH3.js';
|
|
6
|
-
import '../chunk-
|
|
6
|
+
import '../chunk-TKS7FTTO.js';
|
|
7
|
+
import '../chunk-HD4QJ2SI.js';
|
|
8
|
+
import '../chunk-EA23JG6R.js';
|
|
7
9
|
import '../chunk-OMV5W53A.js';
|
|
8
|
-
import '../chunk-OG6CL3EB.js';
|
|
9
10
|
import '../chunk-H5XTJ7GJ.js';
|
|
10
|
-
import '../chunk-
|
|
11
|
+
import '../chunk-2BQYODY3.js';
|
|
11
12
|
import '../chunk-NUZHC6MM.js';
|
|
12
13
|
import '../chunk-BZFWDIV6.js';
|
|
13
14
|
import '../chunk-ODEQTPFM.js';
|
package/dist/SlideNav/index.js
CHANGED
|
@@ -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,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,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
|
+
}
|