@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
|
@@ -77,12 +77,16 @@ export interface SheetGridProps {
|
|
|
77
77
|
* `content` is as tall as its rows, up to `height` (or the
|
|
78
78
|
* `--crewlet-sheet-max-height` the page sets, 70% of the viewport by
|
|
79
79
|
* default), so twelve rows draw no empty bordered slab under the last one
|
|
80
|
-
* and Add row sits right under them.
|
|
80
|
+
* and Add row sits right under them. In a column of bounded height it
|
|
81
|
+
* shrinks to the room left, down to the `--crewlet-sheet-min-height` the
|
|
82
|
+
* page sets.
|
|
81
83
|
*/
|
|
82
84
|
fit?: 'container' | 'content' | undefined;
|
|
83
85
|
/**
|
|
84
|
-
* Shows the row actions menu
|
|
85
|
-
*
|
|
86
|
+
* Shows the row actions menu in a row's number gutter (the number gives way
|
|
87
|
+
* to the button under the pointer, on the row holding focus, and while the
|
|
88
|
+
* menu is open; a tap on the number opens it on a touch screen; Shift+F10
|
|
89
|
+
* opens it from any of the row's cells) with Delete row. The grid only
|
|
86
90
|
* asks: the host confirms with its own dialog before it deletes anything.
|
|
87
91
|
*/
|
|
88
92
|
onDeleteRow?: ((rowId: string) => void) | undefined;
|
package/dist/SheetGrid/index.js
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from '../chunk-
|
|
1
|
+
export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from '../chunk-EWAFN2IU.js';
|
|
2
2
|
import '../chunk-O2EGEONV.js';
|
|
3
3
|
import '../chunk-CENOOTAV.js';
|
|
4
4
|
import '../chunk-GFV4LJHH.js';
|
|
5
5
|
import '../chunk-WIATRXEJ.js';
|
|
6
6
|
import '../chunk-3BYIWOTV.js';
|
|
7
7
|
import '../chunk-I6POAB4V.js';
|
|
8
|
-
import '../chunk-
|
|
9
|
-
import '../chunk-
|
|
8
|
+
import '../chunk-SGHIAGPR.js';
|
|
9
|
+
import '../chunk-VI5FWDZW.js';
|
|
10
10
|
import '../chunk-Z7JYG5TF.js';
|
|
11
11
|
import '../chunk-AYKXMIOR.js';
|
|
12
|
-
import '../chunk-
|
|
13
|
-
import '../chunk-
|
|
14
|
-
import '../chunk-
|
|
15
|
-
import '../chunk-
|
|
16
|
-
import '../chunk-
|
|
12
|
+
import '../chunk-6ZJ3N7QI.js';
|
|
13
|
+
import '../chunk-5AQBPHZD.js';
|
|
14
|
+
import '../chunk-PZKHBB7D.js';
|
|
15
|
+
import '../chunk-3EB2AV3H.js';
|
|
16
|
+
import '../chunk-OMV5W53A.js';
|
|
17
17
|
import '../chunk-R25RGPUB.js';
|
|
18
18
|
import '../chunk-OG6CL3EB.js';
|
|
19
19
|
import '../chunk-RSAQOKH3.js';
|
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
|
|
14
14
|
.crewlet-sheet-grid {
|
|
15
15
|
--crewlet-sheet-row-height: var(--size-sheet-row);
|
|
16
|
+
/* The history control: a target-sized button, which its room in the cell is sized from. */
|
|
17
|
+
--crewlet-sheet-history-size: var(--size-target-min);
|
|
16
18
|
position: relative;
|
|
17
19
|
display: flex;
|
|
18
20
|
flex-direction: column;
|
|
@@ -20,7 +22,33 @@
|
|
|
20
22
|
min-height: 0;
|
|
21
23
|
color: var(--color-text-primary);
|
|
22
24
|
font-family: var(--font-family-sans);
|
|
23
|
-
|
|
25
|
+
/* Values at the compact step, a grid's own register: the headers stay a
|
|
26
|
+
step under them, in sentence case. */
|
|
27
|
+
font-size: var(--font-size-compact);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/* THE MEASURING ROW: each sized column's header and sampled values, drawn by
|
|
31
|
+
the real header and cell rules at their natural width, out of sight and out
|
|
32
|
+
of reach. The grid reads each one's widest part as the column's width. */
|
|
33
|
+
.crewlet-sheet-grid__measure {
|
|
34
|
+
position: absolute;
|
|
35
|
+
inset-block-start: 0;
|
|
36
|
+
inset-inline-start: 0;
|
|
37
|
+
width: 0;
|
|
38
|
+
height: 0;
|
|
39
|
+
overflow: hidden;
|
|
40
|
+
visibility: hidden;
|
|
41
|
+
pointer-events: none;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.crewlet-sheet-grid__measure > div {
|
|
45
|
+
display: flex;
|
|
46
|
+
flex-direction: column;
|
|
47
|
+
width: max-content;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.crewlet-sheet-grid__measure :is(.crewlet-sheet-grid__header, .crewlet-sheet-grid__cell) {
|
|
51
|
+
width: max-content;
|
|
24
52
|
}
|
|
25
53
|
|
|
26
54
|
/* Measured by the component: the resolved row height at the current density. */
|
|
@@ -49,9 +77,16 @@
|
|
|
49
77
|
}
|
|
50
78
|
|
|
51
79
|
/* AS TALL AS ITS ROWS (fit="content"): the component writes the height, the
|
|
52
|
-
page may cap it, and the grid never grows past the height it was given.
|
|
80
|
+
page may cap it, and the grid never grows past the height it was given.
|
|
81
|
+
IN A BOUNDED COLUMN IT GIVES WAY: the scroller shrinks to the room its
|
|
82
|
+
container has left under whatever stands above it (a bar that wraps on a
|
|
83
|
+
phone included), so the foot lands on the container's edge rather than
|
|
84
|
+
on a guess of how tall the rest is. It never shrinks below the floor the
|
|
85
|
+
page sets (--crewlet-sheet-min-height), and never below its own rows'
|
|
86
|
+
height, so a short sheet is not stretched into an empty slab. */
|
|
53
87
|
.crewlet-sheet-grid--fit-content > .crewlet-sheet-grid__scroller {
|
|
54
|
-
flex:
|
|
88
|
+
flex: 0 1 auto;
|
|
89
|
+
min-height: min(var(--crewlet-sheet-min-height, 0px), var(--crewlet-sheet-content-height, 0px));
|
|
55
90
|
max-height: var(--crewlet-sheet-max-height, 70vh);
|
|
56
91
|
}
|
|
57
92
|
|
|
@@ -137,24 +172,80 @@
|
|
|
137
172
|
margin-inline-start: auto;
|
|
138
173
|
}
|
|
139
174
|
|
|
175
|
+
/* A HEADER SITS ON ITS COLUMN'S EDGE: a number's and a rating's name end
|
|
176
|
+
where their values end, the sort mark on the inner side, and a checkbox's
|
|
177
|
+
name is centred over its boxes. A name on the leading edge over values on
|
|
178
|
+
the trailing one read as belonging to the column before. */
|
|
179
|
+
.crewlet-sheet-grid__header--number,
|
|
180
|
+
.crewlet-sheet-grid__header--rating {
|
|
181
|
+
flex-direction: row-reverse;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
.crewlet-sheet-grid__header--number > .crewlet-sheet-grid__header-presence,
|
|
185
|
+
.crewlet-sheet-grid__header--rating > .crewlet-sheet-grid__header-presence {
|
|
186
|
+
margin-inline: 0 auto;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
.crewlet-sheet-grid__header--checkbox {
|
|
190
|
+
justify-content: center;
|
|
191
|
+
}
|
|
192
|
+
|
|
140
193
|
.crewlet-sheet-grid .crewlet-sheet-grid__header-badge {
|
|
141
194
|
box-shadow: 0 0 0 2px var(--crewlet-presence-hue);
|
|
142
195
|
}
|
|
143
196
|
|
|
197
|
+
/* THE GUTTER: one centred stack, so the number and the row's actions button
|
|
198
|
+
take exactly the same place and swapping one for the other moves nothing.
|
|
199
|
+
Its width is the component's fixed track (SHEET_ROW_NUMBER_WIDTH), which
|
|
200
|
+
holds five tabular digits, so row 9 and row 10000 stand in one column. */
|
|
144
201
|
.crewlet-sheet-grid__rownum {
|
|
202
|
+
display: grid;
|
|
203
|
+
grid-template-areas: 'gutter';
|
|
204
|
+
place-items: center;
|
|
145
205
|
color: var(--color-text-tertiary);
|
|
146
206
|
font-size: var(--font-size-xs);
|
|
147
207
|
font-variant-numeric: tabular-nums;
|
|
148
208
|
}
|
|
149
209
|
|
|
150
|
-
|
|
151
|
-
|
|
210
|
+
.crewlet-sheet-grid__rownum-number,
|
|
211
|
+
.crewlet-sheet-grid__row-actions {
|
|
212
|
+
grid-area: gutter;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/* THE ACTIONS BUTTON IS ALWAYS THERE, drawn clear until it is wanted, so a
|
|
216
|
+
tap on the number opens the row's menu on a screen with no pointer to
|
|
217
|
+
hover with. It shows, and the number gives way to it, under the pointer,
|
|
218
|
+
on the row holding focus (the active cell, or the button itself) and while
|
|
219
|
+
its menu is open. A row the reader has not entered keeps its number. */
|
|
152
220
|
.crewlet-sheet-grid__row-actions {
|
|
153
|
-
position: absolute;
|
|
154
|
-
top: 50%;
|
|
155
|
-
inset-inline-end: 0;
|
|
156
221
|
display: inline-flex;
|
|
157
|
-
|
|
222
|
+
opacity: 0;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
.crewlet-sheet-grid__row:is(:hover, :focus-within) > .crewlet-sheet-grid__rownum > .crewlet-sheet-grid__row-actions,
|
|
226
|
+
.crewlet-sheet-grid__rownum--open > .crewlet-sheet-grid__row-actions {
|
|
227
|
+
opacity: 1;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
.crewlet-sheet-grid__row:is(:hover, :focus-within) > .crewlet-sheet-grid__rownum--actions > .crewlet-sheet-grid__rownum-number,
|
|
231
|
+
.crewlet-sheet-grid__rownum--open > .crewlet-sheet-grid__rownum-number {
|
|
232
|
+
visibility: hidden;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/* THE SELECTED ROWS' NUMBERS are marked as their cells are, and on the same
|
|
236
|
+
condition (the reader is in the grid, or the selection spans more than one
|
|
237
|
+
cell), the way a spreadsheet lights the row headers of a selection. The
|
|
238
|
+
tint is laid over the gutter's own ground, which a sticky gutter needs: a
|
|
239
|
+
translucent tint alone lets the values scrolling under it show through. */
|
|
240
|
+
.crewlet-sheet-grid__grid:is(:focus-within, .crewlet-sheet-grid__grid--range) .crewlet-sheet-grid__rownum--selected {
|
|
241
|
+
background: linear-gradient(var(--color-brand-accent-soft), var(--color-brand-accent-soft)) var(--color-surface-background);
|
|
242
|
+
color: var(--color-brand-accent-ink);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/* The active cell's history is the reader's tool while they are in the grid,
|
|
246
|
+
not a mark on a sheet nobody has entered. */
|
|
247
|
+
.crewlet-sheet-grid__grid:not(:focus-within) .crewlet-sheet-grid__cell--history:not(:hover) > .crewlet-sheet-grid__history {
|
|
248
|
+
visibility: hidden;
|
|
158
249
|
}
|
|
159
250
|
|
|
160
251
|
/* The bar at a row's leading edge while somebody has it selected. */
|
|
@@ -192,8 +283,21 @@
|
|
|
192
283
|
justify-content: center;
|
|
193
284
|
}
|
|
194
285
|
|
|
195
|
-
|
|
196
|
-
|
|
286
|
+
/* THE SELECTION IS TINTED WHILE THE READER IS IN THE GRID, or while it
|
|
287
|
+
spans more than one cell. A grid nobody has entered still holds its first
|
|
288
|
+
cell as the active one (the keys start there), and tinting it drew a stray
|
|
289
|
+
highlight on every sheet as it opened. The tint is laid over the cell's
|
|
290
|
+
own ground: alone, a translucent tint on a frozen cell let the values
|
|
291
|
+
scrolling under it show through. */
|
|
292
|
+
.crewlet-sheet-grid__grid:is(:focus-within, .crewlet-sheet-grid__grid--range) .crewlet-sheet-grid__cell--selected {
|
|
293
|
+
background: linear-gradient(var(--color-brand-accent-soft), var(--color-brand-accent-soft)) var(--color-surface-background);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/* THE FROZEN EDGE once the grid is scrolled sideways: the columns that stay
|
|
297
|
+
(or the row numbers, where none do) end on the strong hairline, so the
|
|
298
|
+
values passing under them read as scrolled rather than cut. */
|
|
299
|
+
.crewlet-sheet-grid__scroller--across .crewlet-sheet-grid__frozen-edge {
|
|
300
|
+
border-inline-end-color: var(--color-border-strong);
|
|
197
301
|
}
|
|
198
302
|
|
|
199
303
|
.crewlet-sheet-grid__cell:focus-visible,
|
|
@@ -263,6 +367,31 @@
|
|
|
263
367
|
white-space: normal;
|
|
264
368
|
}
|
|
265
369
|
|
|
370
|
+
/* THE HISTORY CONTROL HAS ITS OWN ROOM while it shows, so a value ends, or
|
|
371
|
+
ellipsises, before it rather than running under it. It sits at the edge
|
|
372
|
+
the value does not start from: the trailing edge of a value drawn from the
|
|
373
|
+
leading one, the leading edge of a number or a rating (drawn on the
|
|
374
|
+
trailing one), so neither moves when its cell becomes active. A checkbox,
|
|
375
|
+
centred in a column wider than it, needs no room made. */
|
|
376
|
+
.crewlet-sheet-grid__grid:focus-within .crewlet-sheet-grid__cell--history,
|
|
377
|
+
.crewlet-sheet-grid__cell--history:hover {
|
|
378
|
+
padding-inline-end: calc(var(--spacing-1) * 2 + var(--crewlet-sheet-history-size));
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
.crewlet-sheet-grid__grid:focus-within :is(.crewlet-sheet-grid__cell--number, .crewlet-sheet-grid__cell--rating).crewlet-sheet-grid__cell--history,
|
|
382
|
+
:is(.crewlet-sheet-grid__cell--number, .crewlet-sheet-grid__cell--rating).crewlet-sheet-grid__cell--history:hover {
|
|
383
|
+
padding-inline: calc(var(--spacing-1) * 2 + var(--crewlet-sheet-history-size)) var(--spacing-2);
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
.crewlet-sheet-grid__grid:focus-within .crewlet-sheet-grid__cell--checkbox.crewlet-sheet-grid__cell--history,
|
|
387
|
+
.crewlet-sheet-grid__cell--checkbox.crewlet-sheet-grid__cell--history:hover {
|
|
388
|
+
padding-inline-end: var(--spacing-2);
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
:is(.crewlet-sheet-grid__cell--number, .crewlet-sheet-grid__cell--rating) > .crewlet-sheet-grid__history {
|
|
392
|
+
inset-inline: var(--spacing-1) auto;
|
|
393
|
+
}
|
|
394
|
+
|
|
266
395
|
.crewlet-sheet-grid__history {
|
|
267
396
|
position: absolute;
|
|
268
397
|
top: 50%;
|
|
@@ -270,9 +399,11 @@
|
|
|
270
399
|
display: inline-flex;
|
|
271
400
|
align-items: center;
|
|
272
401
|
justify-content: center;
|
|
273
|
-
|
|
402
|
+
width: var(--crewlet-sheet-history-size);
|
|
403
|
+
height: var(--crewlet-sheet-history-size);
|
|
404
|
+
padding: 0;
|
|
274
405
|
border: 0;
|
|
275
|
-
border-radius: var(--radius-
|
|
406
|
+
border-radius: var(--radius-md);
|
|
276
407
|
background: var(--color-surface-elevated);
|
|
277
408
|
color: var(--color-text-secondary);
|
|
278
409
|
transform: translateY(-50%);
|
|
@@ -280,6 +411,7 @@
|
|
|
280
411
|
}
|
|
281
412
|
|
|
282
413
|
.crewlet-sheet-grid__history:hover {
|
|
414
|
+
background: var(--color-surface-hover);
|
|
283
415
|
color: var(--color-text-primary);
|
|
284
416
|
}
|
|
285
417
|
|
|
@@ -654,11 +786,19 @@
|
|
|
654
786
|
}
|
|
655
787
|
|
|
656
788
|
@media (forced-colors: active) {
|
|
657
|
-
.crewlet-sheet-grid__cell--selected {
|
|
789
|
+
.crewlet-sheet-grid__grid:is(:focus-within, .crewlet-sheet-grid__grid--range) .crewlet-sheet-grid__cell--selected {
|
|
658
790
|
background: Highlight;
|
|
659
791
|
color: HighlightText;
|
|
660
792
|
}
|
|
661
793
|
|
|
794
|
+
/* A selected row's number takes the selection's ink on the page's ground:
|
|
795
|
+
on a Highlight ground the browser's backplate behind the digits drew
|
|
796
|
+
them as a solid block. */
|
|
797
|
+
.crewlet-sheet-grid__grid:is(:focus-within, .crewlet-sheet-grid__grid--range) .crewlet-sheet-grid__rownum--selected {
|
|
798
|
+
background: Canvas;
|
|
799
|
+
color: Highlight;
|
|
800
|
+
}
|
|
801
|
+
|
|
662
802
|
.crewlet-sheet-grid__rownum--present::before {
|
|
663
803
|
background: Highlight;
|
|
664
804
|
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Columns sized to what they hold. A column that declares no width is as wide
|
|
3
|
+
* as the widest of its header and its values as drawn, within bounds its type
|
|
4
|
+
* sets: a status column wide enough for "Changes requested", a checkbox column
|
|
5
|
+
* wide enough for its name, and no text column running a screen wide.
|
|
6
|
+
*
|
|
7
|
+
* The grid measures; this module says WHAT it measures (a few values per
|
|
8
|
+
* column, not every row) and how a measurement becomes a width.
|
|
9
|
+
*/
|
|
10
|
+
import type { SheetColumn, SheetColumnType, SheetRow, SheetValue } from './types.js';
|
|
11
|
+
import { type SheetValueContext } from './values.js';
|
|
12
|
+
/**
|
|
13
|
+
* The narrowest and widest a column sizes itself to, in px, by type. The
|
|
14
|
+
* floor keeps a column a target and its header readable; the ceiling keeps one
|
|
15
|
+
* long value from pushing every other column off the screen (the rest of it is
|
|
16
|
+
* one Enter away, in the editor).
|
|
17
|
+
*/
|
|
18
|
+
export declare const SHEET_COLUMN_BOUNDS: Readonly<Record<SheetColumnType, readonly [min: number, max: number]>>;
|
|
19
|
+
/** How many of a column's longest values it is measured by. */
|
|
20
|
+
export declare const SHEET_FIT_SAMPLES = 8;
|
|
21
|
+
/**
|
|
22
|
+
* The width a column takes from its measurement (the widest of its header and
|
|
23
|
+
* sampled values as drawn, border included), within its type's bounds. Nothing
|
|
24
|
+
* measured (no layout, as on a server or in a test) leaves the type's default.
|
|
25
|
+
*/
|
|
26
|
+
export declare function fittedWidth(type: SheetColumnType, measured: number): number;
|
|
27
|
+
/**
|
|
28
|
+
* The values a column is measured by. A choice column is measured by every
|
|
29
|
+
* live choice, whatever the rows hold, so a choice nobody has picked yet still
|
|
30
|
+
* fits when somebody does. A checkbox and a multi-select by their header alone
|
|
31
|
+
* (one box, and chips that count what does not fit), a rating by its full
|
|
32
|
+
* mark. Every other column by its `limit` longest values as displayed.
|
|
33
|
+
*/
|
|
34
|
+
export declare function fitSamples(column: SheetColumn, rows: readonly SheetRow[], context: SheetValueContext, limit?: number): SheetValue[];
|
|
@@ -7,6 +7,7 @@ export { LONGTEXT_MAX_DEFAULT, RATING_MAX_CEILING, RATING_MAX_DEFAULT, TEXT_MAX_
|
|
|
7
7
|
export type { SheetParse, SheetValueContext } from './values.js';
|
|
8
8
|
export { SHEET_COLUMN_WIDTHS, SHEET_ROW_HEIGHT, SHEET_ROW_NUMBER_WIDTH, columnOffsets, columnWidth, drawnColumns, editorSide, inRange, isMod, isMultiCell, isTypingKey, moveFrom, rangeOf, scrollToRow, visibleRows, } from './navigation.js';
|
|
9
9
|
export type { SheetBounds, SheetKey, SheetPosition, SheetRange } from './navigation.js';
|
|
10
|
+
export { SHEET_COLUMN_BOUNDS, SHEET_FIT_SAMPLES, fitSamples, fittedWidth } from './fit.js';
|
|
10
11
|
export { parseTSV, planClear, planPaste, toTSV } from './clipboard.js';
|
|
11
12
|
export type { SheetPastePlan } from './clipboard.js';
|
|
12
13
|
export { SheetPendingEdits, changeText, changeTime, hasPrevious, refusalText } from './edits.js';
|
package/dist/SheetModel/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { LONGTEXT_MAX_DEFAULT, RATING_MAX_CEILING, RATING_MAX_DEFAULT, SHEET_COLUMN_TYPES, SHEET_COLUMN_WIDTHS, SHEET_LABELS, SHEET_ROW_HEIGHT, SHEET_ROW_NUMBER_WIDTH, SheetPendingEdits, TEXT_MAX_DEFAULT, URL_MAX, cellDescription, cellKey, cellSpeech, changeText, changeTime, checkValue, columnOffsets, columnWidth, compareValues, displayText, drawnColumns, editText, editorSide, findOption, findPerson, flagText, hasPrevious, inRange, isEmptyValue, isMod, isMultiCell, isSheetColumnType, isTypingKey, liveOptions, moveFrom, nextSort, normalizeValue, optionHue, parseOptionList, parseTSV, parseText, planClear, planPaste, presenceByCell, presenceByColumn, presenceByRow, rangeOf, ratingMax, refusalText, rowName, sameValue, scrollToRow, sheetLabels, sortRows, spokenText, statusTone, textMax, toTSV, visibleRows } from '../chunk-
|
|
1
|
+
export { LONGTEXT_MAX_DEFAULT, RATING_MAX_CEILING, RATING_MAX_DEFAULT, SHEET_COLUMN_BOUNDS, SHEET_COLUMN_TYPES, SHEET_COLUMN_WIDTHS, SHEET_FIT_SAMPLES, SHEET_LABELS, SHEET_ROW_HEIGHT, SHEET_ROW_NUMBER_WIDTH, SheetPendingEdits, TEXT_MAX_DEFAULT, URL_MAX, cellDescription, cellKey, cellSpeech, changeText, changeTime, checkValue, columnOffsets, columnWidth, compareValues, displayText, drawnColumns, editText, editorSide, findOption, findPerson, fitSamples, fittedWidth, flagText, hasPrevious, inRange, isEmptyValue, isMod, isMultiCell, isSheetColumnType, isTypingKey, liveOptions, moveFrom, nextSort, normalizeValue, optionHue, parseOptionList, parseTSV, parseText, planClear, planPaste, presenceByCell, presenceByColumn, presenceByRow, rangeOf, ratingMax, refusalText, rowName, sameValue, scrollToRow, sheetLabels, sortRows, spokenText, statusTone, textMax, toTSV, visibleRows } from '../chunk-VI5FWDZW.js';
|
|
2
2
|
import '../chunk-Z7JYG5TF.js';
|
|
3
3
|
import '../chunk-AYKXMIOR.js';
|
|
@@ -59,7 +59,7 @@ export interface SheetLabels {
|
|
|
59
59
|
dismiss: string;
|
|
60
60
|
/** A refusal, as the grid announces it: "Not saved: <reason>". */
|
|
61
61
|
notSaved: (reason: string) => string;
|
|
62
|
-
/** The row actions
|
|
62
|
+
/** The row actions button in a row's number gutter (its name and tooltip), and its delete item. */
|
|
63
63
|
rowActions: (row: number) => string;
|
|
64
64
|
deleteRow: string;
|
|
65
65
|
/** Appended to the keyboard help when a row has actions. */
|
package/dist/Shortcut/index.js
CHANGED
|
@@ -30,7 +30,8 @@ export interface SkeletonProps {
|
|
|
30
30
|
style?: CSSProperties;
|
|
31
31
|
width?: number | string;
|
|
32
32
|
height?: number | string;
|
|
33
|
-
|
|
33
|
+
/** A number of px, or any CSS length, such as a radius token: `var(--radius-md)`. */
|
|
34
|
+
borderRadius?: number | string;
|
|
34
35
|
marginTop?: number;
|
|
35
36
|
marginBottom?: number;
|
|
36
37
|
}
|
package/dist/Skeleton/index.js
CHANGED
|
@@ -24,7 +24,8 @@ export interface SlideCompareLabels {
|
|
|
24
24
|
removed: string;
|
|
25
25
|
unchanged: string;
|
|
26
26
|
moved: (from: number, to: number) => string;
|
|
27
|
-
|
|
27
|
+
/** The empty side of a slide one version lacks, under that version's heading. */
|
|
28
|
+
missing: string;
|
|
28
29
|
summary: (counts: Record<Exclude<SlideChange, 'unchanged'> | 'moved', number>) => string;
|
|
29
30
|
showUnchanged: (count: number) => string;
|
|
30
31
|
hideUnchanged: string;
|
|
@@ -43,6 +44,10 @@ export interface SlideCompareProps {
|
|
|
43
44
|
* drawings side by side, paired by its id, with a slide one version lacks in
|
|
44
45
|
* its place and an empty side saying so.
|
|
45
46
|
*
|
|
47
|
+
* EACH SIDE IS NAMED: the two columns carry their versions' names over the
|
|
48
|
+
* first row, and again over each side once the sides stack on a phone, so a
|
|
49
|
+
* reader never has to guess which drawing is the older one.
|
|
50
|
+
*
|
|
46
51
|
* SAID IN WORDS, NEVER COLOUR ALONE. Every row names what happened to it
|
|
47
52
|
* (Changed, Added, Removed, Moved from 6 to 7) beside a glyph, and the list
|
|
48
53
|
* opens with the count of each, so a reader hears the comparison before they
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { SLIDE_COMPARE_LABELS, SlideCompare } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
1
|
+
export { SLIDE_COMPARE_LABELS, SlideCompare } from '../chunk-LL5AFXU7.js';
|
|
2
|
+
import '../chunk-LV4APO72.js';
|
|
3
|
+
import '../chunk-OMV5W53A.js';
|
|
4
4
|
import '../chunk-R25RGPUB.js';
|
|
5
5
|
import '../chunk-OG6CL3EB.js';
|
|
6
6
|
import '../chunk-BZFWDIV6.js';
|
|
@@ -56,9 +56,34 @@
|
|
|
56
56
|
gap: var(--spacing-3);
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
.crewlet-slide-compare__side
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
.crewlet-slide-compare__side {
|
|
60
|
+
display: flex;
|
|
61
|
+
flex-direction: column;
|
|
62
|
+
gap: var(--spacing-1);
|
|
63
|
+
min-width: 0;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/* THE VERSIONS' NAMES over the two columns; over each side instead once the
|
|
67
|
+
sides stack. */
|
|
68
|
+
.crewlet-slide-compare__columns {
|
|
69
|
+
display: grid;
|
|
70
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
71
|
+
gap: var(--spacing-3);
|
|
72
|
+
padding-bottom: var(--spacing-2);
|
|
73
|
+
border-bottom: 1px solid var(--color-border-default);
|
|
74
|
+
color: var(--color-text-secondary);
|
|
75
|
+
font-size: var(--font-size-xs);
|
|
76
|
+
font-weight: var(--font-weight-semibold);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.crewlet-slide-compare__side-label {
|
|
80
|
+
display: none;
|
|
81
|
+
color: var(--color-text-tertiary);
|
|
82
|
+
font-size: var(--font-size-xs);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.crewlet-slide-compare__toggle {
|
|
86
|
+
align-self: flex-start;
|
|
62
87
|
}
|
|
63
88
|
|
|
64
89
|
.crewlet-slide-compare__missing {
|
|
@@ -77,4 +102,12 @@
|
|
|
77
102
|
.crewlet-slide-compare__sides {
|
|
78
103
|
grid-template-columns: minmax(0, 1fr);
|
|
79
104
|
}
|
|
105
|
+
|
|
106
|
+
.crewlet-slide-compare__columns {
|
|
107
|
+
display: none;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.crewlet-slide-compare__side-label {
|
|
111
|
+
display: block;
|
|
112
|
+
}
|
|
80
113
|
}
|
|
@@ -15,6 +15,11 @@ export interface SlideFilmstripLabels {
|
|
|
15
15
|
hidden: string;
|
|
16
16
|
untitled: string;
|
|
17
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Which way the strip runs: a column beside the stage, or a row under it
|
|
20
|
+
* where the stage takes the whole width (a phone).
|
|
21
|
+
*/
|
|
22
|
+
export type SlideFilmstripOrientation = 'vertical' | 'horizontal';
|
|
18
23
|
export interface SlideFilmstripProps {
|
|
19
24
|
slides: readonly FilmstripSlide[];
|
|
20
25
|
/** The slide on the stage. */
|
|
@@ -27,6 +32,7 @@ export interface SlideFilmstripProps {
|
|
|
27
32
|
* out, the filmstrip is read only and draws no handles.
|
|
28
33
|
*/
|
|
29
34
|
onReorder?: ((ids: string[]) => void) | undefined;
|
|
35
|
+
orientation?: SlideFilmstripOrientation | undefined;
|
|
30
36
|
className?: string | undefined;
|
|
31
37
|
labels?: Partial<SlideFilmstripLabels> | undefined;
|
|
32
38
|
}
|
|
@@ -37,14 +43,19 @@ export interface SlideFilmstripProps {
|
|
|
37
43
|
*
|
|
38
44
|
* ONE STOP IN THE TAB ORDER for the thumbnails: each is a button marked
|
|
39
45
|
* `aria-current` when its slide is on the stage, and only that one is in the
|
|
40
|
-
* tab order; Up and Down
|
|
41
|
-
* the ends, and the stage follows. A handle is its own control beside its
|
|
46
|
+
* tab order; Up and Down (Left and Right in a row) move to the next or
|
|
47
|
+
* previous slide, Home and End to the ends, and the stage follows. A handle is its own control beside its
|
|
42
48
|
* thumbnail, since moving a slide is a different act from looking at it; its
|
|
43
49
|
* arrow keys move the slide, and the move is announced with where it landed.
|
|
44
50
|
* (A listbox would hold the handles inside its options, which a listbox may
|
|
45
51
|
* not.)
|
|
46
52
|
*
|
|
53
|
+
* THE SLIDE ON THE STAGE IS KEPT IN VIEW. The strip is its own scroller, and
|
|
54
|
+
* whenever the selection moves, whether by a press here, by Present, by a link
|
|
55
|
+
* that opened on slide 25 or by following somebody, the strip scrolls just
|
|
56
|
+
* enough to show it, and nothing else on the page moves.
|
|
57
|
+
*
|
|
47
58
|
* THUMBNAILS ARE THE SLIDES THEMSELVES, drawn by the caller at the slide's own
|
|
48
59
|
* size and scaled by `SlideStage`, so what the strip shows is what presents.
|
|
49
60
|
*/
|
|
50
|
-
export declare function SlideFilmstrip({ slides, selected, onSelect, renderSlide, onReorder, className, labels, }: SlideFilmstripProps): import("react").JSX.Element;
|
|
61
|
+
export declare function SlideFilmstrip({ slides, selected, onSelect, renderSlide, onReorder, orientation, className, labels, }: SlideFilmstripProps): import("react").JSX.Element;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { SlideFilmstrip } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { SlideFilmstrip } from '../chunk-XV32RKQZ.js';
|
|
2
|
+
import '../chunk-LV4APO72.js';
|
|
3
3
|
import '../chunk-XJ2QEBMM.js';
|
|
4
|
-
import '../chunk-
|
|
4
|
+
import '../chunk-OMV5W53A.js';
|
|
5
5
|
import '../chunk-R25RGPUB.js';
|
|
6
6
|
import '../chunk-RSAQOKH3.js';
|
|
7
7
|
import '../chunk-BZFWDIV6.js';
|
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* SlideFilmstrip: the column of slide thumbnails beside a deck's stage
|
|
2
|
+
* SlideFilmstrip: the column of slide thumbnails beside a deck's stage, or
|
|
3
|
+
* the row under it on a phone.
|
|
3
4
|
*
|
|
4
5
|
* The selected slide is ringed in the brand accent rather than filled, so its
|
|
5
6
|
* thumbnail still shows the slide's own colours.
|
|
7
|
+
*
|
|
8
|
+
* THE STRIP IS ITS OWN SCROLLER: a host bounds it (a column's max-height, a
|
|
9
|
+
* row's width) and the strip scrolls inside that, keeping the selected slide
|
|
10
|
+
* in view, with its scroll chained to nothing so a flick at its end does not
|
|
11
|
+
* scroll the page under the reader's thumb.
|
|
6
12
|
*/
|
|
7
13
|
|
|
14
|
+
.crewlet-slide-filmstrip {
|
|
15
|
+
overflow: auto;
|
|
16
|
+
overscroll-behavior: contain;
|
|
17
|
+
}
|
|
18
|
+
|
|
8
19
|
.crewlet-slide-filmstrip__list {
|
|
9
20
|
display: flex;
|
|
10
21
|
flex-direction: column;
|
|
@@ -72,6 +83,9 @@
|
|
|
72
83
|
color: var(--color-text-secondary);
|
|
73
84
|
}
|
|
74
85
|
|
|
86
|
+
/* A CONTROL'S CORNER: the handle is a 24px control like any toolbar button,
|
|
87
|
+
so it takes --radius-md; the thumbnail beside it is a slide, and keeps the
|
|
88
|
+
slide's own smaller corner. */
|
|
75
89
|
.crewlet-slide-filmstrip__handle {
|
|
76
90
|
display: inline-flex;
|
|
77
91
|
align-items: center;
|
|
@@ -80,7 +94,7 @@
|
|
|
80
94
|
min-height: var(--size-target-min);
|
|
81
95
|
padding: 0;
|
|
82
96
|
border: 0;
|
|
83
|
-
border-radius: var(--radius-
|
|
97
|
+
border-radius: var(--radius-md);
|
|
84
98
|
background: transparent;
|
|
85
99
|
color: var(--color-text-tertiary);
|
|
86
100
|
cursor: grab;
|
|
@@ -106,3 +120,50 @@
|
|
|
106
120
|
.crewlet-slide-filmstrip__item[data-reorder-target='after'] .crewlet-slide-filmstrip__thumb {
|
|
107
121
|
box-shadow: 0 var(--spacing-1) 0 var(--color-brand-accent);
|
|
108
122
|
}
|
|
123
|
+
|
|
124
|
+
/* A ROW UNDER THE STAGE: fixed-width thumbnails that scroll sideways, each
|
|
125
|
+
with its number and its handle under it rather than beside it. */
|
|
126
|
+
/* NO SCROLL SNAP: a snap point would pull the strip back to the start of an
|
|
127
|
+
earlier thumbnail just after it scrolled the selected one into view. */
|
|
128
|
+
.crewlet-slide-filmstrip--horizontal {
|
|
129
|
+
overflow-y: hidden;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.crewlet-slide-filmstrip--horizontal .crewlet-slide-filmstrip__list {
|
|
133
|
+
flex-direction: row;
|
|
134
|
+
gap: var(--spacing-3);
|
|
135
|
+
width: max-content;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.crewlet-slide-filmstrip--horizontal .crewlet-slide-filmstrip__item {
|
|
139
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
140
|
+
grid-template-areas:
|
|
141
|
+
'thumb thumb'
|
|
142
|
+
'number handle';
|
|
143
|
+
align-items: center;
|
|
144
|
+
width: 7.5rem;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.crewlet-slide-filmstrip--horizontal .crewlet-slide-filmstrip__thumb {
|
|
148
|
+
grid-area: thumb;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.crewlet-slide-filmstrip--horizontal .crewlet-slide-filmstrip__number {
|
|
152
|
+
grid-area: number;
|
|
153
|
+
padding-top: 0;
|
|
154
|
+
text-align: left;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.crewlet-slide-filmstrip--horizontal .crewlet-slide-filmstrip__handle {
|
|
158
|
+
grid-area: handle;
|
|
159
|
+
min-height: var(--size-control-sm);
|
|
160
|
+
cursor: grab;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.crewlet-slide-filmstrip--horizontal .crewlet-slide-filmstrip__item[data-reorder-target='before'] .crewlet-slide-filmstrip__thumb {
|
|
164
|
+
box-shadow: calc(var(--spacing-1) * -1) 0 0 var(--color-brand-accent);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.crewlet-slide-filmstrip--horizontal .crewlet-slide-filmstrip__item[data-reorder-target='after'] .crewlet-slide-filmstrip__thumb {
|
|
168
|
+
box-shadow: var(--spacing-1) 0 0 var(--color-brand-accent);
|
|
169
|
+
}
|
package/dist/SlideGrid/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { SlideGrid } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
1
|
+
export { SlideGrid } from '../chunk-ILAEBSLJ.js';
|
|
2
|
+
import '../chunk-LV4APO72.js';
|
|
3
|
+
import '../chunk-OMV5W53A.js';
|
|
4
4
|
import '../chunk-R25RGPUB.js';
|
|
5
5
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -38,11 +38,6 @@
|
|
|
38
38
|
cursor: pointer;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
.crewlet-slide-grid__card .crewlet-slide-stage {
|
|
42
|
-
border-radius: var(--radius-sm);
|
|
43
|
-
outline: 1px solid var(--color-border-default);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
41
|
.crewlet-slide-grid__card:hover .crewlet-slide-stage {
|
|
47
42
|
outline-color: var(--color-border-hover);
|
|
48
43
|
}
|
|
@@ -80,3 +75,12 @@
|
|
|
80
75
|
text-overflow: ellipsis;
|
|
81
76
|
white-space: nowrap;
|
|
82
77
|
}
|
|
78
|
+
|
|
79
|
+
/* TWO TO A ROW ON A PHONE: a grid of one is the filmstrip at full size, and
|
|
80
|
+
the grid is for seeing the deck's run at a glance. */
|
|
81
|
+
@media (width < 640px) {
|
|
82
|
+
.crewlet-slide-grid__list {
|
|
83
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
84
|
+
gap: var(--spacing-3);
|
|
85
|
+
}
|
|
86
|
+
}
|