@crewlethq/ui 0.31.1 → 0.33.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 +151 -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 +12 -12
- package/dist/{ArtifactBar-MLMJHWY6.css → ArtifactBar-C462VD4C.css} +8 -3
- package/dist/ArtifactCard/ArtifactCard.d.ts +19 -1
- package/dist/ArtifactCard/index.d.ts +1 -1
- package/dist/ArtifactCard/index.js +4 -4
- package/dist/{ArtifactCard-EXVAEBV6.css → ArtifactCard-AS5Z4CVI.css} +17 -2
- package/dist/ArtifactCover/index.js +6 -6
- package/dist/ArtifactIcon/index.js +5 -5
- 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 +81 -4
- package/dist/Canvas/ShortcutTip.d.ts +22 -0
- package/dist/Canvas/geometry.d.ts +13 -3
- package/dist/Canvas/index.d.ts +4 -2
- package/dist/Canvas/index.js +5 -3
- package/dist/{Canvas-YVXHMWLN.css → Canvas-VUG2HLZK.css} +62 -3
- package/dist/CanvasBoard/CanvasBoard.d.ts +110 -12
- package/dist/CanvasBoard/budget.d.ts +9 -3
- package/dist/CanvasBoard/index.d.ts +2 -2
- package/dist/CanvasBoard/index.js +9 -5
- package/dist/CanvasBoard-5NNSKY6A.css +462 -0
- package/dist/CanvasToolbar/CanvasToolbar.d.ts +48 -0
- package/dist/CanvasToolbar/index.d.ts +3 -0
- package/dist/CanvasToolbar/index.js +12 -0
- package/dist/CanvasToolbar-EM5EVZED.css +34 -0
- 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 +9 -9
- 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-YZ7KG2RD.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/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/index.js +2 -2
- 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 +3 -1
- package/dist/SheetGrid/index.js +10 -10
- package/dist/{SheetGrid-J3TKKXZL.css → SheetGrid-AKPUCK67.css} +106 -7
- 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/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 +14 -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/index.js +2 -2
- package/dist/TreeCanvas/index.js +6 -4
- 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-OJ45PPCV.js → chunk-22UEIXZE.js} +127 -32
- package/dist/{chunk-UZ6MA2V6.js → chunk-2DHMVB5J.js} +2 -2
- package/dist/{chunk-WJDQ7XQA.js → chunk-2QEDJSJC.js} +1 -1
- package/dist/{chunk-2HIOJ4YZ.js → chunk-3EB2AV3H.js} +2 -3
- package/dist/{chunk-ODT5H4MN.js → chunk-3LYWD3BO.js} +2 -2
- package/dist/{chunk-FAQGGX2Z.js → chunk-3TFDQLW3.js} +1 -1
- package/dist/{chunk-VYDFB6PJ.js → chunk-3U7S6ZUN.js} +50 -17
- package/dist/{chunk-A4E5YLXO.js → chunk-4B6LSFDS.js} +1 -1
- package/dist/{chunk-S6VG5ZFZ.js → chunk-4IJS5CPF.js} +1 -1
- package/dist/{chunk-UAN5NE7M.js → chunk-5AQBPHZD.js} +1 -1
- package/dist/{chunk-QWOPX2MN.js → chunk-5FYPE5GL.js} +2 -3
- package/dist/{chunk-CJKMURZO.js → chunk-5SZGKSGL.js} +1 -1
- package/dist/chunk-6VOS2GMB.js +54 -0
- package/dist/{chunk-RODMM35O.js → chunk-7Q7WDXHG.js} +5 -5
- package/dist/{chunk-JI5AVQLA.js → chunk-7WHDPLVJ.js} +1 -1
- package/dist/{chunk-QH3AKP2N.js → chunk-AC22RZKC.js} +2 -2
- package/dist/{chunk-ZITJKF6Z.js → chunk-AYB6AYNH.js} +1 -1
- 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-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-GOSQXEZU.js → chunk-DFZMYB5X.js} +16 -10
- package/dist/{chunk-TGYDROIB.js → chunk-EBCHVFCS.js} +4 -4
- package/dist/{chunk-YDBC4DNW.js → chunk-FWYHRU7M.js} +1 -1
- package/dist/{chunk-CT4EZF62.js → chunk-G4ZW7A2W.js} +125 -33
- package/dist/chunk-GLSOD5Z4.js +33 -0
- 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-4JUKWWUD.js → chunk-HH2GKAAE.js} +1 -1
- package/dist/{chunk-QVE4GJAT.js → chunk-HJO4WCH6.js} +1 -1
- package/dist/{chunk-I3BSQUKN.js → chunk-HUVG2FFT.js} +1 -1
- package/dist/{chunk-3C3BRIMY.js → chunk-ILAEBSLJ.js} +3 -3
- package/dist/{chunk-GR55WT4R.js → chunk-IYO2N5ZH.js} +2 -2
- package/dist/{chunk-RWA4H2TV.js → chunk-J6ON5SYE.js} +1 -1
- package/dist/{chunk-NHBP2XS5.js → chunk-J6ZSH3F5.js} +49 -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-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-O63MWA4G.js → chunk-LV4APO72.js} +10 -3
- package/dist/{chunk-B4EBHPK3.js → chunk-M5KZX5JE.js} +9 -2
- package/dist/{chunk-JODJS7MR.js → chunk-MDNVHIB2.js} +276 -47
- package/dist/{chunk-VOX3YRFO.js → chunk-MTMKIUWF.js} +4 -4
- package/dist/{chunk-HVNTQ36V.js → chunk-O37AQNLK.js} +4 -4
- 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-JQLTG4KH.js → chunk-ORT5IKHP.js} +62 -51
- package/dist/{chunk-4KWOKX2B.js → chunk-OSKJZNBT.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-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-VVRL27HM.js → chunk-ULPL26BU.js} +2 -2
- package/dist/{chunk-6AH2XJ3Q.js → chunk-UNXLTJU7.js} +3 -3
- package/dist/{chunk-FC4YTTFJ.js → chunk-UQGFHNDI.js} +2 -3
- 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-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-I3KKZ2O3.js → chunk-XEGZHHRH.js} +45 -36
- package/dist/{chunk-IKB6HFGK.js → chunk-XO7PUL4F.js} +6 -4
- 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/{chunk-P4BOXB6E.js → chunk-Z6GFMI2Z.js} +6 -7
- package/dist/{chunk-YEKYVJQR.js → chunk-ZNBLFCQS.js} +2 -2
- package/dist/generated/index.d.ts +4 -0
- package/dist/generated/index.js +107 -104
- package/dist/index.js +107 -104
- package/dist/styles.css +1648 -235
- package/package.json +3 -3
- package/dist/AccessDeniedCard-WXM5DBDZ.css +0 -8
- package/dist/CanvasBoard-ZLPDINSM.css +0 -236
- package/dist/DocTabsEditor-RCOWHX5J.css +0 -78
- package/dist/PresenterView-T2C6ZZ3N.css +0 -103
- package/dist/SandboxedFrame-L6HBQZCD.css +0 -50
- package/dist/chunk-ALMSY7RL.js +0 -74
- package/dist/chunk-LR5QTFOE.js +0 -105
- package/dist/chunk-OGAAHVF6.js +0 -107
- package/dist/chunk-UZ7ZUSLH.js +0 -179
- package/dist/utils/useMediaMatch.d.ts +0 -12
- /package/dist/{chunk-OC46246T.js → chunk-2JJIN6JN.js} +0 -0
|
@@ -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,6 +172,24 @@
|
|
|
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
|
}
|
|
@@ -157,6 +210,13 @@
|
|
|
157
210
|
transform: translateY(-50%);
|
|
158
211
|
}
|
|
159
212
|
|
|
213
|
+
/* The active row's actions and the active cell's history are the reader's
|
|
214
|
+
tools while they are in the grid, not marks on a sheet nobody has entered. */
|
|
215
|
+
.crewlet-sheet-grid__grid:not(:focus-within) .crewlet-sheet-grid__row-actions--active-row,
|
|
216
|
+
.crewlet-sheet-grid__grid:not(:focus-within) .crewlet-sheet-grid__cell--history:not(:hover) > .crewlet-sheet-grid__history {
|
|
217
|
+
visibility: hidden;
|
|
218
|
+
}
|
|
219
|
+
|
|
160
220
|
/* The bar at a row's leading edge while somebody has it selected. */
|
|
161
221
|
.crewlet-sheet-grid__rownum--present::before {
|
|
162
222
|
position: absolute;
|
|
@@ -192,10 +252,21 @@
|
|
|
192
252
|
justify-content: center;
|
|
193
253
|
}
|
|
194
254
|
|
|
195
|
-
|
|
255
|
+
/* THE SELECTION IS TINTED WHILE THE READER IS IN THE GRID, or while it
|
|
256
|
+
spans more than one cell. A grid nobody has entered still holds its first
|
|
257
|
+
cell as the active one (the keys start there), and tinting it drew a stray
|
|
258
|
+
highlight on every sheet as it opened. */
|
|
259
|
+
.crewlet-sheet-grid__grid:is(:focus-within, .crewlet-sheet-grid__grid--range) .crewlet-sheet-grid__cell--selected {
|
|
196
260
|
background: var(--color-brand-accent-soft);
|
|
197
261
|
}
|
|
198
262
|
|
|
263
|
+
/* THE FROZEN EDGE once the grid is scrolled sideways: the columns that stay
|
|
264
|
+
(or the row numbers, where none do) end on the strong hairline, so the
|
|
265
|
+
values passing under them read as scrolled rather than cut. */
|
|
266
|
+
.crewlet-sheet-grid__scroller--across .crewlet-sheet-grid__frozen-edge {
|
|
267
|
+
border-inline-end-color: var(--color-border-strong);
|
|
268
|
+
}
|
|
269
|
+
|
|
199
270
|
.crewlet-sheet-grid__cell:focus-visible,
|
|
200
271
|
.crewlet-sheet-grid__header:focus-visible {
|
|
201
272
|
outline: 2px solid var(--color-focus);
|
|
@@ -263,6 +334,31 @@
|
|
|
263
334
|
white-space: normal;
|
|
264
335
|
}
|
|
265
336
|
|
|
337
|
+
/* THE HISTORY CONTROL HAS ITS OWN ROOM while it shows, so a value ends, or
|
|
338
|
+
ellipsises, before it rather than running under it. It sits at the edge
|
|
339
|
+
the value does not start from: the trailing edge of a value drawn from the
|
|
340
|
+
leading one, the leading edge of a number or a rating (drawn on the
|
|
341
|
+
trailing one), so neither moves when its cell becomes active. A checkbox,
|
|
342
|
+
centred in a column wider than it, needs no room made. */
|
|
343
|
+
.crewlet-sheet-grid__grid:focus-within .crewlet-sheet-grid__cell--history,
|
|
344
|
+
.crewlet-sheet-grid__cell--history:hover {
|
|
345
|
+
padding-inline-end: calc(var(--spacing-1) * 2 + var(--crewlet-sheet-history-size));
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
.crewlet-sheet-grid__grid:focus-within :is(.crewlet-sheet-grid__cell--number, .crewlet-sheet-grid__cell--rating).crewlet-sheet-grid__cell--history,
|
|
349
|
+
:is(.crewlet-sheet-grid__cell--number, .crewlet-sheet-grid__cell--rating).crewlet-sheet-grid__cell--history:hover {
|
|
350
|
+
padding-inline: calc(var(--spacing-1) * 2 + var(--crewlet-sheet-history-size)) var(--spacing-2);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
.crewlet-sheet-grid__grid:focus-within .crewlet-sheet-grid__cell--checkbox.crewlet-sheet-grid__cell--history,
|
|
354
|
+
.crewlet-sheet-grid__cell--checkbox.crewlet-sheet-grid__cell--history:hover {
|
|
355
|
+
padding-inline-end: var(--spacing-2);
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
:is(.crewlet-sheet-grid__cell--number, .crewlet-sheet-grid__cell--rating) > .crewlet-sheet-grid__history {
|
|
359
|
+
inset-inline: var(--spacing-1) auto;
|
|
360
|
+
}
|
|
361
|
+
|
|
266
362
|
.crewlet-sheet-grid__history {
|
|
267
363
|
position: absolute;
|
|
268
364
|
top: 50%;
|
|
@@ -270,9 +366,11 @@
|
|
|
270
366
|
display: inline-flex;
|
|
271
367
|
align-items: center;
|
|
272
368
|
justify-content: center;
|
|
273
|
-
|
|
369
|
+
width: var(--crewlet-sheet-history-size);
|
|
370
|
+
height: var(--crewlet-sheet-history-size);
|
|
371
|
+
padding: 0;
|
|
274
372
|
border: 0;
|
|
275
|
-
border-radius: var(--radius-
|
|
373
|
+
border-radius: var(--radius-md);
|
|
276
374
|
background: var(--color-surface-elevated);
|
|
277
375
|
color: var(--color-text-secondary);
|
|
278
376
|
transform: translateY(-50%);
|
|
@@ -280,6 +378,7 @@
|
|
|
280
378
|
}
|
|
281
379
|
|
|
282
380
|
.crewlet-sheet-grid__history:hover {
|
|
381
|
+
background: var(--color-surface-hover);
|
|
283
382
|
color: var(--color-text-primary);
|
|
284
383
|
}
|
|
285
384
|
|
|
@@ -654,7 +753,7 @@
|
|
|
654
753
|
}
|
|
655
754
|
|
|
656
755
|
@media (forced-colors: active) {
|
|
657
|
-
.crewlet-sheet-grid__cell--selected {
|
|
756
|
+
.crewlet-sheet-grid__grid:is(:focus-within, .crewlet-sheet-grid__grid--range) .crewlet-sheet-grid__cell--selected {
|
|
658
757
|
background: Highlight;
|
|
659
758
|
color: HighlightText;
|
|
660
759
|
}
|
|
@@ -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-J6ZSH3F5.js';
|
|
2
2
|
import '../chunk-Z7JYG5TF.js';
|
|
3
3
|
import '../chunk-AYKXMIOR.js';
|
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
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export interface SlideNavLabels {
|
|
3
|
+
/** The group's name. */
|
|
4
|
+
nav: string;
|
|
5
|
+
previous: string;
|
|
6
|
+
next: string;
|
|
7
|
+
/** Why Previous is off on the first slide. */
|
|
8
|
+
start: string;
|
|
9
|
+
/** Why Next is off on the last slide. */
|
|
10
|
+
end: string;
|
|
11
|
+
position: (position: number, total: number) => string;
|
|
12
|
+
}
|
|
13
|
+
export declare const SLIDE_NAV_LABELS: SlideNavLabels;
|
|
14
|
+
/**
|
|
15
|
+
* Where the controls sit: `page` on the interface's own ground, `projection`
|
|
16
|
+
* floating over a slide shown full screen, on a scrim in its own light ink
|
|
17
|
+
* whatever the theme, since the letterbox under it is black in every theme.
|
|
18
|
+
*/
|
|
19
|
+
export type SlideNavTone = 'page' | 'projection';
|
|
20
|
+
export interface SlideNavProps {
|
|
21
|
+
/** One-based. */
|
|
22
|
+
position: number;
|
|
23
|
+
total: number;
|
|
24
|
+
onPrevious: () => void;
|
|
25
|
+
onNext: () => void;
|
|
26
|
+
tone?: SlideNavTone | undefined;
|
|
27
|
+
/**
|
|
28
|
+
* Controls after Next, set apart by a rule: Full screen. IconButtons take
|
|
29
|
+
* the tone; give them `size="sm"`, the step Previous and Next are drawn at.
|
|
30
|
+
*/
|
|
31
|
+
children?: ReactNode;
|
|
32
|
+
className?: string | undefined;
|
|
33
|
+
labels?: Partial<SlideNavLabels> | undefined;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Previous, where the show is, and Next: the one set of controls every way of
|
|
37
|
+
* presenting a deck moves by, in the page, full screen and at the lectern.
|
|
38
|
+
*
|
|
39
|
+
* A TOOLBAR'S STEP: Previous and Next are the small control step, as tall as
|
|
40
|
+
* the buttons a toolbar or a panel sets beside them (the presenter's Pause).
|
|
41
|
+
*
|
|
42
|
+
* STOPS AT THE ENDS, SAYING WHY. Previous on the first slide and Next on the
|
|
43
|
+
* last are off, with the reason on the control, rather than pressable and
|
|
44
|
+
* doing nothing. The position is tabular in a fixed width, so the controls
|
|
45
|
+
* either side of it do not move as the count changes. It is not a live region:
|
|
46
|
+
* the host announces each slide as it arrives, by its number and its title,
|
|
47
|
+
* and a second announcement of the number alone would repeat it.
|
|
48
|
+
*/
|
|
49
|
+
export declare function SlideNav({ position, total, onPrevious, onNext, tone, children, className, labels, }: SlideNavProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* SlideNav: Previous, the position and Next, and whatever follows them.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
.crewlet-slide-nav {
|
|
6
|
+
display: inline-flex;
|
|
7
|
+
align-items: center;
|
|
8
|
+
gap: var(--spacing-1);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.crewlet-slide-nav__position {
|
|
12
|
+
min-width: 5em;
|
|
13
|
+
color: var(--color-text-secondary);
|
|
14
|
+
font-size: var(--font-size-sm);
|
|
15
|
+
font-variant-numeric: tabular-nums;
|
|
16
|
+
text-align: center;
|
|
17
|
+
white-space: nowrap;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.crewlet-slide-nav__more {
|
|
21
|
+
display: inline-flex;
|
|
22
|
+
align-items: center;
|
|
23
|
+
gap: var(--spacing-1);
|
|
24
|
+
margin-left: var(--spacing-2);
|
|
25
|
+
padding-left: var(--spacing-3);
|
|
26
|
+
border-left: 1px solid var(--color-border-default);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/* OVER A PROJECTED SLIDE: a pill in the projection's own fixed colours, so it
|
|
30
|
+
reads over black bars and over a slide of any colour, in every theme. */
|
|
31
|
+
.crewlet-slide-nav--projection {
|
|
32
|
+
padding: var(--spacing-1) var(--spacing-2);
|
|
33
|
+
border-radius: var(--radius-pill);
|
|
34
|
+
background: var(--color-projection-ground);
|
|
35
|
+
color: var(--color-projection-ink);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.crewlet-slide-nav--projection .crewlet-slide-nav__position {
|
|
39
|
+
color: inherit;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.crewlet-slide-nav--projection .crewlet-slide-nav__more {
|
|
43
|
+
border-left-color: var(--color-projection-rule);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.crewlet-slide-nav--projection .crewlet-icon-btn--ghost {
|
|
47
|
+
color: inherit;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.crewlet-slide-nav--projection .crewlet-icon-btn--ghost:hover:not(:disabled):not([aria-disabled='true']) {
|
|
51
|
+
background: var(--color-projection-hover);
|
|
52
|
+
color: inherit;
|
|
53
|
+
}
|
|
@@ -28,6 +28,19 @@ export interface SlideStageProps {
|
|
|
28
28
|
/** The stage's own size, for a format other than 16:9 at 1920. */
|
|
29
29
|
width?: number | undefined;
|
|
30
30
|
height?: number | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* What a screen reader calls what the stage holds: "slide" by default,
|
|
33
|
+
* "artboard" for a design's board shown at its own layout.
|
|
34
|
+
*/
|
|
35
|
+
roleDescription?: string | undefined;
|
|
36
|
+
/**
|
|
37
|
+
* The slide's own edge, a hairline on a small radius, so a slide whose
|
|
38
|
+
* ground is the page's own colour still reads as a slide: a thumbnail, a
|
|
39
|
+
* card, the editor's stage, a show in the page. Not for `fit="contain"`,
|
|
40
|
+
* whose box is letterboxed by design, nor in full screen, where the screen's
|
|
41
|
+
* own edge is the slide's.
|
|
42
|
+
*/
|
|
43
|
+
framed?: boolean | undefined;
|
|
31
44
|
className?: string | undefined;
|
|
32
45
|
}
|
|
33
46
|
/**
|
|
@@ -55,4 +68,4 @@ export interface SlideStageProps {
|
|
|
55
68
|
* A GROUP NAMED AS A SLIDE, so a screen reader announces "slide" with its
|
|
56
69
|
* name and reads its text in source order, which is the slide's reading order.
|
|
57
70
|
*/
|
|
58
|
-
export declare function SlideStage({ children, label, fit, scale, width, height, className, }: SlideStageProps): import("react").JSX.Element;
|
|
71
|
+
export declare function SlideStage({ children, label, fit, scale, width, height, roleDescription, framed, className, }: SlideStageProps): import("react").JSX.Element;
|