@crewlethq/ui 0.32.0 → 0.34.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 +149 -5
- package/dist/AccessDeniedCard/AccessDeniedCard.d.ts +5 -0
- package/dist/AccessDeniedCard/index.js +1 -5
- package/dist/AccessDeniedCard-QVNDMT46.css +8 -0
- package/dist/AppShell/index.js +4 -4
- package/dist/{AppShell-GCM4TDVY.css → AppShell-JTSEOA57.css} +3 -1
- package/dist/ArrangeGroup/ArrangeGroup.d.ts +16 -1
- package/dist/ArrangeGroup/index.d.ts +1 -1
- package/dist/ArrangeGroup/index.js +1 -1
- package/dist/{ArrangeGroup-GY5YMP6E.css → ArrangeGroup-KRWWOJKR.css} +43 -0
- package/dist/ArrangeList/index.js +2 -2
- package/dist/ArtifactBar/index.js +14 -12
- package/dist/{ArtifactBar-MLMJHWY6.css → ArtifactBar-C462VD4C.css} +8 -3
- package/dist/ArtifactCard/ArtifactCard.d.ts +64 -6
- package/dist/ArtifactCard/index.d.ts +2 -2
- package/dist/ArtifactCard/index.js +6 -4
- package/dist/ArtifactCard-XHRLAL7C.css +289 -0
- package/dist/ArtifactCover/index.js +8 -6
- package/dist/ArtifactIcon/index.js +7 -5
- package/dist/ArtifactKindIllustration/ArtifactKindIllustration.d.ts +53 -0
- package/dist/ArtifactKindIllustration/index.d.ts +3 -0
- package/dist/ArtifactKindIllustration/index.js +3 -0
- package/dist/ArtifactKindIllustration-4NG6IE3C.css +211 -0
- package/dist/ArtifactPanel/ArtifactPanel.d.ts +6 -2
- package/dist/ArtifactPanel/index.js +1 -1
- package/dist/{ArtifactPanel-YFXT5O77.css → ArtifactPanel-HW3SU7CP.css} +25 -7
- package/dist/Avatar/Avatar.d.ts +6 -4
- package/dist/Avatar/index.js +2 -2
- package/dist/AvatarPicker/index.js +8 -8
- package/dist/Callout/index.js +1 -1
- package/dist/{Callout-SXXK4B5R.css → Callout-ZAVG3P66.css} +46 -6
- package/dist/Canvas/Canvas.d.ts +33 -2
- package/dist/Canvas/index.d.ts +1 -1
- package/dist/Canvas/index.js +4 -4
- package/dist/{Canvas-LRVNW7XN.css → Canvas-VUG2HLZK.css} +23 -0
- package/dist/CanvasBoard/CanvasBoard.d.ts +38 -3
- package/dist/CanvasBoard/budget.d.ts +9 -3
- package/dist/CanvasBoard/index.d.ts +2 -2
- package/dist/CanvasBoard/index.js +7 -7
- package/dist/{CanvasBoard-MBZVBWDO.css → CanvasBoard-5NNSKY6A.css} +127 -6
- package/dist/CanvasToolbar/index.js +5 -5
- package/dist/{CanvasToolbar-AE5MXH7T.css → CanvasToolbar-EM5EVZED.css} +4 -2
- package/dist/ChangeMark/index.js +4 -4
- package/dist/CharacterPicker/index.js +2 -2
- package/dist/Charts/ActivityStrip.d.ts +16 -1
- package/dist/Charts/BarList.d.ts +6 -0
- package/dist/Charts/ChartEmpty.d.ts +33 -0
- package/dist/Charts/Legend.d.ts +6 -0
- package/dist/Charts/StackedBar.d.ts +4 -1
- package/dist/Charts/StackedColumns.d.ts +14 -3
- package/dist/Charts/TimeSeries.d.ts +11 -1
- package/dist/Charts/index.d.ts +2 -0
- package/dist/Charts/index.js +1 -1
- package/dist/{Charts-RY4JN5FC.css → Charts-MBJG72BS.css} +140 -16
- package/dist/Checkbox/index.js +1 -1
- package/dist/{Checkbox-5UORUG3F.css → Checkbox-ALWG3WV2.css} +11 -0
- package/dist/CommandPalette/index.js +3 -3
- package/dist/{CommandPalette-HBTNKHZQ.css → CommandPalette-7CFGVBND.css} +4 -0
- package/dist/CommentThread/index.js +5 -5
- package/dist/Container/index.js +1 -1
- package/dist/{Container-3TSKMGNI.css → Container-34BAKG7B.css} +3 -1
- package/dist/{DashboardCover-RMINBODB.css → DashboardCover-KYGYMRKW.css} +42 -9
- package/dist/DataTable/index.js +5 -5
- package/dist/{DataTable-WZK3V62B.css → DataTable-NL2YWAIA.css} +4 -1
- package/dist/DataView/index.js +8 -8
- package/dist/DateTimePicker/index.js +3 -3
- package/dist/DocTabsEditor/DocTabsEditor.d.ts +34 -21
- package/dist/DocTabsEditor/index.js +4 -1
- package/dist/DocTabsEditor-4M452LNS.css +189 -0
- package/dist/Document/Document.d.ts +18 -1
- package/dist/Document/index.d.ts +2 -2
- package/dist/Document/index.js +1 -1
- package/dist/{Document-G3YTZIUL.css → Document-JUGCSQ4L.css} +78 -5
- package/dist/EditingStatus/index.js +1 -1
- package/dist/{EditingStatus-L6THUAN7.css → EditingStatus-NNA2CKIL.css} +17 -4
- package/dist/{Editor-YWBUJAQU.js → Editor-UUZ7XKCU.js} +5 -5
- package/dist/EntityChip/index.js +3 -3
- package/dist/FactList/index.js +3 -3
- package/dist/FollowBanner/index.js +3 -3
- package/dist/Fullscreen/index.d.ts +1 -0
- package/dist/Fullscreen/index.js +1 -1
- package/dist/Fullscreen/useIdle.d.ts +16 -0
- package/dist/HuePicker/index.js +3 -3
- package/dist/ImageUpload/index.js +3 -3
- package/dist/Layer/index.d.ts +1 -1
- package/dist/Layer/index.js +1 -1
- package/dist/Layer/place.d.ts +18 -0
- package/dist/LayersList/LayersList.d.ts +57 -0
- package/dist/LayersList/index.d.ts +3 -0
- package/dist/LayersList/index.js +3 -0
- package/dist/LayersList-NQZEIPZB.css +82 -0
- package/dist/LinkInterstitial/index.js +4 -4
- package/dist/ListInput/index.js +1 -1
- package/dist/LivePreview/LivePreview.d.ts +83 -0
- package/dist/LivePreview/budget.d.ts +50 -0
- package/dist/LivePreview/index.d.ts +5 -0
- package/dist/LivePreview/index.js +2 -0
- package/dist/LivePreview-SRO7KHO4.css +65 -0
- package/dist/Markdown/index.js +1 -1
- package/dist/MarkdownEditor/index.js +5 -5
- package/dist/MediaMatch/index.d.ts +1 -0
- package/dist/MediaMatch/index.js +1 -0
- package/dist/MediaMatch/useMediaMatch.d.ts +19 -0
- package/dist/Menu/index.js +2 -2
- package/dist/MergeConflicts/index.js +4 -4
- package/dist/Modal/index.js +2 -2
- package/dist/{Modal-XOSV6FAH.css → Modal-7MWRCWAI.css} +30 -0
- package/dist/Note/index.js +1 -1
- package/dist/{Note-ONSKKTOA.css → Note-WI5MLZOO.css} +13 -0
- package/dist/OrgLabel/index.js +3 -3
- package/dist/OrgNode/index.js +4 -4
- package/dist/OrgTable/index.js +7 -7
- package/dist/PeopleRail/index.js +3 -3
- package/dist/Popover/index.js +2 -2
- package/dist/PresenceStack/index.js +3 -3
- package/dist/{PresenceStack-QSXQJND5.css → PresenceStack-FJJQVH74.css} +11 -3
- package/dist/PresenterView/PresenterView.d.ts +3 -0
- package/dist/PresenterView/index.js +5 -3
- package/dist/PresenterView-T3EXIQ5S.css +147 -0
- package/dist/Principal/index.js +3 -3
- package/dist/PrincipalPicker/index.js +4 -4
- package/dist/RichEditor/index.js +5 -5
- package/dist/RichEditor/schema.d.ts +1 -1
- package/dist/RichEditorMarkdown/index.js +3 -3
- package/dist/SandboxedFrame/SandboxedFrame.d.ts +44 -2
- package/dist/SandboxedFrame/index.d.ts +2 -2
- package/dist/SandboxedFrame/index.js +3 -3
- package/dist/SandboxedFrame-P5NASXB7.css +72 -0
- package/dist/Section/index.js +1 -1
- package/dist/{Section-QR3ILQVK.css → Section-O5AHGSOG.css} +28 -5
- package/dist/SegmentedControl/index.js +3 -3
- package/dist/Select/Select.d.ts +10 -0
- package/dist/Select/index.d.ts +1 -1
- package/dist/Select/index.js +2 -2
- package/dist/{Select-2P7AWUE4.css → Select-A54YS5EP.css} +29 -0
- package/dist/ShareDialog/ShareDialog.d.ts +10 -0
- package/dist/ShareDialog/index.js +9 -9
- package/dist/{ShareDialog-YZ4F37MW.css → ShareDialog-4QDCBWMH.css} +12 -0
- package/dist/SheetGrid/SheetGrid.d.ts +7 -3
- package/dist/SheetGrid/index.js +8 -8
- package/dist/{SheetGrid-J3TKKXZL.css → SheetGrid-GDPCCZ4V.css} +154 -14
- package/dist/SheetModel/fit.d.ts +34 -0
- package/dist/SheetModel/index.d.ts +1 -0
- package/dist/SheetModel/index.js +1 -1
- package/dist/SheetModel/labels.d.ts +1 -1
- package/dist/Shortcut/index.js +1 -1
- package/dist/Skeleton/Skeleton.d.ts +2 -1
- package/dist/Skeleton/index.js +1 -1
- package/dist/SlideCompare/SlideCompare.d.ts +6 -1
- package/dist/SlideCompare/index.js +3 -3
- package/dist/{SlideCompare-MGM3U2ME.css → SlideCompare-HTCMPQFY.css} +36 -3
- package/dist/SlideFilmstrip/SlideFilmstrip.d.ts +14 -3
- package/dist/SlideFilmstrip/index.js +3 -3
- package/dist/{SlideFilmstrip-BCLNAHFX.css → SlideFilmstrip-5U6Z55GS.css} +63 -2
- package/dist/SlideGrid/index.js +3 -3
- package/dist/{SlideGrid-RT6QEQEE.css → SlideGrid-S4LTJ4UU.css} +9 -5
- package/dist/SlideNav/SlideNav.d.ts +49 -0
- package/dist/SlideNav/index.d.ts +3 -0
- package/dist/SlideNav/index.js +4 -0
- package/dist/SlideNav-BLFJF6AH.css +53 -0
- package/dist/SlideStage/SlideStage.d.ts +9 -1
- package/dist/SlideStage/index.js +2 -2
- package/dist/{SlideStage-KGRRALXR.css → SlideStage-S2FISF4C.css} +23 -0
- package/dist/StatCard/StatCard.d.ts +16 -1
- package/dist/StatCard/index.js +1 -1
- package/dist/{StatCard-KPAFD4E2.css → StatCard-4T7TMWMN.css} +40 -13
- package/dist/Switcher/index.js +6 -6
- package/dist/TableCells/index.js +3 -3
- package/dist/Tabs/Tabs.d.ts +21 -4
- package/dist/Tabs/index.js +1 -1
- package/dist/{Tabs-CJGO35BH.css → Tabs-MMZXV5EF.css} +9 -8
- package/dist/TagsInput/index.js +1 -1
- package/dist/ThemeSwitcher/index.js +4 -4
- package/dist/TimeWindowPicker/index.js +4 -4
- package/dist/Toaster/index.js +2 -2
- package/dist/{Toaster-EOOOTSJT.css → Toaster-C6BQ7L6I.css} +10 -1
- package/dist/Toolbar/index.js +1 -1
- package/dist/Tooltip/Tooltip.d.ts +12 -1
- package/dist/Tooltip/index.d.ts +1 -1
- package/dist/Tooltip/index.js +2 -2
- package/dist/TreeCanvas/index.js +5 -5
- package/dist/TreeGrid/index.js +3 -3
- package/dist/VersionCompare/index.js +4 -4
- package/dist/VersionTimeline/index.js +4 -4
- package/dist/WidgetFrame/WidgetFrame.d.ts +8 -1
- package/dist/WidgetFrame/index.js +2 -2
- package/dist/{WidgetFrame-LRZIL62O.css → WidgetFrame-BTFW3CRK.css} +49 -5
- package/dist/{chunk-WJDQ7XQA.js → chunk-2QEDJSJC.js} +1 -1
- package/dist/{chunk-VYDFB6PJ.js → chunk-356JNSER.js} +50 -17
- package/dist/{chunk-2HIOJ4YZ.js → chunk-3EB2AV3H.js} +2 -3
- package/dist/{chunk-ODT5H4MN.js → chunk-3LYWD3BO.js} +2 -2
- package/dist/{chunk-OTN35CI4.js → chunk-3P4Y5RX6.js} +18 -6
- package/dist/{chunk-FAQGGX2Z.js → chunk-3TFDQLW3.js} +1 -1
- package/dist/{chunk-E6EWK5YY.js → chunk-3Y56GQPM.js} +3 -3
- package/dist/{chunk-A4E5YLXO.js → chunk-4B6LSFDS.js} +1 -1
- package/dist/{chunk-UAN5NE7M.js → chunk-5AQBPHZD.js} +1 -1
- package/dist/{chunk-CJKMURZO.js → chunk-5SZGKSGL.js} +1 -1
- package/dist/chunk-6VOS2GMB.js +54 -0
- package/dist/{chunk-QWOPX2MN.js → chunk-6ZJ3N7QI.js} +7 -5
- package/dist/{chunk-3ZAFJ4GK.js → chunk-7Q7WDXHG.js} +4 -4
- package/dist/{chunk-QH3AKP2N.js → chunk-AC22RZKC.js} +2 -2
- package/dist/{chunk-UZ6MA2V6.js → chunk-AORVEG5V.js} +2 -2
- package/dist/{chunk-ZITJKF6Z.js → chunk-AYB6AYNH.js} +1 -1
- package/dist/{chunk-FC4YTTFJ.js → chunk-BQ7AKL2N.js} +5 -5
- package/dist/{chunk-Y5NQ2LMS.js → chunk-BY4N65PM.js} +1 -1
- package/dist/{chunk-YFW4MTK4.js → chunk-C7DKX453.js} +1 -1
- package/dist/{chunk-RCQXUT5K.js → chunk-CCAXYHQS.js} +1 -1
- package/dist/{chunk-JQLTG4KH.js → chunk-CCLNGVCM.js} +62 -51
- package/dist/{chunk-6AH2XJ3Q.js → chunk-CFAJP777.js} +3 -3
- package/dist/{chunk-4KP4RC3O.js → chunk-CI3VPIJN.js} +1 -1
- package/dist/{chunk-7T42VQQT.js → chunk-CPEPST4S.js} +1 -1
- package/dist/{chunk-AAOH2P6Y.js → chunk-DFK5EQTU.js} +5 -3
- package/dist/{chunk-V5IGUXMZ.js → chunk-E4NNGC6X.js} +4 -4
- package/dist/{chunk-TGYDROIB.js → chunk-EBCHVFCS.js} +4 -4
- package/dist/{chunk-LWXRD6L6.js → chunk-EWAFN2IU.js} +118 -27
- package/dist/{chunk-YDBC4DNW.js → chunk-FWYHRU7M.js} +1 -1
- package/dist/{chunk-HVNTQ36V.js → chunk-GMU6SQ6B.js} +4 -4
- package/dist/{chunk-LIXSV5YI.js → chunk-GPHWCK7M.js} +1 -1
- package/dist/{chunk-UQHKFF2N.js → chunk-GPWJCP3U.js} +1 -1
- package/dist/{chunk-77DRMDXR.js → chunk-HG5VF3TZ.js} +192 -67
- package/dist/{chunk-QVE4GJAT.js → chunk-HJO4WCH6.js} +1 -1
- package/dist/{chunk-JI5AVQLA.js → chunk-HOIZ6MIS.js} +1 -1
- package/dist/{chunk-I3BSQUKN.js → chunk-HUVG2FFT.js} +1 -1
- package/dist/{chunk-VS3KOOOL.js → chunk-ILAEBSLJ.js} +3 -3
- package/dist/{chunk-P4BOXB6E.js → chunk-IUD5VA2Z.js} +6 -7
- package/dist/{chunk-GR55WT4R.js → chunk-IYO2N5ZH.js} +2 -2
- package/dist/{chunk-RWA4H2TV.js → chunk-J6ON5SYE.js} +1 -1
- package/dist/{chunk-AMNN4WDX.js → chunk-JBUMD6DS.js} +2 -2
- package/dist/{chunk-BWRGFKJP.js → chunk-K3IJQNB7.js} +2 -3
- package/dist/{chunk-LFNUH4GY.js → chunk-K4VP6ZKE.js} +1 -1
- package/dist/{chunk-ZR5VN5IV.js → chunk-KD2IRYCT.js} +2 -2
- package/dist/chunk-KF6YGL4B.js +160 -0
- package/dist/{chunk-SKOYC2CF.js → chunk-KK5OYNAF.js} +2 -1
- package/dist/{chunk-UB7TJEKZ.js → chunk-KV3ODJXH.js} +6 -7
- package/dist/chunk-LL5AFXU7.js +96 -0
- package/dist/{chunk-VYOKRN2I.js → chunk-LM3ISVJA.js} +1 -1
- package/dist/{chunk-E6CR5PEV.js → chunk-LV4APO72.js} +8 -2
- package/dist/{chunk-B4EBHPK3.js → chunk-M5KZX5JE.js} +9 -2
- package/dist/{chunk-HMPFGIWM.js → chunk-OMV5W53A.js} +10 -1
- package/dist/chunk-ONL54WMH.js +55 -0
- package/dist/{chunk-AKEZ3G5V.js → chunk-ONQKKHON.js} +1 -1
- package/dist/{chunk-LZHLSQYK.js → chunk-OOWPSBIS.js} +2 -2
- package/dist/{chunk-4KWOKX2B.js → chunk-OSKJZNBT.js} +1 -1
- package/dist/{chunk-4JUKWWUD.js → chunk-PLDUNXAO.js} +1 -1
- package/dist/{chunk-EHQTPVV4.js → chunk-PLTCDSTU.js} +1 -1
- package/dist/{chunk-5OM447RW.js → chunk-PZKHBB7D.js} +1 -1
- package/dist/{chunk-VEB5ERRE.js → chunk-QWNVSR6G.js} +2 -2
- package/dist/{chunk-IG75YMUN.js → chunk-RTPQDNW3.js} +1 -1
- package/dist/{chunk-YEKYVJQR.js → chunk-SGHIAGPR.js} +2 -2
- package/dist/{chunk-SVSCLHHI.js → chunk-SZZRIHGT.js} +1 -1
- package/dist/{chunk-EBNI36UQ.js → chunk-T46NR3WP.js} +3 -3
- package/dist/{chunk-FPS3JIPQ.js → chunk-TC7DJTXI.js} +1 -1
- package/dist/{chunk-W5J7R5EB.js → chunk-TEUQWOWZ.js} +1 -1
- package/dist/chunk-THROPJZC.js +115 -0
- package/dist/{chunk-IDBHX5SR.js → chunk-TRQCHF2F.js} +1 -1
- package/dist/{chunk-M3LUNN7F.js → chunk-TYKQ33CL.js} +13 -2
- package/dist/chunk-UDQW6UK7.js +129 -0
- package/dist/{chunk-WTNUVQVI.js → chunk-UHJQDFKQ.js} +1 -1
- package/dist/{chunk-VVRL27HM.js → chunk-ULPL26BU.js} +2 -2
- package/dist/{chunk-EBJREOKS.js → chunk-UXXJDIYE.js} +4 -4
- package/dist/{chunk-5LUI3WQP.js → chunk-V43UVX4H.js} +1 -1
- package/dist/{chunk-W4XYY73O.js → chunk-VHZ3AXJD.js} +1 -1
- package/dist/{chunk-NHBP2XS5.js → chunk-VI5FWDZW.js} +51 -3
- package/dist/{chunk-HJEVSQN6.js → chunk-VL6CUNSX.js} +11 -5
- package/dist/{chunk-XDTYBF2F.js → chunk-W5XCNEZC.js} +39 -1
- package/dist/{chunk-LDJ3J4TQ.js → chunk-WGD2HX2A.js} +1 -1
- package/dist/{chunk-FQCLKD7U.js → chunk-WKEPORNM.js} +1 -1
- package/dist/{chunk-PJD2KFHX.js → chunk-WPX6A5BV.js} +38 -13
- package/dist/{chunk-I3KKZ2O3.js → chunk-XEGZHHRH.js} +45 -36
- package/dist/{chunk-IKB6HFGK.js → chunk-XO7PUL4F.js} +6 -4
- package/dist/chunk-XTOVADJU.js +170 -0
- package/dist/chunk-XV32RKQZ.js +142 -0
- package/dist/{chunk-TBMDMXEX.js → chunk-YA3AWELW.js} +1 -1
- package/dist/{chunk-HVIX5ECM.js → chunk-YEVG2X5R.js} +1 -1
- package/dist/chunk-YZFLH463.js +215 -0
- package/dist/generated/index.d.ts +5 -0
- package/dist/generated/index.js +112 -108
- package/dist/index.js +112 -108
- package/dist/styles.css +1982 -228
- package/package.json +3 -3
- package/dist/AccessDeniedCard-WXM5DBDZ.css +0 -8
- package/dist/ArtifactCard-EXVAEBV6.css +0 -109
- package/dist/DocTabsEditor-RCOWHX5J.css +0 -78
- package/dist/PresenterView-T2C6ZZ3N.css +0 -103
- package/dist/SandboxedFrame-L6HBQZCD.css +0 -50
- package/dist/chunk-CRKFL423.js +0 -74
- package/dist/chunk-GOSQXEZU.js +0 -102
- package/dist/chunk-MBNFJSZS.js +0 -107
- package/dist/chunk-RV7SZAHR.js +0 -105
- package/dist/chunk-UZ7ZUSLH.js +0 -179
- package/dist/utils/useMediaMatch.d.ts +0 -12
- /package/dist/{chunk-TF2P3OPS.js → chunk-YCARLYI6.js} +0 -0
package/README.md
CHANGED
|
@@ -41,7 +41,7 @@ import { Button } from '@crewlethq/ui/Button'; // 8 KB of CSS, not 182 KB
|
|
|
41
41
|
| Area | Components |
|
|
42
42
|
| ---- | ---------- |
|
|
43
43
|
| Actions | `Button` and `ButtonLink` (variants `primary`, `secondary`, `outline`, `ghost`, `accent`, `danger`; sizes `small`, `medium`, `large`; shapes `square`, `pill`), `IconButton`, `Menu`, `Link`, `Copyable`, `CopyButton`, `DownloadButton`, `Kbd` |
|
|
44
|
-
| Content and text | `Text` (the eight registers and `inherit`), `Prose`, `Document` and `
|
|
44
|
+
| Content and text | `Text` (the eight registers and `inherit`), `Prose`, `Document`, `DocumentTitle` and `DocumentTitleField`, the Markdown grammar (`parseMarkdown`, `parseMarkdownSpans`, `markdownInline`, `safeHref` and the line readers, with no React in it), `Highlight`, `InlineCode`, `List` and `ListItem`, `DescriptionList`, `Timeline`, `RelativeTime`, `Note`, `Divider` |
|
|
45
45
|
| Forms | `Input`, `Textarea`, `Label`, `FormField`, `FormRow`, `Checkbox`, `CheckboxGroup`, `ConfirmField`, `Select`, `Tag`, `TagsInput`, `DateTimePicker`, `TimeWindowPicker`, `ImageUpload`, `CharacterPicker`, `HuePicker`, `AvatarPicker`, `FactList`, `ChoiceList`, `Composer`, `MarkdownEditor`, `RichEditor` (with `preloadRichEditor`, and the round trip `roundTripMarkdown` and `canonicalMarkdown` from `@crewlethq/ui/RichEditorMarkdown`) |
|
|
46
46
|
| Data display | `DataTable`, `CopyableCell`, `Table`, the read-only table cells (`TableKeyCell`, `TableNumberCell`, `TableDateCell`, `TableEntityCell`, `TableStatusCell`, `TableTagsCell`, `TableTextCell`), `StatCard`, `Meter`, `SegmentedMeter`, `Stepper`, `PricingCard`, `Avatar`, `AvatarStack`, `EntityChip`, `CodeBlock`, `QrCode`, `ObjectHeader`, `FactLine`, `SetByLine`, `Skeleton`, `Eyebrow`, `StatGroup`, `PinTile`, `IconTile` |
|
|
47
47
|
| List screens | `DataView`, and its parts on their own: `DataViewToolbar`, `FilterAxisBar`, `FilterAxisChip`, plus the filter model (`filterDefsFromColumns`, `applyColumnFilters`, `filterPredicate`, `blankFilterValue`) |
|
|
@@ -52,12 +52,12 @@ import { Button } from '@crewlethq/ui/Button'; // 8 KB of CSS, not 182 KB
|
|
|
52
52
|
| Hooks and seams | `useModalLayer`, `usePopupLayer`, `LayerHost`, `useListbox`, `useOptionKeys`, `useHighlightRest` and `HIGHLIGHT_REST_MS`, `useClipboard`, `useDownload`, `downloadText`, `downloadBlob`, `safeFilename`, `toCsv`, `elementToPng` and `ElementToPngError`, `useOutcome`, `useAnnouncer`, `useNow`, `formatRelative`, `HeadingLevelProvider`, `cx`, the node hues (`NODE_HUES`, `NODE_HUE_NAMES`, `isNodeHue`) |
|
|
53
53
|
| Layout | `Container`, `Section`, `Card`, `Tabs`, `Accordion`, `Disclosure`, `Outline` (with `useActiveHeading` and `scrollToHeading`), `TreeGrid` |
|
|
54
54
|
| Arranging a page | `ArrangeBoard`, `ArrangeGrid`, `ArrangeFrame` (with `useGridResize`), `ArrangeGroup`, `ArrangeList`, and the reorder hooks under them (`useReorder`, `useReorderLists`, `moveKey`) |
|
|
55
|
-
| Application shell | `AppShell` with `AppShell.Rail`, `AppShell.Topbar`, `AppShell.AccountRow` and `useAppShell`, `AuthLayout`, `SidebarNav` and `NavItem`, `BrandLockup`, `SearchTrigger`, `PageHeader`, `Toolbar`, `Stack`, `Inline`, `Spacer`, `AutoGrid`, `ErrorBoundary`, `useShortcut`, `useFullscreen` |
|
|
55
|
+
| Application shell | `AppShell` with `AppShell.Rail`, `AppShell.Topbar`, `AppShell.AccountRow` and `useAppShell`, `AuthLayout`, `SidebarNav` and `NavItem`, `BrandLockup`, `SearchTrigger`, `PageHeader`, `Toolbar`, `Stack`, `Inline`, `Spacer`, `AutoGrid`, `ErrorBoundary`, `useShortcut`, `useFullscreen`, `useIdle`, `useMediaMatch` |
|
|
56
56
|
| Preferences | `ThemeToggle`, `ThemeSwitcher`, `DensitySwitcher`, `ThemeGallery`, `ThemeSwatch`, `useThemePreference`, `useDensityPreference`, `useSystemTheme`, `resolveTheme`, `applyStoredPreferences`, and the framework-free `applyTheme`, `applyPalette`, `applyDensity` with `THEME_PREFERENCES`, `DENSITY_PREFERENCES` and their guards |
|
|
57
|
-
| Artifacts | `SandboxedFrame
|
|
57
|
+
| Artifacts | `SandboxedFrame` (with `SandboxedFramePlaceholder` and `SandboxedFrameNotice`), `LinkInterstitial` and `openExternal`, `VersionTimeline`, `ShareDialog` with the role ladder (`ARTIFACT_ROLES`, `SHAREABLE_ROLES`, `roleAtLeast`), `PrincipalPicker`, `Principal` and `PrincipalAvatar`, `ArtifactCard`, `ArtifactKindGlyph` and `ArtifactPreviewGlyph` (the preview a card draws with no cover, for a cover with nothing to draw), `ArtifactBar` and `ArtifactVersionChip` (an open artifact's one slim bar), `ArtifactPanel` and `ArtifactWorkspace` (the panels it opens beside or over the artifact), `CanvasBoard` (a design's artboards and notes on a `Canvas`, with the visibility budget `liveBoards`), `CanvasToolbar` (a canvas's tool palette, with `toolForKey`), `LayersList` (the list of a canvas's items beside it, marked by the canvas's selection), `CanvasSchematic` (a design's cover, drawn from its boards' frames), `AccessDeniedCard`, `ArtifactIcon` (with `artifactIconGlyph` and `ARTIFACT_ICON_WORDS`), the native gallery covers (`DocCover`, `SheetCover`, `DashboardCover`), `MergeConflicts`, the dashboard pieces (`WidgetFrame`, `DatasetSource` and `DatasetSourceList`), and `FrameProtocol` (the wire between a host page and an embedded artifact, with no React in it) |
|
|
58
58
|
| Sheets | `SheetGrid`, the cells on their own (`CheckboxCell`, `TextCell`, `LongTextCell`, `NumberCell`, `SelectCell`, `MultiSelectCell`, `PersonCell`, `StatusCell`, `DateCell`, `UrlCell`, `RatingCell`, and `SheetCell` for any type), `ChangeMark`, and `SheetModel` (every rule a sheet is drawn from, with no React in it: values, parsing, the keyboard model, TSV, the pending edits of D23) |
|
|
59
59
|
| Presence | `PresenceStack`, `PresenceRing` and `presenceHueClass`, `CursorFlag`, `LiveCursor`, `FollowBanner`, `PeopleRail` (with `peopleRailKey`), and `PresenceModel` (the roster order, one entry per person, the session hues from `PRESENCE_HUES`, with no React in it) |
|
|
60
|
-
| Presentations | `SlideStage` (a slide laid out at 1920 by 1080 and scaled to its box, with `SLIDE_WIDTH` and `SLIDE_HEIGHT`), `useSlideKeys` (the keys a show and a clicker send), `SlideFilmstrip`, `SlideGrid`, `SlideCompare` (with `SLIDE_COMPARE_LABELS`), `PresenterView` (with `formatStopwatch`) |
|
|
60
|
+
| Presentations | `SlideStage` (a slide laid out at 1920 by 1080 and scaled to its box, with `SLIDE_WIDTH` and `SLIDE_HEIGHT`), `useSlideKeys` (the keys a show and a clicker send), `SlideNav` (Previous, the position and Next, with `SLIDE_NAV_LABELS`), `SlideFilmstrip`, `SlideGrid`, `SlideCompare` (with `SLIDE_COMPARE_LABELS`), `PresenterView` (with `formatStopwatch`) |
|
|
61
61
|
|
|
62
62
|
Storybook stories live under `apps/storybook/src/stories`.
|
|
63
63
|
|
|
@@ -161,7 +161,7 @@ land at once.
|
|
|
161
161
|
`runPalette({ tokens, themes: themes + override })` from
|
|
162
162
|
`@crewlethq/tokens/test/palette`.
|
|
163
163
|
|
|
164
|
-
- **Component variables.** A few components expose their own `--crewlet-*` variables for values that are not tokens, for example `--crewlet-data-table-active-sort-color`, `--crewlet-data-table-row-hover-bg` and `--crewlet-data-table-
|
|
164
|
+
- **Component variables.** A few components expose their own `--crewlet-*` variables for values that are not tokens, for example `--crewlet-data-table-active-sort-color`, `--crewlet-data-table-row-hover-bg`, `--crewlet-data-table-archived-rail` and `--crewlet-data-table-row-height` (the list row token, `--size-row-md`, by default; rebind `--crewlet-data-table-cell-pad-y` with it) on the compact `DataTable`, `--crewlet-avatar-stack-ground` for the cut-out round each badge of an `AvatarStack` (the sheet, `--color-surface-background`, by default, which is where the design draws every stack; on a card or any other surface, set it to that surface), `--crewlet-spark-ground` for the ring a `Sparkline`'s current point is cut out of the ground by (the card, `--color-surface-subtle`, by default, where a sparkline stands beside its number), `--crewlet-statcard-trend-width` for the figure at the end of a `StatCard`'s value line (96px), `--crewlet-bar-list-label-width` (128px) and `--crewlet-bar-list-value-room` (`6ch` and a gap) for the words' column and the value's room in a `BarList layout="beside"`, and `--crewlet-search-trigger-width` for a `SearchTrigger variant="toolbar"` at rest (200px). Override them from a rule that targets the component's root.
|
|
165
165
|
|
|
166
166
|
The component stylesheets read only variables that `@crewlethq/tokens` emits or
|
|
167
167
|
that the components declare themselves, and the same check refuses a glyph
|
|
@@ -204,6 +204,150 @@ places:
|
|
|
204
204
|
- A surface that pans or zooms dispatches `LAYER_REPOSITION_EVENT` on its host
|
|
205
205
|
when the content beneath it moves, and every panel anchored inside follows.
|
|
206
206
|
|
|
207
|
+
## Changes in 0.34.0
|
|
208
|
+
|
|
209
|
+
**`ArtifactCard` is redesigned as a gallery card.** The `card` size draws a large preview on top with a generous corner, the kind's glyph on a badge standing over the preview's foot in the kind's ink, the title at the large step on one line, and one quiet line under it: who can open it (`access`: `private` a lock, `shared` people, `company` a building, each said in words to assistive technology through `labels.access`), the owner when the reader is not the owner, and when it was last edited. The default change word is "Edited" ("Edited 20h ago by Maya"), in both sizes. `actions` (a More menu) is drawn beside the link rather than inside it, over the preview's top corner, shown on hover, while focus is inside the card and while its menu is open, and always on a screen with no hover; a keyboard reaches it after the link. `trashed` fades the preview. Hover lifts the card's edge and shadow (not under `prefers-reduced-motion`), and focus rings the whole card. The `compact` row is unchanged but for "Edited". **`ArtifactCardSkeleton`** is the card's own shape while a gallery loads. **`ArtifactPreviewGlyph`** now draws the kind's illustration on its tinted ground (`ArtifactKindGround`) rather than a lone glyph.
|
|
210
|
+
|
|
211
|
+
**`ArtifactKindIllustration`, `ArtifactKindGround` and `ArtifactKindTile` picture each kind of artifact.** The illustration is a simple geometric drawing per kind (a page of prose with a checklist, a slide with a picture, a phone screen, a board of bars, a window of code, a grid of cells), hidden from assistive technology and drawn entirely in the kind's tokens at four fixed weights, so it holds no colour of its own. The ground sets it on the kind's fill falling into the card, as a preview's stand-in. The tile is a "Make something new" entry: the ground framed in a hairline holder, the kind's name under it, one link named by the name (and an optional `badge`, read after it); with `disabledReason` it stays a focusable stop that says why it cannot start one.
|
|
212
|
+
|
|
213
|
+
**`LivePreview`, `LivePreviewBudgetProvider` and `PreviewScale` draw real content small.** `LivePreview` lays its content out at `width` CSS pixels and scales it to its box with a transform (`PreviewScale`, which also fits a board of its own size whole with `fit="contain"`), mounts it only while the box is within `rootMargin` of the viewport, has stayed there for `dwellMs` (120ms by default, so a fling mounts nothing) and holds a slot of the shared budget (`LIVE_PREVIEW_MAX`, twelve, granted one per animation frame so a row arriving at once never costs one long task), and draws `fallback` otherwise: off screen, waiting for a slot, until the content calls `useLivePreview().ready()`, after it calls `fail()` (which gives its slot back for good) and in a browser with no IntersectionObserver. The live layer is `inert`, takes no pointer and is hidden from assistive technology; the swap is a short fade, and none under `prefers-reduced-motion`. `createLivePreviewBudget` is the bookkeeping, exported for a host that measures.
|
|
214
|
+
|
|
215
|
+
**`Select` takes `appearance="quiet"`**: no boundary or fill until the pointer is over it, for a toolbar whose pickers arrange content that is the page's point. A quiet filter that is on takes the accent's soft fill under its accent ink, and a quiet picker sizes to its answer with no floor.
|
|
216
|
+
|
|
217
|
+
**Tokens: `--color-artifact-kind-<kind>` with its `-ink`, `-fill` and `-line` steps** for `doc`, `slides`, `design`, `dashboard`, `html` and `sheet`. Each is an alias of a node hue (doc blue, slides amber, design purple, dashboard cyan, HTML rose, sheet green), so every theme, light and dark, repaints them with no value of its own.
|
|
218
|
+
|
|
219
|
+
**`SheetGrid`'s row gutter puts the number and the row's actions in one place.** The number sits centred in the fixed-width gutter, in the tertiary ink and tabular figures, so row 9 and row 1000 stand in one column. Where the host takes row actions (`onDeleteRow`), the number gives way, in the same place and with no shift, to the actions button at the small `IconButton` step, centred, with a `Tooltip` and the name "Actions for row N" (`labels.rowActions`, which read "Row actions for row N"). It shows under the pointer, on the row holding focus and while its menu is open; the button is drawn in every row with actions, clear until then, so a tap on the number opens the menu on a touch screen, where there is no hover. It sat pinned to the gutter's trailing border, half over the number ("2 ⋯"), was drawn only on the active or hovered row, and carried only the native tooltip. The tip opens above the button from its leading edge, so it never hangs past the grid's own edge or is pushed off the button at a page's edge. The row header is named by its row alone (`aria-labelledby`), not by the button inside it, and keys pressed on the button stay the menu button's rather than also moving the active cell. A selection marks its rows' numbers as it marks its cells; in forced colours the number takes the selection's ink on the page's ground.
|
|
220
|
+
|
|
221
|
+
**`Tooltip` takes `align="start"`**, which lines the panel up with the trigger's leading edge (its right edge in a right-to-left page) rather than centring it, for a control at the leading edge of what it belongs to. `center` stays the default.
|
|
222
|
+
|
|
223
|
+
**A selected frozen cell stays opaque when the sheet scrolls sideways.** The selection's translucent tint replaced the cell's ground, so the values passing under a frozen column showed through a selected cell in it. The tint is now laid over the cell's own ground, as it is in the gutter.
|
|
224
|
+
|
|
225
|
+
## Changes in 0.33.0
|
|
226
|
+
|
|
227
|
+
**`ArtifactPanel` rests every panel of text at one width, and its `sm` size is removed.** Details at `sm` and History at `md` moved the artifact's edge by 80px between two panels of text. There are two sizes now: `md`, at 22.5rem, for every panel of text (facts, a list, a form), so moving between them never moves the artifact's edge, and `lg`, at 36rem, for a table. Where there is no room for two columns, a panel that slides over the artifact takes the drawer's lift, the one the shell's rail drawer wears, so its start edge reads as a sheet over the artifact rather than a cut through it. The body publishes its padding as `--crewlet-artifact-panel-inset`, which a sticky foot offsets itself by to sit on the panel's edge, and it is a flex column, so a child that sets `min-height: 0` can fit the panel rather than scroll it. A `Section` inside it heads at the panel's register: its title reads `--crewlet-section-title-size`, which the panel's body sets to the small step, and its sentence stacks under the title (the actions kept on the title's line) when the column it sits in is narrow.
|
|
228
|
+
|
|
229
|
+
**`ArtifactBar` stands at the shell top bar's height and inset.** It is `--size-shell-topbar` tall, hairline included, where it was 49px against the top bar's 52, so the line under it no longer jumps when a reader opens an artifact from the gallery, and on a phone its first control keeps the shell's inset. Below 900px of bar, "Editing · Unsaved changes" folds to its dot, which turns the accent once anything is unsaved and stays in the status for a screen reader, before the title is cut; "Editing" still folds below 640px. The rename hint is a hidden element the title's description is read from, no longer a stray "Rename" in the reading order, and `ArtifactVersionChip` takes a control's corner (`--radius-md`), as the bar's other controls of its height do.
|
|
230
|
+
|
|
231
|
+
**`Callout` centres a one-line message on its action, and moves a narrow callout's action under its text.** The content is padded by half of what the small control is taller than a line, so one line centres on the button and a longer message keeps its icon on its first line. A callout with an action measures its own width: under 28rem the action takes a row of its own at the start of the text's column, and wider it stays beside the text.
|
|
232
|
+
|
|
233
|
+
**`ShareDialog` lists a share that reaches nobody, and gives its sections room.** A stored share whose row carries `invalid` (the reason in words) is listed rather than hidden: it reads `labels.noAccess` in place of a role, says why in the warning ink, and offers Remove as its one action. Each section carries one step more above its heading, so "Who has access" no longer reads as the add field's label.
|
|
234
|
+
|
|
235
|
+
**A `Modal` head with a subtitle keeps its controls on the title's line.** The head carries `crewlet-modal__header--subtitled`, aligns to the top, and centres the mark, the actions and the back and close controls on the title's first line. A sheet's head is a bar and keeps its centring. A `CommandPalette`'s foot has no actions, so its legend spans the foot and a consumer can end it with what the search is doing at the far edge.
|
|
236
|
+
|
|
237
|
+
**A toast's countdown fades at its leading edge.** Cut square, the draining wash read as a strip painted in two tones whenever it stood still, in a still frame or paused under the pointer; it now reads as a tint running out, in both themes.
|
|
238
|
+
|
|
239
|
+
**`AccessDeniedCard` draws as an artifact's other blocked state**: on the page, in no box, at a reading width, with the default empty state's 24px glyph, as a trashed artifact does. It was a bordered card with a 32px glyph.
|
|
240
|
+
|
|
241
|
+
**`ArtifactCard` reads its facts as one run, and its change time first.** A line's facts are one run, each after the first opened by a quiet dot ("Sheet · OPS · v12"), and the change reads time first and changer after (`labels.by`, "Updated 4m ago by Maya"); leave `owner` out where the reader owns it, and `updatedBy` where it is the owner already named, whose change then reads "Updated 4m ago" beside their name. The title, cut to one line, is offered whole on hover, and a compact card is a row in every bundle, where `Card`'s column layout used to win. The `html` kind's default label is "HTML", not "Page", which is Knowledge's word; the kind id is unchanged.
|
|
242
|
+
|
|
243
|
+
**`DashboardCover` draws its figures as rows**, so each label has the card's width; three side by side cut every label to its first word. **`ArtifactPreviewGlyph`** is the preview a card draws with no cover, for a host whose cover has nothing to draw yet or at all: a cover element that rendered nothing left an empty box, since the card cannot tell it from a picture.
|
|
244
|
+
|
|
245
|
+
**`AppShell` and `Container` keep the top bar's 16px gutter on a phone.** Under the shell step the content's side padding dropped to 12px, and `Container`'s did under 480px, so a page's first line stood 4px left of the title and the controls over it. Both are 16px now, the shell's phone gutter and the top bar's own inset.
|
|
246
|
+
|
|
247
|
+
**`DocumentTitleField` is new: the field a new page's title is written in**, set as `DocumentTitle` sets the title once the page exists: no box, the title's own type, and a line at its foot that answers the pointer, focus (in the ring's colour) and a refusal (`aria-invalid`). Its name is the caller's.
|
|
248
|
+
|
|
249
|
+
**A `Document`'s heading levels each take their own step, and quotes keep the body's rhythm.** A body is drawn from h2 down, so a page's fourth and fifth levels land on h5 and h6, which were both set at h4's 16px; h5 now takes the body's step and h6 the same step in the secondary ink. A quote and a callout body keep the body's gap between paragraphs, and a list item (task items included) the smaller step, so its paragraphs still read as one item.
|
|
250
|
+
|
|
251
|
+
**`DocTabsEditor` is a list with row menus and rename in place.** A tab is a row in the outline's register: its title opens it, the open row is filled, and the handle and an actions menu (Rename, Move up, Move down, Remove) show under the pointer, on focus and on the open row. Rename (or a double press) turns the title into its field in place, where Enter or leaving keeps it and Escape puts the old title back. Add, at the list's heading, opens a field under the open tab and reports the title on Enter, so a new tab is never named after a placeholder. Titles wrap rather than being cut. Six tabs used to read as thirty controls around truncated title fields.
|
|
252
|
+
|
|
253
|
+
**A link's label can hold a picture.** The Markdown grammar reads a whole picture before the label's own brackets, so a badge that links somewhere (`[](ci)`) draws the picture inside the link, where it was a link labelled ``, and `RichEditor` writes it back as written.
|
|
254
|
+
|
|
255
|
+
**A presentation's pieces are finished for the page, full screen and a phone.**
|
|
256
|
+
|
|
257
|
+
- **`SlideStage` takes `framed`**, the slide's own hairline edge on a small radius, so a slide whose ground is the page's colour still reads as a slide. Grid cards, the comparison's sides and the presenter's slides use it. In full screen a `contain` or `view` stage letterboxes on `--color-projection-letterbox`, black in every theme.
|
|
258
|
+
- **`SlideNav` is new**: Previous, the position and Next at the small control step, off at the ends with the reason on the control, and a slot for the show's own controls after a rule. `tone="projection"` floats it over a slide shown full screen, in the projection's fixed colours (`--color-projection-ground`, `-ink`, `-hover`, `-rule`, new in `@crewlethq/tokens`).
|
|
259
|
+
- **`useIdle(ref, enabled)` is new**: whether the pointer has rested over an element, for a full screen show to put its controls and cursor away. A move, a press or focus wakes it; a key (a clicker) does not.
|
|
260
|
+
- **`PresenterView` shows the room's slide whole on a phone**, where it used to collapse to nothing, and as large as fits beside the side column elsewhere, drawn as the slide rather than letterboxed in a well. Its controls are `SlideNav`; the room's slide, the next one and the notes carry visible captions; the end of the deck holds the next slide's shape so nothing moves on the last slide.
|
|
261
|
+
- **`SlideFilmstrip` keeps the slide on the stage in view**, scrolling only itself, and takes `orientation="horizontal"` for a row under the stage on a phone (Left and Right step it). Its reorder handle takes a control's corner (`--radius-md`). The strip is its own scroller now: a host bounds its height and no longer sets `overflow`.
|
|
262
|
+
- **`SlideGrid` lays a phone out two to a row.**
|
|
263
|
+
- **`SlideCompare` names its columns** by version over the first row (over each side once they stack), and the side a version lacks reads "Not in this version". Two identical versions draw no empty list.
|
|
264
|
+
|
|
265
|
+
**Every chart says when it has nothing to draw.** `TimeSeries`, `StackedColumns`, `StackedBar` and `ActivityStrip` take `emptyLabel`, as `BarList` did, and draw that one sentence in the chart's place (`.crewlet-chart-empty`) rather than an empty grid, a scale of 0 to 4, a bare track or a window starting at the epoch. The sentence stands in the middle of the plot, at the plot's height. `ChartEmpty` is exported for a host drawing a figure's empty state itself; it takes `height` and `align` (`start` for a list, which `BarList` uses).
|
|
266
|
+
|
|
267
|
+
**`BarList` draws every bar in the first data hue.** A ranked list is one series; a hue per rank gave five rows five identities and painted the tail as the residual. A row's `color` still overrides it.
|
|
268
|
+
|
|
269
|
+
**`TimeSeries` draws below zero, a single point, and its own legend.** The scale runs from zero to the peak, and below zero when a value is, with the baseline on zero, an area filled to it, and "low" beside "peak" under the plot. A series of one point draws its point, a window of one instant draws it at the middle, and the reading draws every series' point on the crosshair. Two series or more are lines with no wash; every series is keyed by a legend of line keys the chart draws itself (`legend`, `below` by default, or `none` for a card whose title names its one series). The grid is a solid hairline. Under 18rem the range leaves the line to the window's ends.
|
|
270
|
+
|
|
271
|
+
**`StackedColumns` stands on zero.** A negative part hangs from the zero line, zero is always one of the scale's lines, and the tooltip reads values with their sign. `formatScale` writes the scale's words apart from the tooltip's. The scale's words are the sans at the caption step, as the dates are; a column is at most 24px wide; the middle date leaves a chart narrower than 22rem.
|
|
272
|
+
|
|
273
|
+
**`ActivityStrip` takes `reading`,** which makes the strip one tab stop whose cells read their time and value by pointer or by ←/→. A cell is at most 24px wide, so a strip of one day is one mark.
|
|
274
|
+
|
|
275
|
+
**`Legend` items take `shape: 'line'`** for a series drawn as a line. A chart's tooltip ends a long series name in an ellipsis before its value, which is never cut; the name used to run under the number.
|
|
276
|
+
|
|
277
|
+
**`StatCard` takes `hideLabel` and `trendPlacement`, and moves a figure before it cuts the number.** `hideLabel`, as `Meter` does, is for a tile its container names. In a tile too narrow for both, the trend figure moves under the number rather than the number being cut, and a `unit` too long to share the number's line moves under it whole; only a number too long for the tile alone ends in an ellipsis. `trendPlacement="below"` stands the figure under the number at the tile's width instead, for a quota whose bar is the reading, so a row of them keeps one shape at every width. In a `WidgetFrame` a tile reserves no empty second line, and in a frame narrower than 11rem its number steps down to `--font-size-xl` rather than being cut.
|
|
278
|
+
|
|
279
|
+
**`WidgetFrame` takes `holdTitle`, and a flush frame insets only its table's outer cells.** `holdTitle` keeps the title's two lines so the numbers of a row of frames start on one line. A narrow frame's stacked citation takes a second line before it ends, and the source's whole title is its tooltip. In a flush frame the first and last columns of a table stand on the frame's 16px; between columns a cell keeps the compact table's own inset.
|
|
280
|
+
|
|
281
|
+
**`ArrangeGroup` takes `variant="section"`**: a quiet header on the page's ground (the name at a card title's step, its count, the chevron) over a hairline in the hue, and the blocks on the page's grid with no inset, for a page being read rather than arranged. `band`, the default, is unchanged.
|
|
282
|
+
|
|
283
|
+
**`Note` spaces its paragraphs** a step apart, whatever the host's base sheet resets.
|
|
284
|
+
|
|
285
|
+
**`SheetGrid` sizes a column to its header and values.** A column that declares no width is as wide as the widest of its header and a few of its values (every live choice for a choice column, the longest values otherwise), drawn by the real header and cells in a hidden, inert row and measured, within bounds its type sets; `fitSamples`, `fittedWidth`, `SHEET_FIT_SAMPLES` and `SHEET_COLUMN_BOUNDS` in `SheetModel` are that rule. Samples are taken when the columns change and when the first rows arrive, never on an edit, and measured again once the face loads. The frozen columns hold at most 60% of the visible width, so a long title column never fills a phone. On the compact step, values are 13px under 12px sentence-case headers.
|
|
286
|
+
|
|
287
|
+
**A `fit="content"` `SheetGrid` gives way in a bounded column.** Its scroller shrinks to the room its column leaves, down to the page's `--crewlet-sheet-min-height` and never below its own rows' height, which it publishes as `--crewlet-sheet-content-height`, so a page no longer subtracts a guess of everything above and below it to compute a `max-height`.
|
|
288
|
+
|
|
289
|
+
**`SheetGrid`'s headers sit on their column's edge, and a sheet that has just opened is quiet.** Number and rating names end where their values end (the sort mark on the inner side), checkbox names centre, and each header carries its whole name as its title. The active cell's history control is a 24px target at the control radius with room of its own, so a value ends in an ellipsis before it, and it sits on the leading edge of a number or rating, so neither moves when its cell turns active. That control, the active row's actions and a single selected cell's tint show while the reader is in the grid (or hovering), not on every sheet as it opens; a range of cells stays tinted. Once scrolled sideways, the frozen edge ends on the strong hairline.
|
|
290
|
+
|
|
291
|
+
**A compact `DataTable` takes `--crewlet-data-table-row-height`**, its row's height (`--size-row-md` by default; rebind `--crewlet-data-table-cell-pad-y` with it), so a host whose list keeps another rhythm sets it rather than reaching past the table into its cells.
|
|
292
|
+
|
|
293
|
+
**Pill `Tabs` stand at the 28px tab step.** Tabs sit between the 26px controls of a toolbar or panel and the 32px actions of a page, so a row of them reads as navigation rather than as one more button: the well's inset is 1px round a 24px chip (the row was 30px), and the chip takes `--radius-chip`.
|
|
294
|
+
|
|
295
|
+
**A router-mode `Tabs` row carries its own overflow.** `trailing` is drawn inside the `nav` after the last link, so the menu a row of sections folds into ("More") or a note about every section is part of the navigation landmark; a tab list holds tabs alone and ignores it. `ref` hands over the row's root, for a consumer that measures which links fit. A tab's `count` takes a formatted string ("1.2k") as well as a number, drawn as given, and an empty string draws no count.
|
|
296
|
+
|
|
297
|
+
**The compact `Checkbox` centres its line in a form row.** One line is exactly the row's height, on the line the small inputs and selects beside it hold, and a longer label grows downwards with the box still on its first line.
|
|
298
|
+
|
|
299
|
+
**`LayersList` is new: a canvas's list of items beside it, as a design tool's layers are.** The caller holds the selection and hands it to the list and the canvas both; the picked entry takes the accent edge every current row takes, held on every entry so nothing moves when the pick does. It is one tab stop, walked with the arrows, Home and End without picking; Space or a click picks (`onSelect`) and Enter or a double-click opens (`onOpen`), which an entry's name then says. Names are cut to one line with the whole name as the tip, the entries hang into the gutter so their letters stand on the list's edge, and the list scrolls on its own under an optional `heading` (its count) that stays. The engine dashboard's design view drew this list itself; it now uses this one.
|
|
300
|
+
|
|
301
|
+
**A caller can hold a board canvas's selection.** `selected` and `onSelectedChange` (with `CanvasBoardSelection`) let a list of boards beside the canvas mark the board picked on it, and pick one there.
|
|
302
|
+
|
|
303
|
+
**A design's canvas lays its grid on the boards' plane.** `Canvas` takes `ground="grid"`: the dotted ground's dots, panned with the content and pitched by the zoom (doubling or halving to stay between one and two spacing steps on screen), as a design tool's grid is. `gridOf(view)` is that rule on its own. `CanvasBoard` draws on it; `dotted` is unchanged and still stays put under a chart.
|
|
304
|
+
|
|
305
|
+
**A board says only what it has room for.** A board drawn narrower than `BOARD_TITLE_MIN_WIDTH` (40px) goes unnamed until it is zoomed into, and a placeholder drops its lines in turn (why it is not running, then its size) rather than clipping them at both ends over the boards beside it; `boardRoom(width, height)` is that rule. A placeholder no longer repeats the board's name, which the title above it already says. A board's title row is one line of type tall, so a row of boards zoomed out loses less to the names above it, and a hidden open control leaves the row, so a narrow board's name has the width it held.
|
|
306
|
+
|
|
307
|
+
**More boards run as thumbnails.** `CANVAS_BOARD_MIN_LIVE_WIDTH` is 96px (was 160), so a design fitted on a phone or zoomed out over a dozen boards draws its pages rather than a grey box each; `CANVAS_BOARD_MAX_LIVE` still caps how many run.
|
|
308
|
+
|
|
309
|
+
**The chrome is drawn over the content.** A board's name and open control, a note's tools and the resize corners sit above every board and note. Far out, a note laid out after a board covered the board's name and took its presses.
|
|
310
|
+
|
|
311
|
+
**The open control and a note's tools are the item's.** Where a pointer can hover they show on the board or note under it, the selected one and the one holding focus; a touch screen always shows them.
|
|
312
|
+
|
|
313
|
+
**A board name that is a move handle keeps the name's type and place.** In edit mode the title was set at the page's size (the handle's `font: inherit` won) and moved off the board's edge by the handle's padding. The handle takes the control radius.
|
|
314
|
+
|
|
315
|
+
**The palette is the zoom bar's height, and moves on a narrow canvas.** `CanvasToolbar`'s tools are the small control step (26px), the toolbar and panel step every canvas control takes, with the zoom bar's shadow, where they were 30px and stood taller than the zoom bar beside them. On a canvas narrower than 36rem the palette sits in the top left corner instead of over the zoom bar.
|
|
316
|
+
|
|
317
|
+
**A canvas's hint no longer moves its zoom bar.** In a bottom corner the status note ("Double-click to use this board") is drawn above the bar, so the bar stays under a pointer on its way to it.
|
|
318
|
+
|
|
319
|
+
**`SandboxedFramePlaceholder` and `SandboxedFrameNotice` are new: the frame's own states for a host with no frame to mount yet.** The placeholder draws while the frame's ticket is minted and the notice when the engine refused one, in the same box the frame takes, so the reader meets one loading state and one way of saying a page is not here; a host that drew its own placeholder showed a second, differently shaped one that jumped when the frame took over. The frame's loading and end states share one inset (the skeleton no longer opens with an empty band or runs past the frame's bottom edge), an end state's action sits under its message, and its title drops its closing full stop, as every other callout title does. `Skeleton`'s `borderRadius` takes any CSS length, such as a radius token.
|
|
320
|
+
|
|
321
|
+
**`SandboxedFrame` says a page that loaded without a hello failed within a beat.** The runtime says hello as the page's first script runs, long before the load event, so a load with no hello ends the frame `FRAME_LOAD_GRACE_MS` (1.5s) after it; a document that never loads keeps `FRAME_HELLO_TIMEOUT_MS`. An expired ticket, a missing page and a starting node, which the artifact origin answers with an empty refusal, used to hold the placeholder for the full ten seconds. When a page hands focus back, the frame's region draws its ring inside its edge, on a layer above the frame, so a frame filling a clipping card keeps it, and forced colours mode keeps it too.
|
|
322
|
+
|
|
323
|
+
**`@crewlethq/artifact-kit` draws a sheet once the runtime's handshake is done.** `whenRuntime` and `mountSheet` wait for `crewlet.ready`, so a sheet no longer reads a page that declared `db` as one that did not; on a phone every sheet of a page lost that race. A url cell's link opens through the runtime's new `openLink`, since a frame cannot open a window, a sheet the reader cannot edit draws no sync strip, and the refusals name the collection in quotes rather than telling a reader about a capability. The presence row keeps its hue ring clear of the sheet's edge by the reach `PresenceStack` now publishes (`--crewlet-presence-stack-reach`), so a page's clipping card no longer cuts it.
|
|
324
|
+
|
|
325
|
+
**A page's sheet shows who is in that sheet, not the whole room.** The dashboard's artifact bar draws the room once; a `<crewlet-sheet>` drew the room's stack again over every sheet of a page. It now rings the cells people are on and stacks only the members whose focus is in its collection (`membersIn`), named "1 other person is in this sheet" or "N other people are in this sheet", and draws no stack when nobody else is in it. Pages pinned to an older kit keep the stack they were published with.
|
|
326
|
+
|
|
327
|
+
**`@crewlethq/artifact-kit` ships `content.css`, an opt-in stylesheet for the plain HTML an artifact page writes itself.** Linked after `kit.css` (`/_crewlet/kit/<version>/content.css`), it gives headings, running text, lists, quotes, code, tables, rules, figures, disclosures and every form control Document's prose and the medium Button, Input, Textarea and Select, from the tokens, so it follows the reader's theme. Every rule weighs only its element, so a page's own class wins; nothing the kit draws (a `<crewlet-sheet>`, any `crewlet-` class) and nothing under `data-crewlet-content="off"` is touched; and a page that does not link it, every published page included, is unchanged. Storybook: Artifact kit, Content stylesheet.
|
|
328
|
+
|
|
329
|
+
**`useMediaMatch(query)` is exported**: whether a media query matches, read during render (`useSyncExternalStore`) so the first render already has the answer, and again on every change; `false` where there is no `matchMedia`. It is the package's own copy, the one the shell and the switcher read, so an application's "is this a phone" can no longer disagree with the kit's. Keep it for the decision a stylesheet cannot make (which element to draw); a width a media query in CSS can decide belongs there.
|
|
330
|
+
|
|
331
|
+
**An end-aligned `Popover`, `Menu` or `Select` opens near the left edge.** Each asked whether its anchor had left the layer using the aligned panel's start instead of the anchor, so a panel wider than its trigger's right edge (a toolbar's last control wrapped to the left of a phone) closed on the frame it opened. They now ask of the anchor itself (`anchorGone`, from the layer's placement helpers, which `Tooltip` uses too), and the placement clamps the panel inside the window.
|
|
332
|
+
|
|
333
|
+
**`getInitials` reads past punctuation and colons.** A colon splits a handle as the other separators do (`ci:release` gives CR, where it gave one initial for two words), and the punctuation around a word is not taken for its first letter ("review (API token)" gives RA, where it gave R().
|
|
334
|
+
|
|
335
|
+
What to change:
|
|
336
|
+
|
|
337
|
+
- `ArtifactPanel` no longer takes `size="sm"`: pass `md`, the one width for a panel of text. This is the release's breaking change.
|
|
338
|
+
- A page that bounded a `fit="content"` `SheetGrid` with a computed `max-height` drops it, and sets `--crewlet-sheet-min-height` for the least the grid may give way to.
|
|
339
|
+
- `DocTabsEditorLabels` takes `heading`, `actions(title)` and `rename`, and `moveUp`, `moveDown` and `remove` are strings now, not functions of the title; `editText`, `lastTab`, `atTop`, `atBottom` and `addNeedsTitle` are gone.
|
|
340
|
+
- `SlideCompareLabels.missing` is a string now, not a function of the version.
|
|
341
|
+
- A host that drew a show's Previous, count and Next itself uses `SlideNav`.
|
|
342
|
+
- A host that set `overflow` on the box round a `SlideFilmstrip` bounds its height instead and drops the `overflow`.
|
|
343
|
+
- A `TimeSeries` caller that drew its own `Legend` beside it passes `legend="none"` or drops its own.
|
|
344
|
+
- A host that reached into a compact `DataTable`'s cells for its row height sets `--crewlet-data-table-row-height` instead.
|
|
345
|
+
- A host that drew its own placeholder before a frame was minted, or its own refusal in the frame's place, uses `SandboxedFramePlaceholder` and `SandboxedFrameNotice`.
|
|
346
|
+
- A host that top-aligned a subtitled `Modal` head's controls, or spanned a `CommandPalette` legend across its foot, drops its override.
|
|
347
|
+
- A host that drew a list of a canvas's items beside it uses `LayersList`, holding the selection with `CanvasBoard`'s `selected` and `onSelectedChange`.
|
|
348
|
+
- An application that start-aligned its panels on a phone to dodge the close above can align them as it wants again.
|
|
349
|
+
- An application with its own media query hook can use `useMediaMatch` instead.
|
|
350
|
+
|
|
207
351
|
## Changes in 0.32.0
|
|
208
352
|
|
|
209
353
|
**A canvas title fits its box.** `CanvasBoard` sets a title note in a size fitted to its box both ways (three fifths of its height, smaller when its text would run past its width; `titleSize` is that rule on its own), and the text clips at the box where an unusually wide face still overruns it. A long heading used to run past its box over the boards beside it, at every zoom.
|
|
@@ -35,5 +35,10 @@ export interface AccessDeniedCardProps {
|
|
|
35
35
|
* IT SAYS WHAT THE READER CAN DO, never what the artifact is. A title, a
|
|
36
36
|
* kind or an owner the engine has not shown this reader stays unsaid, so the
|
|
37
37
|
* card is safe to draw from nothing but the engine's refusal.
|
|
38
|
+
*
|
|
39
|
+
* DRAWN AS AN ARTIFACT'S OTHER BLOCKED STATE IS: the default empty state with
|
|
40
|
+
* the 24px glyph, on the page and in no box. A bordered card with a larger
|
|
41
|
+
* glyph made a refused link look like a different product from a trashed
|
|
42
|
+
* artifact, which says the same kind of thing.
|
|
38
43
|
*/
|
|
39
44
|
export declare function AccessDeniedCard({ reason, owner, action, headingLevel, className, labels }: AccessDeniedCardProps): import("react").JSX.Element;
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
export { ACCESS_DENIED_REASONS, AccessDeniedCard } from '../chunk-
|
|
1
|
+
export { ACCESS_DENIED_REASONS, AccessDeniedCard } from '../chunk-KV3ODJXH.js';
|
|
2
2
|
import '../chunk-RA2ULG6H.js';
|
|
3
|
-
import '../chunk-ACA27MZH.js';
|
|
4
|
-
import '../chunk-AV2DXAEL.js';
|
|
5
|
-
import '../chunk-BHHIIK3M.js';
|
|
6
3
|
import '../chunk-PQADV6P6.js';
|
|
7
|
-
import '../chunk-BZFWDIV6.js';
|
|
8
4
|
import '../chunk-ODEQTPFM.js';
|
package/dist/AppShell/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellToggle, AppShellTopbar, useAppShell } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
1
|
+
export { AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellToggle, AppShellTopbar, useAppShell } from '../chunk-T46NR3WP.js';
|
|
2
|
+
import '../chunk-RTPQDNW3.js';
|
|
3
|
+
import '../chunk-3EB2AV3H.js';
|
|
4
|
+
import '../chunk-OMV5W53A.js';
|
|
5
5
|
import '../chunk-R25RGPUB.js';
|
|
6
6
|
import '../chunk-OG6CL3EB.js';
|
|
7
7
|
import '../chunk-4FQT6ZAY.js';
|
|
@@ -610,8 +610,10 @@
|
|
|
610
610
|
display: inline-flex;
|
|
611
611
|
}
|
|
612
612
|
|
|
613
|
+
/* THE TOP BAR'S GUTTER, 16px: the content's 12px stood every page's first
|
|
614
|
+
line 4px left of the title and the controls over it. */
|
|
613
615
|
.crewlet-app-shell__content {
|
|
614
|
-
padding: var(--spacing-4) var(--spacing-
|
|
616
|
+
padding: var(--spacing-4) var(--spacing-4) var(--spacing-9);
|
|
615
617
|
}
|
|
616
618
|
}
|
|
617
619
|
|
|
@@ -2,10 +2,25 @@ import { type HTMLAttributes, type ReactNode } from 'react';
|
|
|
2
2
|
import type { NodeHue } from '../utils/nodeHue.js';
|
|
3
3
|
/** A surface's colour: one of the six hues, or none. */
|
|
4
4
|
export type SurfaceTone = NodeHue | 'none';
|
|
5
|
+
/**
|
|
6
|
+
* How a group is drawn.
|
|
7
|
+
*
|
|
8
|
+
* `band`, the default, is a bordered box whose header is a band in the tone,
|
|
9
|
+
* for a page being arranged, where each group is an object to move.
|
|
10
|
+
*
|
|
11
|
+
* `section` is a quiet section of a page being read: the name, its count and
|
|
12
|
+
* the chevron on the page's ground over a hairline (in the tone, where there
|
|
13
|
+
* is one), and the blocks on the page's own grid with no inset, so a block in
|
|
14
|
+
* the section lines up with the blocks outside it. A filled band among cards
|
|
15
|
+
* outweighed every card on the page.
|
|
16
|
+
*/
|
|
17
|
+
export type ArrangeGroupVariant = 'band' | 'section';
|
|
5
18
|
export interface ArrangeGroupProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
|
|
6
19
|
/** What the group holds, in the reader's words: "Delivery". */
|
|
7
20
|
title: string;
|
|
8
21
|
tone?: SurfaceTone | undefined;
|
|
22
|
+
/** How the group is drawn: see the type. Defaults to `band`. */
|
|
23
|
+
variant?: ArrangeGroupVariant | undefined;
|
|
9
24
|
collapsed: boolean;
|
|
10
25
|
onCollapsedChange: (collapsed: boolean) => void;
|
|
11
26
|
/** How many blocks it holds, beside the title. */
|
|
@@ -39,4 +54,4 @@ export interface ArrangeGroupProps extends Omit<HTMLAttributes<HTMLElement>, 'ti
|
|
|
39
54
|
* THE TONE IS A BAND, never the whole surface: the header carries the hue and
|
|
40
55
|
* the body stays the page's, so the cards inside keep their own contrast.
|
|
41
56
|
*/
|
|
42
|
-
export declare function ArrangeGroup({ title, tone, collapsed, onCollapsedChange, count, onTitleChange, bodyProps, empty, columns, actions, className, children, ...rest }: ArrangeGroupProps): import("react").JSX.Element;
|
|
57
|
+
export declare function ArrangeGroup({ title, tone, variant, collapsed, onCollapsedChange, count, onTitleChange, bodyProps, empty, columns, actions, className, children, ...rest }: ArrangeGroupProps): import("react").JSX.Element;
|
|
@@ -156,6 +156,49 @@
|
|
|
156
156
|
pointer-events: none;
|
|
157
157
|
}
|
|
158
158
|
|
|
159
|
+
/*
|
|
160
|
+
* THE SECTION VARIANT: a quiet header on the page's ground, over a hairline
|
|
161
|
+
* in the group's hue (the default border with none), and the blocks
|
|
162
|
+
* on the page's grid with no inset of their own. The name is a card title's
|
|
163
|
+
* step and ink, the chevron the quiet ink, and the count its chip.
|
|
164
|
+
*/
|
|
165
|
+
.crewlet-arrange-group--section {
|
|
166
|
+
border: 0;
|
|
167
|
+
border-radius: 0;
|
|
168
|
+
background: none;
|
|
169
|
+
overflow: visible;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.crewlet-arrange-group--section .crewlet-arrange-group__head {
|
|
173
|
+
min-height: 0;
|
|
174
|
+
padding: 0 0 var(--spacing-2);
|
|
175
|
+
border-bottom: 1px solid var(--crewlet-arrange-group-line);
|
|
176
|
+
background: none;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
.crewlet-arrange-group--section.is-collapsed .crewlet-arrange-group__head {
|
|
180
|
+
border-bottom-color: var(--crewlet-arrange-group-line);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/* The chevron stands on the page's edge, its hover reaching past it. */
|
|
184
|
+
.crewlet-arrange-group--section .crewlet-arrange-group__toggle {
|
|
185
|
+
min-height: var(--size-control-sm);
|
|
186
|
+
margin-inline-start: calc(var(--spacing-1) * -1);
|
|
187
|
+
padding: 0 var(--spacing-1);
|
|
188
|
+
color: var(--color-text-tertiary);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
.crewlet-arrange-group--section .crewlet-arrange-group__title {
|
|
192
|
+
font-size: var(--font-size-sm);
|
|
193
|
+
letter-spacing: var(--font-letter-spacing-normal);
|
|
194
|
+
color: var(--color-text-primary);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.crewlet-arrange-group--section .crewlet-arrange-group__body {
|
|
198
|
+
min-height: 0;
|
|
199
|
+
padding: var(--spacing-3) 0 0;
|
|
200
|
+
}
|
|
201
|
+
|
|
159
202
|
@media (prefers-reduced-motion: reduce) {
|
|
160
203
|
.crewlet-arrange-group__chevron,
|
|
161
204
|
.crewlet-arrange-group__title-field {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { ArrangeList, DEFAULT_ARRANGE_LABELS } from '../chunk-
|
|
1
|
+
export { ArrangeList, DEFAULT_ARRANGE_LABELS } from '../chunk-V43UVX4H.js';
|
|
2
2
|
import '../chunk-A722MUNR.js';
|
|
3
3
|
import '../chunk-XJ2QEBMM.js';
|
|
4
|
-
import '../chunk-
|
|
4
|
+
import '../chunk-CPEPST4S.js';
|
|
5
5
|
import '../chunk-6QFAK2WV.js';
|
|
6
6
|
import '../chunk-PQADV6P6.js';
|
|
7
7
|
import '../chunk-RSAQOKH3.js';
|
|
@@ -1,23 +1,25 @@
|
|
|
1
|
-
export { ARTIFACT_BAR_LABELS, ArtifactBar, ArtifactVersionChip } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { ARTIFACT_BAR_LABELS, ArtifactBar, ArtifactVersionChip } from '../chunk-IUD5VA2Z.js';
|
|
2
|
+
import '../chunk-WKEPORNM.js';
|
|
3
3
|
import '../chunk-SMBKXWML.js';
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
6
|
-
import '../chunk-
|
|
4
|
+
import '../chunk-6ZJ3N7QI.js';
|
|
5
|
+
import '../chunk-CCAXYHQS.js';
|
|
6
|
+
import '../chunk-VL6CUNSX.js';
|
|
7
7
|
import '../chunk-RKKO7QHH.js';
|
|
8
|
-
import '../chunk-
|
|
9
|
-
import '../chunk-
|
|
10
|
-
import '../chunk-
|
|
8
|
+
import '../chunk-PLDUNXAO.js';
|
|
9
|
+
import '../chunk-XTOVADJU.js';
|
|
10
|
+
import '../chunk-TEUQWOWZ.js';
|
|
11
|
+
import '../chunk-CI3VPIJN.js';
|
|
11
12
|
import '../chunk-3CZ7XAVY.js';
|
|
12
13
|
import '../chunk-EUCC37WY.js';
|
|
13
|
-
import '../chunk-UAN5NE7M.js';
|
|
14
|
-
import '../chunk-5OM447RW.js';
|
|
15
14
|
import '../chunk-ACA27MZH.js';
|
|
16
15
|
import '../chunk-AV2DXAEL.js';
|
|
16
|
+
import '../chunk-5AQBPHZD.js';
|
|
17
|
+
import '../chunk-PZKHBB7D.js';
|
|
18
|
+
import '../chunk-UDQW6UK7.js';
|
|
17
19
|
import '../chunk-BHHIIK3M.js';
|
|
18
20
|
import '../chunk-PQADV6P6.js';
|
|
19
|
-
import '../chunk-
|
|
20
|
-
import '../chunk-
|
|
21
|
+
import '../chunk-3EB2AV3H.js';
|
|
22
|
+
import '../chunk-OMV5W53A.js';
|
|
21
23
|
import '../chunk-R25RGPUB.js';
|
|
22
24
|
import '../chunk-OG6CL3EB.js';
|
|
23
25
|
import '../chunk-4FQT6ZAY.js';
|
|
@@ -25,7 +25,10 @@
|
|
|
25
25
|
display: flex;
|
|
26
26
|
align-items: center;
|
|
27
27
|
gap: var(--spacing-3);
|
|
28
|
-
|
|
28
|
+
/* THE SHELL'S TOP BAR'S HEIGHT, its hairline included: the bar stands in
|
|
29
|
+
its place, and at a row's height of its own the line under it jumped by
|
|
30
|
+
three pixels between the gallery and the artifact opened from it. */
|
|
31
|
+
height: calc(var(--size-shell-topbar) - 1px);
|
|
29
32
|
padding: 0 var(--spacing-3);
|
|
30
33
|
min-width: 0;
|
|
31
34
|
}
|
|
@@ -289,9 +292,10 @@
|
|
|
289
292
|
}
|
|
290
293
|
|
|
291
294
|
@container crewlet-artifact-bar (width < 640px) {
|
|
295
|
+
/* THE ROW KEEPS THE SHELL'S PHONE INSET, so the first glyph stands over
|
|
296
|
+
the page's own gutter rather than eight pixels from the edge. */
|
|
292
297
|
.crewlet-artifact-bar__row {
|
|
293
298
|
gap: var(--spacing-1);
|
|
294
|
-
padding: 0 var(--spacing-2);
|
|
295
299
|
}
|
|
296
300
|
|
|
297
301
|
/* The title has the row's room before the kind's glyph does: the glyph
|
|
@@ -325,7 +329,8 @@
|
|
|
325
329
|
height: var(--size-target-min);
|
|
326
330
|
padding: 0 var(--spacing-2);
|
|
327
331
|
border: 0;
|
|
328
|
-
|
|
332
|
+
/* A CONTROL'S CORNER, the one every bar control of its height takes. */
|
|
333
|
+
border-radius: var(--radius-md);
|
|
329
334
|
background: var(--color-surface-subtle);
|
|
330
335
|
color: var(--color-text-secondary);
|
|
331
336
|
font-family: var(--font-family-sans);
|
|
@@ -12,6 +12,23 @@ export declare function ArtifactKindGlyph({ kind, size }: {
|
|
|
12
12
|
kind: ArtifactKind;
|
|
13
13
|
size?: GlyphSize | undefined;
|
|
14
14
|
}): import("react").JSX.Element;
|
|
15
|
+
/**
|
|
16
|
+
* What a card's preview draws when there is no cover: the kind's drawing on
|
|
17
|
+
* its tinted ground (`ArtifactKindGround`). Exported for a host whose cover
|
|
18
|
+
* has nothing to draw YET (its content still loading) or at all (a sheet with
|
|
19
|
+
* no columns): a cover that rendered nothing left an empty box where every
|
|
20
|
+
* other card has a picture, since the card cannot know that a cover it was
|
|
21
|
+
* given drew nothing.
|
|
22
|
+
*/
|
|
23
|
+
export declare function ArtifactPreviewGlyph({ kind }: {
|
|
24
|
+
kind: ArtifactKind;
|
|
25
|
+
}): import("react").JSX.Element;
|
|
26
|
+
/**
|
|
27
|
+
* Who can open an artifact, as its card says it: only its owner (and those
|
|
28
|
+
* they shared it with by name, which the owner alone sees), people it is
|
|
29
|
+
* shared with, or the whole company.
|
|
30
|
+
*/
|
|
31
|
+
export type ArtifactAccess = 'private' | 'shared' | 'company';
|
|
15
32
|
export type ArtifactCardSize = 'card' | 'compact';
|
|
16
33
|
export interface ArtifactCardLabels {
|
|
17
34
|
kinds: Record<ArtifactKind, string>;
|
|
@@ -19,7 +36,12 @@ export interface ArtifactCardLabels {
|
|
|
19
36
|
version: (version: number) => string;
|
|
20
37
|
changes: (count: number) => string;
|
|
21
38
|
present: (count: number) => string;
|
|
39
|
+
/** The change's time, opening the line: "Edited" before "4m ago". */
|
|
22
40
|
updated: string;
|
|
41
|
+
/** Who can open it, said to assistive technology beside its glyph. */
|
|
42
|
+
access: Record<ArtifactAccess, string>;
|
|
43
|
+
/** Who made it, after the time: "by Maya". */
|
|
44
|
+
by: (name: string) => string;
|
|
23
45
|
}
|
|
24
46
|
export interface ArtifactCardProps {
|
|
25
47
|
title: string;
|
|
@@ -31,9 +53,14 @@ export interface ArtifactCardProps {
|
|
|
31
53
|
* Never a screenshot. The kind's glyph stands in when there is none.
|
|
32
54
|
*/
|
|
33
55
|
preview?: ReactNode;
|
|
56
|
+
/** Who owns it. Leave it out where the reader is the owner and saying so would only repeat it. */
|
|
34
57
|
owner?: Principal | undefined;
|
|
35
58
|
updatedAt: TimeValue;
|
|
36
|
-
/**
|
|
59
|
+
/**
|
|
60
|
+
* Who made the latest change, when it is worth saying ("Maya"): read as
|
|
61
|
+
* "Updated 4m ago by Maya". Left unsaid where it is the owner, whose name
|
|
62
|
+
* the line already carries.
|
|
63
|
+
*/
|
|
37
64
|
updatedBy?: string | undefined;
|
|
38
65
|
/** Who has it open now. */
|
|
39
66
|
presence?: readonly AvatarStackMember[] | undefined;
|
|
@@ -43,6 +70,17 @@ export interface ArtifactCardProps {
|
|
|
43
70
|
version?: number | undefined;
|
|
44
71
|
/** The project or task it belongs to, as its key ("OPS", "ENG-412"). */
|
|
45
72
|
project?: string | undefined;
|
|
73
|
+
/** Who can open it, drawn as a glyph opening the card's line. Left out, nothing is said about it. */
|
|
74
|
+
access?: ArtifactAccess | undefined;
|
|
75
|
+
/**
|
|
76
|
+
* The card's own controls (a More menu), drawn OUTSIDE its link in the
|
|
77
|
+
* preview's top corner and shown on hover and while focus is inside the
|
|
78
|
+
* card, so they are reachable by keyboard and never nested in the link.
|
|
79
|
+
* The `card` size only.
|
|
80
|
+
*/
|
|
81
|
+
actions?: ReactNode;
|
|
82
|
+
/** It is in the trash: the preview is drawn faded. */
|
|
83
|
+
trashed?: boolean | undefined;
|
|
46
84
|
/** `compact` is a row for a narrow rail or a phone, with no preview. */
|
|
47
85
|
size?: ArtifactCardSize | undefined;
|
|
48
86
|
className?: string | undefined;
|
|
@@ -51,12 +89,32 @@ export interface ArtifactCardProps {
|
|
|
51
89
|
labels?: Partial<ArtifactCardLabels> | undefined;
|
|
52
90
|
}
|
|
53
91
|
/**
|
|
54
|
-
* One artifact, as a card in a gallery
|
|
92
|
+
* One artifact, as a card in a gallery or a row in a task's rail.
|
|
93
|
+
*
|
|
94
|
+
* THE CARD (`size="card"`) is a gallery's: a large preview of the artifact's
|
|
95
|
+
* own content on top, the kind's glyph on a badge over the preview's foot,
|
|
96
|
+
* then the title on one line and one quiet line under it, who can open it
|
|
97
|
+
* and when it was last edited ("Edited 20h ago"), with the owner named when
|
|
98
|
+
* the reader is not the owner.
|
|
55
99
|
*
|
|
56
100
|
* THE WHOLE CARD IS ONE LINK, named by the title alone and described by the
|
|
57
101
|
* rest, so a reader moving through a gallery by link hears "Vendor scorecard"
|
|
58
|
-
* and then, if they wait, what it is and who changed it.
|
|
59
|
-
*
|
|
60
|
-
*
|
|
102
|
+
* and then, if they wait, what it is and who changed it. The card's own
|
|
103
|
+
* controls (`actions`, a More menu) are drawn beside the link rather than
|
|
104
|
+
* inside it, over the preview's corner, so they are real controls a keyboard
|
|
105
|
+
* reaches in turn after the link.
|
|
106
|
+
*
|
|
107
|
+
* THE COMPACT ROW (`size="compact"`) is a task rail's: the kind's glyph, the
|
|
108
|
+
* title and the facts, with no preview and no actions.
|
|
61
109
|
*/
|
|
62
|
-
export declare function ArtifactCard({ title, kind, href, preview, owner, updatedAt, updatedBy, presence, changes, pinned, version, project, size, className, now, labels, }: ArtifactCardProps): import("react").JSX.Element;
|
|
110
|
+
export declare function ArtifactCard({ title, kind, href, preview, owner, updatedAt, updatedBy, presence, changes, pinned, version, project, access, actions, trashed, size, className, now, labels, }: ArtifactCardProps): import("react").JSX.Element;
|
|
111
|
+
/**
|
|
112
|
+
* A gallery card while its listing loads: the card's own shape (the preview
|
|
113
|
+
* at its ratio, the badge over its foot, a title line and a meta line), so a
|
|
114
|
+
* gallery that arrives replaces each placeholder in place rather than
|
|
115
|
+
* reflowing the page. Decorative: the host says once what is loading
|
|
116
|
+
* (`Skeleton`'s `label`, or its own status line).
|
|
117
|
+
*/
|
|
118
|
+
export declare function ArtifactCardSkeleton({ className }: {
|
|
119
|
+
className?: string | undefined;
|
|
120
|
+
}): import("react").JSX.Element;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import './ArtifactCard.css';
|
|
2
|
-
export { ARTIFACT_KINDS, ArtifactCard, ArtifactKindGlyph } from './ArtifactCard.js';
|
|
3
|
-
export type { ArtifactCardLabels, ArtifactCardProps, ArtifactCardSize, ArtifactKind } from './ArtifactCard.js';
|
|
2
|
+
export { ARTIFACT_KINDS, ArtifactCard, ArtifactCardSkeleton, ArtifactKindGlyph, ArtifactPreviewGlyph } from './ArtifactCard.js';
|
|
3
|
+
export type { ArtifactAccess, ArtifactCardLabels, ArtifactCardProps, ArtifactCardSize, ArtifactKind } from './ArtifactCard.js';
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
export { ARTIFACT_KINDS, ArtifactCard, ArtifactKindGlyph } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { ARTIFACT_KINDS, ArtifactCard, ArtifactCardSkeleton, ArtifactKindGlyph, ArtifactPreviewGlyph } from '../chunk-XTOVADJU.js';
|
|
2
|
+
import '../chunk-TEUQWOWZ.js';
|
|
3
|
+
import '../chunk-CI3VPIJN.js';
|
|
3
4
|
import '../chunk-3CZ7XAVY.js';
|
|
4
5
|
import '../chunk-EUCC37WY.js';
|
|
5
|
-
import '../chunk-UAN5NE7M.js';
|
|
6
|
-
import '../chunk-5OM447RW.js';
|
|
7
6
|
import '../chunk-ACA27MZH.js';
|
|
8
7
|
import '../chunk-AV2DXAEL.js';
|
|
8
|
+
import '../chunk-5AQBPHZD.js';
|
|
9
|
+
import '../chunk-PZKHBB7D.js';
|
|
10
|
+
import '../chunk-UDQW6UK7.js';
|
|
9
11
|
import '../chunk-BHHIIK3M.js';
|
|
10
12
|
import '../chunk-PQADV6P6.js';
|
|
11
13
|
import '../chunk-BZFWDIV6.js';
|