react-panel-layout 0.5.2 → 0.6.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/dist/{FloatingPanelFrame-D9Cp2al1.cjs → FloatingPanelFrame-CEmXDvUA.cjs} +2 -2
- package/dist/{FloatingPanelFrame-D9Cp2al1.cjs.map → FloatingPanelFrame-CEmXDvUA.cjs.map} +1 -1
- package/dist/{FloatingPanelFrame-lLg-Lpg7.js → FloatingPanelFrame-SgYLc6Ud.js} +11 -11
- package/dist/{FloatingPanelFrame-lLg-Lpg7.js.map → FloatingPanelFrame-SgYLc6Ud.js.map} +1 -1
- package/dist/FloatingWindow-BpdOpg_L.js +400 -0
- package/dist/FloatingWindow-BpdOpg_L.js.map +1 -0
- package/dist/FloatingWindow-TCDNY5gE.cjs +2 -0
- package/dist/FloatingWindow-TCDNY5gE.cjs.map +1 -0
- package/dist/GridLayout-B4VRsC0r.cjs +2 -0
- package/dist/GridLayout-B4VRsC0r.cjs.map +1 -0
- package/dist/GridLayout-BltqeCPK.js +927 -0
- package/dist/GridLayout-BltqeCPK.js.map +1 -0
- package/dist/HorizontalDivider-B5Z-KZLk.cjs +2 -0
- package/dist/HorizontalDivider-B5Z-KZLk.cjs.map +1 -0
- package/dist/HorizontalDivider-WF1k_qND.js +30 -0
- package/dist/HorizontalDivider-WF1k_qND.js.map +1 -0
- package/dist/PanelSystem-Bs8bQwQF.cjs +3 -0
- package/dist/PanelSystem-Bs8bQwQF.cjs.map +1 -0
- package/dist/PanelSystem-Dr1TBhxM.js +1946 -0
- package/dist/PanelSystem-Dr1TBhxM.js.map +1 -0
- package/dist/ResizeHandle-CScipO5l.cjs +2 -0
- package/dist/ResizeHandle-CScipO5l.cjs.map +1 -0
- package/dist/ResizeHandle-CdA_JYfN.js +120 -0
- package/dist/ResizeHandle-CdA_JYfN.js.map +1 -0
- package/dist/SwipePivotTabBar-BGO9X94m.js +407 -0
- package/dist/SwipePivotTabBar-BGO9X94m.js.map +1 -0
- package/dist/SwipePivotTabBar-BrQismcZ.cjs +2 -0
- package/dist/SwipePivotTabBar-BrQismcZ.cjs.map +1 -0
- package/dist/config.cjs +1 -1
- package/dist/config.cjs.map +1 -1
- package/dist/config.js +11 -9
- package/dist/config.js.map +1 -1
- package/dist/constants/styles.d.ts +18 -4
- package/dist/floating.cjs +1 -1
- package/dist/floating.js +1 -1
- package/dist/grid/index.d.ts +58 -0
- package/dist/grid.cjs +2 -0
- package/dist/grid.cjs.map +1 -0
- package/dist/grid.js +13 -0
- package/dist/grid.js.map +1 -0
- package/dist/hooks/gesture/presets.d.ts +33 -0
- package/dist/hooks/gesture/testing/createGestureSimulator.d.ts +110 -0
- package/dist/hooks/gesture/thresholdValue.d.ts +44 -0
- package/dist/hooks/gesture/types.d.ts +254 -0
- package/dist/hooks/gesture/useDirectionalLock.d.ts +20 -0
- package/dist/hooks/gesture/useEdgeSwipeInput.d.ts +23 -0
- package/dist/hooks/gesture/useNativeGestureGuard.d.ts +23 -0
- package/dist/hooks/gesture/usePointerTracking.d.ts +22 -0
- package/dist/hooks/gesture/useScrollBoundary.d.ts +23 -0
- package/dist/hooks/gesture/useSwipeInput.d.ts +5 -0
- package/dist/hooks/gesture/utils.d.ts +40 -0
- package/dist/hooks/useAnimatedVisibility.d.ts +58 -0
- package/dist/hooks/useAnimationFrame.d.ts +84 -0
- package/dist/hooks/useSnapAnimation.d.ts +54 -0
- package/dist/hooks/useSwipeContentTransform.d.ts +79 -0
- package/dist/index.cjs +1 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +25 -2006
- package/dist/index.js.map +1 -1
- package/dist/modules/pivot/PivotContent.d.ts +1 -1
- package/dist/modules/pivot/SwipePivotContent.d.ts +39 -0
- package/dist/modules/pivot/SwipePivotContent.debug.tmp.d.ts +25 -0
- package/dist/modules/pivot/SwipePivotContent.test.d.ts +1 -0
- package/dist/modules/pivot/SwipePivotTabBar.d.ts +89 -0
- package/dist/modules/pivot/index.d.ts +3 -0
- package/dist/modules/pivot/scaleInputState.d.ts +37 -0
- package/dist/modules/pivot/types.d.ts +67 -2
- package/dist/modules/pivot/usePivotSwipeInput.d.ts +68 -0
- package/dist/modules/stack/StackContent.d.ts +15 -0
- package/dist/modules/stack/SwipeStackContent.d.ts +63 -0
- package/dist/modules/stack/SwipeStackOutlet.d.ts +80 -0
- package/dist/modules/stack/computeStackContentState.d.ts +99 -0
- package/dist/modules/stack/computeSwipeStackTransform.d.ts +76 -0
- package/dist/modules/stack/types.d.ts +194 -0
- package/dist/modules/stack/useStackAnimationState.d.ts +32 -0
- package/dist/modules/stack/useStackNavigation.d.ts +23 -0
- package/dist/modules/stack/useStackSwipeInput.d.ts +27 -0
- package/dist/panels/index.d.ts +67 -0
- package/dist/panels.cjs +2 -0
- package/dist/panels.cjs.map +1 -0
- package/dist/panels.js +28 -0
- package/dist/panels.js.map +1 -0
- package/dist/pivot/index.d.ts +3 -0
- package/dist/pivot.cjs +1 -1
- package/dist/pivot.cjs.map +1 -1
- package/dist/pivot.js +20 -2
- package/dist/pivot.js.map +1 -1
- package/dist/resizer/index.d.ts +57 -0
- package/dist/resizer.cjs +2 -0
- package/dist/resizer.cjs.map +1 -0
- package/dist/resizer.js +8 -0
- package/dist/resizer.js.map +1 -0
- package/dist/stack/index.d.ts +72 -0
- package/dist/stack.cjs +2 -0
- package/dist/stack.cjs.map +1 -0
- package/dist/stack.js +980 -0
- package/dist/stack.js.map +1 -0
- package/dist/sticky-header/StickyArea.d.ts +38 -0
- package/dist/sticky-header/index.d.ts +4 -4
- package/dist/sticky-header/types.d.ts +35 -22
- package/dist/sticky-header.cjs +1 -1
- package/dist/sticky-header.cjs.map +1 -1
- package/dist/sticky-header.js +65 -174
- package/dist/sticky-header.js.map +1 -1
- package/dist/styles-DPPuJ0sf.js +57 -0
- package/dist/styles-DPPuJ0sf.js.map +1 -0
- package/dist/styles-qf6ptVLD.cjs +2 -0
- package/dist/styles-qf6ptVLD.cjs.map +1 -0
- package/dist/useContentCache-CO3LYNmz.js +24 -0
- package/dist/useContentCache-CO3LYNmz.js.map +1 -0
- package/dist/useContentCache-DqXtLrLs.cjs +2 -0
- package/dist/useContentCache-DqXtLrLs.cjs.map +1 -0
- package/dist/useDocumentPointerEvents-CKdhGXd0.js +46 -0
- package/dist/useDocumentPointerEvents-CKdhGXd0.js.map +1 -0
- package/dist/useDocumentPointerEvents-ChqrKXDk.cjs +2 -0
- package/dist/useDocumentPointerEvents-ChqrKXDk.cjs.map +1 -0
- package/dist/useEffectEvent-Dp7HLCf0.js +13 -0
- package/dist/useEffectEvent-Dp7HLCf0.js.map +1 -0
- package/dist/useEffectEvent-huSsGUnl.cjs +2 -0
- package/dist/useEffectEvent-huSsGUnl.cjs.map +1 -0
- package/dist/useFloatingState-C4kRaW_R.cjs +2 -0
- package/dist/useFloatingState-C4kRaW_R.cjs.map +1 -0
- package/dist/useFloatingState-tEfA_wbc.js +74 -0
- package/dist/useFloatingState-tEfA_wbc.js.map +1 -0
- package/dist/window/index.d.ts +61 -0
- package/dist/window.cjs +2 -0
- package/dist/window.cjs.map +1 -0
- package/dist/window.js +149 -0
- package/dist/window.js.map +1 -0
- package/docs/design-tokens.md +405 -0
- package/package.json +29 -4
- package/src/PanelSystemContext.tsx +88 -0
- package/src/components/grid/GridLayerList.tsx +172 -0
- package/src/components/grid/GridLayerResizeHandles.tsx +145 -0
- package/src/components/grid/GridLayout.spec.tsx +743 -0
- package/src/components/grid/GridLayout.tsx +130 -0
- package/src/components/grid/GridTrackResizeHandle.tsx +87 -0
- package/src/components/paneling/FloatingPanelFrame.tsx +203 -0
- package/src/components/panels/DropSuggestOverlay.tsx +131 -0
- package/src/components/panels/PanelGroupView.tsx +112 -0
- package/src/components/pivot/PivotLayer.tsx +27 -0
- package/src/components/resizer/HorizontalDivider.tsx +52 -0
- package/src/components/resizer/ResizeHandle.tsx +118 -0
- package/src/components/tabs/TabBar.tsx +223 -0
- package/src/components/tabs/TabBarTab.tsx +133 -0
- package/src/components/tabs/TabDragOverlay.tsx +92 -0
- package/src/components/window/DialogOverlay.tsx +180 -0
- package/src/components/window/Drawer.tsx +282 -0
- package/src/components/window/DrawerLayers.tsx +58 -0
- package/src/components/window/FloatingWindow.tsx +95 -0
- package/src/components/window/PopupLayerPortal.tsx +218 -0
- package/src/config/PanelContentDeclaration.tsx +427 -0
- package/src/config/index.tsx +52 -0
- package/src/config/panelJsx.spec.tsx +54 -0
- package/src/config/panelJsxConfig.spec.tsx +54 -0
- package/src/config/panelJsxDrawer.spec.tsx +33 -0
- package/src/config/panelRouter.spec.ts +68 -0
- package/src/config/panelRouter.tsx +155 -0
- package/src/constants/styles.ts +261 -0
- package/src/demo/Layout.module.css +258 -0
- package/src/demo/Layout.tsx +176 -0
- package/src/demo/components/CodeBlock.module.css +54 -0
- package/src/demo/components/CodeBlock.tsx +34 -0
- package/src/demo/components/CodePreview.module.css +37 -0
- package/src/demo/components/CodePreview.tsx +31 -0
- package/src/demo/components/DataPreview.module.css +177 -0
- package/src/demo/components/DataPreview.tsx +115 -0
- package/src/demo/components/Story.module.css +68 -0
- package/src/demo/components/Story.tsx +54 -0
- package/src/demo/components/layout/CodePanel.module.css +183 -0
- package/src/demo/components/layout/CodePanel.tsx +149 -0
- package/src/demo/components/layout/DemoPage.module.css +60 -0
- package/src/demo/components/layout/DemoPage.tsx +56 -0
- package/src/demo/components/layout/SingleSamplePage.module.css +11 -0
- package/src/demo/components/layout/SingleSamplePage.tsx +35 -0
- package/src/demo/components/layout/SplitDemoLayout.module.css +107 -0
- package/src/demo/components/layout/SplitDemoLayout.tsx +218 -0
- package/src/demo/components/layout/index.ts +11 -0
- package/src/demo/components/tab-styles/ChromeTabBar.module.css +75 -0
- package/src/demo/components/tab-styles/ChromeTabBar.tsx +111 -0
- package/src/demo/components/tab-styles/GitHubTabBar.module.css +81 -0
- package/src/demo/components/tab-styles/GitHubTabBar.tsx +109 -0
- package/src/demo/components/tab-styles/VSCodeTabBar.module.css +78 -0
- package/src/demo/components/tab-styles/VSCodeTabBar.tsx +109 -0
- package/src/demo/components/tab-styles/index.ts +6 -0
- package/src/demo/components/ui/DemoButton.module.css +63 -0
- package/src/demo/components/ui/DemoButton.tsx +32 -0
- package/src/demo/components/ui/DemoCard.module.css +15 -0
- package/src/demo/components/ui/DemoCard.tsx +30 -0
- package/src/demo/components/ui/DemoContainer.module.css +17 -0
- package/src/demo/components/ui/DemoContainer.tsx +30 -0
- package/src/demo/components/ui/DemoPanel.module.css +23 -0
- package/src/demo/components/ui/DemoPanel.tsx +33 -0
- package/src/demo/components/ui/PanelText.module.css +18 -0
- package/src/demo/components/ui/PanelText.tsx +29 -0
- package/src/demo/components/ui/PanelTitle.module.css +18 -0
- package/src/demo/components/ui/PanelTitle.tsx +31 -0
- package/src/demo/contexts/TabbarDemoConfig.tsx +218 -0
- package/src/demo/demo.css +172 -0
- package/src/demo/hooks/useMedia.ts +41 -0
- package/src/demo/hooks/useShikiHighlight.ts +55 -0
- package/src/demo/index.tsx +293 -0
- package/src/demo/pages/Drawer/animations/index.tsx +22 -0
- package/src/demo/pages/Drawer/basics/index.tsx +17 -0
- package/src/demo/pages/Drawer/components/DrawerAnimations.module.css +125 -0
- package/src/demo/pages/Drawer/components/DrawerAnimations.tsx +118 -0
- package/src/demo/pages/Drawer/components/DrawerBasics.module.css +55 -0
- package/src/demo/pages/Drawer/components/DrawerBasics.tsx +76 -0
- package/src/demo/pages/Drawer/components/DrawerMenuLayout.module.css +332 -0
- package/src/demo/pages/Drawer/components/DrawerMenuLayout.tsx +199 -0
- package/src/demo/pages/Drawer/menu/index.tsx +17 -0
- package/src/demo/pages/FloatingPanelFrame/ResizableFloatingPanelsPreview.module.css +163 -0
- package/src/demo/pages/FloatingPanelFrame/ResizableFloatingPanelsPreview.tsx +234 -0
- package/src/demo/pages/FloatingPanelFrame/basic/index.tsx +17 -0
- package/src/demo/pages/FloatingPanelFrame/complex/index.tsx +26 -0
- package/src/demo/pages/FloatingPanelFrame/components/BasicPanel.module.css +16 -0
- package/src/demo/pages/FloatingPanelFrame/components/BasicPanel.tsx +24 -0
- package/src/demo/pages/FloatingPanelFrame/components/ComplexPanel.module.css +54 -0
- package/src/demo/pages/FloatingPanelFrame/components/ComplexPanel.tsx +67 -0
- package/src/demo/pages/FloatingPanelFrame/components/PanelWithControls.module.css +21 -0
- package/src/demo/pages/FloatingPanelFrame/components/PanelWithControls.tsx +41 -0
- package/src/demo/pages/FloatingPanelFrame/components/PanelWithMeta.module.css +5 -0
- package/src/demo/pages/FloatingPanelFrame/components/PanelWithMeta.tsx +43 -0
- package/src/demo/pages/FloatingPanelFrame/components/ScrollablePanel.module.css +11 -0
- package/src/demo/pages/FloatingPanelFrame/components/ScrollablePanel.tsx +42 -0
- package/src/demo/pages/FloatingPanelFrame/index.tsx +80 -0
- package/src/demo/pages/FloatingPanelFrame/scrollable/index.tsx +30 -0
- package/src/demo/pages/FloatingPanelFrame/with-controls/index.tsx +30 -0
- package/src/demo/pages/FloatingPanelFrame/with-meta/index.tsx +17 -0
- package/src/demo/pages/HorizontalDivider/components/PanelsWithRichContent.module.css +112 -0
- package/src/demo/pages/HorizontalDivider/components/PanelsWithRichContent.tsx +56 -0
- package/src/demo/pages/HorizontalDivider/components/SimpleResizablePanels.module.css +46 -0
- package/src/demo/pages/HorizontalDivider/components/SimpleResizablePanels.tsx +29 -0
- package/src/demo/pages/HorizontalDivider/components/ThreePanelLayout.module.css +54 -0
- package/src/demo/pages/HorizontalDivider/components/ThreePanelLayout.tsx +30 -0
- package/src/demo/pages/HorizontalDivider/index.module.css +14 -0
- package/src/demo/pages/HorizontalDivider/index.tsx +64 -0
- package/src/demo/pages/HorizontalDivider/panels-with-rich-content/index.tsx +21 -0
- package/src/demo/pages/HorizontalDivider/simple-resizable-panels/index.tsx +21 -0
- package/src/demo/pages/HorizontalDivider/three-panel-layout/index.tsx +21 -0
- package/src/demo/pages/PanelLayout/PanelLayoutDemo.module.css +174 -0
- package/src/demo/pages/PanelLayout/PanelLayoutDemo.tsx +248 -0
- package/src/demo/pages/PanelLayout/components/DashboardLayout.module.css +115 -0
- package/src/demo/pages/PanelLayout/components/DashboardLayout.tsx +124 -0
- package/src/demo/pages/PanelLayout/components/DraggableOverlays.module.css +101 -0
- package/src/demo/pages/PanelLayout/components/DraggableOverlays.tsx +122 -0
- package/src/demo/pages/PanelLayout/components/IDELayout.module.css +104 -0
- package/src/demo/pages/PanelLayout/components/IDELayout.tsx +143 -0
- package/src/demo/pages/PanelLayout/components/SimpleGrid.module.css +19 -0
- package/src/demo/pages/PanelLayout/components/SimpleGrid.tsx +62 -0
- package/src/demo/pages/PanelLayout/dashboard/index.tsx +22 -0
- package/src/demo/pages/PanelLayout/draggable-overlays/index.tsx +22 -0
- package/src/demo/pages/PanelLayout/ide-layout/index.tsx +22 -0
- package/src/demo/pages/PanelLayout/index.tsx +94 -0
- package/src/demo/pages/PanelLayout/simple-grid/index.tsx +22 -0
- package/src/demo/pages/PanelSystem/PanelSystemPreview.module.css +20 -0
- package/src/demo/pages/PanelSystem/PanelSystemPreview.tsx +101 -0
- package/src/demo/pages/PanelSystem/preview/index.tsx +18 -0
- package/src/demo/pages/PanelSystem/tabbar/index.tsx +129 -0
- package/src/demo/pages/Pivot/basics/index.tsx +17 -0
- package/src/demo/pages/Pivot/components/Pivot.module.css +278 -0
- package/src/demo/pages/Pivot/components/PivotBasics.tsx +103 -0
- package/src/demo/pages/Pivot/components/PivotSidebar.tsx +168 -0
- package/src/demo/pages/Pivot/components/PivotTabs.tsx +129 -0
- package/src/demo/pages/Pivot/components/PivotTransitions.tsx +120 -0
- package/src/demo/pages/Pivot/components/SwipePivot.module.css +114 -0
- package/src/demo/pages/Pivot/components/SwipePivot.tsx +193 -0
- package/src/demo/pages/Pivot/components/SwipeTabsPivot.module.css +203 -0
- package/src/demo/pages/Pivot/components/SwipeTabsPivot.tsx +289 -0
- package/src/demo/pages/Pivot/sidebar/index.tsx +17 -0
- package/src/demo/pages/Pivot/swipe/index.tsx +16 -0
- package/src/demo/pages/Pivot/swipe-debug/index.tsx +287 -0
- package/src/demo/pages/Pivot/swipe-tabs/index.tsx +15 -0
- package/src/demo/pages/Pivot/tabs/index.tsx +17 -0
- package/src/demo/pages/Pivot/transitions/index.tsx +17 -0
- package/src/demo/pages/ResizeHandle/both-directions/index.tsx +17 -0
- package/src/demo/pages/ResizeHandle/components/BothDirectionsDemo.module.css +72 -0
- package/src/demo/pages/ResizeHandle/components/BothDirectionsDemo.tsx +41 -0
- package/src/demo/pages/ResizeHandle/components/HorizontalResizeDemo.module.css +61 -0
- package/src/demo/pages/ResizeHandle/components/HorizontalResizeDemo.tsx +33 -0
- package/src/demo/pages/ResizeHandle/components/NestedPanelsDemo.module.css +83 -0
- package/src/demo/pages/ResizeHandle/components/NestedPanelsDemo.tsx +53 -0
- package/src/demo/pages/ResizeHandle/components/VerticalResizeDemo.module.css +68 -0
- package/src/demo/pages/ResizeHandle/components/VerticalResizeDemo.tsx +33 -0
- package/src/demo/pages/ResizeHandle/horizontal/index.tsx +17 -0
- package/src/demo/pages/ResizeHandle/index.module.css +11 -0
- package/src/demo/pages/ResizeHandle/index.tsx +71 -0
- package/src/demo/pages/ResizeHandle/nested-panels/index.tsx +17 -0
- package/src/demo/pages/ResizeHandle/vertical/index.tsx +17 -0
- package/src/demo/pages/ResponsiveLayout/adaptive-workspace/index.tsx +22 -0
- package/src/demo/pages/ResponsiveLayout/components/ResponsiveWorkspace.module.css +423 -0
- package/src/demo/pages/ResponsiveLayout/components/ResponsiveWorkspace.tsx +398 -0
- package/src/demo/pages/Stack/basics/index.tsx +22 -0
- package/src/demo/pages/Stack/components/Stack.module.css +234 -0
- package/src/demo/pages/Stack/components/StackBasics.tsx +217 -0
- package/src/demo/pages/Stack/components/StackTablet.module.css +299 -0
- package/src/demo/pages/Stack/components/StackTablet.tsx +401 -0
- package/src/demo/pages/Stack/tablet/index.tsx +22 -0
- package/src/demo/pages/StickyHeader/basics/index.tsx +17 -0
- package/src/demo/pages/StickyHeader/components/StickyHeader.module.css +219 -0
- package/src/demo/pages/StickyHeader/components/StickyHeaderBasics.tsx +103 -0
- package/src/demo/routes.tsx +193 -0
- package/src/demo/styles/animations.css +68 -0
- package/src/demo/styles/stack-themes.css +35 -0
- package/src/demo/utils/createPanelView.tsx +58 -0
- package/src/floating/index.ts +24 -0
- package/src/grid/index.ts +75 -0
- package/src/hooks/ContentCacheContext.tsx +87 -0
- package/src/hooks/gesture/presets.spec.ts +86 -0
- package/src/hooks/gesture/presets.ts +95 -0
- package/src/hooks/gesture/testing/createGestureSimulator.spec.ts +237 -0
- package/src/hooks/gesture/testing/createGestureSimulator.ts +310 -0
- package/src/hooks/gesture/thresholdValue.spec.ts +103 -0
- package/src/hooks/gesture/thresholdValue.ts +77 -0
- package/src/hooks/gesture/types.ts +290 -0
- package/src/hooks/gesture/useDirectionalLock.spec.ts +271 -0
- package/src/hooks/gesture/useDirectionalLock.ts +115 -0
- package/src/hooks/gesture/useEdgeSwipeInput.spec.ts +454 -0
- package/src/hooks/gesture/useEdgeSwipeInput.ts +131 -0
- package/src/hooks/gesture/useNativeGestureGuard.spec.ts +413 -0
- package/src/hooks/gesture/useNativeGestureGuard.ts +133 -0
- package/src/hooks/gesture/usePointerTracking.spec.ts +364 -0
- package/src/hooks/gesture/usePointerTracking.ts +134 -0
- package/src/hooks/gesture/useScrollBoundary.spec.ts +249 -0
- package/src/hooks/gesture/useScrollBoundary.ts +113 -0
- package/src/hooks/gesture/useSwipeInput.spec.ts +592 -0
- package/src/hooks/gesture/useSwipeInput.ts +310 -0
- package/src/hooks/gesture/utils.spec.ts +152 -0
- package/src/hooks/gesture/utils.ts +87 -0
- package/src/hooks/useAnimatedVisibility.spec.ts +257 -0
- package/src/hooks/useAnimatedVisibility.ts +146 -0
- package/src/hooks/useAnimationFrame.ts +200 -0
- package/src/hooks/useCSSMatrix.spec.ts +214 -0
- package/src/hooks/useCSSMatrix.ts +262 -0
- package/src/hooks/useClonedElementPreview.ts +28 -0
- package/src/hooks/useContainerScroll.ts +78 -0
- package/src/hooks/useContentCache.spec.tsx +232 -0
- package/src/hooks/useContentCache.tsx +127 -0
- package/src/hooks/useDocumentPointerEvents.ts +137 -0
- package/src/hooks/useDocumentScroll.ts +41 -0
- package/src/hooks/useEffectEvent.ts +40 -0
- package/src/hooks/useElementComponentWrapper.tsx +63 -0
- package/src/hooks/useIntersectionObserver.tsx +125 -0
- package/src/hooks/useIsomorphicLayoutEffect.ts +29 -0
- package/src/hooks/useResizeObserver.tsx +81 -0
- package/src/hooks/useScrollContainer.ts +79 -0
- package/src/hooks/useSnapAnimation.ts +128 -0
- package/src/hooks/useSwipeContentTransform.spec.ts +133 -0
- package/src/hooks/useSwipeContentTransform.ts +235 -0
- package/src/hooks/useTransitionState.ts +95 -0
- package/src/index.tsx +88 -0
- package/src/modules/grid/GridLayoutContext.tsx +57 -0
- package/src/modules/grid/LayerInstanceContext.tsx +56 -0
- package/src/modules/grid/resizeHandles.ts +157 -0
- package/src/modules/grid/trackUtils.ts +146 -0
- package/src/modules/grid/useGridPlacements.ts +143 -0
- package/src/modules/grid/useGridTracks.ts +156 -0
- package/src/modules/grid/useLayerDragHandle.ts +16 -0
- package/src/modules/grid/useLayerInteractions.tsx +850 -0
- package/src/modules/keybindings/KeybindingsProvider.tsx +111 -0
- package/src/modules/panels/dom/DomRegistry.tsx +94 -0
- package/src/modules/panels/index.ts +45 -0
- package/src/modules/panels/interactions/InteractionsContext.test.tsx +330 -0
- package/src/modules/panels/interactions/InteractionsContext.tsx +394 -0
- package/src/modules/panels/interactions/dnd.ts +28 -0
- package/src/modules/panels/keybindings/KeybindingsInstaller.tsx +15 -0
- package/src/modules/panels/layout/adapter.ts +124 -0
- package/src/modules/panels/rendering/ContentRegistry.spec.tsx +304 -0
- package/src/modules/panels/rendering/ContentRegistry.tsx +205 -0
- package/src/modules/panels/rendering/GroupContainer.tsx +65 -0
- package/src/modules/panels/rendering/RenderBridge.tsx +115 -0
- package/src/modules/panels/rendering/RenderContext.tsx +31 -0
- package/src/modules/panels/state/PanelSplitHandles.tsx +147 -0
- package/src/modules/panels/state/PanelSystemContext.splitLimits.spec.tsx +50 -0
- package/src/modules/panels/state/PanelSystemContext.tsx +289 -0
- package/src/modules/panels/state/StateContext.tsx +12 -0
- package/src/modules/panels/state/cleanup.ts +37 -0
- package/src/modules/panels/state/commands.ts +53 -0
- package/src/modules/panels/state/focus/Context.tsx +25 -0
- package/src/modules/panels/state/focus/logic.ts +57 -0
- package/src/modules/panels/state/groups/Context.tsx +25 -0
- package/src/modules/panels/state/groups/logic.ts +105 -0
- package/src/modules/panels/state/splitLimits.spec.ts +46 -0
- package/src/modules/panels/state/splitLimits.ts +90 -0
- package/src/modules/panels/state/state.spec.ts +49 -0
- package/src/modules/panels/state/tree/Context.tsx +24 -0
- package/src/modules/panels/state/tree/logic.spec.ts +34 -0
- package/src/modules/panels/state/tree/logic.ts +138 -0
- package/src/modules/panels/state/types.ts +142 -0
- package/src/modules/panels/system/PanelSystem.empty-tabbar.spec.tsx +53 -0
- package/src/modules/panels/system/PanelSystem.tab-click-activates.spec.tsx +44 -0
- package/src/modules/panels/system/PanelSystem.tab-reorder.spec.tsx +64 -0
- package/src/modules/panels/system/PanelSystem.tabs-no-dup.spec.tsx +57 -0
- package/src/modules/panels/system/PanelSystem.tsx +206 -0
- package/src/modules/pivot/PivotContent.spec.tsx +179 -0
- package/src/modules/pivot/PivotContent.tsx +77 -0
- package/src/modules/pivot/SwipePivotContent.debug.tmp.tsx +237 -0
- package/src/modules/pivot/SwipePivotContent.position.spec.tsx +167 -0
- package/src/modules/pivot/SwipePivotContent.spec.tsx +464 -0
- package/src/modules/pivot/SwipePivotContent.test.tsx +502 -0
- package/src/modules/pivot/SwipePivotContent.tsx +197 -0
- package/src/modules/pivot/SwipePivotTabBar.spec.tsx +865 -0
- package/src/modules/pivot/SwipePivotTabBar.tsx +523 -0
- package/src/modules/pivot/index.ts +8 -0
- package/src/modules/pivot/scaleInputState.spec.ts +210 -0
- package/src/modules/pivot/scaleInputState.ts +66 -0
- package/src/modules/pivot/types.ts +139 -0
- package/src/modules/pivot/usePivot.spec.ts +621 -0
- package/src/modules/pivot/usePivot.spec.tsx +186 -0
- package/src/modules/pivot/usePivot.tsx +345 -0
- package/src/modules/pivot/usePivotSwipeInput.spec.ts +649 -0
- package/src/modules/pivot/usePivotSwipeInput.ts +136 -0
- package/src/modules/resizer/useResizeDrag.ts +94 -0
- package/src/modules/stack/StackContent.spec.tsx +264 -0
- package/src/modules/stack/StackContent.tsx +111 -0
- package/src/modules/stack/SwipeStackContent.spec.tsx +1277 -0
- package/src/modules/stack/SwipeStackContent.tsx +356 -0
- package/src/modules/stack/SwipeStackOutlet.spec.tsx +252 -0
- package/src/modules/stack/SwipeStackOutlet.tsx +221 -0
- package/src/modules/stack/computeStackContentState.spec.ts +281 -0
- package/src/modules/stack/computeStackContentState.ts +304 -0
- package/src/modules/stack/computeSwipeStackTransform.spec.ts +186 -0
- package/src/modules/stack/computeSwipeStackTransform.ts +145 -0
- package/src/modules/stack/types.ts +226 -0
- package/src/modules/stack/useStackAnimationState.spec.ts +186 -0
- package/src/modules/stack/useStackAnimationState.ts +138 -0
- package/src/modules/stack/useStackNavigation.spec.ts +477 -0
- package/src/modules/stack/useStackNavigation.tsx +336 -0
- package/src/modules/stack/useStackSwipeInput.spec.ts +276 -0
- package/src/modules/stack/useStackSwipeInput.ts +139 -0
- package/src/modules/window/useDrawerState.ts +81 -0
- package/src/modules/window/useFloatingState.spec.ts +252 -0
- package/src/modules/window/useFloatingState.ts +141 -0
- package/src/panels/index.ts +119 -0
- package/src/pivot/index.ts +19 -0
- package/src/resizer/index.ts +68 -0
- package/src/stack/index.ts +91 -0
- package/src/sticky-header/StickyArea.tsx +221 -0
- package/src/sticky-header/index.ts +18 -0
- package/src/sticky-header/types.ts +68 -0
- package/src/types.ts +323 -0
- package/src/utils/CSSMatrix.ts +321 -0
- package/src/utils/css.ts +65 -0
- package/src/utils/dialogUtils.ts +43 -0
- package/src/utils/math.ts +18 -0
- package/src/utils/polyfills/createDialogPolyfill.ts +18 -0
- package/src/utils/typedActions.ts +103 -0
- package/src/vite-env.d.ts +6 -0
- package/src/window/index.ts +67 -0
- package/dist/GridLayout-BQQ63eA1.cjs +0 -2
- package/dist/GridLayout-BQQ63eA1.cjs.map +0 -1
- package/dist/GridLayout-CJTKq7Mp.js +0 -1465
- package/dist/GridLayout-CJTKq7Mp.js.map +0 -1
- package/dist/sticky-header/StickyHeader.d.ts +0 -53
- package/dist/styles-CA2_zLZt.js +0 -52
- package/dist/styles-CA2_zLZt.js.map +0 -1
- package/dist/styles-PsqGOEJP.cjs +0 -2
- package/dist/styles-PsqGOEJP.cjs.map +0 -1
- package/dist/usePivot-7ctin_P_.cjs +0 -2
- package/dist/usePivot-7ctin_P_.cjs.map +0 -1
- package/dist/usePivot-CgQxB8rc.js +0 -124
- package/dist/usePivot-CgQxB8rc.js.map +0 -1
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file FloatingPanelFrame with metadata sample
|
|
3
|
+
*/
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
import {
|
|
6
|
+
FloatingPanelFrame,
|
|
7
|
+
FloatingPanelHeader,
|
|
8
|
+
FloatingPanelTitle,
|
|
9
|
+
FloatingPanelMeta,
|
|
10
|
+
FloatingPanelContent,
|
|
11
|
+
} from "../../../../components/paneling/FloatingPanelFrame";
|
|
12
|
+
import styles from "./PanelWithMeta.module.css";
|
|
13
|
+
|
|
14
|
+
export const PanelWithMeta = () => (
|
|
15
|
+
<FloatingPanelFrame
|
|
16
|
+
style={{
|
|
17
|
+
width: "400px",
|
|
18
|
+
maxWidth: "100%",
|
|
19
|
+
boxShadow: "var(--rpl-demo-shadow-lg)",
|
|
20
|
+
borderRadius: "var(--rpl-demo-radius-lg)",
|
|
21
|
+
border: "1px solid var(--rpl-demo-sidebar-border)",
|
|
22
|
+
background: "#fff",
|
|
23
|
+
}}
|
|
24
|
+
>
|
|
25
|
+
<FloatingPanelHeader>
|
|
26
|
+
<FloatingPanelTitle>Settings</FloatingPanelTitle>
|
|
27
|
+
<FloatingPanelMeta>Last updated: 2 minutes ago</FloatingPanelMeta>
|
|
28
|
+
</FloatingPanelHeader>
|
|
29
|
+
<FloatingPanelContent>
|
|
30
|
+
<div className={styles.settingsContent}>
|
|
31
|
+
<label>
|
|
32
|
+
<input type="checkbox" /> Enable notifications
|
|
33
|
+
</label>
|
|
34
|
+
<label>
|
|
35
|
+
<input type="checkbox" defaultChecked /> Auto-save
|
|
36
|
+
</label>
|
|
37
|
+
<label>
|
|
38
|
+
<input type="checkbox" /> Dark mode
|
|
39
|
+
</label>
|
|
40
|
+
</div>
|
|
41
|
+
</FloatingPanelContent>
|
|
42
|
+
</FloatingPanelFrame>
|
|
43
|
+
);
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Scrollable FloatingPanelFrame sample
|
|
3
|
+
*/
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
import {
|
|
6
|
+
FloatingPanelCloseButton,
|
|
7
|
+
FloatingPanelFrame,
|
|
8
|
+
FloatingPanelHeader,
|
|
9
|
+
FloatingPanelTitle,
|
|
10
|
+
FloatingPanelControls,
|
|
11
|
+
FloatingPanelContent,
|
|
12
|
+
} from "../../../../components/paneling/FloatingPanelFrame";
|
|
13
|
+
import styles from "./ScrollablePanel.module.css";
|
|
14
|
+
|
|
15
|
+
export const ScrollablePanel: React.FC<{ onClose?: () => void }> = ({ onClose }) => (
|
|
16
|
+
<FloatingPanelFrame
|
|
17
|
+
style={{
|
|
18
|
+
width: "400px",
|
|
19
|
+
maxWidth: "100%",
|
|
20
|
+
maxHeight: "400px",
|
|
21
|
+
}}
|
|
22
|
+
>
|
|
23
|
+
<FloatingPanelHeader>
|
|
24
|
+
<FloatingPanelTitle>Long Article</FloatingPanelTitle>
|
|
25
|
+
<FloatingPanelControls>
|
|
26
|
+
<FloatingPanelCloseButton onClick={onClose} />
|
|
27
|
+
</FloatingPanelControls>
|
|
28
|
+
</FloatingPanelHeader>
|
|
29
|
+
<FloatingPanelContent style={{ overflow: "auto" }}>
|
|
30
|
+
<div className={styles.articleContent}>
|
|
31
|
+
<h3>Lorem Ipsum</h3>
|
|
32
|
+
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
|
|
33
|
+
<p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
|
|
34
|
+
<p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p>
|
|
35
|
+
<p>Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
|
|
36
|
+
<p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam.</p>
|
|
37
|
+
<p>Eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.</p>
|
|
38
|
+
<p>Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores.</p>
|
|
39
|
+
</div>
|
|
40
|
+
</FloatingPanelContent>
|
|
41
|
+
</FloatingPanelFrame >
|
|
42
|
+
);
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file FloatingPanelFrame component preview page
|
|
3
|
+
*/
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
import { Section, Story, StoryActionButton } from "../../components/Story";
|
|
6
|
+
import { CodePreview } from "../../components/CodePreview";
|
|
7
|
+
import { BasicPanel } from "./components/BasicPanel";
|
|
8
|
+
import BasicPanelSource from "./components/BasicPanel.tsx?raw";
|
|
9
|
+
import { PanelWithMeta } from "./components/PanelWithMeta";
|
|
10
|
+
import PanelWithMetaSource from "./components/PanelWithMeta.tsx?raw";
|
|
11
|
+
import { PanelWithControls } from "./components/PanelWithControls";
|
|
12
|
+
import PanelWithControlsSource from "./components/PanelWithControls.tsx?raw";
|
|
13
|
+
import { ComplexPanel } from "./components/ComplexPanel";
|
|
14
|
+
import ComplexPanelSource from "./components/ComplexPanel.tsx?raw";
|
|
15
|
+
import { ScrollablePanel } from "./components/ScrollablePanel";
|
|
16
|
+
import ScrollablePanelSource from "./components/ScrollablePanel.tsx?raw";
|
|
17
|
+
import { DemoPage } from "../../components/layout";
|
|
18
|
+
|
|
19
|
+
export const FloatingPanelFramePreview: React.FC = () => {
|
|
20
|
+
const [showPanel1, setShowPanel1] = React.useState(true);
|
|
21
|
+
const [showPanel2, setShowPanel2] = React.useState(true);
|
|
22
|
+
const [showPanel3, setShowPanel3] = React.useState(true);
|
|
23
|
+
|
|
24
|
+
return (
|
|
25
|
+
<DemoPage title="FloatingPanelFrame Components" padding="2rem">
|
|
26
|
+
<Section title="Basic Panel">
|
|
27
|
+
<Story
|
|
28
|
+
title="Simple Panel"
|
|
29
|
+
description="Basic floating panel with header, title, and content"
|
|
30
|
+
>
|
|
31
|
+
<BasicPanel />
|
|
32
|
+
</Story>
|
|
33
|
+
<CodePreview code={BasicPanelSource} title="BasicPanel.tsx" />
|
|
34
|
+
</Section>
|
|
35
|
+
|
|
36
|
+
<Section title="Panel with Meta Information">
|
|
37
|
+
<Story
|
|
38
|
+
title="Panel with Meta"
|
|
39
|
+
description="Panel with title and metadata"
|
|
40
|
+
>
|
|
41
|
+
<PanelWithMeta />
|
|
42
|
+
</Story>
|
|
43
|
+
<CodePreview code={PanelWithMetaSource} title="PanelWithMeta.tsx" />
|
|
44
|
+
</Section>
|
|
45
|
+
|
|
46
|
+
<Section title="Panel with Controls">
|
|
47
|
+
<Story
|
|
48
|
+
title="Panel with Action Buttons"
|
|
49
|
+
description="Panel with header controls"
|
|
50
|
+
actions={!showPanel1 ? <StoryActionButton onClick={() => setShowPanel1(true)}>Show Panel</StoryActionButton> : null}
|
|
51
|
+
>
|
|
52
|
+
{showPanel1 ? <PanelWithControls onClose={() => setShowPanel1(false)} /> : <p>Panel closed</p>}
|
|
53
|
+
</Story>
|
|
54
|
+
<CodePreview code={PanelWithControlsSource} title="PanelWithControls.tsx" />
|
|
55
|
+
</Section>
|
|
56
|
+
|
|
57
|
+
<Section title="Complex Panel">
|
|
58
|
+
<Story
|
|
59
|
+
title="Full Featured Panel"
|
|
60
|
+
description="Panel with all components: title, meta, controls, and rich content"
|
|
61
|
+
actions={!showPanel2 ? <StoryActionButton onClick={() => setShowPanel2(true)}>Show Panel</StoryActionButton> : null}
|
|
62
|
+
>
|
|
63
|
+
{showPanel2 ? <ComplexPanel onClose={() => setShowPanel2(false)} /> : <p>Panel closed</p>}
|
|
64
|
+
</Story>
|
|
65
|
+
<CodePreview code={ComplexPanelSource} title="ComplexPanel.tsx" />
|
|
66
|
+
</Section>
|
|
67
|
+
|
|
68
|
+
<Section title="Scrollable Content">
|
|
69
|
+
<Story
|
|
70
|
+
title="Long Content Panel"
|
|
71
|
+
description="Panel with scrollable content area"
|
|
72
|
+
actions={!showPanel3 ? <StoryActionButton onClick={() => setShowPanel3(true)}>Show Panel</StoryActionButton> : null}
|
|
73
|
+
>
|
|
74
|
+
{showPanel3 ? <ScrollablePanel onClose={() => setShowPanel3(false)} /> : <p>Panel closed</p>}
|
|
75
|
+
</Story>
|
|
76
|
+
<CodePreview code={ScrollablePanelSource} title="ScrollablePanel.tsx" />
|
|
77
|
+
</Section>
|
|
78
|
+
</DemoPage>
|
|
79
|
+
);
|
|
80
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file FloatingPanelFrame - Scrollable sample page
|
|
3
|
+
*/
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
import { ScrollablePanel } from "../components/ScrollablePanel";
|
|
6
|
+
import ScrollablePanelSource from "../components/ScrollablePanel.tsx?raw";
|
|
7
|
+
import { SingleSamplePage } from "../../../components/layout";
|
|
8
|
+
|
|
9
|
+
const Page: React.FC = () => {
|
|
10
|
+
const [open, setOpen] = React.useState(true);
|
|
11
|
+
|
|
12
|
+
const renderBody = (): React.ReactNode => {
|
|
13
|
+
if (open) {
|
|
14
|
+
return <ScrollablePanel onClose={() => { setOpen(false); }} />;
|
|
15
|
+
}
|
|
16
|
+
return <button onClick={() => { setOpen(true); }}>Show Panel</button>;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
return (
|
|
20
|
+
<SingleSamplePage
|
|
21
|
+
title="FloatingPanelFrame / Scrollable"
|
|
22
|
+
code={ScrollablePanelSource}
|
|
23
|
+
codeTitle="ScrollablePanel.tsx"
|
|
24
|
+
>
|
|
25
|
+
{renderBody()}
|
|
26
|
+
</SingleSamplePage>
|
|
27
|
+
);
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export default Page;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file FloatingPanelFrame - With Controls sample page
|
|
3
|
+
*/
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
import { PanelWithControls } from "../components/PanelWithControls";
|
|
6
|
+
import PanelWithControlsSource from "../components/PanelWithControls.tsx?raw";
|
|
7
|
+
import { SingleSamplePage } from "../../../components/layout";
|
|
8
|
+
|
|
9
|
+
const Page: React.FC = () => {
|
|
10
|
+
const [open, setOpen] = React.useState(true);
|
|
11
|
+
|
|
12
|
+
const renderBody = (): React.ReactNode => {
|
|
13
|
+
if (open) {
|
|
14
|
+
return <PanelWithControls onClose={() => { setOpen(false); }} />;
|
|
15
|
+
}
|
|
16
|
+
return <button onClick={() => { setOpen(true); }}>Show Panel</button>;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
return (
|
|
20
|
+
<SingleSamplePage
|
|
21
|
+
title="FloatingPanelFrame / With Controls"
|
|
22
|
+
code={PanelWithControlsSource}
|
|
23
|
+
codeTitle="PanelWithControls.tsx"
|
|
24
|
+
>
|
|
25
|
+
{renderBody()}
|
|
26
|
+
</SingleSamplePage>
|
|
27
|
+
);
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export default Page;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file FloatingPanelFrame - With Meta sample page
|
|
3
|
+
*/
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
import { PanelWithMeta } from "../components/PanelWithMeta";
|
|
6
|
+
import PanelWithMetaSource from "../components/PanelWithMeta.tsx?raw";
|
|
7
|
+
import { SingleSamplePage } from "../../../components/layout";
|
|
8
|
+
|
|
9
|
+
const Page: React.FC = () => {
|
|
10
|
+
return (
|
|
11
|
+
<SingleSamplePage title="FloatingPanelFrame / With Meta" code={PanelWithMetaSource} codeTitle="PanelWithMeta.tsx">
|
|
12
|
+
<PanelWithMeta />
|
|
13
|
+
</SingleSamplePage>
|
|
14
|
+
);
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export default Page;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
.demoContainer {
|
|
2
|
+
display: flex;
|
|
3
|
+
height: 300px;
|
|
4
|
+
border: 1px solid var(--rpl-demo-sidebar-border);
|
|
5
|
+
border-radius: var(--rpl-demo-radius-lg);
|
|
6
|
+
overflow: hidden;
|
|
7
|
+
box-shadow: var(--rpl-demo-shadow-md);
|
|
8
|
+
background: #fff;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.demoContainerTall {
|
|
12
|
+
height: 400px;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.sidebarPanel {
|
|
16
|
+
background: var(--rpl-demo-surface-secondary);
|
|
17
|
+
padding: var(--rpl-demo-space-lg);
|
|
18
|
+
overflow: auto;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.sidebarTitle {
|
|
22
|
+
margin-top: 0;
|
|
23
|
+
font-size: var(--rpl-demo-font-size-md);
|
|
24
|
+
font-weight: 600;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.panelInfo {
|
|
28
|
+
margin: 0;
|
|
29
|
+
font-size: var(--rpl-demo-font-size-sm);
|
|
30
|
+
color: var(--rpl-demo-text-secondary);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.sidebarNav {
|
|
34
|
+
display: flex;
|
|
35
|
+
flex-direction: column;
|
|
36
|
+
gap: 0.25rem;
|
|
37
|
+
margin-top: var(--rpl-demo-space-md);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.navLink {
|
|
41
|
+
padding: 0.5rem 0.75rem;
|
|
42
|
+
background: transparent;
|
|
43
|
+
border-radius: var(--rpl-demo-radius-md);
|
|
44
|
+
text-decoration: none;
|
|
45
|
+
color: var(--rpl-demo-text-secondary);
|
|
46
|
+
display: block;
|
|
47
|
+
font-size: var(--rpl-demo-font-size-sm);
|
|
48
|
+
transition: all 0.2s ease;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.navLink:hover {
|
|
52
|
+
background: rgba(0, 0, 0, 0.05);
|
|
53
|
+
color: var(--rpl-demo-text-primary);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.recentFiles {
|
|
57
|
+
margin-top: var(--rpl-demo-space-xl);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.recentFiles h5 {
|
|
61
|
+
margin-top: 0;
|
|
62
|
+
font-size: var(--rpl-demo-font-size-sm);
|
|
63
|
+
color: var(--rpl-demo-text-tertiary);
|
|
64
|
+
text-transform: uppercase;
|
|
65
|
+
letter-spacing: 0.05em;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.recentFiles ul {
|
|
69
|
+
font-size: var(--rpl-demo-font-size-sm);
|
|
70
|
+
padding-left: 1.25rem;
|
|
71
|
+
color: var(--rpl-demo-text-secondary);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.mainPanel {
|
|
75
|
+
flex: 1;
|
|
76
|
+
background: #fff;
|
|
77
|
+
padding: var(--rpl-demo-space-lg);
|
|
78
|
+
overflow: auto;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.mainTitle {
|
|
82
|
+
margin-top: 0;
|
|
83
|
+
font-size: var(--rpl-demo-font-size-lg);
|
|
84
|
+
font-weight: 700;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.cardList {
|
|
88
|
+
margin-top: var(--rpl-demo-space-lg);
|
|
89
|
+
display: flex;
|
|
90
|
+
flex-direction: column;
|
|
91
|
+
gap: var(--rpl-demo-space-md);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.card {
|
|
95
|
+
padding: var(--rpl-demo-space-md);
|
|
96
|
+
background: #fff;
|
|
97
|
+
border-radius: var(--rpl-demo-radius-md);
|
|
98
|
+
border: 1px solid var(--rpl-demo-sidebar-border);
|
|
99
|
+
box-shadow: var(--rpl-demo-shadow-sm);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.card h5 {
|
|
103
|
+
margin-top: 0;
|
|
104
|
+
margin-bottom: 0.5rem;
|
|
105
|
+
font-size: var(--rpl-demo-font-size-md);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.card p {
|
|
109
|
+
margin: 0;
|
|
110
|
+
font-size: var(--rpl-demo-font-size-sm);
|
|
111
|
+
color: var(--rpl-demo-text-secondary);
|
|
112
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Panels with rich content using HorizontalDivider
|
|
3
|
+
*/
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
import { HorizontalDivider } from "../../../../components/resizer/HorizontalDivider";
|
|
6
|
+
import styles from "./PanelsWithRichContent.module.css";
|
|
7
|
+
|
|
8
|
+
export const PanelsWithRichContent: React.FC = () => {
|
|
9
|
+
const [leftWidth, setLeftWidth] = React.useState(300);
|
|
10
|
+
|
|
11
|
+
const handleResize = React.useCallback((deltaX: number) => {
|
|
12
|
+
setLeftWidth((prev) => Math.max(150, Math.min(500, prev + deltaX)));
|
|
13
|
+
}, []);
|
|
14
|
+
|
|
15
|
+
return (
|
|
16
|
+
<div className={`${styles.demoContainer} ${styles.demoContainerTall}`}>
|
|
17
|
+
<div className={styles.sidebarPanel} style={{ width: `${leftWidth}px` }}>
|
|
18
|
+
<h4 className={styles.sidebarTitle}>Sidebar</h4>
|
|
19
|
+
<p className={styles.panelInfo}>Width: {leftWidth}px</p>
|
|
20
|
+
<nav className={styles.sidebarNav}>
|
|
21
|
+
<a href="#" className={styles.navLink}>Dashboard</a>
|
|
22
|
+
<a href="#" className={styles.navLink}>Projects</a>
|
|
23
|
+
<a href="#" className={styles.navLink}>Tasks</a>
|
|
24
|
+
<a href="#" className={styles.navLink}>Settings</a>
|
|
25
|
+
</nav>
|
|
26
|
+
<div className={styles.recentFiles}>
|
|
27
|
+
<h5>Recent Files</h5>
|
|
28
|
+
<ul>
|
|
29
|
+
<li>document.pdf</li>
|
|
30
|
+
<li>image.png</li>
|
|
31
|
+
<li>report.docx</li>
|
|
32
|
+
</ul>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
<HorizontalDivider onResize={handleResize} />
|
|
36
|
+
<div className={styles.mainPanel}>
|
|
37
|
+
<h4 className={styles.mainTitle}>Main Content</h4>
|
|
38
|
+
<p>This is the main content area. It contains the primary information and controls.</p>
|
|
39
|
+
<div className={styles.cardList}>
|
|
40
|
+
<div className={styles.card}>
|
|
41
|
+
<h5>Card 1</h5>
|
|
42
|
+
<p>Some content in a card</p>
|
|
43
|
+
</div>
|
|
44
|
+
<div className={styles.card}>
|
|
45
|
+
<h5>Card 2</h5>
|
|
46
|
+
<p>More content in another card</p>
|
|
47
|
+
</div>
|
|
48
|
+
<div className={styles.card}>
|
|
49
|
+
<h5>Card 3</h5>
|
|
50
|
+
<p>Even more content</p>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
);
|
|
56
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
.demoContainer {
|
|
2
|
+
display: flex;
|
|
3
|
+
height: 300px;
|
|
4
|
+
border: 1px solid var(--rpl-demo-sidebar-border);
|
|
5
|
+
border-radius: var(--rpl-demo-radius-lg);
|
|
6
|
+
overflow: hidden;
|
|
7
|
+
box-shadow: var(--rpl-demo-shadow-md);
|
|
8
|
+
background: #fff;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.leftPanel {
|
|
12
|
+
background: var(--rpl-demo-surface-secondary);
|
|
13
|
+
padding: var(--rpl-demo-space-lg);
|
|
14
|
+
display: flex;
|
|
15
|
+
flex-direction: column;
|
|
16
|
+
gap: var(--rpl-demo-space-sm);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.rightPanel {
|
|
20
|
+
flex: 1;
|
|
21
|
+
background: #fff;
|
|
22
|
+
padding: var(--rpl-demo-space-lg);
|
|
23
|
+
display: flex;
|
|
24
|
+
flex-direction: column;
|
|
25
|
+
gap: var(--rpl-demo-space-sm);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.panelTitle {
|
|
29
|
+
margin: 0;
|
|
30
|
+
font-size: var(--rpl-demo-font-size-md);
|
|
31
|
+
font-weight: 600;
|
|
32
|
+
color: var(--rpl-demo-text-primary);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.panelInfo {
|
|
36
|
+
margin: 0;
|
|
37
|
+
font-size: var(--rpl-demo-font-size-sm);
|
|
38
|
+
color: var(--rpl-demo-text-secondary);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.panelText {
|
|
42
|
+
margin: 0;
|
|
43
|
+
font-size: var(--rpl-demo-font-size-sm);
|
|
44
|
+
color: var(--rpl-demo-text-secondary);
|
|
45
|
+
line-height: 1.5;
|
|
46
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Simple resizable panels with HorizontalDivider
|
|
3
|
+
*/
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
import { HorizontalDivider } from "../../../../components/resizer/HorizontalDivider";
|
|
6
|
+
import styles from "./SimpleResizablePanels.module.css";
|
|
7
|
+
|
|
8
|
+
export const SimpleResizablePanels: React.FC = () => {
|
|
9
|
+
const [leftWidth, setLeftWidth] = React.useState(200);
|
|
10
|
+
|
|
11
|
+
const handleResize = React.useCallback((deltaX: number) => {
|
|
12
|
+
setLeftWidth((prev) => Math.max(100, Math.min(400, prev + deltaX)));
|
|
13
|
+
}, []);
|
|
14
|
+
|
|
15
|
+
return (
|
|
16
|
+
<div className={styles.demoContainer}>
|
|
17
|
+
<div className={styles.leftPanel} style={{ width: `${leftWidth}px` }}>
|
|
18
|
+
<h4 className={styles.panelTitle}>Left Panel</h4>
|
|
19
|
+
<p className={styles.panelInfo}>Width: {leftWidth}px</p>
|
|
20
|
+
<p className={styles.panelText}>This panel can be resized by dragging the divider.</p>
|
|
21
|
+
</div>
|
|
22
|
+
<HorizontalDivider onResize={handleResize} />
|
|
23
|
+
<div className={styles.rightPanel}>
|
|
24
|
+
<h4 className={styles.panelTitle}>Right Panel</h4>
|
|
25
|
+
<p className={styles.panelText}>This panel automatically fills the remaining space.</p>
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
);
|
|
29
|
+
};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
.demoContainer {
|
|
2
|
+
display: flex;
|
|
3
|
+
height: 300px;
|
|
4
|
+
border: 1px solid var(--rpl-demo-sidebar-border);
|
|
5
|
+
border-radius: var(--rpl-demo-radius-lg);
|
|
6
|
+
overflow: hidden;
|
|
7
|
+
box-shadow: var(--rpl-demo-shadow-md);
|
|
8
|
+
background: #fff;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.demoContainerMedium {
|
|
12
|
+
height: 350px;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.leftPanel {
|
|
16
|
+
background: var(--rpl-demo-surface-secondary);
|
|
17
|
+
padding: var(--rpl-demo-space-lg);
|
|
18
|
+
display: flex;
|
|
19
|
+
flex-direction: column;
|
|
20
|
+
gap: var(--rpl-demo-space-sm);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.panelTitle {
|
|
24
|
+
margin: 0;
|
|
25
|
+
font-size: var(--rpl-demo-font-size-md);
|
|
26
|
+
font-weight: 600;
|
|
27
|
+
color: var(--rpl-demo-text-primary);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.panelInfo {
|
|
31
|
+
margin: 0;
|
|
32
|
+
font-size: var(--rpl-demo-font-size-sm);
|
|
33
|
+
color: var(--rpl-demo-text-secondary);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.panelText {
|
|
37
|
+
margin: 0;
|
|
38
|
+
font-size: var(--rpl-demo-font-size-sm);
|
|
39
|
+
color: var(--rpl-demo-text-secondary);
|
|
40
|
+
line-height: 1.5;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.centerPanel {
|
|
44
|
+
flex: 1;
|
|
45
|
+
background: #fff;
|
|
46
|
+
padding: var(--rpl-demo-space-lg);
|
|
47
|
+
overflow: auto;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.centerTitle {
|
|
51
|
+
margin-top: 0;
|
|
52
|
+
font-size: var(--rpl-demo-font-size-md);
|
|
53
|
+
font-weight: 600;
|
|
54
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Three panel layout with HorizontalDivider
|
|
3
|
+
*/
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
import { HorizontalDivider } from "../../../../components/resizer/HorizontalDivider";
|
|
6
|
+
import styles from "./ThreePanelLayout.module.css";
|
|
7
|
+
|
|
8
|
+
export const ThreePanelLayout: React.FC = () => {
|
|
9
|
+
const [leftWidth, setLeftWidth] = React.useState(250);
|
|
10
|
+
|
|
11
|
+
const handleResize = React.useCallback((deltaX: number) => {
|
|
12
|
+
setLeftWidth((prev) => Math.max(100, Math.min(600, prev + deltaX)));
|
|
13
|
+
}, []);
|
|
14
|
+
|
|
15
|
+
return (
|
|
16
|
+
<div className={`${styles.demoContainer} ${styles.demoContainerMedium}`}>
|
|
17
|
+
<div className={styles.leftPanel} style={{ width: `${leftWidth}px` }}>
|
|
18
|
+
<h4 className={styles.panelTitle}>Left Panel</h4>
|
|
19
|
+
<p className={styles.panelInfo}>Width: {leftWidth}px</p>
|
|
20
|
+
<p className={styles.panelText}>This is the left panel. You can put navigation or tools here.</p>
|
|
21
|
+
</div>
|
|
22
|
+
<HorizontalDivider onResize={handleResize} />
|
|
23
|
+
<div className={styles.centerPanel}>
|
|
24
|
+
<h4 className={styles.centerTitle}>Center Panel</h4>
|
|
25
|
+
<p>This is the center panel with the main content.</p>
|
|
26
|
+
<p>It automatically fills the available space between the left and right panels.</p>
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
29
|
+
);
|
|
30
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file HorizontalDivider component preview page
|
|
3
|
+
*/
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
import { Section, Story } from "../../components/Story";
|
|
6
|
+
import { CodePreview } from "../../components/CodePreview";
|
|
7
|
+
import { SimpleResizablePanels } from "./components/SimpleResizablePanels";
|
|
8
|
+
import SimpleResizablePanelsSource from "./components/SimpleResizablePanels.tsx?raw";
|
|
9
|
+
import { PanelsWithRichContent } from "./components/PanelsWithRichContent";
|
|
10
|
+
import PanelsWithRichContentSource from "./components/PanelsWithRichContent.tsx?raw";
|
|
11
|
+
import { ThreePanelLayout } from "./components/ThreePanelLayout";
|
|
12
|
+
import ThreePanelLayoutSource from "./components/ThreePanelLayout.tsx?raw";
|
|
13
|
+
import { DemoPage } from "../../components/layout";
|
|
14
|
+
import styles from "./index.module.css";
|
|
15
|
+
|
|
16
|
+
export const HorizontalDividerPreview: React.FC = () => {
|
|
17
|
+
return (
|
|
18
|
+
<DemoPage title="HorizontalDivider Component" padding="2rem">
|
|
19
|
+
<Section title="Basic Usage">
|
|
20
|
+
<Story
|
|
21
|
+
title="Simple Resizable Panels"
|
|
22
|
+
description="Drag the divider to resize the left and right panels. Min width: 100px, Max width: 400px"
|
|
23
|
+
>
|
|
24
|
+
<SimpleResizablePanels />
|
|
25
|
+
</Story>
|
|
26
|
+
<CodePreview code={SimpleResizablePanelsSource} title="SimpleResizablePanels.tsx" />
|
|
27
|
+
</Section>
|
|
28
|
+
|
|
29
|
+
<Section title="With Content">
|
|
30
|
+
<Story
|
|
31
|
+
title="Panels with Rich Content"
|
|
32
|
+
description="Resize panels containing various content types. Min width: 150px, Max width: 500px"
|
|
33
|
+
>
|
|
34
|
+
<PanelsWithRichContent />
|
|
35
|
+
</Story>
|
|
36
|
+
<CodePreview code={PanelsWithRichContentSource} title="PanelsWithRichContent.tsx" />
|
|
37
|
+
</Section>
|
|
38
|
+
|
|
39
|
+
<Section title="Three-Panel Layout">
|
|
40
|
+
<Story
|
|
41
|
+
title="Multiple Dividers"
|
|
42
|
+
description="Use multiple dividers to create complex layouts. Each panel can be resized independently."
|
|
43
|
+
>
|
|
44
|
+
<ThreePanelLayout />
|
|
45
|
+
</Story>
|
|
46
|
+
<CodePreview code={ThreePanelLayoutSource} title="ThreePanelLayout.tsx" />
|
|
47
|
+
</Section>
|
|
48
|
+
|
|
49
|
+
<Section title="Interactive Demo">
|
|
50
|
+
<Story
|
|
51
|
+
title="Reset & Control"
|
|
52
|
+
description="Test the divider with additional controls"
|
|
53
|
+
>
|
|
54
|
+
<div className={styles.infoBox}>
|
|
55
|
+
<p>
|
|
56
|
+
<strong>Usage:</strong> Drag the vertical divider bars to resize the panels. The divider provides visual
|
|
57
|
+
feedback on hover and during dragging.
|
|
58
|
+
</p>
|
|
59
|
+
</div>
|
|
60
|
+
</Story>
|
|
61
|
+
</Section>
|
|
62
|
+
</DemoPage>
|
|
63
|
+
);
|
|
64
|
+
};
|