react-zeugma 4.1.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +57 -24
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +184 -155
- package/dist/index.d.ts +184 -155
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -109,29 +109,30 @@ The context provider that sets up the drag-and-drop state machine, monitors acti
|
|
|
109
109
|
|
|
110
110
|
A custom state hook that initializes and manages the recursive layout tree and handles drag-and-drop actions.
|
|
111
111
|
|
|
112
|
-
| Option | Type | Default | Description
|
|
113
|
-
| ------------------------ | --------------------------------------------------------------------- | ------- |
|
|
114
|
-
| `initialLayout` | `TreeNode \| null` |
|
|
115
|
-
| `
|
|
116
|
-
| `
|
|
117
|
-
| `
|
|
118
|
-
| `
|
|
119
|
-
| `
|
|
120
|
-
| `
|
|
121
|
-
| `
|
|
122
|
-
| `
|
|
123
|
-
| `
|
|
124
|
-
| `
|
|
125
|
-
| `
|
|
126
|
-
| `
|
|
127
|
-
| `
|
|
128
|
-
| `
|
|
112
|
+
| Option | Type | Default | Description |
|
|
113
|
+
| ------------------------ | --------------------------------------------------------------------- | ------- | --------------------------------------------------------------------------------------------------------- |
|
|
114
|
+
| `initialLayout` | `TreeNode \| null` | — | Initial layout tree structure for uncontrolled mode. Only used on initial mount. |
|
|
115
|
+
| `layout` | `TreeNode \| null` | — | Controlled layout tree structure. If provided, the hook runs in controlled mode and synchronizes with it. |
|
|
116
|
+
| `locked` | `boolean` | `false` | If true, layout resizes and drags are disabled. |
|
|
117
|
+
| `dragActivationDistance` | `number` | `8` | Minimum pointer drag distance (in pixels) required to activate dragging. |
|
|
118
|
+
| `snapThreshold` | `number` | `8` | Threshold in pixels to snap layout resizers to adjacent edges. |
|
|
119
|
+
| `minSplitPercentage` | `number` | `5` | Minimum resizing limit percentage. |
|
|
120
|
+
| `maxSplitPercentage` | `number` | `95` | Maximum resizing limit percentage. |
|
|
121
|
+
| `enableDragToDismiss` | `boolean` | `false` | If true, enables the drag-out-to-dismiss gesture to close widgets. |
|
|
122
|
+
| `dismissThreshold` | `number` | `60` | Distance in pixels outside container bounds required to trigger dismissal. |
|
|
123
|
+
| `onRemove` | `(paneId: string) => void` | — | Callback triggered when a pane is removed. |
|
|
124
|
+
| `onDragStart` | `(activeId: string) => void` | — | Callback triggered when dragging starts. |
|
|
125
|
+
| `onDragEnd` | `(activeId: string, overId: string \| null, dropAction: any) => void` | — | Callback triggered when dragging ends. |
|
|
126
|
+
| `onResizeStart` | `(currentNode: SplitNode) => void` | — | Callback triggered when resizing starts. |
|
|
127
|
+
| `onResize` | `(currentNode: SplitNode, percentage: number) => void` | — | Callback triggered during resizing. |
|
|
128
|
+
| `onResizeEnd` | `(currentNode: SplitNode, percentage: number) => void` | — | Callback triggered when resizing ends. |
|
|
129
|
+
| `onDismissIntentChange` | `(paneId: string \| null) => void` | — | Callback triggered when drag-out intent changes. |
|
|
129
130
|
|
|
130
131
|
### `useZeugmaContext()`
|
|
131
132
|
|
|
132
133
|
A custom React context hook that returns the unified layout controller properties and state actions. Must be used within a `<Zeugma>` provider component.
|
|
133
134
|
|
|
134
|
-
Provides direct access to the current layout state (e.g., `layout`, `locked`) and mutation actions (e.g., `addPane`, `removePane`, `
|
|
135
|
+
Provides direct access to the current layout state (e.g., `layout`, `locked`) and mutation actions (e.g., `addPane`, `removePane`, `updateTabMetadata`, `removeTab`, `selectTab`, etc.).
|
|
135
136
|
|
|
136
137
|
```ts
|
|
137
138
|
const { layout, locked, addPane, removeTab } = useZeugmaContext()
|
|
@@ -253,8 +254,11 @@ export interface SplitNode {
|
|
|
253
254
|
|
|
254
255
|
export interface PaneNode {
|
|
255
256
|
type: 'pane'
|
|
256
|
-
|
|
257
|
-
|
|
257
|
+
id: string
|
|
258
|
+
tabs: string[]
|
|
259
|
+
activeTabId: string
|
|
260
|
+
locked?: boolean
|
|
261
|
+
tabsMetadata?: Record<string, Record<string, unknown>>
|
|
258
262
|
}
|
|
259
263
|
|
|
260
264
|
export type TreeNode = SplitNode | PaneNode
|
|
@@ -297,8 +301,11 @@ export interface SplitNode {
|
|
|
297
301
|
|
|
298
302
|
export interface PaneNode {
|
|
299
303
|
type: 'pane'
|
|
300
|
-
|
|
301
|
-
|
|
304
|
+
id: string
|
|
305
|
+
tabs: string[]
|
|
306
|
+
activeTabId: string
|
|
307
|
+
locked?: boolean
|
|
308
|
+
tabsMetadata?: Record<string, Record<string, unknown>>
|
|
302
309
|
}
|
|
303
310
|
|
|
304
311
|
export type TreeNode = SplitNode | PaneNode
|
|
@@ -329,7 +336,7 @@ A custom hook to manage the dashboard layout state.
|
|
|
329
336
|
|
|
330
337
|
#### Options
|
|
331
338
|
|
|
332
|
-
- `initialLayout: TreeNode | null` — Initial layout tree.
|
|
339
|
+
- `initialLayout: TreeNode | null` — Initial layout tree structure.
|
|
333
340
|
- `locked?: boolean` — Whether the layout is globally locked.
|
|
334
341
|
- `dragActivationDistance?: number` — Minimum pointer drag distance (in pixels) required to activate dragging (defaults to `8`).
|
|
335
342
|
- `snapThreshold?: number` — Threshold in pixels to snap layout resizers to adjacent edges (defaults to `8`).
|
|
@@ -494,12 +501,38 @@ export default function App() {
|
|
|
494
501
|
|
|
495
502
|
`react-zeugma` is style-agnostic and relies on class name configuration for visual states. Define classes in your styling framework and pass them via the `classNames` prop on `<Zeugma>`:
|
|
496
503
|
|
|
504
|
+
> [!IMPORTANT]
|
|
505
|
+
> Starting from version `4.1.2`, `react-zeugma` is 100% headless and does not apply any internal default CSS fallback classes (such as `zeugma-resizer`, `zeugma-locked-preview`, etc.). All layout visual states must be styled by providing custom class names via the `classNames` configuration object.
|
|
506
|
+
|
|
497
507
|
```ts
|
|
498
508
|
interface ZeugmaClassNames {
|
|
509
|
+
dashboard?: string // Applied to the root dashboard container
|
|
510
|
+
dashboardDismissActive?: string // Applied to root container when dismiss intent is active
|
|
511
|
+
dashboardLocked?: string // Applied to root container when dashboard is globally locked
|
|
499
512
|
pane?: string // Applied to the outer wrapper of <Pane>
|
|
513
|
+
paneLocked?: string // Applied to the pane container when locked
|
|
500
514
|
dropPreview?: string // Applied to the preview box when hovering over edge dropzones
|
|
501
515
|
dragOverlay?: string // Applied to the cursor-following drag preview portal
|
|
502
516
|
resizer?: string // Applied to the drag-to-resize split bar
|
|
517
|
+
dismissPreview?: string // Applied to the background dismiss zone indicator during a drag-out dismiss gesture
|
|
518
|
+
lockedPreview?: string // Applied to drop zone indicator when hovering over a locked pane
|
|
519
|
+
tabDropPreview?: string // Applied to the drop placeholder line element during tab drags
|
|
520
|
+
}
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
### Tab Drop Preview Customization
|
|
524
|
+
|
|
525
|
+
When dragging a tab over another, the library automatically renders a placeholder indicator line absolute-positioned on the left or right edge of the target tab.
|
|
526
|
+
|
|
527
|
+
To style this indicator line, configure a custom CSS class name via `classNames.tabDropPreview`.
|
|
528
|
+
|
|
529
|
+
Use this single class name in your CSS to customize the color and size (width) of the placeholder indicator line:
|
|
530
|
+
|
|
531
|
+
```css
|
|
532
|
+
/* Custom tab drop placeholder styling */
|
|
533
|
+
.my-tab-preview {
|
|
534
|
+
background-color: #6366f1 !important; /* change color */
|
|
535
|
+
width: 3px !important; /* change width/size */
|
|
503
536
|
}
|
|
504
537
|
```
|
|
505
538
|
|
|
@@ -517,7 +550,6 @@ interface ZeugmaClassNames {
|
|
|
517
550
|
|
|
518
551
|
/* Edge drop previews */
|
|
519
552
|
```
|
|
520
|
-
````
|
|
521
553
|
|
|
522
554
|
---
|
|
523
555
|
|
|
@@ -536,3 +568,4 @@ During modern excavation efforts, archeologists discovered some of the most brea
|
|
|
536
568
|
- [GitHub Repository](https://github.com/react-zeugma/react-zeugma)
|
|
537
569
|
- [npm Package](https://www.npmjs.com/package/react-zeugma)
|
|
538
570
|
- [Contributing Guide](https://github.com/react-zeugma/react-zeugma/blob/master/CONTRIBUTING.md)
|
|
571
|
+
````
|
package/dist/index.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
'use strict';var tn=require('react'),reactDom=require('react-dom'),core=require('@dnd-kit/core'),jsxRuntime=require('react/jsx-runtime');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var tn__default=/*#__PURE__*/_interopDefault(tn);var ze=tn.createContext(void 0),Ie=tn.createContext(void 0);var ee=()=>{let e=tn.useContext(ze);if(!e)throw new Error("useZeugmaState must be used within a Zeugma provider");return e},$e=()=>{let e=tn.useContext(Ie);if(!e)throw new Error("useZeugmaActions must be used within a Zeugma provider");return e};function st(e){let t=tn.useRef(null);return tn.useEffect(()=>{if(!e){t.current=null;return}let r=n=>{t.current={x:n.clientX,y:n.clientY};},s=n=>{let o=n.touches[0]||n.changedTouches[0];o&&(t.current={x:o.clientX,y:o.clientY});};return window.addEventListener("pointermove",r,{passive:true}),window.addEventListener("touchmove",s,{passive:true}),()=>{window.removeEventListener("pointermove",r),window.removeEventListener("touchmove",s);}},[e]),t}function it(e){tn.useEffect(()=>(e?document.body.style.setProperty("cursor","not-allowed","important"):document.body.style.removeProperty("cursor"),()=>{document.body.style.removeProperty("cursor");}),[e]);}function at(){let[e,t]=tn.useState({}),r=tn.useRef(true);tn.useEffect(()=>(r.current=true,()=>{r.current=false;}),[]);let s=tn.useCallback((n,o)=>{setTimeout(()=>{r.current&&t(i=>i[n]===o?i:{...i,[n]:o});},0);},[]);return {portalTargets:e,registerPortalTarget:s}}var ke=tn.createContext(void 0);var Ht=8,At=8,Fn=4;function ie(){return "pane-"+Math.random().toString(36).substring(2,11)}function be(e,t){if(e===null)return null;if(e.type==="pane")return e.id===t?null:e;let r=be(e.first,t),s=be(e.second,t);return r===null?s:s===null?r:{...e,first:r,second:s}}function de(e,t){if(e===null)return null;if(e.type==="pane"){if(e.tabs.includes(t)){let n=e.tabs.filter(a=>a!==t);if(n.length===0)return null;let o=e.activeTabId;e.activeTabId===t&&(o=n[0]);let i={...e.tabsMetadata};return delete i[t],{...e,tabs:n,activeTabId:o,tabsMetadata:Object.keys(i).length>0?i:void 0}}return e}let r=de(e.first,t),s=de(e.second,t);return r===null?s:s===null?r:{...e,first:r,second:s}}function ye(e,t,r,s,n){if(e===null)return typeof n=="string"?{type:"pane",id:ie(),tabs:[n],activeTabId:n}:n;if(e.type==="pane"){if(e.id===t||e.tabs.includes(t)){let o=typeof n=="string"?{type:"pane",id:ie(),tabs:[n],activeTabId:n}:n,i=s==="left"||s==="top";return {type:"split",direction:r,first:i?o:e,second:i?e:o,splitPercentage:50}}return e}return {...e,first:ye(e.first,t,r,s,n)||e.first,second:ye(e.second,t,r,s,n)||e.second}}function lt(e,t){if(e===null)return {type:"pane",id:ie(),tabs:[t],activeTabId:t};function r(s,n){return s.type==="pane"?{type:"split",direction:n==="row"?"column":"row",splitPercentage:50,first:s,second:{type:"pane",id:ie(),tabs:[t],activeTabId:t}}:{...s,second:r(s.second,s.direction)}}return r(e,null)}function ve(e,t,r){return e===null?null:e===t?{...e,splitPercentage:r}:e.type==="split"?{...e,first:ve(e.first,t,r)||e.first,second:ve(e.second,t,r)||e.second}:e}function q(e,t){return e===null?null:e.type==="pane"?e.id===t||e.tabs.includes(t)?e:null:q(e.first,t)??q(e.second,t)}function Ze(e,t,r){if(e===null)return null;if(e.type==="pane"){if(e.id===t||e.tabs.includes(t)){let s=e.tabsMetadata||{},n=s[t],o=r(n),i={...s};return o===void 0?delete i[t]:i[t]=o,{...e,tabsMetadata:Object.keys(i).length>0?i:void 0}}return e}return {...e,first:Ze(e.first,t,r)??e.first,second:Ze(e.second,t,r)??e.second}}function He(e,t,r){if(e===null)return null;if(e.type==="pane"){if(e.id===t||e.tabs.includes(t)){if(r===false){let{locked:s,...n}=e;return n}return {...e,locked:r}}return e}return {...e,first:He(e.first,t,r)??e.first,second:He(e.second,t,r)??e.second}}function Ae(e,t,r){return e===null?null:e.type==="pane"?e.id===t||e.tabs.includes(t)?{...e,activeTabId:r}:e:{...e,first:Ae(e.first,t,r)??e.first,second:Ae(e.second,t,r)??e.second}}function ct(e,t,r){if(e===null)return null;let n=q(e,t)?.tabsMetadata?.[t],o=de(e,t);if(o===null)return {type:"pane",id:ie(),tabs:[t],activeTabId:t,tabsMetadata:n?{[t]:n}:void 0};function i(a){if(a.type==="pane"){if(a.id===r||a.tabs.includes(r)){let l=[...a.tabs];l.includes(t)||l.push(t);let y={...a.tabsMetadata};return n&&(y[t]=n),{...a,tabs:l,activeTabId:t,tabsMetadata:Object.keys(y).length>0?y:void 0}}return a}return {...a,first:i(a.first),second:i(a.second)}}return i(o)}function ut(e,t,r,s="before"){if(e===null)return null;let o=q(e,t)?.tabsMetadata?.[t],i=de(e,t);if(i===null)return {type:"pane",id:ie(),tabs:[t],activeTabId:t,tabsMetadata:o?{[t]:o}:void 0};function a(l){if(l.type==="pane"){if(l.id===r||l.tabs.includes(r)){let D=[...l.tabs].filter(x=>x!==t),c=D.indexOf(r);c<0&&(c=0),s==="after"&&(c+=1),D.splice(c,0,t);let T={...l.tabsMetadata};return o&&(T[t]=o),{...l,tabs:D,activeTabId:t,tabsMetadata:Object.keys(T).length>0?T:void 0}}return l}return {...l,first:a(l.first),second:a(l.second)}}return a(i)}function se(e,t=0,r=0,s=100,n=100,o="root"){if(e===null)return {panes:[],splitters:[]};if(e.type==="pane")return {panes:[{paneId:e.id,left:t,top:r,width:s,height:n,node:e}],splitters:[]};let{direction:i,splitPercentage:a,first:l,second:y}=e,c={id:`splitter-${o}-${i}`,currentNode:e,direction:i,left:i==="row"?t+s*(a/100):t,top:i==="column"?r+n*(a/100):r,width:i==="row"?0:s,height:i==="column"?0:n,parentLeft:t,parentTop:r,parentWidth:s,parentHeight:n},T={panes:[],splitters:[]},x={panes:[],splitters:[]};if(i==="row"){let v=s*(a/100);T=se(l,t,r,v,n,`${o}-L`),x=se(y,t+v,r,s-v,n,`${o}-R`);}else {let v=n*(a/100);T=se(l,t,r,s,v,`${o}-T`),x=se(y,t,r+v,s,n-v,`${o}-B`);}return {panes:[...T.panes,...x.panes],splitters:[c,...T.splitters,...x.splitters]}}function Ft(e){let{initialLayout:t,onChange:r,fullscreenPaneId:s,onFullscreenChange:n,locked:o=false,dragActivationDistance:i=8,snapThreshold:a=8,minSplitPercentage:l=5,maxSplitPercentage:y=95,enableDragToDismiss:D=false,dismissThreshold:c=60,onRemove:T,onDragStart:x,onDragEnd:v,onResizeStart:R,onResize:E,onResizeEnd:L,onDismissIntentChange:p}=e,[b,f]=tn.useState(t),[z,A]=tn.useState(s||null),[I,V]=tn.useState(o),[w,K]=tn.useState(null),[h,F]=tn.useState(null),[Y,O]=tn.useState(null),m=tn.useRef(null),$=tn.useCallback(u=>{m.current=u;},[]),_=tn.useCallback(u=>{A(u),n?.(u);},[n]);tn.useEffect(()=>{V(o);},[o]),tn.useEffect(()=>{s!==void 0&&A(s);},[s]);let k=tn.useRef(true);tn.useEffect(()=>{if(k.current){k.current=false;return}r?.(b);},[b,r]);let N=tn.useCallback(u=>{f(S=>be(S,u));},[]),d=tn.useCallback(u=>{f(S=>lt(S,u));},[]),B=tn.useCallback((u,S,P,ne)=>{f(Re=>{let Ye=q(Re,ne)??{type:"pane",id:ne,tabs:[ne],activeTabId:ne},Be=be(Re,ne);return ye(Be,u,S,P,Ye)});},[]),ae=tn.useCallback((u,S)=>{f(P=>ve(P,u,S));},[]),W=tn.useCallback((u,S)=>{f(P=>Ze(P,u,S));},[]),te=tn.useCallback((u,S)=>{f(P=>He(P,u,S));},[]),le=tn.useCallback((u,S)=>{f(P=>Ae(P,u,S));},[]),fe=tn.useCallback((u,S)=>{f(P=>ct(P,u,S));},[]),me=tn.useCallback((u,S,P)=>{f(ne=>ut(ne,u,S,P));},[]),j=tn.useCallback(u=>{f(S=>de(S,u));},[]);return {layout:b,setLayout:f,fullscreenPaneId:z,setFullscreenPaneId:_,locked:I,setLocked:V,activeId:w,setActiveId:K,activeType:h,setActiveType:F,dismissIntentId:Y,setDismissIntentId:O,containerRef:m,setContainerRef:$,dragActivationDistance:i,snapThreshold:a,minSplitPercentage:l,maxSplitPercentage:y,enableDragToDismiss:D,dismissThreshold:c,onRemove:T,onDragStart:x,onDragEnd:v,onResizeStart:R,onResize:E,onResizeEnd:L,onDismissIntentChange:p,removePane:N,addPane:d,splitPane:B,updateSplitPercentage:ae,updateTabMetadata:W,updatePaneLock:te,selectTab:le,mergeTab:fe,moveTab:me,removeTab:j}}var Ot=()=>{let e=ee(),t=$e();return {...e,...t}};var pt=({activeId:e,render:t,className:r})=>{let s=tn.useRef(null);return tn.useEffect(()=>{let n=o=>{s.current&&(s.current.style.transform=`translate(${o.clientX+12}px, ${o.clientY+12}px)`);};return document.addEventListener("pointermove",n),()=>document.removeEventListener("pointermove",n)},[]),jsxRuntime.jsx("div",{ref:s,className:r,style:{position:"fixed",top:0,left:0,zIndex:9999,pointerEvents:"none"},children:t(e)})};var Fe=class extends core.PointerSensor{static activators=[{eventName:"onPointerDown",handler:({nativeEvent:t})=>!t.target?.closest(".drag-cancel")}]},Oe=class extends core.TouchSensor{static activators=[{eventName:"onTouchStart",handler:({nativeEvent:t})=>!t.target?.closest(".drag-cancel")}]};function je(e){if(e instanceof MouseEvent||e instanceof PointerEvent)return {x:e.clientX,y:e.clientY};if(typeof TouchEvent<"u"&&e instanceof TouchEvent){let t=e.touches[0]||e.changedTouches[0];if(t)return {x:t.clientX,y:t.clientY}}return null}var jt=e=>{let{renderPane:t,renderWidget:r,renderDragOverlay:s,classNames:n={},children:o,layout:i,setLayout:a,fullscreenPaneId:l,setFullscreenPaneId:y,locked:D,activeId:c,setActiveId:T,activeType:x,setActiveType:v,dismissIntentId:R,setDismissIntentId:E,containerRef:L,setContainerRef:p,dragActivationDistance:b,snapThreshold:f,minSplitPercentage:z,maxSplitPercentage:A,enableDragToDismiss:I,dismissThreshold:V,onRemove:w,onDragStart:K,onDragEnd:h,onResizeStart:F,onResize:Y,onResizeEnd:O,onDismissIntentChange:m,removePane:$,addPane:_,splitPane:k,updateSplitPercentage:N,updateTabMetadata:d,updatePaneLock:B,selectTab:ae,mergeTab:W,moveTab:te,removeTab:le}=e,{portalTargets:fe,registerPortalTarget:me}=at(),j=tn.useRef(null),u=st(c),[S,P]=tn.useState(false);it(S);let ne=tn.useCallback(g=>t(g),[t]),Re=tn.useMemo(()=>n,[n.pane,n.paneLocked,n.dropPreview,n.dragOverlay,n.resizer,n.dismissPreview,n.dashboardLocked,n.lockedPreview]),Ye=core.useSensors(core.useSensor(Fe,{activationConstraint:{distance:b}}),core.useSensor(Oe,{activationConstraint:{delay:250,tolerance:5}})),Be=tn.useCallback(g=>{let Z=core.pointerWithin(g);if(Z.length>0)return Z;if(g.active.id.toString().startsWith("tab-header-")){let re=g.droppableContainers.filter(J=>J.id.toString().startsWith("tab-drop-"));return core.closestCenter({...g,droppableContainers:re})}return []},[]),Dt=g=>{let Z=g.active.id.toString(),U=Z.startsWith("tab-header-"),re=U?Z.substring(11):Z;T(re),v(U?"tab":"pane");let J=g.activatorEvent;u.current=je(J),I&&L.current?j.current=L.current.getBoundingClientRect():j.current=null,K&&K(re);},Et=g=>{let{over:Z}=g,re=(Z?.id.toString()||"").startsWith("drop-locked-");if(P(re),!I)return;let J=g.active.id.toString(),Se=J.startsWith("tab-header-")?J.substring(11):J,M=j.current;if(!M){R!==null&&(E(null),m?.(null));return}let we=g.activatorEvent,oe=null,X=null;if(u.current)oe=u.current.x,X=u.current.y;else {let H=je(we);H&&(oe=H.x+g.delta.x,X=H.y+g.delta.y);}let ce=0;if(oe!==null&&X!==null){let H=0,Q=0;oe<M.left?H=M.left-oe:oe>M.right&&(H=oe-M.right),X<M.top?Q=M.top-X:X>M.bottom&&(Q=X-M.bottom),ce=Math.sqrt(H*H+Q*Q);}else {let H=g.active.rect.current.translated;if(H){let Q=H.left+H.width/2,ge=H.top+H.height/2,ue=0,Pe=0;Q<M.left?ue=M.left-Q:Q>M.right&&(ue=Q-M.right),ge<M.top?Pe=M.top-ge:ge>M.bottom&&(Pe=ge-M.bottom),ce=Math.sqrt(ue*ue+Pe*Pe);}}ce>V?R!==Se&&(E(Se),m?.(Se)):R!==null&&(E(null),m?.(null));},Ct=g=>{T(null),v(null),P(false);let{active:Z,over:U}=g,re=Z.id.toString(),J=re.startsWith("tab-header-"),C=J?re.substring(11):re,Se=I&&R===C;if(E(null),m?.(null),j.current=null,Se){w?w(C):le(C),h&&h(C,null,null);return}if(!U){h&&h(C,null,null);return}let M=U.id.toString();if(M.startsWith("drop-locked-")){h&&h(C,null,null);return}let we=M.match(/^tab-drop-(.+)$/);if(we){let[,Ne]=we;if(C!==Ne){let Ee="before",tt=U.rect,It=g.activatorEvent,Me=null;if(u.current)Me=u.current.x;else {let Le=je(It);Le&&(Me=Le.x+g.delta.x);}if(Me!==null){let Le=tt.left+tt.width/2;Me>Le&&(Ee="after");}te(C,Ne,Ee);}h&&h(C,Ne,{type:"swap",position:"center"});return}let oe=M.match(/^drop-(left|right|top|bottom)-(.+)$/);if(!oe){h&&h(C,null,null);return}let[,X,ce]=oe,De=q(i,C),H=De&&De.id===ce,Q=De&&De.tabs.length===1;if(C===ce||H&&Q){h&&h(C,null,null);return}let ge=X==="left"||X==="right"?"row":"column",ue;if(J){let Ee=q(i,C)?.tabsMetadata?.[C];ue={type:"pane",id:ie(),tabs:[C],activeTabId:C,tabsMetadata:Ee?{[C]:Ee}:void 0};}else ue=q(i,C)??{type:"pane",id:ie(),tabs:[C],activeTabId:C};let Pe=J?de(i,C):be(i,C),zt=ye(Pe,ce,ge,X,ue);a(zt),h&&h(C,ce,{type:"split",direction:ge,position:X});},et=tn.useCallback((g,Z)=>{O&&O(g,Z);},[O]),wt=tn.useMemo(()=>({layout:i,onLayoutChange:g=>a(g),renderPane:ne,activeId:c,dismissIntentId:R,setContainerRef:p,fullscreenPaneId:l,classNames:Re,onRemove:w,onFullscreenChange:y,snapThreshold:f,onResizeStart:F,onResize:Y,onResizeEnd:et,minSplitPercentage:z,maxSplitPercentage:A,locked:D}),[i,c,R,p,l,Re,w,y,f,F,Y,z,A,a,ne,et,D]),Nt=tn.useMemo(()=>({removePane:$,addPane:_,splitPane:k,updateSplitPercentage:N,updateTabMetadata:d,updatePaneLock:B,selectTab:ae,mergeTab:W,moveTab:te,removeTab:le}),[$,_,k,N,d,B,ae,W,te,le]),Mt=tn.useMemo(()=>{let g=[];function Z(U){U&&(U.type==="pane"?g.push(...U.tabs):(Z(U.first),Z(U.second)));}return Z(i),g},[i]),Lt=tn.useMemo(()=>({registerPortalTarget:me}),[me]);return jsxRuntime.jsx(Ie.Provider,{value:Nt,children:jsxRuntime.jsx(ze.Provider,{value:wt,children:jsxRuntime.jsxs(ke.Provider,{value:Lt,children:[jsxRuntime.jsx(core.DndContext,{id:"zeugma-dnd-context",sensors:Ye,collisionDetection:Be,onDragStart:Dt,onDragMove:Et,onDragEnd:Ct,children:o}),c&&x&&s&&jsxRuntime.jsx(pt,{activeId:c,render:g=>s(g,x),className:`${n.dragOverlay||""} ${c===R?n.dismissPreview||"zeugma-dismiss-preview":""}`.trim()}),jsxRuntime.jsx("div",{id:"zeugma-portal-host",style:{display:"none"},children:Mt.map(g=>jsxRuntime.jsx(Jt,{tabId:g,target:fe[g]||null,renderWidget:r},g))})]})})})},Jt=({tabId:e,target:t,renderWidget:r})=>{let[s,n]=tn.useState(false),o=tn.useRef(null);if(tn.useEffect(()=>{n(true);},[]),tn.useEffect(()=>{if(!s||!o.current)return;let a=o.current;if(t)t.appendChild(a);else {let l=document.getElementById("zeugma-hidden-portal-container");l||(l=document.createElement("div"),l.id="zeugma-hidden-portal-container",l.style.display="none",document.body.appendChild(l)),l.appendChild(a);}},[t,s]),tn.useEffect(()=>()=>{o.current&&o.current.remove();},[]),!s)return null;o.current||(o.current=document.createElement("div"),o.current.className=`zeugma-portal-wrapper-${e}`,o.current.style.width="100%",o.current.style.height="100%");let i=o.current;return !i||!r?null:reactDom.createPortal(r(e),i)};function Ve({cursor:e,resizerEl:t,onMove:r,onEnd:s}){document.body.classList.add("zeugma-resizing");let n=document.createElement("style");n.id="zeugma-global-cursor-style",n.textContent=`
|
|
1
|
+
'use strict';var $t=require('react'),core=require('@dnd-kit/core'),jsxRuntime=require('react/jsx-runtime'),reactDom=require('react-dom');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var $t__default=/*#__PURE__*/_interopDefault($t);function Ae(e){let t=$t.useRef(null);return $t.useEffect(()=>{if(!e){t.current=null;return}let n=r=>{t.current={x:r.clientX,y:r.clientY};},s=r=>{let o=r.touches[0]||r.changedTouches[0];o&&(t.current={x:o.clientX,y:o.clientY});};return window.addEventListener("pointermove",n,{passive:true}),window.addEventListener("touchmove",s,{passive:true}),()=>{window.removeEventListener("pointermove",n),window.removeEventListener("touchmove",s);}},[e]),t}function Fe(e){$t.useEffect(()=>(e?document.body.style.setProperty("cursor","not-allowed","important"):document.body.style.removeProperty("cursor"),()=>{document.body.style.removeProperty("cursor");}),[e]);}function Oe(){let[e,t]=$t.useState({}),n=$t.useRef(true);$t.useEffect(()=>(n.current=true,()=>{n.current=false;}),[]);let s=$t.useCallback((r,o)=>{n.current&&t(i=>i[r]===o?i:{...i,[r]:o});},[]);return {portalTargets:e,registerPortalTarget:s}}var dt=8,pt=8,gn=4;function ie(){return "pane-"+Math.random().toString(36).substring(2,11)}function ue(e,t){if(e===null)return null;if(e.type==="pane")return e.id===t?null:e;let n=ue(e.first,t),s=ue(e.second,t);return n===null?s:s===null?n:{...e,first:n,second:s}}function ae(e,t){if(e===null)return null;if(e.type==="pane"){if(e.tabs.includes(t)){let r=e.tabs.filter(a=>a!==t);if(r.length===0)return null;let o=e.activeTabId;e.activeTabId===t&&(o=r[0]);let i={...e.tabsMetadata};return delete i[t],{...e,tabs:r,activeTabId:o,tabsMetadata:Object.keys(i).length>0?i:void 0}}return e}let n=ae(e.first,t),s=ae(e.second,t);return n===null?s:s===null?n:{...e,first:n,second:s}}function me(e,t,n,s,r){if(e===null)return typeof r=="string"?{type:"pane",id:ie(),tabs:[r],activeTabId:r}:r;if(e.type==="pane"){if(e.id===t){let o=typeof r=="string"?{type:"pane",id:ie(),tabs:[r],activeTabId:r}:r,i=s==="left"||s==="top";return {type:"split",direction:n,first:i?o:e,second:i?e:o,splitPercentage:50}}return e}return {...e,first:me(e.first,t,n,s,r)||e.first,second:me(e.second,t,n,s,r)||e.second}}function Ve(e,t){if(e===null)return {type:"pane",id:ie(),tabs:[t],activeTabId:t};function n(s,r){return s.type==="pane"?{type:"split",direction:r==="row"?"column":"row",splitPercentage:50,first:s,second:{type:"pane",id:ie(),tabs:[t],activeTabId:t}}:{...s,second:n(s.second,s.direction)}}return n(e,null)}function de(e,t,n){return e===null?null:e===t?{...e,splitPercentage:n}:e.type==="split"?{...e,first:de(e.first,t,n)||e.first,second:de(e.second,t,n)||e.second}:e}function ee(e,t){return e===null?null:e.type==="pane"?e.id===t?e:null:ee(e.first,t)??ee(e.second,t)}function G(e,t){return e===null?null:e.type==="pane"?e.tabs.includes(t)?e:null:G(e.first,t)??G(e.second,t)}function he(e,t,n){if(e===null)return null;if(e.type==="pane"){if(e.tabs.includes(t)){let s=e.tabsMetadata||{},r=s[t],o=n(r),i={...s};return o===void 0?delete i[t]:i[t]=o,{...e,tabsMetadata:Object.keys(i).length>0?i:void 0}}return e}return {...e,first:he(e.first,t,n)??e.first,second:he(e.second,t,n)??e.second}}function Pe(e,t,n){if(e===null)return null;if(e.type==="pane"){if(e.id===t){if(n===false){let{locked:s,...r}=e;return r}return {...e,locked:n}}return e}return {...e,first:Pe(e.first,t,n)??e.first,second:Pe(e.second,t,n)??e.second}}function ye(e,t,n){return e===null?null:e.type==="pane"?e.id===t?{...e,activeTabId:n}:e:{...e,first:ye(e.first,t,n)??e.first,second:ye(e.second,t,n)??e.second}}function We(e,t,n){if(e===null)return null;let r=G(e,t)?.tabsMetadata?.[t],o=ae(e,t);if(o===null)return {type:"pane",id:ie(),tabs:[t],activeTabId:t,tabsMetadata:r?{[t]:r}:void 0};function i(a){if(a.type==="pane"){if(a.id===n){let u=[...a.tabs];u.includes(t)||u.push(t);let f={...a.tabsMetadata};return r&&(f[t]=r),{...a,tabs:u,activeTabId:t,tabsMetadata:Object.keys(f).length>0?f:void 0}}return a}return {...a,first:i(a.first),second:i(a.second)}}return i(o)}function Ue(e,t,n,s="before"){if(e===null)return null;let o=G(e,t)?.tabsMetadata?.[t],i=ae(e,t);if(i===null)return {type:"pane",id:ie(),tabs:[t],activeTabId:t,tabsMetadata:o?{[t]:o}:void 0};function a(u){if(u.type==="pane"){if(u.tabs.includes(n)){let I=[...u.tabs].filter(R=>R!==t),b=I.indexOf(n);b<0&&(b=0),s==="after"&&(b+=1),I.splice(b,0,t);let v={...u.tabsMetadata};return o&&(v[t]=o),{...u,tabs:I,activeTabId:t,tabsMetadata:Object.keys(v).length>0?v:void 0}}return u}return {...u,first:a(u.first),second:a(u.second)}}return a(i)}function se(e,t=0,n=0,s=100,r=100,o="root"){if(e===null)return {panes:[],splitters:[]};if(e.type==="pane")return {panes:[{paneId:e.id,left:t,top:n,width:s,height:r,node:e}],splitters:[]};let{direction:i,splitPercentage:a,first:u,second:f}=e,b={id:`splitter-${o}-${i}`,currentNode:e,direction:i,left:i==="row"?t+s*(a/100):t,top:i==="column"?n+r*(a/100):n,width:i==="row"?0:s,height:i==="column"?0:r,parentLeft:t,parentTop:n,parentWidth:s,parentHeight:r},v={panes:[],splitters:[]},R={panes:[],splitters:[]};if(i==="row"){let y=s*(a/100);v=se(u,t,n,y,r,`${o}-L`),R=se(f,t+y,n,s-y,r,`${o}-R`);}else {let y=r*(a/100);v=se(u,t,n,s,y,`${o}-T`),R=se(f,t,n+y,s,r-y,`${o}-B`);}return {panes:[...v.panes,...R.panes],splitters:[b,...v.splitters,...R.splitters]}}function Te({cursor:e,resizerEl:t,onMove:n,onEnd:s}){document.body.classList.add("zeugma-resizing");let r=document.createElement("style");r.id="zeugma-global-cursor-style",r.textContent=`
|
|
2
2
|
* {
|
|
3
3
|
cursor: ${e} !important;
|
|
4
4
|
user-select: none !important;
|
|
5
5
|
}
|
|
6
|
-
`,document.head.appendChild(n),t.setAttribute("data-resizing","true");let o=a=>{r(a);},i=()=>{document.body.classList.remove("zeugma-resizing"),t.removeAttribute("data-resizing");let a=document.getElementById("zeugma-global-cursor-style");a&&a.remove(),document.removeEventListener("pointermove",o),document.removeEventListener("pointerup",i),s();};document.addEventListener("pointermove",o),document.addEventListener("pointerup",i);}function Je({containerRef:e,isRow:t,direction:r,splitPercentage:s,resizerSize:n,snapThreshold:o,layout:i,currentNode:a,onLayoutChange:l,onResizeStart:y,onResizeEnd:D,parentLeft:c,parentTop:T,parentWidth:x,parentHeight:v}){let{onResizeStart:R,onResize:E,onResizeEnd:L,minSplitPercentage:p=5,maxSplitPercentage:b=95,locked:f=false}=ee();return tn.useCallback(z=>{if(f)return;z.preventDefault();let A=e.current;if(!A)return;y&&y(),R&&R(a);let I=A.getBoundingClientRect(),V=z.clientX,w=z.clientY,K=s,h=z.currentTarget,F=I.left+I.width*(c/100),Y=I.top+I.height*(T/100),O=I.width*(x/100),m=I.height*(v/100),_=Array.from(document.querySelectorAll('div[role="separator"][data-direction]')).filter(N=>N!==h&&N.getAttribute("data-direction")===r).map(N=>{let d=N.getBoundingClientRect();return t?d.left+d.width/2:d.top+d.height/2}),k=K;Ve({cursor:t?"col-resize":"row-resize",resizerEl:h,onMove:N=>{let d=t?(N.clientX-V)/O*100:(N.clientY-w)/m*100,B=K+d,ae=t?F+(O-n)*(B/100)+n/2:Y+(m-n)*(B/100)+n/2,W=1/0,te=null;for(let j of _){let u=Math.abs(ae-j);u<o&&u<W&&(W=u,te=j);}let le=B;te!==null&&(le=t?(te-n/2-F)/(O-n)*100:(te-n/2-Y)/(m-n)*100);let fe=Math.max(p,Math.min(b,le));k=fe;let me=ve(i,a,fe);if(me){let{panes:j,splitters:u}=se(me),S=e.current;if(S){for(let P of j)S.style.setProperty(`--pane-left-${P.paneId}`,`${P.left}%`),S.style.setProperty(`--pane-top-${P.paneId}`,`${P.top}%`),S.style.setProperty(`--pane-width-${P.paneId}`,`${P.width}%`),S.style.setProperty(`--pane-height-${P.paneId}`,`${P.height}%`);for(let P of u)S.style.setProperty(`--splitter-pos-${P.id}`,`${P.direction==="row"?P.left:P.top}%`);}}E&&E(a,fe);},onEnd:()=>{let N=ve(i,a,k),d=e.current;if(d){let{panes:B,splitters:ae}=se(N);for(let W of B)d.style.removeProperty(`--pane-left-${W.paneId}`),d.style.removeProperty(`--pane-top-${W.paneId}`),d.style.removeProperty(`--pane-width-${W.paneId}`),d.style.removeProperty(`--pane-height-${W.paneId}`);for(let W of ae)d.style.removeProperty(`--splitter-pos-${W.id}`);}l(N),D&&D(),L&&L(a,k);}});},[e,t,r,s,n,o,i,a,l,y,D,R,E,L,p,b,c,T,x,v])}var sn=({splitter:e,resizerSize:t,snapThreshold:r,containerRef:s})=>{let{layout:n,onLayoutChange:o,classNames:i,locked:a}=ee(),[l,y]=tn.useState(false),{currentNode:D,direction:c,left:T,top:x,width:v,height:R,parentLeft:E,parentTop:L,parentWidth:p,parentHeight:b}=e,f=c==="row",z=Je({containerRef:s,isRow:f,direction:c,splitPercentage:D.splitPercentage,resizerSize:t,snapThreshold:r,layout:n,currentNode:D,onLayoutChange:o,onResizeStart:()=>y(true),onResizeEnd:()=>y(false),parentLeft:E,parentTop:L,parentWidth:p,parentHeight:b}),A=f?{position:"absolute",left:`calc(var(--splitter-pos-${e.id}, ${T}%) - ${t/2}px)`,top:`calc(${x}% + ${t/2}px)`,width:`${t}px`,height:`calc(${R}% - ${t}px)`,cursor:a?"default":"col-resize",pointerEvents:a?"none":"auto",zIndex:10,userSelect:"none",touchAction:"none",boxSizing:"border-box"}:{position:"absolute",left:`calc(${T}% + ${t/2}px)`,top:`calc(var(--splitter-pos-${e.id}, ${x}%) - ${t/2}px)`,width:`calc(${v}% - ${t}px)`,height:`${t}px`,cursor:a?"default":"row-resize",pointerEvents:a?"none":"auto",zIndex:10,userSelect:"none",touchAction:"none",boxSizing:"border-box"};return jsxRuntime.jsx("div",{className:`zeugma-resizer ${i.resizer||""}`.trim(),"data-direction":c,"data-resizing":l||void 0,style:A,onPointerDown:z,role:"separator","aria-valuenow":D.splitPercentage,"aria-valuemin":5,"aria-valuemax":95})},an=tn__default.default.memo(({paneId:e,renderPane:t})=>jsxRuntime.jsx(jsxRuntime.Fragment,{children:t(e)}),(e,t)=>e.paneId===t.paneId&&e.renderPane===t.renderPane),ln=({tree:e,resizerSize:t=4,snapThreshold:r})=>{let{layout:s,renderPane:n,activeId:o,dismissIntentId:i,setContainerRef:a,fullscreenPaneId:l,snapThreshold:y,locked:D,classNames:c}=ee(),T=r!==void 0?r:y??8,x=e!==void 0?e:s,v=tn.useRef(null),{panes:R,splitters:E}=tn.useMemo(()=>x?se(x):{panes:[],splitters:[]},[x]);if(!x)return null;let L=()=>jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[R.map(p=>{let b=l===p.paneId;return jsxRuntime.jsx("div",{style:{position:"absolute",left:b?"0%":`var(--pane-left-${p.paneId}, ${p.left}%)`,top:b?"0%":`var(--pane-top-${p.paneId}, ${p.top}%)`,width:b?"100%":`var(--pane-width-${p.paneId}, ${p.width}%)`,height:b?"100%":`var(--pane-height-${p.paneId}, ${p.height}%)`,overflow:"hidden",zIndex:b?20:1,display:l&&!b?"none":"block",padding:b?"0px":`${t/2}px`,boxSizing:"border-box"},children:jsxRuntime.jsx(an,{paneId:p.paneId,renderPane:n})},p.paneId)}),!l&&E.map(p=>jsxRuntime.jsx(sn,{splitter:p,resizerSize:t,snapThreshold:T,containerRef:v},p.id))]});if(e===void 0){let p=o!==null&&o===i,b=z=>{a(z),v.current=z;},f=`zeugma-dashboard-root ${p?"zeugma-dashboard-dismiss-active":""} ${D?c.dashboardLocked||"zeugma-dashboard-locked":""}`.trim();return jsxRuntime.jsx("div",{ref:b,className:f,style:{position:"relative",width:"100%",height:"100%",overflow:"hidden"},children:L()})}return jsxRuntime.jsx("div",{ref:v,style:{position:"relative",width:"100%",height:"100%",overflow:"hidden"},children:L()})};var yt="zeugma-height:",pn="default-pane";function fn(e){try{let t=localStorage.getItem(yt+e);if(t!==null){let r=Number(t);if(Number.isFinite(r)&&r>0)return r}}catch{}return null}function Pt(e,t){try{localStorage.setItem(yt+e,String(Math.round(t)));}catch{}}var xt=({children:e,active:t=true,height:r,onHeightChange:s,minHeight:n=100,maxHeight:o=1/0,persist:i,localStorageKey:a,resizerHeight:l=6,className:y,resizerClassName:D})=>{let c=i?a||pn:null,T=()=>{let f=(c?fn(c):null)??r??400;return We(f,n,o)},[x,v]=tn.useState(T),R=tn.useRef(null),E=c?x:r??x,L=tn.useRef(r);tn.useEffect(()=>{if(r!==void 0&&r!==L.current){let f=We(r,n,o);v(f),c&&Pt(c,f);}L.current=r;},[r,n,o,c]);let p=tn.useCallback(()=>o,[o]),b=tn.useCallback(f=>{f.preventDefault();let z=f.clientY,A=E,I=p(),V=f.currentTarget,w=Tt(R.current),K=w?w.scrollTop:0,h=z,F=null,Y=(m,$)=>{let _=$-K,N=m-z+_,d=We(A+N,n,I);return R.current&&(R.current.style.height=`${d}px`),d},O=()=>{if(!w)return;let m=w===document.documentElement||w===document.body?{top:0,bottom:window.innerHeight}:w.getBoundingClientRect(),$=40,_=10,k=0;h>m.bottom-$?k=Math.min(1,(h-(m.bottom-$))/$)*_:h<m.top+$&&(k=-Math.min(1,(m.top+$-h)/$)*_),k!==0&&(w.scrollTop+=k,Y(h,w.scrollTop)),F=requestAnimationFrame(O);};F=requestAnimationFrame(O),Ve({cursor:"row-resize",resizerEl:V,onMove:m=>{h=m.clientY,w&&Y(h,w.scrollTop);},onEnd:()=>{F!==null&&cancelAnimationFrame(F);let m=A;R.current&&(m=R.current.getBoundingClientRect().height),m=We(m,n,I),v(m),s&&s(m),c&&Pt(c,m);}});},[E,n,p,s,c]);return t?jsxRuntime.jsxs("div",{ref:R,className:`zeugma-resizable-container ${y||""}`.trim(),style:{height:`${E}px`,position:"relative",overflow:"hidden",boxSizing:"border-box"},children:[jsxRuntime.jsx("div",{style:{height:`calc(100% - ${l}px)`,overflow:"hidden"},children:e}),jsxRuntime.jsx("div",{className:`zeugma-resizable-handle ${D||""}`.trim(),style:{height:`${l}px`,cursor:"row-resize",position:"relative",zIndex:10,userSelect:"none",touchAction:"none",boxSizing:"border-box",flexShrink:0},onPointerDown:b,role:"separator","aria-orientation":"horizontal","aria-valuenow":Math.round(E),"aria-valuemin":n,"aria-valuemax":o===1/0?void 0:o})]}):jsxRuntime.jsx("div",{className:`zeugma-resizable-container disabled ${y||""}`.trim(),style:{height:"100%",position:"relative",overflow:"hidden",boxSizing:"border-box"},children:jsxRuntime.jsx("div",{style:{height:"100%",overflow:"hidden"},children:e})})};function We(e,t,r){return Math.max(t,Math.min(r,e))}function Tt(e){if(typeof window>"u"||!e)return null;let t=e.parentElement;if(!t)return document.documentElement;let s=window.getComputedStyle(t).overflowY;return s==="auto"||s==="scroll"?t:Tt(t)}var _e=tn.createContext(null);var xn={top:{position:"absolute",top:0,left:"25%",width:"50%",height:"25%",zIndex:20,pointerEvents:"auto"},bottom:{position:"absolute",bottom:0,left:"25%",width:"50%",height:"25%",zIndex:20,pointerEvents:"auto"},left:{position:"absolute",top:"25%",left:0,width:"25%",height:"50%",zIndex:20,pointerEvents:"auto"},right:{position:"absolute",top:"25%",right:0,width:"25%",height:"50%",zIndex:20,pointerEvents:"auto"},full:{position:"absolute",top:0,left:0,right:0,bottom:0,zIndex:20,pointerEvents:"auto",cursor:"not-allowed"}},Tn={top:{position:"absolute",top:0,left:0,right:0,height:"50%",zIndex:21,pointerEvents:"none",boxSizing:"border-box"},bottom:{position:"absolute",bottom:0,left:0,right:0,height:"50%",zIndex:21,pointerEvents:"none",boxSizing:"border-box"},left:{position:"absolute",top:0,bottom:0,left:0,width:"50%",zIndex:21,pointerEvents:"none",boxSizing:"border-box"},right:{position:"absolute",top:0,bottom:0,right:0,width:"50%",zIndex:21,pointerEvents:"none",boxSizing:"border-box"},full:{position:"absolute",top:0,left:0,right:0,bottom:0,zIndex:21,pointerEvents:"none",boxSizing:"border-box"}},Rt=({id:e,position:t,activeClassName:r})=>{let{setNodeRef:s,isOver:n}=core.useDroppable({id:e});return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{ref:s,style:xn[t]}),n&&jsxRuntime.jsx("div",{className:r,style:Tn[t]})]})},Rn=({id:e,children:t,style:r,locked:s=false})=>{let{layout:n,activeId:o,classNames:i,fullscreenPaneId:a,onFullscreenChange:l,locked:y}=ee(),{removePane:D,updateTabMetadata:c,selectTab:T,removeTab:x}=$e(),v=tn.useContext(ke);if(!v)throw new Error("Pane must be used within a Zeugma provider");let{registerPortalTarget:R}=v,E=tn.useMemo(()=>q(n,e),[n,e]),L=E?.id??e,p=E?.tabs??[e],b=E?.activeTabId??e,f=E?.tabsMetadata,z=f?.[e],A=E?.locked??false,I=s||A,V=y||I,w=y||I,K=o!==null&&o!==e&&(!p.includes(o)||p.length>1)&&!w,{attributes:h,listeners:F,setNodeRef:Y}=core.useDraggable({id:e,disabled:V}),O=o!==null&&p.includes(o),m=a===e,$=tn.useCallback(()=>jsxRuntime.jsx("div",{id:`zeugma-tab-target-${b}`,className:"zeugma-tab-content-wrapper",style:{height:"100%",width:"100%"}}),[b]);tn.useEffect(()=>{let d=document.getElementById(`zeugma-tab-target-${b}`);return R(b,d),()=>{R(b,null);}},[b,R]);let _=tn.useMemo(()=>({isDragging:O,isFullscreen:m,toggleFullscreen:()=>l?.(m?null:e),remove:()=>{m&&l?.(null),D(L);},metadata:z,updateMetadata:d=>{c(e,d);},locked:V,tabs:p,activeTabId:b,selectTab:d=>T(L,d),removeTab:d=>{m&&d===b&&l?.(null),x(d);},tabsMetadata:f,updateTabMetadata:(d,B)=>{c(d,B);},renderActiveTab:$}),[O,m,l,e,x,z,c,V,p,b,T,L,f,$]),k=tn.useMemo(()=>V?{disabled:true}:{...F,...h},[F,h,V]),N=`${i.pane||""} ${I?i.paneLocked||"zeugma-pane-locked":""}`.trim();return jsxRuntime.jsx(_e.Provider,{value:k,children:jsxRuntime.jsxs("div",{ref:Y,className:N,style:{position:"relative",width:"100%",height:"100%",...r},children:[t(_),K&&jsxRuntime.jsx("div",{style:{position:"absolute",top:0,left:0,right:0,bottom:0,zIndex:15,pointerEvents:"none"},children:["top","bottom","left","right"].map(d=>jsxRuntime.jsx(Rt,{id:`drop-${d}-${e}`,position:d,activeClassName:i.dropPreview},d))}),o!==null&&o!==e&&w&&jsxRuntime.jsx("div",{style:{position:"absolute",top:0,left:0,right:0,bottom:0,zIndex:15,pointerEvents:"none"},children:jsxRuntime.jsx(Rt,{id:`drop-locked-${e}`,position:"full",activeClassName:i.lockedPreview||"zeugma-locked-preview"})})]})})};var En=({children:e,className:t,style:r})=>{let s=tn.useContext(_e);if(!s)throw new Error("<DragHandle> must be used inside a <Pane>");let{disabled:n,...o}=s;return jsxRuntime.jsx("div",{className:t,style:{cursor:n?"default":"grab",userSelect:n?"auto":"none",touchAction:n?"auto":"none",...r},...n?{}:o,children:e})};var Mn=({id:e,locked:t=false,children:r,className:s,style:n})=>{let{locked:o}=ee(),i=t||o,{attributes:a,listeners:l,setNodeRef:y,isDragging:D}=core.useDraggable({id:`tab-header-${e}`,disabled:i}),{setNodeRef:c,isOver:T}=core.useDroppable({id:`tab-drop-${e}`,disabled:i});return jsxRuntime.jsx("div",{ref:v=>{y(v),c(v);},className:s,style:{display:"inline-flex",cursor:i?"default":"grab",...n},...i?{}:l,...i?{}:a,children:r({isDragging:D,isOver:T})})};exports.DEFAULT_DRAG_ACTIVATION_DISTANCE=At;exports.DEFAULT_RESIZER_SIZE=Fn;exports.DEFAULT_SNAP_THRESHOLD=Ht;exports.DragHandle=En;exports.Pane=Rn;exports.PaneTree=ln;exports.ResizableContainer=xt;exports.Tab=Mn;exports.Zeugma=jt;exports.addPane=lt;exports.computeLayout=se;exports.createDragSession=Ve;exports.findPane=q;exports.generateUniqueId=ie;exports.mergeTab=ct;exports.moveTab=ut;exports.removePane=be;exports.removeTab=de;exports.selectTab=Ae;exports.splitPane=ye;exports.updatePaneLock=He;exports.updateSplitPercentage=ve;exports.updateTabMetadata=Ze;exports.useResizer=Je;exports.useZeugma=Ft;exports.useZeugmaContext=Ot;//# sourceMappingURL=index.cjs.map
|
|
6
|
+
`,document.head.appendChild(r),t.setAttribute("data-resizing","true");let o=a=>{n(a);},i=()=>{document.body.classList.remove("zeugma-resizing"),t.removeAttribute("data-resizing");let a=document.getElementById("zeugma-global-cursor-style");a&&a.remove(),document.removeEventListener("pointermove",o),document.removeEventListener("pointerup",i),s();};document.addEventListener("pointermove",o),document.addEventListener("pointerup",i);}function be(e){try{return JSON.stringify(e)}catch{return ""}}var Me=$t.createContext(void 0),ze=$t.createContext(void 0),xe=$t.createContext(void 0),re=()=>{let e=$t.useContext(Me);if(!e)throw new Error("useZeugmaState must be used within a Zeugma provider");return e},Se=()=>{let e=$t.useContext(ze);if(!e)throw new Error("useZeugmaActions must be used within a Zeugma provider");return e};function mt(e){let{initialLayout:t,layout:n,onChange:s,fullscreenPaneId:r,onFullscreenChange:o,locked:i=false,dragActivationDistance:a=8,snapThreshold:u=8,minSplitPercentage:f=5,maxSplitPercentage:I=95,enableDragToDismiss:b=false,dismissThreshold:v=60,onRemove:R,onDragStart:y,onDragEnd:M,onResizeStart:m,onResize:D,onResizeEnd:g,onDismissIntentChange:C}=e,[T,L]=$t.useState(()=>n!==void 0?n:t??null),[$,U]=$t.useState(()=>be(n!==void 0?n:null)),[Y,z]=$t.useState(r||null),[q,V]=$t.useState(i),[B,J]=$t.useState(null),[j,d]=$t.useState(null),[x,Z]=$t.useState(null),N=$t.useRef(null),E=$t.useCallback(c=>{N.current=c;},[]),l=$t.useCallback(c=>{z(c),o?.(c);},[o]);if($t.useEffect(()=>{V(i);},[i]),$t.useEffect(()=>{r!==void 0&&z(r);},[r]),n!==void 0){let c=be(n);c!==$&&(U(c),L(n));}let p=$t.useCallback(c=>(...h)=>{let H=T,A=c(H,...h);be(H)!==be(A)&&(L(A),s?.(A));},[T,s]),P=$t.useCallback(p((c,h)=>typeof h=="function"?h(c):h),[p]),Q=$t.useCallback(p((c,h)=>ue(c,h)),[p]),W=$t.useCallback(p((c,h)=>Ve(c,h)),[p]),O=$t.useCallback(p((c,h,H,A,ne)=>{let ce=ee(c,h)??G(c,h);if(!ce)return c;let at=ee(c,ne)??G(c,ne)??{type:"pane",id:ne,tabs:[ne],activeTabId:ne},lt=ue(c,ne);return me(lt,ce.id,H,A,at)}),[p]),X=$t.useCallback(p((c,h,H)=>de(c,h,H)),[p]),F=$t.useCallback(p((c,h,H)=>he(c,h,H)),[p]),S=$t.useCallback(p((c,h,H)=>{let A=ee(c,h)??G(c,h);return A?Pe(c,A.id,H):c}),[p]),w=$t.useCallback(p((c,h,H)=>{let A=ee(c,h)??G(c,h);return A?ye(c,A.id,H):c}),[p]),k=$t.useCallback(p((c,h,H)=>{let A=ee(c,H)??G(c,H);return A?We(c,h,A.id):c}),[p]),oe=$t.useCallback(p((c,h,H,A)=>Ue(c,h,H,A)),[p]),te=$t.useCallback(p((c,h)=>ae(c,h)),[p]);return {layout:T,setLayout:P,fullscreenPaneId:Y,setFullscreenPaneId:l,locked:q,setLocked:V,activeId:B,setActiveId:J,activeType:j,setActiveType:d,dismissIntentId:x,setDismissIntentId:Z,containerRef:N,setContainerRef:E,dragActivationDistance:a,snapThreshold:u,minSplitPercentage:f,maxSplitPercentage:I,enableDragToDismiss:b,dismissThreshold:v,onRemove:R,onDragStart:y,onDragEnd:M,onResizeStart:m,onResize:D,onResizeEnd:g,onDismissIntentChange:C,removePane:Q,addPane:W,splitPane:O,updateSplitPercentage:X,updateTabMetadata:F,updatePaneLock:S,selectTab:w,mergeTab:k,moveTab:oe,removeTab:te}}var gt=()=>{let e=re(),t=Se();return {...e,...t}};var Re=class extends core.PointerSensor{static activators=[{eventName:"onPointerDown",handler:({nativeEvent:t})=>!t.target?.closest(".drag-cancel")}]},De=class extends core.TouchSensor{static activators=[{eventName:"onTouchStart",handler:({nativeEvent:t})=>!t.target?.closest(".drag-cancel")}]};function Ce(e){if(e instanceof MouseEvent||e instanceof PointerEvent)return {x:e.clientX,y:e.clientY};if(typeof TouchEvent<"u"&&e instanceof TouchEvent){let t=e.touches[0]||e.changedTouches[0];if(t)return {x:t.clientX,y:t.clientY}}return null}function Xe(e){let{layout:t,setLayout:n,activeId:s,setActiveId:r,setActiveType:o,dismissIntentId:i,setDismissIntentId:a,setOverTabId:u,setOverTabPosition:f,containerRef:I,dragActivationDistance:b,enableDragToDismiss:v,dismissThreshold:R,onRemove:y,onDragStart:M,onDragEnd:m,onDismissIntentChange:D,removeTab:g,moveTab:C,selectTab:T}=e,L=$t.useRef(null),$=Ae(s),[U,Y]=$t.useState(false);Fe(U);let z=core.useSensors(core.useSensor(Re,{activationConstraint:{distance:b}}),core.useSensor(De,{activationConstraint:{delay:250,tolerance:5}})),q=$t.useCallback(d=>{let x=core.pointerWithin(d);if(x.length>0)return x;if(d.active.id.toString().startsWith("tab-header-")){let N=d.droppableContainers.filter(E=>E.id.toString().startsWith("tab-drop-"));return core.closestCenter({...d,droppableContainers:N})}return []},[]);return {sensors:z,collisionDetection:q,onDragStart:d=>{let x=d.active.id.toString(),Z=x.startsWith("tab-header-"),N=Z?x.substring(11):x;r(N),o(Z?"tab":"pane"),u(null),f(null);let E=d.activatorEvent;if($.current=Ce(E),v&&I.current?L.current=I.current.getBoundingClientRect():L.current=null,Z){let l=G(t,N);l&&T(l.id,N);}M&&M(N);},onDragMove:d=>{let{over:x}=d,Z=x?.id.toString()||"",N=Z.startsWith("drop-locked-");Y(N);let E=Z.match(/^tab-drop-(.+)$/);if(E&&x){let[,S]=E,w=d.active.id.toString();if((w.startsWith("tab-header-")?w.substring(11):w)!==S){let te="before",c=x.rect,h=d.activatorEvent,H=null;if($.current)H=$.current.x;else {let A=Ce(h);A&&(H=A.x+d.delta.x);}if(H!==null){let A=c.left+c.width/2;H>A&&(te="after");}u(S),f(te);}else u(null),f(null);}else u(null),f(null);if(!v)return;let l=d.active.id.toString(),_=l.startsWith("tab-header-")?l.substring(11):l,P=L.current;if(!P){i!==null&&(a(null),D?.(null));return}let Q=d.activatorEvent,W=null,O=null;if($.current)W=$.current.x,O=$.current.y;else {let S=Ce(Q);S&&(W=S.x+d.delta.x,O=S.y+d.delta.y);}let X=0;if(W!==null&&O!==null){let S=0,w=0;W<P.left?S=P.left-W:W>P.right&&(S=W-P.right),O<P.top?w=P.top-O:O>P.bottom&&(w=O-P.bottom),X=Math.sqrt(S*S+w*w);}else {let S=d.active.rect.current.translated;if(S){let w=S.left+S.width/2,k=S.top+S.height/2,oe=0,te=0;w<P.left?oe=P.left-w:w>P.right&&(oe=w-P.right),k<P.top?te=P.top-k:k>P.bottom&&(te=k-P.bottom),X=Math.sqrt(oe*oe+te*te);}}X>R?i!==_&&(a(_),D?.(_)):i!==null&&(a(null),D?.(null));},onDragEnd:d=>{r(null),o(null),Y(false),u(null),f(null);let{active:x,over:Z}=d,N=x.id.toString(),E=N.startsWith("tab-header-"),l=E?N.substring(11):N,p=v&&i===l;if(a(null),D?.(null),L.current=null,p){y?y(l):g(l),m&&m(l,null,null);return}if(!Z){m&&m(l,null,null);return}let _=Z.id.toString();if(_.startsWith("drop-locked-")){m&&m(l,null,null);return}let P=_.match(/^tab-drop-(.+)$/);if(P){let[,c]=P;if(l!==c){let h="before",H=Z.rect,A=d.activatorEvent,ne=null;if($.current)ne=$.current.x;else {let ce=Ce(A);ce&&(ne=ce.x+d.delta.x);}if(ne!==null){let ce=H.left+H.width/2;ne>ce&&(h="after");}C(l,c,h),m&&m(l,c,{type:"move",position:"center"});}else m&&m(l,null,null);return}let Q=_.match(/^drop-(left|right|top|bottom)-(.+)$/);if(!Q){m&&m(l,null,null);return}let[,W,O]=Q,X=E?G(t,l):ee(t,l),F=X&&X.id===O,S=X&&X.tabs.length===1;if(l===O||F&&S){m&&m(l,null,null);return}let w=W==="left"||W==="right"?"row":"column",k;if(E){let h=G(t,l)?.tabsMetadata?.[l];k={type:"pane",id:ie(),tabs:[l],activeTabId:l,tabsMetadata:h?{[l]:h}:void 0};}else k=ee(t,l)??{type:"pane",id:ie(),tabs:[l],activeTabId:l};let oe=E?ae(t,l):ue(t,l),te=me(oe,O,w,W,k);n(te),m&&m(l,O,{type:"split",direction:w,position:W});},onDragCancel:()=>{r(null),o(null),Y(false),u(null),f(null),a(null),D?.(null),L.current=null;}}}var qe=({activeId:e,render:t,className:n})=>{let s=$t.useRef(null);return $t.useEffect(()=>{let r=o=>{s.current&&(s.current.style.transform=`translate(${o.clientX+12}px, ${o.clientY+12}px)`);};return document.addEventListener("pointermove",r),()=>document.removeEventListener("pointermove",r)},[]),jsxRuntime.jsx("div",{ref:s,className:n,style:{position:"fixed",top:0,left:0,zIndex:9999,pointerEvents:"none"},children:t(e)})};var Je=({tabId:e,target:t,renderWidget:n})=>{let[s,r]=$t.useState(false),o=$t.useRef(null);if($t.useEffect(()=>{r(true);},[]),$t.useEffect(()=>{if(!s||!o.current)return;let a=o.current;if(t)t.appendChild(a);else {let u=document.getElementById("zeugma-hidden-portal-container");u||(u=document.createElement("div"),u.id="zeugma-hidden-portal-container",u.style.display="none",document.body.appendChild(u)),u.appendChild(a);}},[t,s]),$t.useEffect(()=>()=>{o.current&&o.current.remove();},[]),!s)return null;o.current||(o.current=document.createElement("div"),o.current.className=`zeugma-portal-wrapper-${e}`,o.current.style.width="100%",o.current.style.height="100%");let i=o.current;return !i||!n?null:reactDom.createPortal(n(e),i)};var Lt=e=>{let t=e,{renderPane:n,renderWidget:s,renderDragOverlay:r,classNames:o={},children:i,layout:a,setLayout:u,fullscreenPaneId:f,setFullscreenPaneId:I,locked:b,activeId:v,activeType:R,dismissIntentId:y,setContainerRef:M,snapThreshold:m,minSplitPercentage:D,maxSplitPercentage:g,onRemove:C,onResizeStart:T,onResize:L,onResizeEnd:$,removePane:U,addPane:Y,updateTabMetadata:z,updatePaneLock:q,selectTab:V,mergeTab:B,removeTab:J}=t,{portalTargets:j,registerPortalTarget:d}=Oe(),[x,Z]=$t.useState(null),[N,E]=$t.useState(null),l=Xe({...t,setOverTabId:Z,setOverTabPosition:E}),p=$t.useCallback(F=>n(F),[n]),_=$t.useMemo(()=>o,[o.dashboard,o.dashboardDismissActive,o.pane,o.paneLocked,o.dropPreview,o.dragOverlay,o.resizer,o.dismissPreview,o.dashboardLocked,o.lockedPreview,o.tabDropPreview]),P=$t.useCallback((F,S)=>{$&&$(F,S);},[$]),Q=$t.useMemo(()=>({layout:a,setLayout:u,renderPane:p,activeId:v,dismissIntentId:y,overTabId:x,overTabPosition:N,setContainerRef:M,fullscreenPaneId:f,classNames:_,onRemove:C,onFullscreenChange:I,snapThreshold:m,onResizeStart:T,onResize:L,onResizeEnd:P,minSplitPercentage:D,maxSplitPercentage:g,locked:b}),[a,v,y,x,N,M,f,_,C,I,m,T,L,D,g,u,p,P,b]),W=$t.useMemo(()=>({removePane:U,addPane:Y,updateTabMetadata:z,updatePaneLock:q,selectTab:V,mergeTab:B,removeTab:J}),[U,Y,z,q,V,B,J]),O=$t.useMemo(()=>{let F=[];function S(w){w&&(w.type==="pane"?F.push(...w.tabs):(S(w.first),S(w.second)));}return S(a),F},[a]),X=$t.useMemo(()=>({registerPortalTarget:d}),[d]);return jsxRuntime.jsx(ze.Provider,{value:W,children:jsxRuntime.jsx(Me.Provider,{value:Q,children:jsxRuntime.jsxs(xe.Provider,{value:X,children:[jsxRuntime.jsx(core.DndContext,{id:"zeugma-dnd-context",...l,children:i}),v&&R&&r&&jsxRuntime.jsx(qe,{activeId:v,render:F=>r(F,R),className:`${o.dragOverlay||""} ${v===y&&o.dismissPreview||""}`.trim()}),jsxRuntime.jsx("div",{id:"zeugma-portal-host",style:{display:"none"},children:O.map(F=>jsxRuntime.jsx(Je,{tabId:F,target:j[F]||null,renderWidget:s},F))})]})})})};function Ze({containerRef:e,isRow:t,direction:n,splitPercentage:s,resizerSize:r,snapThreshold:o,layout:i,currentNode:a,onLayoutChange:u,onResizeStart:f,onResizeEnd:I,parentLeft:b,parentTop:v,parentWidth:R,parentHeight:y}){let{onResizeStart:M,onResize:m,onResizeEnd:D,minSplitPercentage:g=5,maxSplitPercentage:C=95,locked:T=false}=re();return $t.useCallback(L=>{if(T)return;L.preventDefault();let $=e.current;if(!$)return;f&&f(),M&&M(a);let U=$.getBoundingClientRect(),Y=L.clientX,z=L.clientY,q=s,V=L.currentTarget,B=U.left+U.width*(b/100),J=U.top+U.height*(v/100),j=U.width*(R/100),d=U.height*(y/100),Z=Array.from(document.querySelectorAll('div[role="separator"][data-direction]')).filter(E=>E!==V&&E.getAttribute("data-direction")===n).map(E=>{let l=E.getBoundingClientRect();return t?l.left+l.width/2:l.top+l.height/2}),N=q;Te({cursor:t?"col-resize":"row-resize",resizerEl:V,onMove:E=>{let l=t?(E.clientX-Y)/j*100:(E.clientY-z)/d*100,p=q+l,_=t?B+(j-r)*(p/100)+r/2:J+(d-r)*(p/100)+r/2,P=1/0,Q=null;for(let F of Z){let S=Math.abs(_-F);S<o&&S<P&&(P=S,Q=F);}let W=p;Q!==null&&(W=t?(Q-r/2-B)/(j-r)*100:(Q-r/2-J)/(d-r)*100);let O=Math.max(g,Math.min(C,W));N=O;let X=de(i,a,O);if(X){let{panes:F,splitters:S}=se(X),w=e.current;if(w){for(let k of F)w.style.setProperty(`--pane-left-${k.paneId}`,`${k.left}%`),w.style.setProperty(`--pane-top-${k.paneId}`,`${k.top}%`),w.style.setProperty(`--pane-width-${k.paneId}`,`${k.width}%`),w.style.setProperty(`--pane-height-${k.paneId}`,`${k.height}%`);for(let k of S)w.style.setProperty(`--splitter-pos-${k.id}`,`${k.direction==="row"?k.left:k.top}%`);}}m&&m(a,O);},onEnd:()=>{let E=de(i,a,N),l=e.current;if(l){let{panes:p,splitters:_}=se(E);for(let P of p)l.style.removeProperty(`--pane-left-${P.paneId}`),l.style.removeProperty(`--pane-top-${P.paneId}`),l.style.removeProperty(`--pane-width-${P.paneId}`),l.style.removeProperty(`--pane-height-${P.paneId}`);for(let P of _)l.style.removeProperty(`--splitter-pos-${P.id}`);}u(E),I&&I(),D&&D(a,N);}});},[e,t,n,s,r,o,i,a,u,f,I,M,m,D,g,C,b,v,R,y])}var At=({splitter:e,resizerSize:t,snapThreshold:n,containerRef:s})=>{let{layout:r,setLayout:o,classNames:i,locked:a}=re(),[u,f]=$t.useState(false),{currentNode:I,direction:b,left:v,top:R,width:y,height:M,parentLeft:m,parentTop:D,parentWidth:g,parentHeight:C}=e,T=b==="row",L=Ze({containerRef:s,isRow:T,direction:b,splitPercentage:I.splitPercentage,resizerSize:t,snapThreshold:n,layout:r,currentNode:I,onLayoutChange:o,onResizeStart:()=>f(true),onResizeEnd:()=>f(false),parentLeft:m,parentTop:D,parentWidth:g,parentHeight:C}),$=T?{position:"absolute",left:`calc(var(--splitter-pos-${e.id}, ${v}%) - ${t/2}px)`,top:`calc(${R}% + ${t/2}px)`,width:`${t}px`,height:`calc(${M}% - ${t}px)`,cursor:a?"default":"col-resize",pointerEvents:a?"none":"auto",zIndex:10,userSelect:"none",touchAction:"none",boxSizing:"border-box"}:{position:"absolute",left:`calc(${v}% + ${t/2}px)`,top:`calc(var(--splitter-pos-${e.id}, ${R}%) - ${t/2}px)`,width:`calc(${y}% - ${t}px)`,height:`${t}px`,cursor:a?"default":"row-resize",pointerEvents:a?"none":"auto",zIndex:10,userSelect:"none",touchAction:"none",boxSizing:"border-box"};return jsxRuntime.jsx("div",{className:i.resizer||"","data-direction":b,"data-resizing":u||void 0,style:$,onPointerDown:L,role:"separator","aria-valuenow":I.splitPercentage,"aria-valuemin":5,"aria-valuemax":95})},Ft=$t__default.default.memo(({paneId:e,renderPane:t})=>jsxRuntime.jsx(jsxRuntime.Fragment,{children:t(e)}),(e,t)=>e.paneId===t.paneId&&e.renderPane===t.renderPane),Ot=({tree:e,resizerSize:t=4,snapThreshold:n})=>{let{layout:s,renderPane:r,activeId:o,dismissIntentId:i,setContainerRef:a,fullscreenPaneId:u,snapThreshold:f,locked:I,classNames:b}=re(),v=n!==void 0?n:f??8,R=e!==void 0?e:s,y=$t.useRef(null),{panes:M,splitters:m}=$t.useMemo(()=>R?se(R):{panes:[],splitters:[]},[R]);if(!R)return null;let D=()=>jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[M.map(g=>{let C=u===g.paneId;return jsxRuntime.jsx("div",{style:{position:"absolute",left:C?"0%":`var(--pane-left-${g.paneId}, ${g.left}%)`,top:C?"0%":`var(--pane-top-${g.paneId}, ${g.top}%)`,width:C?"100%":`var(--pane-width-${g.paneId}, ${g.width}%)`,height:C?"100%":`var(--pane-height-${g.paneId}, ${g.height}%)`,overflow:"hidden",zIndex:C?20:1,display:u&&!C?"none":"block",padding:C?"0px":`${t/2}px`,boxSizing:"border-box"},children:jsxRuntime.jsx(Ft,{paneId:g.paneId,renderPane:r})},g.paneId)}),!u&&m.map(g=>jsxRuntime.jsx(At,{splitter:g,resizerSize:t,snapThreshold:v,containerRef:y},g.id))]});if(e===void 0){let g=o!==null&&o===i,C=L=>{a(L),y.current=L;},T=`${b.dashboard||""} ${g&&b.dashboardDismissActive||""} ${I&&b.dashboardLocked||""}`.trim();return jsxRuntime.jsx("div",{ref:C,className:T,style:{position:"relative",width:"100%",height:"100%",overflow:"hidden"},children:D()})}return jsxRuntime.jsx("div",{ref:y,style:{position:"relative",width:"100%",height:"100%",overflow:"hidden"},children:D()})};var nt="zeugma-height:",_t="default-pane";function Yt(e){try{let t=localStorage.getItem(nt+e);if(t!==null){let n=Number(t);if(Number.isFinite(n)&&n>0)return n}}catch{}return null}function tt(e,t){try{localStorage.setItem(nt+e,String(Math.round(t)));}catch{}}var rt=({children:e,active:t=true,height:n,onHeightChange:s,minHeight:r=100,maxHeight:o=1/0,persist:i,localStorageKey:a,resizerHeight:u=6,className:f,resizerClassName:I})=>{let b=i?a||_t:null,v=()=>{let T=(b?Yt(b):null)??n??400;return Ee(T,r,o)},[R,y]=$t.useState(v),M=$t.useRef(null),m=b?R:n??R,D=$t.useRef(n);$t.useEffect(()=>{if(n!==void 0&&n!==D.current){let T=Ee(n,r,o);y(T),b&&tt(b,T);}D.current=n;},[n,r,o,b]);let g=$t.useCallback(()=>o,[o]),C=$t.useCallback(T=>{T.preventDefault();let L=T.clientY,$=m,U=g(),Y=T.currentTarget,z=ot(M.current),q=z?z.scrollTop:0,V=L,B=null,J=(d,x)=>{let Z=x-q,E=d-L+Z,l=Ee($+E,r,U);return M.current&&(M.current.style.height=`${l}px`),l},j=()=>{if(!z)return;let d=z===document.documentElement||z===document.body?{top:0,bottom:window.innerHeight}:z.getBoundingClientRect(),x=40,Z=10,N=0;V>d.bottom-x?N=Math.min(1,(V-(d.bottom-x))/x)*Z:V<d.top+x&&(N=-Math.min(1,(d.top+x-V)/x)*Z),N!==0&&(z.scrollTop+=N,J(V,z.scrollTop)),B=requestAnimationFrame(j);};B=requestAnimationFrame(j),Te({cursor:"row-resize",resizerEl:Y,onMove:d=>{V=d.clientY,z&&J(V,z.scrollTop);},onEnd:()=>{B!==null&&cancelAnimationFrame(B);let d=$;M.current&&(d=M.current.getBoundingClientRect().height),d=Ee(d,r,U),y(d),s&&s(d),b&&tt(b,d);}});},[m,r,g,s,b]);return t?jsxRuntime.jsxs("div",{ref:M,className:`zeugma-resizable-container ${f||""}`.trim(),style:{height:`${m}px`,position:"relative",overflow:"hidden",boxSizing:"border-box"},children:[jsxRuntime.jsx("div",{style:{height:`calc(100% - ${u}px)`,overflow:"hidden"},children:e}),jsxRuntime.jsx("div",{className:`zeugma-resizable-handle ${I||""}`.trim(),style:{height:`${u}px`,cursor:"row-resize",position:"relative",zIndex:10,userSelect:"none",touchAction:"none",boxSizing:"border-box",flexShrink:0},onPointerDown:C,role:"separator","aria-orientation":"horizontal","aria-valuenow":Math.round(m),"aria-valuemin":r,"aria-valuemax":o===1/0?void 0:o})]}):jsxRuntime.jsx("div",{className:`zeugma-resizable-container disabled ${f||""}`.trim(),style:{height:"100%",position:"relative",overflow:"hidden",boxSizing:"border-box"},children:jsxRuntime.jsx("div",{style:{height:"100%",overflow:"hidden"},children:e})})};function Ee(e,t,n){return Math.max(t,Math.min(n,e))}function ot(e){if(typeof window>"u"||!e)return null;let t=e.parentElement;if(!t)return document.documentElement;let s=window.getComputedStyle(t).overflowY;return s==="auto"||s==="scroll"?t:ot(t)}var Ne=$t.createContext(null);var en={top:{position:"absolute",top:0,left:"25%",width:"50%",height:"25%",zIndex:20,pointerEvents:"auto"},bottom:{position:"absolute",bottom:0,left:"25%",width:"50%",height:"25%",zIndex:20,pointerEvents:"auto"},left:{position:"absolute",top:"25%",left:0,width:"25%",height:"50%",zIndex:20,pointerEvents:"auto"},right:{position:"absolute",top:"25%",right:0,width:"25%",height:"50%",zIndex:20,pointerEvents:"auto"},full:{position:"absolute",top:0,left:0,right:0,bottom:0,zIndex:20,pointerEvents:"auto",cursor:"not-allowed"}},tn={top:{position:"absolute",top:0,left:0,right:0,height:"50%",zIndex:21,pointerEvents:"none",boxSizing:"border-box"},bottom:{position:"absolute",bottom:0,left:0,right:0,height:"50%",zIndex:21,pointerEvents:"none",boxSizing:"border-box"},left:{position:"absolute",top:0,bottom:0,left:0,width:"50%",zIndex:21,pointerEvents:"none",boxSizing:"border-box"},right:{position:"absolute",top:0,bottom:0,right:0,width:"50%",zIndex:21,pointerEvents:"none",boxSizing:"border-box"},full:{position:"absolute",top:0,left:0,right:0,bottom:0,zIndex:21,pointerEvents:"none",boxSizing:"border-box"}},st=({id:e,position:t,activeClassName:n})=>{let{setNodeRef:s,isOver:r}=core.useDroppable({id:e});return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{ref:s,style:en[t]}),r&&jsxRuntime.jsx("div",{className:n,style:tn[t]})]})},nn=({id:e,children:t,style:n,locked:s=false})=>{let r=$t.useRef(null),{layout:o,activeId:i,classNames:a,fullscreenPaneId:u,onFullscreenChange:f,locked:I}=re(),{removePane:b,updateTabMetadata:v,selectTab:R,removeTab:y}=Se(),M=$t.useContext(xe);if(!M)throw new Error("Pane must be used within a Zeugma provider");let{registerPortalTarget:m}=M,D=$t.useMemo(()=>ee(o,e),[o,e]),g=D?.id??e,C=D?.tabs??[e],T=D?.activeTabId??e,L=D?.tabsMetadata,$=L?.[e],U=D?.locked??false,Y=s||U,z=I||Y,q=I||Y,V=i!==null&&i!==e&&(!C.includes(i)||C.length>1)&&!q,{attributes:B,listeners:J,setNodeRef:j}=core.useDraggable({id:e,disabled:z}),d=i!==null&&C.includes(i),x=u===e,Z=$t.useCallback(()=>jsxRuntime.jsx("div",{ref:r,id:`zeugma-tab-target-${T}`,className:"zeugma-tab-content-wrapper",style:{height:"100%",width:"100%"}}),[T]);$t.useEffect(()=>{let p=r.current;return m(T,p),()=>{m(T,null);}},[T,m]);let N=$t.useMemo(()=>({isDragging:d,isFullscreen:x,toggleFullscreen:()=>f?.(x?null:e),remove:()=>{x&&f?.(null),b(g);},metadata:$,updateMetadata:p=>{v(e,p);},locked:z,tabs:C,activeTabId:T,selectTab:p=>R(g,p),removeTab:p=>{x&&p===T&&f?.(null),y(p);},tabsMetadata:L,updateTabMetadata:(p,_)=>{v(p,_);},renderActiveTab:Z}),[d,x,f,e,y,$,v,z,C,T,R,g,L,Z]),E=$t.useMemo(()=>z?{disabled:true}:{...J,...B},[J,B,z]),l=`${a.pane||""} ${Y&&a.paneLocked||""}`.trim();return jsxRuntime.jsx(Ne.Provider,{value:E,children:jsxRuntime.jsxs("div",{ref:j,className:l,style:{position:"relative",width:"100%",height:"100%",...n},children:[t(N),V&&jsxRuntime.jsx("div",{style:{position:"absolute",top:0,left:0,right:0,bottom:0,zIndex:15,pointerEvents:"none"},children:["top","bottom","left","right"].map(p=>jsxRuntime.jsx(st,{id:`drop-${p}-${e}`,position:p,activeClassName:a.dropPreview},p))}),i!==null&&i!==e&&q&&jsxRuntime.jsx("div",{style:{position:"absolute",top:0,left:0,right:0,bottom:0,zIndex:15,pointerEvents:"none"},children:jsxRuntime.jsx(st,{id:`drop-locked-${e}`,position:"full",activeClassName:a.lockedPreview||""})})]})})};var sn=({children:e,className:t,style:n})=>{let s=$t.useContext(Ne);if(!s)throw new Error("<DragHandle> must be used inside a <Pane>");let{disabled:r,...o}=s;return jsxRuntime.jsx("div",{className:t,style:{cursor:r?"default":"grab",userSelect:r?"auto":"none",touchAction:r?"auto":"none",...n},...r?{}:o,children:e})};var un=({id:e,locked:t=false,children:n,className:s,style:r})=>{let{locked:o,classNames:i={},overTabId:a,overTabPosition:u}=re(),f=t||o,{attributes:I,listeners:b,setNodeRef:v,isDragging:R}=core.useDraggable({id:`tab-header-${e}`,disabled:f}),{setNodeRef:y,isOver:M}=core.useDroppable({id:`tab-drop-${e}`,disabled:f}),m=C=>{v(C),y(C);},D=M&&a===e,g=D?u:null;return jsxRuntime.jsxs("div",{ref:m,className:s,style:{display:"inline-flex",position:"relative",cursor:f?"default":"grab",...r},...f?{}:b,...f?{}:I,children:[n({isDragging:R,isOver:D}),D&&g&&jsxRuntime.jsx("div",{className:i.tabDropPreview||"",style:{position:"absolute",top:0,bottom:0,width:"2px",backgroundColor:"#6366f1",left:g==="before"?0:void 0,right:g==="after"?0:void 0,pointerEvents:"none",zIndex:10}})]})};exports.DEFAULT_DRAG_ACTIVATION_DISTANCE=pt;exports.DEFAULT_RESIZER_SIZE=gn;exports.DEFAULT_SNAP_THRESHOLD=dt;exports.DragHandle=sn;exports.Pane=nn;exports.PaneTree=Ot;exports.PortalRegistryContext=xe;exports.ResizableContainer=rt;exports.Tab=un;exports.Zeugma=Lt;exports.ZeugmaActionsContext=ze;exports.ZeugmaStateContext=Me;exports.addPane=Ve;exports.computeLayout=se;exports.createDragSession=Te;exports.findPaneById=ee;exports.findPaneContainingTab=G;exports.generateUniqueId=ie;exports.mergeTab=We;exports.moveTab=Ue;exports.removePane=ue;exports.removeTab=ae;exports.safeJsonStringify=be;exports.selectTab=ye;exports.splitPane=me;exports.updatePaneLock=Pe;exports.updateSplitPercentage=de;exports.updateTabMetadata=he;exports.useResizer=Ze;exports.useZeugma=mt;exports.useZeugmaActions=Se;exports.useZeugmaContext=gt;exports.useZeugmaState=re;//# sourceMappingURL=index.cjs.map
|
|
7
7
|
//# sourceMappingURL=index.cjs.map
|