@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
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { useMediaMatch } from './chunk-RTPQDNW3.js';
|
|
2
|
-
import { Menu } from './chunk-
|
|
2
|
+
import { Menu } from './chunk-TKS7FTTO.js';
|
|
3
|
+
import { PeekContext, AsideContext, ResizeHandle, clampSize } from './chunk-PIYJNCN7.js';
|
|
3
4
|
import { HIT_AREA_CLASS } from './chunk-2YTOOH3A.js';
|
|
4
5
|
import { useModalLayer, focusables } from './chunk-H5XTJ7GJ.js';
|
|
5
|
-
import { IconButton } from './chunk-
|
|
6
|
+
import { IconButton } from './chunk-2BQYODY3.js';
|
|
6
7
|
import { VisuallyHidden } from './chunk-BZFWDIV6.js';
|
|
7
8
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
8
9
|
import './HitArea-QUOS6ZDJ.css';
|
|
9
|
-
import './AppShell-
|
|
10
|
+
import './AppShell-ZVCJRGXH.css';
|
|
11
|
+
import './ResizeHandle-2UNSZ4ZQ.css';
|
|
10
12
|
import { createContext, forwardRef, useContext, useId, useState, useRef, useCallback, useEffect, useLayoutEffect } from 'react';
|
|
11
13
|
import { breakpoint } from '@crewlethq/tokens';
|
|
12
14
|
import { ChevronUpGlyph, ChevronsUpDownGlyph, ChevronRightGlyph, MenuGlyph } from '@crewlethq/icons/glyphs';
|
|
@@ -76,6 +78,7 @@ function AccountRow({
|
|
|
76
78
|
actions ? /* @__PURE__ */ jsx("div", { className: "crewlet-account-row__actions", children: actions }) : null
|
|
77
79
|
] });
|
|
78
80
|
}
|
|
81
|
+
var APP_SHELL_ASIDE_WIDTH = 420;
|
|
79
82
|
var NARROW = `(width < ${breakpoint.shell})`;
|
|
80
83
|
var AppShellContext = createContext(null);
|
|
81
84
|
function useAppShell() {
|
|
@@ -94,11 +97,22 @@ function AppShell({
|
|
|
94
97
|
navigationKey,
|
|
95
98
|
toggleLabel = "Sections",
|
|
96
99
|
skipLabel = "Skip to content",
|
|
100
|
+
aside,
|
|
101
|
+
asideWidth = APP_SHELL_ASIDE_WIDTH,
|
|
102
|
+
asideReserve,
|
|
103
|
+
asideLabel,
|
|
104
|
+
asideShape = "column",
|
|
105
|
+
onAsideClose,
|
|
106
|
+
asideResize,
|
|
107
|
+
peek,
|
|
108
|
+
peekShape = "column",
|
|
97
109
|
className,
|
|
98
110
|
style,
|
|
99
111
|
children,
|
|
100
112
|
...rest
|
|
101
113
|
}) {
|
|
114
|
+
const hasAside = aside !== void 0 && aside !== null && aside !== false;
|
|
115
|
+
const hasPeek = peek !== void 0 && peek !== null && peek !== false;
|
|
102
116
|
const generatedId = useId();
|
|
103
117
|
const railId = `${generatedId}-rail`;
|
|
104
118
|
const main = mainId ?? `${generatedId}-main`;
|
|
@@ -132,6 +146,25 @@ function AppShell({
|
|
|
132
146
|
observer.observe(scroller);
|
|
133
147
|
return () => observer.disconnect();
|
|
134
148
|
}, [scroller]);
|
|
149
|
+
const root = useRef(null);
|
|
150
|
+
const sheet = useRef(null);
|
|
151
|
+
const asideColumn = hasAside && asideShape === "column";
|
|
152
|
+
const [occupied, setOccupied] = useState(null);
|
|
153
|
+
useLayoutEffect(() => {
|
|
154
|
+
const frame = root.current;
|
|
155
|
+
const page = sheet.current;
|
|
156
|
+
if (!asideColumn || !frame || !page) {
|
|
157
|
+
setOccupied(null);
|
|
158
|
+
return void 0;
|
|
159
|
+
}
|
|
160
|
+
const measure = () => setOccupied(Math.max(0, Math.round(frame.getBoundingClientRect().right - page.getBoundingClientRect().right)));
|
|
161
|
+
measure();
|
|
162
|
+
if (typeof ResizeObserver === "undefined") return void 0;
|
|
163
|
+
const observer = new ResizeObserver(measure);
|
|
164
|
+
observer.observe(page);
|
|
165
|
+
observer.observe(frame);
|
|
166
|
+
return () => observer.disconnect();
|
|
167
|
+
}, [asideColumn]);
|
|
135
168
|
const shell = {
|
|
136
169
|
narrow,
|
|
137
170
|
drawerOpen,
|
|
@@ -147,6 +180,7 @@ function AppShell({
|
|
|
147
180
|
"div",
|
|
148
181
|
{
|
|
149
182
|
...rest,
|
|
183
|
+
ref: root,
|
|
150
184
|
className: cx(
|
|
151
185
|
"crewlet-app-shell",
|
|
152
186
|
fill && "crewlet-app-shell--fill",
|
|
@@ -155,10 +189,21 @@ function AppShell({
|
|
|
155
189
|
!shell.hasRail && "crewlet-app-shell--no-rail",
|
|
156
190
|
className
|
|
157
191
|
),
|
|
192
|
+
"data-aside": hasAside ? asideShape : void 0,
|
|
193
|
+
"data-peek": hasPeek ? peekShape : void 0,
|
|
158
194
|
style: {
|
|
159
195
|
...style,
|
|
160
196
|
["--crewlet-app-shell-gutter"]: `${gutter}px`,
|
|
161
|
-
...drawerZ === null ? null : { ["--crewlet-app-shell-drawer-z"]: String(drawerZ) }
|
|
197
|
+
...drawerZ === null ? null : { ["--crewlet-app-shell-drawer-z"]: String(drawerZ) },
|
|
198
|
+
// The aside's width is published on the ROOT, because two things
|
|
199
|
+
// read it from opposite sides: the grid track that sizes the column
|
|
200
|
+
// is declared here, and the overlay that sizes itself is a
|
|
201
|
+
// descendant. A custom property inherits downward only.
|
|
202
|
+
...hasAside ? {
|
|
203
|
+
["--crewlet-app-shell-aside"]: `${asideWidth}px`,
|
|
204
|
+
...asideReserve === void 0 ? null : { ["--crewlet-app-shell-aside-reserve"]: `${asideReserve}px` }
|
|
205
|
+
} : null,
|
|
206
|
+
...occupied === null ? null : { ["--crewlet-app-shell-aside-occupied"]: `${occupied}px` }
|
|
162
207
|
},
|
|
163
208
|
children: [
|
|
164
209
|
/* @__PURE__ */ jsx(
|
|
@@ -187,16 +232,99 @@ function AppShell({
|
|
|
187
232
|
children: sidebar
|
|
188
233
|
}
|
|
189
234
|
) : null,
|
|
190
|
-
/* @__PURE__ */ jsxs("div", { className: "crewlet-app-shell__sheet", children: [
|
|
235
|
+
/* @__PURE__ */ jsxs("div", { ref: sheet, className: "crewlet-app-shell__sheet", children: [
|
|
191
236
|
topbar,
|
|
192
237
|
banner ? /* @__PURE__ */ jsx("div", { className: "crewlet-app-shell__banner", children: banner }) : null,
|
|
193
|
-
/* @__PURE__ */
|
|
238
|
+
/* @__PURE__ */ jsxs("div", { className: "crewlet-app-shell__body", children: [
|
|
239
|
+
/* @__PURE__ */ jsx("main", { id: main, ref: setMain, className: "crewlet-app-shell__main", tabIndex: -1, children: /* @__PURE__ */ jsx("div", { className: "crewlet-app-shell__content", children }) }),
|
|
240
|
+
hasPeek ? /* @__PURE__ */ jsx(PeekContext.Provider, { value: { shape: peekShape }, children: peek }) : null
|
|
241
|
+
] }),
|
|
194
242
|
footer
|
|
195
|
-
] })
|
|
243
|
+
] }),
|
|
244
|
+
hasAside ? /* @__PURE__ */ jsx(
|
|
245
|
+
ShellAside,
|
|
246
|
+
{
|
|
247
|
+
shape: asideShape,
|
|
248
|
+
label: asideLabel,
|
|
249
|
+
width: asideWidth,
|
|
250
|
+
resize: asideResize,
|
|
251
|
+
onClose: onAsideClose,
|
|
252
|
+
children: aside
|
|
253
|
+
}
|
|
254
|
+
) : null
|
|
196
255
|
]
|
|
197
256
|
}
|
|
198
257
|
) });
|
|
199
258
|
}
|
|
259
|
+
function ShellAside({ shape, label, width, resize, onClose, children }) {
|
|
260
|
+
const region = useRef(null);
|
|
261
|
+
const surfaceId = useId();
|
|
262
|
+
const modal = shape !== "column";
|
|
263
|
+
const [z, setZ] = useState(null);
|
|
264
|
+
return /* @__PURE__ */ jsxs(AsideContext.Provider, { value: { shape }, children: [
|
|
265
|
+
/* @__PURE__ */ jsxs(
|
|
266
|
+
"div",
|
|
267
|
+
{
|
|
268
|
+
ref: region,
|
|
269
|
+
className: "crewlet-app-shell__aside",
|
|
270
|
+
"data-shape": shape,
|
|
271
|
+
role: modal ? "dialog" : "complementary",
|
|
272
|
+
"aria-modal": modal || void 0,
|
|
273
|
+
"aria-label": label,
|
|
274
|
+
tabIndex: modal ? -1 : void 0,
|
|
275
|
+
style: modal && z !== null ? { zIndex: z + 1 } : void 0,
|
|
276
|
+
children: [
|
|
277
|
+
!modal && resize ? /* @__PURE__ */ jsx(
|
|
278
|
+
ResizeHandle,
|
|
279
|
+
{
|
|
280
|
+
label: resize.label,
|
|
281
|
+
value: width,
|
|
282
|
+
min: resize.min,
|
|
283
|
+
max: resize.max,
|
|
284
|
+
defaultValue: resize.defaultValue,
|
|
285
|
+
onValueChange: resize.onChange,
|
|
286
|
+
onValueCommit: resize.onCommit,
|
|
287
|
+
controls: surfaceId,
|
|
288
|
+
edge: "left"
|
|
289
|
+
}
|
|
290
|
+
) : null,
|
|
291
|
+
/* @__PURE__ */ jsx("div", { id: surfaceId, className: "crewlet-app-shell__aside-sheet", children })
|
|
292
|
+
]
|
|
293
|
+
}
|
|
294
|
+
),
|
|
295
|
+
modal ? /* @__PURE__ */ jsx(AsideVeil, { region, onClose, onZIndex: setZ }) : null
|
|
296
|
+
] });
|
|
297
|
+
}
|
|
298
|
+
function AsideVeil({
|
|
299
|
+
region,
|
|
300
|
+
onClose,
|
|
301
|
+
onZIndex
|
|
302
|
+
}) {
|
|
303
|
+
const layer = useModalLayer({
|
|
304
|
+
onClose: () => onClose?.(),
|
|
305
|
+
// A modal that nothing can close keeps Escape and its veil from doing
|
|
306
|
+
// anything rather than pretending to: the host gave no way to close it.
|
|
307
|
+
dismissable: onClose !== void 0
|
|
308
|
+
});
|
|
309
|
+
const { panelRef, zIndex } = layer;
|
|
310
|
+
useEffect(() => {
|
|
311
|
+
onZIndex(zIndex);
|
|
312
|
+
return () => onZIndex(null);
|
|
313
|
+
}, [onZIndex, zIndex]);
|
|
314
|
+
useLayoutEffect(() => {
|
|
315
|
+
panelRef(region.current);
|
|
316
|
+
return () => panelRef(null);
|
|
317
|
+
}, [panelRef, region]);
|
|
318
|
+
return /* @__PURE__ */ jsx(
|
|
319
|
+
"div",
|
|
320
|
+
{
|
|
321
|
+
className: "crewlet-app-shell__veil crewlet-app-shell__aside-veil",
|
|
322
|
+
ref: layer.veilRef,
|
|
323
|
+
role: "presentation",
|
|
324
|
+
style: { zIndex }
|
|
325
|
+
}
|
|
326
|
+
);
|
|
327
|
+
}
|
|
200
328
|
function ShellDrawer({
|
|
201
329
|
rail,
|
|
202
330
|
onClose,
|
|
@@ -395,5 +523,42 @@ AppShell.RailStatus = AppShellRailStatus;
|
|
|
395
523
|
AppShell.Topbar = AppShellTopbar;
|
|
396
524
|
AppShell.Toggle = AppShellToggle;
|
|
397
525
|
AppShell.AccountRow = AccountRow;
|
|
526
|
+
AppShell.ResizeHandle = ResizeHandle;
|
|
527
|
+
function defaultStorage() {
|
|
528
|
+
try {
|
|
529
|
+
return typeof window === "undefined" ? null : window.localStorage;
|
|
530
|
+
} catch {
|
|
531
|
+
return null;
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
function readStoredWidth(storage, key, min, max) {
|
|
535
|
+
if (!storage) return null;
|
|
536
|
+
try {
|
|
537
|
+
const stored = storage.getItem(key);
|
|
538
|
+
if (stored === null || stored.trim() === "") return null;
|
|
539
|
+
const value = Number(stored);
|
|
540
|
+
return Number.isFinite(value) && value >= min && value <= max ? Math.round(value) : null;
|
|
541
|
+
} catch {
|
|
542
|
+
return null;
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
function useStoredWidth({ key, min, max, storage }) {
|
|
546
|
+
const [store] = useState(() => storage === void 0 ? defaultStorage() : storage);
|
|
547
|
+
const [width, setStored] = useState(() => readStoredWidth(store, key, min, max));
|
|
548
|
+
const setWidth = useCallback((px) => setStored(clampSize(px, min, max)), [min, max]);
|
|
549
|
+
const commitWidth = useCallback(
|
|
550
|
+
(px) => {
|
|
551
|
+
const next = clampSize(px, min, max);
|
|
552
|
+
setStored(next);
|
|
553
|
+
if (!store) return;
|
|
554
|
+
try {
|
|
555
|
+
store.setItem(key, String(next));
|
|
556
|
+
} catch {
|
|
557
|
+
}
|
|
558
|
+
},
|
|
559
|
+
[key, min, max, store]
|
|
560
|
+
);
|
|
561
|
+
return { width, setWidth, commitWidth };
|
|
562
|
+
}
|
|
398
563
|
|
|
399
|
-
export { AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellRailStatus, AppShellToggle, AppShellTopbar, useAppShell };
|
|
564
|
+
export { APP_SHELL_ASIDE_WIDTH, AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellRailStatus, AppShellToggle, AppShellTopbar, readStoredWidth, useAppShell, useStoredWidth };
|
|
@@ -2,7 +2,7 @@ import { useTreeState, treeExpandable, treeLevel, treePosInSet, treeSetSize, tre
|
|
|
2
2
|
import { LayerNodeBridge } from './chunk-LM3ISVJA.js';
|
|
3
3
|
import { LayerHost, LAYER_REPOSITION_EVENT } from './chunk-OMV5W53A.js';
|
|
4
4
|
import { focusables } from './chunk-H5XTJ7GJ.js';
|
|
5
|
-
import { IconButton } from './chunk-
|
|
5
|
+
import { IconButton } from './chunk-2BQYODY3.js';
|
|
6
6
|
import { VisuallyHidden } from './chunk-BZFWDIV6.js';
|
|
7
7
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
8
8
|
import './TreeGrid-UCPV37XB.css';
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Tag } from './chunk-KYIAFNU7.js';
|
|
2
|
+
import { Card } from './chunk-INHXF2CL.js';
|
|
3
|
+
import { cx } from './chunk-ODEQTPFM.js';
|
|
4
|
+
import './StatusCard-6RPEE6UU.css';
|
|
5
|
+
import { useId } from 'react';
|
|
6
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
function StatusCard({
|
|
9
|
+
title,
|
|
10
|
+
subtitle,
|
|
11
|
+
subtitlePlacement,
|
|
12
|
+
status,
|
|
13
|
+
settled = false,
|
|
14
|
+
bodyPadding = "md",
|
|
15
|
+
strip,
|
|
16
|
+
actions,
|
|
17
|
+
actionsAlign = "end",
|
|
18
|
+
className,
|
|
19
|
+
children,
|
|
20
|
+
...rest
|
|
21
|
+
}) {
|
|
22
|
+
const id = useId();
|
|
23
|
+
const titleId = `${id}-title`;
|
|
24
|
+
const statusId = `${id}-status`;
|
|
25
|
+
return /* @__PURE__ */ jsxs(
|
|
26
|
+
Card,
|
|
27
|
+
{
|
|
28
|
+
...rest,
|
|
29
|
+
as: "section",
|
|
30
|
+
"aria-labelledby": status ? `${titleId} ${statusId}` : titleId,
|
|
31
|
+
className: cx("crewlet-status-card", settled && "crewlet-status-card--settled", className),
|
|
32
|
+
"data-settled": settled || void 0,
|
|
33
|
+
children: [
|
|
34
|
+
/* @__PURE__ */ jsx(
|
|
35
|
+
Card.Header,
|
|
36
|
+
{
|
|
37
|
+
subtitle,
|
|
38
|
+
subtitlePlacement,
|
|
39
|
+
actions: status ? /* @__PURE__ */ jsx(Tag, { id: statusId, size: "sm", variant: status.tone, leadingIcon: status.icon, children: status.label }) : void 0,
|
|
40
|
+
children: /* @__PURE__ */ jsx(Card.Title, { id: titleId, truncate: true, children: title })
|
|
41
|
+
}
|
|
42
|
+
),
|
|
43
|
+
children === void 0 || children === null || children === false ? null : /* @__PURE__ */ jsx(Card.Body, { padding: bodyPadding, className: "crewlet-status-card__body", children }),
|
|
44
|
+
strip === void 0 || strip === null || strip === false ? null : /* @__PURE__ */ jsx(Card.Footer, { padding: "none", className: "crewlet-status-card__strip", children: strip }),
|
|
45
|
+
actions === void 0 || actions === null || actions === false ? null : /* @__PURE__ */ jsx(Card.Footer, { className: cx("crewlet-status-card__actions", `crewlet-status-card__actions--${actionsAlign}`), children: actions })
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export { StatusCard };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SlideStage } from './chunk-RMEBFYL7.js';
|
|
2
2
|
import { useReorder } from './chunk-XJ2QEBMM.js';
|
|
3
3
|
import { Kbd, isApplePlatform } from './chunk-SMBKXWML.js';
|
|
4
|
-
import { Menu } from './chunk-
|
|
4
|
+
import { Menu } from './chunk-TKS7FTTO.js';
|
|
5
5
|
import { VisuallyHidden } from './chunk-BZFWDIV6.js';
|
|
6
6
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
7
7
|
import './SlideFilmstrip-PAT7P4OG.css';
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import { HeadingLevelProvider } from './chunk-PQADV6P6.js';
|
|
2
|
+
import { useAppShellAside, ResizeHandle } from './chunk-PIYJNCN7.js';
|
|
3
|
+
import { useModalLayer } from './chunk-H5XTJ7GJ.js';
|
|
4
|
+
import { IconButton } from './chunk-2BQYODY3.js';
|
|
5
|
+
import { cx } from './chunk-ODEQTPFM.js';
|
|
6
|
+
import { createContext, useId, useRef, useContext, useLayoutEffect, useEffect, useMemo } from 'react';
|
|
7
|
+
import { MinimizeGlyph, MaximizeGlyph, XGlyph } from '@crewlethq/icons/glyphs';
|
|
8
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
9
|
+
|
|
10
|
+
var SidePanelFrameContext = createContext(null);
|
|
11
|
+
function part(name, alias) {
|
|
12
|
+
return cx(`crewlet-side-panel__${name}`, alias && `${alias}__${name}`);
|
|
13
|
+
}
|
|
14
|
+
function SidePanelBase({
|
|
15
|
+
alias,
|
|
16
|
+
title,
|
|
17
|
+
icon,
|
|
18
|
+
onClose,
|
|
19
|
+
closeLabel,
|
|
20
|
+
actions,
|
|
21
|
+
footer,
|
|
22
|
+
flush = false,
|
|
23
|
+
initialFocus = "heading",
|
|
24
|
+
ringHeading = false,
|
|
25
|
+
hideTitle = false,
|
|
26
|
+
expanded = false,
|
|
27
|
+
onExpandedChange,
|
|
28
|
+
expandLabel = "Expand",
|
|
29
|
+
collapseLabel = "Collapse",
|
|
30
|
+
width,
|
|
31
|
+
minWidth = 0,
|
|
32
|
+
maxWidth,
|
|
33
|
+
defaultWidth,
|
|
34
|
+
onWidthChange,
|
|
35
|
+
onWidthCommit,
|
|
36
|
+
resizable = false,
|
|
37
|
+
resizeLabel,
|
|
38
|
+
className,
|
|
39
|
+
children
|
|
40
|
+
}) {
|
|
41
|
+
const titleId = useId();
|
|
42
|
+
const panelId = useId();
|
|
43
|
+
const root = useRef(null);
|
|
44
|
+
const heading = useRef(null);
|
|
45
|
+
const before = useRef(null);
|
|
46
|
+
const start = useRef(initialFocus);
|
|
47
|
+
const inShell = useAppShellAside() !== null;
|
|
48
|
+
const frame = useContext(SidePanelFrameContext);
|
|
49
|
+
const shape = frame?.shape ?? null;
|
|
50
|
+
const modal = !inShell && shape === "sheet";
|
|
51
|
+
const role = inShell ? void 0 : modal ? "dialog" : "complementary";
|
|
52
|
+
useLayoutEffect(() => {
|
|
53
|
+
const panel = root.current;
|
|
54
|
+
before.current = document.activeElement;
|
|
55
|
+
const target = start.current;
|
|
56
|
+
if (target === "heading") heading.current?.focus({ preventScroll: true });
|
|
57
|
+
else if (target !== "none") target.current?.focus({ preventScroll: true });
|
|
58
|
+
return () => {
|
|
59
|
+
const back = before.current;
|
|
60
|
+
if (panel?.contains(document.activeElement) && back instanceof HTMLElement && back.isConnected) {
|
|
61
|
+
back.focus({ preventScroll: true });
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
}, []);
|
|
65
|
+
const close = useRef(onClose);
|
|
66
|
+
close.current = onClose;
|
|
67
|
+
useEffect(() => {
|
|
68
|
+
const panel = root.current;
|
|
69
|
+
if (!panel) return void 0;
|
|
70
|
+
const doc = panel.ownerDocument;
|
|
71
|
+
const onKeyDown = (event) => {
|
|
72
|
+
if (event.key !== "Escape" || event.defaultPrevented || event.isComposing) return;
|
|
73
|
+
if (!(event.target instanceof Node) || !panel.contains(event.target)) return;
|
|
74
|
+
event.preventDefault();
|
|
75
|
+
close.current();
|
|
76
|
+
};
|
|
77
|
+
doc.addEventListener("keydown", onKeyDown);
|
|
78
|
+
return () => doc.removeEventListener("keydown", onKeyDown);
|
|
79
|
+
}, []);
|
|
80
|
+
const sized = !inShell && !expanded && width !== void 0;
|
|
81
|
+
const grip = resizable && !inShell && !expanded && (shape === null || shape === "column") && width !== void 0 && onWidthChange;
|
|
82
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
83
|
+
/* @__PURE__ */ jsxs(
|
|
84
|
+
"div",
|
|
85
|
+
{
|
|
86
|
+
ref: root,
|
|
87
|
+
id: panelId,
|
|
88
|
+
className: cx("crewlet-side-panel", inShell && "crewlet-side-panel--fill", alias, className),
|
|
89
|
+
role,
|
|
90
|
+
"aria-modal": modal || void 0,
|
|
91
|
+
"aria-labelledby": inShell ? void 0 : titleId,
|
|
92
|
+
"data-expanded": expanded || void 0,
|
|
93
|
+
style: sized ? { ["--crewlet-side-panel-width"]: `${width}px` } : void 0,
|
|
94
|
+
children: [
|
|
95
|
+
grip ? /* @__PURE__ */ jsx(
|
|
96
|
+
ResizeHandle,
|
|
97
|
+
{
|
|
98
|
+
label: resizeLabel ?? `Resize ${title}`,
|
|
99
|
+
value: width,
|
|
100
|
+
min: minWidth,
|
|
101
|
+
max: maxWidth ?? width,
|
|
102
|
+
defaultValue: defaultWidth,
|
|
103
|
+
onValueChange: onWidthChange,
|
|
104
|
+
onValueCommit: onWidthCommit,
|
|
105
|
+
controls: panelId,
|
|
106
|
+
edge: "left"
|
|
107
|
+
}
|
|
108
|
+
) : null,
|
|
109
|
+
/* @__PURE__ */ jsxs("div", { className: part("head", alias), children: [
|
|
110
|
+
icon ? /* @__PURE__ */ jsx("span", { className: part("icon", alias), "aria-hidden": true, children: icon }) : null,
|
|
111
|
+
/* @__PURE__ */ jsx(
|
|
112
|
+
"h2",
|
|
113
|
+
{
|
|
114
|
+
ref: heading,
|
|
115
|
+
id: titleId,
|
|
116
|
+
className: cx(
|
|
117
|
+
part("title", alias),
|
|
118
|
+
!ringHeading && "crewlet-side-panel__title--quiet",
|
|
119
|
+
hideTitle && "crewlet-side-panel__title--hidden"
|
|
120
|
+
),
|
|
121
|
+
tabIndex: -1,
|
|
122
|
+
children: title
|
|
123
|
+
}
|
|
124
|
+
),
|
|
125
|
+
/* @__PURE__ */ jsxs("span", { className: part("actions", alias), children: [
|
|
126
|
+
actions,
|
|
127
|
+
onExpandedChange ? /* @__PURE__ */ jsx(
|
|
128
|
+
IconButton,
|
|
129
|
+
{
|
|
130
|
+
label: expanded ? collapseLabel : expandLabel,
|
|
131
|
+
icon: expanded ? /* @__PURE__ */ jsx(MinimizeGlyph, { size: "sm" }) : /* @__PURE__ */ jsx(MaximizeGlyph, { size: "sm" }),
|
|
132
|
+
size: "sm",
|
|
133
|
+
variant: "ghost",
|
|
134
|
+
onClick: () => onExpandedChange(!expanded)
|
|
135
|
+
}
|
|
136
|
+
) : null,
|
|
137
|
+
/* @__PURE__ */ jsx(IconButton, { label: closeLabel, icon: /* @__PURE__ */ jsx(XGlyph, { size: "sm" }), size: "sm", variant: "ghost", onClick: onClose })
|
|
138
|
+
] })
|
|
139
|
+
] }),
|
|
140
|
+
/* @__PURE__ */ jsx("div", { className: cx(part("body", alias), flush && "crewlet-side-panel__body--flush"), children: /* @__PURE__ */ jsx(HeadingLevelProvider, { level: 3, children }) }),
|
|
141
|
+
footer ? /* @__PURE__ */ jsx("div", { className: part("foot", alias), children: footer }) : null
|
|
142
|
+
]
|
|
143
|
+
}
|
|
144
|
+
),
|
|
145
|
+
modal ? /* @__PURE__ */ jsx(SheetLayer, { panel: root, onClose }) : null
|
|
146
|
+
] });
|
|
147
|
+
}
|
|
148
|
+
function SheetLayer({ panel, onClose }) {
|
|
149
|
+
const layer = useModalLayer({ onClose });
|
|
150
|
+
const { panelRef } = layer;
|
|
151
|
+
useLayoutEffect(() => {
|
|
152
|
+
panelRef(panel.current);
|
|
153
|
+
return () => panelRef(null);
|
|
154
|
+
}, [panelRef, panel]);
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
var SIDE_PANEL_WIDTH = 420;
|
|
158
|
+
var SIDE_PANEL_MIN_WIDTH = 360;
|
|
159
|
+
var SIDE_PANEL_MAX_WIDTH = 640;
|
|
160
|
+
var SIDE_PANEL_LABELS = {
|
|
161
|
+
close: (title) => `Close ${title}`,
|
|
162
|
+
resize: (title) => `Resize ${title}`
|
|
163
|
+
};
|
|
164
|
+
function SidePanel({
|
|
165
|
+
title,
|
|
166
|
+
icon,
|
|
167
|
+
hideTitle,
|
|
168
|
+
onClose,
|
|
169
|
+
actions,
|
|
170
|
+
footer,
|
|
171
|
+
flush,
|
|
172
|
+
width,
|
|
173
|
+
minWidth = SIDE_PANEL_MIN_WIDTH,
|
|
174
|
+
maxWidth = SIDE_PANEL_MAX_WIDTH,
|
|
175
|
+
defaultWidth = SIDE_PANEL_WIDTH,
|
|
176
|
+
onWidthChange,
|
|
177
|
+
onWidthCommit,
|
|
178
|
+
resizable,
|
|
179
|
+
initialFocus,
|
|
180
|
+
labels,
|
|
181
|
+
className,
|
|
182
|
+
children
|
|
183
|
+
}) {
|
|
184
|
+
const words = { ...SIDE_PANEL_LABELS, ...labels };
|
|
185
|
+
return /* @__PURE__ */ jsx(
|
|
186
|
+
SidePanelBase,
|
|
187
|
+
{
|
|
188
|
+
title,
|
|
189
|
+
icon,
|
|
190
|
+
hideTitle,
|
|
191
|
+
onClose,
|
|
192
|
+
closeLabel: words.close(title),
|
|
193
|
+
resizeLabel: words.resize(title),
|
|
194
|
+
actions,
|
|
195
|
+
footer,
|
|
196
|
+
flush,
|
|
197
|
+
width: width ?? (resizable ? defaultWidth : void 0),
|
|
198
|
+
minWidth,
|
|
199
|
+
maxWidth,
|
|
200
|
+
defaultWidth,
|
|
201
|
+
onWidthChange,
|
|
202
|
+
onWidthCommit,
|
|
203
|
+
resizable,
|
|
204
|
+
initialFocus,
|
|
205
|
+
className,
|
|
206
|
+
children
|
|
207
|
+
}
|
|
208
|
+
);
|
|
209
|
+
}
|
|
210
|
+
function SidePanelFrameBase({
|
|
211
|
+
alias,
|
|
212
|
+
panel,
|
|
213
|
+
shape,
|
|
214
|
+
reserve,
|
|
215
|
+
expanded = false,
|
|
216
|
+
bodyRef,
|
|
217
|
+
bodyClassName,
|
|
218
|
+
bodyLabel,
|
|
219
|
+
className,
|
|
220
|
+
children
|
|
221
|
+
}) {
|
|
222
|
+
const context = useMemo(() => ({ shape: shape ?? null }), [shape]);
|
|
223
|
+
return /* @__PURE__ */ jsx(SidePanelFrameContext.Provider, { value: context, children: /* @__PURE__ */ jsxs(
|
|
224
|
+
"div",
|
|
225
|
+
{
|
|
226
|
+
className: cx("crewlet-side-panel-frame", alias, className),
|
|
227
|
+
"data-shape": shape ?? "auto",
|
|
228
|
+
"data-panel": panel ? expanded ? "expanded" : "open" : void 0,
|
|
229
|
+
style: reserve === void 0 ? void 0 : { ["--crewlet-side-panel-reserve"]: `${reserve}px` },
|
|
230
|
+
children: [
|
|
231
|
+
/* @__PURE__ */ jsx(
|
|
232
|
+
"div",
|
|
233
|
+
{
|
|
234
|
+
ref: bodyRef,
|
|
235
|
+
className: cx("crewlet-side-panel-frame__body", alias && `${alias}__body`, bodyClassName),
|
|
236
|
+
role: bodyLabel ? "region" : void 0,
|
|
237
|
+
"aria-label": bodyLabel,
|
|
238
|
+
children
|
|
239
|
+
}
|
|
240
|
+
),
|
|
241
|
+
panel
|
|
242
|
+
]
|
|
243
|
+
}
|
|
244
|
+
) });
|
|
245
|
+
}
|
|
246
|
+
function SidePanelFrame(props) {
|
|
247
|
+
return /* @__PURE__ */ jsx(SidePanelFrameBase, { ...props });
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
export { SIDE_PANEL_LABELS, SIDE_PANEL_MAX_WIDTH, SIDE_PANEL_MIN_WIDTH, SIDE_PANEL_WIDTH, SidePanel, SidePanelBase, SidePanelFrame, SidePanelFrameBase };
|
|
@@ -0,0 +1,59 @@
|
|
|
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({ tone = "success", icon, children, actions, className, ...rest }) {
|
|
15
|
+
return /* @__PURE__ */ jsxs(
|
|
16
|
+
"div",
|
|
17
|
+
{
|
|
18
|
+
...rest,
|
|
19
|
+
role: tone === "danger" ? "alert" : "status",
|
|
20
|
+
className: cx("crewlet-receipt-strip", `crewlet-receipt-strip--${tone}`, className),
|
|
21
|
+
children: [
|
|
22
|
+
/* @__PURE__ */ jsx("span", { className: "crewlet-receipt-strip__icon", "aria-hidden": "true", children: icon ?? ICONS[tone] }),
|
|
23
|
+
/* @__PURE__ */ jsx("div", { className: "crewlet-receipt-strip__text", children }),
|
|
24
|
+
actions === void 0 || actions === null || actions === false ? null : /* @__PURE__ */ jsx("div", { className: "crewlet-receipt-strip__actions", children: actions })
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
var REFUSAL_STRIP_LABELS = { retry: "Try again", dismiss: "Dismiss" };
|
|
30
|
+
function RefusalStrip({
|
|
31
|
+
children,
|
|
32
|
+
hint,
|
|
33
|
+
onRetry,
|
|
34
|
+
retrying = false,
|
|
35
|
+
onDismiss,
|
|
36
|
+
placement = "inline",
|
|
37
|
+
labels: overrides,
|
|
38
|
+
className,
|
|
39
|
+
...rest
|
|
40
|
+
}) {
|
|
41
|
+
const labels = overrides ? { ...REFUSAL_STRIP_LABELS, ...overrides } : REFUSAL_STRIP_LABELS;
|
|
42
|
+
const actions = onRetry || onDismiss ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
43
|
+
onRetry ? /* @__PURE__ */ jsx(Button, { size: "small", variant: "ghost", loading: retrying, onClick: onRetry, children: labels.retry }) : null,
|
|
44
|
+
onDismiss ? /* @__PURE__ */ jsx(Button, { size: "small", variant: "ghost", onClick: onDismiss, children: labels.dismiss }) : null
|
|
45
|
+
] }) : void 0;
|
|
46
|
+
const words = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
47
|
+
/* @__PURE__ */ jsx("span", { className: "crewlet-refusal-strip__sentence", children }),
|
|
48
|
+
hint === void 0 || hint === null ? null : /* @__PURE__ */ jsx("span", { className: "crewlet-refusal-strip__hint", children: hint })
|
|
49
|
+
] });
|
|
50
|
+
if (placement === "foot") {
|
|
51
|
+
return /* @__PURE__ */ jsx(ReceiptStrip, { ...rest, tone: "danger", actions, className: cx("crewlet-refusal-strip--foot", className), children: words });
|
|
52
|
+
}
|
|
53
|
+
return /* @__PURE__ */ jsxs("span", { ...rest, role: "alert", className: cx("crewlet-refusal-strip", className), children: [
|
|
54
|
+
words,
|
|
55
|
+
actions
|
|
56
|
+
] });
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export { REFUSAL_STRIP_LABELS, ReceiptStrip, RefusalStrip };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { toISO, useNow, formatRelative } from './chunk-
|
|
1
|
+
import { toISO, useNow, formatRelative } from './chunk-KS7YIJ4S.js';
|
|
2
2
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
3
3
|
import './EditingStatus-YU7EGM6Y.css';
|
|
4
4
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Callout } from './chunk-BPCY7ZID.js';
|
|
2
|
-
import { Button } from './chunk-
|
|
2
|
+
import { Button } from './chunk-HD4QJ2SI.js';
|
|
3
3
|
import { isComposing } from './chunk-H5XTJ7GJ.js';
|
|
4
4
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
5
5
|
import { useEffect } from 'react';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ContrastLevelTag } from './chunk-WW7TU6HE.js';
|
|
2
2
|
import { Popover } from './chunk-KHJIEPZV.js';
|
|
3
|
-
import { IconButton } from './chunk-
|
|
3
|
+
import { IconButton } from './chunk-2BQYODY3.js';
|
|
4
4
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
5
5
|
import './ContrastHelp-MZCAW5WQ.css';
|
|
6
6
|
import { InfoGlyph } from '@crewlethq/icons/glyphs';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useTreeState, useMeasuredSizes, layoutForest, treeAncestors, useLayoutAnchor, treeExpandable, layoutConnectors, treeItemAction, treeStep, treePosInSet, treeSetSize, treeLevel, placeGroups } from './chunk-MY374UUD.js';
|
|
2
|
-
import { CANVAS_COMPOSE_CONTEXT, CANVAS_FIT_MAX_ZOOM, Canvas } from './chunk-
|
|
2
|
+
import { CANVAS_COMPOSE_CONTEXT, CANVAS_FIT_MAX_ZOOM, Canvas } from './chunk-YEURM24I.js';
|
|
3
3
|
import { focusables } from './chunk-H5XTJ7GJ.js';
|
|
4
4
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
5
5
|
import './TreeCanvas-QA3PDFTK.css';
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { LayerNodeBridge } from './chunk-LM3ISVJA.js';
|
|
2
2
|
import { Tooltip } from './chunk-I33UIUZD.js';
|
|
3
3
|
import { Kbd } from './chunk-SMBKXWML.js';
|
|
4
|
+
import { Button } from './chunk-HD4QJ2SI.js';
|
|
4
5
|
import { LAYER_REPOSITION_EVENT, LayerHost } from './chunk-OMV5W53A.js';
|
|
5
|
-
import {
|
|
6
|
-
import { IconButton } from './chunk-LACA4JGC.js';
|
|
6
|
+
import { IconButton } from './chunk-2BQYODY3.js';
|
|
7
7
|
import { returnFocus } from './chunk-NUZHC6MM.js';
|
|
8
8
|
import { VisuallyHidden } from './chunk-BZFWDIV6.js';
|
|
9
9
|
import { cx } from './chunk-ODEQTPFM.js';
|