react-dockable-desktop 3.0.0 → 3.1.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/index.js CHANGED
@@ -1,4 +1,25 @@
1
- import Mt,{useState as Me,useRef as ve,useEffect as de}from"react";import{createPortal as Xt}from"react-dom";import{createContext as Ee,useContext as we,useState as an,useRef as Te,useMemo as rt,useCallback as G,useEffect as mt,useLayoutEffect as ln,useSyncExternalStore as dn}from"react";import{createContext as on,useContext as sn}from"react";var rn={requestClose:()=>{console.warn("FormContainerContract: requestClose called but no container is present")},setDirty:()=>{},onCloseRequested:()=>()=>{},setTitle:()=>{},setIcon:()=>{},containerType:"standalone",instanceId:"standalone",onClose:()=>()=>{},onMinimize:()=>()=>{},onRestore:()=>()=>{},onResize:()=>()=>{}},ft=on(rn),Se=ft.Provider,Be=()=>sn(ft);var Oe=class{registry=new Map;register(t,i,c){this.registry.set(t,{Component:i,defaultOptions:c})}get(t){return this.registry.get(t)}getRegisteredIds(){return Array.from(this.registry.keys())}},st=new Oe;var _e={floatWindow:{id:"dockable-desktop-floatWindow",defaultMessage:"Float Window"},minimizePanel:{id:"dockable-desktop-minimizePanel",defaultMessage:"Minimize Panel"},closeTab:{id:"dockable-desktop-closeTab",defaultMessage:"Close Tab"},restorePanel:{id:"dockable-desktop-restorePanel",defaultMessage:"Restore Panel"},maximizePanel:{id:"dockable-desktop-maximizePanel",defaultMessage:"Maximize Panel"},closePanel:{id:"dockable-desktop-closePanel",defaultMessage:"Close Panel"},dockWindow:{id:"dockable-desktop-dockWindow",defaultMessage:"Dock Window"},minimize:{id:"dockable-desktop-minimize",defaultMessage:"Minimize"},maximize:{id:"dockable-desktop-maximize",defaultMessage:"Maximize"},restoreSize:{id:"dockable-desktop-restoreSize",defaultMessage:"Restore Size"},close:{id:"dockable-desktop-close",defaultMessage:"Close"},closeEmptyGroup:{id:"dockable-desktop-closeEmptyGroup",defaultMessage:"Close empty split group"},anchorToRightEdge:{id:"dockable-desktop-anchorToRightEdge",defaultMessage:"Anchor to Right Edge"},anchorToBottomEdge:{id:"dockable-desktop-anchorToBottomEdge",defaultMessage:"Anchor to Bottom Edge"},windowAnchoringOptions:{id:"dockable-desktop-windowAnchoringOptions",defaultMessage:"Window Anchoring Options"},unsavedChangesTitle:{id:"dockable-desktop-unsavedChangesTitle",defaultMessage:"Unsaved Changes"},unsavedChangesMessage:{id:"dockable-desktop-unsavedChangesMessage",defaultMessage:'"{title}" has unsaved changes. Do you want to discard your changes and close?'},discardChanges:{id:"dockable-desktop-discardChanges",defaultMessage:"Discard Changes"},cancel:{id:"dockable-desktop-cancel",defaultMessage:"Cancel"},yes:{id:"dockable-desktop-yes",defaultMessage:"Yes"},no:{id:"dockable-desktop-no",defaultMessage:"No"},ok:{id:"dockable-desktop-ok",defaultMessage:"OK"},closePanelTooltip:{id:"dockable-desktop-closePanelTooltip",defaultMessage:"Close panel"},closeTooltip:{id:"dockable-desktop-closeTooltip",defaultMessage:"Close"}};import{jsx as Ie}from"react/jsx-runtime";var zt=Ee(null),yt=Ee(null),Lt=Ee(null),Wt=Ee(null),Nt=Ee(_e),Ot=Ee({}),Ce=()=>we(Ot),Dt=Ee(st),He=()=>we(Dt),ht=class{listeners={};subscribe(t,i){return this.listeners[t]||(this.listeners[t]=[]),this.listeners[t].push(i),()=>{this.listeners[t]=this.listeners[t].filter(c=>c!==i)}}publish(t,i){this.listeners[t]&&this.listeners[t].forEach(c=>c(i))}},cn={type:"leaf",id:"group-default",panels:[],activePanelId:null};function un(s){if(s)try{let t=JSON.parse(s);if(t.gridRoot&&Array.isArray(t.floating)&&Array.isArray(t.minimized)&&t.panels)return{gridRoot:t.gridRoot,floating:t.floating,minimized:t.minimized,panels:t.panels,activePanelId:Object.keys(t.panels)[0]??null}}catch{}return{gridRoot:cn,floating:[],minimized:[],panels:{},activePanelId:null}}var Pt=({children:s,client:t,formatMessage:i,predefinedMessages:c,dir:I,modalClass:C,modalBodyClass:A,sidePanelClass:D,sidePanelBodyClass:M,windowClass:R,windowBodyClass:O})=>{let p=Te(t?.registry??st).current,E=t?.config.formatMessage??i,b=t?.config.predefinedMessages??c,k=t?.config.dir??I,[L,d]=an(()=>({...un(t?.initialState??null),draggedPanelId:null,dir:k||"ltr",isRtl:k==="rtl"})),P=Te(L);P.current=L;let h=Te(new Set);ln(()=>{h.current.forEach(e=>e())},[L]);let m=G(()=>P.current,[]),B=G(e=>(h.current.add(e),()=>h.current.delete(e)),[]),H=Te({}),y=rt(()=>({..._e,...b}),[b]),S=Te(new ht),F=Te(1e3),W=G((e,r)=>S.current.subscribe(e,r),[]),$=G((e,r)=>{S.current.publish(e,r)},[]),Y=G((e,r)=>{let n=typeof e.x=="string"?parseFloat(e.x):e.x,o=typeof e.y=="string"?parseFloat(e.y):e.y,l=typeof e.width=="string"?parseFloat(e.width):e.width,g=typeof e.height=="string"?parseFloat(e.height):e.height;isNaN(n)&&(n=300),isNaN(o)&&(o=150),isNaN(l)&&(l=450),isNaN(g)&&(g=350);let w=J=>r.some(V=>{let ae=typeof V.x=="string"?parseFloat(V.x):V.x,Z=typeof V.y=="string"?parseFloat(V.y):V.y;return!V.maximized&&Math.abs(ae-J.x)<20&&Math.abs(Z-J.y)<20}),T=0;for(;w({x:n,y:o})&&T<10;)n+=30,o+=30,T++;let x=Math.max(100,window.innerWidth||1024),_=Math.max(100,window.innerHeight||768);return(n+l>x||o+g>_)&&(n=100+T%5*30,o=100+T%5*30),n=Math.max(0,Math.min(n,x-100)),o=Math.max(0,Math.min(o,_-40)),{x:n,y:o,width:l,height:g}},[]),re=G(e=>{d(r=>{let n=r.panels[e];if(!n)return r;if(n.state==="floating"){let o=r.floating.find(g=>g.id===e);if(!o)return r;let l=!r.floating.some(g=>g.z>o.z);return l&&r.activePanelId===e?r:(l||(F.current+=1),{...r,floating:r.floating.map(g=>g.id===e?{...g,z:l?o.z:F.current}:g),activePanelId:e})}else if(n.state==="docked"){if(r.activePanelId===e)return r;let o=l=>l.type==="leaf"?l.panels.includes(e)?{...l,activePanelId:e}:l:{...l,children:l.children.map(o)};return{...r,gridRoot:o(r.gridRoot),activePanelId:e}}return r.activePanelId===e?r:{...r,activePanelId:e}})},[]),ne=(e,r)=>{if(e.type==="leaf"){let n=e.panels.indexOf(r);if(n===-1)return e;let o=e.panels.filter(w=>w!==r),l=e.activePanelId===r?o[n]||o[n-1]||o[0]||null:e.activePanelId,g={...e,panels:o,activePanelId:l};return o.length===0&&!e.keepOnEmpty?null:g}else{let n=e.children.map(g=>ne(g,r)).filter(g=>g!==null);if(n.length===0)return null;if(n.length===1)return n[0];let o=e.sizes.slice(0,n.length),l=o.reduce((g,w)=>g+w,0);return{...e,children:n,sizes:o.map(g=>g/l)}}},se=(e,r,n)=>{if(e.type==="leaf"){if(e.id===r){let o=e.panels.includes(n)?e.panels:[...e.panels,n];return{...e,panels:o,activePanelId:n}}return e}else return{...e,children:e.children.map(o=>se(o,r,n))}},X=e=>{if(e.type==="leaf")return e.id;for(let r of e.children){let n=X(r);if(n)return n}return null},ee=G((e,r,n)=>{let o=!(e in P.current.panels);d(l=>{let g=l.panels[e],w=p.get(r),T=n?.title||n?.title||w?.defaultOptions?.title||e,x=n?.initialTarget||w?.defaultOptions?.initialTarget||"docked",_=w?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350};if(g)if(g.state==="minimized"){let Z=l.minimized.filter(ie=>ie.id!==e);if(x==="floating"||!l.gridRoot){F.current+=1;let ie=Y(_,l.floating);return{...l,minimized:Z,floating:[...l.floating,{...ie,id:e,z:F.current}],panels:{...l.panels,[e]:{...g,state:"floating"}}}}else{let ie=X(l.gridRoot)||"group-default";return{...l,minimized:Z,gridRoot:se(l.gridRoot,ie,e),panels:{...l.panels,[e]:{...g,state:"docked"}}}}}else{if(g.state==="floating")return re(e),l;{let Z=ie=>ie.type==="leaf"?ie.panels.includes(e)?{...ie,activePanelId:e}:ie:{...ie,children:ie.children.map(Z)};return{...l,gridRoot:Z(l.gridRoot)}}}let V={id:e,title:T,component:r,state:x==="tabbed"?"docked":x},ae={...l.panels,[e]:V};if(x==="floating"){F.current+=1;let Z=Y(_,l.floating),ie=n?.stickyRight??w?.defaultOptions?.defaultStickyRight??!1,nt=n?.stickyBottom??w?.defaultOptions?.defaultStickyBottom??!1,pt=Math.max(100,window.innerWidth||1024),ot=Math.max(100,window.innerHeight||768),it=typeof Z.width=="string"?parseFloat(Z.width):Z.width,nn=typeof Z.height=="string"?parseFloat(Z.height):Z.height,It=Z.x,Tt=Z.y,Et=10;return ie&&(It=pt-it-Et),nt&&(Tt=ot-nn-Et),{...l,floating:[...l.floating,{...Z,id:e,z:F.current,x:It,y:Tt,stickyRight:ie,stickyBottom:nt}],panels:ae}}else{let Z=X(l.gridRoot)||"group-default";return{...l,gridRoot:se(l.gridRoot,Z,e),panels:ae}}}),o&&S.current.publish("panel:opened",{id:e,component:r})},[Y,re]),ue=G(e=>{let r=e in P.current.panels;d(n=>{let o=n.panels[e];if(!o||p.get(o.component)?.defaultOptions?.canClose===!1)return n;delete H.current[e];let g={...n.panels};delete g[e];let w=ne(n.gridRoot,e);return{...n,gridRoot:w||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:n.floating.filter(T=>T.id!==e),minimized:n.minimized.filter(T=>T.id!==e),panels:g}}),r&&S.current.publish("panel:closed",{id:e})},[]),he=G((e,r)=>{H.current[e]=r},[]),Q=G(e=>{delete H.current[e]},[]),ge=G((e,r,n)=>{d(o=>{let l=o.panels[e];return l?{...o,panels:{...o.panels,[e]:{...l,dirty:r,dirtyOptions:n}}}:o})},[]),te=G((e,r)=>{d(n=>{let o=n.panels[e];return o?{...n,panels:{...n.panels,[e]:{...o,title:r}}}:n})},[]),oe=G(async(e,r)=>{if(r?.force){ue(e);return}let n=H.current[e];if(n&&!await n())return;let o=P.current.panels[e];if(o?.dirty)if(r?.onConfirm){if(!await r.onConfirm(o.dirtyOptions))return}else return;ue(e)},[ue]),Xe=G(e=>{let r=P.current.panels[e]?.state!=="minimized"&&e in P.current.panels;d(n=>{let o=n.panels[e];if(!o||o.state==="minimized"||p.get(o.component)?.defaultOptions?.canMinimize===!1)return n;let g,w;if(o.state==="floating"){let x=n.floating.find(_=>_.id===e);x&&(g={x:Number(x.x),y:Number(x.y),width:Number(x.width),height:Number(x.height),stickyRight:x.stickyRight,stickyBottom:x.stickyBottom})}else if(o.state==="docked"){let x=_=>{if(_.type==="leaf")return _.panels.includes(e)?_.id:null;for(let J of _.children){let V=x(J);if(V)return V}return null};w=x(n.gridRoot)??void 0}let T=ne(n.gridRoot,e);return{...n,gridRoot:T||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:n.floating.filter(x=>x.id!==e),minimized:[...n.minimized,{id:e,title:o.title,component:o.component}],panels:{...n.panels,[e]:{...o,state:"minimized",previousState:o.state,lastFloatingRect:g,lastLeafId:w}}}}),r&&S.current.publish("panel:minimized",{id:e})},[]),ke=G(e=>{let r=P.current.panels[e]?.state==="minimized";d(n=>{let o=n.panels[e];if(!o||o.state!=="minimized")return n;let l=n.minimized.filter(w=>w.id!==e);if((o.previousState||"docked")==="floating"){F.current+=1;let w=p.get(o.component),T=o.lastFloatingRect||w?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},x=Y(T,n.floating);return{...n,minimized:l,floating:[...n.floating,{...x,id:e,z:F.current,stickyRight:!!o.lastFloatingRect?.stickyRight,stickyBottom:!!o.lastFloatingRect?.stickyBottom}],panels:{...n.panels,[e]:{...o,state:"floating"}}}}else{let w=(J,V)=>J.type==="leaf"?J.id===V:J.children.some(ae=>w(ae,V)),T=o.lastLeafId&&w(n.gridRoot,o.lastLeafId),x=p.get(o.component),_=x?.defaultOptions?.canDrag!==!1;if(T)return{...n,minimized:l,gridRoot:se(n.gridRoot,o.lastLeafId,e),panels:{...n.panels,[e]:{...o,state:"docked"}}};if(_){F.current+=1;let J=o.lastFloatingRect||x?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},V=Y(J,n.floating);return{...n,minimized:l,floating:[...n.floating,{...V,id:e,z:F.current,stickyRight:!!o.lastFloatingRect?.stickyRight,stickyBottom:!!o.lastFloatingRect?.stickyBottom}],panels:{...n.panels,[e]:{...o,state:"floating"}}}}else{let J=X(n.gridRoot)||"group-default";return{...n,minimized:l,gridRoot:se(n.gridRoot,J,e),panels:{...n.panels,[e]:{...o,state:"docked"}}}}}}),r&&S.current.publish("panel:restored",{id:e})},[Y]),be=G((e,r)=>{d(n=>{let o=n.panels[e];if(!o||p.get(o.component)?.defaultOptions?.canDrag===!1)return n;let g=p.get(o.component),w=r||g?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},T=ne(n.gridRoot,e);F.current+=1;let x=Y(w,n.floating);return{...n,gridRoot:T||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:[...n.floating,{...x,id:e,z:F.current}],panels:{...n.panels,[e]:{...o,state:"floating"}}}})},[Y]),qe=G((e,r)=>{d(n=>{let o=n.panels[e];if(!o)return n;let l=n.floating.filter(T=>T.id!==e),g=ne(n.gridRoot,e),w=r||X(g||n.gridRoot)||"group-default";return{...n,gridRoot:se(g||n.gridRoot,w,e),floating:l,panels:{...n.panels,[e]:{...o,state:"docked"}}}})},[]),Ke=(e,r,n,o)=>{if(e.type==="leaf"){if(e.id===r){let l={type:"leaf",id:`group-split-${Date.now()}-${Math.floor(Math.random()*1e3)}`,panels:[n],activePanelId:n};return{type:"branch",orientation:o==="left"||o==="right"?"horizontal":"vertical",sizes:[.5,.5],children:o==="left"||o==="top"?[l,e]:[e,l]}}return e}else return{...e,children:e.children.map(l=>Ke(l,r,n,o))}},Ue=G(e=>{d(r=>({...r,draggedPanelId:e}))},[]),je=G((e,r,n)=>{d(o=>{let l=o.panels[e];if(!l)return o;let g=o.floating.filter(x=>x.id!==e),w=ne(o.gridRoot,e),T;return n==="center"?T=se(w||o.gridRoot,r,e):T=Ke(w||o.gridRoot,r,e,n),{...o,gridRoot:T,floating:g,panels:{...o.panels,[e]:{...l,state:"docked"}},draggedPanelId:null}})},[]),Je=G((e,r)=>{d(n=>{let o=n.panels[e];if(!o)return n;let l=n.floating.filter(J=>J.id!==e),g=ne(n.gridRoot,e),w={type:"leaf",id:`group-edge-${Date.now()}-${Math.floor(Math.random()*1e3)}`,panels:[e],activePanelId:e},T=r==="left"||r==="right"?"horizontal":"vertical",x=r==="left"||r==="top"?[w,g||n.gridRoot]:[g||n.gridRoot,w];return{...n,gridRoot:{type:"branch",orientation:T,sizes:r==="left"||r==="top"?[.3,.7]:[.7,.3],children:x},floating:l,panels:{...n.panels,[e]:{...o,state:"docked"}},draggedPanelId:null}})},[]),Ne=G((e,r,n)=>{d(o=>{let l=o.panels[e];if(!l)return o;let g=ne(o.gridRoot,e),w=_=>{if(_.type==="leaf"){if(_.id===r){let J=_.panels.filter(Z=>Z!==e),V=Math.max(0,Math.min(n,J.length)),ae=[...J];return ae.splice(V,0,e),{..._,panels:ae,activePanelId:e}}return _}else return{..._,children:_.children.map(w)}},T=w(g||o.gridRoot),x=o.floating.filter(_=>_.id!==e);return{...o,gridRoot:T,floating:x,panels:{...o.panels,[e]:{...l,state:"docked"}},draggedPanelId:null}})},[]),ye=G(e=>{d(r=>{let n=l=>{if(l.type==="leaf")return l.id===e&&l.canClose!==!1?null:l;{let g=l.children.map(x=>n(x)).filter(x=>x!==null);if(g.length===0)return null;if(g.length===1)return g[0];let w=l.sizes.slice(0,g.length),T=w.reduce((x,_)=>x+_,0);return{...l,children:g,sizes:w.map(x=>x/T)}}},o=n(r.gridRoot);return{...r,gridRoot:o||{type:"leaf",id:"group-default",panels:[],activePanelId:null}}})},[]),Ve=G(e=>{d(r=>({...r,floating:r.floating.map(n=>n.id===e?{...n,maximized:!n.maximized}:n)}))},[]),Ze=G((e,r)=>{let n=(o,l)=>{if(o.type==="leaf")return o;if(l===e.length)return{...o,sizes:r};let g=e[l],w=o.children.map((T,x)=>x===g?n(T,l+1):T);return{...o,children:w}};d(o=>({...o,gridRoot:n(o.gridRoot,0)}))},[]),Qe=G((e,r)=>{d(n=>({...n,floating:n.floating.map(o=>o.id===e?{...o,...r}:o)}))},[]),Ae=G(()=>JSON.stringify({gridRoot:P.current.gridRoot,floating:P.current.floating,minimized:P.current.minimized,panels:P.current.panels}),[]),et=G(e=>{try{let r=JSON.parse(e);if(r.gridRoot&&r.floating&&r.minimized&&r.panels){let n=Object.keys(r.panels)[0]||null;return d(o=>({...o,gridRoot:r.gridRoot,floating:r.floating,minimized:r.minimized,panels:r.panels,draggedPanelId:null,activePanelId:n})),!0}return!1}catch(r){return console.error("Failed to parse layout configuration:",r),!1}},[]),tt=G(e=>{d(r=>r.activePanelId===e?r:{...r,activePanelId:e})},[]),a=G(e=>{d(r=>r.dir===e?r:{...r,dir:e,isRtl:e==="rtl"})},[]),v=G(e=>e in P.current.panels,[]),u=G(()=>Object.keys(P.current.panels),[]);mt(()=>{k&&d(e=>e.dir===k?e:{...e,dir:k,isRtl:k==="rtl"})},[k]);let z=rt(()=>({openPanel:ee,closePanel:ue,minimizePanel:Xe,restorePanel:ke,floatPanel:be,dockPanel:qe,maximizePanel:Ve,updateSplitSizes:Ze,updateFloatingPosition:Qe,focusPanel:re,isOpen:v,getOpenPanelIds:u,saveLayout:Ae,loadLayout:et,publish:$,subscribe:W,setDraggedPanelId:Ue,dockPanelToGroup:je,movePanelOrder:Ne,closeLeafGroup:ye,registerCloseGuard:he,unregisterCloseGuard:Q,setPanelDirty:ge,updatePanelTitle:te,requestClosePanel:oe,dockPanelToWorkspaceEdge:Je,setActivePanel:tt,setDirection:a}),[ee,ue,Xe,ke,be,qe,Ve,Ze,Qe,re,v,u,Ae,et,$,W,Ue,je,Ne,ye,he,Q,ge,te,oe,Je,tt,a]),N=e=>{let r=e.defaultMessage||e.id;return e.values&&Object.entries(e.values).forEach(([n,o])=>{r=r.replace(`{${n}}`,String(o))}),r},K=rt(()=>({modalClass:C,modalBodyClass:A,sidePanelClass:D,sidePanelBodyClass:M,windowClass:R,windowBodyClass:O}),[C,A,D,M,R,O]);mt(()=>{if(process.env.NODE_ENV!=="development")return;let e=!1;try{for(let r of Array.from(document.styleSheets))try{if(Array.from(r.cssRules||[]).some(o=>o.cssText?.includes("react-contexify"))){e=!0;break}}catch{}}catch{}e||console.warn(`[react-dockable-desktop] replace-react-contexify CSS not detected. Context menus may not render correctly.
2
- Add: import "replace-react-contexify/dist/ReactContexify.css"`)},[]),mt(()=>{if(t)return t._connect(z),()=>{t._disconnect()}},[t,z]);let j=rt(()=>({getSnapshot:m,subscribeToState:B}),[m,B]);return Ie(Ot.Provider,{value:K,children:Ie(Dt.Provider,{value:p,children:Ie(Wt.Provider,{value:j,children:Ie(zt.Provider,{value:L,children:Ie(yt.Provider,{value:z,children:Ie(Lt.Provider,{value:E||N,children:Ie(Nt.Provider,{value:y,children:s})})})})})})})},gn=s=>()=>{};function Pe(s){let t=we(zt),i=we(Wt),c=Te(s);c.current=s;let I=dn(i?.subscribeToState??gn,()=>{let C=i?.getSnapshot()??t;return c.current?c.current(C):C},()=>{let C=i?.getSnapshot()??t;return c.current?c.current(C):C});if(!t)throw new Error("useWindowManagerState must be used within WindowManagerProvider");return s?I:t}var $e=()=>{let s=we(yt);if(!s)throw new Error("useWindowManagerActions must be used within WindowManagerProvider");return s},vt=()=>{let s=we(yt);if(!s)throw new Error("useWindowManagerActionsInternal must be used within WindowManagerProvider");return s},le=()=>we(Lt)||(t=>{let i=t.defaultMessage||t.id;return t.values&&Object.entries(t.values).forEach(([c,I])=>{i=i.replace(`{${c}}`,String(I))}),i}),q=(s,t)=>s?typeof s=="string"?s:t(s):"",pn=()=>{let{publish:s,subscribe:t}=$e();return{publish:s,subscribe:t}},pe=()=>we(Nt),fn=()=>Be().instanceId;function Ft(s){if(!s)return typeof document<"u"?document.documentElement.dir?.toLowerCase()==="rtl"||document.body.dir?.toLowerCase()==="rtl":!1;let t=s.closest("[dir]");return t?t.getAttribute("dir")?.toLowerCase()==="rtl":document.documentElement.dir?.toLowerCase()==="rtl"||document.body.dir?.toLowerCase()==="rtl"}import{JsonContextMenu as wn}from"replace-react-contexify";import"replace-react-contexify/styles.css";import{createContext as _t,useContext as Ht,useState as mn,useCallback as fe,useMemo as hn,useRef as yn}from"react";import{jsx as Bt}from"react/jsx-runtime";var Pn=0,bt=()=>`panel-${++Pn}-${Date.now()}`,at=new Map,At={leftPanel:null,rightPanel:null,modals:[]},$t=_t(null),Gt=_t(null),wt=({children:s})=>{let[t,i]=mn(At),c=yn(t);c.current=t;let I=fe((d,P)=>{at.set(d,P)},[]),C=fe(d=>{at.delete(d)},[]),A=fe(async(d,P,h={})=>{let m=c.current.leftPanel;if(m){let y=at.get(m.id);if(y&&!await y())return null}let B=bt(),H={id:B,Component:d,props:P,containerType:"left-panel",options:h};return i(y=>({...y,leftPanel:H})),B},[]),D=fe(async(d,P,h={})=>{let m=c.current.rightPanel;if(m){let y=at.get(m.id);if(y&&!await y())return null}let B=bt(),H={id:B,Component:d,props:P,containerType:"right-panel",options:h};return i(y=>({...y,rightPanel:H})),B},[]),M=fe((d,P,h={})=>{let m=bt(),B=P.title,H={...h,title:h.title||B||"Confirmation"},y={id:m,Component:d,props:P,containerType:"modal",options:H};return i(S=>({...S,modals:[...S.modals,y]})),m},[]),R=fe(d=>{i(P=>({leftPanel:P.leftPanel?.id===d?null:P.leftPanel,rightPanel:P.rightPanel?.id===d?null:P.rightPanel,modals:P.modals.filter(h=>h.id!==d)}))},[]),O=fe(()=>{i(At)},[]),p=fe(()=>{i(d=>({...d,modals:[]}))},[]),E=fe(d=>t.leftPanel?.id===d?t.leftPanel:t.rightPanel?.id===d?t.rightPanel:t.modals.find(P=>P.id===d),[t]),b=fe((d,P)=>{i(h=>({leftPanel:h.leftPanel?.id===d?{...h.leftPanel,...P}:h.leftPanel,rightPanel:h.rightPanel?.id===d?{...h.rightPanel,...P}:h.rightPanel,modals:h.modals.map(m=>m.id===d?{...m,...P}:m)}))},[]),k=fe((d,P,h)=>{b(d,{dirty:P,dirtyOptions:h})},[b]),L=hn(()=>({openLeftPanel:A,openRightPanel:D,openModal:M,close:R,closeAll:O,closeAllModals:p,getInstance:E,updateInstance:b,setDirty:k,registerCloseHandler:I,unregisterCloseHandler:C}),[A,D,M,R,O,p,E,b,k,I,C]);return Bt($t.Provider,{value:t,children:Bt(Gt.Provider,{value:L,children:s})})},xe=()=>{let s=Ht($t);if(!s)throw new Error("usePanelState must be used within PanelProvider");return s},ze=()=>{let s=Ht(Gt);if(!s)throw new Error("usePanelActions must be used within PanelProvider");return s};import{useEffect as Yt,useRef as vn}from"react";import{jsx as Le,jsxs as Ct}from"react/jsx-runtime";var bn=({title:s,message:t,alert:i,alertType:c="info",useYesNoTitles:I=!1,onOK:C,onCancel:A})=>{let{requestClose:D,setIcon:M,setTitle:R}=Be(),O=le(),p=pe(),E=vn(null);Yt(()=>{if(s){let h=typeof s=="string"?s:O(s);R(h)}M&&M(Le("span",{children:"\u2753"}))},[s,R,M,O]),Yt(()=>{E.current?.focus()},[]);let b=typeof t=="string"?t:O(t),k=O(I?p.no:p.cancel),L=O(I?p.yes:p.ok),d=h=>{h.preventDefault(),C?.(),D()},P=()=>{A?.(),D()};return Ct("form",{onSubmit:d,className:"confirmation-form-body",children:[i&&Ct("div",{className:`confirmation-alert confirmation-alert-${c}`,children:[Le("span",{children:"\u2139\uFE0F"}),Le("span",{children:i})]}),Le("div",{style:{fontSize:"0.9rem",color:"inherit",lineHeight:1.5},children:b}),Le("hr",{style:{marginTop:"0.5rem",marginBottom:"0.5rem",opacity:.1}}),Ct("div",{className:"confirmation-actions",children:[Le("button",{type:"button",className:"dw-btn dw-btn-sm dw-btn-outline",onClick:P,children:k}),Le("button",{type:"submit",className:"dw-btn dw-btn-sm dw-btn-primary",ref:E,children:L})]})]})},We=bn;import{Fragment as In,jsx as f,jsxs as U}from"react/jsx-runtime";var Ge=new Map,dt="preserved-dom-container",xt=U("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:[f("rect",{x:"3",y:"3",width:"7",height:"9",rx:"1"}),f("rect",{x:"14",y:"3",width:"7",height:"5",rx:"1"}),f("rect",{x:"14",y:"12",width:"7",height:"9",rx:"1"}),f("rect",{x:"3",y:"16",width:"7",height:"5",rx:"1"})]}),qt=s=>{let t=Ge.get(s);return t||(t=document.createElement("div"),t.style.width="100%",t.style.height="100%",Ge.set(s,t)),t},Cn=(s,t,i)=>{let c=i.get(t);if(!c)return console.warn(`[react-dockable-desktop] Panel "${s}" references component key "${t}" which is not registered. Add it to the WorkspaceClient panels config:
3
- new WorkspaceClient({ panels: { "${t}": { component: YourComponent } } })`),U("div",{className:"dw-unregistered-panel",style:{border:"2px dashed #dc3545"},children:[f("h6",{style:{fontWeight:700,marginBottom:"0.25rem"},children:"\u26A0\uFE0F Component Unregistered"}),U("span",{style:{fontSize:"0.875rem",color:"var(--text-secondary, #94a3b8)"},children:["Key: ",t]})]});let I=c.Component;return f(I,{panelId:s})},Kt=new Map,De=new Map,lt=s=>{let t=De.get(s);return t||(t={onClose:new Set,onMinimize:new Set,onRestore:new Set,onResize:new Set},De.set(s,t)),t},Ut=({panelId:s})=>{let t=ve(null);return de(()=>{let i=t.current;if(!i)return;let c=qt(s);i.appendChild(c);let I=new ResizeObserver(C=>{for(let A of C){let{width:D,height:M}=A.contentRect;if(D>0&&M>0){Kt.set(s,{width:D,height:M});let R=De.get(s);R&&R.onResize.forEach(O=>O(D,M))}}});return I.observe(i),()=>{I.disconnect();let C=document.getElementById(dt);C||(C=document.createElement("div"),C.id=dt,C.style.display="none",document.body.appendChild(C)),C.appendChild(c)}},[s]),f("div",{ref:t,style:{width:"100%",height:"100%"}})},xn=({panelId:s})=>{let t=Pe(),i=He(),c=le(),I=ve(null),C=t.panels[s],A=C?i.get(C.component):null,D=A?.defaultOptions?.disableLivePreview||!1,M=Kt.get(s)||{width:800,height:500},R=M.width,O=M.height,b=Math.min(220/R,140/O);if(de(()=>{if(D)return;let k=I.current;if(!k)return;let L=Ge.get(s);if(L)return k.appendChild(L),()=>{let d=document.getElementById(dt);d||(d=document.createElement("div"),d.id=dt,d.style.display="none",document.body.appendChild(d)),d.appendChild(L)}},[s,D]),D){let k=R*b,L=O*b,d=C?.title||A?.defaultOptions?.title||"Panel",P=q(d,c),h=(Array.from(P)[0]||"P").toUpperCase();return f("div",{className:"taskbar-item-preview-frame",style:{width:`${k}px`,height:`${L}px`,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(108, 117, 125, 0.15)",border:"1px dashed var(--taskbar-item-border, rgba(255, 255, 255, 0.15))"},children:f("div",{style:{fontSize:"2rem",fontWeight:600,color:"var(--panel-title-color, var(--panel-text, rgba(255, 255, 255, 0.85)))",userSelect:"none"},children:h})})}return f("div",{className:"taskbar-item-preview-frame",style:{width:`${R*b}px`,height:`${O*b}px`},children:f("div",{ref:I,className:"taskbar-item-preview-host",style:{width:`${R}px`,height:`${O}px`,transform:`scale(${b})`,transformOrigin:"top left",position:"absolute",top:0,left:0,"--preview-scale":b}})})},Mn=({panelId:s,children:t})=>{let i=Pe(),{requestClosePanel:c,setPanelDirty:I,registerCloseGuard:C,unregisterCloseGuard:A,updatePanelTitle:D}=$e(),M=i.minimized.some(p=>p.id===s),R=ve(M);de(()=>{let p=De.get(s);p&&(M&&!R.current?p.onMinimize.forEach(E=>E()):!M&&R.current&&p.onRestore.forEach(E=>E()),R.current=M)},[M,s]),de(()=>()=>{let p=De.get(s);p&&(p.onClose.forEach(E=>E()),De.delete(s))},[s]);let O=Mt.useMemo(()=>({requestClose:p=>c(s,p),setDirty:p=>I(s,p),onCloseRequested:p=>(C(s,p),()=>A(s)),setTitle:p=>D(s,p),instanceId:s,onClose:p=>{let E=lt(s);return E.onClose.add(p),()=>E.onClose.delete(p)},onMinimize:p=>{let E=lt(s);return E.onMinimize.add(p),()=>E.onMinimize.delete(p)},onRestore:p=>{let E=lt(s);return E.onRestore.add(p),()=>E.onRestore.delete(p)},onResize:p=>{let E=lt(s);return E.onResize.add(p),()=>E.onResize.delete(p)}}),[s,c,I,C,A,D]);return f(Se,{value:O,children:t})},jt=({node:s,path:t,onTabRightClick:i,activeDropZone:c,onHoverDropZone:I,onTabDragStart:C,hoveredTab:A,onTabHover:D,defaultPanelIcon:M,onRequestClosePanel:R})=>{let{updateSplitSizes:O}=$e();if(s.type==="leaf")return f(Rn,{leaf:s,onTabRightClick:i,activeDropZone:c,onHoverDropZone:I,onTabDragStart:C,hoveredTab:A,onTabHover:D,defaultPanelIcon:M,onRequestClosePanel:R});let p=s.orientation==="horizontal",E=(b,k)=>{k.preventDefault();let L=p?k.clientX:k.clientY,d=[...s.sizes],P=k.currentTarget;P.classList.add("active"),document.body.classList.add("resizing-active",p?"resizing-row-active":"resizing-col-active");let h=k.currentTarget.parentElement,m=h?p?h.clientWidth:h.clientHeight:p?1e3:800,B=y=>{let W=((p?y.clientX:y.clientY)-L)/m,$=[...d];$[b]+=W,$[b+1]-=W,$[b]>.1&&$[b+1]>.1&&O(t,$)},H=()=>{P.classList.remove("active"),document.body.classList.remove("resizing-active","resizing-row-active","resizing-col-active"),window.removeEventListener("mousemove",B),window.removeEventListener("mouseup",H)};window.addEventListener("mousemove",B),window.addEventListener("mouseup",H)};return f("div",{style:{display:"flex",flexDirection:p?"row":"column",width:"100%",height:"100%",overflow:"hidden",position:"relative"},children:s.children.map((b,k)=>{let L=s.sizes[k]*100;return U(Mt.Fragment,{children:[f("div",{style:{flexGrow:s.sizes[k],flexBasis:`${L}%`,overflow:"hidden",position:"relative"},children:f(jt,{node:b,path:[...t,k],onTabRightClick:i,activeDropZone:c,onHoverDropZone:I,onTabDragStart:C,hoveredTab:A,onTabHover:D,defaultPanelIcon:M,onRequestClosePanel:R})}),k<s.children.length-1&&f("div",{onMouseDown:d=>E(k,d),style:{cursor:p?"col-resize":"row-resize",width:p?"1px":"100%",height:p?"100%":"1px",zIndex:20},className:"resizer-bar"})]},k)})})},Rn=({leaf:s,onTabRightClick:t,activeDropZone:i,onHoverDropZone:c,onTabDragStart:I,hoveredTab:C,onTabHover:A,defaultPanelIcon:D,onRequestClosePanel:M})=>{let R=Pe(),O=He(),{openPanel:p,closeLeafGroup:E,setActivePanel:b}=vt(),k=le(),L=pe(),{windowClass:d,windowBodyClass:P}=Ce(),h=m=>{p(m,R.panels[m].component),b(m)};return U("div",{"data-active-panel-id":s.activePanelId||"",className:`workspace-panel ${d??""}`,style:{overflow:"hidden",position:"relative"},children:[U("div",{className:"workspace-tab-bar",style:{minHeight:"38px"},children:[f("div",{className:"tab-headers-container",style:{scrollbarWidth:"none"},onMouseMove:m=>{R.draggedPanelId&&m.target===m.currentTarget&&A(s.id,"EMPTY",s.panels.length,"right")},onMouseLeave:m=>{R.draggedPanelId&&m.target===m.currentTarget&&A(s.id,"",-1,null)},children:s.panels.map((m,B)=>{let H=R.panels[m];if(!H)return null;let y=s.activePanelId===m,S=R.activePanelId===m,W=O.get(H.component)?.defaultOptions,$=C&&C.leafId===s.id&&C.panelId===m,Y=B===s.panels.length-1,re=C&&C.leafId===s.id&&C.panelId==="EMPTY"&&Y,ne=$?C.side==="left"?"drag-hover-left":"drag-hover-right":re?"drag-hover-right":"";return U("div",{onClick:()=>h(m),onMouseDown:X=>{W?.canDrag!==!1&&I(m,X)},onContextMenu:X=>t(m,X),onMouseMove:X=>{if(R.draggedPanelId){let ee=X.currentTarget.getBoundingClientRect(),he=X.clientX-ee.left<ee.width/2?"left":"right";A(s.id,m,B,he)}},onMouseLeave:()=>{R.draggedPanelId&&A(s.id,"",-1,null)},className:`workspace-tab ${y?S?"active workspace-tab-active-focused":"active workspace-tab-active-unfocused":"workspace-tab-inactive"} ${ne}`,style:{cursor:W?.canDrag===!1?"default":"pointer"},children:[U("span",{className:"text-truncate",style:{maxWidth:"120px",display:"flex",alignItems:"center"},children:[f("span",{className:"workspace-tab-icon",children:W?.icon||D||xt}),U("span",{children:[q(H.title,k),H.dirty?" *":""]})]}),W?.renderHeaderActions&&f("span",{className:"tab-header-actions",onClick:X=>X.stopPropagation(),onMouseDown:X=>X.stopPropagation(),children:W.renderHeaderActions(m)}),W?.canClose!==!1&&f("span",{onClick:X=>{X.stopPropagation(),M(m)},title:q(L.closeTab,k),className:"close-tab-x",style:{width:"18px",height:"18px",...W?.renderHeaderActions?{}:{marginInlineStart:"auto"}},children:f("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:f("path",{d:"M18 6L6 18M6 6l12 12"})})})]},m)})}),s.panels.length===0&&s.keepOnEmpty&&s.canClose!==!1&&f("span",{onClick:()=>E(s.id),className:"close-tab-x header-close-empty-group",style:{width:"18px",height:"18px",cursor:"pointer"},title:q(L.closeEmptyGroup,k),children:f("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:f("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),U("div",{className:`dw-panel-body ${P??""}`,style:{position:"relative",overflow:"hidden"},children:[s.activePanelId&&R.panels[s.activePanelId]?f(Ut,{panelId:s.activePanelId},s.activePanelId):f("div",{className:"empty-leaf-placeholder",children:f("span",{children:"Empty Workspace Section"})}),R.draggedPanelId!==null&&f("div",{className:"dock-drop-zone-overlay",children:U("div",{className:"dock-target-cross",children:[f("div",{onMouseEnter:()=>c(s.id,"top"),onMouseLeave:()=>c(s.id,null),className:"dock-target-box dock-target-top",children:"\u25B2"}),f("div",{onMouseEnter:()=>c(s.id,"bottom"),onMouseLeave:()=>c(s.id,null),className:"dock-target-box dock-target-bottom",children:"\u25BC"}),f("div",{onMouseEnter:()=>c(s.id,"left"),onMouseLeave:()=>c(s.id,null),className:"dock-target-box dock-target-left",children:"\u25C0"}),f("div",{onMouseEnter:()=>c(s.id,"right"),onMouseLeave:()=>c(s.id,null),className:"dock-target-box dock-target-right",children:"\u25B6"}),f("div",{onMouseEnter:()=>c(s.id,"center"),onMouseLeave:()=>c(s.id,null),className:"dock-target-box dock-target-center",children:"\u25A3"})]})}),R.draggedPanelId!==null&&i!==null&&i.leafId===s.id&&f("div",{className:"dock-preview-highlight",style:{left:i.position==="right"?"50%":"0",top:i.position==="bottom"?"50%":"0",width:i.position==="left"||i.position==="right"?"50%":"100%",height:i.position==="top"||i.position==="bottom"?"50%":"100%"}})]})]})},kn=({skin:s="vscode",defaultPanelIcon:t})=>{let i=Pe(),c=He(),{restorePanel:I,minimizePanel:C,requestClosePanel:A,maximizePanel:D,updateFloatingPosition:M,focusPanel:R,floatPanel:O,setDraggedPanelId:p,dockPanelToGroup:E,movePanelOrder:b,dockPanelToWorkspaceEdge:k,setActivePanel:L,setDirection:d}=vt(),{openModal:P}=ze(),h=le(),m=pe(),B=Mt.useCallback(a=>{let v=i.panels[a];A(a,{onConfirm:u=>new Promise(z=>{let N=u||v?.dirtyOptions,K=v?q(v.title,h):"Panel";P(We,{title:N?.title||m.unsavedChangesTitle,message:N?.message||{id:m.unsavedChangesMessage.id,defaultMessage:m.unsavedChangesMessage.defaultMessage,values:{title:K}},alert:N?.alert,alertType:N?.alertType||"danger",useYesNoTitles:!0,onOK:()=>z(!0),onCancel:()=>z(!1)},{size:"small"})})})},[A,i.panels,h,P,m]),{windowClass:H,windowBodyClass:y}=Ce(),S=ve(null),F=ve(null),[W,$]=Me(null),Y=ve(null),[re,ne]=Me(!1);de(()=>()=>{Y.current&&clearTimeout(Y.current)},[]),de(()=>{W&&(i.minimized.some(v=>v.id===W.id)||$(null))},[i.minimized,W]);let[se,X]=Me(null),ee=ve(null),[ue,he]=Me({x:0,y:0}),[Q,ge]=Me(null),te=ve(null),oe=a=>{ge(a),te.current=a},[Xe,ke]=Me(null),be=ve(null),qe=(a,v,u,z)=>{let N=z?{leafId:a,panelId:v,index:u,side:z}:null;ke(N),be.current=N},Ke=(a,v)=>{let u=v?{leafId:a,position:v}:null;X(u),ee.current=u},Ue=(a,v)=>{if(v.button!==0)return;let u=v.clientX,z=v.clientY,N=!1,K=r=>{let n=r.clientX-u,o=r.clientY-z;!N&&(Math.abs(n)>5||Math.abs(o)>5)&&(N=!0,p(a)),N&&he({x:r.clientX,y:r.clientY})},j=r=>{if(window.removeEventListener("mousemove",K),window.removeEventListener("mouseup",e),N){let n=ee.current,o=be.current,l=te.current;if(l)k(a,l);else if(o){let g=o.index;o.side==="right"&&(g+=1),b(a,o.leafId,g)}else n?E(a,n.leafId,n.position):O(a,{x:r.clientX-150,y:r.clientY-15,width:450,height:350});p(null),X(null),ee.current=null,ke(null),be.current=null,oe(null)}},e=r=>{j(r)};window.addEventListener("mousemove",K),window.addEventListener("mouseup",e)},je=(a,v)=>{v.preventDefault();let u=i.panels[a];if(!u)return;let N=c.get(u.component)?.defaultOptions,K=[];N?.canDrag!==!1&&K.push({label:q(m.floatWindow,h),action:()=>O(a)}),N?.canMinimize!==!1&&K.push({label:q(m.minimizePanel,h),action:()=>C(a)}),K.length>0&&N?.canClose!==!1&&K.push({separator:!0}),N?.canClose!==!1&&K.push({label:q(m.closeTab,h),action:()=>B(a)}),K.length!==0&&F.current?.show({event:v,contextMenu:{items:K}})},Je=(a,v)=>{v.preventDefault(),$(null),F.current?.show({event:v,contextMenu:{items:[{label:q(m.restorePanel,h),action:()=>I(a)},{label:q(m.maximizePanel,h),action:()=>D(a)},{separator:!0},{label:q(m.closePanel,h),action:()=>B(a)}]}})};de(()=>{let a=Object.keys(i.panels);for(let v of Array.from(Ge.keys()))a.includes(v)||Ge.delete(v)},[i.panels]),de(()=>{let a=()=>{i.draggedPanelId!==null&&(p(null),X(null),ke(null))};return window.addEventListener("blur",a),()=>{window.removeEventListener("blur",a)}},[i.draggedPanelId]);let Ne=ve(null),[ye,Ve]=Me({width:1024,height:768});de(()=>{let a=Ne.current;if(!a)return;let v=new ResizeObserver(u=>{if(!u||u.length===0)return;let z=u[0].contentRect;process.env.NODE_ENV==="development"&&z.height<10&&console.warn("[react-dockable-desktop] Workspace height is near zero. Add: html, body, #root { height: 100%; overflow: hidden; }"),Ve({width:Math.max(100,z.width),height:Math.max(100,z.height)})});return v.observe(a),()=>{v.disconnect()}},[]),de(()=>{let a=Ne.current;if(!a)return;let v=()=>{let N=Ft(a);d(N?"rtl":"ltr")};v();let u=new MutationObserver(v);u.observe(document.documentElement,{attributes:!0,attributeFilter:["dir"]}),u.observe(document.body,{attributes:!0,attributeFilter:["dir"]});let z=a.closest("[dir]");return z&&z!==document.documentElement&&z!==document.body&&u.observe(z,{attributes:!0,attributeFilter:["dir"]}),()=>{u.disconnect()}},[d]),de(()=>{let a=ye.width,v=ye.height;i.floating.forEach(u=>{let z=typeof u.width=="string"?parseFloat(u.width):u.width,N=typeof u.height=="string"?parseFloat(u.height):u.height,K=typeof u.x=="string"?parseFloat(u.x):u.x,j=typeof u.y=="string"?parseFloat(u.y):u.y,e=z,r=N,n=K,o=j,l=!1;e>a&&(e=Math.max(200,a-20),l=!0),r>v&&(r=Math.max(150,v-40),l=!0);let g=10;if(u.stickyRight)n=a-e-g,l=!0;else{let w=a-100;n>w&&(n=Math.max(0,w),l=!0)}if(u.stickyBottom)o=v-r-g,l=!0;else{let w=v-40;o>w&&(o=Math.max(0,w),l=!0)}l&&M(u.id,{x:n,y:o,width:e,height:r})})},[ye,i.floating,M]),de(()=>{let a=v=>{if(v.button!==0)return;let u=v.target;if(!u)return;let z=u.closest(".floating-window");if(z){let K=z.getAttribute("data-window-id");K&&(L(K),R(K));return}let N=u.closest(".workspace-panel");if(N){let K=N.getAttribute("data-active-panel-id");K&&L(K)}};return document.addEventListener("mousedown",a),()=>{document.removeEventListener("mousedown",a)}},[R,L]);let Ze=(a,v)=>{let u=i.floating.find(g=>g.id===a);if(!u||u.maximized)return;R(a);let z=v.clientX,N=v.clientY,j=v.currentTarget.closest(".floating-window"),e=j?j.offsetLeft:0,r=j?j.offsetTop:0,n=!1,o=g=>{let w=g.clientX-z,T=g.clientY-N;if(!n&&(Math.abs(w)>5||Math.abs(T)>5)&&(n=!0,p(a)),n){let x=e+w,_=r+T;M(a,{x,y:_,stickyRight:!1,stickyBottom:!1})}},l=()=>{if(n){let g=ee.current,w=be.current,T=te.current;if(T)k(a,T);else if(w){let x=w.index;w.side==="right"&&(x+=1),b(a,w.leafId,x)}else g&&E(a,g.leafId,g.position);p(null),X(null),ee.current=null,ke(null),be.current=null,oe(null)}window.removeEventListener("mousemove",o),window.removeEventListener("mouseup",l)};window.addEventListener("mousemove",o),window.addEventListener("mouseup",l)},Qe=(a,v)=>{v.stopPropagation();let u=i.floating.find(l=>l.id===a);if(!u||u.maximized)return;R(a);let z=v.clientX,N=v.clientY,j=v.currentTarget.closest(".floating-window"),e=j?j.offsetWidth:400,r=j?j.offsetHeight:300,n=l=>{let g=l.clientX-z,w=l.clientY-N,T=Math.max(200,e+g),x=Math.max(150,r+w),_=u.x,J=u.y,V=ye.width,ae=ye.height,Z=typeof u.x=="string"?parseFloat(u.x):u.x,ie=typeof u.y=="string"?parseFloat(u.y):u.y,nt=typeof u.width=="string"?parseFloat(u.width):u.width,pt=typeof u.height=="string"?parseFloat(u.height):u.height,ot=Math.abs(Z+nt-V)<4,it=Math.abs(ie+pt-ae)<4;ot&&(_=V-T,_<0&&(_=0,T=V)),it&&(J=ae-x,J<0&&(J=0,x=ae)),M(a,{x:_,y:J,width:T,height:x,stickyRight:ot,stickyBottom:it})},o=()=>{window.removeEventListener("mousemove",n),window.removeEventListener("mouseup",o)};window.addEventListener("mousemove",n),window.addEventListener("mouseup",o)},Ae=a=>{if(S.current){let v=a==="left"?-150:150;S.current.scrollBy({left:v,behavior:"smooth"})}},[et,tt]=Me("dark");return de(()=>{let a=()=>{let u=document.documentElement.getAttribute("data-color-scheme")==="light"?"light":"dark";tt(u)};a();let v=new MutationObserver(a);return v.observe(document.documentElement,{attributes:!0,attributeFilter:["data-color-scheme"]}),()=>v.disconnect()},[]),U("div",{"data-workspace-skin":s,"data-color-scheme":et,style:{display:"flex",flexDirection:"column",width:"100%",height:"100%",overflow:"hidden",userSelect:"none"},dir:i.dir,children:[U("div",{ref:Ne,className:i.draggedPanelId?"dragging-active":void 0,style:{flexGrow:1,width:"100%",position:"relative",overflow:"hidden"},children:[i.draggedPanelId!==null&&U(In,{children:[f("div",{className:"workspace-edge-trigger edge-trigger-left",onMouseEnter:()=>oe("left"),onMouseLeave:()=>oe(null)}),f("div",{className:"workspace-edge-trigger edge-trigger-right",onMouseEnter:()=>oe("right"),onMouseLeave:()=>oe(null)}),f("div",{className:"workspace-edge-trigger edge-trigger-top",onMouseEnter:()=>oe("top"),onMouseLeave:()=>oe(null)}),f("div",{className:"workspace-edge-trigger edge-trigger-bottom",onMouseEnter:()=>oe("bottom"),onMouseLeave:()=>oe(null)})]}),i.draggedPanelId!==null&&Q!==null&&f("div",{className:`workspace-edge-preview edge-preview-${Q}`}),f("div",{style:{width:"100%",height:"100%",overflow:"hidden",position:"relative"},children:i.gridRoot?f(jt,{node:i.gridRoot,path:[],onTabRightClick:je,activeDropZone:se,onHoverDropZone:Ke,onTabDragStart:Ue,hoveredTab:Xe,onTabHover:qe,defaultPanelIcon:t,onRequestClosePanel:B}):f("div",{className:"empty-workspace-grid",children:"Grid Empty"})}),i.floating.map(a=>{let v=i.panels[a.id];if(!v)return null;let u=a.maximized,z=i.draggedPanelId===a.id,N=i.activePanelId===a.id,j=c.get(v.component)?.defaultOptions;return U("div",{"data-window-id":a.id,dir:i.dir,onMouseDownCapture:()=>{L(a.id),R(a.id)},className:`floating-window ${u?"maximized":""} ${N?"v2-window-focused":""} ${H??""}`,style:{position:"absolute",left:u?0:typeof a.x=="number"?`${a.x}px`:a.x,top:u?0:typeof a.y=="number"?`${a.y}px`:a.y,width:u?"100%":typeof a.width=="number"?`${a.width}px`:a.width,height:u?"100%":typeof a.height=="number"?`${a.height}px`:a.height,zIndex:a.z,pointerEvents:z?"none":"auto"},children:[U("div",{onDoubleClick:()=>D(a.id),onMouseDown:e=>{j?.canDrag!==!1&&Ze(a.id,e)},className:"floating-window-titlebar cursor-move",style:{cursor:u||j?.canDrag===!1?"default":"move"},children:[U("span",{className:"floating-window-title",children:[f("span",{className:"window-title-icon",children:j?.icon||t||xt}),U("span",{children:[q(v.title,h),v.dirty?" *":""]})]}),U("div",{className:"fw-titlebar-actions",style:{gap:"var(--header-button-gap, 4px)"},onMouseDown:e=>e.stopPropagation(),children:[j?.renderHeaderActions&&f("div",{className:"window-header-actions",children:j.renderHeaderActions(a.id)}),j?.canDrag!==!1&&f("button",{type:"button",title:q(m.windowAnchoringOptions,h),onClick:e=>{let r=!!a.stickyRight,n=!!a.stickyBottom;F.current?.show({event:e,contextMenu:{items:[{label:q(m.anchorToRightEdge,h),checkbox:{active:!0,enabled:!0,value:r},action:()=>{let o=ye.width,l=typeof a.width=="string"?parseFloat(a.width):a.width;r?M(a.id,{stickyRight:!1}):M(a.id,{x:o-l-10,stickyRight:!0})}},{label:q(m.anchorToBottomEdge,h),checkbox:{active:!0,enabled:!0,value:n},action:()=>{let o=ye.height,l=typeof a.height=="string"?parseFloat(a.height):a.height;n?M(a.id,{stickyBottom:!1}):M(a.id,{y:o-l-10,stickyBottom:!0})}}]}})},className:"custom-tab-btn btn-anchor-tab",children:U("svg",{className:`anchor-icon ${a.stickyRight&&a.stickyBottom?"anchor-sticky-both":a.stickyRight?"anchor-sticky-right":a.stickyBottom?"anchor-sticky-bottom":""}`,width:"11",height:"11",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:[f("circle",{cx:"12",cy:"5",r:"2"}),f("path",{d:"M12 7v7m0 0a4 4 0 0 1-4-4M12 14a4 4 0 0 0 4-4M5 18h14"})]})}),f("button",{type:"button",title:u?q(m.restoreSize,h):q(m.maximize,h),onClick:()=>D(a.id),className:"custom-tab-btn btn-maximize-tab",children:f("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:f("rect",{x:"4",y:"4",width:"16",height:"16",rx:"1.5"})})}),j?.canMinimize!==!1&&f("button",{type:"button",title:q(m.minimize,h),onClick:()=>C(a.id),className:"custom-tab-btn btn-minimize-tab",children:f("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:f("path",{d:"M5 12h14"})})}),j?.canClose!==!1&&f("button",{type:"button",title:q(m.close,h),onClick:()=>B(a.id),className:"custom-tab-btn btn-close-tab",children:f("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:f("path",{d:"M18 6L6 18M6 6l12 12"})})})]})]}),f("div",{className:y??void 0,style:{flexGrow:1,width:"100%",overflow:"hidden",position:"relative",isolation:"isolate"},children:f(Ut,{panelId:a.id},a.id)}),!u&&f("div",{onMouseDown:e=>Qe(a.id,e),style:{position:"absolute",right:0,bottom:0,width:"14px",height:"14px",cursor:"se-resize",zIndex:30,background:"linear-gradient(135deg, transparent 50%, rgba(255,255,255,0.2) 50%)"}})]},a.id)})]}),i.minimized.length>0&&U("div",{className:"taskbar-footer-container",style:{height:"48px",zIndex:100},children:[f("button",{type:"button",onClick:()=>Ae("left"),className:"taskbar-nav-btn",style:{display:i.minimized.length>4?"block":"none"},children:"\u25C0"}),f("div",{ref:S,className:"taskbar-items-container",style:{scrollSnapType:"x mandatory"},children:i.minimized.map(a=>{let u=c.get(a.component)?.defaultOptions?.icon||t||xt;return f("div",{onClick:()=>{$(null),I(a.id)},onContextMenu:z=>Je(a.id,z),onMouseEnter:z=>{if(re)return;Y.current&&clearTimeout(Y.current);let N=z.currentTarget.getBoundingClientRect();z.clientX>=N.left&&z.clientX<=N.right&&z.clientY>=N.top&&z.clientY<=N.bottom&&$({id:a.id,rect:N,title:a.title,component:a.component})},onMouseLeave:()=>{Y.current=setTimeout(()=>{$(null)},150)},className:"taskbar-glassmorphic-item",style:{backdropFilter:"blur(6px)",transition:"all 0.2s",cursor:"pointer",scrollSnapAlign:"start",width:"38px",height:"38px",position:"relative",padding:0},children:f("span",{className:"taskbar-item-icon",children:u})},a.id)})}),W&&Xt(U("div",{className:"taskbar-item-tooltip",dir:i.dir,style:{position:"fixed",left:`${W.rect.left+W.rect.width/2}px`,top:`${W.rect.top-8}px`,transform:"translateX(-50%) translateY(-100%)",opacity:1,pointerEvents:"auto",zIndex:999999},onMouseEnter:()=>{Y.current&&clearTimeout(Y.current)},onMouseLeave:()=>{$(null)},onClick:()=>{I(W.id),$(null)},children:[U("div",{className:"tooltip-header-row",children:[U("span",{className:"tooltip-title-text text-truncate",style:{maxWidth:"140px"},children:[q(W.title,h),i.panels[W.id]?.dirty?" *":""]}),f("span",{onClick:a=>{a.stopPropagation(),B(W.id),$(null)},title:q(m.closePanel,h),className:"tooltip-close-x",children:f("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:f("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),f(xn,{panelId:W.id})]}),document.body),f("button",{type:"button",onClick:()=>Ae("right"),className:"taskbar-nav-btn",style:{display:i.minimized.length>4?"block":"none"},children:"\u25B6"})]}),Object.keys(i.panels).map(a=>{let v=i.panels[a];if(!v)return null;let u=qt(a);return Xt(f(Mn,{panelId:a,children:f("div",{style:{width:"100%",height:"100%"},children:Cn(a,v.component,c)})}),u,a)}),f(wn,{ref:F,id:"workspace-context-menu",theme:"dark",onShow:()=>ne(!0),onHide:()=>ne(!1)}),i.draggedPanelId!==null&&!i.floating.some(a=>a.id===i.draggedPanelId)&&U("div",{className:"drag-ghost-tab",style:{left:ue.x+12,top:ue.y+12,zIndex:1e5},children:["\u{1F4C4} ",q(i.panels[i.draggedPanelId]?.title,h)||"Tab"]})]})},Sn=kn;var Rt=class{registry;initialState;config;_actions=null;_initialized=!1;_pendingCalls=[];_pendingOpenPanelIds=new Set;_pendingSubscriptions=[];_disconnectedWarnTimer=null;constructor(t={}){if(this.registry=new Oe,this.initialState=t.initialState??null,this.config={formatMessage:t.formatMessage,predefinedMessages:t.predefinedMessages,dir:t.dir},t.panels)for(let[i,c]of Object.entries(t.panels))this.registry.register(i,c.component,c.defaultOptions)}_connect(t){this._actions=t,this._disconnectedWarnTimer!==null&&(clearTimeout(this._disconnectedWarnTimer),this._disconnectedWarnTimer=null),this._initialized||(this._initialized=!0);for(let c of this._pendingSubscriptions)c.unsub=t.subscribe(c.event,c.callback);let i=this._pendingCalls.splice(0);for(let c of i)c(t)}_disconnect(){this._actions=null;for(let t of this._pendingSubscriptions)t.unsub?.(),t.unsub=null}get isConnected(){return this._actions!==null}_startWarnTimer(){this._disconnectedWarnTimer===null&&(this._disconnectedWarnTimer=setTimeout(()=>{!this.isConnected&&this._pendingCalls.length>0&&console.error("[react-dockable-desktop] WorkspaceClient has "+this._pendingCalls.length+" queued call(s) but was never connected to a WindowManagerProvider. Did you forget client={workspace} on <WindowManagerProvider>?")},process.env.NODE_ENV==="production"?5e3:1e3))}_dispatch(t){this._actions?t(this._actions):(this._pendingCalls.push(t),this._startWarnTimer())}_subscribeRaw(t,i){if(this._actions)return this._actions.subscribe(t,i);let c={event:t,callback:i,unsub:null};return this._pendingSubscriptions.push(c),()=>{c.unsub?.(),c.unsub=null;let I=this._pendingSubscriptions.indexOf(c);I!==-1&&this._pendingSubscriptions.splice(I,1)}}openPanel(...t){if(this._actions){this._actions.openPanel(...t);return}let i=t[0];this._pendingOpenPanelIds.has(i)||(this._pendingOpenPanelIds.add(i),this._pendingCalls.push(c=>{this._pendingOpenPanelIds.delete(i),c.openPanel(...t)}),this._startWarnTimer())}closePanel(t){this._dispatch(i=>i.closePanel(t))}minimizePanel(t){this._dispatch(i=>i.minimizePanel(t))}restorePanel(t){this._dispatch(i=>i.restorePanel(t))}floatPanel(...t){this._dispatch(i=>i.floatPanel(...t))}dockPanel(...t){this._dispatch(i=>i.dockPanel(...t))}maximizePanel(t){this._dispatch(i=>i.maximizePanel(t))}focusPanel(t){this._dispatch(i=>i.focusPanel(t))}isOpen(t){return this._actions?.isOpen(t)??!1}getOpenPanelIds(){return this._actions?.getOpenPanelIds()??[]}saveLayout(){return this._actions?.saveLayout()??""}loadLayout(t){return this._actions?this._actions.loadLayout(t):(this._pendingCalls.push(i=>{i.loadLayout(t)}),!1)}setDirection(t){this._dispatch(i=>i.setDirection(t))}publish(t,i){this._dispatch(c=>c.publish(t,i))}subscribe(t,i){return this._subscribeRaw(t,i)}onPanelOpen(t){return this._subscribeRaw("panel:opened",i=>{let c=i;t(c.id,c.component)})}onPanelClose(t){return this._subscribeRaw("panel:closed",i=>{t(i.id)})}onPanelMinimize(t){return this._subscribeRaw("panel:minimized",i=>{t(i.id)})}onPanelRestore(t){return this._subscribeRaw("panel:restored",i=>{t(i.id)})}};import"react";import{jsx as Jt}from"react/jsx-runtime";var Tn=s=>Jt(Pt,{...s,children:Jt(wt,{children:s.children})});import{useCallback as Ye,useRef as Vt,useEffect as En,useState as zn,useMemo as Ln}from"react";import{Fragment as Dn,jsx as me,jsxs as kt}from"react/jsx-runtime";var Wn=({modal:s,index:t,isTopmost:i})=>{let{close:c,openModal:I,updateInstance:C,setDirty:A}=ze(),D=le(),M=pe(),{dir:R}=Pe(),{modalClass:O,modalBodyClass:p}=Ce(),E=Vt(null),{id:b,Component:k,props:L,options:d,dirty:P,dirtyOptions:h}=s,m=d,[B,H]=zn(m.icon||null),y=Vt(m);y.current=m;let S=q(m.title,D),F=Ye(async Q=>{if(Q?.force){c(b);return}if(E.current){if(!await E.current())return;c(b);return}if(P){I(We,{title:h?.title||M.unsavedChangesTitle,message:h?.message||{id:M.unsavedChangesMessage.id,defaultMessage:M.unsavedChangesMessage.defaultMessage,values:{title:S}},alert:h?.alert,alertType:h?.alertType||"danger",useYesNoTitles:!0,onOK:()=>c(b)},{size:"small"});return}c(b)},[c,I,b,P,h,S,M]),W=Ye((Q,ge)=>A(b,Q,ge),[A,b]),$=Ye(Q=>C(b,{options:{...y.current,title:Q}}),[C,b]),Y=Ye(Q=>H(Q),[]),re=Ye(Q=>(E.current=Q,()=>{E.current=null}),[]),ne=Ln(()=>({requestClose:F,setDirty:W,setTitle:$,setIcon:Y,onCloseRequested:re,containerType:"modal",instanceId:b}),[F,W,$,Y,re,b]),se=P?`${S} *`:S,X=m.size?`v2-modal-size-${m.size}`:"v2-modal-size-auto",ee=m.closable!==!1;En(()=>{if(!i||!ee)return;let Q=ge=>{ge.key==="Escape"&&(ge.stopPropagation(),F())};return document.addEventListener("keydown",Q),()=>document.removeEventListener("keydown",Q)},[F,ee,i]);let he=1e4+t*10;return kt("div",{className:"v2-modal-overlay",style:{zIndex:he},dir:R,children:[me("div",{className:"v2-modal-curtain",onClick:ee?()=>F():void 0}),kt("div",{className:`v2-modal-window ${X} ${O??""}`,children:[kt("div",{className:"v2-modal-header",children:[B&&me("div",{className:"v2-modal-icon",children:B}),me("h4",{className:"v2-modal-title",children:se}),ee&&me("button",{className:"v2-modal-close-button",onClick:()=>F(),title:D(M.closeTooltip),type:"button",children:me("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:me("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),me("div",{className:`v2-modal-body ${p??""}`,children:me(Se,{value:ne,children:me(k,{...L,panelId:b})})})]})]})},Nn=()=>{let{modals:s}=xe();return s.length===0?null:me(Dn,{children:s.map((t,i)=>me(Wn,{modal:t,index:i,isTopmost:i===s.length-1},t.id))})},On=Nn;import{useCallback as Fe,useRef as Zt,useEffect as Qt,useState as Fn,useMemo as An}from"react";import{Fragment as Gn,jsx as ce,jsxs as St}from"react/jsx-runtime";var ct=({panel:s,position:t,defaultWidth:i})=>{let{close:c,openModal:I,updateInstance:C,setDirty:A,registerCloseHandler:D,unregisterCloseHandler:M}=ze(),{modals:R}=xe(),O=le(),p=pe(),{dir:E}=Pe(),{sidePanelClass:b,sidePanelBodyClass:k}=Ce(),L=Zt(null),{id:d,Component:P,props:h,options:m,dirty:B,dirtyOptions:H}=s,y=m,[S,F]=Fn(y.icon||null),W=Zt(y);W.current=y;let $=q(y.title,O),Y=Fe(async te=>{if(te?.force){c(d);return}if(L.current){if(!await L.current())return;c(d);return}if(B){I(We,{title:H?.title||p.unsavedChangesTitle,message:H?.message||{id:p.unsavedChangesMessage.id,defaultMessage:p.unsavedChangesMessage.defaultMessage,values:{title:$}},alert:H?.alert,alertType:H?.alertType||"danger",useYesNoTitles:!0,onOK:()=>c(d)},{size:"small"});return}c(d)},[c,I,d,B,H,$,p]),re=Fe(async()=>L.current?await L.current():!B,[B]);Qt(()=>(D(d,re),()=>M(d)),[d,re,D,M]);let ne=Fe((te,oe)=>A(d,te,oe),[A,d]),se=Fe(te=>C(d,{options:{...W.current,title:te}}),[C,d]),X=Fe(te=>F(te),[]),ee=Fe(te=>(L.current=te,()=>{L.current=null}),[]),ue=An(()=>({requestClose:Y,setDirty:ne,setTitle:se,setIcon:X,onCloseRequested:ee,containerType:t==="left"?"left-panel":"right-panel",instanceId:d}),[Y,ne,se,X,ee,t,d]),he=B?`${$} *`:$;Qt(()=>{let te=oe=>{oe.key==="Escape"&&R.length===0&&Y()};return document.addEventListener("keydown",te),()=>document.removeEventListener("keydown",te)},[Y,R.length]);let Q=y.width||i||400,ge=typeof Q=="number"?`${Q}px`:Q;return ce("div",{className:`v2-side-panel v2-side-panel-${t} v2-side-panel-visible ${b??""}`,style:{width:ge},dir:E,children:St("div",{className:"v2-side-panel-window",children:[St("div",{className:"v2-side-panel-header",children:[S&&ce("div",{className:"v2-side-panel-icon",children:S}),ce("h4",{className:"v2-side-panel-title",children:he}),ce("button",{className:"v2-side-panel-close-button",onClick:()=>Y(),title:O(p.closeTooltip),type:"button",children:ce("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:ce("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),ce("div",{className:`v2-side-panel-body ${k??""}`,children:ce(Se,{value:ue,children:ce(P,{...h,panelId:d})})})]})})},Bn=({defaultWidth:s})=>{let{leftPanel:t,rightPanel:i}=xe();return St(Gn,{children:[t&&ce(ct,{panel:t,position:"left",defaultWidth:s},t.id),i&&ce(ct,{panel:i,position:"right",defaultWidth:s},i.id)]})},_n=({defaultWidth:s})=>{let{leftPanel:t}=xe();return t?ce(ct,{panel:t,position:"left",defaultWidth:s},t.id):null},Hn=({defaultWidth:s})=>{let{rightPanel:t}=xe();return t?ce(ct,{panel:t,position:"right",defaultWidth:s},t.id):null},$n=Bn;import{useState as en,useEffect as ut,useRef as Yn,useCallback as tn,useImperativeHandle as Xn,forwardRef as qn}from"react";import{Fragment as Un,jsx as Re,jsxs as gt}from"react/jsx-runtime";var Kn=qn(function({position:t="right",tabs:i,drawerWidth:c="220px",activeTabId:I,onActiveTabChange:C,children:A},D){let M=I!==void 0,R=le(),O=pe(),[p,E]=en(null),b=M?I:p,[k,L]=en(()=>{let y=new Set;for(let S of i)S.eagerMount&&y.add(S.id);return y});ut(()=>{let y=i.filter(S=>S.eagerMount&&!k.has(S.id));y.length>0&&L(S=>{let F=new Set(S);for(let W of y)F.add(W.id);return F})},[i]);let d=Yn(b??null);ut(()=>{d.current=b??null},[b]);let P=tn(y=>{M||E(y),C?.(y)},[M,C]);Xn(D,()=>({openTab:y=>P(y),closeDrawer:()=>P(null),getActiveTab:()=>d.current}),[P]);let h=y=>{P(b===y?null:y)},m=tn(()=>P(null),[P]);ut(()=>{b&&!k.has(b)&&L(y=>{let S=new Set(y);return S.add(b),S})},[b,k]),ut(()=>{b===null&&L(y=>{let S=!1,F=new Set(y);for(let W of y){let $=i.find(Y=>Y.id===W);$&&!$.eagerMount&&!$.preserveState&&(F.delete(W),S=!0)}return S?F:y})},[b,i]);let B=Re("div",{className:`sidebar-tabs-strip ${t}`,style:{width:"56px",height:"100%"},children:i.map(y=>{let S=b===y.id;return Re("button",{type:"button",onClick:()=>h(y.id),className:`sidebar-tab-btn ${S?"active":""}`,title:y.label,"aria-pressed":S,children:y.icon},y.id)})}),H=Re("div",{className:`sidebar-content-drawer h-100 ${t}`,style:{width:b?c:"0px",minWidth:b?c:"0px",overflow:"hidden",flexShrink:0},children:i.map(y=>{if(!k.has(y.id))return null;let F=b===y.id,W=()=>P(y.id);return gt("div",{style:{display:F?"flex":"none",flexDirection:"column",height:"100%",width:"100%"},children:[gt("div",{className:"sidebar-drawer-header",children:[Re("span",{className:"sidebar-header-title",children:y.label}),Re("button",{type:"button",onClick:m,className:"sidebar-close-btn",title:R(O.closePanelTooltip),"aria-label":R(O.closePanelTooltip),children:gt("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[Re("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),Re("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),Re("div",{className:"sidebar-drawer-body",children:y.renderContent(y.id,m,W)})]},y.id)})});return gt(Un,{children:[t==="left"&&B,t==="left"&&H,A,t==="right"&&H,t==="right"&&B]})});export{We as ConfirmationForm,Tn as DockableDesktopProvider,ft as FormContainerContext,Se as FormContainerProvider,_n as LeftPanelRenderer,On as ModalStackRenderer,wt as PanelProvider,st as PanelRegistry,Oe as PanelRegistryClass,Hn as RightPanelRenderer,$n as SidePanelRenderer,Kn as Sidebar,Sn as WindowManager,Pt as WindowManagerProvider,Rt as WorkspaceClient,_e as defaultPredefinedMessages,q as formatLabel,Be as useFormContainer,le as useFormatMessage,ze as usePanelActions,pn as usePanelContext,fn as usePanelId,xe as usePanelState,pe as usePredefinedMessages,He as useRegistry,Ce as useStyleClasses,$e as useWindowManagerActions,Pe as useWindowManagerState};
1
+ import $t,{useState as ke,useRef as pe,useEffect as le,useCallback as _t}from"react";import{createPortal as hn}from"react-dom";import{createContext as Ye,useContext as Se,useState as Gn,useRef as Ie,useMemo as Rt,useCallback as X,useEffect as dt,useSyncExternalStore as $n}from"react";import{createContext as Bn,useContext as Hn}from"react";var _n={requestClose:()=>{console.warn("FormContainerContract: requestClose called but no container is present")},setDirty:()=>{},onCloseRequested:()=>()=>{},setTitle:()=>{},setIcon:()=>{},containerType:"standalone",instanceId:"standalone",onClose:()=>()=>{},onMinimize:()=>()=>{},onRestore:()=>()=>{},onResize:()=>()=>{}},Wt=Bn(_n),Ge=Wt.Provider,at=()=>Hn(Wt);var Je=class{registry=new Map;register(n,r,i){this.registry.set(n,{Component:r,defaultOptions:i})}get(n){return this.registry.get(n)}getRegisteredIds(){return Array.from(this.registry.keys())}},wt=new Je;var lt={floatWindow:{id:"dockable-desktop-floatWindow",defaultMessage:"Float Window"},minimizePanel:{id:"dockable-desktop-minimizePanel",defaultMessage:"Minimize Panel"},closeTab:{id:"dockable-desktop-closeTab",defaultMessage:"Close Tab"},restorePanel:{id:"dockable-desktop-restorePanel",defaultMessage:"Restore Panel"},maximizePanel:{id:"dockable-desktop-maximizePanel",defaultMessage:"Maximize Panel"},closePanel:{id:"dockable-desktop-closePanel",defaultMessage:"Close Panel"},dockWindow:{id:"dockable-desktop-dockWindow",defaultMessage:"Dock Window"},minimize:{id:"dockable-desktop-minimize",defaultMessage:"Minimize"},maximize:{id:"dockable-desktop-maximize",defaultMessage:"Maximize"},restoreSize:{id:"dockable-desktop-restoreSize",defaultMessage:"Restore Size"},close:{id:"dockable-desktop-close",defaultMessage:"Close"},closeEmptyGroup:{id:"dockable-desktop-closeEmptyGroup",defaultMessage:"Close empty split group"},anchorToRightEdge:{id:"dockable-desktop-anchorToRightEdge",defaultMessage:"Anchor to Right Edge"},anchorToBottomEdge:{id:"dockable-desktop-anchorToBottomEdge",defaultMessage:"Anchor to Bottom Edge"},windowAnchoringOptions:{id:"dockable-desktop-windowAnchoringOptions",defaultMessage:"Window Anchoring Options"},unsavedChangesTitle:{id:"dockable-desktop-unsavedChangesTitle",defaultMessage:"Unsaved Changes"},unsavedChangesMessage:{id:"dockable-desktop-unsavedChangesMessage",defaultMessage:'"{title}" has unsaved changes. Do you want to discard your changes and close?'},discardChanges:{id:"dockable-desktop-discardChanges",defaultMessage:"Discard Changes"},cancel:{id:"dockable-desktop-cancel",defaultMessage:"Cancel"},yes:{id:"dockable-desktop-yes",defaultMessage:"Yes"},no:{id:"dockable-desktop-no",defaultMessage:"No"},ok:{id:"dockable-desktop-ok",defaultMessage:"OK"},closePanelTooltip:{id:"dockable-desktop-closePanelTooltip",defaultMessage:"Close panel"},closeTooltip:{id:"dockable-desktop-closeTooltip",defaultMessage:"Close"}};import{jsx as $e}from"react/jsx-runtime";var en=Ye(null),Mt=Ye(null),tn=Ye(null),nn=Ye(null),on=Ye(lt),rn=Ye({}),Fe=()=>Se(rn),sn=Ye(wt),ct=()=>Se(sn),Dt=class{listeners={};subscribe(n,r){return this.listeners[n]||(this.listeners[n]=[]),this.listeners[n].push(r),()=>{this.listeners[n]=this.listeners[n].filter(i=>i!==r)}}publish(n,r){this.listeners[n]&&this.listeners[n].forEach(i=>i(r))}},Yn={type:"leaf",id:"group-default",panels:[],activePanelId:null};function Xn(t){if(t)try{let n=JSON.parse(t);if(n.gridRoot&&Array.isArray(n.floating)&&Array.isArray(n.minimized)&&n.panels)return{gridRoot:n.gridRoot,floating:n.floating,minimized:n.minimized,panels:n.panels,activePanelId:Object.keys(n.panels)[0]??null}}catch{}return{gridRoot:Yn,floating:[],minimized:[],panels:{},activePanelId:null}}var Ot=({children:t,client:n,formatMessage:r,predefinedMessages:i,dir:b,modalClass:P,modalBodyClass:k,sidePanelClass:T,sidePanelBodyClass:R,windowClass:M,windowBodyClass:N})=>{let v=Ie(n?.registry??wt).current,S=n?.config.formatMessage??r,z=n?.config.predefinedMessages??i,D=n?.config.dir??b,[O,p]=Gn(()=>({...Xn(n?.initialState??null),draggedPanelId:null,dir:D||"ltr",isRtl:D==="rtl"})),w=Ie(O);w.current=O;let I=Ie(new Set);dt(()=>{I.current.forEach(o=>o())},[O]);let _=X(()=>w.current,[]),A=X(o=>(I.current.add(o),()=>I.current.delete(o)),[]),W=Ie({}),F=Rt(()=>({...lt,...z}),[z]),J=Ie(new Dt),x=Ie(1e3),Z=X((o,g)=>J.current.subscribe(o,g),[]),te=X((o,g)=>{J.current.publish(o,g)},[]),ne=X((o,g)=>{let a=typeof o.x=="string"?parseFloat(o.x):o.x,d=typeof o.y=="string"?parseFloat(o.y):o.y,e=typeof o.width=="string"?parseFloat(o.width):o.width,l=typeof o.height=="string"?parseFloat(o.height):o.height;isNaN(a)&&(a=300),isNaN(d)&&(d=150),isNaN(e)&&(e=450),isNaN(l)&&(l=350);let s=y=>g.some(m=>{let E=typeof m.x=="string"?parseFloat(m.x):m.x,L=typeof m.y=="string"?parseFloat(m.y):m.y;return!m.maximized&&Math.abs(E-y.x)<20&&Math.abs(L-y.y)<20}),c=0;for(;s({x:a,y:d})&&c<10;)a+=30,d+=30,c++;let u=Math.max(100,window.innerWidth||1024),h=Math.max(100,window.innerHeight||768);return(a+e>u||d+l>h)&&(a=100+c%5*30,d=100+c%5*30),a=Math.max(0,Math.min(a,u-100)),d=Math.max(0,Math.min(d,h-40)),{x:a,y:d,width:e,height:l}},[]),se=X(o=>{p(g=>{let a=g.panels[o];if(!a)return g;if(a.state==="floating"){let d=g.floating.find(l=>l.id===o);if(!d)return g;let e=!g.floating.some(l=>l.z>d.z);return e&&g.activePanelId===o?g:(e||(x.current+=1),{...g,floating:g.floating.map(l=>l.id===o?{...l,z:e?d.z:x.current}:l),activePanelId:o})}else if(a.state==="docked"){if(g.activePanelId===o)return g;let d=e=>e.type==="leaf"?e.panels.includes(o)?{...e,activePanelId:o}:e:{...e,children:e.children.map(d)};return{...g,gridRoot:d(g.gridRoot),activePanelId:o}}return g.activePanelId===o?g:{...g,activePanelId:o}})},[]),$=(o,g)=>{if(o.type==="leaf"){let a=o.panels.indexOf(g);if(a===-1)return o;let d=o.panels.filter(s=>s!==g),e=o.activePanelId===g?d[a]||d[a-1]||d[0]||null:o.activePanelId,l={...o,panels:d,activePanelId:e};return d.length===0&&!o.keepOnEmpty?null:l}else{let a=o.children.map(l=>$(l,g)).filter(l=>l!==null);if(a.length===0)return null;if(a.length===1)return a[0];let d=o.sizes.slice(0,a.length),e=d.reduce((l,s)=>l+s,0);return{...o,children:a,sizes:d.map(l=>l/e)}}},Q=(o,g,a)=>{if(o.type==="leaf"){if(o.id===g){let d=o.panels.includes(a)?o.panels:[...o.panels,a];return{...o,panels:d,activePanelId:a}}return o}else return{...o,children:o.children.map(d=>Q(d,g,a))}},Y=o=>{if(o.type==="leaf")return o.id;for(let g of o.children){let a=Y(g);if(a)return a}return null},ee=X((o,g,a)=>{let d=!(o in w.current.panels);p(e=>{let l=e.panels[o],s=v.get(g),c=a?.title||a?.title||s?.defaultOptions?.title||o,u=a?.initialTarget||s?.defaultOptions?.initialTarget||"docked",h=s?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350};if(l)if(l.state==="minimized"){let L=e.minimized.filter(C=>C.id!==o);if(u==="floating"||!e.gridRoot){x.current+=1;let C=ne(h,e.floating);return{...e,minimized:L,floating:[...e.floating,{...C,id:o,z:x.current}],panels:{...e.panels,[o]:{...l,state:"floating"}}}}else{let C=Y(e.gridRoot)||"group-default";return{...e,minimized:L,gridRoot:Q(e.gridRoot,C,o),panels:{...e.panels,[o]:{...l,state:"docked"}}}}}else{if(l.state==="floating")return se(o),e;{let L=C=>C.type==="leaf"?C.panels.includes(o)?{...C,activePanelId:o}:C:{...C,children:C.children.map(L)};return{...e,gridRoot:L(e.gridRoot)}}}let m={id:o,title:c,component:g,state:u==="tabbed"?"docked":u},E={...e.panels,[o]:m};if(u==="floating"){x.current+=1;let L=ne(h,e.floating),C=a?.stickyRight??s?.defaultOptions?.defaultStickyRight??!1,H=a?.stickyBottom??s?.defaultOptions?.defaultStickyBottom??!1,q=Math.max(100,window.innerWidth||1024),G=Math.max(100,window.innerHeight||768),ae=typeof L.width=="string"?parseFloat(L.width):L.width,fe=typeof L.height=="string"?parseFloat(L.height):L.height,De=L.x,Oe=L.y,we=10;return C&&(De=q-ae-we),H&&(Oe=G-fe-we),{...e,floating:[...e.floating,{...L,id:o,z:x.current,x:De,y:Oe,stickyRight:C,stickyBottom:H}],panels:E}}else{let L=Y(e.gridRoot)||"group-default";return{...e,gridRoot:Q(e.gridRoot,L,o),panels:E}}}),d&&J.current.publish("panel:opened",{id:o,component:g})},[ne,se]),re=X(o=>{let g=o in w.current.panels;p(a=>{let d=a.panels[o];if(!d||v.get(d.component)?.defaultOptions?.canClose===!1)return a;delete W.current[o];let l={...a.panels};delete l[o];let s=$(a.gridRoot,o);return{...a,gridRoot:s||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:a.floating.filter(c=>c.id!==o),minimized:a.minimized.filter(c=>c.id!==o),panels:l}}),g&&J.current.publish("panel:closed",{id:o})},[]),ce=X((o,g)=>{W.current[o]=g},[]),K=X(o=>{delete W.current[o]},[]),V=X((o,g,a)=>{p(d=>{let e=d.panels[o];return e?{...d,panels:{...d.panels,[o]:{...e,dirty:g,dirtyOptions:a}}}:d})},[]),oe=X((o,g)=>{p(a=>{let d=a.panels[o];return d?{...a,panels:{...a.panels,[o]:{...d,title:g}}}:a})},[]),B=X(async(o,g)=>{if(g?.force){re(o);return}let a=W.current[o];if(a&&!await a())return;let d=w.current.panels[o];if(d?.dirty)if(g?.onConfirm){if(!await g.onConfirm(d.dirtyOptions))return}else return;re(o)},[re]),ie=X(o=>{let g=w.current.panels[o]?.state!=="minimized"&&o in w.current.panels;p(a=>{let d=a.panels[o];if(!d||d.state==="minimized"||v.get(d.component)?.defaultOptions?.canMinimize===!1)return a;let l,s;if(d.state==="floating"){let u=a.floating.find(h=>h.id===o);u&&(l={x:Number(u.x),y:Number(u.y),width:Number(u.width),height:Number(u.height),stickyRight:u.stickyRight,stickyBottom:u.stickyBottom})}else if(d.state==="docked"){let u=h=>{if(h.type==="leaf")return h.panels.includes(o)?h.id:null;for(let y of h.children){let m=u(y);if(m)return m}return null};s=u(a.gridRoot)??void 0}let c=$(a.gridRoot,o);return{...a,gridRoot:c||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:a.floating.filter(u=>u.id!==o),minimized:[...a.minimized,{id:o,title:d.title,component:d.component}],panels:{...a.panels,[o]:{...d,state:"minimized",previousState:d.state,lastFloatingRect:l,lastLeafId:s}}}}),g&&J.current.publish("panel:minimized",{id:o})},[]),ge=X(o=>{let g=w.current.panels[o]?.state==="minimized";p(a=>{let d=a.panels[o];if(!d||d.state!=="minimized")return a;let e=a.minimized.filter(s=>s.id!==o);if((d.previousState||"docked")==="floating"){x.current+=1;let s=v.get(d.component),c=d.lastFloatingRect||s?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},u=ne(c,a.floating);return{...a,minimized:e,floating:[...a.floating,{...u,id:o,z:x.current,stickyRight:!!d.lastFloatingRect?.stickyRight,stickyBottom:!!d.lastFloatingRect?.stickyBottom}],panels:{...a.panels,[o]:{...d,state:"floating"}}}}else{let s=(y,m)=>y.type==="leaf"?y.id===m:y.children.some(E=>s(E,m)),c=d.lastLeafId&&s(a.gridRoot,d.lastLeafId),u=v.get(d.component),h=u?.defaultOptions?.canDrag!==!1;if(c)return{...a,minimized:e,gridRoot:Q(a.gridRoot,d.lastLeafId,o),panels:{...a.panels,[o]:{...d,state:"docked"}}};if(h){x.current+=1;let y=d.lastFloatingRect||u?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},m=ne(y,a.floating);return{...a,minimized:e,floating:[...a.floating,{...m,id:o,z:x.current,stickyRight:!!d.lastFloatingRect?.stickyRight,stickyBottom:!!d.lastFloatingRect?.stickyBottom}],panels:{...a.panels,[o]:{...d,state:"floating"}}}}else{let y=Y(a.gridRoot)||"group-default";return{...a,minimized:e,gridRoot:Q(a.gridRoot,y,o),panels:{...a.panels,[o]:{...d,state:"docked"}}}}}}),g&&J.current.publish("panel:restored",{id:o})},[ne]),ve=X((o,g)=>{p(a=>{let d=a.panels[o];if(!d||v.get(d.component)?.defaultOptions?.canDrag===!1)return a;let l=v.get(d.component),s=g||l?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},c=$(a.gridRoot,o);x.current+=1;let u=ne(s,a.floating);return{...a,gridRoot:c||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:[...a.floating,{...u,id:o,z:x.current}],panels:{...a.panels,[o]:{...d,state:"floating"}}}})},[ne]),Ee=X((o,g)=>{p(a=>{let d=a.panels[o];if(!d)return a;let e=a.floating.filter(c=>c.id!==o),l=$(a.gridRoot,o),s=g||Y(l||a.gridRoot)||"group-default";return{...a,gridRoot:Q(l||a.gridRoot,s,o),floating:e,panels:{...a.panels,[o]:{...d,state:"docked"}}}})},[]),Le=(o,g,a,d)=>{if(o.type==="leaf"){if(o.id===g){let e={type:"leaf",id:`group-split-${Date.now()}-${Math.floor(Math.random()*1e3)}`,panels:[a],activePanelId:a};return{type:"branch",orientation:d==="left"||d==="right"?"horizontal":"vertical",sizes:[.5,.5],children:d==="left"||d==="top"?[e,o]:[o,e]}}return o}else return{...o,children:o.children.map(e=>Le(e,g,a,d))}},ze=X(o=>{p(g=>({...g,draggedPanelId:o}))},[]),ue=X((o,g,a)=>{p(d=>{let e=d.panels[o];if(!e)return d;let l=d.floating.filter(u=>u.id!==o),s=$(d.gridRoot,o),c;return a==="center"?c=Q(s||d.gridRoot,g,o):c=Le(s||d.gridRoot,g,o,a),{...d,gridRoot:c,floating:l,panels:{...d.panels,[o]:{...e,state:"docked"}},draggedPanelId:null}})},[]),ft=X((o,g)=>{p(a=>{let d=a.panels[o];if(!d)return a;let e=a.floating.filter(y=>y.id!==o),l=$(a.gridRoot,o),s={type:"leaf",id:`group-edge-${Date.now()}-${Math.floor(Math.random()*1e3)}`,panels:[o],activePanelId:o},c=g==="left"||g==="right"?"horizontal":"vertical",u=g==="left"||g==="top"?[s,l||a.gridRoot]:[l||a.gridRoot,s];return{...a,gridRoot:{type:"branch",orientation:c,sizes:g==="left"||g==="top"?[.3,.7]:[.7,.3],children:u},floating:e,panels:{...a.panels,[o]:{...d,state:"docked"}},draggedPanelId:null}})},[]),Ne=X((o,g,a)=>{p(d=>{let e=d.panels[o];if(!e)return d;let l=$(d.gridRoot,o),s=h=>{if(h.type==="leaf"){if(h.id===g){let y=h.panels.filter(L=>L!==o),m=Math.max(0,Math.min(a,y.length)),E=[...y];return E.splice(m,0,o),{...h,panels:E,activePanelId:o}}return h}else return{...h,children:h.children.map(s)}},c=s(l||d.gridRoot),u=d.floating.filter(h=>h.id!==o);return{...d,gridRoot:c,floating:u,panels:{...d.panels,[o]:{...e,state:"docked"}},draggedPanelId:null}})},[]),Te=X(o=>{p(g=>{let a=e=>{if(e.type==="leaf")return e.id===o&&e.canClose!==!1?null:e;{let l=e.children.map(u=>a(u)).filter(u=>u!==null);if(l.length===0)return null;if(l.length===1)return l[0];let s=e.sizes.slice(0,l.length),c=s.reduce((u,h)=>u+h,0);return{...e,children:l,sizes:s.map(u=>u/c)}}},d=a(g.gridRoot);return{...g,gridRoot:d||{type:"leaf",id:"group-default",panels:[],activePanelId:null}}})},[]),mt=X(o=>{p(g=>({...g,floating:g.floating.map(a=>a.id===o?{...a,maximized:!a.maximized}:a)}))},[]),ht=X((o,g)=>{let a=(d,e)=>{if(d.type==="leaf")return d;if(e===o.length)return{...d,sizes:g};let l=o[e],s=d.children.map((c,u)=>u===l?a(c,e+1):c);return{...d,children:s}};p(d=>({...d,gridRoot:a(d.gridRoot,0)}))},[]),tt=X((o,g)=>{p(a=>({...a,floating:a.floating.map(d=>d.id===o?{...d,...g}:d)}))},[]),Be=X(()=>JSON.stringify({gridRoot:w.current.gridRoot,floating:w.current.floating,minimized:w.current.minimized,panels:w.current.panels}),[]),He=X(o=>{try{let g=JSON.parse(o);if(g.gridRoot&&g.floating&&g.minimized&&g.panels){let a=Object.keys(g.panels)[0]||null;return p(d=>({...d,gridRoot:g.gridRoot,floating:g.floating,minimized:g.minimized,panels:g.panels,draggedPanelId:null,activePanelId:a})),!0}return!1}catch(g){return console.error("Failed to parse layout configuration:",g),!1}},[]),_e=X(o=>{p(g=>g.activePanelId===o?g:{...g,activePanelId:o})},[]),nt=X(o=>{p(g=>g.dir===o?g:{...g,dir:o,isRtl:o==="rtl"})},[]),vt=X(o=>o in w.current.panels,[]),ot=X(()=>Object.keys(w.current.panels),[]);dt(()=>{D&&p(o=>o.dir===D?o:{...o,dir:D,isRtl:D==="rtl"})},[D]);let We=Ie(new Map),Ke=X((o,g)=>(We.current.set(o,g),()=>{We.current.delete(o)}),[]),xe=X(o=>We.current.get(o)?.()??[],[]),it=Rt(()=>({openPanel:ee,closePanel:re,minimizePanel:ie,restorePanel:ge,floatPanel:ve,dockPanel:Ee,maximizePanel:mt,updateSplitSizes:ht,updateFloatingPosition:tt,focusPanel:se,isOpen:vt,getOpenPanelIds:ot,saveLayout:Be,loadLayout:He,publish:te,subscribe:Z,setDraggedPanelId:ze,dockPanelToGroup:ue,movePanelOrder:Ne,closeLeafGroup:Te,registerCloseGuard:ce,unregisterCloseGuard:K,setPanelDirty:V,updatePanelTitle:oe,requestClosePanel:B,dockPanelToWorkspaceEdge:ft,setActivePanel:_e,setDirection:nt,registerPanelContextMenu:Ke,getPanelContextMenuItems:xe}),[ee,re,ie,ge,ve,Ee,mt,ht,tt,se,vt,ot,Be,He,te,Z,ze,ue,Ne,Te,ce,K,V,oe,B,ft,_e,nt,Ke,xe]),Nt=o=>{let g=o.defaultMessage||o.id;return o.values&&Object.entries(o.values).forEach(([a,d])=>{g=g.replace(`{${a}}`,String(d))}),g},Ce=Rt(()=>({modalClass:P,modalBodyClass:k,sidePanelClass:T,sidePanelBodyClass:R,windowClass:M,windowBodyClass:N}),[P,k,T,R,M,N]);dt(()=>{if(process.env.NODE_ENV!=="development")return;try{getComputedStyle(document.documentElement).getPropertyValue("--rdd-styles-loaded").trim()!=="1"&&console.error(`[react-dockable-desktop] styles.css is not imported.
2
+ Add this to your entry file (main.tsx / index.tsx):
3
+ import 'react-dockable-desktop/styles.css'
4
+ Without it the workspace renders as a black screen with no console errors.`)}catch{}let o=!1;try{for(let g of Array.from(document.styleSheets))try{if(Array.from(g.cssRules||[]).some(d=>d.cssText?.includes("react-contexify"))){o=!0;break}}catch{}}catch{}o||console.warn(`[react-dockable-desktop] replace-react-contexify CSS not detected. Context menus may not render correctly.
5
+ Add: import "replace-react-contexify/dist/ReactContexify.css"`)},[]),dt(()=>{if(n)return n._connect(it),()=>{n._disconnect()}},[n,it]);let bt=Rt(()=>({getSnapshot:_,subscribeToState:A}),[_,A]);return $e(rn.Provider,{value:Ce,children:$e(sn.Provider,{value:v,children:$e(nn.Provider,{value:bt,children:$e(en.Provider,{value:O,children:$e(Mt.Provider,{value:it,children:$e(tn.Provider,{value:S||Nt,children:$e(on.Provider,{value:F,children:t})})})})})})})},Qt=t=>()=>{};function Re(t){let n=Se(en),r=Se(nn),i=Ie(t);i.current=t;let b=$n(t?r?.subscribeToState??Qt:Qt,()=>{let P=r?.getSnapshot()??n;return i.current?i.current(P):P},()=>{let P=r?.getSnapshot()??n;return i.current?i.current(P):P});if(!n)throw new Error("useWindowManagerState must be used within WindowManagerProvider");return t?b:n}var ut=()=>{let t=Se(Mt);if(!t)throw new Error("useWindowManagerActions must be used within WindowManagerProvider");return t},Ft=()=>{let t=Se(Mt);if(!t)throw new Error("useWindowManagerActionsInternal must be used within WindowManagerProvider");return t},be=()=>Se(tn)||(n=>{let r=n.defaultMessage||n.id;return n.values&&Object.entries(n.values).forEach(([i,b])=>{r=r.replace(`{${i}}`,String(b))}),r}),j=(t,n)=>t?typeof t=="string"?t:n(t):"",Vn=()=>{let{publish:t,subscribe:n}=ut();return{publish:t,subscribe:n}},Me=()=>Se(on),an=()=>at().instanceId;function qn(t){let n=Se(Mt),r=an(),i=Ie(t);i.current=t,dt(()=>{if(!(!n?.registerPanelContextMenu||!r))return n.registerPanelContextMenu(r,()=>i.current)},[r,n?.registerPanelContextMenu])}function ln(t){if(!t)return typeof document<"u"?document.documentElement.dir?.toLowerCase()==="rtl"||document.body.dir?.toLowerCase()==="rtl":!1;let n=t.closest("[dir]");return n?n.getAttribute("dir")?.toLowerCase()==="rtl":document.documentElement.dir?.toLowerCase()==="rtl"||document.body.dir?.toLowerCase()==="rtl"}import{JsonContextMenu as eo}from"replace-react-contexify";import"replace-react-contexify/styles.css";import{createContext as un,useContext as pn,useState as Kn,useCallback as ye,useMemo as jn,useRef as Un}from"react";import{jsx as cn}from"react/jsx-runtime";var Jn=0,At=()=>`panel-${++Jn}-${Date.now()}`,kt=new Map,dn={leftPanel:null,rightPanel:null,modals:[]},gn=un(null),fn=un(null),Bt=({children:t})=>{let[n,r]=Kn(dn),i=Un(n);i.current=n;let b=ye((p,w)=>{kt.set(p,w)},[]),P=ye(p=>{kt.delete(p)},[]),k=ye(async(p,w,I={})=>{let _=i.current.leftPanel;if(_){let F=kt.get(_.id);if(F&&!await F())return null}let A=At(),W={id:A,Component:p,props:w,containerType:"left-panel",options:I};return r(F=>({...F,leftPanel:W})),A},[]),T=ye(async(p,w,I={})=>{let _=i.current.rightPanel;if(_){let F=kt.get(_.id);if(F&&!await F())return null}let A=At(),W={id:A,Component:p,props:w,containerType:"right-panel",options:I};return r(F=>({...F,rightPanel:W})),A},[]),R=ye((p,w,I={})=>{let _=At(),A=w.title,W={...I,title:I.title||A||"Confirmation"},F={id:_,Component:p,props:w,containerType:"modal",options:W};return r(J=>({...J,modals:[...J.modals,F]})),_},[]),M=ye(p=>{r(w=>({leftPanel:w.leftPanel?.id===p?null:w.leftPanel,rightPanel:w.rightPanel?.id===p?null:w.rightPanel,modals:w.modals.filter(I=>I.id!==p)}))},[]),N=ye(()=>{r(dn)},[]),v=ye(()=>{r(p=>({...p,modals:[]}))},[]),S=ye(p=>n.leftPanel?.id===p?n.leftPanel:n.rightPanel?.id===p?n.rightPanel:n.modals.find(w=>w.id===p),[n]),z=ye((p,w)=>{r(I=>({leftPanel:I.leftPanel?.id===p?{...I.leftPanel,...w}:I.leftPanel,rightPanel:I.rightPanel?.id===p?{...I.rightPanel,...w}:I.rightPanel,modals:I.modals.map(_=>_.id===p?{..._,...w}:_)}))},[]),D=ye((p,w,I)=>{z(p,{dirty:w,dirtyOptions:I})},[z]),O=jn(()=>({openLeftPanel:k,openRightPanel:T,openModal:R,close:M,closeAll:N,closeAllModals:v,getInstance:S,updateInstance:z,setDirty:D,registerCloseHandler:b,unregisterCloseHandler:P}),[k,T,R,M,N,v,S,z,D,b,P]);return cn(gn.Provider,{value:n,children:cn(fn.Provider,{value:O,children:t})})},Ae=()=>{let t=pn(gn);if(!t)throw new Error("usePanelState must be used within PanelProvider");return t},Xe=()=>{let t=pn(fn);if(!t)throw new Error("usePanelActions must be used within PanelProvider");return t};import{useEffect as mn,useRef as Zn}from"react";import{jsx as Ve,jsxs as Ht}from"react/jsx-runtime";var Qn=({title:t,message:n,alert:r,alertType:i="info",useYesNoTitles:b=!1,onOK:P,onCancel:k})=>{let{requestClose:T,setIcon:R,setTitle:M}=at(),N=be(),v=Me(),S=Zn(null);mn(()=>{if(t){let I=typeof t=="string"?t:N(t);M(I)}R&&R(Ve("span",{children:"\u2753"}))},[t,M,R,N]),mn(()=>{S.current?.focus()},[]);let z=typeof n=="string"?n:N(n),D=N(b?v.no:v.cancel),O=N(b?v.yes:v.ok),p=I=>{I.preventDefault(),P?.(),T()},w=()=>{k?.(),T()};return Ht("form",{onSubmit:p,className:"confirmation-form-body",children:[r&&Ht("div",{className:`confirmation-alert confirmation-alert-${i}`,children:[Ve("span",{children:"\u2139\uFE0F"}),Ve("span",{children:r})]}),Ve("div",{style:{fontSize:"0.9rem",color:"inherit",lineHeight:1.5},children:z}),Ve("hr",{style:{marginTop:"0.5rem",marginBottom:"0.5rem",opacity:.1}}),Ht("div",{className:"confirmation-actions",children:[Ve("button",{type:"button",className:"dw-btn dw-btn-sm dw-btn-outline",onClick:w,children:D}),Ve("button",{type:"submit",className:"dw-btn dw-btn-sm dw-btn-primary",ref:S,children:O})]})]})},qe=Qn;import{Fragment as vn,jsx as f,jsxs as U}from"react/jsx-runtime";var bn=(t,n)=>{if(!t)return null;if(t.type==="leaf")return t.id===n?t:null;for(let r of t.children){let i=bn(r,n);if(i)return i}return null},pt=new Map,It="preserved-dom-container",Gt=U("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:[f("rect",{x:"3",y:"3",width:"7",height:"9",rx:"1"}),f("rect",{x:"14",y:"3",width:"7",height:"5",rx:"1"}),f("rect",{x:"14",y:"12",width:"7",height:"9",rx:"1"}),f("rect",{x:"3",y:"16",width:"7",height:"5",rx:"1"})]}),Ze={float:f("span",{className:"wm-menu-icon",children:U("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:[f("rect",{x:"2",y:"8",width:"14",height:"14",rx:"1"}),f("rect",{x:"8",y:"2",width:"14",height:"14",rx:"1"})]})}),minimize:f("span",{className:"wm-menu-icon",children:f("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",style:{display:"block"},children:f("line",{x1:"4",y1:"18",x2:"20",y2:"18"})})}),restore:f("span",{className:"wm-menu-icon",children:f("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:f("rect",{x:"4",y:"4",width:"16",height:"16",rx:"1"})})}),maximize:f("span",{className:"wm-menu-icon",children:f("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:f("rect",{x:"2",y:"2",width:"20",height:"20",rx:"1"})})}),close:f("span",{className:"wm-menu-icon",children:f("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:f("path",{d:"M18 6L6 18M6 6l12 12"})})})},yn=t=>{let n=pt.get(t);return n||(n=document.createElement("div"),n.style.width="100%",n.style.height="100%",pt.set(t,n)),n},to=(t,n,r)=>{let i=r.get(n);if(!i)return console.warn(`[react-dockable-desktop] Panel "${t}" references component key "${n}" which is not registered. Add it to the WorkspaceClient panels config:
6
+ new WorkspaceClient({ panels: { "${n}": { component: YourComponent } } })`),U("div",{className:"dw-unregistered-panel",style:{border:"2px dashed #dc3545"},children:[f("h6",{style:{fontWeight:700,marginBottom:"0.25rem"},children:"\u26A0\uFE0F Component Unregistered"}),U("span",{style:{fontSize:"0.875rem",color:"var(--text-secondary, #94a3b8)"},children:["Key: ",n]})]});let b=i.Component;return f(b,{panelId:t})},Pn=new Map,Qe=new Map,Tt=t=>{let n=Qe.get(t);return n||(n={onClose:new Set,onMinimize:new Set,onRestore:new Set,onResize:new Set},Qe.set(t,n)),n},xn=({panelId:t})=>{let n=pe(null);return le(()=>{let r=n.current;if(!r)return;let i=yn(t);r.appendChild(i);let b=new ResizeObserver(P=>{for(let k of P){let{width:T,height:R}=k.contentRect;if(T>0&&R>0){Pn.set(t,{width:T,height:R});let M=Qe.get(t);M&&M.onResize.forEach(N=>N(T,R))}}});return b.observe(r),()=>{b.disconnect();let P=document.getElementById(It);P||(P=document.createElement("div"),P.id=It,P.style.display="none",document.body.appendChild(P)),P.appendChild(i)}},[t]),f("div",{ref:n,style:{width:"100%",height:"100%"}})},no=({panelId:t})=>{let n=Re(),r=ct(),i=be(),b=pe(null),P=n.panels[t],k=P?r.get(P.component):null,T=k?.defaultOptions?.disableLivePreview||!1,R=Pn.get(t)||{width:800,height:500},M=R.width,N=R.height,z=Math.min(220/M,140/N);if(le(()=>{if(T)return;let D=b.current;if(!D)return;let O=pt.get(t);if(O)return D.appendChild(O),()=>{let p=document.getElementById(It);p||(p=document.createElement("div"),p.id=It,p.style.display="none",document.body.appendChild(p)),p.appendChild(O)}},[t,T]),T){let D=M*z,O=N*z,p=P?.title||k?.defaultOptions?.title||"Panel",w=j(p,i),I=(Array.from(w)[0]||"P").toUpperCase();return f("div",{className:"taskbar-item-preview-frame",style:{width:`${D}px`,height:`${O}px`,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(108, 117, 125, 0.15)",border:"1px dashed var(--taskbar-item-border, rgba(255, 255, 255, 0.15))"},children:f("div",{style:{fontSize:"2rem",fontWeight:600,color:"var(--panel-title-color, var(--panel-text, rgba(255, 255, 255, 0.85)))",userSelect:"none"},children:I})})}return f("div",{className:"taskbar-item-preview-frame",style:{width:`${M*z}px`,height:`${N*z}px`},children:f("div",{ref:b,className:"taskbar-item-preview-host",style:{width:`${M}px`,height:`${N}px`,transform:`scale(${z})`,transformOrigin:"top left",position:"absolute",top:0,left:0,"--preview-scale":z}})})},oo=({panelId:t,children:n})=>{let r=Re(),{requestClosePanel:i,setPanelDirty:b,registerCloseGuard:P,unregisterCloseGuard:k,updatePanelTitle:T}=ut(),R=r.minimized.some(v=>v.id===t),M=pe(R);le(()=>{let v=Qe.get(t);v&&(R&&!M.current?v.onMinimize.forEach(S=>S()):!R&&M.current&&v.onRestore.forEach(S=>S()),M.current=R)},[R,t]),le(()=>()=>{let v=Qe.get(t);v&&(v.onClose.forEach(S=>S()),Qe.delete(t))},[t]);let N=$t.useMemo(()=>({requestClose:v=>i(t,v),setDirty:v=>b(t,v),onCloseRequested:v=>(P(t,v),()=>k(t)),setTitle:v=>T(t,v),instanceId:t,onClose:v=>{let S=Tt(t);return S.onClose.add(v),()=>S.onClose.delete(v)},onMinimize:v=>{let S=Tt(t);return S.onMinimize.add(v),()=>S.onMinimize.delete(v)},onRestore:v=>{let S=Tt(t);return S.onRestore.add(v),()=>S.onRestore.delete(v)},onResize:v=>{let S=Tt(t);return S.onResize.add(v),()=>S.onResize.delete(v)}}),[t,i,b,P,k,T]);return f(Ge,{value:N,children:n})},Cn=({node:t,path:n,onTabRightClick:r,activeDropZone:i,onHoverDropZone:b,onTabDragStart:P,hoveredTab:k,onTabHover:T,defaultPanelIcon:R,onRequestClosePanel:M})=>{let{updateSplitSizes:N}=ut();if(t.type==="leaf")return f(io,{leaf:t,onTabRightClick:r,activeDropZone:i,onHoverDropZone:b,onTabDragStart:P,hoveredTab:k,onTabHover:T,defaultPanelIcon:R,onRequestClosePanel:M});let v=t.orientation==="horizontal",S=(z,D)=>{D.preventDefault();let O=D.currentTarget;O.setPointerCapture(D.pointerId);let p=v?D.clientX:D.clientY,w=[...t.sizes];O.classList.add("active"),document.body.classList.add("resizing-active",v?"resizing-col-active":"resizing-row-active");let I=O.parentElement,_=I?v?I.clientWidth:I.clientHeight:v?1e3:800,A=F=>{let x=((v?F.clientX:F.clientY)-p)/_,Z=[...w];Z[z]+=x,Z[z+1]-=x,Z[z]>.1&&Z[z+1]>.1&&N(n,Z)},W=()=>{O.classList.remove("active"),document.body.classList.remove("resizing-active","resizing-row-active","resizing-col-active"),O.removeEventListener("pointermove",A),O.removeEventListener("pointerup",W),O.removeEventListener("pointercancel",W)};O.addEventListener("pointermove",A),O.addEventListener("pointerup",W),O.addEventListener("pointercancel",W)};return f("div",{style:{display:"flex",flexDirection:v?"row":"column",width:"100%",height:"100%",overflow:"hidden",position:"relative"},children:t.children.map((z,D)=>{let O=t.sizes[D]*100;return U($t.Fragment,{children:[f("div",{style:{flexGrow:t.sizes[D],flexBasis:`${O}%`,overflow:"hidden",position:"relative"},children:f(Cn,{node:z,path:[...n,D],onTabRightClick:r,activeDropZone:i,onHoverDropZone:b,onTabDragStart:P,hoveredTab:k,onTabHover:T,defaultPanelIcon:R,onRequestClosePanel:M})}),D<t.children.length-1&&f("div",{onPointerDown:p=>S(D,p),style:{cursor:v?"col-resize":"row-resize",width:v?"1px":"100%",height:v?"100%":"1px",zIndex:20},className:"resizer-bar"})]},D)})})},io=({leaf:t,onTabRightClick:n,activeDropZone:r,onHoverDropZone:i,onTabDragStart:b,hoveredTab:P,onTabHover:k,defaultPanelIcon:T,onRequestClosePanel:R})=>{let M=Re(),N=ct(),{openPanel:v,closeLeafGroup:S,setActivePanel:z}=Ft(),D=be(),O=Me(),{windowClass:p,windowBodyClass:w}=Fe(),I=pe(null),[_,A]=ke({left:!1,right:!1}),W=_t(()=>{let x=I.current;x&&A({left:x.scrollLeft>0,right:x.scrollLeft<x.scrollWidth-x.clientWidth-1})},[]);le(()=>{let x=I.current;if(!x)return;x.addEventListener("scroll",W,{passive:!0});let Z=new ResizeObserver(W);return Z.observe(x),W(),()=>{x.removeEventListener("scroll",W),Z.disconnect()}},[W]);let F=x=>{I.current?.scrollBy({left:x==="left"?-120:120,behavior:"smooth"})},J=x=>{v(x,M.panels[x].component),z(x)};return U("div",{"data-active-panel-id":t.activePanelId||"",className:`workspace-panel ${p??""}`,style:{overflow:"hidden",position:"relative"},children:[U("div",{className:"workspace-tab-bar",style:{minHeight:"38px"},children:[_.left&&f("button",{className:"tab-scroll-btn tab-scroll-btn-left",onPointerDown:x=>x.stopPropagation(),onClick:()=>F("left"),tabIndex:-1,"aria-label":"Scroll tabs left",children:"\u2039"}),f("div",{ref:I,className:"tab-headers-container",style:{scrollbarWidth:"none"},onPointerMove:x=>{M.draggedPanelId&&x.target===x.currentTarget&&k(t.id,"EMPTY",t.panels.length,"right")},onPointerLeave:x=>{M.draggedPanelId&&x.target===x.currentTarget&&k(t.id,"",-1,null)},children:t.panels.map((x,Z)=>{let te=M.panels[x];if(!te)return null;let ne=t.activePanelId===x,se=M.activePanelId===x,Q=N.get(te.component)?.defaultOptions,Y=P&&P.leafId===t.id&&P.panelId===x,ee=Z===t.panels.length-1,re=P&&P.leafId===t.id&&P.panelId==="EMPTY"&&ee,ce=Y?P.side==="left"?"drag-hover-left":"drag-hover-right":re?"drag-hover-right":"",K=ne?se?"active workspace-tab-active-focused":"active workspace-tab-active-unfocused":"workspace-tab-inactive";return U("div",{"data-tab-id":x,"data-leaf-id":t.id,"data-tab-index":String(Z),onClick:()=>J(x),onPointerDown:V=>{Q?.canDrag!==!1&&b(x,V)},onContextMenu:V=>n(x,V),onPointerMove:V=>{if(M.draggedPanelId&&V.pointerType!=="touch"){let oe=V.currentTarget.getBoundingClientRect(),ie=V.clientX-oe.left<oe.width/2?"left":"right";k(t.id,x,Z,ie)}},onPointerLeave:()=>{M.draggedPanelId&&k(t.id,"",-1,null)},className:`workspace-tab ${K} ${ce}`,style:{cursor:Q?.canDrag===!1?"default":"pointer"},children:[U("span",{className:"text-truncate",style:{maxWidth:"120px",display:"flex",alignItems:"center"},children:[f("span",{className:"workspace-tab-icon",children:Q?.icon||T||Gt}),U("span",{children:[j(te.title,D),te.dirty?" *":""]})]}),Q?.renderHeaderActions&&f("span",{className:"tab-header-actions",onClick:V=>V.stopPropagation(),onPointerDown:V=>V.stopPropagation(),children:Q.renderHeaderActions(x)}),Q?.canClose!==!1&&f("span",{onClick:V=>{V.stopPropagation(),R(x)},title:j(O.closeTab,D),className:"close-tab-x",style:{width:"18px",height:"18px",...Q?.renderHeaderActions?{}:{marginInlineStart:"auto"}},children:f("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:f("path",{d:"M18 6L6 18M6 6l12 12"})})})]},x)})}),_.right&&f("button",{className:"tab-scroll-btn tab-scroll-btn-right",onPointerDown:x=>x.stopPropagation(),onClick:()=>F("right"),tabIndex:-1,"aria-label":"Scroll tabs right",children:"\u203A"}),t.panels.length===0&&t.keepOnEmpty&&t.canClose!==!1&&f("span",{onClick:()=>S(t.id),className:"close-tab-x header-close-empty-group",style:{width:"18px",height:"18px",cursor:"pointer"},title:j(O.closeEmptyGroup,D),children:f("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:f("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),U("div",{className:`dw-panel-body ${w??""}`,style:{position:"relative",overflow:"hidden"},children:[t.activePanelId&&M.panels[t.activePanelId]?f(xn,{panelId:t.activePanelId},t.activePanelId):f("div",{className:"empty-leaf-placeholder",children:f("span",{children:"Empty Workspace Section"})}),M.draggedPanelId!==null&&f("div",{className:"dock-drop-zone-overlay",children:U("div",{className:"dock-target-cross",children:[f("div",{"data-leaf-id":t.id,"data-drop-zone":"top",onPointerEnter:()=>i(t.id,"top"),onPointerLeave:()=>i(t.id,null),className:"dock-target-box dock-target-top",children:"\u25B2"}),f("div",{"data-leaf-id":t.id,"data-drop-zone":"bottom",onPointerEnter:()=>i(t.id,"bottom"),onPointerLeave:()=>i(t.id,null),className:"dock-target-box dock-target-bottom",children:"\u25BC"}),f("div",{"data-leaf-id":t.id,"data-drop-zone":"left",onPointerEnter:()=>i(t.id,"left"),onPointerLeave:()=>i(t.id,null),className:"dock-target-box dock-target-left",children:"\u25C0"}),f("div",{"data-leaf-id":t.id,"data-drop-zone":"right",onPointerEnter:()=>i(t.id,"right"),onPointerLeave:()=>i(t.id,null),className:"dock-target-box dock-target-right",children:"\u25B6"}),f("div",{"data-leaf-id":t.id,"data-drop-zone":"center",onPointerEnter:()=>i(t.id,"center"),onPointerLeave:()=>i(t.id,null),className:"dock-target-box dock-target-center",children:"\u25A3"})]})}),M.draggedPanelId!==null&&r!==null&&r.leafId===t.id&&f("div",{className:"dock-preview-highlight",style:{left:r.position==="right"?"50%":"0",top:r.position==="bottom"?"50%":"0",width:r.position==="left"||r.position==="right"?"50%":"100%",height:r.position==="top"||r.position==="bottom"?"50%":"100%"}})]})]})},ro=({skin:t="vscode",defaultPanelIcon:n,taskbarVisibility:r="always"})=>{let i=Re(),b=ct(),{restorePanel:P,minimizePanel:k,requestClosePanel:T,maximizePanel:R,updateFloatingPosition:M,focusPanel:N,floatPanel:v,setDraggedPanelId:S,dockPanelToGroup:z,movePanelOrder:D,dockPanelToWorkspaceEdge:O,setActivePanel:p,setDirection:w,getPanelContextMenuItems:I}=Ft(),{openModal:_}=Xe(),A=be(),W=Me(),F=$t.useCallback(e=>{let l=i.panels[e];T(e,{onConfirm:s=>new Promise(c=>{let u=s||l?.dirtyOptions,h=l?j(l.title,A):"Panel";_(qe,{title:u?.title||W.unsavedChangesTitle,message:u?.message||{id:W.unsavedChangesMessage.id,defaultMessage:W.unsavedChangesMessage.defaultMessage,values:{title:h}},alert:u?.alert,alertType:u?.alertType||"danger",useYesNoTitles:!0,onOK:()=>c(!0),onCancel:()=>c(!1)},{size:"small"})})})},[T,i.panels,A,_,W]),{windowClass:J,windowBodyClass:x}=Fe(),Z=pe(null),te=pe(null),[ne,se]=ke(!1),$=pe(null),Q=pe(i.minimized.length),[Y,ee]=ke(null),re=pe(null),ce=pe("mouse"),[K,V]=ke(!1);le(()=>()=>{re.current&&clearTimeout(re.current)},[]),le(()=>{Y&&(i.minimized.some(l=>l.id===Y.id)||ee(null))},[i.minimized,Y]),le(()=>{if(!Y?.fromTouch)return;let e=l=>{l.pointerType!=="touch"||document.querySelector(".taskbar-item-tooltip")?.contains(l.target)||ee(null)};return document.addEventListener("pointerdown",e,{capture:!0}),()=>document.removeEventListener("pointerdown",e,{capture:!0})},[Y?.fromTouch]);let[oe,B]=ke(null),ie=pe(null),[ge,ve]=ke({x:0,y:0}),[Ee,Le]=ke(null),ze=pe(null),ue=e=>{Le(e),ze.current=e},[ft,Ne]=ke(null),Te=pe(null),mt=(e,l,s,c)=>{let u=c?{leafId:e,panelId:l,index:s,side:c}:null;Ne(u),Te.current=u},ht=(e,l)=>{let s=l?{leafId:e,position:l}:null;B(s),ie.current=s},tt=(e,l)=>{let s=document.elementsFromPoint(e,l),c=!1,u=!1,h=!1;for(let y of s)if(y instanceof HTMLElement){if(!c&&y.dataset.dropZone){let m=y.dataset.leafId;if(m){let E=y.dataset.dropZone;B({leafId:m,position:E}),ie.current={leafId:m,position:E},c=!0}}if(!h&&y.dataset.tabId){let m=y.dataset.leafId,E=parseInt(y.dataset.tabIndex||"0",10);if(m){let L=y.getBoundingClientRect(),C=e-L.left<L.width/2?"left":"right";Ne({leafId:m,panelId:y.dataset.tabId,index:E,side:C}),Te.current={leafId:m,panelId:y.dataset.tabId,index:E,side:C},h=!0}}if(!u&&y.dataset.edgeTrigger&&(ue(y.dataset.edgeTrigger),u=!0),c&&u&&h)break}c||(B(null),ie.current=null),u||ue(null),h||(Ne(null),Te.current=null)},Be=300,He=8,_e=()=>{S(null),B(null),ie.current=null,Ne(null),Te.current=null,ue(null)},nt=(e,l)=>{let s=ie.current,c=Te.current,u=ze.current;if(u)O(e,u);else if(c){let h=c.index;c.side==="right"&&(h+=1);let y=bn(i.gridRoot,c.leafId);if(y){let m=y.panels.indexOf(e);m!==-1&&m<h&&(h-=1)}D(e,c.leafId,h)}else s?z(e,s.leafId,s.position):v(e,{x:l.clientX-150,y:l.clientY-15,width:450,height:350});_e()},vt=(e,l)=>{if(l.pointerType==="mouse"&&l.button!==0)return;let s=l.currentTarget,c=l.clientX,u=l.clientY;if(l.pointerType==="touch"){let h=l.pointerId,y=!1,m=()=>{y=!0,clearTimeout(L),s.removeEventListener("pointermove",E),s.removeEventListener("pointerup",m),s.removeEventListener("pointercancel",m)},E=C=>{Math.hypot(C.clientX-c,C.clientY-u)>He&&m()},L=setTimeout(()=>{if(y)return;s.removeEventListener("pointermove",E),s.removeEventListener("pointerup",m),s.removeEventListener("pointercancel",m);try{s.setPointerCapture(h)}catch{return}s.classList.add("long-press-active"),navigator.vibrate&&navigator.vibrate(10);let C=!1,H=ae=>{C||(C=!0,S(e)),ve({x:ae.clientX,y:ae.clientY}),tt(ae.clientX,ae.clientY)},q=ae=>{s.classList.remove("long-press-active"),s.removeEventListener("pointermove",H),s.removeEventListener("pointerup",q),s.removeEventListener("pointercancel",G),C?nt(e,ae):ot(e,ae)},G=()=>{s.classList.remove("long-press-active"),s.removeEventListener("pointermove",H),s.removeEventListener("pointerup",q),s.removeEventListener("pointercancel",G),C&&_e()};s.addEventListener("pointermove",H),s.addEventListener("pointerup",q),s.addEventListener("pointercancel",G)},Be);s.addEventListener("pointermove",E),s.addEventListener("pointerup",m),s.addEventListener("pointercancel",m)}else{let h=!1,y=E=>{let L=E.clientX-c,C=E.clientY-u;!h&&(Math.abs(L)>5||Math.abs(C)>5)&&(h=!0,S(e)),h&&ve({x:E.clientX,y:E.clientY})},m=E=>{window.removeEventListener("pointermove",y),window.removeEventListener("pointerup",m),h&&nt(e,E)};window.addEventListener("pointermove",y),window.addEventListener("pointerup",m)}},ot=(e,l)=>{l.preventDefault();let s=i.panels[e];if(!s)return;let u=b.get(s.component)?.defaultOptions,h=[];if(u?.canDrag!==!1&&h.push({label:j(W.floatWindow,A),icon:Ze.float,action:()=>v(e)}),u?.canMinimize!==!1&&h.push({label:j(W.minimizePanel,A),icon:Ze.minimize,action:()=>k(e)}),h.length>0&&u?.canClose!==!1&&h.push({separator:!0}),u?.canClose!==!1&&h.push({label:j(W.closeTab,A),icon:Ze.close,action:()=>F(e)}),h.length===0)return;let y=I(e),m=y.length>0?[...h,{separator:!0},...y]:h;te.current?.show({event:l,contextMenu:{items:m}})},We=(e,l)=>{l.preventDefault(),ee(null),te.current?.show({event:l,contextMenu:{items:[{label:j(W.restorePanel,A),icon:Ze.restore,action:()=>P(e)},{label:j(W.maximizePanel,A),icon:Ze.maximize,action:()=>R(e)},{separator:!0},{label:j(W.closePanel,A),icon:Ze.close,action:()=>F(e)}]}})};le(()=>{let e=Object.keys(i.panels);for(let l of Array.from(pt.keys()))e.includes(l)||pt.delete(l)},[i.panels]),le(()=>{let e=()=>{i.draggedPanelId!==null&&(S(null),B(null),Ne(null))};return window.addEventListener("blur",e),()=>{window.removeEventListener("blur",e)}},[i.draggedPanelId]);let Ke=pe(null),[xe,it]=ke({width:1024,height:768});le(()=>{let e=Ke.current;if(!e)return;let l=!1,s=new ResizeObserver(c=>{if(!c||c.length===0)return;let u=c[0].contentRect;if(process.env.NODE_ENV==="development"&&u.height<10&&!l){l=!0;let h=e,y=e.parentElement;for(;y&&y!==document.documentElement&&y.getBoundingClientRect().height<10;){h=y;y=y.parentElement}let m=h.tagName.toLowerCase(),E=h.id?` id="${h.id}"`:"",L=h.className?` class="${h.className}"`:"",C=h===e?"the WindowManager container itself":`a wrapper element: <${m}${E}${L}>`;console.warn(`[react-dockable-desktop] Workspace height is 0px \u2014 the workspace will be invisible.
7
+
8
+ Zero height found at: ${C}
9
+
10
+ Root cause: in CSS, "height: 100%" only works when the parent has an explicit height.
11
+ If any ancestor has height: auto (the default for <div>), the chain breaks and
12
+ everything inside collapses to 0px.
13
+
14
+ Fix options:
15
+ 1. Use height: 100vh directly on the workspace wrapper:
16
+ <div style={{ height: '100vh', overflow: 'hidden' }}>
17
+ <WindowManager />
18
+ </div>
19
+
20
+ 2. Use CSS Grid/Flex and let the workspace fill remaining space:
21
+ .layout { display: flex; flex-direction: column; height: 100vh; }
22
+ .workspace { flex: 1; min-height: 0; }
23
+
24
+ 3. Verify styles.css is imported \u2014 it anchors html, body, #root to 100% height.`)}it({width:Math.max(100,u.width),height:Math.max(100,u.height)})});return s.observe(e),()=>{s.disconnect()}},[]),le(()=>{let e=Ke.current;if(!e)return;let l=()=>{let u=ln(e);w(u?"rtl":"ltr")};l();let s=new MutationObserver(l);s.observe(document.documentElement,{attributes:!0,attributeFilter:["dir"]}),s.observe(document.body,{attributes:!0,attributeFilter:["dir"]});let c=e.closest("[dir]");return c&&c!==document.documentElement&&c!==document.body&&s.observe(c,{attributes:!0,attributeFilter:["dir"]}),()=>{s.disconnect()}},[w]),le(()=>{let e=xe.width,l=xe.height;i.floating.forEach(s=>{let c=typeof s.width=="string"?parseFloat(s.width):s.width,u=typeof s.height=="string"?parseFloat(s.height):s.height,h=typeof s.x=="string"?parseFloat(s.x):s.x,y=typeof s.y=="string"?parseFloat(s.y):s.y,m=c,E=u,L=h,C=y,H=!1;m>e&&(m=Math.max(200,e-20),H=!0),E>l&&(E=Math.max(150,l-40),H=!0);let q=10;if(s.stickyRight)L=e-m-q,H=!0;else{let G=e-100;L>G&&(L=Math.max(0,G),H=!0)}if(s.stickyBottom)C=l-E-q,H=!0;else{let G=l-40;C>G&&(C=Math.max(0,G),H=!0)}H&&M(s.id,{x:L,y:C,width:m,height:E})})},[xe,i.floating,M]),le(()=>{let e=l=>{if(l.button!==0)return;let s=l.target;if(!s||typeof s.closest!="function")return;let c=s.closest(".floating-window");if(c){let h=c.getAttribute("data-window-id");h&&(p(h),N(h));return}let u=s.closest(".workspace-panel");if(u){let h=u.getAttribute("data-active-panel-id");h&&p(h)}};return document.addEventListener("pointerdown",e),()=>{document.removeEventListener("pointerdown",e)}},[N,p]);let Nt=(e,l)=>{let s=i.floating.find(C=>C.id===e);if(!s||s.maximized)return;N(e);let c=l.currentTarget,u=c.closest(".floating-window"),h=l.clientX,y=l.clientY,m=u?u.offsetLeft:0,E=u?u.offsetTop:0,L=()=>{let C=ie.current,H=Te.current,q=ze.current;if(q)O(e,q);else if(H){let G=H.index;H.side==="right"&&(G+=1),D(e,H.leafId,G)}else C&&z(e,C.leafId,C.position);_e()};if(l.pointerType==="touch"){let C=l.pointerId,H=!1,q=()=>{H=!0,clearTimeout(ae),c.removeEventListener("pointermove",G),c.removeEventListener("pointerup",q),c.removeEventListener("pointercancel",q)},G=fe=>{Math.hypot(fe.clientX-h,fe.clientY-y)>He&&q()},ae=setTimeout(()=>{if(H)return;c.removeEventListener("pointermove",G),c.removeEventListener("pointerup",q),c.removeEventListener("pointercancel",q);try{c.setPointerCapture(C)}catch{return}c.classList.add("long-press-active"),S(e);let fe=we=>{let yt=we.clientX-h,Pt=we.clientY-y;M(e,{x:m+yt,y:E+Pt,stickyRight:!1,stickyBottom:!1}),tt(we.clientX,we.clientY)},De=()=>{c.classList.remove("long-press-active"),c.removeEventListener("pointermove",fe),c.removeEventListener("pointerup",De),c.removeEventListener("pointercancel",Oe),L()},Oe=()=>{c.classList.remove("long-press-active"),c.removeEventListener("pointermove",fe),c.removeEventListener("pointerup",De),c.removeEventListener("pointercancel",Oe),_e()};c.addEventListener("pointermove",fe),c.addEventListener("pointerup",De),c.addEventListener("pointercancel",Oe)},Be);c.addEventListener("pointermove",G),c.addEventListener("pointerup",q),c.addEventListener("pointercancel",q)}else{let C=!1,H=G=>{let ae=G.clientX-h,fe=G.clientY-y;!C&&(Math.abs(ae)>5||Math.abs(fe)>5)&&(C=!0,S(e)),C&&M(e,{x:m+ae,y:E+fe,stickyRight:!1,stickyBottom:!1})},q=()=>{window.removeEventListener("pointermove",H),window.removeEventListener("pointerup",q),C&&L()};window.addEventListener("pointermove",H),window.addEventListener("pointerup",q)}},Ce=(e,l,s)=>{s.stopPropagation();let c=i.floating.find(Ct=>Ct.id===e);if(!c||c.maximized)return;N(e);let u=s.currentTarget;u.setPointerCapture(s.pointerId);let h=s.clientX,y=s.clientY,m=u.closest(".floating-window"),E=m?m.offsetWidth:400,L=m?m.offsetHeight:300,C=m?m.offsetLeft:0,H=m?m.offsetTop:0,q=xe.width,G=xe.height,ae=typeof c.x=="string"?parseFloat(c.x):c.x,fe=typeof c.y=="string"?parseFloat(c.y):c.y,De=typeof c.width=="string"?parseFloat(c.width):c.width,Oe=typeof c.height=="string"?parseFloat(c.height):c.height,we=l==="se"&&Math.abs(ae+De-q)<4,yt=l==="se"&&Math.abs(fe+Oe-G)<4,Pt=Ct=>{let Jt=Ct.clientX-h,Zt=Ct.clientY-y,rt=C,st=H,je=E,Ue=L;l.includes("e")&&(je=Math.max(200,E+Jt)),l.includes("w")&&(je=Math.max(200,E-Jt),rt=C+E-je),l.includes("s")&&(Ue=Math.max(150,L+Zt)),l.includes("n")&&(Ue=Math.max(150,L-Zt),st=H+L-Ue),we&&(rt=q-je,rt<0&&(rt=0,je=q)),yt&&(st=G-Ue,st<0&&(st=0,Ue=G)),M(e,{x:rt,y:st,width:je,height:Ue,stickyRight:we,stickyBottom:yt})},xt=()=>{u.removeEventListener("pointermove",Pt),u.removeEventListener("pointerup",xt),u.removeEventListener("pointercancel",xt)};u.addEventListener("pointermove",Pt),u.addEventListener("pointerup",xt),u.addEventListener("pointercancel",xt)},bt=e=>{if(Z.current){let l=e==="left"?-150:150;Z.current.scrollBy({left:l,behavior:"smooth"})}},o=_t(()=>{$.current&&clearTimeout($.current),se(!0)},[]),g=_t(()=>{$.current=setTimeout(()=>se(!1),400)},[]);le(()=>{r==="autohide"&&i.minimized.length>Q.current&&($.current&&clearTimeout($.current),se(!0),$.current=setTimeout(()=>se(!1),2e3)),Q.current=i.minimized.length},[i.minimized.length,r]);let[a,d]=ke("dark");return le(()=>{let e=()=>{let s=document.documentElement.getAttribute("data-color-scheme")==="light"?"light":"dark";d(s)};e();let l=new MutationObserver(e);return l.observe(document.documentElement,{attributes:!0,attributeFilter:["data-color-scheme"]}),()=>l.disconnect()},[]),le(()=>(t?document.documentElement.setAttribute("data-workspace-skin",t):document.documentElement.removeAttribute("data-workspace-skin"),()=>{document.documentElement.removeAttribute("data-workspace-skin")}),[t]),U("div",{"data-workspace-skin":t,"data-color-scheme":a,style:{display:"flex",flexDirection:"column",position:"relative",width:"100%",height:"100%",overflow:"hidden",userSelect:"none"},dir:i.dir,children:[U("div",{ref:Ke,className:i.draggedPanelId?"dragging-active":void 0,style:{flexGrow:1,width:"100%",position:"relative",overflow:"hidden"},children:[i.draggedPanelId!==null&&U(vn,{children:[f("div",{"data-edge-trigger":"left",className:"workspace-edge-trigger edge-trigger-left",onPointerEnter:()=>ue("left"),onPointerLeave:()=>ue(null)}),f("div",{"data-edge-trigger":"right",className:"workspace-edge-trigger edge-trigger-right",onPointerEnter:()=>ue("right"),onPointerLeave:()=>ue(null)}),f("div",{"data-edge-trigger":"top",className:"workspace-edge-trigger edge-trigger-top",onPointerEnter:()=>ue("top"),onPointerLeave:()=>ue(null)}),f("div",{"data-edge-trigger":"bottom",className:"workspace-edge-trigger edge-trigger-bottom",onPointerEnter:()=>ue("bottom"),onPointerLeave:()=>ue(null)})]}),i.draggedPanelId!==null&&Ee!==null&&f("div",{className:`workspace-edge-preview edge-preview-${Ee}`}),f("div",{style:{width:"100%",height:"100%",overflow:"hidden",position:"relative"},children:i.gridRoot?f(Cn,{node:i.gridRoot,path:[],onTabRightClick:ot,activeDropZone:oe,onHoverDropZone:ht,onTabDragStart:vt,hoveredTab:ft,onTabHover:mt,defaultPanelIcon:n,onRequestClosePanel:F}):f("div",{className:"empty-workspace-grid",children:"Grid Empty"})}),i.floating.map(e=>{let l=i.panels[e.id];if(!l)return null;let s=e.maximized,c=i.draggedPanelId===e.id,u=i.activePanelId===e.id,y=b.get(l.component)?.defaultOptions;return U("div",{"data-window-id":e.id,dir:i.dir,onPointerDownCapture:()=>{p(e.id),N(e.id)},className:`floating-window ${s?"maximized":""} ${u?"v2-window-focused":""} ${J??""}`,style:{position:"absolute",left:s?0:typeof e.x=="number"?`${e.x}px`:e.x,top:s?0:typeof e.y=="number"?`${e.y}px`:e.y,width:s?"100%":typeof e.width=="number"?`${e.width}px`:e.width,height:s?"100%":typeof e.height=="number"?`${e.height}px`:e.height,zIndex:e.z,pointerEvents:c?"none":"auto"},children:[U("div",{onDoubleClick:()=>R(e.id),onPointerDown:m=>{y?.canDrag!==!1&&Nt(e.id,m)},className:"floating-window-titlebar cursor-move",style:{cursor:s||y?.canDrag===!1?"default":"move"},children:[U("span",{className:"floating-window-title",children:[f("span",{className:"window-title-icon",children:y?.icon||n||Gt}),U("span",{children:[j(l.title,A),l.dirty?" *":""]})]}),U("div",{className:"fw-titlebar-actions",style:{gap:"var(--header-button-gap, 4px)"},onPointerDown:m=>m.stopPropagation(),children:[y?.renderHeaderActions&&f("div",{className:"window-header-actions",children:y.renderHeaderActions(e.id)}),I(e.id).length>0&&f("button",{type:"button",className:"custom-tab-btn btn-more-actions",title:"More actions",onClick:m=>{m.stopPropagation();let E=I(e.id);E.length!==0&&te.current?.show({event:m,contextMenu:{items:E}})},children:U("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"currentColor",style:{display:"block"},children:[f("circle",{cx:"12",cy:"5",r:"2"}),f("circle",{cx:"12",cy:"12",r:"2"}),f("circle",{cx:"12",cy:"19",r:"2"})]})}),y?.canDrag!==!1&&f("button",{type:"button",title:j(W.windowAnchoringOptions,A),onClick:m=>{let E=!!e.stickyRight,L=!!e.stickyBottom;te.current?.show({event:m,contextMenu:{items:[{label:j(W.anchorToRightEdge,A),checkbox:{active:!0,enabled:!0,value:E},action:()=>{let C=xe.width,H=typeof e.width=="string"?parseFloat(e.width):e.width;E?M(e.id,{stickyRight:!1}):M(e.id,{x:C-H-10,stickyRight:!0})}},{label:j(W.anchorToBottomEdge,A),checkbox:{active:!0,enabled:!0,value:L},action:()=>{let C=xe.height,H=typeof e.height=="string"?parseFloat(e.height):e.height;L?M(e.id,{stickyBottom:!1}):M(e.id,{y:C-H-10,stickyBottom:!0})}}]}})},className:"custom-tab-btn btn-anchor-tab",children:U("svg",{className:`anchor-icon ${e.stickyRight&&e.stickyBottom?"anchor-sticky-both":e.stickyRight?"anchor-sticky-right":e.stickyBottom?"anchor-sticky-bottom":""}`,width:"11",height:"11",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:[f("circle",{cx:"12",cy:"5",r:"2"}),f("path",{d:"M12 7v7m0 0a4 4 0 0 1-4-4M12 14a4 4 0 0 0 4-4M5 18h14"})]})}),f("button",{type:"button",title:s?j(W.restoreSize,A):j(W.maximize,A),onClick:()=>R(e.id),className:"custom-tab-btn btn-maximize-tab",children:f("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:f("rect",{x:"4",y:"4",width:"16",height:"16",rx:"1.5"})})}),y?.canMinimize!==!1&&f("button",{type:"button",title:j(W.minimize,A),onClick:()=>k(e.id),className:"custom-tab-btn btn-minimize-tab",children:f("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:f("path",{d:"M5 12h14"})})}),y?.canClose!==!1&&f("button",{type:"button",title:j(W.close,A),onClick:()=>F(e.id),className:"custom-tab-btn btn-close-tab",children:f("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:f("path",{d:"M18 6L6 18M6 6l12 12"})})})]})]}),f("div",{className:x??void 0,style:{flexGrow:1,width:"100%",overflow:"hidden",position:"relative",isolation:"isolate"},children:f(xn,{panelId:e.id},e.id)}),!s&&U(vn,{children:[f("div",{onPointerDown:m=>Ce(e.id,"n",m),className:"resize-handle resize-n"}),f("div",{onPointerDown:m=>Ce(e.id,"ne",m),className:"resize-handle resize-ne"}),f("div",{onPointerDown:m=>Ce(e.id,"e",m),className:"resize-handle resize-e"}),f("div",{onPointerDown:m=>Ce(e.id,"se",m),className:"resize-handle resize-se"}),f("div",{onPointerDown:m=>Ce(e.id,"s",m),className:"resize-handle resize-s"}),f("div",{onPointerDown:m=>Ce(e.id,"sw",m),className:"resize-handle resize-sw"}),f("div",{onPointerDown:m=>Ce(e.id,"w",m),className:"resize-handle resize-w"}),f("div",{onPointerDown:m=>Ce(e.id,"nw",m),className:"resize-handle resize-nw"})]})]},e.id)})]}),(r==="always"||i.minimized.length>0)&&U("div",{className:["taskbar-footer-container",`taskbar-mode-${r}`,r==="autohide"&&ne?"taskbar-expanded":""].filter(Boolean).join(" "),style:{height:"48px",zIndex:100},onPointerEnter:r==="autohide"?o:void 0,onPointerLeave:r==="autohide"?g:void 0,children:[r==="autohide"&&f("div",{className:"taskbar-peek-handle"}),f("button",{type:"button",onClick:()=>bt("left"),className:"taskbar-nav-btn",style:{display:i.minimized.length>4?"block":"none"},children:"\u25C0"}),f("div",{ref:Z,className:"taskbar-items-container",style:{scrollSnapType:"x mandatory"},children:i.minimized.map(e=>{let s=b.get(e.component)?.defaultOptions?.icon||n||Gt;return f("div",{onClick:()=>{ce.current!=="touch"&&(ee(null),P(e.id))},onContextMenu:c=>We(e.id,c),onPointerDown:c=>{if(ce.current=c.pointerType,c.pointerType!=="touch")return;let u=c.currentTarget,h=c.clientX,y=c.clientY,m=c.pointerId,E=!1,L=()=>{E=!0,clearTimeout(q),u.removeEventListener("pointermove",H),u.removeEventListener("pointerup",C),u.removeEventListener("pointercancel",L)},C=()=>{L();let G=u.getBoundingClientRect();Y?.id===e.id?(P(e.id),ee(null)):ee({id:e.id,rect:G,title:e.title,component:e.component,fromTouch:!0})},H=G=>{Math.hypot(G.clientX-h,G.clientY-y)>He&&L()},q=setTimeout(()=>{if(E)return;u.removeEventListener("pointermove",H),u.removeEventListener("pointerup",C),u.removeEventListener("pointercancel",L);try{u.setPointerCapture(m)}catch{return}navigator.vibrate&&navigator.vibrate(10);let G=ae=>{u.removeEventListener("pointerup",G),u.removeEventListener("pointercancel",G),We(e.id,ae)};u.addEventListener("pointerup",G),u.addEventListener("pointercancel",G)},Be);u.addEventListener("pointermove",H),u.addEventListener("pointerup",C),u.addEventListener("pointercancel",L)},onPointerEnter:c=>{if(c.pointerType==="touch"||K)return;re.current&&clearTimeout(re.current);let u=c.currentTarget.getBoundingClientRect();c.clientX>=u.left&&c.clientX<=u.right&&c.clientY>=u.top&&c.clientY<=u.bottom&&ee({id:e.id,rect:u,title:e.title,component:e.component})},onPointerLeave:c=>{c.pointerType!=="touch"&&(re.current=setTimeout(()=>{ee(null)},150))},className:"taskbar-glassmorphic-item",style:{backdropFilter:"blur(6px)",transition:"all 0.2s",cursor:"pointer",scrollSnapAlign:"start",width:"38px",height:"38px",position:"relative",padding:0},children:f("span",{className:"taskbar-item-icon",children:s})},e.id)})}),Y&&hn(U("div",{className:"taskbar-item-tooltip",dir:i.dir,style:{position:"fixed",left:`${Y.rect.left+Y.rect.width/2}px`,top:`${Y.rect.top-8}px`,transform:"translateX(-50%) translateY(-100%)",opacity:1,pointerEvents:"auto",zIndex:999999},onPointerEnter:()=>{re.current&&clearTimeout(re.current)},onPointerLeave:e=>{e.pointerType!=="touch"&&ee(null)},onClick:()=>{P(Y.id),ee(null)},onContextMenu:e=>We(Y.id,e),onPointerDown:e=>{if(e.pointerType!=="touch")return;let l=Y.id,s=e.currentTarget,c=e.clientX,u=e.clientY,h=e.pointerId,y=!1,m=()=>{y=!0,clearTimeout(L),s.removeEventListener("pointermove",E),s.removeEventListener("pointerup",m),s.removeEventListener("pointercancel",m)},E=C=>{Math.hypot(C.clientX-c,C.clientY-u)>He&&m()},L=setTimeout(()=>{if(y)return;s.removeEventListener("pointermove",E),s.removeEventListener("pointerup",m),s.removeEventListener("pointercancel",m);try{s.setPointerCapture(h)}catch{return}navigator.vibrate&&navigator.vibrate(10);let C=H=>{s.removeEventListener("pointerup",C),s.removeEventListener("pointercancel",C),We(l,H)};s.addEventListener("pointerup",C),s.addEventListener("pointercancel",C)},Be);s.addEventListener("pointermove",E),s.addEventListener("pointerup",m),s.addEventListener("pointercancel",m)},children:[U("div",{className:"tooltip-header-row",children:[U("span",{className:"tooltip-title-text text-truncate",style:{maxWidth:"140px"},children:[j(Y.title,A),i.panels[Y.id]?.dirty?" *":""]}),f("span",{onClick:e=>{e.stopPropagation(),F(Y.id),ee(null)},title:j(W.closePanel,A),className:"tooltip-close-x",children:f("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:f("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),f(no,{panelId:Y.id})]}),document.body),f("button",{type:"button",onClick:()=>bt("right"),className:"taskbar-nav-btn",style:{display:i.minimized.length>4?"block":"none"},children:"\u25B6"})]}),Object.keys(i.panels).map(e=>{let l=i.panels[e];if(!l)return null;let s=yn(e);return hn(f(oo,{panelId:e,children:f("div",{style:{width:"100%",height:"100%"},children:to(e,l.component,b)})}),s,e)}),f(eo,{ref:te,id:"workspace-context-menu",theme:"dark",onShow:()=>V(!0),onHide:()=>V(!1)}),i.draggedPanelId!==null&&!i.floating.some(e=>e.id===i.draggedPanelId)&&U("div",{className:"drag-ghost-tab",style:{left:ge.x+12,top:ge.y+12,zIndex:1e5},children:["\u{1F4C4} ",j(i.panels[i.draggedPanelId]?.title,A)||"Tab"]})]})},so=ro;var Yt=class{registry;initialState;config;_actions=null;_initialized=!1;_pendingCalls=[];_pendingOpenPanelIds=new Set;_pendingSubscriptions=[];_disconnectedWarnTimer=null;constructor(n={}){if(this.registry=new Je,this.initialState=n.initialState??null,this.config={formatMessage:n.formatMessage,predefinedMessages:n.predefinedMessages,dir:n.dir},n.panels)for(let[r,i]of Object.entries(n.panels))this.registry.register(r,i.component,i.defaultOptions)}_connect(n){this._actions=n,this._disconnectedWarnTimer!==null&&(clearTimeout(this._disconnectedWarnTimer),this._disconnectedWarnTimer=null),this._initialized||(this._initialized=!0);for(let i of this._pendingSubscriptions)i.unsub=n.subscribe(i.event,i.callback);let r=this._pendingCalls.splice(0);for(let i of r)i(n)}_disconnect(){this._actions=null;for(let n of this._pendingSubscriptions)n.unsub?.(),n.unsub=null}get isConnected(){return this._actions!==null}_startWarnTimer(){this._disconnectedWarnTimer===null&&(this._disconnectedWarnTimer=setTimeout(()=>{!this.isConnected&&this._pendingCalls.length>0&&console.error("[react-dockable-desktop] WorkspaceClient has "+this._pendingCalls.length+" queued call(s) but was never connected to a WindowManagerProvider. Did you forget client={workspace} on <WindowManagerProvider>?")},process.env.NODE_ENV==="production"?5e3:1e3))}_dispatch(n){this._actions?n(this._actions):(this._pendingCalls.push(n),this._startWarnTimer())}_subscribeRaw(n,r){if(this._actions)return this._actions.subscribe(n,r);let i={event:n,callback:r,unsub:null};return this._pendingSubscriptions.push(i),()=>{i.unsub?.(),i.unsub=null;let b=this._pendingSubscriptions.indexOf(i);b!==-1&&this._pendingSubscriptions.splice(b,1)}}openPanel(...n){if(this._actions){this._actions.openPanel(...n);return}let r=n[0];this._pendingOpenPanelIds.has(r)||(this._pendingOpenPanelIds.add(r),this._pendingCalls.push(i=>{this._pendingOpenPanelIds.delete(r),i.openPanel(...n)}),this._startWarnTimer())}closePanel(n){this._dispatch(r=>r.closePanel(n))}minimizePanel(n){this._dispatch(r=>r.minimizePanel(n))}restorePanel(n){this._dispatch(r=>r.restorePanel(n))}floatPanel(...n){this._dispatch(r=>r.floatPanel(...n))}dockPanel(...n){this._dispatch(r=>r.dockPanel(...n))}maximizePanel(n){this._dispatch(r=>r.maximizePanel(n))}focusPanel(n){this._dispatch(r=>r.focusPanel(n))}isOpen(n){return this._actions?.isOpen(n)??!1}getOpenPanelIds(){return this._actions?.getOpenPanelIds()??[]}saveLayout(){return this._actions?.saveLayout()??""}loadLayout(n){return this._actions?this._actions.loadLayout(n):(this._pendingCalls.push(r=>{r.loadLayout(n)}),!1)}setDirection(n){this._dispatch(r=>r.setDirection(n))}publish(n,r){this._dispatch(i=>i.publish(n,r))}subscribe(n,r){return this._subscribeRaw(n,r)}onPanelOpen(n){return this._subscribeRaw("panel:opened",r=>{let i=r;n(i.id,i.component)})}onPanelClose(n){return this._subscribeRaw("panel:closed",r=>{n(r.id)})}onPanelMinimize(n){return this._subscribeRaw("panel:minimized",r=>{n(r.id)})}onPanelRestore(n){return this._subscribeRaw("panel:restored",r=>{n(r.id)})}};import"react";import{createContext as ao,useContext as lo,useMemo as co,useState as wn}from"react";import{jsx as uo}from"react/jsx-runtime";var Rn=ao(null),St=({children:t})=>{let[n,r]=wn({}),[i,b]=wn({}),P=co(()=>({getActiveInGroup:k=>n[k]??null,setActiveInGroup:(k,T)=>r(R=>({...R,[k]:T})),isModifierActive:k=>i[k]??!1,setModifierActive:(k,T)=>b(R=>({...R,[k]:T})),toggleModifier:k=>b(T=>({...T,[k]:!T[k]}))}),[n,i]);return uo(Rn.Provider,{value:P,children:t})};function Et(){let t=lo(Rn);return t||(console.warn("useToolbar() called outside <DockableDesktopProvider>. Returning no-op."),{getActiveInGroup:()=>null,setActiveInGroup:()=>{},isModifierActive:()=>!1,setModifierActive:()=>{},toggleModifier:()=>{}})}import{jsx as Xt}from"react/jsx-runtime";var po=t=>Xt(St,{children:Xt(Ot,{...t,children:Xt(Bt,{children:t.children})})});import{useCallback as gt,useRef as Mn,useEffect as go,useState as fo,useMemo as mo}from"react";import{Fragment as yo,jsx as Pe,jsxs as Vt}from"react/jsx-runtime";var ho=({modal:t,index:n,isTopmost:r})=>{let{close:i,openModal:b,updateInstance:P,setDirty:k}=Xe(),T=be(),R=Me(),{dir:M}=Re(),{modalClass:N,modalBodyClass:v}=Fe(),S=Mn(null),{id:z,Component:D,props:O,options:p,dirty:w,dirtyOptions:I}=t,_=p,[A,W]=fo(_.icon||null),F=Mn(_);F.current=_;let J=j(_.title,T),x=gt(async K=>{if(K?.force){i(z);return}if(S.current){if(!await S.current())return;i(z);return}if(w){b(qe,{title:I?.title||R.unsavedChangesTitle,message:I?.message||{id:R.unsavedChangesMessage.id,defaultMessage:R.unsavedChangesMessage.defaultMessage,values:{title:J}},alert:I?.alert,alertType:I?.alertType||"danger",useYesNoTitles:!0,onOK:()=>i(z)},{size:"small"});return}i(z)},[i,b,z,w,I,J,R]),Z=gt((K,V)=>k(z,K,V),[k,z]),te=gt(K=>P(z,{options:{...F.current,title:K}}),[P,z]),ne=gt(K=>W(K),[]),se=gt(K=>(S.current=K,()=>{S.current=null}),[]),$=mo(()=>({requestClose:x,setDirty:Z,setTitle:te,setIcon:ne,onCloseRequested:se,containerType:"modal",instanceId:z}),[x,Z,te,ne,se,z]),Q=w?`${J} *`:J,Y=_.size?`v2-modal-size-${_.size}`:"v2-modal-size-auto",ee=_.closable!==!1;go(()=>{if(!r||!ee)return;let K=V=>{V.key==="Escape"&&(V.stopPropagation(),x())};return document.addEventListener("keydown",K),()=>document.removeEventListener("keydown",K)},[x,ee,r]);let ce=1e4+n*10;return Vt("div",{className:"v2-modal-overlay",style:{zIndex:ce},dir:M,children:[Pe("div",{className:"v2-modal-curtain",onClick:ee?()=>x():void 0}),Vt("div",{className:`v2-modal-window ${Y} ${N??""}`,children:[Vt("div",{className:"v2-modal-header",children:[A&&Pe("div",{className:"v2-modal-icon",children:A}),Pe("h4",{className:"v2-modal-title",children:Q}),ee&&Pe("button",{className:"v2-modal-close-button",onClick:()=>x(),title:T(R.closeTooltip),type:"button",children:Pe("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:Pe("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),Pe("div",{className:`v2-modal-body ${v??""}`,children:Pe(Ge,{value:$,children:Pe(D,{...O,panelId:z})})})]})]})},vo=()=>{let{modals:t}=Ae();return t.length===0?null:Pe(yo,{children:t.map((n,r)=>Pe(ho,{modal:n,index:r,isTopmost:r===t.length-1},n.id))})},bo=vo;import{useCallback as et,useRef as kn,useEffect as Tn,useState as Po,useMemo as xo}from"react";import{Fragment as ko,jsx as me,jsxs as qt}from"react/jsx-runtime";var Lt=({panel:t,position:n,defaultWidth:r})=>{let{close:i,openModal:b,updateInstance:P,setDirty:k,registerCloseHandler:T,unregisterCloseHandler:R}=Xe(),{modals:M}=Ae(),N=be(),v=Me(),{dir:S}=Re(),{sidePanelClass:z,sidePanelBodyClass:D}=Fe(),O=kn(null),{id:p,Component:w,props:I,options:_,dirty:A,dirtyOptions:W}=t,F=_,[J,x]=Po(F.icon||null),Z=kn(F);Z.current=F;let te=j(F.title,N),ne=et(async oe=>{if(oe?.force){i(p);return}if(O.current){if(!await O.current())return;i(p);return}if(A){b(qe,{title:W?.title||v.unsavedChangesTitle,message:W?.message||{id:v.unsavedChangesMessage.id,defaultMessage:v.unsavedChangesMessage.defaultMessage,values:{title:te}},alert:W?.alert,alertType:W?.alertType||"danger",useYesNoTitles:!0,onOK:()=>i(p)},{size:"small"});return}i(p)},[i,b,p,A,W,te,v]),se=et(async()=>O.current?await O.current():!A,[A]);Tn(()=>(T(p,se),()=>R(p)),[p,se,T,R]);let $=et((oe,B)=>k(p,oe,B),[k,p]),Q=et(oe=>P(p,{options:{...Z.current,title:oe}}),[P,p]),Y=et(oe=>x(oe),[]),ee=et(oe=>(O.current=oe,()=>{O.current=null}),[]),re=xo(()=>({requestClose:ne,setDirty:$,setTitle:Q,setIcon:Y,onCloseRequested:ee,containerType:n==="left"?"left-panel":"right-panel",instanceId:p}),[ne,$,Q,Y,ee,n,p]),ce=A?`${te} *`:te;Tn(()=>{let oe=B=>{B.key==="Escape"&&M.length===0&&ne()};return document.addEventListener("keydown",oe),()=>document.removeEventListener("keydown",oe)},[ne,M.length]);let K=F.width||r||400,V=typeof K=="number"?`${K}px`:K;return me("div",{className:`v2-side-panel v2-side-panel-${n} v2-side-panel-visible ${z??""}`,style:{width:V},dir:S,children:qt("div",{className:"v2-side-panel-window",children:[qt("div",{className:"v2-side-panel-header",children:[J&&me("div",{className:"v2-side-panel-icon",children:J}),me("h4",{className:"v2-side-panel-title",children:ce}),me("button",{className:"v2-side-panel-close-button",onClick:()=>ne(),title:N(v.closeTooltip),type:"button",children:me("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:me("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),me("div",{className:`v2-side-panel-body ${D??""}`,children:me(Ge,{value:re,children:me(w,{...I,panelId:p})})})]})})},Co=({defaultWidth:t})=>{let{leftPanel:n,rightPanel:r}=Ae();return qt(ko,{children:[n&&me(Lt,{panel:n,position:"left",defaultWidth:t},n.id),r&&me(Lt,{panel:r,position:"right",defaultWidth:t},r.id)]})},wo=({defaultWidth:t})=>{let{leftPanel:n}=Ae();return n?me(Lt,{panel:n,position:"left",defaultWidth:t},n.id):null},Ro=({defaultWidth:t})=>{let{rightPanel:n}=Ae();return n?me(Lt,{panel:n,position:"right",defaultWidth:t},n.id):null},Mo=Co;import{useState as Kt,useEffect as In,useRef as jt,useCallback as zt,useImperativeHandle as To,useContext as Ln,useMemo as Ut,createContext as zn,forwardRef as Io,memo as So}from"react";import{jsx as de,jsxs as En}from"react/jsx-runtime";var Nn=zn(null),Wn=zn(null);function Eo({tabId:t,onClose:n,onOpen:r,setActiveTabId:i,children:b}){let P=Ut(()=>({tabId:t,onClose:n,onOpen:r,openTab:k=>i(k)}),[t,n,r,i]);return de(Wn.Provider,{value:P,children:b})}var Sn=So(function({tabs:n,activeTabId:r,isVisible:i,position:b,onTabClick:P}){return de("div",{style:{width:i?"56px":"0px",height:"100%",overflow:"hidden",transition:"width 0.25s cubic-bezier(0.4, 0, 0.2, 1)",flexShrink:0},children:de("div",{className:`sidebar-tabs-strip ${b}`,style:{width:"56px",height:"100%"},children:n.map(k=>{let T=r===k.id;return de("button",{type:"button",onClick:()=>P(k.id),className:`sidebar-tab-btn${T?" active":""}`,title:k.label,"aria-pressed":T,children:k.icon},k.id)})})})});function Lo({position:t,currentWidth:n,minWidth:r,maxWidth:i,onWidthChange:b,rootRef:P}){return de("div",{className:"resizer-bar",style:{cursor:"col-resize",width:"1px",height:"100%",flexShrink:0,zIndex:20},onPointerDown:T=>{T.preventDefault();let R=T.currentTarget;R.setPointerCapture(T.pointerId);let M=T.clientX,N=n;R.classList.add("active"),document.body.classList.add("resizing-active","resizing-col-active"),P.current?.classList.add("sidebar-resizing");let v=z=>{let D=z.clientX-M,O=t==="right"?N-D:N+D;b(Math.max(r,Math.min(i,O)))},S=()=>{R.classList.remove("active"),document.body.classList.remove("resizing-active","resizing-col-active"),P.current?.classList.remove("sidebar-resizing"),R.removeEventListener("pointermove",v),R.removeEventListener("pointerup",S),R.removeEventListener("pointercancel",S)};R.addEventListener("pointermove",v),R.addEventListener("pointerup",S),R.addEventListener("pointercancel",S)}})}var zo=Io(function({position:n="right",tabs:r,defaultWidth:i,minWidth:b=150,maxWidth:P=600,onWidthChange:k,drawerWidth:T,activeTabId:R,onActiveTabChange:M,visible:N,onVisibilityChange:v,stripVisible:S,onStripVisibilityChange:z,children:D},O){let p=R!==void 0,[w,I]=Kt(()=>i!==void 0?i:T!==void 0&&parseInt(T,10)||220),_=zt(B=>{I(B),k?.(B)},[k]),[A,W]=Kt(null),F=p?R:A,[J,x]=Kt(()=>new Set),Z=Ut(()=>{let B=new Set(J);F&&B.add(F);for(let ie of r)ie.eagerMount&&B.add(ie.id);return B},[J,F,r]),te=jt(F??null);In(()=>{te.current=F??null},[F]);let ne=jt(w);In(()=>{ne.current=w},[w]);let se=jt(null),$=zt(B=>{x(B!==null?ie=>{if(ie.has(B))return ie;let ge=new Set(ie);return ge.add(B),ge}:ie=>{let ge=!1,ve=new Set(ie);for(let Ee of ie){let Le=r.find(ze=>ze.id===Ee);Le&&!Le.eagerMount&&!Le.preserveState&&(ve.delete(Ee),ge=!0)}return ge?ve:ie}),p||W(B),M?.(B)},[p,M,r]);To(O,()=>({openTab:B=>$(B),closeDrawer:()=>$(null),getActiveTab:()=>te.current,show:()=>v?.(!0),hide:()=>v?.(!1),toggle:()=>v?.(N===!1),showStrip:()=>z?.(!0),hideStrip:()=>z?.(!1),setWidth:B=>_(Math.max(b,Math.min(P,B))),getWidth:()=>ne.current}),[$,N,v,z,_,b,P]);let Q=zt(B=>{$(F===B?null:B)},[F,$]),Y=zt(()=>$(null),[$]),ee=Ut(()=>({openTab:B=>$(B),closeDrawer:()=>$(null),getActiveTab:()=>te.current}),[$]),re=N!==!1,ce=re&&S!==!1,K=re&&F!=null,V=de("div",{className:`sidebar-content-drawer ${n}`,style:{flexBasis:K?`${w}px`:"0px",flexShrink:1,flexGrow:0,minWidth:K?`${b}px`:"0px",maxWidth:K?`${P}px`:"0px",overflow:"hidden",transition:"flex-basis 0.2s cubic-bezier(0.4, 0, 0.2, 1), min-width 0.2s cubic-bezier(0.4, 0, 0.2, 1), max-width 0.2s cubic-bezier(0.4, 0, 0.2, 1)"},children:r.map(B=>{if(!Z.has(B.id))return null;let ge=F===B.id,ve=()=>$(B.id);return En("div",{style:{display:ge?"flex":"none",flexDirection:"column",height:"100%",width:"100%"},children:[de("div",{className:"sidebar-drawer-header",children:de("span",{className:"sidebar-header-title",children:B.label})}),de("div",{className:"sidebar-drawer-body",children:de(Eo,{tabId:B.id,onClose:Y,onOpen:ve,setActiveTabId:$,children:B.renderContent(B.id,Y,ve)})})]},B.id)})}),oe=K?de(Lo,{position:n,currentWidth:w,minWidth:b,maxWidth:P,onWidthChange:_,rootRef:se}):null;return de(Nn.Provider,{value:ee,children:En("div",{ref:se,style:{display:"flex",flexDirection:"row",width:"100%",height:"100%",overflow:"hidden"},children:[n==="left"&&de(Sn,{tabs:r,activeTabId:F,isVisible:ce,position:n,onTabClick:Q}),n==="left"&&V,n==="left"&&oe,de("div",{style:{flex:"1 1 auto",minWidth:0,overflow:"hidden"},children:D}),n==="right"&&oe,n==="right"&&V,n==="right"&&de(Sn,{tabs:r,activeTabId:F,isVisible:ce,position:n,onTabClick:Q})]})})});function No(){let t=Ln(Nn);return t||(console.warn("useSidebar() called outside a <Sidebar> tree. Returning no-op."),{openTab:()=>{},closeDrawer:()=>{},getActiveTab:()=>null})}function Wo(){let t=Ln(Wn);return t||(console.warn("useSidebarTab() called outside a <Sidebar> tab renderContent tree. Returning no-op."),{tabId:"",onOpen:()=>{},onClose:()=>{},openTab:()=>{}})}import{forwardRef as Do,useImperativeHandle as Oo,useState as Dn,useRef as On,useEffect as Fn}from"react";import{createPortal as Fo}from"react-dom";import{Fragment as Go,jsx as he,jsxs as An}from"react/jsx-runtime";function Ao(t,n,r=8){switch(n){case"left":return{left:t.right+r,top:t.top};case"right":return{right:window.innerWidth-t.left+r,top:t.top};case"top":return{top:t.bottom+r,left:t.left};case"bottom":return{bottom:window.innerHeight-t.top+r,left:t.left}}}function Bo({item:t,position:n,toolbar:r}){let[i,b]=Dn(!1),[P,k]=Dn(null),T=On(null),R=On(null),M=t.activeItemId!==void 0,N=M?t.activeItemId:r.getActiveInGroup(t.id),v=t.items.find(p=>!("type"in p)&&p.id===N),S=N!==null,z=v?.icon??t.defaultIcon,D=v?.label??t.label,O=()=>{t.disabled||(!i&&T.current&&k(T.current.getBoundingClientRect()),b(p=>!p))};return Fn(()=>{if(!i)return;let p=w=>{let I=w.target;T.current?.contains(I)||R.current?.contains(I)||b(!1)};return document.addEventListener("mousedown",p),()=>document.removeEventListener("mousedown",p)},[i]),Fn(()=>{if(!i)return;let p=w=>{w.key==="Escape"&&b(!1)};return document.addEventListener("keydown",p),()=>document.removeEventListener("keydown",p)},[i]),An(Go,{children:[he("button",{ref:T,type:"button",className:`toolbar-btn toolbar-btn-group${S?" active":""}`,title:D,"aria-label":D,"aria-expanded":i,"aria-haspopup":"menu",disabled:t.disabled,onClick:O,children:z}),i&&P&&Fo(he("div",{ref:R,className:`toolbar-group-flyout ${n}`,style:Ao(P,n),role:"menu",children:t.items.map((p,w)=>{if("type"in p)return he("div",{className:"toolbar-group-flyout-sep",role:"separator"},`sep-${w}`);let I=N===p.id;return An("button",{type:"button",className:`toolbar-group-flyout-item${I?" active":""}`,disabled:p.disabled,role:"menuitem","aria-pressed":I,onClick:()=>{M?t.onActiveItemChange?.(p.id):r.setActiveInGroup(t.id,p.id),p.onActivate?.(p.id),b(!1)},children:[he("span",{className:"toolbar-group-flyout-icon",children:p.icon}),he("span",{className:"toolbar-group-flyout-label",children:p.label}),p.shortcut&&he("span",{className:"toolbar-group-flyout-shortcut",children:p.shortcut})]},p.id)})}),document.body)]})}function Ho(t,n,r,i){switch(t.type){case"separator":return he("div",{className:"toolbar-separator",role:"separator"},`sep-${n}`);case"action":return he("button",{type:"button",className:"toolbar-btn toolbar-btn-action",title:t.label,"aria-label":t.label,disabled:t.disabled,onClick:t.onClick,children:t.icon},t.id);case"radio":{let b=r.getActiveInGroup(t.group)===t.id;return he("button",{type:"button",className:`toolbar-btn toolbar-btn-radio${b?" active":""}`,title:t.label,"aria-label":t.label,"aria-pressed":b,disabled:t.disabled,onClick:()=>{r.setActiveInGroup(t.group,t.id),t.onActivate?.(t.id)},children:t.icon},t.id)}case"toggle":{let b=r.isModifierActive(t.id);return he("button",{type:"button",className:`toolbar-btn toolbar-btn-toggle${b?" active":""}`,title:t.label,"aria-label":t.label,"aria-pressed":b,disabled:t.disabled,onClick:()=>{r.toggleModifier(t.id),t.onToggle?.(!b)},children:t.icon},t.id)}case"group":return he(Bo,{item:t,position:i,toolbar:r},t.id)}}var _o=Do(function({position:n="left",items:r,visible:i,onVisibilityChange:b,className:P,style:k},T){let R=Et(),M=n==="left"||n==="right";Oo(T,()=>({show:()=>b?.(!0),hide:()=>b?.(!1),toggle:()=>b?.(i===!1)}),[i,b]);let N=i!==!1?{}:M?{width:"0px"}:{height:"0px"};return he("div",{className:`toolbar-strip ${n}${P?` ${P}`:""}`,role:"toolbar","aria-orientation":M?"vertical":"horizontal",style:{...N,...k},children:r.map((v,S)=>Ho(v,S,R,n))})});export{qe as ConfirmationForm,po as DockableDesktopProvider,Wt as FormContainerContext,Ge as FormContainerProvider,wo as LeftPanelRenderer,bo as ModalStackRenderer,Bt as PanelProvider,wt as PanelRegistry,Je as PanelRegistryClass,Ro as RightPanelRenderer,Mo as SidePanelRenderer,zo as Sidebar,_o as Toolbar,St as ToolbarProvider,so as WindowManager,Ot as WindowManagerProvider,Yt as WorkspaceClient,lt as defaultPredefinedMessages,j as formatLabel,at as useFormContainer,be as useFormatMessage,Xe as usePanelActions,Vn as usePanelContext,qn as usePanelContextMenu,an as usePanelId,Ae as usePanelState,Me as usePredefinedMessages,ct as useRegistry,No as useSidebar,Wo as useSidebarTab,Fe as useStyleClasses,Et as useToolbar,ut as useWindowManagerActions,Re as useWindowManagerState};
4
25
  //# sourceMappingURL=index.js.map