react-panel-layout 0.5.2 → 0.6.1
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-lLg-Lpg7.js → FloatingPanelFrame-3eU9AwPo.js} +11 -11
- package/dist/{FloatingPanelFrame-lLg-Lpg7.js.map → FloatingPanelFrame-3eU9AwPo.js.map} +1 -1
- package/dist/{FloatingPanelFrame-D9Cp2al1.cjs → FloatingPanelFrame-CEmXDvUA.cjs} +2 -2
- package/dist/{FloatingPanelFrame-D9Cp2al1.cjs.map → FloatingPanelFrame-CEmXDvUA.cjs.map} +1 -1
- package/dist/FloatingWindow-CUXnEtrb.js +827 -0
- package/dist/FloatingWindow-CUXnEtrb.js.map +1 -0
- package/dist/FloatingWindow-DMwyK0eK.cjs +2 -0
- package/dist/FloatingWindow-DMwyK0eK.cjs.map +1 -0
- package/dist/GridLayout-DKTg_N61.cjs +2 -0
- package/dist/GridLayout-DKTg_N61.cjs.map +1 -0
- package/dist/GridLayout-UWNxXw77.js +926 -0
- package/dist/GridLayout-UWNxXw77.js.map +1 -0
- package/dist/HorizontalDivider-DdxzfV0l.js +30 -0
- package/dist/HorizontalDivider-DdxzfV0l.js.map +1 -0
- package/dist/HorizontalDivider-_pgV4Mcv.cjs +2 -0
- package/dist/HorizontalDivider-_pgV4Mcv.cjs.map +1 -0
- package/dist/PanelSystem-BqUzNtf2.js +1946 -0
- package/dist/PanelSystem-BqUzNtf2.js.map +1 -0
- package/dist/PanelSystem-D603LKKv.cjs +3 -0
- package/dist/PanelSystem-D603LKKv.cjs.map +1 -0
- package/dist/ResizeHandle-CBcAS918.cjs +2 -0
- package/dist/ResizeHandle-CBcAS918.cjs.map +1 -0
- package/dist/ResizeHandle-CXjc1meV.js +119 -0
- package/dist/ResizeHandle-CXjc1meV.js.map +1 -0
- package/dist/SwipePivotTabBar-DWrCuwEI.js +411 -0
- package/dist/SwipePivotTabBar-DWrCuwEI.js.map +1 -0
- package/dist/SwipePivotTabBar-fjjXkpj7.cjs +2 -0
- package/dist/SwipePivotTabBar-fjjXkpj7.cjs.map +1 -0
- package/dist/components/gesture/SwipeSafeZone.d.ts +40 -0
- package/dist/components/window/Drawer.d.ts +3 -1
- package/dist/components/window/DrawerLayers.d.ts +1 -1
- package/dist/components/window/drawerStyles.d.ts +69 -0
- package/dist/components/window/drawerSwipeConfig.d.ts +29 -0
- package/dist/components/window/useDrawerSwipeTransform.d.ts +23 -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 +35 -4
- package/dist/dialog/index.d.ts +69 -0
- 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 +117 -0
- package/dist/hooks/gesture/thresholdValue.d.ts +44 -0
- package/dist/hooks/gesture/types.d.ts +297 -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 +59 -0
- package/dist/hooks/useAnimatedVisibility.d.ts +58 -0
- package/dist/hooks/useAnimationFrame.d.ts +86 -0
- package/dist/hooks/useOperationContinuity.d.ts +64 -0
- package/dist/hooks/useResizeObserver.d.ts +33 -1
- package/dist/hooks/useSharedElementTransition.d.ts +112 -0
- package/dist/hooks/useSnapAnimation.d.ts +54 -0
- package/dist/hooks/useSwipeContentTransform.d.ts +86 -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/dialog/AlertDialog.d.ts +9 -0
- package/dist/modules/dialog/DialogContainer.d.ts +37 -0
- package/dist/modules/dialog/Modal.d.ts +26 -0
- package/dist/modules/dialog/SwipeDialogContainer.d.ts +16 -0
- package/dist/modules/dialog/dialogAnimationUtils.d.ts +113 -0
- package/dist/modules/dialog/types.d.ts +183 -0
- package/dist/modules/dialog/useDialog.d.ts +39 -0
- package/dist/modules/dialog/useDialogContainer.d.ts +47 -0
- package/dist/modules/dialog/useDialogSwipeInput.d.ts +70 -0
- package/dist/modules/dialog/useDialogTransform.d.ts +82 -0
- package/dist/modules/drawer/types.d.ts +74 -0
- package/dist/modules/drawer/useDrawerSwipeInput.d.ts +24 -0
- 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 +92 -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 +66 -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 +721 -0
- package/dist/stack.js.map +1 -0
- package/dist/sticky-header/StickyArea.d.ts +38 -0
- package/dist/sticky-header/calculateStickyMetrics.d.ts +28 -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 +73 -174
- package/dist/sticky-header.js.map +1 -1
- package/dist/styles-NkjuMOVS.js +57 -0
- package/dist/styles-NkjuMOVS.js.map +1 -0
- package/dist/styles-qf6ptVLD.cjs +2 -0
- package/dist/styles-qf6ptVLD.cjs.map +1 -0
- package/dist/types.d.ts +16 -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-DXxw3qWj.js +54 -0
- package/dist/useDocumentPointerEvents-DXxw3qWj.js.map +1 -0
- package/dist/useDocumentPointerEvents-DxDSOtip.cjs +2 -0
- package/dist/useDocumentPointerEvents-DxDSOtip.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/useNativeGestureGuard-C7TSqEkr.cjs +2 -0
- package/dist/useNativeGestureGuard-C7TSqEkr.cjs.map +1 -0
- package/dist/useNativeGestureGuard-CGYo6O0r.js +347 -0
- package/dist/useNativeGestureGuard-CGYo6O0r.js.map +1 -0
- package/dist/window/index.d.ts +63 -0
- package/dist/window.cjs +2 -0
- package/dist/window.cjs.map +1 -0
- package/dist/window.js +160 -0
- package/dist/window.js.map +1 -0
- package/docs/design-tokens.md +405 -0
- package/package.json +34 -4
- package/src/PanelSystemContext.tsx +88 -0
- package/src/components/gesture/SwipeSafeZone.tsx +69 -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 +369 -0
- package/src/components/window/DrawerLayers.tsx +68 -0
- package/src/components/window/FloatingWindow.tsx +95 -0
- package/src/components/window/PopupLayerPortal.tsx +218 -0
- package/src/components/window/drawerStyles.spec.ts +263 -0
- package/src/components/window/drawerStyles.ts +228 -0
- package/src/components/window/drawerSwipeConfig.spec.ts +131 -0
- package/src/components/window/drawerSwipeConfig.ts +112 -0
- package/src/components/window/useDrawerSwipeTransform.spec.ts +234 -0
- package/src/components/window/useDrawerSwipeTransform.ts +129 -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 +280 -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/Dialog/alerts/index.tsx +22 -0
- package/src/demo/pages/Dialog/card/index.tsx +22 -0
- package/src/demo/pages/Dialog/components/AlertDialogDemo.tsx +124 -0
- package/src/demo/pages/Dialog/components/CardExpandDemo.module.css +243 -0
- package/src/demo/pages/Dialog/components/CardExpandDemo.tsx +204 -0
- package/src/demo/pages/Dialog/components/CustomAlertDialogDemo.tsx +219 -0
- package/src/demo/pages/Dialog/components/DialogDemos.module.css +77 -0
- package/src/demo/pages/Dialog/components/ModalBasics.tsx +45 -0
- package/src/demo/pages/Dialog/components/SwipeDialogDemo.module.css +77 -0
- package/src/demo/pages/Dialog/components/SwipeDialogDemo.tsx +181 -0
- package/src/demo/pages/Dialog/custom-alert/index.tsx +22 -0
- package/src/demo/pages/Dialog/modal/index.tsx +17 -0
- package/src/demo/pages/Dialog/swipe/index.tsx +22 -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/components/DrawerSwipe.module.css +316 -0
- package/src/demo/pages/Drawer/components/DrawerSwipe.tsx +178 -0
- package/src/demo/pages/Drawer/menu/index.tsx +17 -0
- package/src/demo/pages/Drawer/swipe/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 +320 -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.spec.tsx +152 -0
- package/src/demo/pages/Stack/components/StackBasics.tsx +301 -0
- package/src/demo/pages/Stack/components/StackTablet.module.css +299 -0
- package/src/demo/pages/Stack/components/StackTablet.spec.tsx +120 -0
- package/src/demo/pages/Stack/components/StackTablet.tsx +422 -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 +214 -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/dialog/index.ts +85 -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 +241 -0
- package/src/hooks/gesture/testing/createGestureSimulator.ts +385 -0
- package/src/hooks/gesture/thresholdValue.spec.ts +103 -0
- package/src/hooks/gesture/thresholdValue.ts +77 -0
- package/src/hooks/gesture/types.ts +367 -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 +462 -0
- package/src/hooks/gesture/useEdgeSwipeInput.ts +131 -0
- package/src/hooks/gesture/useNativeGestureGuard.spec.ts +473 -0
- package/src/hooks/gesture/useNativeGestureGuard.ts +135 -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 +178 -0
- package/src/hooks/useAnimatedVisibility.spec.ts +277 -0
- package/src/hooks/useAnimatedVisibility.ts +172 -0
- package/src/hooks/useAnimationFrame.ts +208 -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/useOperationContinuity.spec.ts +387 -0
- package/src/hooks/useOperationContinuity.ts +135 -0
- package/src/hooks/useResizeObserver.spec.tsx +277 -0
- package/src/hooks/useResizeObserver.tsx +150 -0
- package/src/hooks/useScrollContainer.ts +73 -0
- package/src/hooks/useSharedElementTransition.ts +333 -0
- package/src/hooks/useSnapAnimation.ts +128 -0
- package/src/hooks/useSwipeContentTransform.spec.ts +133 -0
- package/src/hooks/useSwipeContentTransform.ts +373 -0
- package/src/hooks/useTransitionState.ts +95 -0
- package/src/index.tsx +88 -0
- package/src/modules/dialog/AlertDialog.spec.tsx +387 -0
- package/src/modules/dialog/AlertDialog.tsx +221 -0
- package/src/modules/dialog/DialogContainer.spec.tsx +228 -0
- package/src/modules/dialog/DialogContainer.tsx +188 -0
- package/src/modules/dialog/Modal.spec.tsx +220 -0
- package/src/modules/dialog/Modal.tsx +182 -0
- package/src/modules/dialog/SwipeDialogContainer.tsx +208 -0
- package/src/modules/dialog/dialogAnimationUtils.spec.ts +253 -0
- package/src/modules/dialog/dialogAnimationUtils.ts +297 -0
- package/src/modules/dialog/types.ts +186 -0
- package/src/modules/dialog/useDialog.spec.tsx +447 -0
- package/src/modules/dialog/useDialog.ts +214 -0
- package/src/modules/dialog/useDialogContainer.spec.ts +331 -0
- package/src/modules/dialog/useDialogContainer.ts +150 -0
- package/src/modules/dialog/useDialogSwipeInput.spec.ts +157 -0
- package/src/modules/dialog/useDialogSwipeInput.ts +319 -0
- package/src/modules/dialog/useDialogTransform.spec.ts +370 -0
- package/src/modules/dialog/useDialogTransform.ts +407 -0
- package/src/modules/drawer/types.ts +102 -0
- package/src/modules/drawer/useDrawerSwipeInput.spec.ts +566 -0
- package/src/modules/drawer/useDrawerSwipeInput.ts +399 -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 +311 -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 +171 -0
- package/src/modules/pivot/SwipePivotContent.spec.tsx +494 -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 +882 -0
- package/src/modules/pivot/SwipePivotTabBar.tsx +583 -0
- package/src/modules/pivot/index.ts +8 -0
- package/src/modules/pivot/scaleInputState.spec.ts +219 -0
- package/src/modules/pivot/scaleInputState.ts +66 -0
- package/src/modules/pivot/types.ts +139 -0
- package/src/modules/pivot/usePivot.spec.ts +635 -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 +708 -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 +1564 -0
- package/src/modules/stack/SwipeStackContent.tsx +366 -0
- package/src/modules/stack/SwipeStackOutlet.spec.tsx +250 -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/swipeTransitionContinuity.spec.tsx +1133 -0
- package/src/modules/stack/types.ts +226 -0
- package/src/modules/stack/useStackAnimationState.spec.ts +188 -0
- package/src/modules/stack/useStackAnimationState.ts +143 -0
- package/src/modules/stack/useStackNavigation.spec.ts +672 -0
- package/src/modules/stack/useStackNavigation.tsx +393 -0
- package/src/modules/stack/useStackSwipeInput.spec.ts +309 -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 +193 -0
- package/src/sticky-header/calculateStickyMetrics.spec.ts +105 -0
- package/src/sticky-header/calculateStickyMetrics.ts +50 -0
- package/src/sticky-header/index.ts +18 -0
- package/src/sticky-header/types.ts +68 -0
- package/src/types.ts +341 -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 +69 -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,321 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file CSSMatrix - Immutable 4x4 matrix for CSS 3D transforms
|
|
3
|
+
*
|
|
4
|
+
* Each operation returns a new instance, preserving the original matrix.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* const mtrx = matrix().translate(0, 10);
|
|
8
|
+
* const a = mtrx.rotateX(Math.PI / 2);
|
|
9
|
+
* const b = mtrx.rotateY(Math.PI);
|
|
10
|
+
* // a and b are independent transformations from mtrx
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Matrix type with transformation methods
|
|
15
|
+
*/
|
|
16
|
+
export type CSSMatrix = {
|
|
17
|
+
readonly translate: (x?: number, y?: number, z?: number) => CSSMatrix;
|
|
18
|
+
readonly translate3d: (x: number, y: number, z: number) => CSSMatrix;
|
|
19
|
+
readonly translateX: (x: number) => CSSMatrix;
|
|
20
|
+
readonly translateY: (y: number) => CSSMatrix;
|
|
21
|
+
readonly translateZ: (z: number) => CSSMatrix;
|
|
22
|
+
readonly scale: (x?: number, y?: number, z?: number) => CSSMatrix;
|
|
23
|
+
readonly scale3d: (x: number, y: number, z: number) => CSSMatrix;
|
|
24
|
+
readonly scaleX: (x: number) => CSSMatrix;
|
|
25
|
+
readonly scaleY: (y: number) => CSSMatrix;
|
|
26
|
+
readonly scaleZ: (z: number) => CSSMatrix;
|
|
27
|
+
readonly rotateX: (angle: number) => CSSMatrix;
|
|
28
|
+
readonly rotateY: (angle: number) => CSSMatrix;
|
|
29
|
+
readonly rotateZ: (angle: number) => CSSMatrix;
|
|
30
|
+
readonly rotate: (angle: number, x: number, y: number, z: number) => CSSMatrix;
|
|
31
|
+
readonly rotate3d: (x: number, y: number, z: number, angle: number) => CSSMatrix;
|
|
32
|
+
readonly skew: (angleX?: number, angleY?: number) => CSSMatrix;
|
|
33
|
+
readonly skewX: (angle: number) => CSSMatrix;
|
|
34
|
+
readonly skewY: (angle: number) => CSSMatrix;
|
|
35
|
+
readonly perspective: (distance: number) => CSSMatrix;
|
|
36
|
+
readonly toCSS: () => string;
|
|
37
|
+
readonly toArray: () => readonly number[];
|
|
38
|
+
readonly toString: () => string;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Multiply two 4x4 matrices (a * b)
|
|
43
|
+
* Matrices are in column-major order
|
|
44
|
+
*/
|
|
45
|
+
const multiplyMatrices = (a: readonly number[], b: readonly number[]): number[] => {
|
|
46
|
+
const result = new Array(16);
|
|
47
|
+
|
|
48
|
+
for (let col = 0; col < 4; col++) {
|
|
49
|
+
for (let row = 0; row < 4; row++) {
|
|
50
|
+
result[col * 4 + row] =
|
|
51
|
+
a[0 * 4 + row] * b[col * 4 + 0] +
|
|
52
|
+
a[1 * 4 + row] * b[col * 4 + 1] +
|
|
53
|
+
a[2 * 4 + row] * b[col * 4 + 2] +
|
|
54
|
+
a[3 * 4 + row] * b[col * 4 + 3];
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return result;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Create a CSSMatrix object from raw values
|
|
63
|
+
* Values are stored in column-major order (OpenGL/CSS convention)
|
|
64
|
+
*/
|
|
65
|
+
const createMatrix = (values: readonly number[]): CSSMatrix => {
|
|
66
|
+
if (values.length !== 16) {
|
|
67
|
+
throw new Error('Matrix must have exactly 16 values');
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Freeze the values to ensure immutability
|
|
71
|
+
const m = Object.freeze([...values]);
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Helper to create a new matrix by multiplying with a transform matrix
|
|
75
|
+
*/
|
|
76
|
+
const applyTransform = (transformValues: number[]): CSSMatrix => {
|
|
77
|
+
const result = multiplyMatrices(m, transformValues);
|
|
78
|
+
return createMatrix(result);
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
return Object.freeze({
|
|
82
|
+
translate: (x = 0, y = 0, z = 0) => {
|
|
83
|
+
return applyTransform([
|
|
84
|
+
1, 0, 0, 0,
|
|
85
|
+
0, 1, 0, 0,
|
|
86
|
+
0, 0, 1, 0,
|
|
87
|
+
x, y, z, 1,
|
|
88
|
+
]);
|
|
89
|
+
},
|
|
90
|
+
|
|
91
|
+
translate3d: (x, y, z) => {
|
|
92
|
+
return applyTransform([
|
|
93
|
+
1, 0, 0, 0,
|
|
94
|
+
0, 1, 0, 0,
|
|
95
|
+
0, 0, 1, 0,
|
|
96
|
+
x, y, z, 1,
|
|
97
|
+
]);
|
|
98
|
+
},
|
|
99
|
+
|
|
100
|
+
translateX: (x) => {
|
|
101
|
+
return applyTransform([
|
|
102
|
+
1, 0, 0, 0,
|
|
103
|
+
0, 1, 0, 0,
|
|
104
|
+
0, 0, 1, 0,
|
|
105
|
+
x, 0, 0, 1,
|
|
106
|
+
]);
|
|
107
|
+
},
|
|
108
|
+
|
|
109
|
+
translateY: (y) => {
|
|
110
|
+
return applyTransform([
|
|
111
|
+
1, 0, 0, 0,
|
|
112
|
+
0, 1, 0, 0,
|
|
113
|
+
0, 0, 1, 0,
|
|
114
|
+
0, y, 0, 1,
|
|
115
|
+
]);
|
|
116
|
+
},
|
|
117
|
+
|
|
118
|
+
translateZ: (z) => {
|
|
119
|
+
return applyTransform([
|
|
120
|
+
1, 0, 0, 0,
|
|
121
|
+
0, 1, 0, 0,
|
|
122
|
+
0, 0, 1, 0,
|
|
123
|
+
0, 0, z, 1,
|
|
124
|
+
]);
|
|
125
|
+
},
|
|
126
|
+
|
|
127
|
+
scale: (x = 1, y = 1, z = 1) => {
|
|
128
|
+
return applyTransform([
|
|
129
|
+
x, 0, 0, 0,
|
|
130
|
+
0, y, 0, 0,
|
|
131
|
+
0, 0, z, 0,
|
|
132
|
+
0, 0, 0, 1,
|
|
133
|
+
]);
|
|
134
|
+
},
|
|
135
|
+
|
|
136
|
+
scale3d: (x, y, z) => {
|
|
137
|
+
return applyTransform([
|
|
138
|
+
x, 0, 0, 0,
|
|
139
|
+
0, y, 0, 0,
|
|
140
|
+
0, 0, z, 0,
|
|
141
|
+
0, 0, 0, 1,
|
|
142
|
+
]);
|
|
143
|
+
},
|
|
144
|
+
|
|
145
|
+
scaleX: (x) => {
|
|
146
|
+
return applyTransform([
|
|
147
|
+
x, 0, 0, 0,
|
|
148
|
+
0, 1, 0, 0,
|
|
149
|
+
0, 0, 1, 0,
|
|
150
|
+
0, 0, 0, 1,
|
|
151
|
+
]);
|
|
152
|
+
},
|
|
153
|
+
|
|
154
|
+
scaleY: (y) => {
|
|
155
|
+
return applyTransform([
|
|
156
|
+
1, 0, 0, 0,
|
|
157
|
+
0, y, 0, 0,
|
|
158
|
+
0, 0, 1, 0,
|
|
159
|
+
0, 0, 0, 1,
|
|
160
|
+
]);
|
|
161
|
+
},
|
|
162
|
+
|
|
163
|
+
scaleZ: (z) => {
|
|
164
|
+
return applyTransform([
|
|
165
|
+
1, 0, 0, 0,
|
|
166
|
+
0, 1, 0, 0,
|
|
167
|
+
0, 0, z, 0,
|
|
168
|
+
0, 0, 0, 1,
|
|
169
|
+
]);
|
|
170
|
+
},
|
|
171
|
+
|
|
172
|
+
rotateX: (angle) => {
|
|
173
|
+
const c = Math.cos(angle);
|
|
174
|
+
const s = Math.sin(angle);
|
|
175
|
+
return applyTransform([
|
|
176
|
+
1, 0, 0, 0,
|
|
177
|
+
0, c, s, 0,
|
|
178
|
+
0, -s, c, 0,
|
|
179
|
+
0, 0, 0, 1,
|
|
180
|
+
]);
|
|
181
|
+
},
|
|
182
|
+
|
|
183
|
+
rotateY: (angle) => {
|
|
184
|
+
const c = Math.cos(angle);
|
|
185
|
+
const s = Math.sin(angle);
|
|
186
|
+
return applyTransform([
|
|
187
|
+
c, 0, -s, 0,
|
|
188
|
+
0, 1, 0, 0,
|
|
189
|
+
s, 0, c, 0,
|
|
190
|
+
0, 0, 0, 1,
|
|
191
|
+
]);
|
|
192
|
+
},
|
|
193
|
+
|
|
194
|
+
rotateZ: (angle) => {
|
|
195
|
+
const c = Math.cos(angle);
|
|
196
|
+
const s = Math.sin(angle);
|
|
197
|
+
return applyTransform([
|
|
198
|
+
c, s, 0, 0,
|
|
199
|
+
-s, c, 0, 0,
|
|
200
|
+
0, 0, 1, 0,
|
|
201
|
+
0, 0, 0, 1,
|
|
202
|
+
]);
|
|
203
|
+
},
|
|
204
|
+
|
|
205
|
+
rotate: (angle, x, y, z) => {
|
|
206
|
+
// Normalize the axis
|
|
207
|
+
const len = Math.sqrt(x * x + y * y + z * z);
|
|
208
|
+
if (len === 0) {
|
|
209
|
+
return createMatrix(m);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
x /= len;
|
|
213
|
+
y /= len;
|
|
214
|
+
z /= len;
|
|
215
|
+
|
|
216
|
+
const c = Math.cos(angle);
|
|
217
|
+
const s = Math.sin(angle);
|
|
218
|
+
const t = 1 - c;
|
|
219
|
+
|
|
220
|
+
return applyTransform([
|
|
221
|
+
t * x * x + c, t * x * y + s * z, t * x * z - s * y, 0,
|
|
222
|
+
t * x * y - s * z, t * y * y + c, t * y * z + s * x, 0,
|
|
223
|
+
t * x * z + s * y, t * y * z - s * x, t * z * z + c, 0,
|
|
224
|
+
0, 0, 0, 1,
|
|
225
|
+
]);
|
|
226
|
+
},
|
|
227
|
+
|
|
228
|
+
rotate3d: (x, y, z, angle) => {
|
|
229
|
+
// Normalize the axis
|
|
230
|
+
const len = Math.sqrt(x * x + y * y + z * z);
|
|
231
|
+
if (len === 0) {
|
|
232
|
+
return createMatrix(m);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
x /= len;
|
|
236
|
+
y /= len;
|
|
237
|
+
z /= len;
|
|
238
|
+
|
|
239
|
+
const c = Math.cos(angle);
|
|
240
|
+
const s = Math.sin(angle);
|
|
241
|
+
const t = 1 - c;
|
|
242
|
+
|
|
243
|
+
return applyTransform([
|
|
244
|
+
t * x * x + c, t * x * y + s * z, t * x * z - s * y, 0,
|
|
245
|
+
t * x * y - s * z, t * y * y + c, t * y * z + s * x, 0,
|
|
246
|
+
t * x * z + s * y, t * y * z - s * x, t * z * z + c, 0,
|
|
247
|
+
0, 0, 0, 1,
|
|
248
|
+
]);
|
|
249
|
+
},
|
|
250
|
+
|
|
251
|
+
skew: (angleX = 0, angleY = 0) => {
|
|
252
|
+
const tanX = Math.tan(angleX);
|
|
253
|
+
const tanY = Math.tan(angleY);
|
|
254
|
+
return applyTransform([
|
|
255
|
+
1, tanY, 0, 0,
|
|
256
|
+
tanX, 1, 0, 0,
|
|
257
|
+
0, 0, 1, 0,
|
|
258
|
+
0, 0, 0, 1,
|
|
259
|
+
]);
|
|
260
|
+
},
|
|
261
|
+
|
|
262
|
+
skewX: (angle) => {
|
|
263
|
+
const tanX = Math.tan(angle);
|
|
264
|
+
return applyTransform([
|
|
265
|
+
1, 0, 0, 0,
|
|
266
|
+
tanX, 1, 0, 0,
|
|
267
|
+
0, 0, 1, 0,
|
|
268
|
+
0, 0, 0, 1,
|
|
269
|
+
]);
|
|
270
|
+
},
|
|
271
|
+
|
|
272
|
+
skewY: (angle) => {
|
|
273
|
+
const tanY = Math.tan(angle);
|
|
274
|
+
return applyTransform([
|
|
275
|
+
1, tanY, 0, 0,
|
|
276
|
+
0, 1, 0, 0,
|
|
277
|
+
0, 0, 1, 0,
|
|
278
|
+
0, 0, 0, 1,
|
|
279
|
+
]);
|
|
280
|
+
},
|
|
281
|
+
|
|
282
|
+
perspective: (distance) => {
|
|
283
|
+
if (distance === 0) {
|
|
284
|
+
throw new Error('Perspective distance cannot be zero');
|
|
285
|
+
}
|
|
286
|
+
return applyTransform([
|
|
287
|
+
1, 0, 0, 0,
|
|
288
|
+
0, 1, 0, 0,
|
|
289
|
+
0, 0, 1, -1 / distance,
|
|
290
|
+
0, 0, 0, 1,
|
|
291
|
+
]);
|
|
292
|
+
},
|
|
293
|
+
|
|
294
|
+
toCSS: () => {
|
|
295
|
+
return `matrix3d(${m.join(', ')})`;
|
|
296
|
+
},
|
|
297
|
+
|
|
298
|
+
toArray: () => m,
|
|
299
|
+
|
|
300
|
+
toString: () => {
|
|
301
|
+
return [
|
|
302
|
+
`[${m[0]}, ${m[4]}, ${m[8]}, ${m[12]}]`,
|
|
303
|
+
`[${m[1]}, ${m[5]}, ${m[9]}, ${m[13]}]`,
|
|
304
|
+
`[${m[2]}, ${m[6]}, ${m[10]}, ${m[14]}]`,
|
|
305
|
+
`[${m[3]}, ${m[7]}, ${m[11]}, ${m[15]}]`,
|
|
306
|
+
].join('\n');
|
|
307
|
+
},
|
|
308
|
+
});
|
|
309
|
+
};
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* Factory function to create a new identity matrix
|
|
313
|
+
*/
|
|
314
|
+
export const matrix = (): CSSMatrix => {
|
|
315
|
+
return createMatrix([
|
|
316
|
+
1, 0, 0, 0,
|
|
317
|
+
0, 1, 0, 0,
|
|
318
|
+
0, 0, 1, 0,
|
|
319
|
+
0, 0, 0, 1,
|
|
320
|
+
]);
|
|
321
|
+
};
|
package/src/utils/css.ts
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Generic CSS parsing and measurement utilities.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
export type ParsedGap = {
|
|
6
|
+
rowGap: number;
|
|
7
|
+
columnGap: number;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Parses a CSS gap value string into row and column gap numbers.
|
|
12
|
+
* Supports single value (applied to both) or two values (row column).
|
|
13
|
+
* Only handles px units; other units return 0.
|
|
14
|
+
*/
|
|
15
|
+
export const parseGapValue = (gapValue?: string): ParsedGap => {
|
|
16
|
+
if (!gapValue) {
|
|
17
|
+
return { rowGap: 0, columnGap: 0 };
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const tokens = gapValue
|
|
21
|
+
.split(/\s+/)
|
|
22
|
+
.map((token) => token.trim())
|
|
23
|
+
.filter(Boolean);
|
|
24
|
+
|
|
25
|
+
const parseToken = (token: string): number => {
|
|
26
|
+
const match = token.match(/^(-?\d+(?:\.\d+)?)px$/);
|
|
27
|
+
if (!match) {
|
|
28
|
+
return 0;
|
|
29
|
+
}
|
|
30
|
+
return Number.parseFloat(match[1]);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
if (tokens.length === 1) {
|
|
34
|
+
const parsed = parseToken(tokens[0]);
|
|
35
|
+
return { rowGap: parsed, columnGap: parsed };
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return {
|
|
39
|
+
rowGap: parseToken(tokens[0]),
|
|
40
|
+
columnGap: parseToken(tokens[1]),
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export type GridDirection = "col" | "row";
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Measures actual rendered grid track sizes from computed style.
|
|
48
|
+
* Returns pixel values parsed from gridTemplateColumns or gridTemplateRows.
|
|
49
|
+
*/
|
|
50
|
+
export const measureGridTrackSizes = (
|
|
51
|
+
containerEl: HTMLElement | null,
|
|
52
|
+
direction: GridDirection,
|
|
53
|
+
): number[] => {
|
|
54
|
+
if (!containerEl) {
|
|
55
|
+
return [];
|
|
56
|
+
}
|
|
57
|
+
const style = getComputedStyle(containerEl);
|
|
58
|
+
const template = direction === "col" ? style.gridTemplateColumns : style.gridTemplateRows;
|
|
59
|
+
|
|
60
|
+
// Computed style returns resolved pixel values like "370px 500px"
|
|
61
|
+
return template
|
|
62
|
+
.split(/\s+/)
|
|
63
|
+
.map((s) => parseFloat(s))
|
|
64
|
+
.filter((n) => !Number.isNaN(n));
|
|
65
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Dialog positioning utilities
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
export type ViewportInfo = {
|
|
6
|
+
width: number;
|
|
7
|
+
height: number;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Get viewport dimensions
|
|
12
|
+
*/
|
|
13
|
+
export const getViewportInfo = (): ViewportInfo => {
|
|
14
|
+
if (typeof window === "undefined") {
|
|
15
|
+
return { width: 0, height: 0 };
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return {
|
|
19
|
+
width: window.innerWidth,
|
|
20
|
+
height: window.innerHeight,
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Calculate context menu position to keep it within viewport
|
|
26
|
+
*/
|
|
27
|
+
export const calculateContextMenuPosition = (
|
|
28
|
+
anchorX: number,
|
|
29
|
+
anchorY: number,
|
|
30
|
+
menuWidth: number,
|
|
31
|
+
menuHeight: number,
|
|
32
|
+
viewport: ViewportInfo,
|
|
33
|
+
): { x: number; y: number } => {
|
|
34
|
+
// Adjust horizontal position if menu would overflow
|
|
35
|
+
const x =
|
|
36
|
+
anchorX + menuWidth > viewport.width ? Math.max(0, viewport.width - menuWidth) : anchorX;
|
|
37
|
+
|
|
38
|
+
// Adjust vertical position if menu would overflow
|
|
39
|
+
const y =
|
|
40
|
+
anchorY + menuHeight > viewport.height ? Math.max(0, viewport.height - menuHeight) : anchorY;
|
|
41
|
+
|
|
42
|
+
return { x, y };
|
|
43
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Primitive math helpers shared across modules.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
export const clampNumber = (
|
|
6
|
+
value: number,
|
|
7
|
+
min: number = Number.NEGATIVE_INFINITY,
|
|
8
|
+
max: number = Number.POSITIVE_INFINITY,
|
|
9
|
+
): number => {
|
|
10
|
+
return Math.min(Math.max(value, min), max);
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export const toFiniteNumberOr = (value: number | undefined, fallback: number): number => {
|
|
14
|
+
if (typeof value !== "number" || !Number.isFinite(value)) {
|
|
15
|
+
return fallback;
|
|
16
|
+
}
|
|
17
|
+
return value;
|
|
18
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Dialog polyfill for browsers that don't support <dialog> element natively
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Ensure dialog polyfill is loaded if needed
|
|
7
|
+
* This is a placeholder - in production you might want to use a real polyfill like dialog-polyfill
|
|
8
|
+
*/
|
|
9
|
+
export const ensureDialogPolyfill = (): void => {
|
|
10
|
+
// Check if browser supports <dialog> element
|
|
11
|
+
if (typeof window === "undefined") {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// Modern browsers already support dialog element
|
|
16
|
+
// If you need to support older browsers, you can load a polyfill here
|
|
17
|
+
// For now, we assume modern browser support
|
|
18
|
+
};
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any -- Generic action helpers rely on 'any' to avoid over-constraining payload creators */
|
|
2
|
+
/**
|
|
3
|
+
* @file Utilities for defining typed action creators and reducer handler maps without external dependencies.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export type AnyAction = { type: string };
|
|
7
|
+
|
|
8
|
+
export type AnyActionCreator = {
|
|
9
|
+
(...args: any[]): AnyAction;
|
|
10
|
+
readonly type: string;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
type PayloadCreator = (...args: any[]) => any;
|
|
14
|
+
|
|
15
|
+
type ActionFromPayload<Type extends string, Creator extends PayloadCreator> =
|
|
16
|
+
ReturnType<Creator> extends undefined | void
|
|
17
|
+
? { type: Type }
|
|
18
|
+
: { type: Type; payload: Exclude<ReturnType<Creator>, undefined> };
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Creates a typed action creator with an attached literal `type` property.
|
|
22
|
+
*/
|
|
23
|
+
export function createAction<Type extends string>(type: Type): (() => { type: Type }) & { readonly type: Type };
|
|
24
|
+
export function createAction<Type extends string, Creator extends PayloadCreator>(
|
|
25
|
+
type: Type,
|
|
26
|
+
payloadCreator: Creator,
|
|
27
|
+
): ((...args: Parameters<Creator>) => ActionFromPayload<Type, Creator>) & { readonly type: Type };
|
|
28
|
+
export function createAction<Type extends string, Creator extends PayloadCreator>(
|
|
29
|
+
type: Type,
|
|
30
|
+
payloadCreator?: Creator,
|
|
31
|
+
) {
|
|
32
|
+
if (!payloadCreator) {
|
|
33
|
+
const actionCreator = (() => ({ type }) as const) as (() => { type: Type }) & { readonly type: Type };
|
|
34
|
+
Object.defineProperty(actionCreator, "type", {
|
|
35
|
+
value: type,
|
|
36
|
+
writable: false,
|
|
37
|
+
enumerable: true,
|
|
38
|
+
});
|
|
39
|
+
return actionCreator;
|
|
40
|
+
}
|
|
41
|
+
const actionCreator = ((...args: Parameters<Creator>) => {
|
|
42
|
+
const payload = payloadCreator(...args);
|
|
43
|
+
if (typeof payload === "undefined") {
|
|
44
|
+
return { type } as const;
|
|
45
|
+
}
|
|
46
|
+
return { type, payload } as const;
|
|
47
|
+
}) as ((...args: Parameters<Creator>) => ActionFromPayload<Type, Creator>) & { readonly type: Type };
|
|
48
|
+
Object.defineProperty(actionCreator, "type", {
|
|
49
|
+
value: type,
|
|
50
|
+
writable: false,
|
|
51
|
+
enumerable: true,
|
|
52
|
+
});
|
|
53
|
+
return actionCreator;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export type ActionCreatorsMap = Record<string, AnyActionCreator>;
|
|
57
|
+
|
|
58
|
+
export type ActionUnion<Creators extends ActionCreatorsMap> = ReturnType<Creators[keyof Creators]>;
|
|
59
|
+
|
|
60
|
+
export type CaseReducer<State, Action extends AnyAction, Extra> = (state: State, action: Action, extra: Extra) => State;
|
|
61
|
+
|
|
62
|
+
export type BoundActionCreators<Creators extends ActionCreatorsMap> = {
|
|
63
|
+
[Key in keyof Creators]: (...args: Parameters<Creators[Key]>) => ReturnType<Creators[Key]>;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
export const bindActionCreators = <Creators extends ActionCreatorsMap>(
|
|
67
|
+
creators: Creators,
|
|
68
|
+
dispatch: (action: ActionUnion<Creators>) => unknown,
|
|
69
|
+
): BoundActionCreators<Creators> => {
|
|
70
|
+
const bound = {} as BoundActionCreators<Creators>;
|
|
71
|
+
(Object.keys(creators) as Array<keyof Creators>).forEach((key) => {
|
|
72
|
+
const creator = creators[key];
|
|
73
|
+
bound[key] = ((...args: Parameters<typeof creator>) => {
|
|
74
|
+
const action = creator(...args);
|
|
75
|
+
dispatch(action as ActionUnion<Creators>);
|
|
76
|
+
return action;
|
|
77
|
+
}) as BoundActionCreators<Creators>[keyof Creators];
|
|
78
|
+
});
|
|
79
|
+
return bound;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export const createActionHandlerMap = <State, Creators extends ActionCreatorsMap, Extra = undefined>(
|
|
83
|
+
creators: Creators,
|
|
84
|
+
handlers: {
|
|
85
|
+
[Key in keyof Creators]?: CaseReducer<State, ReturnType<Creators[Key]>, Extra>;
|
|
86
|
+
},
|
|
87
|
+
): Record<string, CaseReducer<State, ReturnType<Creators[keyof Creators]>, Extra>> => {
|
|
88
|
+
const map: Record<string, CaseReducer<State, ReturnType<Creators[keyof Creators]>, Extra>> = {};
|
|
89
|
+
|
|
90
|
+
(Object.keys(handlers) as Array<keyof Creators>).forEach((key) => {
|
|
91
|
+
const handler = handlers[key];
|
|
92
|
+
if (!handler) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const creator = creators[key];
|
|
96
|
+
if (!creator) {
|
|
97
|
+
throw new Error(`Missing action creator for key "${String(key)}"`);
|
|
98
|
+
}
|
|
99
|
+
map[creator.type] = handler as CaseReducer<State, ReturnType<Creators[keyof Creators]>, Extra>;
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
return map;
|
|
103
|
+
};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Window entry point - Floating window and drawer components
|
|
3
|
+
* @packageDocumentation
|
|
4
|
+
*
|
|
5
|
+
* This is a subpath export entry point for `react-panel-layout/window`.
|
|
6
|
+
*
|
|
7
|
+
* ## Overview
|
|
8
|
+
* Window provides floating panels, drawers, and dialog overlays for modal
|
|
9
|
+
* and non-modal UI patterns. Supports draggable windows, slide-in drawers,
|
|
10
|
+
* and popup portals.
|
|
11
|
+
*
|
|
12
|
+
* ## Installation
|
|
13
|
+
* ```ts
|
|
14
|
+
* import { Drawer, FloatingWindow, useDrawerState } from "react-panel-layout/window";
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* ## Drawer Usage
|
|
18
|
+
* ```tsx
|
|
19
|
+
* function App() {
|
|
20
|
+
* const [isOpen, setIsOpen] = useState(false);
|
|
21
|
+
*
|
|
22
|
+
* return (
|
|
23
|
+
* <>
|
|
24
|
+
* <button onClick={() => setIsOpen(true)}>Open Drawer</button>
|
|
25
|
+
* <Drawer
|
|
26
|
+
* id="settings"
|
|
27
|
+
* config={{ anchor: 'right', header: { title: 'Settings' } }}
|
|
28
|
+
* isOpen={isOpen}
|
|
29
|
+
* onClose={() => setIsOpen(false)}
|
|
30
|
+
* >
|
|
31
|
+
* <SettingsPanel />
|
|
32
|
+
* </Drawer>
|
|
33
|
+
* </>
|
|
34
|
+
* );
|
|
35
|
+
* }
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* ## Floating Window Usage
|
|
39
|
+
* ```tsx
|
|
40
|
+
* <FloatingWindow
|
|
41
|
+
* id="inspector"
|
|
42
|
+
* config={{
|
|
43
|
+
* draggable: true,
|
|
44
|
+
* chrome: true,
|
|
45
|
+
* header: { title: 'Inspector', showCloseButton: true },
|
|
46
|
+
* }}
|
|
47
|
+
* onClose={handleClose}
|
|
48
|
+
* >
|
|
49
|
+
* <InspectorContent />
|
|
50
|
+
* </FloatingWindow>
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
|
|
54
|
+
// Components
|
|
55
|
+
export { FloatingWindow } from "../components/window/FloatingWindow.js";
|
|
56
|
+
export { Drawer } from "../components/window/Drawer.js";
|
|
57
|
+
export { DrawerLayers } from "../components/window/DrawerLayers.js";
|
|
58
|
+
export { DialogOverlay } from "../components/window/DialogOverlay.js";
|
|
59
|
+
export { PopupLayerPortal } from "../components/window/PopupLayerPortal.js";
|
|
60
|
+
export { SwipeSafeZone } from "../components/gesture/SwipeSafeZone.js";
|
|
61
|
+
|
|
62
|
+
// Hooks
|
|
63
|
+
export { useFloatingState } from "../modules/window/useFloatingState.js";
|
|
64
|
+
export { useDrawerState } from "../modules/window/useDrawerState.js";
|
|
65
|
+
|
|
66
|
+
// Types
|
|
67
|
+
export type { FloatingWindowProps } from "../components/window/FloatingWindow.js";
|
|
68
|
+
export type { DrawerProps } from "../components/window/Drawer.js";
|
|
69
|
+
export type { SwipeSafeZoneProps } from "../components/gesture/SwipeSafeZone.js";
|