@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,134 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
import { type ChangeListLabels, type ChangeListRow } from '../ChangeList/index.js';
|
|
3
|
+
import type { DiffListLabels } from '../DiffList/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* Where a proposed change stands: `pending` (waiting on the person),
|
|
6
|
+
* `stepup` (the approval needs a fresh sign-in), `applying` (approved and
|
|
7
|
+
* being carried out), `applied`, `declined`, `expired`, `stale` (what it
|
|
8
|
+
* would change moved after it was prepared) and `failed` (refused or not
|
|
9
|
+
* carried out when approved).
|
|
10
|
+
*/
|
|
11
|
+
export type ProposalState = 'pending' | 'stepup' | 'applying' | 'applied' | 'declined' | 'expired' | 'stale' | 'failed';
|
|
12
|
+
export declare const PROPOSAL_STATES: readonly ["pending", "stepup", "applying", "applied", "declined", "expired", "stale", "failed"];
|
|
13
|
+
/**
|
|
14
|
+
* Where the change lands: on the page the person is looking at (a filter on
|
|
15
|
+
* a list), which is applied, or in the company's records, which is saved.
|
|
16
|
+
* It decides the words of the busy and done states: "Applying" and "Applied",
|
|
17
|
+
* or "Saving" and "Saved".
|
|
18
|
+
*/
|
|
19
|
+
export type ProposalScope = 'page' | 'server';
|
|
20
|
+
/** What the change does to a record: change fields of one, or create one. */
|
|
21
|
+
export type ProposalKind = 'change' | 'create';
|
|
22
|
+
export interface ProposalCardLabels {
|
|
23
|
+
needsApproval: string;
|
|
24
|
+
needsSignIn: string;
|
|
25
|
+
applying: string;
|
|
26
|
+
saving: string;
|
|
27
|
+
applied: string;
|
|
28
|
+
saved: string;
|
|
29
|
+
declined: string;
|
|
30
|
+
expired: string;
|
|
31
|
+
stale: string;
|
|
32
|
+
notApplied: string;
|
|
33
|
+
decline: string;
|
|
34
|
+
confirmIdentity: string;
|
|
35
|
+
prepareAgain: string;
|
|
36
|
+
tryAgain: string;
|
|
37
|
+
whatWillChange: string;
|
|
38
|
+
whatWillBeCreated: string;
|
|
39
|
+
whatChanged: string;
|
|
40
|
+
whatWasCreated: string;
|
|
41
|
+
whatWasProposed: string;
|
|
42
|
+
stepUpNotice: string;
|
|
43
|
+
declinedNotice: string;
|
|
44
|
+
expiredNotice: string;
|
|
45
|
+
staleNotice: string;
|
|
46
|
+
nothingChanged: string;
|
|
47
|
+
/** Why Decline is held while the approved change is carried out. */
|
|
48
|
+
busy: string;
|
|
49
|
+
}
|
|
50
|
+
export declare const PROPOSAL_CARD_LABELS: ProposalCardLabels;
|
|
51
|
+
export interface ProposalCardProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
|
|
52
|
+
/** The action itself, in sentence case: "Filter this list", "Create task", "Share artifact". */
|
|
53
|
+
title: string;
|
|
54
|
+
/** Where the change applies, as the card's subtitle: "This list only", "Saved for the company". */
|
|
55
|
+
subtitle?: ReactNode;
|
|
56
|
+
state: ProposalState;
|
|
57
|
+
/** `server` (the default) or `page`; see `ProposalScope`. */
|
|
58
|
+
scope?: ProposalScope | undefined;
|
|
59
|
+
/** `change` (the default) or `create`, which heads the list "What will be created". */
|
|
60
|
+
kind?: ProposalKind | undefined;
|
|
61
|
+
/** What the change does, in one sentence, above the list. */
|
|
62
|
+
summary?: ReactNode;
|
|
63
|
+
/** The change, field by field (`ChangeList`). The scope is the subtitle, never a row. */
|
|
64
|
+
changes: readonly ChangeListRow[];
|
|
65
|
+
/** Replaces the list's heading, which otherwise follows `kind` and `state`. */
|
|
66
|
+
changesHeading?: ReactNode;
|
|
67
|
+
/** The consequence, in one sentence, under the list. */
|
|
68
|
+
note?: ReactNode;
|
|
69
|
+
/** The primary action, named for its effect: "Apply to this list", "Create task". Never a bare "OK". */
|
|
70
|
+
approveLabel: string;
|
|
71
|
+
/**
|
|
72
|
+
* Called by the primary action. In `stepup` the primary is "Confirm it's
|
|
73
|
+
* you" and calls this too: the host opens its sign-in check and approves
|
|
74
|
+
* again with the fresh session.
|
|
75
|
+
*/
|
|
76
|
+
onApprove: () => void;
|
|
77
|
+
onDecline: () => void;
|
|
78
|
+
/** Offers "Prepare it again" on an expired or stale card. */
|
|
79
|
+
onPrepareAgain?: (() => void) | undefined;
|
|
80
|
+
/** Offers "Try again" on a failed card, where the refusal's class may succeed on a retry. */
|
|
81
|
+
onRetry?: (() => void) | undefined;
|
|
82
|
+
/** What was done, for an applied card: "Created ENG-156 · assigned to Agent SWE". */
|
|
83
|
+
receipt?: ReactNode;
|
|
84
|
+
/** Why it was not applied, for a failed card, in the engine's own sentence. "Nothing changed." follows it. */
|
|
85
|
+
failure?: ReactNode;
|
|
86
|
+
/**
|
|
87
|
+
* What the person can do next about a failure, on its own quieter line
|
|
88
|
+
* after the failure sentence and "Nothing changed.": the route's next step,
|
|
89
|
+
* such as "Ask an admin to give you access." Drawn only with `failure`.
|
|
90
|
+
*/
|
|
91
|
+
failureHint?: ReactNode;
|
|
92
|
+
/**
|
|
93
|
+
* Why the primary action cannot be taken now, while the card waits on the
|
|
94
|
+
* person (`pending`) or on a fresh sign-in (`stepup`): a page action whose
|
|
95
|
+
* screen refuses the prepared change, say. The primary is held soft
|
|
96
|
+
* disabled, as Decline is held while applying, so it keeps its focus and
|
|
97
|
+
* its pointer events, says it is unavailable, and is described by this
|
|
98
|
+
* sentence, which the foot also shows above the buttons. Ignored in every
|
|
99
|
+
* other state. Decline stays available.
|
|
100
|
+
*/
|
|
101
|
+
approveBlocked?: string | undefined;
|
|
102
|
+
/** Replaces the default sentence of a step-up, declined, expired or stale card. */
|
|
103
|
+
notice?: ReactNode;
|
|
104
|
+
labels?: Partial<ProposalCardLabels> | undefined;
|
|
105
|
+
/** Words for the change list. */
|
|
106
|
+
changeLabels?: Partial<ChangeListLabels> | undefined;
|
|
107
|
+
/** Words for the `DiffList` behind "Show the whole change". */
|
|
108
|
+
diffLabels?: Partial<DiffListLabels> | undefined;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* A change prepared for the person to approve, and what became of it: one
|
|
112
|
+
* card from the moment it is proposed until it is applied, declined, expires
|
|
113
|
+
* or is refused.
|
|
114
|
+
*
|
|
115
|
+
* THE HEAD IS THE ACTION, THE TAG IS THE STATE. "Create task" with "Needs
|
|
116
|
+
* your approval", then "Saving", then "Saved". The body is a summary, the
|
|
117
|
+
* change as before and after pairs (`ChangeList`) and a one-sentence
|
|
118
|
+
* consequence; the foot is the decision, or a strip that says what happened.
|
|
119
|
+
*
|
|
120
|
+
* APPROVAL IS ALWAYS AN EXPLICIT PRESS. Nothing here takes focus when the
|
|
121
|
+
* card arrives and Enter in a composer never reaches it, so a person typing
|
|
122
|
+
* cannot approve by accident. While the approved change is carried out the
|
|
123
|
+
* primary keeps its label with the spinner in its leading slot (a button whose
|
|
124
|
+
* text becomes "Saving" has stopped saying what it does), soft disabled so
|
|
125
|
+
* focus stays on it, and Decline is held with its reason.
|
|
126
|
+
*
|
|
127
|
+
* SETTLED, THE BODY STEPS BACK. Applied, declined, expired, stale and failed
|
|
128
|
+
* cards draw their body in the secondary ink so the strip reads first, and
|
|
129
|
+
* the before and after pairs stay, so the record of what changed is there.
|
|
130
|
+
*
|
|
131
|
+
* Every sentence a refusal shows is the caller's (the engine's), never the
|
|
132
|
+
* card's own words about why.
|
|
133
|
+
*/
|
|
134
|
+
export declare function ProposalCard({ title, subtitle, state, scope, kind, summary, changes, changesHeading, note, approveLabel, onApprove, onDecline, onPrepareAgain, onRetry, receipt, failure, failureHint, approveBlocked, notice, labels: overrides, changeLabels, diffLabels, className, ...rest }: ProposalCardProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export { PROPOSAL_CARD_LABELS, PROPOSAL_STATES, ProposalCard } from '../chunk-E4DZOE55.js';
|
|
2
|
+
import '../chunk-XQI2OUV4.js';
|
|
3
|
+
import '../chunk-WDIVALLP.js';
|
|
4
|
+
import '../chunk-NEHSV55H.js';
|
|
5
|
+
import '../chunk-Z3GDMNMU.js';
|
|
6
|
+
import '../chunk-KYIAFNU7.js';
|
|
7
|
+
import '../chunk-WIATRXEJ.js';
|
|
8
|
+
import '../chunk-INHXF2CL.js';
|
|
9
|
+
import '../chunk-AV2DXAEL.js';
|
|
10
|
+
import '../chunk-GG4QZWMQ.js';
|
|
11
|
+
import '../chunk-TFGCNBWP.js';
|
|
12
|
+
import '../chunk-BHHIIK3M.js';
|
|
13
|
+
import '../chunk-PQADV6P6.js';
|
|
14
|
+
import '../chunk-HD4QJ2SI.js';
|
|
15
|
+
import '../chunk-EA23JG6R.js';
|
|
16
|
+
import '../chunk-BZFWDIV6.js';
|
|
17
|
+
import '../chunk-ODEQTPFM.js';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* A proposed change. The card, its head, its strip and its foot are
|
|
3
|
+
* StatusCard's; only the note's register is said here: the consequence is a
|
|
4
|
+
* quieter sentence than the summary it follows.
|
|
5
|
+
*/
|
|
6
|
+
.crewlet-proposal-card__note {
|
|
7
|
+
color: var(--color-text-secondary);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/* WHY THE PRIMARY IS HELD, on a line of its own above the decision and at
|
|
11
|
+
its end, in the foot's quiet register, so it wraps rather than pushing the
|
|
12
|
+
buttons apart. */
|
|
13
|
+
.crewlet-proposal-card__blocked {
|
|
14
|
+
flex: 1 1 100%;
|
|
15
|
+
margin: 0;
|
|
16
|
+
color: var(--color-text-secondary);
|
|
17
|
+
font-size: var(--font-size-compact);
|
|
18
|
+
text-align: end;
|
|
19
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
/** What the strip reports: done, nothing happened, refused or failed, under way, or a caution. */
|
|
3
|
+
export type ReceiptStripTone = 'success' | 'neutral' | 'danger' | 'info' | 'warning';
|
|
4
|
+
export interface ReceiptStripProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
|
|
5
|
+
tone?: ReceiptStripTone | undefined;
|
|
6
|
+
/**
|
|
7
|
+
* The mark before the words, at 16px. Each tone has one by default (the
|
|
8
|
+
* check, the info mark, the alert); a strip that says something more
|
|
9
|
+
* specific passes its own, such as the clock of an expiry or the lock of a
|
|
10
|
+
* sign-in check.
|
|
11
|
+
*/
|
|
12
|
+
icon?: ReactNode;
|
|
13
|
+
/** The outcome, in one or two sentences. */
|
|
14
|
+
children: ReactNode;
|
|
15
|
+
/** Controls at the strip's end, such as Try again. */
|
|
16
|
+
actions?: ReactNode;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* What happened, at the foot of a card: "Created ENG-156 · assigned to Agent
|
|
20
|
+
* SWE", "You declined this. Nothing changed.".
|
|
21
|
+
*
|
|
22
|
+
* IT REPLACES THE CARD'S FOOT rather than sitting inside the card as a box of
|
|
23
|
+
* its own: the card's hairline above it, the card's own edge around it, a
|
|
24
|
+
* tint under the words. A card never holds a second bordered box.
|
|
25
|
+
*
|
|
26
|
+
* A STATUS, OR AN ALERT. A refusal or a failure (`danger`) is an alert, the
|
|
27
|
+
* one tone a reader must not miss; every other tone is a polite status.
|
|
28
|
+
* Colour is never alone: the mark and the words say the outcome.
|
|
29
|
+
*/
|
|
30
|
+
export declare function ReceiptStrip({ tone, icon, children, actions, className, ...rest }: ReceiptStripProps): import("react").JSX.Element;
|
|
31
|
+
export interface RefusalStripLabels {
|
|
32
|
+
retry: string;
|
|
33
|
+
dismiss: string;
|
|
34
|
+
}
|
|
35
|
+
export declare const REFUSAL_STRIP_LABELS: RefusalStripLabels;
|
|
36
|
+
/** Where the refusal is drawn: under the control that caused it, or as a card's foot. */
|
|
37
|
+
export type RefusalStripPlacement = 'inline' | 'foot';
|
|
38
|
+
export interface RefusalStripProps extends Omit<HTMLAttributes<HTMLElement>, 'role' | 'children'> {
|
|
39
|
+
/** The refusal, in the engine's own sentence. Never a model's words. */
|
|
40
|
+
children: ReactNode;
|
|
41
|
+
/** A second, quieter line: what the person could do about it. */
|
|
42
|
+
hint?: ReactNode;
|
|
43
|
+
/** Offers Try again, for a refusal whose class may succeed on a retry. */
|
|
44
|
+
onRetry?: (() => void) | undefined;
|
|
45
|
+
/** Try again is under way. */
|
|
46
|
+
retrying?: boolean | undefined;
|
|
47
|
+
/** Offers Dismiss. */
|
|
48
|
+
onDismiss?: (() => void) | undefined;
|
|
49
|
+
/** `inline` (the default) under a control; `foot` as a card's foot strip. */
|
|
50
|
+
placement?: RefusalStripPlacement | undefined;
|
|
51
|
+
labels?: Partial<RefusalStripLabels> | undefined;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* A refusal, drawn where it happened: the write a control tried, or the
|
|
55
|
+
* change a card was approved for, refused by the engine.
|
|
56
|
+
*
|
|
57
|
+
* ONE DRAWING FOR EVERY REFUSAL. Inline it is the sentence in the danger ink
|
|
58
|
+
* with its actions beside it, under the control that caused it, wrapping
|
|
59
|
+
* rather than widening the row; at a card's foot it is the danger
|
|
60
|
+
* `ReceiptStrip`. The sentence is the caller's (the engine's), so the strip
|
|
61
|
+
* never words a refusal itself.
|
|
62
|
+
*
|
|
63
|
+
* AN ALERT, because a write that did not happen is the one outcome a reader
|
|
64
|
+
* must hear without looking for it.
|
|
65
|
+
*/
|
|
66
|
+
export declare function RefusalStrip({ children, hint, onRetry, retrying, onDismiss, placement, labels: overrides, className, ...rest }: RefusalStripProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* A card's foot strip: the card's hairline above it, a tint under the words,
|
|
3
|
+
* the mark on the first line. The tints are the soft step of the tone under
|
|
4
|
+
* its ink step, the pairing the palette suite measures; the quiet strip is
|
|
5
|
+
* the inset ground under the secondary ink.
|
|
6
|
+
*/
|
|
7
|
+
.crewlet-receipt-strip {
|
|
8
|
+
display: grid;
|
|
9
|
+
grid-template-columns: auto minmax(0, 1fr) auto;
|
|
10
|
+
align-items: start;
|
|
11
|
+
gap: var(--spacing-2);
|
|
12
|
+
padding: var(--spacing-2) var(--spacing-4);
|
|
13
|
+
border-top: 1px solid var(--color-border-default);
|
|
14
|
+
font-size: var(--font-size-compact);
|
|
15
|
+
line-height: var(--font-line-height-normal);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.crewlet-receipt-strip--success {
|
|
19
|
+
background: var(--color-feedback-success-soft);
|
|
20
|
+
color: var(--color-feedback-success-ink);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.crewlet-receipt-strip--neutral {
|
|
24
|
+
background: var(--color-surface-inset);
|
|
25
|
+
color: var(--color-text-secondary);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.crewlet-receipt-strip--info {
|
|
29
|
+
background: var(--color-feedback-info-soft);
|
|
30
|
+
color: var(--color-feedback-info-ink);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.crewlet-receipt-strip--warning {
|
|
34
|
+
background: var(--color-feedback-warning-soft);
|
|
35
|
+
color: var(--color-feedback-warning-ink);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.crewlet-receipt-strip--danger {
|
|
39
|
+
background: var(--color-feedback-danger-soft);
|
|
40
|
+
color: var(--color-feedback-danger-ink);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* The 16px mark, centred on the first line of the words beside it. */
|
|
44
|
+
.crewlet-receipt-strip__icon {
|
|
45
|
+
display: inline-flex;
|
|
46
|
+
align-items: center;
|
|
47
|
+
height: calc(var(--font-size-compact) * var(--font-line-height-normal));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.crewlet-receipt-strip__text {
|
|
51
|
+
display: flex;
|
|
52
|
+
flex-direction: column;
|
|
53
|
+
min-width: 0;
|
|
54
|
+
overflow-wrap: anywhere;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/* The actions keep the strip's ink, so a ghost button reads as part of it. */
|
|
58
|
+
.crewlet-receipt-strip__actions {
|
|
59
|
+
display: flex;
|
|
60
|
+
flex-wrap: wrap;
|
|
61
|
+
align-items: center;
|
|
62
|
+
gap: var(--spacing-1);
|
|
63
|
+
margin-block: calc(var(--spacing-1) * -1);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.crewlet-receipt-strip__actions .crewlet-btn--ghost {
|
|
67
|
+
color: inherit;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/*
|
|
71
|
+
* THE INLINE REFUSAL, under the control that caused it: the sentence in the
|
|
72
|
+
* danger ink, the hint in the secondary ink, the actions beside them, wrapping
|
|
73
|
+
* onto a second line rather than widening the row.
|
|
74
|
+
*/
|
|
75
|
+
.crewlet-refusal-strip {
|
|
76
|
+
display: flex;
|
|
77
|
+
flex-wrap: wrap;
|
|
78
|
+
align-items: center;
|
|
79
|
+
gap: var(--spacing-1) var(--spacing-2);
|
|
80
|
+
max-width: 40rem;
|
|
81
|
+
font-size: var(--font-size-compact);
|
|
82
|
+
color: var(--color-feedback-danger-ink);
|
|
83
|
+
overflow-wrap: anywhere;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.crewlet-refusal-strip__hint {
|
|
87
|
+
font-size: var(--font-size-xs);
|
|
88
|
+
color: var(--color-text-secondary);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.crewlet-refusal-strip--foot .crewlet-refusal-strip__hint {
|
|
92
|
+
color: inherit;
|
|
93
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
export interface RefusalCardLabels {
|
|
3
|
+
/** The Tag in the head. */
|
|
4
|
+
notPermitted: string;
|
|
5
|
+
/** The house phrase, always said last. */
|
|
6
|
+
nothingChanged: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const REFUSAL_CARD_LABELS: RefusalCardLabels;
|
|
9
|
+
export interface RefusalCardProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
|
|
10
|
+
/** The action that was asked for, in sentence case: "File a task". */
|
|
11
|
+
title: string;
|
|
12
|
+
/** An optional first sentence: "You do not have permission to file tasks." */
|
|
13
|
+
heading?: ReactNode;
|
|
14
|
+
/**
|
|
15
|
+
* Why, in the product's own words: the access the action needs and what the
|
|
16
|
+
* person holds ("Filing tasks needs Tracker access, and your role includes
|
|
17
|
+
* Knowledge only."). Assembled from the engine's answer, never a model's.
|
|
18
|
+
*/
|
|
19
|
+
children: ReactNode;
|
|
20
|
+
/** Utilities at the foot: "Copy a request to an admin", "About access". Nothing is sent on the person's behalf. */
|
|
21
|
+
actions?: ReactNode;
|
|
22
|
+
labels?: Partial<RefusalCardLabels> | undefined;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A request the person's own access does not allow, said as the product says
|
|
26
|
+
* it: the action asked for as the title, "Not permitted" as a neutral Tag
|
|
27
|
+
* with the lock (nothing went wrong, so not the danger tone), the access it
|
|
28
|
+
* needs and what the person holds, and always "Nothing changed.".
|
|
29
|
+
*
|
|
30
|
+
* IT OFFERS NO WORKAROUND. The foot holds only what the person can do with
|
|
31
|
+
* their own hands (copy a request to send an admin, read about access), and
|
|
32
|
+
* starts on the card's text edge, because none of it is a decision.
|
|
33
|
+
*/
|
|
34
|
+
export declare function RefusalCard({ title, heading, children, actions, labels: overrides, className, ...rest }: RefusalCardProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { REFUSAL_CARD_LABELS, RefusalCard } from '../chunk-BLPT6GHV.js';
|
|
2
|
+
import '../chunk-WDIVALLP.js';
|
|
3
|
+
import '../chunk-KYIAFNU7.js';
|
|
4
|
+
import '../chunk-WIATRXEJ.js';
|
|
5
|
+
import '../chunk-INHXF2CL.js';
|
|
6
|
+
import '../chunk-AV2DXAEL.js';
|
|
7
|
+
import '../chunk-BHHIIK3M.js';
|
|
8
|
+
import '../chunk-PQADV6P6.js';
|
|
9
|
+
import '../chunk-BZFWDIV6.js';
|
|
10
|
+
import '../chunk-ODEQTPFM.js';
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The shared instant, in epoch ms, re-rendering the caller once a second.
|
|
3
|
-
*
|
|
4
|
-
* Pass the value DOWN rather than calling this again deeper: two components
|
|
5
|
-
* reading their own clock is the disagreement it exists to prevent.
|
|
6
|
-
*/
|
|
7
1
|
export declare function useNow(): number;
|
|
8
2
|
/** The current instant without subscribing, for an event handler or an effect. */
|
|
9
3
|
export declare function currentNow(): number;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { RelativeTime, currentNow, formatElapsed, formatExact, formatRelative, formatUntil, toISO, toInstant, useNow } from '../chunk-
|
|
1
|
+
export { RelativeTime, currentNow, formatElapsed, formatExact, formatRelative, formatUntil, toISO, toInstant, useNow } from '../chunk-KS7YIJ4S.js';
|
|
2
2
|
import '../chunk-EUCC37WY.js';
|
|
3
3
|
import '../chunk-BZFWDIV6.js';
|
|
4
4
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The grip between a panel and the page beside it (`ResizeHandle`).
|
|
3
|
+
*
|
|
4
|
+
* DRAWN AS NOTHING AT REST. It stands in a seam that is already drawn (the
|
|
5
|
+
* frame's inset between two sheets, a panel's hairline), so a handle of its
|
|
6
|
+
* own would be a second line beside one. It washes in the soft accent under
|
|
7
|
+
* the pointer, under keyboard focus and for the whole of a drag.
|
|
8
|
+
*
|
|
9
|
+
* ITS DRAWN WIDTH IS THE SEAM'S (`--crewlet-resize-handle-width`, the frame's
|
|
10
|
+
* inset), and its target is the 24px floor whatever that width is: the
|
|
11
|
+
* hit area reaches half the difference out on each side, so a seam of 8px
|
|
12
|
+
* is still a target a finger can find.
|
|
13
|
+
*
|
|
14
|
+
* Placed by whoever holds it: the shell's aside and a side panel put it on
|
|
15
|
+
* their own start edge. Absolute, so it takes no room in the layout it sizes.
|
|
16
|
+
*/
|
|
17
|
+
.crewlet-resize-handle {
|
|
18
|
+
--crewlet-resize-handle-width: var(--size-shell-inset);
|
|
19
|
+
--crewlet-hit-area-inline: max(0px, calc((var(--size-target-min) - var(--crewlet-resize-handle-width)) / 2));
|
|
20
|
+
position: absolute;
|
|
21
|
+
top: 0;
|
|
22
|
+
bottom: 0;
|
|
23
|
+
z-index: var(--z-index-raised);
|
|
24
|
+
width: var(--crewlet-resize-handle-width);
|
|
25
|
+
border-radius: var(--radius-xs);
|
|
26
|
+
background: transparent;
|
|
27
|
+
cursor: col-resize;
|
|
28
|
+
/* A touch drags the edge rather than scrolling the page under it. */
|
|
29
|
+
touch-action: none;
|
|
30
|
+
transition: background var(--motion-duration-fast) var(--motion-easing-default);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/* On a panel's left edge it stands outside the panel, in the seam before it. */
|
|
34
|
+
.crewlet-resize-handle--left {
|
|
35
|
+
left: calc(var(--crewlet-resize-handle-width) * -1);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.crewlet-resize-handle--right {
|
|
39
|
+
right: calc(var(--crewlet-resize-handle-width) * -1);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.crewlet-resize-handle:hover,
|
|
43
|
+
.crewlet-resize-handle:focus-visible,
|
|
44
|
+
.crewlet-resize-handle[data-dragging] {
|
|
45
|
+
background: var(--color-brand-accent-soft);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/* Inside its own box: it draws no edge, and the seam it stands in is the
|
|
49
|
+
two neighbours' edges, which a ring set outward would run over. */
|
|
50
|
+
.crewlet-resize-handle:focus-visible {
|
|
51
|
+
outline: 2px solid var(--color-focus);
|
|
52
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
@media (prefers-reduced-motion: reduce) {
|
|
56
|
+
.crewlet-resize-handle {
|
|
57
|
+
transition: none;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { type HTMLAttributes, type ReactNode } from 'react';
|
|
2
|
+
import { type TableColumnAlign } from '../Table/index.js';
|
|
3
|
+
/** One download a result offers, fetched on the press: an export the server builds. */
|
|
4
|
+
export interface ResultTableDownload {
|
|
5
|
+
/** The format, as the button says it: "CSV", "XLSX". */
|
|
6
|
+
label: string;
|
|
7
|
+
/** The name the file is offered under: "token-spend-this-week.csv". */
|
|
8
|
+
filename: string;
|
|
9
|
+
/** Fetches the file. A rejection reads as a failed download on the button. */
|
|
10
|
+
file: () => Promise<Blob>;
|
|
11
|
+
}
|
|
12
|
+
export interface ResultTableCardLabels {
|
|
13
|
+
/** The control that shows every row of a long result: "Show all 48". */
|
|
14
|
+
showAll: (count: number) => string;
|
|
15
|
+
}
|
|
16
|
+
export declare const RESULT_TABLE_CARD_LABELS: ResultTableCardLabels;
|
|
17
|
+
/** Results with more rows than this show the first `collapsedRows` and "Show all". */
|
|
18
|
+
export declare const RESULT_TABLE_MAX_ROWS = 20;
|
|
19
|
+
/** How many rows a long result shows until the reader asks for all of them. */
|
|
20
|
+
export declare const RESULT_TABLE_COLLAPSED_ROWS = 10;
|
|
21
|
+
export interface ResultTableCardProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
|
|
22
|
+
/** What the rows are: "Token spend by agent". Also the table's caption, said and not shown twice. */
|
|
23
|
+
title: string;
|
|
24
|
+
/** The window or scope the rows cover, under the title: "This week, from Monday". */
|
|
25
|
+
window?: ReactNode;
|
|
26
|
+
headers: ReactNode[];
|
|
27
|
+
rows: ReactNode[][];
|
|
28
|
+
/** Each column's edge: `end` for figures. */
|
|
29
|
+
align?: readonly TableColumnAlign[] | undefined;
|
|
30
|
+
/** The total row, under the rows it sums. */
|
|
31
|
+
total?: readonly ReactNode[] | undefined;
|
|
32
|
+
/** The exports the result offers, each fetched on its press. */
|
|
33
|
+
downloads?: readonly ResultTableDownload[] | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* A way to the page the rows come from ("Open in Spend"), at the foot's
|
|
36
|
+
* end: the host's own link (a `ButtonLink` ghost small, or its router's).
|
|
37
|
+
*/
|
|
38
|
+
link?: ReactNode;
|
|
39
|
+
/** Over this many rows, the card shows `collapsedRows` and "Show all". 20 by default. */
|
|
40
|
+
maxRows?: number | undefined;
|
|
41
|
+
/** How many rows a long result shows at first. 10 by default. */
|
|
42
|
+
collapsedRows?: number | undefined;
|
|
43
|
+
/** What an empty result says. "No rows match." by default. */
|
|
44
|
+
emptyMessage?: ReactNode;
|
|
45
|
+
labels?: Partial<ResultTableCardLabels> | undefined;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* A result as a table in a card: its title and window, the rows with
|
|
49
|
+
* tabular figures and a total row, and a foot with the exports and a way to
|
|
50
|
+
* the page the rows come from.
|
|
51
|
+
*
|
|
52
|
+
* THE CARD IS THE FRAME. The table draws no edge of its own and its outer
|
|
53
|
+
* cells take the card's inset, so every row lines up with the title. The
|
|
54
|
+
* first column takes the room the figures leave and ends a long name in an
|
|
55
|
+
* ellipsis; a host that cuts names gives the cell its own tooltip.
|
|
56
|
+
*
|
|
57
|
+
* A FOOT OF UTILITIES, so it starts on the card's text edge: the downloads
|
|
58
|
+
* first (their ghost padding pulled out so the first glyph sits on that edge)
|
|
59
|
+
* and the link at the far end.
|
|
60
|
+
*
|
|
61
|
+
* A LONG RESULT IS SHORTENED, never paged: over `maxRows` rows, the first
|
|
62
|
+
* `collapsedRows` and "Show all 48", which shows the rest in place.
|
|
63
|
+
*/
|
|
64
|
+
export declare function ResultTableCard({ title, window: span, headers, rows, align, total, downloads, link, maxRows, collapsedRows, emptyMessage, labels: overrides, className, ...rest }: ResultTableCardProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import './ResultTableCard.css';
|
|
2
|
+
export { RESULT_TABLE_CARD_LABELS, RESULT_TABLE_COLLAPSED_ROWS, RESULT_TABLE_MAX_ROWS, ResultTableCard, } from './ResultTableCard.js';
|
|
3
|
+
export type { ResultTableCardLabels, ResultTableCardProps, ResultTableDownload } from './ResultTableCard.js';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export { RESULT_TABLE_CARD_LABELS, RESULT_TABLE_COLLAPSED_ROWS, RESULT_TABLE_MAX_ROWS, ResultTableCard } from '../chunk-GZMEWWXW.js';
|
|
2
|
+
import '../chunk-45KMH3E3.js';
|
|
3
|
+
import '../chunk-WDIVALLP.js';
|
|
4
|
+
import '../chunk-HNK43Z3P.js';
|
|
5
|
+
import '../chunk-YNRKVY7X.js';
|
|
6
|
+
import '../chunk-DTIW4CHZ.js';
|
|
7
|
+
import '../chunk-KYIAFNU7.js';
|
|
8
|
+
import '../chunk-WIATRXEJ.js';
|
|
9
|
+
import '../chunk-INHXF2CL.js';
|
|
10
|
+
import '../chunk-AV2DXAEL.js';
|
|
11
|
+
import '../chunk-BHHIIK3M.js';
|
|
12
|
+
import '../chunk-PQADV6P6.js';
|
|
13
|
+
import '../chunk-HD4QJ2SI.js';
|
|
14
|
+
import '../chunk-EA23JG6R.js';
|
|
15
|
+
import '../chunk-BZFWDIV6.js';
|
|
16
|
+
import '../chunk-ODEQTPFM.js';
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* A result in a card. The card, its head and its foot are StatusCard's and
|
|
3
|
+
* the table is Table's, drawn flush; what a result adds is the column model:
|
|
4
|
+
* the first column takes the room the figures leave and ends a long name in
|
|
5
|
+
* an ellipsis, and the figures never wrap.
|
|
6
|
+
*/
|
|
7
|
+
.crewlet-result-table-card__table .crewlet-table__table {
|
|
8
|
+
table-layout: auto;
|
|
9
|
+
font-variant-numeric: tabular-nums;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.crewlet-result-table-card__table td:first-child {
|
|
13
|
+
width: 100%;
|
|
14
|
+
max-width: 0;
|
|
15
|
+
overflow: hidden;
|
|
16
|
+
text-overflow: ellipsis;
|
|
17
|
+
white-space: nowrap;
|
|
18
|
+
overflow-wrap: normal;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.crewlet-result-table-card__table .crewlet-table__cell--end {
|
|
22
|
+
white-space: nowrap;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/*
|
|
26
|
+
* THE DOWNLOADS ARE SPANS AROUND A BUTTON (the status region beside each is
|
|
27
|
+
* a sibling of its button), so the foot's ghost outdent is stated for them
|
|
28
|
+
* here: the first one's padding and edge are pulled out so its glyph sits on
|
|
29
|
+
* the card's text edge.
|
|
30
|
+
*/
|
|
31
|
+
.crewlet-result-table-card .crewlet-status-card__actions > .crewlet-result-table-card__download:first-child {
|
|
32
|
+
margin-inline-start: calc(-1 * (var(--spacing-2) + 1px));
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/* The link stands at the foot's far end, its own padding pulled out to the edge. */
|
|
36
|
+
.crewlet-result-table-card__link {
|
|
37
|
+
display: inline-flex;
|
|
38
|
+
margin-inline-start: auto;
|
|
39
|
+
margin-inline-end: calc(-1 * (var(--spacing-2) + 1px));
|
|
40
|
+
}
|
package/dist/ReviewList/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { ReviewList } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { ReviewList } from '../chunk-OJ2QULVH.js';
|
|
2
|
+
import '../chunk-3LI4TRUR.js';
|
|
3
3
|
import '../chunk-KYIAFNU7.js';
|
|
4
4
|
import '../chunk-WIATRXEJ.js';
|
|
5
5
|
import '../chunk-PQADV6P6.js';
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* # A save with no edit changes nothing, by construction
|
|
6
6
|
*
|
|
7
|
-
* Storage is Markdown, and the bytes are the record: a
|
|
7
|
+
* Storage is Markdown, and the bytes are the record: a Doclet page is
|
|
8
8
|
* merged line by line against somebody else's save, and a doc's version is a
|
|
9
9
|
* patch of the lines that moved. An editor that wrote every body back in its
|
|
10
10
|
* own canonical spelling would turn opening a page and pressing Save into a
|
package/dist/RichEditor/index.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
export { RichEditor, preloadRichEditor } from '../chunk-
|
|
1
|
+
export { RichEditor, preloadRichEditor } from '../chunk-NI7WUPH3.js';
|
|
2
2
|
export { RICH_EDITOR_LABELS, richEditorLabels } from '../chunk-CSQTDGTS.js';
|
|
3
3
|
import '../chunk-BAKPMH3S.js';
|
|
4
4
|
import '../chunk-BPCY7ZID.js';
|
|
5
5
|
import '../chunk-TEUQWOWZ.js';
|
|
6
|
-
import '../chunk-
|
|
6
|
+
import '../chunk-HD4QJ2SI.js';
|
|
7
|
+
import '../chunk-EA23JG6R.js';
|
|
7
8
|
import '../chunk-BZFWDIV6.js';
|
|
8
9
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The editor's Markdown round trip, as plain functions: what a load and a
|
|
3
3
|
* save with no edit write, and the spelling a changed block is written in.
|
|
4
|
-
* An application holds its own bodies to them (a
|
|
4
|
+
* An application holds its own bodies to them (a Doclet page's fixtures, a
|
|
5
5
|
* doc's), so a body the editor would rewrite is found by a test rather than
|
|
6
6
|
* by somebody's diff.
|
|
7
7
|
*
|