react-panel-layout 0.6.0 → 0.7.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-SgYLc6Ud.js → FloatingPanelFrame-3eU9AwPo.js} +2 -2
- package/dist/{FloatingPanelFrame-SgYLc6Ud.js.map → FloatingPanelFrame-3eU9AwPo.js.map} +1 -1
- package/dist/FloatingWindow-Bw2djgpz.js +1542 -0
- package/dist/FloatingWindow-Bw2djgpz.js.map +1 -0
- package/dist/FloatingWindow-Cvyokf0m.cjs +2 -0
- package/dist/FloatingWindow-Cvyokf0m.cjs.map +1 -0
- package/dist/GridLayout-B4aCqSyd.js +947 -0
- package/dist/{GridLayout-BltqeCPK.js.map → GridLayout-B4aCqSyd.js.map} +1 -1
- package/dist/GridLayout-DNOClFzz.cjs +2 -0
- package/dist/{GridLayout-B4VRsC0r.cjs.map → GridLayout-DNOClFzz.cjs.map} +1 -1
- package/dist/{HorizontalDivider-WF1k_qND.js → HorizontalDivider-DdxzfV0l.js} +3 -3
- package/dist/{HorizontalDivider-WF1k_qND.js.map → HorizontalDivider-DdxzfV0l.js.map} +1 -1
- package/dist/{HorizontalDivider-B5Z-KZLk.cjs → HorizontalDivider-_pgV4Mcv.cjs} +2 -2
- package/dist/{HorizontalDivider-B5Z-KZLk.cjs.map → HorizontalDivider-_pgV4Mcv.cjs.map} +1 -1
- package/dist/PanelSystem-B8Igvnb2.cjs +3 -0
- package/dist/PanelSystem-B8Igvnb2.cjs.map +1 -0
- package/dist/{PanelSystem-Dr1TBhxM.js → PanelSystem-DDUSFjXD.js} +209 -248
- package/dist/PanelSystem-DDUSFjXD.js.map +1 -0
- package/dist/ResizeHandle-CBcAS918.cjs +2 -0
- package/dist/{ResizeHandle-CScipO5l.cjs.map → ResizeHandle-CBcAS918.cjs.map} +1 -1
- package/dist/{ResizeHandle-CdA_JYfN.js → ResizeHandle-CXjc1meV.js} +28 -29
- package/dist/{ResizeHandle-CdA_JYfN.js.map → ResizeHandle-CXjc1meV.js.map} +1 -1
- 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 +4 -1
- package/dist/components/window/DrawerLayers.d.ts +1 -1
- package/dist/components/window/DrawerRevealContext.d.ts +61 -0
- package/dist/components/window/drawerRevealAnimationUtils.d.ts +212 -0
- package/dist/components/window/drawerStyles.d.ts +74 -0
- package/dist/components/window/drawerSwipeConfig.d.ts +29 -0
- package/dist/components/window/useDrawerSwipeTransform.d.ts +29 -0
- package/dist/components/window/useDrawerTransform.d.ts +68 -0
- package/dist/components/window/useRevealDrawerTransform.d.ts +56 -0
- package/dist/config.cjs +1 -1
- package/dist/config.cjs.map +1 -1
- package/dist/config.js +9 -8
- package/dist/config.js.map +1 -1
- package/dist/constants/styles.d.ts +17 -0
- package/dist/dialog/index.d.ts +69 -0
- package/dist/floating.js +1 -1
- package/dist/grid.cjs +1 -1
- package/dist/grid.js +2 -2
- package/dist/hooks/gesture/testing/createGestureSimulator.d.ts +7 -0
- package/dist/hooks/gesture/types.d.ts +48 -5
- package/dist/hooks/gesture/utils.d.ts +19 -0
- package/dist/hooks/useAnimationFrame.d.ts +2 -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/useSwipeContentTransform.d.ts +9 -2
- package/dist/index.cjs +1 -1
- package/dist/index.js +7 -7
- 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/drawerStateMachine.d.ts +168 -0
- package/dist/modules/drawer/revealDrawerConstants.d.ts +33 -0
- package/dist/modules/drawer/revealDrawerStateMachine.d.ts +146 -0
- package/dist/modules/drawer/strategies/index.d.ts +8 -0
- package/dist/modules/drawer/strategies/overlayStrategy.d.ts +12 -0
- package/dist/modules/drawer/strategies/revealStrategy.d.ts +12 -0
- package/dist/modules/drawer/strategies/types.d.ts +116 -0
- package/dist/modules/drawer/types.d.ts +74 -0
- package/dist/modules/drawer/useDrawerSwipeInput.d.ts +24 -0
- package/dist/modules/pivot/SwipePivotTabBar.d.ts +3 -0
- package/dist/modules/stack/SwipeStackContent.d.ts +6 -3
- package/dist/modules/stack/SwipeStackOutlet.d.ts +4 -4
- package/dist/modules/stack/computeSwipeStackTransform.d.ts +1 -1
- package/dist/panels.cjs +1 -1
- package/dist/panels.js +1 -1
- package/dist/pivot.cjs +1 -1
- package/dist/pivot.js +1 -1
- package/dist/resizer.cjs +1 -1
- package/dist/resizer.js +2 -2
- package/dist/stack.cjs +1 -1
- package/dist/stack.cjs.map +1 -1
- package/dist/stack.js +480 -780
- package/dist/stack.js.map +1 -1
- package/dist/sticky-header/calculateStickyMetrics.d.ts +28 -0
- package/dist/sticky-header.cjs +1 -1
- package/dist/sticky-header.cjs.map +1 -1
- package/dist/sticky-header.js +59 -51
- package/dist/sticky-header.js.map +1 -1
- package/dist/{styles-DPPuJ0sf.js → styles-NkjuMOVS.js} +13 -13
- package/dist/{styles-DPPuJ0sf.js.map → styles-NkjuMOVS.js.map} +1 -1
- package/dist/styles-qf6ptVLD.cjs.map +1 -1
- package/dist/types.d.ts +30 -0
- package/dist/useAnimationFrame-BZ6D2lMq.cjs +2 -0
- package/dist/useAnimationFrame-BZ6D2lMq.cjs.map +1 -0
- package/dist/useAnimationFrame-Bg4e-H8O.js +394 -0
- package/dist/useAnimationFrame-Bg4e-H8O.js.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/window/index.d.ts +2 -0
- package/dist/window.cjs +1 -1
- package/dist/window.cjs.map +1 -1
- package/dist/window.js +114 -103
- package/dist/window.js.map +1 -1
- package/package.json +6 -1
- package/src/components/gesture/SwipeSafeZone.tsx +70 -0
- package/src/components/grid/GridLayout.tsx +110 -38
- package/src/components/window/Drawer.tsx +353 -162
- package/src/components/window/DrawerLayers.tsx +54 -11
- package/src/components/window/DrawerRevealContext.spec.ts +20 -0
- package/src/components/window/DrawerRevealContext.tsx +99 -0
- package/src/components/window/drawerRevealAnimationUtils.spec.ts +375 -0
- package/src/components/window/drawerRevealAnimationUtils.ts +415 -0
- package/src/components/window/drawerStyles.spec.ts +302 -0
- package/src/components/window/drawerStyles.ts +252 -0
- package/src/components/window/drawerSwipeConfig.spec.ts +131 -0
- package/src/components/window/drawerSwipeConfig.ts +112 -0
- package/src/components/window/useDrawerSwipeTransform.ts +67 -0
- package/src/components/window/useDrawerTransform.ts +505 -0
- package/src/components/window/useRevealDrawerTransform.spec.ts +1936 -0
- package/src/components/window/useRevealDrawerTransform.ts +105 -0
- package/src/constants/styles.ts +19 -0
- package/src/demo/components/FullscreenDemoPage.tsx +47 -0
- package/src/demo/fullscreenRoutes.tsx +32 -0
- package/src/demo/index.tsx +5 -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 +219 -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/components/DrawerBasics.module.css +6 -1
- package/src/demo/pages/Drawer/components/DrawerBasics.tsx +14 -4
- package/src/demo/pages/Drawer/components/DrawerReveal.module.css +157 -0
- package/src/demo/pages/Drawer/components/DrawerReveal.tsx +128 -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/reveal/index.tsx +17 -0
- package/src/demo/pages/Drawer/reveal-fullscreen/index.tsx +135 -0
- package/src/demo/pages/Drawer/reveal-fullscreen/styles.module.css +233 -0
- package/src/demo/pages/Drawer/swipe/index.tsx +17 -0
- package/src/demo/pages/Pivot/components/SwipeTabsPivot.tsx +54 -23
- package/src/demo/pages/Pivot/swipe-debug/index.tsx +1 -1
- package/src/demo/pages/Stack/components/StackBasics.spec.tsx +156 -0
- package/src/demo/pages/Stack/components/StackBasics.tsx +179 -95
- package/src/demo/pages/Stack/components/StackTablet.spec.tsx +110 -0
- package/src/demo/pages/Stack/components/StackTablet.tsx +42 -21
- package/src/demo/routes.tsx +24 -1
- package/src/dialog/index.ts +85 -0
- package/src/hooks/gesture/testing/createGestureSimulator.spec.ts +68 -64
- package/src/hooks/gesture/testing/createGestureSimulator.ts +113 -37
- package/src/hooks/gesture/types.ts +83 -6
- package/src/hooks/gesture/useEdgeSwipeInput.spec.ts +22 -14
- package/src/hooks/gesture/useNativeGestureGuard.spec.ts +99 -31
- package/src/hooks/gesture/useNativeGestureGuard.ts +3 -1
- package/src/hooks/gesture/utils.ts +102 -0
- package/src/hooks/useAnimatedVisibility.spec.ts +44 -24
- package/src/hooks/useAnimatedVisibility.ts +28 -2
- package/src/hooks/useAnimationFrame.ts +8 -0
- package/src/hooks/useOperationContinuity.spec.ts +394 -0
- package/src/hooks/useOperationContinuity.ts +135 -0
- package/src/hooks/useResizeObserver.spec.tsx +277 -0
- package/src/hooks/useResizeObserver.tsx +108 -39
- package/src/hooks/useScrollContainer.ts +4 -10
- package/src/hooks/useSharedElementTransition.ts +354 -0
- package/src/hooks/useSwipeContentTransform.spec.ts +18 -18
- package/src/hooks/useSwipeContentTransform.ts +166 -28
- 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 +252 -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 +339 -0
- package/src/modules/dialog/useDialogContainer.ts +150 -0
- package/src/modules/dialog/useDialogSwipeInput.spec.ts +178 -0
- package/src/modules/dialog/useDialogSwipeInput.ts +350 -0
- package/src/modules/dialog/useDialogTransform.spec.ts +403 -0
- package/src/modules/dialog/useDialogTransform.ts +407 -0
- package/src/modules/drawer/drawerStateMachine.ts +500 -0
- package/src/modules/drawer/revealDrawerConstants.ts +38 -0
- package/src/modules/drawer/revealDrawerStateMachine.spec.ts +558 -0
- package/src/modules/drawer/revealDrawerStateMachine.ts +197 -0
- package/src/modules/drawer/strategies/index.ts +9 -0
- package/src/modules/drawer/strategies/overlayStrategy.ts +133 -0
- package/src/modules/drawer/strategies/revealStrategy.ts +111 -0
- package/src/modules/drawer/strategies/types.ts +160 -0
- package/src/modules/drawer/types.ts +102 -0
- package/src/modules/drawer/useDrawerSwipeInput.spec.ts +566 -0
- package/src/modules/drawer/useDrawerSwipeInput.ts +402 -0
- package/src/modules/panels/rendering/ContentRegistry.spec.tsx +21 -14
- package/src/modules/pivot/SwipePivotContent.position.spec.tsx +12 -8
- package/src/modules/pivot/SwipePivotContent.spec.tsx +66 -25
- package/src/modules/pivot/SwipePivotContent.tsx +2 -2
- package/src/modules/pivot/SwipePivotTabBar.spec.tsx +85 -68
- package/src/modules/pivot/SwipePivotTabBar.tsx +75 -15
- package/src/modules/pivot/scaleInputState.spec.ts +11 -2
- package/src/modules/pivot/usePivot.spec.ts +17 -3
- package/src/modules/pivot/usePivotSwipeInput.spec.ts +182 -123
- package/src/modules/stack/SwipeStackContent.spec.tsx +387 -100
- package/src/modules/stack/SwipeStackContent.tsx +43 -33
- package/src/modules/stack/SwipeStackOutlet.spec.tsx +14 -16
- package/src/modules/stack/SwipeStackOutlet.tsx +6 -6
- package/src/modules/stack/computeSwipeStackTransform.spec.ts +5 -5
- package/src/modules/stack/computeSwipeStackTransform.ts +3 -3
- package/src/modules/stack/swipeTransitionContinuity.spec.tsx +1133 -0
- package/src/modules/stack/useStackAnimationState.spec.ts +3 -1
- package/src/modules/stack/useStackAnimationState.ts +18 -13
- package/src/modules/stack/useStackNavigation.spec.ts +198 -3
- package/src/modules/stack/useStackNavigation.tsx +113 -56
- package/src/modules/stack/useStackSwipeInput.spec.ts +65 -32
- package/src/modules/stack/useStackSwipeInput.ts +1 -1
- package/src/sticky-header/StickyArea.tsx +29 -57
- package/src/sticky-header/calculateStickyMetrics.spec.ts +105 -0
- package/src/sticky-header/calculateStickyMetrics.ts +50 -0
- package/src/types.ts +33 -0
- package/src/window/index.ts +2 -0
- package/dist/FloatingWindow-BpdOpg_L.js +0 -400
- package/dist/FloatingWindow-BpdOpg_L.js.map +0 -1
- package/dist/FloatingWindow-TCDNY5gE.cjs +0 -2
- package/dist/FloatingWindow-TCDNY5gE.cjs.map +0 -1
- package/dist/GridLayout-B4VRsC0r.cjs +0 -2
- package/dist/GridLayout-BltqeCPK.js +0 -927
- package/dist/PanelSystem-Bs8bQwQF.cjs +0 -3
- package/dist/PanelSystem-Bs8bQwQF.cjs.map +0 -1
- package/dist/PanelSystem-Dr1TBhxM.js.map +0 -1
- package/dist/ResizeHandle-CScipO5l.cjs +0 -2
- package/dist/SwipePivotTabBar-BGO9X94m.js +0 -407
- package/dist/SwipePivotTabBar-BGO9X94m.js.map +0 -1
- package/dist/SwipePivotTabBar-BrQismcZ.cjs +0 -2
- package/dist/SwipePivotTabBar-BrQismcZ.cjs.map +0 -1
- package/dist/useDocumentPointerEvents-CKdhGXd0.js +0 -46
- package/dist/useDocumentPointerEvents-CKdhGXd0.js.map +0 -1
- package/dist/useDocumentPointerEvents-ChqrKXDk.cjs +0 -2
- package/dist/useDocumentPointerEvents-ChqrKXDk.cjs.map +0 -1
- package/dist/useEffectEvent-Dp7HLCf0.js +0 -13
- package/dist/useEffectEvent-Dp7HLCf0.js.map +0 -1
- package/dist/useEffectEvent-huSsGUnl.cjs +0 -2
- package/dist/useEffectEvent-huSsGUnl.cjs.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as n } from "react/jsx-runtime";
|
|
2
2
|
import * as s from "react";
|
|
3
|
-
import { u as E } from "./ResizeHandle-
|
|
4
|
-
import { a as u, b as v, c as D, H as g } from "./styles-
|
|
3
|
+
import { u as E } from "./ResizeHandle-CXjc1meV.js";
|
|
4
|
+
import { a as u, b as v, c as D, H as g } from "./styles-NkjuMOVS.js";
|
|
5
5
|
const R = (r) => ({
|
|
6
6
|
width: g,
|
|
7
7
|
cursor: "col-resize",
|
|
@@ -27,4 +27,4 @@ const R = (r) => ({
|
|
|
27
27
|
export {
|
|
28
28
|
I as H
|
|
29
29
|
};
|
|
30
|
-
//# sourceMappingURL=HorizontalDivider-
|
|
30
|
+
//# sourceMappingURL=HorizontalDivider-DdxzfV0l.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HorizontalDivider-
|
|
1
|
+
{"version":3,"file":"HorizontalDivider-DdxzfV0l.js","sources":["../src/components/resizer/HorizontalDivider.tsx"],"sourcesContent":["/**\n * @file Horizontal divider component\n */\nimport * as React from \"react\";\nimport { useResizeDrag } from \"../../modules/resizer/useResizeDrag\";\nimport { HORIZONTAL_DIVIDER_WIDTH, COLOR_RESIZE_HANDLE_IDLE, COLOR_RESIZE_HANDLE_HOVER, COLOR_RESIZE_HANDLE_ACTIVE } from \"../../constants/styles\";\n\nexport type HorizontalDividerProps = {\n onResize: (deltaX: number) => void;\n /** Custom component for the divider */\n component?: React.ComponentType<React.HTMLAttributes<HTMLDivElement> & { ref?: React.Ref<HTMLDivElement> }>;\n /** Custom element for the divider */\n element?: React.ReactElement;\n};\n\nconst buildDividerStyle = (state: \"idle\" | \"hover\" | \"drag\"): React.CSSProperties => {\n const backgroundColor = state === \"drag\" ? COLOR_RESIZE_HANDLE_ACTIVE : state === \"hover\" ? COLOR_RESIZE_HANDLE_HOVER : COLOR_RESIZE_HANDLE_IDLE;\n return {\n width: HORIZONTAL_DIVIDER_WIDTH,\n cursor: \"col-resize\",\n position: \"relative\",\n userSelect: \"none\",\n backgroundColor,\n };\n};\n\nexport const HorizontalDivider: React.FC<HorizontalDividerProps> = ({ onResize, component: Component, element }) => {\n const { ref, isDragging, onPointerDown } = useResizeDrag<HTMLDivElement>({\n axis: \"x\",\n onResize: onResize,\n });\n const [hovered, setHovered] = React.useState(false);\n\n const dividerProps = {\n ref,\n style: buildDividerStyle(isDragging ? \"drag\" : hovered ? \"hover\" : \"idle\"),\n role: \"separator\" as const,\n \"aria-orientation\": \"vertical\" as const,\n \"data-dragging\": isDragging ? \"true\" : undefined,\n onPointerDown,\n onPointerEnter: () => setHovered(true),\n onPointerLeave: () => setHovered(false),\n };\n\n if (element) {\n return React.cloneElement(element, dividerProps);\n }\n if (Component) {\n return <Component {...dividerProps} />;\n }\n return <div {...dividerProps} />;\n};\n"],"names":["buildDividerStyle","state","HORIZONTAL_DIVIDER_WIDTH","COLOR_RESIZE_HANDLE_ACTIVE","COLOR_RESIZE_HANDLE_HOVER","COLOR_RESIZE_HANDLE_IDLE","HorizontalDivider","onResize","Component","element","ref","isDragging","onPointerDown","useResizeDrag","hovered","setHovered","React","dividerProps","jsx"],"mappings":";;;;AAeA,MAAMA,IAAoB,CAACC,OAElB;AAAA,EACL,OAAOC;AAAA,EACP,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,iBANsBD,MAAU,SAASE,IAA6BF,MAAU,UAAUG,IAA4BC;AAMtH,IAISC,IAAsD,CAAC,EAAE,UAAAC,GAAU,WAAWC,GAAW,SAAAC,QAAc;AAClH,QAAM,EAAE,KAAAC,GAAK,YAAAC,GAAY,eAAAC,EAAA,IAAkBC,EAA8B;AAAA,IACvE,MAAM;AAAA,IACN,UAAAN;AAAA,EAAA,CACD,GACK,CAACO,GAASC,CAAU,IAAIC,EAAM,SAAS,EAAK,GAE5CC,IAAe;AAAA,IACnB,KAAAP;AAAA,IACA,OAAOV,EAAkBW,IAAa,SAASG,IAAU,UAAU,MAAM;AAAA,IACzE,MAAM;AAAA,IACN,oBAAoB;AAAA,IACpB,iBAAiBH,IAAa,SAAS;AAAA,IACvC,eAAAC;AAAA,IACA,gBAAgB,MAAMG,EAAW,EAAI;AAAA,IACrC,gBAAgB,MAAMA,EAAW,EAAK;AAAA,EAAA;AAGxC,SAAIN,IACKO,EAAM,aAAaP,GAASQ,CAAY,IAE7CT,IACK,gBAAAU,EAACV,GAAA,EAAW,GAAGS,EAAA,CAAc,IAE/B,gBAAAC,EAAC,OAAA,EAAK,GAAGD,EAAA,CAAc;AAChC;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const c=require("react/jsx-runtime"),g=require("react"),D=require("./ResizeHandle-
|
|
2
|
-
//# sourceMappingURL=HorizontalDivider-
|
|
1
|
+
"use strict";const c=require("react/jsx-runtime"),g=require("react"),D=require("./ResizeHandle-CBcAS918.cjs"),n=require("./styles-qf6ptVLD.cjs");function E(e){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const o=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,o.get?o:{enumerable:!0,get:()=>e[t]})}}return r.default=e,Object.freeze(r)}const u=E(g),f=e=>{const r=e==="drag"?n.COLOR_RESIZE_HANDLE_ACTIVE:e==="hover"?n.COLOR_RESIZE_HANDLE_HOVER:n.COLOR_RESIZE_HANDLE_IDLE;return{width:n.HORIZONTAL_DIVIDER_WIDTH,cursor:"col-resize",position:"relative",userSelect:"none",backgroundColor:r}},v=({onResize:e,component:r,element:t})=>{const{ref:o,isDragging:s,onPointerDown:l}=D.useResizeDrag({axis:"x",onResize:e}),[d,a]=u.useState(!1),i={ref:o,style:f(s?"drag":d?"hover":"idle"),role:"separator","aria-orientation":"vertical","data-dragging":s?"true":void 0,onPointerDown:l,onPointerEnter:()=>a(!0),onPointerLeave:()=>a(!1)};return t?u.cloneElement(t,i):r?c.jsx(r,{...i}):c.jsx("div",{...i})};exports.HorizontalDivider=v;
|
|
2
|
+
//# sourceMappingURL=HorizontalDivider-_pgV4Mcv.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HorizontalDivider-
|
|
1
|
+
{"version":3,"file":"HorizontalDivider-_pgV4Mcv.cjs","sources":["../src/components/resizer/HorizontalDivider.tsx"],"sourcesContent":["/**\n * @file Horizontal divider component\n */\nimport * as React from \"react\";\nimport { useResizeDrag } from \"../../modules/resizer/useResizeDrag\";\nimport { HORIZONTAL_DIVIDER_WIDTH, COLOR_RESIZE_HANDLE_IDLE, COLOR_RESIZE_HANDLE_HOVER, COLOR_RESIZE_HANDLE_ACTIVE } from \"../../constants/styles\";\n\nexport type HorizontalDividerProps = {\n onResize: (deltaX: number) => void;\n /** Custom component for the divider */\n component?: React.ComponentType<React.HTMLAttributes<HTMLDivElement> & { ref?: React.Ref<HTMLDivElement> }>;\n /** Custom element for the divider */\n element?: React.ReactElement;\n};\n\nconst buildDividerStyle = (state: \"idle\" | \"hover\" | \"drag\"): React.CSSProperties => {\n const backgroundColor = state === \"drag\" ? COLOR_RESIZE_HANDLE_ACTIVE : state === \"hover\" ? COLOR_RESIZE_HANDLE_HOVER : COLOR_RESIZE_HANDLE_IDLE;\n return {\n width: HORIZONTAL_DIVIDER_WIDTH,\n cursor: \"col-resize\",\n position: \"relative\",\n userSelect: \"none\",\n backgroundColor,\n };\n};\n\nexport const HorizontalDivider: React.FC<HorizontalDividerProps> = ({ onResize, component: Component, element }) => {\n const { ref, isDragging, onPointerDown } = useResizeDrag<HTMLDivElement>({\n axis: \"x\",\n onResize: onResize,\n });\n const [hovered, setHovered] = React.useState(false);\n\n const dividerProps = {\n ref,\n style: buildDividerStyle(isDragging ? \"drag\" : hovered ? \"hover\" : \"idle\"),\n role: \"separator\" as const,\n \"aria-orientation\": \"vertical\" as const,\n \"data-dragging\": isDragging ? \"true\" : undefined,\n onPointerDown,\n onPointerEnter: () => setHovered(true),\n onPointerLeave: () => setHovered(false),\n };\n\n if (element) {\n return React.cloneElement(element, dividerProps);\n }\n if (Component) {\n return <Component {...dividerProps} />;\n }\n return <div {...dividerProps} />;\n};\n"],"names":["buildDividerStyle","state","backgroundColor","COLOR_RESIZE_HANDLE_ACTIVE","COLOR_RESIZE_HANDLE_HOVER","COLOR_RESIZE_HANDLE_IDLE","HORIZONTAL_DIVIDER_WIDTH","HorizontalDivider","onResize","Component","element","ref","isDragging","onPointerDown","useResizeDrag","hovered","setHovered","React","dividerProps","jsx"],"mappings":"2aAeMA,EAAqBC,GAA0D,CACnF,MAAMC,EAAkBD,IAAU,OAASE,EAAAA,2BAA6BF,IAAU,QAAUG,EAAAA,0BAA4BC,EAAAA,yBACxH,MAAO,CACL,MAAOC,EAAAA,yBACP,OAAQ,aACR,SAAU,WACV,WAAY,OACZ,gBAAAJ,CAAA,CAEJ,EAEaK,EAAsD,CAAC,CAAE,SAAAC,EAAU,UAAWC,EAAW,QAAAC,KAAc,CAClH,KAAM,CAAE,IAAAC,EAAK,WAAAC,EAAY,cAAAC,CAAA,EAAkBC,EAAAA,cAA8B,CACvE,KAAM,IACN,SAAAN,CAAA,CACD,EACK,CAACO,EAASC,CAAU,EAAIC,EAAM,SAAS,EAAK,EAE5CC,EAAe,CACnB,IAAAP,EACA,MAAOX,EAAkBY,EAAa,OAASG,EAAU,QAAU,MAAM,EACzE,KAAM,YACN,mBAAoB,WACpB,gBAAiBH,EAAa,OAAS,OACvC,cAAAC,EACA,eAAgB,IAAMG,EAAW,EAAI,EACrC,eAAgB,IAAMA,EAAW,EAAK,CAAA,EAGxC,OAAIN,EACKO,EAAM,aAAaP,EAASQ,CAAY,EAE7CT,EACKU,MAACV,EAAA,CAAW,GAAGS,CAAA,CAAc,EAE/BC,MAAC,MAAA,CAAK,GAAGD,CAAA,CAAc,CAChC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";const b=require("react/jsx-runtime"),_t=require("react"),j=require("./GridLayout-DNOClFzz.cjs"),P=require("./FloatingWindow-Cvyokf0m.cjs"),J=require("./useDocumentPointerEvents-DxDSOtip.cjs"),Q=require("./ResizeHandle-CBcAS918.cjs"),k=require("./styles-qf6ptVLD.cjs"),st=require("./useIsomorphicLayoutEffect-DGRNF4Lf.cjs"),Nt=require("react-dom"),Bt=require("./useContentCache-DqXtLrLs.cjs");function $t(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const r in t)if(r!=="default"){const n=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(e,r,n.get?n:{enumerable:!0,get:()=>t[r]})}}return e.default=t,Object.freeze(e)}const l=$t(_t),ft=l.createContext(null),Lt=()=>{const t=l.useContext(ft);if(!t)throw new Error("useKeybindings must be used within KeybindingsProvider");return t},Ht=t=>{const e=[];t.metaKey&&e.push("Mod"),t.ctrlKey&&e.push("Ctrl"),t.altKey&&e.push("Alt"),t.shiftKey&&e.push("Shift");const r=t.key.length===1?t.key.toUpperCase():t.key;return e.push(r),e.join("-")},zt=({children:t,configure:e})=>{const r=l.useRef({}),n=l.useCallback((c,i)=>{r.current={...r.current,[c]:i}},[]),o=l.useCallback(c=>{const i={...r.current};delete i[c],r.current=i},[]);l.useEffect(()=>{const c=i=>{const a=Ht(i),u=r.current[a];u&&u(i)};return window.addEventListener("keydown",c),()=>{window.removeEventListener("keydown",c)}},[]);const s=l.useMemo(()=>({register:n,unregister:o}),[n,o]);return l.useEffect(()=>{e&&e(s)},[s,e]),b.jsx(ft.Provider,{value:s,children:t})},Xt=(t,e)=>{t.register("Mod-\\",r=>{r.preventDefault(),e.splitFocused("vertical")}),t.register("Mod-Shift-\\",r=>{r.preventDefault(),e.splitFocused("horizontal")});for(const r of[1,2,3,4,5,6,7,8,9])t.register(`Mod-${String(r)}`,n=>{n.preventDefault(),e.focusGroupIndex(r)});t.register("Alt-ArrowRight",r=>{r.preventDefault(),e.focusNextGroup()}),t.register("Alt-ArrowLeft",r=>{r.preventDefault(),e.focusPrevGroup()})},Ft=t=>t.type==="group",bt=(t,e={x:0,y:0,w:100,h:100})=>{const r=new Map,n=(o,s)=>{if(Ft(o)){r.set(o.groupId,s);return}if(o.direction==="vertical"){const a=s.w*o.ratio,u=s.w-a;n(o.a,{x:s.x,y:s.y,w:a,h:s.h}),n(o.b,{x:s.x+a,y:s.y,w:u,h:s.h});return}const c=s.h*o.ratio,i=s.h-c;n(o.a,{x:s.x,y:s.y,w:s.w,h:c}),n(o.b,{x:s.x,y:s.y+c,w:s.w,h:i})};return n(t,e),r},Yt=(t,e)=>{const r=bt(t.tree),n={areas:[["root"]],rows:[{size:"1fr"}],columns:[{size:"1fr"}],gap:"0px",style:{position:"relative"}},o=Array.from(r.entries()).map(([s,c])=>{const i={position:"absolute",left:`${c.x}%`,top:`${c.y}%`,width:`${c.w}%`,height:`${c.h}%`,overflow:"hidden",display:"flex",flexDirection:"column"};return{id:s,positionMode:"absolute",style:i,component:e(s)}});return{config:n,layers:o}},qt=(t,e,r)=>{const n=bt(t.tree),o=Array.from(new Set(Array.from(n.values()).flatMap(g=>[g.x,g.x+g.w]))).sort((g,v)=>g-v),s=Array.from(new Set(Array.from(n.values()).flatMap(g=>[g.y,g.y+g.h]))).sort((g,v)=>g-v),c=o.slice(1).map((g,v)=>`${g-o[v]}fr`),i=s.slice(1).map((g,v)=>`${g-s[v]}fr`),a=c.map(g=>({size:g,resizable:r})),u=i.map(g=>({size:g,resizable:r})),d=(g,v,x,y)=>{for(const[f,I]of n.entries())if(g>=I.x&&v<=I.x+I.w&&x>=I.y&&y<=I.y+I.h)return f;return"."},h=[];for(let g=0;g<s.length-1;g+=1){const v=[];for(let x=0;x<o.length-1;x+=1)v.push(d(o[x],o[x+1],s[g],s[g+1]));h.push(v)}const m={areas:h,rows:u,columns:a,gap:"0px"},w=Array.from(n.keys()).map(g=>({id:g,gridArea:g,component:e(g)}));return{config:m,layers:w}},ht=l.createContext(null),Wt=()=>{const t=l.useContext(ht);if(!t)throw new Error("usePanelRenderContext must be used within PanelRenderProvider");return t},Kt=({value:t,children:e})=>b.jsx(ht.Provider,{value:t,children:e}),gt=l.createContext(null),mt=()=>{const t=l.useContext(gt);if(!t)throw new Error("useDomRegistry must be used within DomRegistryProvider");return t},Ut=({children:t})=>{const e=l.useRef(new Map),r=l.useCallback(a=>{const u=e.current.get(a);if(u)return u;const d={group:null,tabbar:null,content:null};return e.current.set(a,d),d},[]),n=l.useCallback((a,u)=>{const d=r(a);if(d.group=u,u===null){const h=e.current.get(a);(h?h.tabbar===null&&h.content===null:!1)&&e.current.delete(a)}},[r]),o=l.useCallback((a,u)=>{const d=r(a);if(d.tabbar=u,u===null){const h=e.current.get(a);(h?h.group===null&&h.content===null:!1)&&e.current.delete(a)}},[r]),s=l.useCallback((a,u)=>{const d=r(a);if(d.content=u,u===null){const h=e.current.get(a);(h?h.group===null&&h.tabbar===null:!1)&&e.current.delete(a)}},[r]),c=l.useCallback(()=>e.current,[]),i=l.useMemo(()=>({setGroupEl:n,setTabbarEl:o,setContentEl:s,getAll:c}),[n,o,s,c]);return b.jsx(gt.Provider,{value:i,children:t})},Vt={display:"flex",flexDirection:"column",width:"100%",height:"100%"},Zt={flex:"1 1 auto",minWidth:0,minHeight:0,position:"relative",overflow:"hidden"};function Jt(t,e,r,n){return t?l.cloneElement(t,r,n):e?b.jsx(e,{...r,children:n}):b.jsx("div",{...r,children:n})}function Qt(t,e,r,n){return t?l.cloneElement(t,r,n):e?b.jsx(e,{...r,children:n}):b.jsx("div",{...r,children:n})}const te=({group:t,tabbar:e,content:r,onContentPointerDown:n,groupRef:o,contentRef:s,component:c,element:i,contentComponent:a,contentElement:u})=>{const d={ref:o,style:Vt,"data-group-id":t.id},m=Jt(u,a,{ref:s,style:Zt,"data-dnd-zone":"content",onPointerDown:n},r),w=b.jsxs(b.Fragment,{children:[e,m]});return Qt(i,c,d,w)},it=l.memo(te,(t,e)=>t.group.id!==e.group.id||t.group.activeTabId!==e.group.activeTabId||t.group.tabs.length!==e.group.tabs.length?!1:t.group.tabs===e.group.tabs);it.displayName="PanelGroupView";const q=(t,e,r)=>{const n=t.left,o=t.top,s=t.width,c=t.height,i=e-n,a=r-o,u=s/3,d=c/3;return i>u&&i<s-u&&a>d&&a<c-d?"center":i<a&&i<s-i&&a<c-a?"left":s-i<a&&s-i<i&&a<c-a?"right":a<i&&a<c-a&&i<s-i?"top":"bottom"},vt={phase:{kind:"idle"},suggest:null,pointer:null,tabbarHover:null,draggingTabElement:null},D={startContent:P.createAction("START_CONTENT",t=>t),startTab:P.createAction("START_TAB",t=>t),setSuggest:P.createAction("SET_SUGGEST",t=>t),setPointer:P.createAction("SET_POINTER",t=>t),setTabbarHover:P.createAction("SET_TABBAR_HOVER",t=>t),reset:P.createAction("RESET")},ee=P.createActionHandlerMap(D,{startContent:(t,e)=>({phase:{kind:"content",startX:e.payload.x,startY:e.payload.y,fromGroupId:e.payload.groupId,tabId:e.payload.tabId,cache:e.payload.cache},suggest:null,pointer:null,tabbarHover:null,draggingTabElement:null}),startTab:(t,e)=>({phase:{kind:"tab",startX:e.payload.x,startY:e.payload.y,fromGroupId:e.payload.groupId,tabId:e.payload.tabId,cache:e.payload.cache},suggest:null,pointer:null,tabbarHover:null,draggingTabElement:e.payload.element}),setSuggest:(t,e)=>({...t,suggest:e.payload}),setPointer:(t,e)=>({...t,pointer:e.payload}),setTabbarHover:(t,e)=>({...t,tabbarHover:e.payload}),reset:()=>vt}),re=(t,e)=>{const r=ee[e.type];return r?r(t,e,void 0):t},xt=l.createContext(null),U=()=>{const t=l.useContext(xt);if(!t)throw new Error("usePanelInteractions must be used within InteractionsProvider");return t},ne=({containerRef:t,dragThresholdPx:e,onCommitContentDrop:r,onCommitTabDrop:n,isContentZoneAllowed:o,children:s})=>{const[c,i]=l.useReducer(re,vt),a=mt(),u=l.useCallback(()=>{const x=Array.from(a.getAll().entries()),y=x.map(([p,G])=>({gid:p,el:G.content??G.group})).filter(p=>!!p.el).map(p=>({...p,rect:p.el.getBoundingClientRect()})),f=x.map(([p,G])=>({gid:p,el:G.tabbar})).filter(p=>!!p.el).map(p=>({...p,rect:p.el.getBoundingClientRect()})),I=x.map(([p,G])=>({gid:p,el:G.content??G.group})).filter(p=>!!p.el).map(p=>({...p,rect:p.el.getBoundingClientRect()}));return{groups:y,tabbars:f,contents:I}},[a]),d=J.useEffectEvent(x=>{if(!t.current)return;const f=x.clientX,I=x.clientY,p=c.phase;if(p.kind==="idle")return;const G=Math.abs(f-p.startX),C=Math.abs(I-p.startY);if(G<e&&C<e){c.phase.kind==="content"&&i(D.setSuggest(null)),i(D.setPointer(null)),i(D.setTabbarHover(null));return}if(i(D.setPointer({x:f,y:I})),p.kind==="content"){const S=p.cache.groups.find(({rect:T})=>f>=T.left&&f<=T.right&&I>=T.top&&I<=T.bottom);if(!S){i(D.setSuggest(null));return}const R=q(S.rect,f,I);if(o&&!o({targetGroupId:S.gid,zone:R})){i(D.setSuggest(null));return}i(D.setSuggest({rect:S.rect,zone:R}));return}if(p.kind==="tab"){const S=p.cache.tabbars.find(({rect:E})=>f>=E.left&&f<=E.right&&I>=E.top&&I<=E.bottom);if(S){const O=Array.from(S.el.querySelectorAll("[role='tab']")).map(z=>z.getBoundingClientRect()),A=O.map(z=>z.left+z.width/2),_=A.findIndex(z=>f<z),N=_===-1?A.length:_,Ot=O.length===0?S.rect.left+8:N===0?O[0].left:N===O.length?O[O.length-1].right:(O[N-1].right+O[N].left)/2;i(D.setTabbarHover({groupId:S.gid,index:N,rect:S.rect,insertX:Ot}))}else i(D.setTabbarHover(null));const R=p.cache.contents.find(({rect:E})=>f>=E.left&&f<=E.right&&I>=E.top&&I<=E.bottom);if(!R){i(D.setSuggest(null));return}const T=q(R.rect,f,I);if(o&&!o({targetGroupId:R.gid,zone:T})){i(D.setSuggest(null));return}i(D.setSuggest({rect:R.rect,zone:T}))}}),h=J.useEffectEvent(x=>{const y=t.current,f=c;if(i(D.reset()),!y)return;const I=x.clientX,p=x.clientY;if(f.phase.kind==="idle")return;const G=Math.abs(I-f.phase.startX),C=Math.abs(p-f.phase.startY);if(!(G<e&&C<e)){if(f.phase.kind==="content"){const S=f.phase.cache.groups.find(({rect:E})=>I>=E.left&&I<=E.right&&p>=E.top&&p<=E.bottom);if(!S)return;const R=S.gid??null;if(!R)return;const T=q(S.rect,I,p);if(o&&!o({targetGroupId:R,zone:T}))return;r({fromGroupId:f.phase.fromGroupId,tabId:f.phase.tabId,targetGroupId:R,zone:T});return}if(f.phase.kind==="tab"){const S=f.phase.cache.tabbars.find(({rect:T})=>I>=T.left&&I<=T.right&&p>=T.top&&p<=T.bottom);if(S){const T=S.gid;if(!T)return;const O=Array.from(S.el.querySelectorAll("[role='tab']")).map(N=>{const Z=N.getBoundingClientRect();return Z.left+Z.width/2}),A=O.findIndex(N=>I<N),_=A===-1?O.length:A;n({fromGroupId:f.phase.fromGroupId,tabId:f.phase.tabId,targetGroupId:T,targetIndex:_});return}const R=f.phase.cache.contents.find(({rect:T})=>I>=T.left&&I<=T.right&&p>=T.top&&p<=T.bottom);if(R){const T=R.gid??null;if(!T)return;const E=q(R.rect,I,p);if(o&&!o({targetGroupId:T,zone:E}))return;r({fromGroupId:f.phase.fromGroupId,tabId:f.phase.tabId,targetGroupId:T,zone:E})}}}}),m=J.useEffectEvent(()=>{i(D.reset())});l.useEffect(()=>{if(c.phase.kind!=="idle")return window.addEventListener("pointermove",d),window.addEventListener("pointerup",h,{once:!0}),window.addEventListener("pointercancel",m,{once:!0}),()=>{window.removeEventListener("pointermove",d),window.removeEventListener("pointerup",h),window.removeEventListener("pointercancel",m)}},[c.phase.kind]);const w=l.useCallback((x,y,f)=>{if(f.button!==0)return;f.currentTarget.setPointerCapture(f.pointerId);const I=u();i(D.startContent({x:f.clientX,y:f.clientY,groupId:x,tabId:y,cache:I}))},[u]),g=l.useCallback((x,y,f)=>{if(f.button!==0)return;const I=f.currentTarget;I&&I.setPointerCapture(f.pointerId);const p=u();i(D.startTab({x:f.clientX,y:f.clientY,groupId:y,tabId:x,cache:p,element:I}))},[u]),v=l.useMemo(()=>({suggest:c.suggest,isTabDragging:c.phase.kind==="tab",draggingTabId:c.phase.kind==="tab"?c.phase.tabId:null,dragPointer:c.pointer,tabbarHover:c.tabbarHover,draggingTabElement:c.draggingTabElement,onStartContentDrag:w,onStartTabDrag:g}),[c.suggest,c.pointer,c.tabbarHover,c.phase,c.draggingTabElement,w,g]);return b.jsx(xt.Provider,{value:v,children:s})},dt={display:"inline-flex",alignItems:"center",userSelect:"none"},oe=({groupId:t,tab:e,active:r,dragging:n,onClickTab:o,onStartDrag:s,onCloseTab:c,tabComponent:i,tabElement:a,onDoubleClick:u})=>{const d=l.useEffectEvent(()=>{o(e.id)}),h=l.useEffectEvent(v=>{s&&v.button===0&&s(e.id,t,v)}),m=()=>{const v=!!c;return b.jsx(l.Activity,{mode:v?"visible":"hidden",children:b.jsx("button",{type:"button","aria-label":`Close tab ${e.title}`,onClick:x=>{c&&(x.stopPropagation(),c(t,e.id))},style:{marginLeft:6},tabIndex:v?void 0:-1,disabled:!v,"aria-hidden":v?void 0:!0,children:"×"})})},w={role:"tab","aria-selected":r,tabIndex:r?0:-1,style:dt,onClick:d,onPointerDown:h,onDoubleClick:u,"data-tab-id":e.id,"data-active":r?"true":"false","data-dragging":n?"true":"false",children:b.jsxs(b.Fragment,{children:[b.jsx("span",{children:e.title}),m()]})},g={type:"button",role:"tab","aria-selected":r,tabIndex:r?0:-1,style:dt,onClick:()=>{o(e.id)},onPointerDown:v=>{s&&v.button===0&&s(e.id,t,v)},onDoubleClick:u,children:b.jsx("span",{children:e.title})};return a?a(g):i?b.jsx(i,{...g}):b.jsx("div",{...w})},se={display:"flex",alignItems:"center"},ie={flex:"1 1 auto",alignSelf:"stretch"},ce=({group:t,onClickTab:e,onStartDrag:r,rootRef:n,component:o,element:s,tabComponent:c,tabElement:i,onAddTab:a,onCloseTab:u,doubleClickToAdd:d})=>{const{isTabDragging:h,draggingTabId:m}=U(),w=l.useRef(null),g=l.useCallback(p=>{if(w.current=p,!!n){if(typeof n=="function"){n(p);return}try{n.current=p}catch{}}},[n]),v=l.useEffectEvent(p=>{const G=w.current??p.currentTarget;if(!G)return;const C=Array.from(G.querySelectorAll('[role="tab"]'));if(C.length===0)return;const S=A=>{const _=Math.max(0,Math.min(A,C.length-1)),N=C[_];N&&N.focus()},R=document.activeElement,T=R?C.indexOf(R):C.findIndex(A=>A.getAttribute("data-tab-id")===t.activeTabId);if(p.key==="ArrowRight"){p.preventDefault();const A=T>=0?T+1:0;S(A>=C.length?0:A);return}if(p.key==="ArrowLeft"){p.preventDefault();const A=T>=0?T-1:C.length-1;S(A<0?C.length-1:A);return}if(p.key==="Home"){p.preventDefault(),S(0);return}if(p.key==="End"){p.preventDefault(),S(C.length-1);return}if(p.key==="Enter"||p.key===" "){p.preventDefault();const _=(T>=0?C[T]:null)?.getAttribute("data-tab-id")??null;_&&e(_);return}if(p.key==="Delete"||p.key==="Backspace"){if(u){p.preventDefault();const _=(T>=0?C[T]:null)?.getAttribute("data-tab-id")??null;_&&u(t.id,_)}return}const E=(p.ctrlKey?1:0)+(p.metaKey?1:0)>0,O=typeof p.key=="string"?p.key.toLowerCase():"";if(E&&O==="t"){a&&(p.preventDefault(),a(t.id));return}});l.useEffect(()=>{const p=w.current;if(!p)return;const G=p.querySelector(`[role="tab"][data-tab-id="${t.activeTabId}"]`);if(G===document.activeElement)return;!p.contains(document.activeElement)&&G&&G.focus()},[t.activeTabId]);const x={style:se,role:"tablist","data-tabbar":"true","data-group-id":t.id,"data-dragging":h?"true":"false",onKeyDown:v},y=Q.useElementComponentWrapper({element:s,component:o}),f=()=>a?b.jsx("button",{type:"button","aria-label":"Add tab",onClick:()=>{a(t.id)},children:"+"}):null,I=l.useCallback(()=>{d&&a&&a(t.id)},[d,a,t.id]);return b.jsxs(y,{...x,ref:g,onDoubleClick:I,children:[t.tabs.map((p,G)=>b.jsx(oe,{groupId:t.id,tab:p,active:t.activeTabId===p.id,dragging:m===p.id,onClickTab:e,onStartDrag:r,onCloseTab:u,tabComponent:c,tabElement:i,onDoubleClick:C=>C.stopPropagation()},`${t.id}:${p.id}:${G}`)),b.jsx("span",{style:ie}),f()]})},ae=({id:t,TabBarComponent:e,PanelGroupComponent:r})=>{const{getGroup:n,getGroupContent:o,onClickTab:s,onAddTab:c,onCloseTab:i,onStartTabDrag:a,doubleClickToAdd:u,registerContentContainer:d}=Wt(),{setGroupEl:h,setTabbarEl:m,setContentEl:w}=mt(),g=l.useCallback(G=>{h(t,G)},[t,h]),v=l.useCallback(G=>{w(t,G),d(t,G)},[t,w,d]),x=l.useCallback(G=>{m(t,G)},[t,m]),y=n(t);if(!y)return null;const f=o(t),I=e??ce,p=r??(G=>b.jsx(it,{...G}));return b.jsx(p,{group:y,tabbar:b.jsx(I,{rootRef:x,group:y,onClickTab:G=>s(t,G),onAddTab:c,onCloseTab:i,onStartDrag:(G,C,S)=>a(G,C,S),doubleClickToAdd:u}),content:f,groupRef:g,contentRef:v})},ue=(t,e)=>{const r=new Array(16);for(let n=0;n<4;n++)for(let o=0;o<4;o++)r[n*4+o]=t[0+o]*e[n*4+0]+t[4+o]*e[n*4+1]+t[8+o]*e[n*4+2]+t[12+o]*e[n*4+3];return r},W=t=>{if(t.length!==16)throw new Error("Matrix must have exactly 16 values");const e=Object.freeze([...t]),r=n=>{const o=ue(e,n);return W(o)};return Object.freeze({translate:(n=0,o=0,s=0)=>r([1,0,0,0,0,1,0,0,0,0,1,0,n,o,s,1]),translate3d:(n,o,s)=>r([1,0,0,0,0,1,0,0,0,0,1,0,n,o,s,1]),translateX:n=>r([1,0,0,0,0,1,0,0,0,0,1,0,n,0,0,1]),translateY:n=>r([1,0,0,0,0,1,0,0,0,0,1,0,0,n,0,1]),translateZ:n=>r([1,0,0,0,0,1,0,0,0,0,1,0,0,0,n,1]),scale:(n=1,o=1,s=1)=>r([n,0,0,0,0,o,0,0,0,0,s,0,0,0,0,1]),scale3d:(n,o,s)=>r([n,0,0,0,0,o,0,0,0,0,s,0,0,0,0,1]),scaleX:n=>r([n,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),scaleY:n=>r([1,0,0,0,0,n,0,0,0,0,1,0,0,0,0,1]),scaleZ:n=>r([1,0,0,0,0,1,0,0,0,0,n,0,0,0,0,1]),rotateX:n=>{const o=Math.cos(n),s=Math.sin(n);return r([1,0,0,0,0,o,s,0,0,-s,o,0,0,0,0,1])},rotateY:n=>{const o=Math.cos(n),s=Math.sin(n);return r([o,0,-s,0,0,1,0,0,s,0,o,0,0,0,0,1])},rotateZ:n=>{const o=Math.cos(n),s=Math.sin(n);return r([o,s,0,0,-s,o,0,0,0,0,1,0,0,0,0,1])},rotate:(n,o,s,c)=>{const i=Math.sqrt(o*o+s*s+c*c);if(i===0)return W(e);o/=i,s/=i,c/=i;const a=Math.cos(n),u=Math.sin(n),d=1-a;return r([d*o*o+a,d*o*s+u*c,d*o*c-u*s,0,d*o*s-u*c,d*s*s+a,d*s*c+u*o,0,d*o*c+u*s,d*s*c-u*o,d*c*c+a,0,0,0,0,1])},rotate3d:(n,o,s,c)=>{const i=Math.sqrt(n*n+o*o+s*s);if(i===0)return W(e);n/=i,o/=i,s/=i;const a=Math.cos(c),u=Math.sin(c),d=1-a;return r([d*n*n+a,d*n*o+u*s,d*n*s-u*o,0,d*n*o-u*s,d*o*o+a,d*o*s+u*n,0,d*n*s+u*o,d*o*s-u*n,d*s*s+a,0,0,0,0,1])},skew:(n=0,o=0)=>{const s=Math.tan(n),c=Math.tan(o);return r([1,c,0,0,s,1,0,0,0,0,1,0,0,0,0,1])},skewX:n=>{const o=Math.tan(n);return r([1,0,0,0,o,1,0,0,0,0,1,0,0,0,0,1])},skewY:n=>{const o=Math.tan(n);return r([1,o,0,0,0,1,0,0,0,0,1,0,0,0,0,1])},perspective:n=>{if(n===0)throw new Error("Perspective distance cannot be zero");return r([1,0,0,0,0,1,0,0,0,0,1,-1/n,0,0,0,1])},toCSS:()=>`matrix3d(${e.join(", ")})`,toArray:()=>e,toString:()=>[`[${e[0]}, ${e[4]}, ${e[8]}, ${e[12]}]`,`[${e[1]}, ${e[5]}, ${e[9]}, ${e[13]}]`,`[${e[2]}, ${e[6]}, ${e[10]}, ${e[14]}]`,`[${e[3]}, ${e[7]}, ${e[11]}, ${e[15]}]`].join(`
|
|
2
|
+
`)})},le=()=>W([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),de={position:"fixed",inset:0,pointerEvents:"none",zIndex:k.DROP_SUGGEST_Z_INDEX},pe={position:"absolute",border:`${k.DROP_SUGGEST_BORDER_WIDTH} dashed ${k.DROP_SUGGEST_BORDER_COLOR}`,background:k.DROP_SUGGEST_BG_COLOR,borderRadius:k.DROP_SUGGEST_BORDER_RADIUS,transformOrigin:"top left"},B=(t,e)=>e<=0?0:j.clampNumber(t/e,0),fe=(t,e,r)=>{const{width:n,height:o}=t,s=r/2,c=n>0?n:1,i=o>0?o:1,a={translateX:r,translateY:r,scaleX:B(j.clampNumber(n-r*2,0),c),scaleY:B(j.clampNumber(o-r*2,0),i)},u={translateX:r,translateY:r,scaleX:B(j.clampNumber(n/2-r*1.5,0),c),scaleY:B(j.clampNumber(o-r*2,0),i)},d={translateX:n/2+s,translateY:r,scaleX:B(j.clampNumber(n/2-r*1.5,0),c),scaleY:B(j.clampNumber(o-r*2,0),i)},h={translateX:r,translateY:r,scaleX:B(j.clampNumber(n-r*2,0),c),scaleY:B(j.clampNumber(o/2-r*1.5,0),i)},m={translateX:r,translateY:o/2+s,scaleX:B(j.clampNumber(n-r*2,0),c),scaleY:B(j.clampNumber(o/2-r*1.5,0),i)},w={center:a,left:u,right:d,top:h,bottom:m},{translateX:g,translateY:v,scaleX:x,scaleY:y}=w[e];return le().translate(g,v,0).scale(x,y,1).toCSS()},be=(t,e)=>{const r=k.DROP_SUGGEST_PADDING_PX;return{...pe,left:t.left,top:t.top,width:t.width,height:t.height,transform:fe(t,e,r)}},It=({suggest:t})=>{if(!t)return null;const{rect:e,zone:r}=t,n=be(e,r);return b.jsx("div",{style:de,children:b.jsx("div",{style:n})})},he=typeof window<"u"&&typeof document<"u",ge=t=>{const[e,r]=l.useState(null),[n,o]=l.useState(null);return st.useIsomorphicLayoutEffect(()=>{if(!he||!t){r(null),o(null);return}const s=t.getBoundingClientRect();r({width:s.width,height:s.height}),o(t.outerHTML)},[t]),{html:n,size:e}},me={position:"fixed",inset:0,pointerEvents:"none",zIndex:k.TAB_DRAG_OVERLAY_Z_INDEX},ve={position:"absolute",width:k.TAB_DRAG_INSERT_GUIDE_WIDTH,borderRadius:k.TAB_DRAG_INSERT_GUIDE_BORDER_RADIUS,background:k.TAB_DRAG_INSERT_GUIDE_COLOR,boxShadow:k.TAB_DRAG_INSERT_GUIDE_SHADOW},xe=()=>{const{isTabDragging:t,draggingTabId:e,dragPointer:r,tabbarHover:n,draggingTabElement:o}=U(),{html:s,size:c}=ge(o),i=r!==null&&e!==null,a=l.useMemo(()=>{if(!(!i||!r))return{position:"absolute",left:r.x,top:r.y,transform:`translate(${k.TAB_DRAG_PREVIEW_OFFSET_X}, ${k.TAB_DRAG_PREVIEW_OFFSET_Y})`,pointerEvents:"none"}},[i,r]),u=l.useMemo(()=>{if(!(!a||!o))return c?{...a,width:c.width,height:c.height}:a},[a,o,c]),d=l.useMemo(()=>{if(n)return{...ve,left:n.insertX,top:n.rect.top+4,height:Math.max(0,n.rect.height-8)}},[n]);return t?b.jsxs("div",{style:me,children:[b.jsx(l.Activity,{mode:u?"visible":"hidden",children:b.jsx("div",{style:u,children:b.jsx("div",{style:{width:"100%",height:"100%",pointerEvents:"none"},dangerouslySetInnerHTML:{__html:s??""}})})}),b.jsx(l.Activity,{mode:d?"visible":"hidden",children:b.jsx("div",{style:d})})]}):null},M=t=>t.type==="group",L=(t,e=[])=>{if(M(t))return[...e,t.groupId];const r=L(t.a,e);return L(t.b,r)},V=(t,e)=>e.reduce((r,n)=>M(r)?r:r[n],t),Y=(t,e,r)=>{if(e.length===0)return r;const[n,...o]=e;return M(t)?t:n==="a"?{...t,a:Y(t.a,o,r)}:{...t,b:Y(t.b,o,r)}},K=(t,e,r=[])=>{if(M(t))return t.groupId===e?{splitPath:null,side:null}:null;if(M(t.a)&&t.a.groupId===e)return{splitPath:r,side:"a"};if(M(t.b)&&t.b.groupId===e)return{splitPath:r,side:"b"};const n=K(t.a,e,[...r,"a"]);return n||K(t.b,e,[...r,"b"])},ct=(t,e,r,n)=>{const o=n(),s=K(t,e),c={type:"split",direction:r,ratio:.5,a:{type:"group",groupId:e},b:{type:"group",groupId:o}};if(!s||s.splitPath===null)return{tree:c,newGroupId:o};const i=s.splitPath,a=V(t,i);if(M(a))return{tree:c,newGroupId:o};const u=s.side==="a"?{...a,a:c}:{...a,b:c};return{tree:Y(t,i,u),newGroupId:o}},wt=(t,e)=>{const r=K(t,e);if(!r||r.splitPath===null)return{tree:t,survivorGroupId:e};const n=r.splitPath,o=V(t,n);if(M(o))return{tree:t,survivorGroupId:e};const s=r.side==="a"?o.b:o.a,c=Y(t,n,s),i=M(s)?s.groupId:L(s)[0]??null;return{tree:c,survivorGroupId:i}},yt=(t,e,r)=>{const n=V(t,e);if(M(n))return t;const o={...n,ratio:j.clampNumber(r,.05,.95)};return Y(t,e,o)},tt=t=>{if(Object.keys(t.groups).filter(o=>t.groups[o].tabIds.length===0).length===0)return t;const n=(o,s)=>{const c=o.groups[s];if(!c||c.tabs.length>0||Object.keys(o.groups).length<=1)return o;const{tree:a,survivorGroupId:u}=wt(o.tree,s),{[s]:d,...h}=o.groups,m=L(a),w=o.focusedGroupId===s?u??m[0]??null:o.focusedGroupId;return{...o,tree:a,groups:h,groupOrder:m,focusedGroupId:w}};return t.groupOrder.reduce((o,s)=>n(o,s),t)},Gt=t=>({id:t,tabIds:[],tabs:[],activeTabId:null}),et=(t,e,r,n)=>{const o={...t.groups},s=o[e];if(!s)throw new Error(`Group ${e} does not exist.`);const c={...t.panels,[r.id]:r},i=[...s.tabIds,r.id],a=n?r.id:s.activeTabId??r.id,u=i.map(h=>c[h]),d={...s,tabIds:i,tabs:u,activeTabId:a};return o[e]=d,{...t,panels:c,groups:o}},Tt=(t,e,r)=>{const n={...t.groups},o=n[e];if(!o)throw new Error(`Group ${e} does not exist.`);const s=o.tabIds.filter(a=>a!==r),c=s.map(a=>t.panels[a]),i=o.activeTabId===r?s[0]??null:o.activeTabId;return n[e]={...o,tabIds:s,tabs:c,activeTabId:i},{...t,groups:n}},rt=(t,e,r,n,o)=>{const s=t.groups[e],c=t.groups[r];if(!s||!c)throw new Error("moveTab: source or target group is missing.");const i={...t.groups},a=s.tabIds.filter(h=>h!==n),u=[...c.tabIds.filter(h=>h!==n),n],d=s.activeTabId===n?a[0]??null:s.activeTabId;return i[e]={...s,tabIds:a,tabs:a.map(h=>t.panels[h]),activeTabId:d},i[r]={...c,tabIds:u,tabs:u.map(h=>t.panels[h]),activeTabId:o?n:c.activeTabId??n},{...t,groups:i}},at=(t,e,r)=>{const n=t.groups[e];if(!n)throw new Error(`setActiveTab: group ${e} not found.`);if(!n.tabIds.some(s=>s===r))throw new Error(`setActiveTab: tab ${r} not found in group ${e}.`);const o={...t.groups,[e]:{...n,activeTabId:r}};return{...t,groups:o,focusedGroupId:e}},Ie=(t,e,r,n)=>{const o=t.groups[e];if(!o)throw new Error(`reorderTabWithinGroup: group ${e} not found.`);const s=o.tabIds.findIndex(h=>h===r);if(s===-1)throw new Error(`reorderTabWithinGroup: tab ${r} not in group ${e}.`);const c=Math.max(0,Math.min(n,o.tabIds.length-1));if(s===c)return t;const i=o.tabIds.slice(),[a]=i.splice(s,1);i.splice(c,0,a);const u=i.map(h=>t.panels[h]),d={...t.groups,[e]:{...o,tabIds:i,tabs:u}};return{...t,groups:d}},nt=(t,e,r,n,o)=>{const s=t.groups[e];if(!s)throw new Error(`addTabToGroupAtIndex: group ${e} not found.`);const c={...t.panels,[r.id]:r},i=s.tabIds.slice(),a=Math.max(0,Math.min(n,i.length));i.splice(a,0,r.id);const u=i.map(m=>c[m]),d=o?r.id:s.activeTabId??r.id,h={...t.groups,[e]:{...s,tabIds:i,tabs:u,activeTabId:d}};return{...t,panels:c,groups:h}},$=(t,e)=>{if(!t.groups[e])throw new Error(`setFocusedGroup: group ${e} not found.`);return{...t,focusedGroupId:e}},St=(t,e)=>{const r=e-1,n=t.groupOrder[r];return n?$(t,n):t},Ct=t=>{const e=t.groupOrder,r=t.focusedGroupId;if(!r){const s=e[0];return s?$(t,s):t}const n=e.indexOf(r),o=e[(n+1)%e.length];return $(t,o)},Et=t=>{const e=t.groupOrder,r=t.focusedGroupId;if(!r){const s=e[e.length-1];return s?$(t,s):t}const n=e.indexOf(r),o=e[(n-1+e.length)%e.length];return $(t,o)},we=t=>{const e=L(t.tree);return{...t,groupOrder:e}},ut=(t,e,r,n)=>{const{tree:o,newGroupId:s}=ct(t.tree,e,r,n),c={...t.groups,[s]:Gt(s)},i=L(o);return{...t,tree:o,groups:c,groupOrder:i,focusedGroupId:s}},ye=t=>{const r={type:"group",groupId:"g_1"},n=Object.fromEntries(t.map(i=>[i.id,i])),s={g_1:{id:"g_1",tabIds:t.map(i=>i.id),tabs:t,activeTabId:t[0]?.id??null}};return{tree:r,panels:n,groups:s,groupOrder:["g_1"],focusedGroupId:"g_1"}},Ge=l.createContext(null),Te=({value:t,children:e})=>b.jsx(Ge.Provider,{value:t,children:e}),Pt=l.createContext(null),Se=()=>{const t=l.useContext(Pt);if(!t)throw new Error("useTree must be used within TreeProvider");return t},Ce=({value:t,children:e})=>b.jsx(Pt.Provider,{value:t,children:e}),Ee=l.createContext(null),Pe=({value:t,children:e})=>b.jsx(Ee.Provider,{value:t,children:e}),X=t=>{const e=j.toFiniteNumberOr(t,Number.POSITIVE_INFINITY);return j.clampNumber(e,1)},Re=t=>typeof t=="object"&&t!==null,Ae=t=>Re(t)?"rows"in t?!0:"cols"in t:!1,Rt=t=>{if(!t)return{rows:Number.POSITIVE_INFINITY,cols:Number.POSITIVE_INFINITY};if(typeof t=="number"){const r=X(t);return{rows:r,cols:r}}if(Ae(t))return{rows:X(t.rows),cols:X(t.cols)};const e=t;return{rows:X(e.maxHorizontal),cols:X(e.maxVertical)}},ot=t=>{if(M(t))return{horizontal:1,vertical:1};const e=ot(t.a),r=ot(t.b);return t.direction==="horizontal"?{horizontal:e.horizontal+r.horizontal,vertical:Math.max(e.vertical,r.vertical)}:{horizontal:Math.max(e.horizontal,r.horizontal),vertical:e.vertical+r.vertical}},De=(t,e,r)=>{const{tree:n}=ct(t,e,r,()=>"__preview__");return n},lt=(t,e,r,n)=>{if(!Number.isFinite(n.rows)&&!Number.isFinite(n.cols))return!0;const o=De(t,e,r),s=ot(o);return!(s.horizontal>n.rows||s.vertical>n.cols)},At={splitFocused:P.createAction("panelState/splitFocused",t=>({direction:t})),focusGroupIndex:P.createAction("panelState/focusGroupIndex",t=>({index1Based:t})),focusNextGroup:P.createAction("panelState/focusNextGroup"),focusPrevGroup:P.createAction("panelState/focusPrevGroup"),setActiveTab:P.createAction("panelState/setActiveTab",(t,e)=>({groupId:t,tabId:e})),addTab:P.createAction("panelState/addTab",t=>t),addNewTab:P.createAction("panelState/addNewTab",t=>t),removeTab:P.createAction("panelState/removeTab",(t,e)=>({groupId:t,tabId:e})),contentDrop:P.createAction("panelState/contentDrop",t=>t),tabDrop:P.createAction("panelState/tabDrop",t=>t),adjustSplitRatio:P.createAction("panelState/adjustSplitRatio",t=>t)},je=(t,e,r)=>{const n=t.groups[e.fromGroupId],o=t.groups[e.targetGroupId];if(!n||!o||!n.tabs.find(h=>h.id===e.tabId))return t;if(e.zone==="center"&&e.fromGroupId===e.targetGroupId)return at(t,e.fromGroupId,e.tabId);if(e.zone==="center"){const h=rt(t,e.fromGroupId,e.targetGroupId,e.tabId,!0);return $(h,e.targetGroupId)}const c=e.zone==="left"||e.zone==="right"?"vertical":"horizontal";if(!lt(t.tree,e.targetGroupId,c,r.splitLimits))return t;const i=r.createGroupId(),a=ut(t,e.targetGroupId,c,()=>i),u=e.zone==="left"||e.zone==="top"?e.targetGroupId:i,d=rt(a,e.fromGroupId,u,e.tabId,!0);return $(d,u)},ke=(t,e)=>{const r=t.groups[e.fromGroupId],n=t.groups[e.targetGroupId];if(!r||!n||!t.panels[e.tabId])return t;if(e.fromGroupId===e.targetGroupId){const m=r.tabIds.filter(y=>y!==e.tabId),w=Math.max(0,Math.min(e.targetIndex,m.length)),g=m.slice(0,w).concat([e.tabId],m.slice(w)),v=g.map(y=>t.panels[y]).filter(Boolean),x={...t.groups,[e.fromGroupId]:{...r,tabIds:g,tabs:v}};return{...t,groups:x}}const s={...t.groups},c=r.tabIds.filter(m=>m!==e.tabId),i=c.map(m=>t.panels[m]);s[e.fromGroupId]={...r,tabIds:c,tabs:i,activeTabId:r.activeTabId===e.tabId?i[0]?.id??null:r.activeTabId};const a=n.tabIds.filter(m=>m!==e.tabId),u=Math.max(0,Math.min(e.targetIndex,a.length)),d=a.slice(0,u).concat([e.tabId],a.slice(u)),h=d.map(m=>t.panels[m]).filter(Boolean);return s[e.targetGroupId]={...n,tabIds:d,tabs:h,activeTabId:e.tabId},{...t,groups:s,focusedGroupId:e.targetGroupId}},Me=P.createActionHandlerMap(At,{splitFocused:(t,e,r)=>{const n=t.focusedGroupId??t.groupOrder[0]??null;return!n||!lt(t.tree,n,e.payload.direction,r.splitLimits)?t:ut(t,n,e.payload.direction,r.createGroupId)},focusGroupIndex:(t,e)=>St(t,e.payload.index1Based),focusNextGroup:t=>Ct(t),focusPrevGroup:t=>Et(t),setActiveTab:(t,e)=>at(t,e.payload.groupId,e.payload.tabId),addTab:(t,e)=>{const{groupId:r,tab:n,index:o,makeActive:s}=e.payload;return typeof o=="number"?nt(t,r,n,o,s??!0):et(t,r,n,s??!0)},addNewTab:(t,e,r)=>{if(!r.createPanelId)throw new Error("addNewTab requires PanelSystemProvider.createPanelId");const o={id:r.createPanelId(),title:e.payload.title,render:()=>e.payload.title},{groupId:s,index:c,makeActive:i}=e.payload;return typeof c=="number"?nt(t,s,o,c,i??!0):et(t,s,o,i??!0)},removeTab:(t,e)=>Tt(t,e.payload.groupId,e.payload.tabId),contentDrop:(t,e,r)=>je(t,e.payload,r),tabDrop:(t,e)=>ke(t,e.payload),adjustSplitRatio:(t,e)=>{const r=V(t.tree,e.payload.path);if(M(r))return t;const n=yt(t.tree,e.payload.path,r.ratio+e.payload.deltaRatio);return{...t,tree:n}}}),pt=(t,e,r)=>{const n=Me[e.type];if(!n)return t;const o=n(t,e,r);return tt(o)},Dt=l.createContext(null),H=()=>{const t=l.useContext(Dt);if(!t)throw new Error("usePanelSystem must be used within PanelSystemProvider");return t},jt=({initialState:t,createGroupId:e,createPanelId:r,state:n,onStateChange:o,splitLimits:s,children:c})=>{const i=l.useMemo(()=>tt(t),[t]),a=l.useMemo(()=>Rt(s),[s]),u=l.useRef({createGroupId:e,splitLimits:a,createPanelId:r});u.current.createGroupId=e,u.current.splitLimits=a,u.current.createPanelId=r;const[d,h]=l.useReducer((G,C)=>pt(G,C,u.current),i),m=l.useMemo(()=>n?tt(n):d,[n,d]),w=l.useRef(m);w.current=m;const g=n!==void 0,v=l.useCallback(G=>{if(g){const C=pt(w.current,G,u.current);o?.(C);return}h(G)},[g,o,h]),x=l.useMemo(()=>P.bindActionCreators(At,v),[v]),y=l.useMemo(()=>({setActiveTab:x.setActiveTab,tabDrop:x.tabDrop}),[x]),f=l.useMemo(()=>({adjustSplitRatio:x.adjustSplitRatio}),[x]),I=l.useMemo(()=>({focusGroupIndex:x.focusGroupIndex,focusNextGroup:x.focusNextGroup,focusPrevGroup:x.focusPrevGroup}),[x]),p=l.useMemo(()=>({state:m,dispatch:v,actions:x}),[m,v,x]);return b.jsx(Dt.Provider,{value:p,children:b.jsx(Te,{value:y,children:b.jsx(Ce,{value:f,children:b.jsx(Pe,{value:I,children:c})})})})},Oe=()=>{const{actions:t}=H();return l.useMemo(()=>({splitFocused:e=>{t.splitFocused(e)},focusGroupIndex:e=>{t.focusGroupIndex(e)},focusNextGroup:()=>{t.focusNextGroup()},focusPrevGroup:()=>{t.focusPrevGroup()},closeFocusedGroup:()=>{}}),[t])},_e=()=>{const{actions:t}=H(),e=l.useCallback(({fromGroupId:n,tabId:o,targetGroupId:s,zone:c})=>{t.contentDrop({fromGroupId:n,tabId:o,targetGroupId:s,zone:c})},[t]),r=l.useCallback(({fromGroupId:n,tabId:o,targetGroupId:s,targetIndex:c})=>{t.tabDrop({fromGroupId:n,tabId:o,targetGroupId:s,targetIndex:c})},[t]);return{onCommitContentDrop:e,onCommitTabDrop:r}},Ne=()=>{const t=Lt(),e=Oe();return l.useEffect(()=>{Xt(t,e)},[t,e]),null},kt=l.createContext(null),Be=()=>{const t=l.useContext(kt);if(!t)throw new Error("useContentRegistry must be used within ContentRegistryProvider");return t},$e=t=>{const e=document.createElement("div");return e.setAttribute("data-panel-wrapper",t),e.style.display="contents",e},Le=(t,e,r)=>{const[n]=l.useState(()=>$e(t));return st.useIsomorphicLayoutEffect(()=>(n.style.display=r?"contents":"none",e&&n.parentElement!==e&&e.appendChild(n),()=>{n.parentElement?.removeChild(n)}),[n,e,r]),n},Mt=l.memo(({panelId:t,content:e,placement:r,containerElement:n})=>{const o=r?.isActive??!1,s=Le(t,n,o);return Nt.createPortal(b.jsx(l.Activity,{mode:o?"visible":"hidden",children:e}),s)});Mt.displayName="PanelContentHost";const He=({children:t,panels:e,placements:r})=>{const[n,o]=l.useState(new Map),s=l.useCallback((m,w)=>{o(g=>{const v=new Map(g);return w?v.set(m,w):v.delete(m),v})},[]),c=l.useMemo(()=>({registerContentContainer:s}),[s]),i=l.useRef(e);i.current=e;const a=l.useCallback(m=>{const w=i.current[m];return w?w.render(w.id):null},[]),u=l.useMemo(()=>Object.keys(e),[e]),{getCachedContent:d}=Bt.useContentCache({resolveContent:a,validIds:u}),h=Object.keys(e);return b.jsxs(kt.Provider,{value:c,children:[t,h.map(m=>{if(!e[m])return null;const g=r[m]??null,v=g?n.get(g.groupId)??null:null,x=d(m);return b.jsx(Mt,{panelId:m,content:x,placement:g,containerElement:v},m)})]})},ze=({children:t,emptyContentComponent:e,doubleClickToAdd:r})=>{const n=U(),{state:o,actions:s}=H(),{registerContentContainer:c}=Be(),i=l.useCallback(()=>l.createElement("div",{style:{color:"#888",fontSize:12,padding:12}},"No tabs"),[]),a=e??i,u=l.useCallback(y=>{const f=o.groups[y];if(!f)return null;const I=f.tabIds.map(p=>o.panels[p]).filter(Boolean);return{...f,tabs:I}},[o.groups,o.panels]),d=l.useCallback(y=>{const f=o.groups[y];return!f||f.tabIds.length===0?b.jsx(a,{}):null},[o.groups,a]),h=l.useCallback((y,f)=>{s.setActiveTab(y,f)},[s]),m=l.useCallback(y=>{s.addNewTab({groupId:y,title:"New Tab",makeActive:!0})},[s]),w=l.useCallback((y,f)=>{s.removeTab(y,f)},[s]),g=l.useCallback((y,f,I)=>{s.setActiveTab(f,y),n.onStartTabDrag(y,f,I)},[s,n]),v=l.useCallback((y,f)=>{const I=o.groups[y];!I||!I.activeTabId||n.onStartContentDrag(y,I.activeTabId,f)},[o.groups,n]),x=l.useMemo(()=>({getGroup:u,getGroupContent:d,onClickTab:h,onAddTab:m,onCloseTab:w,onStartTabDrag:g,onStartContentDrag:v,doubleClickToAdd:r,registerContentContainer:c}),[u,d,h,m,w,g,v,r,c]);return b.jsx(Kt,{value:x,children:t})},Xe=({children:t,emptyContentComponent:e,doubleClickToAdd:r})=>{const{state:n}=H(),o=l.useMemo(()=>{const s={};for(const[c,i]of Object.entries(n.groups))for(const a of i.tabIds)s[a]={groupId:c,isActive:a===i.activeTabId};return s},[n.groups]);return b.jsx(He,{panels:n.panels,placements:o,children:b.jsx(ze,{emptyContentComponent:e,doubleClickToAdd:r,children:t})})},F=(t,e,r,n)=>{if(M(t))return n;const o=t.direction,s=o==="vertical"?r.x+r.w*t.ratio:r.y+r.h*t.ratio;if(n.push({path:e,direction:o,parentRect:r,linePos:s}),o==="vertical"){const a=r.w*t.ratio,u=r.w-a;return F(t.a,[...e,"a"],{x:r.x,y:r.y,w:a,h:r.h},n),F(t.b,[...e,"b"],{x:r.x+a,y:r.y,w:u,h:r.h},n),n}const c=r.h*t.ratio,i=r.h-c;return F(t.a,[...e,"a"],{x:r.x,y:r.y,w:r.w,h:c},n),F(t.b,[...e,"b"],{x:r.x,y:r.y+c,w:r.w,h:i},n),n},Fe=({containerRef:t})=>{const{state:e}=H(),{adjustSplitRatio:r}=Se(),n=l.useMemo(()=>F(e.tree,[],{x:0,y:0,w:100,h:100},[]),[e.tree]),[o,s]=l.useState(null);if(st.useIsomorphicLayoutEffect(()=>{const i=t.current;if(!i)return;const a=()=>{const w=i.getBoundingClientRect();s({left:w.left,top:w.top,width:w.width,height:w.height})};a();function u(){try{const w=window.ResizeObserver;return typeof w=="function"?w:null}catch{return null}}const d=u(),h=d?new d(()=>a()):null;h&&h.observe(i);const m=()=>a();return window.addEventListener("scroll",m,!0),()=>{window.removeEventListener("scroll",m,!0),h&&h.disconnect()}},[t,e.tree]),!o)return null;const c=(i,a)=>{const u={left:o.left+o.width*i.parentRect.x/100,top:o.top+o.height*i.parentRect.y/100,width:o.width*i.parentRect.w/100,height:o.height*i.parentRect.h/100},d=k.SPLIT_HANDLE_THICKNESS;if(i.direction==="vertical"){const g=u.left+u.width*(i.linePos-i.parentRect.x)/i.parentRect.w,v={position:"fixed",left:`calc(${Math.round(g)}px - ${d} / 2)`,top:Math.round(u.top),width:d,height:Math.round(u.height),cursor:"col-resize",pointerEvents:"auto"},x=y=>{const f=o.width*i.parentRect.w/100,I=f===0?0:y/f;r({path:i.path,deltaRatio:I})};return b.jsx("div",{style:v,children:b.jsx(Q.ResizeHandle,{direction:"vertical",onResize:x})},`split-${a}`)}const h=u.top+u.height*(i.linePos-i.parentRect.y)/i.parentRect.h,m={position:"fixed",left:Math.round(u.left),top:`calc(${Math.round(h)}px - ${d} / 2)`,width:Math.round(u.width),height:d,cursor:"row-resize",pointerEvents:"auto"},w=g=>{const v=o.height*i.parentRect.h/100,x=v===0?0:g/v;r({path:i.path,deltaRatio:x})};return b.jsx("div",{style:m,children:b.jsx(Q.ResizeHandle,{direction:"horizontal",onResize:w})},`split-${a}`)};return b.jsx("div",{style:{position:"fixed",inset:0,pointerEvents:"none"},children:n.map((i,a)=>c(i,a))})},Ye={position:"relative",display:"flex",width:"100%",height:"100%"},qe=({state:t,layoutMode:e,gridTracksInteractive:r,view:n,tabBarComponent:o,panelGroupComponent:s})=>{const c=a=>{if(n){const u=n;return b.jsx(u,{groupId:a})}return b.jsx(ae,{id:a,TabBarComponent:o,PanelGroupComponent:s})};if(e==="grid"){const a=qt(t,c,!!r);return b.jsx(j.GridLayout,{config:a.config,layers:a.layers})}const i=Yt(t,c);return b.jsx(j.GridLayout,{config:i.config,layers:i.layers})},We=({containerRef:t,layoutMode:e,gridTracksInteractive:r,dragThresholdPx:n,view:o,style:s,className:c,tabBarComponent:i,panelGroupComponent:a,splitLimits:u,emptyContentComponent:d,doubleClickToAdd:h})=>{const{state:m}=H(),{onCommitContentDrop:w,onCommitTabDrop:g}=_e(),v=l.useMemo(()=>({...Ye,...s}),[s]),x=l.useCallback(({targetGroupId:y,zone:f})=>{if(f==="center")return!0;const I=f==="left"||f==="right"?"vertical":"horizontal";return lt(m.tree,y,I,u)},[m.tree,u]);return b.jsx(Ut,{children:b.jsxs(ne,{containerRef:t,dragThresholdPx:n,onCommitContentDrop:w,onCommitTabDrop:g,isContentZoneAllowed:x,children:[b.jsx(Xe,{emptyContentComponent:d,doubleClickToAdd:h,children:b.jsx("div",{ref:t,className:c,style:v,children:b.jsx(qe,{state:m,layoutMode:e,gridTracksInteractive:r,view:o,tabBarComponent:i,panelGroupComponent:a})})}),b.jsx(Fe,{containerRef:t}),b.jsx(Ke,{})]})})},Ke=()=>{const t=U();return b.jsxs(b.Fragment,{children:[b.jsx(It,{suggest:t.suggest}),b.jsx(xe,{})]})},Ue=({initialState:t,createGroupId:e,createPanelId:r,layoutMode:n,gridTracksInteractive:o,dragThresholdPx:s,view:c,emptyContentComponent:i,state:a,onStateChange:u,className:d,style:h,tabBarComponent:m,panelGroupComponent:w,splitLimits:g,doubleClickToAdd:v})=>{if(!t)throw new Error("PanelSystem requires initialState.");if(!e)throw new Error("PanelSystem requires explicit createGroupId function.");if(!n)throw new Error("PanelSystem requires explicit layoutMode ('absolute' | 'grid').");if(n==="grid"&&o===void 0)throw new Error("PanelSystem(layoutMode='grid') requires explicit 'gridTracksInteractive' flag.");if(s===void 0)throw new Error("PanelSystem requires explicit 'dragThresholdPx' value.");const x=l.useRef(null),y=l.useMemo(()=>Rt(g),[g]);return b.jsx(jt,{initialState:t,createGroupId:e,createPanelId:r,state:a,onStateChange:u,splitLimits:g,children:b.jsxs(zt,{children:[b.jsx(Ne,{}),b.jsx(We,{containerRef:x,layoutMode:n,gridTracksInteractive:o,dragThresholdPx:s,view:c,style:h,className:d,tabBarComponent:m,panelGroupComponent:w,splitLimits:y,emptyContentComponent:i,doubleClickToAdd:v})]})})};exports.DropSuggestOverlay=It;exports.PanelGroupView=it;exports.PanelSystem=Ue;exports.PanelSystemProvider=jt;exports.addTabToGroup=et;exports.addTabToGroupAtIndex=nt;exports.buildInitialState=ye;exports.closeLeaf=wt;exports.collectGroupsInOrder=L;exports.createEmptyGroup=Gt;exports.focusGroupIndex=St;exports.isGroup=M;exports.moveTab=rt;exports.nextGroup=Ct;exports.prevGroup=Et;exports.refreshGroupOrder=we;exports.removeTabFromGroup=Tt;exports.reorderTabWithinGroup=Ie;exports.setActiveTab=at;exports.setFocusedGroup=$;exports.setSplitRatio=yt;exports.splitGroup=ut;exports.splitLeaf=ct;exports.usePanelSystem=H;
|
|
3
|
+
//# sourceMappingURL=PanelSystem-B8Igvnb2.cjs.map
|