react-dockable-desktop 2.0.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- var _t=Object.create;var Qe=Object.defineProperty;var Gt=Object.getOwnPropertyDescriptor;var Yt=Object.getOwnPropertyNames;var Xt=Object.getPrototypeOf,qt=Object.prototype.hasOwnProperty;var Kt=(i,t)=>{for(var a in t)Qe(i,a,{get:t[a],enumerable:!0})},Pt=(i,t,a,f)=>{if(t&&typeof t=="object"||typeof t=="function")for(let z of Yt(t))!qt.call(i,z)&&z!==a&&Qe(i,z,{get:()=>t[z],enumerable:!(f=Gt(t,z))||f.enumerable});return i};var jt=(i,t,a)=>(a=i!=null?_t(Xt(i)):{},Pt(t||!i||!i.__esModule?Qe(a,"default",{value:i,enumerable:!0}):a,i)),Ut=i=>Pt(Qe({},"__esModule",{value:!0}),i);var cn={};Kt(cn,{ConfirmationForm:()=>xe,FormContainerContext:()=>tt,FormContainerProvider:()=>Ce,LeftPanelRenderer:()=>At,ModalStackRenderer:()=>Dt,PanelProvider:()=>zt,PanelRegistry:()=>De,PanelRegistryClass:()=>ke,RightPanelRenderer:()=>Bt,SidePanelRenderer:()=>Ht,Sidebar:()=>$t,WindowManager:()=>Ft,WindowManagerProvider:()=>Mt,WorkspaceClient:()=>at,defaultPredefinedMessages:()=>Te,formatLabel:()=>X,useFormContainer:()=>nt,useFormatMessage:()=>le,usePanelActions:()=>we,usePanelContext:()=>Rt,usePanelState:()=>ve,usePredefinedMessages:()=>ce,useRegistry:()=>ze,useStyleClasses:()=>Pe,useWindowManagerActions:()=>Ee,useWindowManagerState:()=>fe});module.exports=Ut(cn);var F=jt(require("react"),1),mt=require("react-dom");var b=require("react");var ke=class{registry=new Map;register(t,a,f){this.registry.set(t,{Component:a,defaultOptions:f})}get(t){return this.registry.get(t)}getRegisteredIds(){return Array.from(this.registry.keys())}},De=new ke;var Te={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"}};var Ie=require("react/jsx-runtime"),vt=(0,b.createContext)(null),ut=(0,b.createContext)(null),bt=(0,b.createContext)(null),Ct=(0,b.createContext)(Te),wt=(0,b.createContext)({}),Pe=()=>(0,b.useContext)(wt),xt=(0,b.createContext)(De),ze=()=>(0,b.useContext)(xt),ct=class{listeners={};subscribe(t,a){return this.listeners[t]||(this.listeners[t]=[]),this.listeners[t].push(a),()=>{this.listeners[t]=this.listeners[t].filter(f=>f!==a)}}publish(t,a){this.listeners[t]&&this.listeners[t].forEach(f=>f(a))}},Jt={type:"leaf",id:"group-default",panels:[],activePanelId:null};function Vt(i){if(i)try{let t=JSON.parse(i);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:Jt,floating:[],minimized:[],panels:{},activePanelId:null}}var Mt=({children:i,client:t,formatMessage:a,predefinedMessages:f,dir:z,modalClass:I,modalBodyClass:H,sidePanelClass:B,sidePanelBodyClass:R,windowClass:k,windowBodyClass:D})=>{let p=(0,b.useRef)(t?.registry??De).current,E=t?.config.formatMessage??a,C=t?.config.predefinedMessages??f,S=t?.config.dir??z,[O,d]=(0,b.useState)(()=>({...Vt(t?.initialState??null),draggedPanelId:null,dir:S||"ltr",isRtl:S==="rtl"})),x=(0,b.useRef)(O);x.current=O;let y=(0,b.useRef)({}),m=(0,b.useMemo)(()=>({...Te,...C}),[C]),$=(0,b.useRef)(new ct),W=(0,b.useRef)(1e3),P=(0,b.useCallback)((e,n)=>$.current.subscribe(e,n),[]),N=(0,b.useCallback)((e,n)=>{$.current.publish(e,n)},[]),G=(0,b.useCallback)((e,n)=>{let o=typeof e.x=="string"?parseFloat(e.x):e.x,s=typeof e.y=="string"?parseFloat(e.y):e.y,u=typeof e.width=="string"?parseFloat(e.width):e.width,c=typeof e.height=="string"?parseFloat(e.height):e.height;isNaN(o)&&(o=300),isNaN(s)&&(s=150),isNaN(u)&&(u=450),isNaN(c)&&(c=350);let w=_=>n.some(U=>{let Y=typeof U.x=="string"?parseFloat(U.x):U.x,K=typeof U.y=="string"?parseFloat(U.y):U.y;return!U.maximized&&Math.abs(Y-_.x)<20&&Math.abs(K-_.y)<20}),h=0;for(;w({x:o,y:s})&&h<10;)o+=30,s+=30,h++;let M=Math.max(100,window.innerWidth||1024),T=Math.max(100,window.innerHeight||768);return(o+u>M||s+c>T)&&(o=100+h%5*30,s=100+h%5*30),o=Math.max(0,Math.min(o,M-100)),s=Math.max(0,Math.min(s,T-40)),{x:o,y:s,width:u,height:c}},[]),L=(0,b.useCallback)(e=>{W.current+=1;let n=W.current;d(o=>{let s=o.panels[e];if(!s)return o;if(s.state==="floating")return{...o,floating:o.floating.map(u=>u.id===e?{...u,z:n}:u),activePanelId:e};if(s.state==="docked"){let u=c=>c.type==="leaf"?c.panels.includes(e)?{...c,activePanelId:e}:c:{...c,children:c.children.map(u)};return{...o,gridRoot:u(o.gridRoot),activePanelId:e}}return{...o,activePanelId:e}})},[]),A=(e,n)=>{if(e.type==="leaf"){let o=e.panels.indexOf(n);if(o===-1)return e;let s=e.panels.filter(w=>w!==n),u=e.activePanelId===n?s[o]||s[o-1]||s[0]||null:e.activePanelId,c={...e,panels:s,activePanelId:u};return s.length===0&&!e.keepOnEmpty?null:c}else{let o=e.children.map(c=>A(c,n)).filter(c=>c!==null);if(o.length===0)return null;if(o.length===1)return o[0];let s=e.sizes.slice(0,o.length),u=s.reduce((c,w)=>c+w,0);return{...e,children:o,sizes:s.map(c=>c/u)}}},q=(e,n,o)=>{if(e.type==="leaf"){if(e.id===n){let s=e.panels.includes(o)?e.panels:[...e.panels,o];return{...e,panels:s,activePanelId:o}}return e}else return{...e,children:e.children.map(s=>q(s,n,o))}},ae=e=>{if(e.type==="leaf")return e.id;for(let n of e.children){let o=ae(n);if(o)return o}return null},ue=(0,b.useCallback)((e,n,o)=>{d(s=>{let u=s.panels[e],c=p.get(n),w=o?.title||o?.title||c?.defaultOptions?.title||e,h=o?.initialTarget||c?.defaultOptions?.initialTarget||"docked",M=c?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350};if(u)if(u.state==="minimized"){let Y=s.minimized.filter(K=>K.id!==e);if(h==="floating"||!s.gridRoot){W.current+=1;let K=G(M,s.floating);return{...s,minimized:Y,floating:[...s.floating,{...K,id:e,z:W.current}],panels:{...s.panels,[e]:{...u,state:"floating"}}}}else{let K=ae(s.gridRoot)||"group-default";return{...s,minimized:Y,gridRoot:q(s.gridRoot,K,e),panels:{...s.panels,[e]:{...u,state:"docked"}}}}}else{if(u.state==="floating")return L(e),s;{let Y=K=>K.type==="leaf"?K.panels.includes(e)?{...K,activePanelId:e}:K:{...K,children:K.children.map(Y)};return{...s,gridRoot:Y(s.gridRoot)}}}let _={id:e,title:w,component:n,state:h==="tabbed"?"docked":h},U={...s.panels,[e]:_};if(h==="floating"){W.current+=1;let Y=G(M,s.floating),K=o?.stickyRight??c?.defaultOptions?.defaultStickyRight??!1,Re=o?.stickyBottom??c?.defaultOptions?.defaultStickyBottom??!1,We=Math.max(100,window.innerWidth||1024),Oe=Math.max(100,window.innerHeight||768),lt=typeof Y.width=="string"?parseFloat(Y.width):Y.width,dt=typeof Y.height=="string"?parseFloat(Y.height):Y.height,Ve=Y.x,Ze=Y.y,Fe=10;return K&&(Ve=We-lt-Fe),Re&&(Ze=Oe-dt-Fe),{...s,floating:[...s.floating,{...Y,id:e,z:W.current,x:Ve,y:Ze,stickyRight:K,stickyBottom:Re}],panels:U}}else{let Y=ae(s.gridRoot)||"group-default";return{...s,gridRoot:q(s.gridRoot,Y,e),panels:U}}})},[G,L]),de=(0,b.useCallback)(e=>{d(n=>{let o=n.panels[e];if(!o||p.get(o.component)?.defaultOptions?.canClose===!1)return n;delete y.current[e];let u={...n.panels};delete u[e];let c=A(n.gridRoot,e);return{...n,gridRoot:c||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:n.floating.filter(w=>w.id!==e),minimized:n.minimized.filter(w=>w.id!==e),panels:u}})},[]),j=(0,b.useCallback)((e,n)=>{y.current[e]=n},[]),Q=(0,b.useCallback)(e=>{delete y.current[e]},[]),ye=(0,b.useCallback)((e,n,o)=>{d(s=>{let u=s.panels[e];return u?{...s,panels:{...s.panels,[e]:{...u,dirty:n,dirtyOptions:o}}}:s})},[]),me=(0,b.useCallback)((e,n)=>{d(o=>{let s=o.panels[e];return s?{...o,panels:{...o.panels,[e]:{...s,title:n}}}:o})},[]),V=(0,b.useCallback)(async(e,n)=>{if(n?.force){de(e);return}let o=y.current[e];if(o&&!await o())return;let s=x.current.panels[e];if(s?.dirty)if(n?.onConfirm){if(!await n.onConfirm(s.dirtyOptions))return}else return;de(e)},[de]),ge=(0,b.useCallback)(e=>{d(n=>{let o=n.panels[e];if(!o||o.state==="minimized"||p.get(o.component)?.defaultOptions?.canMinimize===!1)return n;let u,c;if(o.state==="floating"){let h=n.floating.find(M=>M.id===e);h&&(u={x:h.x,y:h.y,width:h.width,height:h.height,stickyRight:h.stickyRight,stickyBottom:h.stickyBottom})}else if(o.state==="docked"){let h=M=>{if(M.type==="leaf")return M.panels.includes(e)?M.id:null;for(let T of M.children){let _=h(T);if(_)return _}return null};c=h(n.gridRoot)}let w=A(n.gridRoot,e);return{...n,gridRoot:w||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:n.floating.filter(h=>h.id!==e),minimized:[...n.minimized,{id:e,title:o.title,component:o.component}],panels:{...n.panels,[e]:{...o,state:"minimized",previousState:o.state,lastFloatingRect:u,lastLeafId:c}}}})},[]),ee=(0,b.useCallback)(e=>{d(n=>{let o=n.panels[e];if(!o||o.state!=="minimized")return n;let s=n.minimized.filter(c=>c.id!==e);if((o.previousState||"docked")==="floating"){W.current+=1;let c=p.get(o.component),w=o.lastFloatingRect||c?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},h=G(w,n.floating);return{...n,minimized:s,floating:[...n.floating,{...h,id:e,z:W.current,stickyRight:!!o.lastFloatingRect?.stickyRight,stickyBottom:!!o.lastFloatingRect?.stickyBottom}],panels:{...n.panels,[e]:{...o,state:"floating"}}}}else{let c=(T,_)=>T.type==="leaf"?T.id===_:T.children.some(U=>c(U,_)),w=o.lastLeafId&&c(n.gridRoot,o.lastLeafId),h=p.get(o.component),M=h?.defaultOptions?.canDrag!==!1;if(w)return{...n,minimized:s,gridRoot:q(n.gridRoot,o.lastLeafId,e),panels:{...n.panels,[e]:{...o,state:"docked"}}};if(M){W.current+=1;let T=o.lastFloatingRect||h?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},_=G(T,n.floating);return{...n,minimized:s,floating:[...n.floating,{..._,id:e,z:W.current,stickyRight:!!o.lastFloatingRect?.stickyRight,stickyBottom:!!o.lastFloatingRect?.stickyBottom}],panels:{...n.panels,[e]:{...o,state:"floating"}}}}else{let T=ae(n.gridRoot)||"group-default";return{...n,minimized:s,gridRoot:q(n.gridRoot,T,e),panels:{...n.panels,[e]:{...o,state:"docked"}}}}}})},[G]),te=(0,b.useCallback)((e,n)=>{d(o=>{let s=o.panels[e];if(!s||p.get(s.component)?.defaultOptions?.canDrag===!1)return o;let c=p.get(s.component),w=n||c?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},h=A(o.gridRoot,e);W.current+=1;let M=G(w,o.floating);return{...o,gridRoot:h||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:[...o.floating,{...M,id:e,z:W.current}],panels:{...o.panels,[e]:{...s,state:"floating"}}}})},[G]),He=(0,b.useCallback)((e,n)=>{d(o=>{let s=o.panels[e];if(!s)return o;let u=o.floating.filter(h=>h.id!==e),c=A(o.gridRoot,e),w=n||ae(c||o.gridRoot)||"group-default";return{...o,gridRoot:q(c||o.gridRoot,w,e),floating:u,panels:{...o.panels,[e]:{...s,state:"docked"}}}})},[]),Me=(e,n,o,s)=>{if(e.type==="leaf"){if(e.id===n){let u={type:"leaf",id:`group-split-${Date.now()}-${Math.floor(Math.random()*1e3)}`,panels:[o],activePanelId:o};return{type:"branch",orientation:s==="left"||s==="right"?"horizontal":"vertical",sizes:[.5,.5],children:s==="left"||s==="top"?[u,e]:[e,u]}}return e}else return{...e,children:e.children.map(u=>Me(u,n,o,s))}},be=(0,b.useCallback)(e=>{d(n=>({...n,draggedPanelId:e}))},[]),$e=(0,b.useCallback)((e,n,o)=>{d(s=>{let u=s.panels[e];if(!u)return s;let c=s.floating.filter(M=>M.id!==e),w=A(s.gridRoot,e),h;return o==="center"?h=q(w||s.gridRoot,n,e):h=Me(w||s.gridRoot,n,e,o),{...s,gridRoot:h,floating:c,panels:{...s.panels,[e]:{...u,state:"docked"}},draggedPanelId:null}})},[]),_e=(0,b.useCallback)((e,n)=>{d(o=>{let s=o.panels[e];if(!s)return o;let u=o.floating.filter(_=>_.id!==e),c=A(o.gridRoot,e),w={type:"leaf",id:`group-edge-${Date.now()}-${Math.floor(Math.random()*1e3)}`,panels:[e],activePanelId:e},h=n==="left"||n==="right"?"horizontal":"vertical",M=n==="left"||n==="top"?[w,c||o.gridRoot]:[c||o.gridRoot,w];return{...o,gridRoot:{type:"branch",orientation:h,sizes:n==="left"||n==="top"?[.3,.7]:[.7,.3],children:M},floating:u,panels:{...o.panels,[e]:{...s,state:"docked"}},draggedPanelId:null}})},[]),Ge=(0,b.useCallback)((e,n,o)=>{d(s=>{let u=s.panels[e];if(!u)return s;let c=A(s.gridRoot,e),w=T=>{if(T.type==="leaf"){if(T.id===n){let _=T.panels.filter(K=>K!==e),U=Math.max(0,Math.min(o,_.length)),Y=[..._];return Y.splice(U,0,e),{...T,panels:Y,activePanelId:e}}return T}else return{...T,children:T.children.map(w)}},h=w(c||s.gridRoot),M=s.floating.filter(T=>T.id!==e);return{...s,gridRoot:h,floating:M,panels:{...s.panels,[e]:{...u,state:"docked"}},draggedPanelId:null}})},[]),Ye=(0,b.useCallback)(e=>{d(n=>{let o=u=>{if(u.type==="leaf")return u.id===e&&u.canClose!==!1?null:u;{let c=u.children.map(M=>o(M)).filter(M=>M!==null);if(c.length===0)return null;if(c.length===1)return c[0];let w=u.sizes.slice(0,c.length),h=w.reduce((M,T)=>M+T,0);return{...u,children:c,sizes:w.map(M=>M/h)}}},s=o(n.gridRoot);return{...n,gridRoot:s||{type:"leaf",id:"group-default",panels:[],activePanelId:null}}})},[]),Xe=(0,b.useCallback)(e=>{d(n=>({...n,floating:n.floating.map(o=>o.id===e?{...o,maximized:!o.maximized}:o)}))},[]),Se=(0,b.useCallback)((e,n)=>{let o=(s,u)=>{if(s.type==="leaf")return s;if(u===e.length)return{...s,sizes:n};let c=e[u],w=s.children.map((h,M)=>M===c?o(h,u+1):h);return{...s,children:w}};d(s=>({...s,gridRoot:o(s.gridRoot,0)}))},[]),he=(0,b.useCallback)((e,n)=>{d(o=>({...o,floating:o.floating.map(s=>s.id===e?{...s,...n}:s)}))},[]),qe=(0,b.useCallback)(()=>JSON.stringify({gridRoot:x.current.gridRoot,floating:x.current.floating,minimized:x.current.minimized,panels:x.current.panels}),[]),Ke=(0,b.useCallback)(e=>{try{let n=JSON.parse(e);if(n.gridRoot&&n.floating&&n.minimized&&n.panels){let o=Object.keys(n.panels)[0]||null;d(s=>({...s,gridRoot:n.gridRoot,floating:n.floating,minimized:n.minimized,panels:n.panels,draggedPanelId:null,activePanelId:o}))}}catch(n){console.error("Failed to parse layout configuration:",n)}},[]),je=(0,b.useCallback)(e=>{d(n=>n.activePanelId===e?n:{...n,activePanelId:e})},[]),Ne=(0,b.useCallback)(e=>{d(n=>n.dir===e?n:{...n,dir:e,isRtl:e==="rtl"})},[]),Ue=(0,b.useCallback)(e=>e in x.current.panels,[]),Je=(0,b.useCallback)(()=>Object.keys(x.current.panels),[]);(0,b.useEffect)(()=>{S&&d(e=>e.dir===S?e:{...e,dir:S,isRtl:S==="rtl"})},[S]);let r=(0,b.useMemo)(()=>({openPanel:ue,closePanel:de,minimizePanel:ge,restorePanel:ee,floatPanel:te,dockPanel:He,maximizePanel:Xe,updateSplitSizes:Se,updateFloatingPosition:he,focusPanel:L,isOpen:Ue,getOpenPanelIds:Je,saveLayout:qe,loadLayout:Ke,publish:N,subscribe:P,setDraggedPanelId:be,dockPanelToGroup:$e,movePanelOrder:Ge,closeLeafGroup:Ye,registerCloseGuard:j,unregisterCloseGuard:Q,setPanelDirty:ye,updatePanelTitle:me,requestClosePanel:V,dockPanelToWorkspaceEdge:_e,setActivePanel:je,setDirection:Ne}),[ue,de,ge,ee,te,He,Xe,Se,he,L,Ue,Je,qe,Ke,N,P,be,$e,Ge,Ye,j,Q,ye,me,V,_e,je,Ne]),v=e=>{let n=e.defaultMessage||e.id;return e.values&&Object.entries(e.values).forEach(([o,s])=>{n=n.replace(`{${o}}`,String(s))}),n},g=(0,b.useMemo)(()=>({modalClass:I,modalBodyClass:H,sidePanelClass:B,sidePanelBodyClass:R,windowClass:k,windowBodyClass:D}),[I,H,B,R,k,D]);return(0,b.useEffect)(()=>{if(process.env.NODE_ENV!=="development")return;let e=!1;try{for(let n of Array.from(document.styleSheets))try{if(Array.from(n.cssRules||[]).some(s=>s.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"`)},[]),(0,b.useEffect)(()=>{if(t)return t._connect(r),()=>{t._disconnect()}},[t,r]),(0,Ie.jsx)(wt.Provider,{value:g,children:(0,Ie.jsx)(xt.Provider,{value:p,children:(0,Ie.jsx)(vt.Provider,{value:O,children:(0,Ie.jsx)(ut.Provider,{value:r,children:(0,Ie.jsx)(bt.Provider,{value:E||v,children:(0,Ie.jsx)(Ct.Provider,{value:m,children:i})})})})})})},fe=()=>{let i=(0,b.useContext)(vt);if(!i)throw new Error("useWindowManagerState must be used within WindowManagerProvider");return i},Ee=()=>{let i=(0,b.useContext)(ut);if(!i)throw new Error("useWindowManagerActions must be used within WindowManagerProvider");return i},gt=()=>{let i=(0,b.useContext)(ut);if(!i)throw new Error("useWindowManagerActionsInternal must be used within WindowManagerProvider");return i},le=()=>(0,b.useContext)(bt)||(t=>{let a=t.defaultMessage||t.id;return t.values&&Object.entries(t.values).forEach(([f,z])=>{a=a.replace(`{${f}}`,String(z))}),a}),X=(i,t)=>i?typeof i=="string"?i:t(i):"",Rt=()=>{let{publish:i,subscribe:t}=Ee();return{publish:i,subscribe:t}},ce=()=>(0,b.useContext)(Ct);function kt(i){if(!i)return typeof document<"u"?document.documentElement.dir?.toLowerCase()==="rtl"||document.body.dir?.toLowerCase()==="rtl":!1;let t=i.closest("[dir]");return t?t.getAttribute("dir")?.toLowerCase()==="rtl":document.documentElement.dir?.toLowerCase()==="rtl"||document.body.dir?.toLowerCase()==="rtl"}var Et=require("replace-react-contexify"),Tn=require("replace-react-contexify/styles.css");var et=require("react"),Zt={requestClose:()=>{console.warn("FormContainerContract: requestClose called but no container is present")},setDirty:()=>{},onCloseRequested:()=>()=>{},setTitle:()=>{},setIcon:()=>{},containerType:"standalone",instanceId:"standalone",onClose:()=>()=>{},onMinimize:()=>()=>{},onRestore:()=>()=>{},onResize:()=>()=>{}},tt=(0,et.createContext)(Zt),Ce=tt.Provider,nt=()=>(0,et.useContext)(tt);var J=require("react"),ft=require("react/jsx-runtime"),Qt=0,pt=()=>`panel-${++Qt}-${Date.now()}`,ot=new Map,It={leftPanel:null,rightPanel:null,modals:[]},St=(0,J.createContext)(null),Tt=(0,J.createContext)(null),zt=({children:i})=>{let[t,a]=(0,J.useState)(It),f=(0,J.useRef)(t);f.current=t;let z=(0,J.useCallback)((d,x)=>{ot.set(d,x)},[]),I=(0,J.useCallback)(d=>{ot.delete(d)},[]),H=(0,J.useCallback)(async(d,x,y={})=>{let m=f.current.leftPanel;if(m){let P=ot.get(m.id);if(P&&!await P())return null}let $=pt(),W={id:$,Component:d,props:x,containerType:"left-panel",options:y};return a(P=>({...P,leftPanel:W})),$},[]),B=(0,J.useCallback)(async(d,x,y={})=>{let m=f.current.rightPanel;if(m){let P=ot.get(m.id);if(P&&!await P())return null}let $=pt(),W={id:$,Component:d,props:x,containerType:"right-panel",options:y};return a(P=>({...P,rightPanel:W})),$},[]),R=(0,J.useCallback)((d,x,y={})=>{let m=pt(),$=x.title,W={...y,title:y.title||$||"Confirmation"},P={id:m,Component:d,props:x,containerType:"modal",options:W};return a(N=>({...N,modals:[...N.modals,P]})),m},[]),k=(0,J.useCallback)(d=>{a(x=>({leftPanel:x.leftPanel?.id===d?null:x.leftPanel,rightPanel:x.rightPanel?.id===d?null:x.rightPanel,modals:x.modals.filter(y=>y.id!==d)}))},[]),D=(0,J.useCallback)(()=>{a(It)},[]),p=(0,J.useCallback)(()=>{a(d=>({...d,modals:[]}))},[]),E=(0,J.useCallback)(d=>t.leftPanel?.id===d?t.leftPanel:t.rightPanel?.id===d?t.rightPanel:t.modals.find(x=>x.id===d),[t]),C=(0,J.useCallback)((d,x)=>{a(y=>({leftPanel:y.leftPanel?.id===d?{...y.leftPanel,...x}:y.leftPanel,rightPanel:y.rightPanel?.id===d?{...y.rightPanel,...x}:y.rightPanel,modals:y.modals.map(m=>m.id===d?{...m,...x}:m)}))},[]),S=(0,J.useCallback)((d,x,y)=>{C(d,{dirty:x,dirtyOptions:y})},[C]),O=(0,J.useMemo)(()=>({openLeftPanel:H,openRightPanel:B,openModal:R,close:k,closeAll:D,closeAllModals:p,getInstance:E,updateInstance:C,setDirty:S,registerCloseHandler:z,unregisterCloseHandler:I}),[H,B,R,k,D,p,E,C,S,z,I]);return(0,ft.jsx)(St.Provider,{value:t,children:(0,ft.jsx)(Tt.Provider,{value:O,children:i})})},ve=()=>{let i=(0,J.useContext)(St);if(!i)throw new Error("usePanelState must be used within PanelProvider");return i},we=()=>{let i=(0,J.useContext)(Tt);if(!i)throw new Error("usePanelActions must be used within PanelProvider");return i};var Ae=require("react");var pe=require("react/jsx-runtime"),en=({title:i,message:t,alert:a,alertType:f="info",useYesNoTitles:z=!1,onOK:I,onCancel:H})=>{let{requestClose:B,setIcon:R,setTitle:k}=nt(),D=le(),p=ce(),E=(0,Ae.useRef)(null);(0,Ae.useEffect)(()=>{if(i){let y=typeof i=="string"?i:D(i);k(y)}R&&R((0,pe.jsx)("span",{children:"\u2753"}))},[i,k,R,D]),(0,Ae.useEffect)(()=>{E.current?.focus()},[]);let C=typeof t=="string"?t:D(t),S=D(z?p.no:p.cancel),O=D(z?p.yes:p.ok),d=y=>{y.preventDefault(),I?.(),B()},x=()=>{H?.(),B()};return(0,pe.jsxs)("form",{onSubmit:d,className:"confirmation-form-body",children:[a&&(0,pe.jsxs)("div",{className:`confirmation-alert confirmation-alert-${f}`,children:[(0,pe.jsx)("span",{children:"\u2139\uFE0F"}),(0,pe.jsx)("span",{children:a})]}),(0,pe.jsx)("div",{style:{fontSize:"0.9rem",color:"inherit",lineHeight:1.5},children:C}),(0,pe.jsx)("hr",{style:{marginTop:"0.5rem",marginBottom:"0.5rem",opacity:.1}}),(0,pe.jsxs)("div",{className:"confirmation-actions",children:[(0,pe.jsx)("button",{type:"button",className:"dw-btn dw-btn-sm dw-btn-outline",onClick:x,children:S}),(0,pe.jsx)("button",{type:"submit",className:"dw-btn dw-btn-sm dw-btn-primary",ref:E,children:O})]})]})},xe=en;var l=require("react/jsx-runtime"),Be=new Map,st="preserved-dom-container",ht=(0,l.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:[(0,l.jsx)("rect",{x:"3",y:"3",width:"7",height:"9",rx:"1"}),(0,l.jsx)("rect",{x:"14",y:"3",width:"7",height:"5",rx:"1"}),(0,l.jsx)("rect",{x:"14",y:"12",width:"7",height:"9",rx:"1"}),(0,l.jsx)("rect",{x:"3",y:"16",width:"7",height:"5",rx:"1"})]}),Lt=i=>{let t=Be.get(i);return t||(t=document.createElement("div"),t.style.width="100%",t.style.height="100%",Be.set(i,t)),t},tn=(i,t,a)=>{let f=a.get(t);if(!f)return console.warn(`[react-dockable-desktop] Panel "${i}" references component key "${t}" which is not registered. Add it to the WorkspaceClient panels config:
3
- new WorkspaceClient({ panels: { "${t}": { component: YourComponent } } })`),(0,l.jsxs)("div",{className:"dw-unregistered-panel",style:{border:"2px dashed #dc3545"},children:[(0,l.jsx)("h6",{style:{fontWeight:700,marginBottom:"0.25rem"},children:"\u26A0\uFE0F Component Unregistered"}),(0,l.jsxs)("span",{style:{fontSize:"0.875rem",color:"var(--text-secondary, #94a3b8)"},children:["Key: ",t]})]});let z=f.Component;return(0,l.jsx)(z,{panelId:i})},Nt=new Map,Le=new Map,it=i=>{let t=Le.get(i);return t||(t={onClose:new Set,onMinimize:new Set,onRestore:new Set,onResize:new Set},Le.set(i,t)),t},Wt=({panelId:i})=>{let t=(0,F.useRef)(null);return(0,F.useEffect)(()=>{let a=t.current;if(!a)return;let f=Lt(i);a.appendChild(f);let z=new ResizeObserver(I=>{for(let H of I){let{width:B,height:R}=H.contentRect;if(B>0&&R>0){Nt.set(i,{width:B,height:R});let k=Le.get(i);k&&k.onResize.forEach(D=>D(B,R))}}});return z.observe(a),()=>{z.disconnect();let I=document.getElementById(st);I||(I=document.createElement("div"),I.id=st,I.style.display="none",document.body.appendChild(I)),I.appendChild(f)}},[i]),(0,l.jsx)("div",{ref:t,style:{width:"100%",height:"100%"}})},nn=({panelId:i})=>{let t=fe(),a=ze(),f=le(),z=(0,F.useRef)(null),I=t.panels[i],H=I?a.get(I.component):null,B=H?.defaultOptions?.disableLivePreview||!1,R=Nt.get(i)||{width:800,height:500},k=R.width,D=R.height,C=Math.min(220/k,140/D);if((0,F.useEffect)(()=>{if(B)return;let S=z.current;if(!S)return;let O=Be.get(i);if(O)return S.appendChild(O),()=>{let d=document.getElementById(st);d||(d=document.createElement("div"),d.id=st,d.style.display="none",document.body.appendChild(d)),d.appendChild(O)}},[i,B]),B){let S=k*C,O=D*C,d=I?.title||H?.defaultOptions?.title||"Panel",x=X(d,f),y=(Array.from(x)[0]||"P").toUpperCase();return(0,l.jsx)("div",{className:"taskbar-item-preview-frame",style:{width:`${S}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:(0,l.jsx)("div",{style:{fontSize:"2rem",fontWeight:600,color:"var(--panel-title-color, var(--panel-text, rgba(255, 255, 255, 0.85)))",userSelect:"none"},children:y})})}return(0,l.jsx)("div",{className:"taskbar-item-preview-frame",style:{width:`${k*C}px`,height:`${D*C}px`},children:(0,l.jsx)("div",{ref:z,className:"taskbar-item-preview-host",style:{width:`${k}px`,height:`${D}px`,transform:`scale(${C})`,transformOrigin:"top left",position:"absolute",top:0,left:0,"--preview-scale":C}})})},on=({panelId:i,children:t})=>{let a=fe(),{requestClosePanel:f,setPanelDirty:z,registerCloseGuard:I,unregisterCloseGuard:H,updatePanelTitle:B}=Ee(),R=a.minimized.some(p=>p.id===i),k=(0,F.useRef)(R);(0,F.useEffect)(()=>{let p=Le.get(i);p&&(R&&!k.current?p.onMinimize.forEach(E=>E()):!R&&k.current&&p.onRestore.forEach(E=>E()),k.current=R)},[R,i]),(0,F.useEffect)(()=>()=>{let p=Le.get(i);p&&(p.onClose.forEach(E=>E()),Le.delete(i))},[i]);let D=F.default.useMemo(()=>({requestClose:p=>f(i,p),setDirty:p=>z(i,p),onCloseRequested:p=>(I(i,p),()=>H(i)),setTitle:p=>B(i,p),instanceId:i,onClose:p=>{let E=it(i);return E.onClose.add(p),()=>E.onClose.delete(p)},onMinimize:p=>{let E=it(i);return E.onMinimize.add(p),()=>E.onMinimize.delete(p)},onRestore:p=>{let E=it(i);return E.onRestore.add(p),()=>E.onRestore.delete(p)},onResize:p=>{let E=it(i);return E.onResize.add(p),()=>E.onResize.delete(p)}}),[i,f,z,I,H,B]);return(0,l.jsx)(Ce,{value:D,children:t})},Ot=({node:i,path:t,onTabRightClick:a,activeDropZone:f,onHoverDropZone:z,onTabDragStart:I,hoveredTab:H,onTabHover:B,defaultPanelIcon:R,onRequestClosePanel:k})=>{let{updateSplitSizes:D}=Ee();if(i.type==="leaf")return(0,l.jsx)(sn,{leaf:i,onTabRightClick:a,activeDropZone:f,onHoverDropZone:z,onTabDragStart:I,hoveredTab:H,onTabHover:B,defaultPanelIcon:R,onRequestClosePanel:k});let p=i.orientation==="horizontal",E=(C,S)=>{S.preventDefault();let O=p?S.clientX:S.clientY,d=[...i.sizes],x=S.currentTarget;x.classList.add("active"),document.body.classList.add("resizing-active",p?"resizing-row-active":"resizing-col-active");let y=S.currentTarget.parentElement,m=y?p?y.clientWidth:y.clientHeight:p?1e3:800,$=P=>{let L=((p?P.clientX:P.clientY)-O)/m,A=[...d];A[C]+=L,A[C+1]-=L,A[C]>.1&&A[C+1]>.1&&D(t,A)},W=()=>{x.classList.remove("active"),document.body.classList.remove("resizing-active","resizing-row-active","resizing-col-active"),window.removeEventListener("mousemove",$),window.removeEventListener("mouseup",W)};window.addEventListener("mousemove",$),window.addEventListener("mouseup",W)};return(0,l.jsx)("div",{style:{display:"flex",flexDirection:p?"row":"column",width:"100%",height:"100%",overflow:"hidden",position:"relative"},children:i.children.map((C,S)=>{let O=i.sizes[S]*100;return(0,l.jsxs)(F.default.Fragment,{children:[(0,l.jsx)("div",{style:{flexGrow:i.sizes[S],flexBasis:`${O}%`,overflow:"hidden",position:"relative"},children:(0,l.jsx)(Ot,{node:C,path:[...t,S],onTabRightClick:a,activeDropZone:f,onHoverDropZone:z,onTabDragStart:I,hoveredTab:H,onTabHover:B,defaultPanelIcon:R,onRequestClosePanel:k})}),S<i.children.length-1&&(0,l.jsx)("div",{onMouseDown:d=>E(S,d),style:{cursor:p?"col-resize":"row-resize",width:p?"1px":"100%",height:p?"100%":"1px",zIndex:20},className:"resizer-bar"})]},S)})})},sn=({leaf:i,onTabRightClick:t,activeDropZone:a,onHoverDropZone:f,onTabDragStart:z,hoveredTab:I,onTabHover:H,defaultPanelIcon:B,onRequestClosePanel:R})=>{let k=fe(),D=ze(),{openPanel:p,closeLeafGroup:E,setActivePanel:C}=gt(),S=le(),O=ce(),{windowClass:d,windowBodyClass:x}=Pe(),y=m=>{p(m,k.panels[m].component),C(m)};return(0,l.jsxs)("div",{"data-active-panel-id":i.activePanelId||"",className:`workspace-panel ${d??""}`,style:{overflow:"hidden",position:"relative"},children:[(0,l.jsxs)("div",{className:"workspace-tab-bar",style:{minHeight:"38px"},children:[(0,l.jsx)("div",{className:"tab-headers-container",style:{scrollbarWidth:"none"},onMouseMove:m=>{k.draggedPanelId&&m.target===m.currentTarget&&H(i.id,"EMPTY",i.panels.length,"right")},onMouseLeave:m=>{k.draggedPanelId&&m.target===m.currentTarget&&H(i.id,"",-1,null)},children:i.panels.map((m,$)=>{let W=k.panels[m];if(!W)return null;let P=i.activePanelId===m,N=k.activePanelId===m,L=D.get(W.component)?.defaultOptions,A=I&&I.leafId===i.id&&I.panelId===m,q=$===i.panels.length-1,ae=I&&I.leafId===i.id&&I.panelId==="EMPTY"&&q,ue=A?I.side==="left"?"drag-hover-left":"drag-hover-right":ae?"drag-hover-right":"";return(0,l.jsxs)("div",{onClick:()=>y(m),onMouseDown:j=>{L?.canDrag!==!1&&z(m,j)},onContextMenu:j=>t(m,j),onMouseMove:j=>{if(k.draggedPanelId){let Q=j.currentTarget.getBoundingClientRect(),me=j.clientX-Q.left<Q.width/2?"left":"right";H(i.id,m,$,me)}},onMouseLeave:()=>{k.draggedPanelId&&H(i.id,"",-1,null)},className:`workspace-tab ${P?N?"active workspace-tab-active-focused":"active workspace-tab-active-unfocused":"workspace-tab-inactive"} ${ue}`,style:{cursor:L?.canDrag===!1?"default":"pointer"},children:[(0,l.jsxs)("span",{className:"text-truncate",style:{maxWidth:"120px",display:"flex",alignItems:"center"},children:[(0,l.jsx)("span",{className:"workspace-tab-icon",children:L?.icon||B||ht}),(0,l.jsxs)("span",{children:[X(W.title,S),W.dirty?" *":""]})]}),L?.renderHeaderActions&&(0,l.jsx)("span",{className:"tab-header-actions",onClick:j=>j.stopPropagation(),onMouseDown:j=>j.stopPropagation(),children:L.renderHeaderActions(m)}),L?.canClose!==!1&&(0,l.jsx)("span",{onClick:j=>{j.stopPropagation(),R(m)},title:X(O.closeTab,S),className:"close-tab-x",style:{width:"18px",height:"18px",...L?.renderHeaderActions?{}:{marginInlineStart:"auto"}},children:(0,l.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:(0,l.jsx)("path",{d:"M18 6L6 18M6 6l12 12"})})})]},m)})}),i.panels.length===0&&i.keepOnEmpty&&i.canClose!==!1&&(0,l.jsx)("span",{onClick:()=>E(i.id),className:"close-tab-x header-close-empty-group",style:{width:"18px",height:"18px",cursor:"pointer"},title:X(O.closeEmptyGroup,S),children:(0,l.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:(0,l.jsx)("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),(0,l.jsxs)("div",{className:`dw-panel-body ${x??""}`,style:{position:"relative",overflow:"hidden"},children:[i.activePanelId&&k.panels[i.activePanelId]?(0,l.jsx)(Wt,{panelId:i.activePanelId},i.activePanelId):(0,l.jsx)("div",{className:"empty-leaf-placeholder",children:(0,l.jsx)("span",{children:"Empty Workspace Section"})}),k.draggedPanelId!==null&&(0,l.jsx)("div",{className:"dock-drop-zone-overlay",children:(0,l.jsxs)("div",{className:"dock-target-cross",children:[(0,l.jsx)("div",{onMouseEnter:()=>f(i.id,"top"),onMouseLeave:()=>f(i.id,null),className:"dock-target-box dock-target-top",children:"\u25B2"}),(0,l.jsx)("div",{onMouseEnter:()=>f(i.id,"bottom"),onMouseLeave:()=>f(i.id,null),className:"dock-target-box dock-target-bottom",children:"\u25BC"}),(0,l.jsx)("div",{onMouseEnter:()=>f(i.id,"left"),onMouseLeave:()=>f(i.id,null),className:"dock-target-box dock-target-left",children:"\u25C0"}),(0,l.jsx)("div",{onMouseEnter:()=>f(i.id,"right"),onMouseLeave:()=>f(i.id,null),className:"dock-target-box dock-target-right",children:"\u25B6"}),(0,l.jsx)("div",{onMouseEnter:()=>f(i.id,"center"),onMouseLeave:()=>f(i.id,null),className:"dock-target-box dock-target-center",children:"\u25A3"})]})}),k.draggedPanelId!==null&&a!==null&&a.leafId===i.id&&(0,l.jsx)("div",{className:"dock-preview-highlight",style:{left:a.position==="right"?"50%":"0",top:a.position==="bottom"?"50%":"0",width:a.position==="left"||a.position==="right"?"50%":"100%",height:a.position==="top"||a.position==="bottom"?"50%":"100%"}})]})]})},an=({skin:i="vscode",defaultPanelIcon:t})=>{let a=fe(),f=ze(),{restorePanel:z,minimizePanel:I,requestClosePanel:H,maximizePanel:B,updateFloatingPosition:R,focusPanel:k,floatPanel:D,setDraggedPanelId:p,dockPanelToGroup:E,movePanelOrder:C,dockPanelToWorkspaceEdge:S,setActivePanel:O,setDirection:d}=gt(),{openModal:x}=we(),y=le(),m=ce(),$=F.default.useCallback(r=>{let v=a.panels[r];H(r,{onConfirm:g=>new Promise(e=>{let n=g||v?.dirtyOptions,o=v?X(v.title,y):"Panel";x(xe,{title:n?.title||m.unsavedChangesTitle,message:n?.message||{id:m.unsavedChangesMessage.id,defaultMessage:m.unsavedChangesMessage.defaultMessage,values:{title:o}},alert:n?.alert,alertType:n?.alertType||"danger",useYesNoTitles:!0,onOK:()=>e(!0),onCancel:()=>e(!1)},{size:"small"})})})},[H,a.panels,y,x,m]),{windowClass:W,windowBodyClass:P}=Pe(),N=(0,F.useRef)(null),G=(0,F.useRef)(null),[L,A]=(0,F.useState)(null),q=(0,F.useRef)(null),[ae,ue]=(0,F.useState)(!1);(0,F.useEffect)(()=>()=>{q.current&&clearTimeout(q.current)},[]),(0,F.useEffect)(()=>{L&&(a.minimized.some(v=>v.id===L.id)||A(null))},[a.minimized,L]);let[de,j]=(0,F.useState)(null),Q=(0,F.useRef)(null),[ye,me]=(0,F.useState)({x:0,y:0}),[V,ge]=(0,F.useState)(null),ee=(0,F.useRef)(null),te=r=>{ge(r),ee.current=r},[He,Me]=(0,F.useState)(null),be=(0,F.useRef)(null),$e=(r,v,g,e)=>{let n=e?{leafId:r,panelId:v,index:g,side:e}:null;Me(n),be.current=n},_e=(r,v)=>{let g=v?{leafId:r,position:v}:null;j(g),Q.current=g},Ge=(r,v)=>{if(v.button!==0)return;let g=v.clientX,e=v.clientY,n=!1,o=c=>{let w=c.clientX-g,h=c.clientY-e;!n&&(Math.abs(w)>5||Math.abs(h)>5)&&(n=!0,p(r)),n&&me({x:c.clientX,y:c.clientY})},s=c=>{if(window.removeEventListener("mousemove",o),window.removeEventListener("mouseup",u),n){let w=Q.current,h=be.current,M=ee.current;if(M)S(r,M);else if(h){let T=h.index;h.side==="right"&&(T+=1),C(r,h.leafId,T)}else w?E(r,w.leafId,w.position):D(r,{x:c.clientX-150,y:c.clientY-15,width:450,height:350});p(null),j(null),Q.current=null,Me(null),be.current=null,te(null)}},u=c=>{s(c)};window.addEventListener("mousemove",o),window.addEventListener("mouseup",u)},Ye=(r,v)=>{v.preventDefault();let g=a.panels[r];if(!g)return;let n=f.get(g.component)?.defaultOptions,o=[];n?.canDrag!==!1&&o.push({label:X(m.floatWindow,y),action:()=>D(r)}),n?.canMinimize!==!1&&o.push({label:X(m.minimizePanel,y),action:()=>I(r)}),o.length>0&&n?.canClose!==!1&&o.push({separator:!0}),n?.canClose!==!1&&o.push({label:X(m.closeTab,y),action:()=>$(r)}),o.length!==0&&G.current?.show({event:v,contextMenu:{items:o}})},Xe=(r,v)=>{v.preventDefault(),A(null),G.current?.show({event:v,contextMenu:{items:[{label:X(m.restorePanel,y),action:()=>z(r)},{label:X(m.maximizePanel,y),action:()=>B(r)},{separator:!0},{label:X(m.closePanel,y),action:()=>$(r)}]}})};(0,F.useEffect)(()=>{let r=Object.keys(a.panels);for(let v of Array.from(Be.keys()))r.includes(v)||Be.delete(v)},[a.panels]),(0,F.useEffect)(()=>{let r=()=>{a.draggedPanelId!==null&&(p(null),j(null),Me(null))};return window.addEventListener("blur",r),()=>{window.removeEventListener("blur",r)}},[a.draggedPanelId]);let Se=(0,F.useRef)(null),[he,qe]=(0,F.useState)({width:1024,height:768});(0,F.useEffect)(()=>{let r=Se.current;if(!r)return;let v=new ResizeObserver(g=>{if(!g||g.length===0)return;let e=g[0].contentRect;qe({width:Math.max(100,e.width),height:Math.max(100,e.height)})});return v.observe(r),()=>{v.disconnect()}},[]),(0,F.useEffect)(()=>{let r=Se.current;if(!r)return;let v=()=>{let n=kt(r);d(n?"rtl":"ltr")};v();let g=new MutationObserver(v);g.observe(document.documentElement,{attributes:!0,attributeFilter:["dir"]}),g.observe(document.body,{attributes:!0,attributeFilter:["dir"]});let e=r.closest("[dir]");return e&&e!==document.documentElement&&e!==document.body&&g.observe(e,{attributes:!0,attributeFilter:["dir"]}),()=>{g.disconnect()}},[d]),(0,F.useEffect)(()=>{let r=he.width,v=he.height;a.floating.forEach(g=>{let e=typeof g.width=="string"?parseFloat(g.width):g.width,n=typeof g.height=="string"?parseFloat(g.height):g.height,o=typeof g.x=="string"?parseFloat(g.x):g.x,s=typeof g.y=="string"?parseFloat(g.y):g.y,u=e,c=n,w=o,h=s,M=!1;u>r&&(u=Math.max(200,r-20),M=!0),c>v&&(c=Math.max(150,v-40),M=!0);let T=10;if(g.stickyRight)w=r-u-T,M=!0;else{let _=r-100;w>_&&(w=Math.max(0,_),M=!0)}if(g.stickyBottom)h=v-c-T,M=!0;else{let _=v-40;h>_&&(h=Math.max(0,_),M=!0)}M&&R(g.id,{x:w,y:h,width:u,height:c})})},[he,a.floating,R]),(0,F.useEffect)(()=>{let r=v=>{if(v.button!==0)return;let g=v.target;if(!g)return;let e=g.closest(".floating-window");if(e){let o=e.getAttribute("data-window-id");o&&(O(o),k(o));return}let n=g.closest(".workspace-panel");if(n){let o=n.getAttribute("data-active-panel-id");o&&O(o)}};return document.addEventListener("mousedown",r),()=>{document.removeEventListener("mousedown",r)}},[k,O]);let Ke=(r,v)=>{let g=a.floating.find(T=>T.id===r);if(!g||g.maximized)return;k(r);let e=v.clientX,n=v.clientY,s=v.currentTarget.closest(".floating-window"),u=s?s.offsetLeft:0,c=s?s.offsetTop:0,w=!1,h=T=>{let _=T.clientX-e,U=T.clientY-n;if(!w&&(Math.abs(_)>5||Math.abs(U)>5)&&(w=!0,p(r)),w){let Y=u+_,K=c+U;R(r,{x:Y,y:K,stickyRight:!1,stickyBottom:!1})}},M=()=>{if(w){let T=Q.current,_=be.current,U=ee.current;if(U)S(r,U);else if(_){let Y=_.index;_.side==="right"&&(Y+=1),C(r,_.leafId,Y)}else T&&E(r,T.leafId,T.position);p(null),j(null),Q.current=null,Me(null),be.current=null,te(null)}window.removeEventListener("mousemove",h),window.removeEventListener("mouseup",M)};window.addEventListener("mousemove",h),window.addEventListener("mouseup",M)},je=(r,v)=>{v.stopPropagation();let g=a.floating.find(M=>M.id===r);if(!g||g.maximized)return;k(r);let e=v.clientX,n=v.clientY,s=v.currentTarget.closest(".floating-window"),u=s?s.offsetWidth:400,c=s?s.offsetHeight:300,w=M=>{let T=M.clientX-e,_=M.clientY-n,U=Math.max(200,u+T),Y=Math.max(150,c+_),K=g.x,Re=g.y,We=he.width,Oe=he.height,lt=typeof g.x=="string"?parseFloat(g.x):g.x,dt=typeof g.y=="string"?parseFloat(g.y):g.y,Ve=typeof g.width=="string"?parseFloat(g.width):g.width,Ze=typeof g.height=="string"?parseFloat(g.height):g.height,Fe=Math.abs(lt+Ve-We)<4,yt=Math.abs(dt+Ze-Oe)<4;Fe&&(K=We-U,K<0&&(K=0,U=We)),yt&&(Re=Oe-Y,Re<0&&(Re=0,Y=Oe)),R(r,{x:K,y:Re,width:U,height:Y,stickyRight:Fe,stickyBottom:yt})},h=()=>{window.removeEventListener("mousemove",w),window.removeEventListener("mouseup",h)};window.addEventListener("mousemove",w),window.addEventListener("mouseup",h)},Ne=r=>{if(N.current){let v=r==="left"?-150:150;N.current.scrollBy({left:v,behavior:"smooth"})}},[Ue,Je]=(0,F.useState)("dark");return(0,F.useEffect)(()=>{let r=()=>{let g=document.documentElement.getAttribute("data-color-scheme")==="light"?"light":"dark";Je(g)};r();let v=new MutationObserver(r);return v.observe(document.documentElement,{attributes:!0,attributeFilter:["data-color-scheme"]}),()=>v.disconnect()},[]),(0,l.jsxs)("div",{"data-workspace-skin":i,"data-color-scheme":Ue,style:{display:"flex",flexDirection:"column",width:"100%",height:"100%",overflow:"hidden",userSelect:"none"},dir:a.dir,children:[(0,l.jsxs)("div",{ref:Se,className:a.draggedPanelId?"dragging-active":void 0,style:{flexGrow:1,width:"100%",position:"relative",overflow:"hidden"},children:[a.draggedPanelId!==null&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("div",{className:"workspace-edge-trigger edge-trigger-left",onMouseEnter:()=>te("left"),onMouseLeave:()=>te(null)}),(0,l.jsx)("div",{className:"workspace-edge-trigger edge-trigger-right",onMouseEnter:()=>te("right"),onMouseLeave:()=>te(null)}),(0,l.jsx)("div",{className:"workspace-edge-trigger edge-trigger-top",onMouseEnter:()=>te("top"),onMouseLeave:()=>te(null)}),(0,l.jsx)("div",{className:"workspace-edge-trigger edge-trigger-bottom",onMouseEnter:()=>te("bottom"),onMouseLeave:()=>te(null)})]}),a.draggedPanelId!==null&&V!==null&&(0,l.jsx)("div",{className:`workspace-edge-preview edge-preview-${V}`}),(0,l.jsx)("div",{style:{width:"100%",height:"100%",overflow:"hidden",position:"relative"},children:a.gridRoot?(0,l.jsx)(Ot,{node:a.gridRoot,path:[],onTabRightClick:Ye,activeDropZone:de,onHoverDropZone:_e,onTabDragStart:Ge,hoveredTab:He,onTabHover:$e,defaultPanelIcon:t,onRequestClosePanel:$}):(0,l.jsx)("div",{className:"empty-workspace-grid",children:"Grid Empty"})}),a.floating.map(r=>{let v=a.panels[r.id];if(!v)return null;let g=r.maximized,e=a.draggedPanelId===r.id,n=a.activePanelId===r.id,s=f.get(v.component)?.defaultOptions;return(0,l.jsxs)("div",{"data-window-id":r.id,dir:a.dir,onMouseDownCapture:()=>{O(r.id),k(r.id)},className:`floating-window ${g?"maximized":""} ${n?"v2-window-focused":""} ${W??""}`,style:{position:"absolute",left:g?0:typeof r.x=="number"?`${r.x}px`:r.x,top:g?0:typeof r.y=="number"?`${r.y}px`:r.y,width:g?"100%":typeof r.width=="number"?`${r.width}px`:r.width,height:g?"100%":typeof r.height=="number"?`${r.height}px`:r.height,zIndex:r.z,pointerEvents:e?"none":"auto"},children:[(0,l.jsxs)("div",{onDoubleClick:()=>B(r.id),onMouseDown:u=>{s?.canDrag!==!1&&Ke(r.id,u)},className:"floating-window-titlebar cursor-move",style:{cursor:g||s?.canDrag===!1?"default":"move"},children:[(0,l.jsxs)("span",{className:"floating-window-title",children:[(0,l.jsx)("span",{className:"window-title-icon",children:s?.icon||t||ht}),(0,l.jsxs)("span",{children:[X(v.title,y),v.dirty?" *":""]})]}),(0,l.jsxs)("div",{className:"fw-titlebar-actions",style:{gap:"var(--header-button-gap, 4px)"},onMouseDown:u=>u.stopPropagation(),children:[s?.renderHeaderActions&&(0,l.jsx)("div",{className:"window-header-actions",children:s.renderHeaderActions(r.id)}),s?.canDrag!==!1&&(0,l.jsx)("button",{type:"button",title:X(m.windowAnchoringOptions,y),onClick:u=>{let c=!!r.stickyRight,w=!!r.stickyBottom;G.current?.show({event:u,contextMenu:{items:[{label:X(m.anchorToRightEdge,y),checkbox:{active:!0,enabled:!0,value:c},action:()=>{let h=he.width,M=typeof r.width=="string"?parseFloat(r.width):r.width;c?R(r.id,{stickyRight:!1}):R(r.id,{x:h-M-10,stickyRight:!0})}},{label:X(m.anchorToBottomEdge,y),checkbox:{active:!0,enabled:!0,value:w},action:()=>{let h=he.height,M=typeof r.height=="string"?parseFloat(r.height):r.height;w?R(r.id,{stickyBottom:!1}):R(r.id,{y:h-M-10,stickyBottom:!0})}}]}})},className:"custom-tab-btn btn-anchor-tab",children:(0,l.jsxs)("svg",{className:`anchor-icon ${r.stickyRight&&r.stickyBottom?"anchor-sticky-both":r.stickyRight?"anchor-sticky-right":r.stickyBottom?"anchor-sticky-bottom":""}`,width:"11",height:"11",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:[(0,l.jsx)("circle",{cx:"12",cy:"5",r:"2"}),(0,l.jsx)("path",{d:"M12 7v7m0 0a4 4 0 0 1-4-4M12 14a4 4 0 0 0 4-4M5 18h14"})]})}),(0,l.jsx)("button",{type:"button",title:g?X(m.restoreSize,y):X(m.maximize,y),onClick:()=>B(r.id),className:"custom-tab-btn btn-maximize-tab",children:(0,l.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:(0,l.jsx)("rect",{x:"4",y:"4",width:"16",height:"16",rx:"1.5"})})}),s?.canMinimize!==!1&&(0,l.jsx)("button",{type:"button",title:X(m.minimize,y),onClick:()=>I(r.id),className:"custom-tab-btn btn-minimize-tab",children:(0,l.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:(0,l.jsx)("path",{d:"M5 12h14"})})}),s?.canClose!==!1&&(0,l.jsx)("button",{type:"button",title:X(m.close,y),onClick:()=>$(r.id),className:"custom-tab-btn btn-close-tab",children:(0,l.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:(0,l.jsx)("path",{d:"M18 6L6 18M6 6l12 12"})})})]})]}),(0,l.jsx)("div",{className:P??void 0,style:{flexGrow:1,width:"100%",overflow:"hidden",position:"relative",isolation:"isolate"},children:(0,l.jsx)(Wt,{panelId:r.id},r.id)}),!g&&(0,l.jsx)("div",{onMouseDown:u=>je(r.id,u),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%)"}})]},r.id)})]}),a.minimized.length>0&&(0,l.jsxs)("div",{className:"taskbar-footer-container",style:{height:"48px",zIndex:100},children:[(0,l.jsx)("button",{type:"button",onClick:()=>Ne("left"),className:"taskbar-nav-btn",style:{display:a.minimized.length>4?"block":"none"},children:"\u25C0"}),(0,l.jsx)("div",{ref:N,className:"taskbar-items-container",style:{scrollSnapType:"x mandatory"},children:a.minimized.map(r=>{let g=f.get(r.component)?.defaultOptions?.icon||t||ht;return(0,l.jsx)("div",{onClick:()=>{A(null),z(r.id)},onContextMenu:e=>Xe(r.id,e),onMouseEnter:e=>{if(ae)return;q.current&&clearTimeout(q.current);let n=e.currentTarget.getBoundingClientRect();e.clientX>=n.left&&e.clientX<=n.right&&e.clientY>=n.top&&e.clientY<=n.bottom&&A({id:r.id,rect:n,title:r.title,component:r.component})},onMouseLeave:()=>{q.current=setTimeout(()=>{A(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:(0,l.jsx)("span",{className:"taskbar-item-icon",children:g})},r.id)})}),L&&(0,mt.createPortal)((0,l.jsxs)("div",{className:"taskbar-item-tooltip",dir:a.dir,style:{position:"fixed",left:`${L.rect.left+L.rect.width/2}px`,top:`${L.rect.top-8}px`,transform:"translateX(-50%) translateY(-100%)",opacity:1,pointerEvents:"auto",zIndex:999999},onMouseEnter:()=>{q.current&&clearTimeout(q.current)},onMouseLeave:()=>{A(null)},onClick:()=>{z(L.id),A(null)},children:[(0,l.jsxs)("div",{className:"tooltip-header-row",children:[(0,l.jsxs)("span",{className:"tooltip-title-text text-truncate",style:{maxWidth:"140px"},children:[X(L.title,y),a.panels[L.id]?.dirty?" *":""]}),(0,l.jsx)("span",{onClick:r=>{r.stopPropagation(),$(L.id),A(null)},title:X(m.closePanel,y),className:"tooltip-close-x",children:(0,l.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:(0,l.jsx)("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),(0,l.jsx)(nn,{panelId:L.id})]}),document.body),(0,l.jsx)("button",{type:"button",onClick:()=>Ne("right"),className:"taskbar-nav-btn",style:{display:a.minimized.length>4?"block":"none"},children:"\u25B6"})]}),Object.keys(a.panels).map(r=>{let v=a.panels[r];if(!v)return null;let g=Lt(r);return(0,mt.createPortal)((0,l.jsx)(on,{panelId:r,children:(0,l.jsx)("div",{style:{width:"100%",height:"100%"},children:tn(r,v.component,f)})}),g,r)}),(0,l.jsx)(Et.JsonContextMenu,{ref:G,id:"workspace-context-menu",theme:"dark",onShow:()=>ue(!0),onHide:()=>ue(!1)}),a.draggedPanelId!==null&&!a.floating.some(r=>r.id===a.draggedPanelId)&&(0,l.jsxs)("div",{className:"drag-ghost-tab",style:{left:ye.x+12,top:ye.y+12,zIndex:1e5},children:["\u{1F4C4} ",X(a.panels[a.draggedPanelId]?.title,y)||"Tab"]})]})},Ft=an;var at=class{registry;initialState;config;_actions=null;_pendingCalls=[];_disconnectedWarnTimer=null;constructor(t={}){if(this.registry=new ke,this.initialState=t.initialState??null,this.config={formatMessage:t.formatMessage,predefinedMessages:t.predefinedMessages,dir:t.dir},t.panels)for(let[a,f]of Object.entries(t.panels))this.registry.register(a,f.component,f.defaultOptions)}_connect(t){this._actions=t,this._disconnectedWarnTimer!==null&&(clearTimeout(this._disconnectedWarnTimer),this._disconnectedWarnTimer=null);let a=this._pendingCalls.splice(0);for(let f of a)f(t)}_disconnect(){this._actions=null}get isConnected(){return this._actions!==null}_dispatch(t){this._actions?t(this._actions):(this._pendingCalls.push(t),process.env.NODE_ENV!=="production"&&this._disconnectedWarnTimer===null&&(this._disconnectedWarnTimer=setTimeout(()=>{!this.isConnected&&this._pendingCalls.length>0&&console.warn("[react-dockable-desktop] WorkspaceClient has queued calls but was never connected to a provider. Did you forget client={workspace} on <WindowManagerProvider client={workspace}>?")},1e3)))}openPanel(...t){this._dispatch(a=>a.openPanel(...t))}closePanel(t){this._dispatch(a=>a.closePanel(t))}minimizePanel(t){this._dispatch(a=>a.minimizePanel(t))}restorePanel(t){this._dispatch(a=>a.restorePanel(t))}floatPanel(...t){this._dispatch(a=>a.floatPanel(...t))}dockPanel(...t){this._dispatch(a=>a.dockPanel(...t))}maximizePanel(t){this._dispatch(a=>a.maximizePanel(t))}focusPanel(t){this._dispatch(a=>a.focusPanel(t))}isOpen(t){return this._actions?.isOpen(t)??!1}getOpenPanelIds(){return this._actions?.getOpenPanelIds()??[]}saveLayout(){return this._actions?.saveLayout()??""}loadLayout(t){this._dispatch(a=>a.loadLayout(t))}setDirection(t){this._dispatch(a=>a.setDirection(t))}publish(t,a){this._dispatch(f=>f.publish(t,a))}subscribe(t,a){return this._actions?.subscribe(t,a)??(()=>{})}};var re=require("react");var ne=require("react/jsx-runtime"),rn=({modal:i,index:t,isTopmost:a})=>{let{close:f,openModal:z,updateInstance:I,setDirty:H}=we(),B=le(),R=ce(),{dir:k}=fe(),{modalClass:D,modalBodyClass:p}=Pe(),E=(0,re.useRef)(null),{id:C,Component:S,props:O,options:d,dirty:x,dirtyOptions:y}=i,m=d,[$,W]=(0,re.useState)(m.icon||null),P=(0,re.useRef)(m);P.current=m;let N=X(m.title,B),G=(0,re.useCallback)(async V=>{if(V?.force){f(C);return}if(E.current){if(!await E.current())return;f(C);return}if(x){z(xe,{title:y?.title||R.unsavedChangesTitle,message:y?.message||{id:R.unsavedChangesMessage.id,defaultMessage:R.unsavedChangesMessage.defaultMessage,values:{title:N}},alert:y?.alert,alertType:y?.alertType||"danger",useYesNoTitles:!0,onOK:()=>f(C)},{size:"small"});return}f(C)},[f,z,C,x,y,N,R]),L=(0,re.useCallback)((V,ge)=>H(C,V,ge),[H,C]),A=(0,re.useCallback)(V=>I(C,{options:{...P.current,title:V}}),[I,C]),q=(0,re.useCallback)(V=>W(V),[]),ae=(0,re.useCallback)(V=>(E.current=V,()=>{E.current=null}),[]),ue=(0,re.useMemo)(()=>({requestClose:G,setDirty:L,setTitle:A,setIcon:q,onCloseRequested:ae,containerType:"modal",instanceId:C}),[G,L,A,q,ae,C]),de=x?`${N} *`:N,j=m.size?`v2-modal-size-${m.size}`:"v2-modal-size-auto",Q=m.closable!==!1;(0,re.useEffect)(()=>{if(!a||!Q)return;let V=ge=>{ge.key==="Escape"&&(ge.stopPropagation(),G())};return document.addEventListener("keydown",V),()=>document.removeEventListener("keydown",V)},[G,Q,a]);let me=1e4+t*10;return(0,ne.jsxs)("div",{className:"v2-modal-overlay",style:{zIndex:me},dir:k,children:[(0,ne.jsx)("div",{className:"v2-modal-curtain",onClick:Q?()=>G():void 0}),(0,ne.jsxs)("div",{className:`v2-modal-window ${j} ${D??""}`,children:[(0,ne.jsxs)("div",{className:"v2-modal-header",children:[$&&(0,ne.jsx)("div",{className:"v2-modal-icon",children:$}),(0,ne.jsx)("h4",{className:"v2-modal-title",children:de}),Q&&(0,ne.jsx)("button",{className:"v2-modal-close-button",onClick:()=>G(),title:B(R.closeTooltip),type:"button",children:(0,ne.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:(0,ne.jsx)("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),(0,ne.jsx)("div",{className:`v2-modal-body ${p??""}`,children:(0,ne.jsx)(Ce,{value:ue,children:(0,ne.jsx)(S,{...O,panelId:C})})})]})]})},ln=()=>{let{modals:i}=ve();return i.length===0?null:(0,ne.jsx)(ne.Fragment,{children:i.map((t,a)=>(0,ne.jsx)(rn,{modal:t,index:a,isTopmost:a===i.length-1},t.id))})},Dt=ln;var oe=require("react");var Z=require("react/jsx-runtime"),rt=({panel:i,position:t,defaultWidth:a})=>{let{close:f,openModal:z,updateInstance:I,setDirty:H,registerCloseHandler:B,unregisterCloseHandler:R}=we(),{modals:k}=ve(),D=le(),p=ce(),{dir:E}=fe(),{sidePanelClass:C,sidePanelBodyClass:S}=Pe(),O=(0,oe.useRef)(null),{id:d,Component:x,props:y,options:m,dirty:$,dirtyOptions:W}=i,P=m,[N,G]=(0,oe.useState)(P.icon||null),L=(0,oe.useRef)(P);L.current=P;let A=X(P.title,D),q=(0,oe.useCallback)(async ee=>{if(ee?.force){f(d);return}if(O.current){if(!await O.current())return;f(d);return}if($){z(xe,{title:W?.title||p.unsavedChangesTitle,message:W?.message||{id:p.unsavedChangesMessage.id,defaultMessage:p.unsavedChangesMessage.defaultMessage,values:{title:A}},alert:W?.alert,alertType:W?.alertType||"danger",useYesNoTitles:!0,onOK:()=>f(d)},{size:"small"});return}f(d)},[f,z,d,$,W,A,p]),ae=(0,oe.useCallback)(async()=>O.current?await O.current():!$,[$]);(0,oe.useEffect)(()=>(B(d,ae),()=>R(d)),[d,ae,B,R]);let ue=(0,oe.useCallback)((ee,te)=>H(d,ee,te),[H,d]),de=(0,oe.useCallback)(ee=>I(d,{options:{...L.current,title:ee}}),[I,d]),j=(0,oe.useCallback)(ee=>G(ee),[]),Q=(0,oe.useCallback)(ee=>(O.current=ee,()=>{O.current=null}),[]),ye=(0,oe.useMemo)(()=>({requestClose:q,setDirty:ue,setTitle:de,setIcon:j,onCloseRequested:Q,containerType:t==="left"?"left-panel":"right-panel",instanceId:d}),[q,ue,de,j,Q,t,d]),me=$?`${A} *`:A;(0,oe.useEffect)(()=>{let ee=te=>{te.key==="Escape"&&k.length===0&&q()};return document.addEventListener("keydown",ee),()=>document.removeEventListener("keydown",ee)},[q,k.length]);let V=P.width||a||400,ge=typeof V=="number"?`${V}px`:V;return(0,Z.jsx)("div",{className:`v2-side-panel v2-side-panel-${t} v2-side-panel-visible ${C??""}`,style:{width:ge},dir:E,children:(0,Z.jsxs)("div",{className:"v2-side-panel-window",children:[(0,Z.jsxs)("div",{className:"v2-side-panel-header",children:[N&&(0,Z.jsx)("div",{className:"v2-side-panel-icon",children:N}),(0,Z.jsx)("h4",{className:"v2-side-panel-title",children:me}),(0,Z.jsx)("button",{className:"v2-side-panel-close-button",onClick:()=>q(),title:D(p.closeTooltip),type:"button",children:(0,Z.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:(0,Z.jsx)("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),(0,Z.jsx)("div",{className:`v2-side-panel-body ${S??""}`,children:(0,Z.jsx)(Ce,{value:ye,children:(0,Z.jsx)(x,{...y,panelId:d})})})]})})},dn=({defaultWidth:i})=>{let{leftPanel:t,rightPanel:a}=ve();return(0,Z.jsxs)(Z.Fragment,{children:[t&&(0,Z.jsx)(rt,{panel:t,position:"left",defaultWidth:i},t.id),a&&(0,Z.jsx)(rt,{panel:a,position:"right",defaultWidth:i},a.id)]})},At=({defaultWidth:i})=>{let{leftPanel:t}=ve();return t?(0,Z.jsx)(rt,{panel:t,position:"left",defaultWidth:i},t.id):null},Bt=({defaultWidth:i})=>{let{rightPanel:t}=ve();return t?(0,Z.jsx)(rt,{panel:t,position:"right",defaultWidth:i},t.id):null},Ht=dn;var ie=require("react");var se=require("react/jsx-runtime"),$t=(0,ie.forwardRef)(function({position:t="right",tabs:a,drawerWidth:f="220px",activeTabId:z,onActiveTabChange:I,children:H},B){let R=z!==void 0,k=le(),D=ce(),[p,E]=(0,ie.useState)(null),C=R?z:p,[S,O]=(0,ie.useState)(()=>{let P=new Set;for(let N of a)N.eagerMount&&P.add(N.id);return P});(0,ie.useEffect)(()=>{let P=a.filter(N=>N.eagerMount&&!S.has(N.id));P.length>0&&O(N=>{let G=new Set(N);for(let L of P)G.add(L.id);return G})},[a]);let d=(0,ie.useRef)(C??null);(0,ie.useEffect)(()=>{d.current=C??null},[C]);let x=(0,ie.useCallback)(P=>{R||E(P),I?.(P)},[R,I]);(0,ie.useImperativeHandle)(B,()=>({openTab:P=>x(P),closeDrawer:()=>x(null),getActiveTab:()=>d.current}),[x]);let y=P=>{x(C===P?null:P)},m=(0,ie.useCallback)(()=>x(null),[x]);(0,ie.useEffect)(()=>{C&&!S.has(C)&&O(P=>{let N=new Set(P);return N.add(C),N})},[C,S]),(0,ie.useEffect)(()=>{C===null&&O(P=>{let N=!1,G=new Set(P);for(let L of P){let A=a.find(q=>q.id===L);A&&!A.eagerMount&&!A.preserveState&&(G.delete(L),N=!0)}return N?G:P})},[C,a]);let $=(0,se.jsx)("div",{className:`sidebar-tabs-strip ${t}`,style:{width:"56px",height:"100%"},children:a.map(P=>{let N=C===P.id;return(0,se.jsx)("button",{type:"button",onClick:()=>y(P.id),className:`sidebar-tab-btn ${N?"active":""}`,title:P.label,"aria-pressed":N,children:P.icon},P.id)})}),W=(0,se.jsx)("div",{className:`sidebar-content-drawer h-100 ${t}`,style:{width:C?f:"0px",minWidth:C?f:"0px",overflow:"hidden",flexShrink:0},children:a.map(P=>{if(!S.has(P.id))return null;let G=C===P.id,L=()=>x(P.id);return(0,se.jsxs)("div",{style:{display:G?"flex":"none",flexDirection:"column",height:"100%",width:"100%"},children:[(0,se.jsxs)("div",{className:"sidebar-drawer-header",children:[(0,se.jsx)("span",{className:"sidebar-header-title",children:P.label}),(0,se.jsx)("button",{type:"button",onClick:m,className:"sidebar-close-btn",title:k(D.closePanelTooltip),"aria-label":k(D.closePanelTooltip),children:(0,se.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,se.jsx)("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),(0,se.jsx)("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),(0,se.jsx)("div",{className:"sidebar-drawer-body",children:P.renderContent(P.id,m,L)})]},P.id)})});return(0,se.jsxs)(se.Fragment,{children:[t==="left"&&$,t==="left"&&W,H,t==="right"&&W,t==="right"&&$]})});0&&(module.exports={ConfirmationForm,FormContainerContext,FormContainerProvider,LeftPanelRenderer,ModalStackRenderer,PanelProvider,PanelRegistry,PanelRegistryClass,RightPanelRenderer,SidePanelRenderer,Sidebar,WindowManager,WindowManagerProvider,WorkspaceClient,defaultPredefinedMessages,formatLabel,useFormContainer,useFormatMessage,usePanelActions,usePanelContext,usePanelState,usePredefinedMessages,useRegistry,useStyleClasses,useWindowManagerActions,useWindowManagerState});
1
+ "use strict";var Jt=Object.create;var nt=Object.defineProperty;var Vt=Object.getOwnPropertyDescriptor;var Zt=Object.getOwnPropertyNames;var Qt=Object.getPrototypeOf,en=Object.prototype.hasOwnProperty;var tn=(i,t)=>{for(var o in t)nt(i,o,{get:t[o],enumerable:!0})},Mt=(i,t,o,c)=>{if(t&&typeof t=="object"||typeof t=="function")for(let R of Zt(t))!en.call(i,R)&&R!==o&&nt(i,R,{get:()=>t[R],enumerable:!(c=Vt(t,R))||c.enumerable});return i};var nn=(i,t,o)=>(o=i!=null?Jt(Qt(i)):{},Mt(t||!i||!i.__esModule?nt(o,"default",{value:i,enumerable:!0}):o,i)),on=i=>Mt(nt({},"__esModule",{value:!0}),i);var vn={};tn(vn,{ConfirmationForm:()=>Te,DockableDesktopProvider:()=>Gt,FormContainerContext:()=>it,FormContainerProvider:()=>ke,LeftPanelRenderer:()=>Xt,ModalStackRenderer:()=>Yt,PanelProvider:()=>at,PanelRegistry:()=>Be,PanelRegistryClass:()=>ze,RightPanelRenderer:()=>qt,SidePanelRenderer:()=>Kt,Sidebar:()=>Ut,WindowManager:()=>$t,WindowManagerProvider:()=>st,WorkspaceClient:()=>ct,defaultPredefinedMessages:()=>Ne,formatLabel:()=>q,useFormContainer:()=>We,useFormatMessage:()=>fe,usePanelActions:()=>Ie,usePanelContext:()=>zt,usePanelId:()=>Lt,usePanelState:()=>Me,usePredefinedMessages:()=>he,useRegistry:()=>Oe,useStyleClasses:()=>xe,useWindowManagerActions:()=>De,useWindowManagerState:()=>be});module.exports=on(vn);var D=nn(require("react"),1),Pt=require("react-dom");var m=require("react");var ot=require("react"),sn={requestClose:()=>{console.warn("FormContainerContract: requestClose called but no container is present")},setDirty:()=>{},onCloseRequested:()=>()=>{},setTitle:()=>{},setIcon:()=>{},containerType:"standalone",instanceId:"standalone",onClose:()=>()=>{},onMinimize:()=>()=>{},onRestore:()=>()=>{},onResize:()=>()=>{}},it=(0,ot.createContext)(sn),ke=it.Provider,We=()=>(0,ot.useContext)(it);var ze=class{registry=new Map;register(t,o,c){this.registry.set(t,{Component:o,defaultOptions:c})}get(t){return this.registry.get(t)}getRegisteredIds(){return Array.from(this.registry.keys())}},Be=new ze;var Ne={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"}};var Se=require("react/jsx-runtime"),Rt=(0,m.createContext)(null),ft=(0,m.createContext)(null),kt=(0,m.createContext)(null),St=(0,m.createContext)(null),It=(0,m.createContext)(Ne),Tt=(0,m.createContext)({}),xe=()=>(0,m.useContext)(Tt),Et=(0,m.createContext)(Be),Oe=()=>(0,m.useContext)(Et),pt=class{listeners={};subscribe(t,o){return this.listeners[t]||(this.listeners[t]=[]),this.listeners[t].push(o),()=>{this.listeners[t]=this.listeners[t].filter(c=>c!==o)}}publish(t,o){this.listeners[t]&&this.listeners[t].forEach(c=>c(o))}},rn={type:"leaf",id:"group-default",panels:[],activePanelId:null};function an(i){if(i)try{let t=JSON.parse(i);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:rn,floating:[],minimized:[],panels:{},activePanelId:null}}var st=({children:i,client:t,formatMessage:o,predefinedMessages:c,dir:R,modalClass:x,modalBodyClass:_,sidePanelClass:A,sidePanelBodyClass:k,windowClass:S,windowBodyClass:F})=>{let f=(0,m.useRef)(t?.registry??Be).current,z=t?.config.formatMessage??o,w=t?.config.predefinedMessages??c,I=t?.config.dir??R,[W,u]=(0,m.useState)(()=>({...an(t?.initialState??null),draggedPanelId:null,dir:I||"ltr",isRtl:I==="rtl"})),v=(0,m.useRef)(W);v.current=W;let y=(0,m.useRef)(new Set);(0,m.useLayoutEffect)(()=>{y.current.forEach(e=>e())},[W]);let h=(0,m.useCallback)(()=>v.current,[]),H=(0,m.useCallback)(e=>(y.current.add(e),()=>y.current.delete(e)),[]),G=(0,m.useRef)({}),P=(0,m.useMemo)(()=>({...Ne,...w}),[w]),T=(0,m.useRef)(new pt),B=(0,m.useRef)(1e3),N=(0,m.useCallback)((e,r)=>T.current.subscribe(e,r),[]),Y=(0,m.useCallback)((e,r)=>{T.current.publish(e,r)},[]),X=(0,m.useCallback)((e,r)=>{let n=typeof e.x=="string"?parseFloat(e.x):e.x,s=typeof e.y=="string"?parseFloat(e.y):e.y,l=typeof e.width=="string"?parseFloat(e.width):e.width,p=typeof e.height=="string"?parseFloat(e.height):e.height;isNaN(n)&&(n=300),isNaN(s)&&(s=150),isNaN(l)&&(l=450),isNaN(p)&&(p=350);let C=V=>r.some(Z=>{let me=typeof Z.x=="string"?parseFloat(Z.x):Z.x,Q=typeof Z.y=="string"?parseFloat(Z.y):Z.y;return!Z.maximized&&Math.abs(me-V.x)<20&&Math.abs(Q-V.y)<20}),E=0;for(;C({x:n,y:s})&&E<10;)n+=30,s+=30,E++;let M=Math.max(100,window.innerWidth||1024),$=Math.max(100,window.innerHeight||768);return(n+l>M||s+p>$)&&(n=100+E%5*30,s=100+E%5*30),n=Math.max(0,Math.min(n,M-100)),s=Math.max(0,Math.min(s,$-40)),{x:n,y:s,width:l,height:p}},[]),pe=(0,m.useCallback)(e=>{u(r=>{let n=r.panels[e];if(!n)return r;if(n.state==="floating"){let s=r.floating.find(p=>p.id===e);if(!s)return r;let l=!r.floating.some(p=>p.z>s.z);return l&&r.activePanelId===e?r:(l||(B.current+=1),{...r,floating:r.floating.map(p=>p.id===e?{...p,z:l?s.z:B.current}:p),activePanelId:e})}else if(n.state==="docked"){if(r.activePanelId===e)return r;let s=l=>l.type==="leaf"?l.panels.includes(e)?{...l,activePanelId:e}:l:{...l,children:l.children.map(s)};return{...r,gridRoot:s(r.gridRoot),activePanelId:e}}return r.activePanelId===e?r:{...r,activePanelId:e}})},[]),ie=(e,r)=>{if(e.type==="leaf"){let n=e.panels.indexOf(r);if(n===-1)return e;let s=e.panels.filter(C=>C!==r),l=e.activePanelId===r?s[n]||s[n-1]||s[0]||null:e.activePanelId,p={...e,panels:s,activePanelId:l};return s.length===0&&!e.keepOnEmpty?null:p}else{let n=e.children.map(p=>ie(p,r)).filter(p=>p!==null);if(n.length===0)return null;if(n.length===1)return n[0];let s=e.sizes.slice(0,n.length),l=s.reduce((p,C)=>p+C,0);return{...e,children:n,sizes:s.map(p=>p/l)}}},ue=(e,r,n)=>{if(e.type==="leaf"){if(e.id===r){let s=e.panels.includes(n)?e.panels:[...e.panels,n];return{...e,panels:s,activePanelId:n}}return e}else return{...e,children:e.children.map(s=>ue(s,r,n))}},K=e=>{if(e.type==="leaf")return e.id;for(let r of e.children){let n=K(r);if(n)return n}return null},ne=(0,m.useCallback)((e,r,n)=>{let s=!(e in v.current.panels);u(l=>{let p=l.panels[e],C=f.get(r),E=n?.title||n?.title||C?.defaultOptions?.title||e,M=n?.initialTarget||C?.defaultOptions?.initialTarget||"docked",$=C?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350};if(p)if(p.state==="minimized"){let Q=l.minimized.filter(ae=>ae.id!==e);if(M==="floating"||!l.gridRoot){B.current+=1;let ae=X($,l.floating);return{...l,minimized:Q,floating:[...l.floating,{...ae,id:e,z:B.current}],panels:{...l.panels,[e]:{...p,state:"floating"}}}}else{let ae=K(l.gridRoot)||"group-default";return{...l,minimized:Q,gridRoot:ue(l.gridRoot,ae,e),panels:{...l.panels,[e]:{...p,state:"docked"}}}}}else{if(p.state==="floating")return pe(e),l;{let Q=ae=>ae.type==="leaf"?ae.panels.includes(e)?{...ae,activePanelId:e}:ae:{...ae,children:ae.children.map(Q)};return{...l,gridRoot:Q(l.gridRoot)}}}let Z={id:e,title:E,component:r,state:M==="tabbed"?"docked":M},me={...l.panels,[e]:Z};if(M==="floating"){B.current+=1;let Q=X($,l.floating),ae=n?.stickyRight??C?.defaultOptions?.defaultStickyRight??!1,Qe=n?.stickyBottom??C?.defaultOptions?.defaultStickyBottom??!1,gt=Math.max(100,window.innerWidth||1024),et=Math.max(100,window.innerHeight||768),tt=typeof Q.width=="string"?parseFloat(Q.width):Q.width,jt=typeof Q.height=="string"?parseFloat(Q.height):Q.height,wt=Q.x,Ct=Q.y,xt=10;return ae&&(wt=gt-tt-xt),Qe&&(Ct=et-jt-xt),{...l,floating:[...l.floating,{...Q,id:e,z:B.current,x:wt,y:Ct,stickyRight:ae,stickyBottom:Qe}],panels:me}}else{let Q=K(l.gridRoot)||"group-default";return{...l,gridRoot:ue(l.gridRoot,Q,e),panels:me}}}),s&&T.current.publish("panel:opened",{id:e,component:r})},[X,pe]),ye=(0,m.useCallback)(e=>{let r=e in v.current.panels;u(n=>{let s=n.panels[e];if(!s||f.get(s.component)?.defaultOptions?.canClose===!1)return n;delete G.current[e];let p={...n.panels};delete p[e];let C=ie(n.gridRoot,e);return{...n,gridRoot:C||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:n.floating.filter(E=>E.id!==e),minimized:n.minimized.filter(E=>E.id!==e),panels:p}}),r&&T.current.publish("panel:closed",{id:e})},[]),we=(0,m.useCallback)((e,r)=>{G.current[e]=r},[]),ee=(0,m.useCallback)(e=>{delete G.current[e]},[]),Pe=(0,m.useCallback)((e,r,n)=>{u(s=>{let l=s.panels[e];return l?{...s,panels:{...s.panels,[e]:{...l,dirty:r,dirtyOptions:n}}}:s})},[]),oe=(0,m.useCallback)((e,r)=>{u(n=>{let s=n.panels[e];return s?{...n,panels:{...n.panels,[e]:{...s,title:r}}}:n})},[]),se=(0,m.useCallback)(async(e,r)=>{if(r?.force){ye(e);return}let n=G.current[e];if(n&&!await n())return;let s=v.current.panels[e];if(s?.dirty)if(r?.onConfirm){if(!await r.onConfirm(s.dirtyOptions))return}else return;ye(e)},[ye]),$e=(0,m.useCallback)(e=>{let r=v.current.panels[e]?.state!=="minimized"&&e in v.current.panels;u(n=>{let s=n.panels[e];if(!s||s.state==="minimized"||f.get(s.component)?.defaultOptions?.canMinimize===!1)return n;let p,C;if(s.state==="floating"){let M=n.floating.find($=>$.id===e);M&&(p={x:Number(M.x),y:Number(M.y),width:Number(M.width),height:Number(M.height),stickyRight:M.stickyRight,stickyBottom:M.stickyBottom})}else if(s.state==="docked"){let M=$=>{if($.type==="leaf")return $.panels.includes(e)?$.id:null;for(let V of $.children){let Z=M(V);if(Z)return Z}return null};C=M(n.gridRoot)??void 0}let E=ie(n.gridRoot,e);return{...n,gridRoot:E||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:n.floating.filter(M=>M.id!==e),minimized:[...n.minimized,{id:e,title:s.title,component:s.component}],panels:{...n.panels,[e]:{...s,state:"minimized",previousState:s.state,lastFloatingRect:p,lastLeafId:C}}}}),r&&T.current.publish("panel:minimized",{id:e})},[]),Ee=(0,m.useCallback)(e=>{let r=v.current.panels[e]?.state==="minimized";u(n=>{let s=n.panels[e];if(!s||s.state!=="minimized")return n;let l=n.minimized.filter(C=>C.id!==e);if((s.previousState||"docked")==="floating"){B.current+=1;let C=f.get(s.component),E=s.lastFloatingRect||C?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},M=X(E,n.floating);return{...n,minimized:l,floating:[...n.floating,{...M,id:e,z:B.current,stickyRight:!!s.lastFloatingRect?.stickyRight,stickyBottom:!!s.lastFloatingRect?.stickyBottom}],panels:{...n.panels,[e]:{...s,state:"floating"}}}}else{let C=(V,Z)=>V.type==="leaf"?V.id===Z:V.children.some(me=>C(me,Z)),E=s.lastLeafId&&C(n.gridRoot,s.lastLeafId),M=f.get(s.component),$=M?.defaultOptions?.canDrag!==!1;if(E)return{...n,minimized:l,gridRoot:ue(n.gridRoot,s.lastLeafId,e),panels:{...n.panels,[e]:{...s,state:"docked"}}};if($){B.current+=1;let V=s.lastFloatingRect||M?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},Z=X(V,n.floating);return{...n,minimized:l,floating:[...n.floating,{...Z,id:e,z:B.current,stickyRight:!!s.lastFloatingRect?.stickyRight,stickyBottom:!!s.lastFloatingRect?.stickyBottom}],panels:{...n.panels,[e]:{...s,state:"floating"}}}}else{let V=K(n.gridRoot)||"group-default";return{...n,minimized:l,gridRoot:ue(n.gridRoot,V,e),panels:{...n.panels,[e]:{...s,state:"docked"}}}}}}),r&&T.current.publish("panel:restored",{id:e})},[X]),Re=(0,m.useCallback)((e,r)=>{u(n=>{let s=n.panels[e];if(!s||f.get(s.component)?.defaultOptions?.canDrag===!1)return n;let p=f.get(s.component),C=r||p?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},E=ie(n.gridRoot,e);B.current+=1;let M=X(C,n.floating);return{...n,gridRoot:E||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:[...n.floating,{...M,id:e,z:B.current}],panels:{...n.panels,[e]:{...s,state:"floating"}}}})},[X]),Ge=(0,m.useCallback)((e,r)=>{u(n=>{let s=n.panels[e];if(!s)return n;let l=n.floating.filter(E=>E.id!==e),p=ie(n.gridRoot,e),C=r||K(p||n.gridRoot)||"group-default";return{...n,gridRoot:ue(p||n.gridRoot,C,e),floating:l,panels:{...n.panels,[e]:{...s,state:"docked"}}}})},[]),Ye=(e,r,n,s)=>{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:s==="left"||s==="right"?"horizontal":"vertical",sizes:[.5,.5],children:s==="left"||s==="top"?[l,e]:[e,l]}}return e}else return{...e,children:e.children.map(l=>Ye(l,r,n,s))}},Xe=(0,m.useCallback)(e=>{u(r=>({...r,draggedPanelId:e}))},[]),qe=(0,m.useCallback)((e,r,n)=>{u(s=>{let l=s.panels[e];if(!l)return s;let p=s.floating.filter(M=>M.id!==e),C=ie(s.gridRoot,e),E;return n==="center"?E=ue(C||s.gridRoot,r,e):E=Ye(C||s.gridRoot,r,e,n),{...s,gridRoot:E,floating:p,panels:{...s.panels,[e]:{...l,state:"docked"}},draggedPanelId:null}})},[]),Ke=(0,m.useCallback)((e,r)=>{u(n=>{let s=n.panels[e];if(!s)return n;let l=n.floating.filter(V=>V.id!==e),p=ie(n.gridRoot,e),C={type:"leaf",id:`group-edge-${Date.now()}-${Math.floor(Math.random()*1e3)}`,panels:[e],activePanelId:e},E=r==="left"||r==="right"?"horizontal":"vertical",M=r==="left"||r==="top"?[C,p||n.gridRoot]:[p||n.gridRoot,C];return{...n,gridRoot:{type:"branch",orientation:E,sizes:r==="left"||r==="top"?[.3,.7]:[.7,.3],children:M},floating:l,panels:{...n.panels,[e]:{...s,state:"docked"}},draggedPanelId:null}})},[]),Le=(0,m.useCallback)((e,r,n)=>{u(s=>{let l=s.panels[e];if(!l)return s;let p=ie(s.gridRoot,e),C=$=>{if($.type==="leaf"){if($.id===r){let V=$.panels.filter(Q=>Q!==e),Z=Math.max(0,Math.min(n,V.length)),me=[...V];return me.splice(Z,0,e),{...$,panels:me,activePanelId:e}}return $}else return{...$,children:$.children.map(C)}},E=C(p||s.gridRoot),M=s.floating.filter($=>$.id!==e);return{...s,gridRoot:E,floating:M,panels:{...s.panels,[e]:{...l,state:"docked"}},draggedPanelId:null}})},[]),Ce=(0,m.useCallback)(e=>{u(r=>{let n=l=>{if(l.type==="leaf")return l.id===e&&l.canClose!==!1?null:l;{let p=l.children.map(M=>n(M)).filter(M=>M!==null);if(p.length===0)return null;if(p.length===1)return p[0];let C=l.sizes.slice(0,p.length),E=C.reduce((M,$)=>M+$,0);return{...l,children:p,sizes:C.map(M=>M/E)}}},s=n(r.gridRoot);return{...r,gridRoot:s||{type:"leaf",id:"group-default",panels:[],activePanelId:null}}})},[]),Ue=(0,m.useCallback)(e=>{u(r=>({...r,floating:r.floating.map(n=>n.id===e?{...n,maximized:!n.maximized}:n)}))},[]),je=(0,m.useCallback)((e,r)=>{let n=(s,l)=>{if(s.type==="leaf")return s;if(l===e.length)return{...s,sizes:r};let p=e[l],C=s.children.map((E,M)=>M===p?n(E,l+1):E);return{...s,children:C}};u(s=>({...s,gridRoot:n(s.gridRoot,0)}))},[]),Je=(0,m.useCallback)((e,r)=>{u(n=>({...n,floating:n.floating.map(s=>s.id===e?{...s,...r}:s)}))},[]),Ae=(0,m.useCallback)(()=>JSON.stringify({gridRoot:v.current.gridRoot,floating:v.current.floating,minimized:v.current.minimized,panels:v.current.panels}),[]),Ve=(0,m.useCallback)(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 u(s=>({...s,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}},[]),Ze=(0,m.useCallback)(e=>{u(r=>r.activePanelId===e?r:{...r,activePanelId:e})},[]),a=(0,m.useCallback)(e=>{u(r=>r.dir===e?r:{...r,dir:e,isRtl:e==="rtl"})},[]),b=(0,m.useCallback)(e=>e in v.current.panels,[]),g=(0,m.useCallback)(()=>Object.keys(v.current.panels),[]);(0,m.useEffect)(()=>{I&&u(e=>e.dir===I?e:{...e,dir:I,isRtl:I==="rtl"})},[I]);let L=(0,m.useMemo)(()=>({openPanel:ne,closePanel:ye,minimizePanel:$e,restorePanel:Ee,floatPanel:Re,dockPanel:Ge,maximizePanel:Ue,updateSplitSizes:je,updateFloatingPosition:Je,focusPanel:pe,isOpen:b,getOpenPanelIds:g,saveLayout:Ae,loadLayout:Ve,publish:Y,subscribe:N,setDraggedPanelId:Xe,dockPanelToGroup:qe,movePanelOrder:Le,closeLeafGroup:Ce,registerCloseGuard:we,unregisterCloseGuard:ee,setPanelDirty:Pe,updatePanelTitle:oe,requestClosePanel:se,dockPanelToWorkspaceEdge:Ke,setActivePanel:Ze,setDirection:a}),[ne,ye,$e,Ee,Re,Ge,Ue,je,Je,pe,b,g,Ae,Ve,Y,N,Xe,qe,Le,Ce,we,ee,Pe,oe,se,Ke,Ze,a]),O=e=>{let r=e.defaultMessage||e.id;return e.values&&Object.entries(e.values).forEach(([n,s])=>{r=r.replace(`{${n}}`,String(s))}),r},U=(0,m.useMemo)(()=>({modalClass:x,modalBodyClass:_,sidePanelClass:A,sidePanelBodyClass:k,windowClass:S,windowBodyClass:F}),[x,_,A,k,S,F]);(0,m.useEffect)(()=>{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(s=>s.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"`)},[]),(0,m.useEffect)(()=>{if(t)return t._connect(L),()=>{t._disconnect()}},[t,L]);let j=(0,m.useMemo)(()=>({getSnapshot:h,subscribeToState:H}),[h,H]);return(0,Se.jsx)(Tt.Provider,{value:U,children:(0,Se.jsx)(Et.Provider,{value:f,children:(0,Se.jsx)(St.Provider,{value:j,children:(0,Se.jsx)(Rt.Provider,{value:W,children:(0,Se.jsx)(ft.Provider,{value:L,children:(0,Se.jsx)(kt.Provider,{value:z||O,children:(0,Se.jsx)(It.Provider,{value:P,children:i})})})})})})})},ln=i=>()=>{};function be(i){let t=(0,m.useContext)(Rt),o=(0,m.useContext)(St),c=(0,m.useRef)(i);c.current=i;let R=(0,m.useSyncExternalStore)(o?.subscribeToState??ln,()=>{let x=o?.getSnapshot()??t;return c.current?c.current(x):x},()=>{let x=o?.getSnapshot()??t;return c.current?c.current(x):x});if(!t)throw new Error("useWindowManagerState must be used within WindowManagerProvider");return i?R:t}var De=()=>{let i=(0,m.useContext)(ft);if(!i)throw new Error("useWindowManagerActions must be used within WindowManagerProvider");return i},mt=()=>{let i=(0,m.useContext)(ft);if(!i)throw new Error("useWindowManagerActionsInternal must be used within WindowManagerProvider");return i},fe=()=>(0,m.useContext)(kt)||(t=>{let o=t.defaultMessage||t.id;return t.values&&Object.entries(t.values).forEach(([c,R])=>{o=o.replace(`{${c}}`,String(R))}),o}),q=(i,t)=>i?typeof i=="string"?i:t(i):"",zt=()=>{let{publish:i,subscribe:t}=De();return{publish:i,subscribe:t}},he=()=>(0,m.useContext)(It),Lt=()=>We().instanceId;function Wt(i){if(!i)return typeof document<"u"?document.documentElement.dir?.toLowerCase()==="rtl"||document.body.dir?.toLowerCase()==="rtl":!1;let t=i.closest("[dir]");return t?t.getAttribute("dir")?.toLowerCase()==="rtl":document.documentElement.dir?.toLowerCase()==="rtl"||document.body.dir?.toLowerCase()==="rtl"}var Ft=require("replace-react-contexify"),Bn=require("replace-react-contexify/styles.css");var J=require("react"),yt=require("react/jsx-runtime"),dn=0,ht=()=>`panel-${++dn}-${Date.now()}`,rt=new Map,Nt={leftPanel:null,rightPanel:null,modals:[]},Ot=(0,J.createContext)(null),Dt=(0,J.createContext)(null),at=({children:i})=>{let[t,o]=(0,J.useState)(Nt),c=(0,J.useRef)(t);c.current=t;let R=(0,J.useCallback)((u,v)=>{rt.set(u,v)},[]),x=(0,J.useCallback)(u=>{rt.delete(u)},[]),_=(0,J.useCallback)(async(u,v,y={})=>{let h=c.current.leftPanel;if(h){let P=rt.get(h.id);if(P&&!await P())return null}let H=ht(),G={id:H,Component:u,props:v,containerType:"left-panel",options:y};return o(P=>({...P,leftPanel:G})),H},[]),A=(0,J.useCallback)(async(u,v,y={})=>{let h=c.current.rightPanel;if(h){let P=rt.get(h.id);if(P&&!await P())return null}let H=ht(),G={id:H,Component:u,props:v,containerType:"right-panel",options:y};return o(P=>({...P,rightPanel:G})),H},[]),k=(0,J.useCallback)((u,v,y={})=>{let h=ht(),H=v.title,G={...y,title:y.title||H||"Confirmation"},P={id:h,Component:u,props:v,containerType:"modal",options:G};return o(T=>({...T,modals:[...T.modals,P]})),h},[]),S=(0,J.useCallback)(u=>{o(v=>({leftPanel:v.leftPanel?.id===u?null:v.leftPanel,rightPanel:v.rightPanel?.id===u?null:v.rightPanel,modals:v.modals.filter(y=>y.id!==u)}))},[]),F=(0,J.useCallback)(()=>{o(Nt)},[]),f=(0,J.useCallback)(()=>{o(u=>({...u,modals:[]}))},[]),z=(0,J.useCallback)(u=>t.leftPanel?.id===u?t.leftPanel:t.rightPanel?.id===u?t.rightPanel:t.modals.find(v=>v.id===u),[t]),w=(0,J.useCallback)((u,v)=>{o(y=>({leftPanel:y.leftPanel?.id===u?{...y.leftPanel,...v}:y.leftPanel,rightPanel:y.rightPanel?.id===u?{...y.rightPanel,...v}:y.rightPanel,modals:y.modals.map(h=>h.id===u?{...h,...v}:h)}))},[]),I=(0,J.useCallback)((u,v,y)=>{w(u,{dirty:v,dirtyOptions:y})},[w]),W=(0,J.useMemo)(()=>({openLeftPanel:_,openRightPanel:A,openModal:k,close:S,closeAll:F,closeAllModals:f,getInstance:z,updateInstance:w,setDirty:I,registerCloseHandler:R,unregisterCloseHandler:x}),[_,A,k,S,F,f,z,w,I,R,x]);return(0,yt.jsx)(Ot.Provider,{value:t,children:(0,yt.jsx)(Dt.Provider,{value:W,children:i})})},Me=()=>{let i=(0,J.useContext)(Ot);if(!i)throw new Error("usePanelState must be used within PanelProvider");return i},Ie=()=>{let i=(0,J.useContext)(Dt);if(!i)throw new Error("usePanelActions must be used within PanelProvider");return i};var _e=require("react");var ve=require("react/jsx-runtime"),cn=({title:i,message:t,alert:o,alertType:c="info",useYesNoTitles:R=!1,onOK:x,onCancel:_})=>{let{requestClose:A,setIcon:k,setTitle:S}=We(),F=fe(),f=he(),z=(0,_e.useRef)(null);(0,_e.useEffect)(()=>{if(i){let y=typeof i=="string"?i:F(i);S(y)}k&&k((0,ve.jsx)("span",{children:"\u2753"}))},[i,S,k,F]),(0,_e.useEffect)(()=>{z.current?.focus()},[]);let w=typeof t=="string"?t:F(t),I=F(R?f.no:f.cancel),W=F(R?f.yes:f.ok),u=y=>{y.preventDefault(),x?.(),A()},v=()=>{_?.(),A()};return(0,ve.jsxs)("form",{onSubmit:u,className:"confirmation-form-body",children:[o&&(0,ve.jsxs)("div",{className:`confirmation-alert confirmation-alert-${c}`,children:[(0,ve.jsx)("span",{children:"\u2139\uFE0F"}),(0,ve.jsx)("span",{children:o})]}),(0,ve.jsx)("div",{style:{fontSize:"0.9rem",color:"inherit",lineHeight:1.5},children:w}),(0,ve.jsx)("hr",{style:{marginTop:"0.5rem",marginBottom:"0.5rem",opacity:.1}}),(0,ve.jsxs)("div",{className:"confirmation-actions",children:[(0,ve.jsx)("button",{type:"button",className:"dw-btn dw-btn-sm dw-btn-outline",onClick:v,children:I}),(0,ve.jsx)("button",{type:"submit",className:"dw-btn dw-btn-sm dw-btn-primary",ref:z,children:W})]})]})},Te=cn;var d=require("react/jsx-runtime"),He=new Map,dt="preserved-dom-container",vt=(0,d.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:[(0,d.jsx)("rect",{x:"3",y:"3",width:"7",height:"9",rx:"1"}),(0,d.jsx)("rect",{x:"14",y:"3",width:"7",height:"5",rx:"1"}),(0,d.jsx)("rect",{x:"14",y:"12",width:"7",height:"9",rx:"1"}),(0,d.jsx)("rect",{x:"3",y:"16",width:"7",height:"5",rx:"1"})]}),At=i=>{let t=He.get(i);return t||(t=document.createElement("div"),t.style.width="100%",t.style.height="100%",He.set(i,t)),t},un=(i,t,o)=>{let c=o.get(t);if(!c)return console.warn(`[react-dockable-desktop] Panel "${i}" references component key "${t}" which is not registered. Add it to the WorkspaceClient panels config:
3
+ new WorkspaceClient({ panels: { "${t}": { component: YourComponent } } })`),(0,d.jsxs)("div",{className:"dw-unregistered-panel",style:{border:"2px dashed #dc3545"},children:[(0,d.jsx)("h6",{style:{fontWeight:700,marginBottom:"0.25rem"},children:"\u26A0\uFE0F Component Unregistered"}),(0,d.jsxs)("span",{style:{fontSize:"0.875rem",color:"var(--text-secondary, #94a3b8)"},children:["Key: ",t]})]});let R=c.Component;return(0,d.jsx)(R,{panelId:i})},Bt=new Map,Fe=new Map,lt=i=>{let t=Fe.get(i);return t||(t={onClose:new Set,onMinimize:new Set,onRestore:new Set,onResize:new Set},Fe.set(i,t)),t},_t=({panelId:i})=>{let t=(0,D.useRef)(null);return(0,D.useEffect)(()=>{let o=t.current;if(!o)return;let c=At(i);o.appendChild(c);let R=new ResizeObserver(x=>{for(let _ of x){let{width:A,height:k}=_.contentRect;if(A>0&&k>0){Bt.set(i,{width:A,height:k});let S=Fe.get(i);S&&S.onResize.forEach(F=>F(A,k))}}});return R.observe(o),()=>{R.disconnect();let x=document.getElementById(dt);x||(x=document.createElement("div"),x.id=dt,x.style.display="none",document.body.appendChild(x)),x.appendChild(c)}},[i]),(0,d.jsx)("div",{ref:t,style:{width:"100%",height:"100%"}})},gn=({panelId:i})=>{let t=be(),o=Oe(),c=fe(),R=(0,D.useRef)(null),x=t.panels[i],_=x?o.get(x.component):null,A=_?.defaultOptions?.disableLivePreview||!1,k=Bt.get(i)||{width:800,height:500},S=k.width,F=k.height,w=Math.min(220/S,140/F);if((0,D.useEffect)(()=>{if(A)return;let I=R.current;if(!I)return;let W=He.get(i);if(W)return I.appendChild(W),()=>{let u=document.getElementById(dt);u||(u=document.createElement("div"),u.id=dt,u.style.display="none",document.body.appendChild(u)),u.appendChild(W)}},[i,A]),A){let I=S*w,W=F*w,u=x?.title||_?.defaultOptions?.title||"Panel",v=q(u,c),y=(Array.from(v)[0]||"P").toUpperCase();return(0,d.jsx)("div",{className:"taskbar-item-preview-frame",style:{width:`${I}px`,height:`${W}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:(0,d.jsx)("div",{style:{fontSize:"2rem",fontWeight:600,color:"var(--panel-title-color, var(--panel-text, rgba(255, 255, 255, 0.85)))",userSelect:"none"},children:y})})}return(0,d.jsx)("div",{className:"taskbar-item-preview-frame",style:{width:`${S*w}px`,height:`${F*w}px`},children:(0,d.jsx)("div",{ref:R,className:"taskbar-item-preview-host",style:{width:`${S}px`,height:`${F}px`,transform:`scale(${w})`,transformOrigin:"top left",position:"absolute",top:0,left:0,"--preview-scale":w}})})},pn=({panelId:i,children:t})=>{let o=be(),{requestClosePanel:c,setPanelDirty:R,registerCloseGuard:x,unregisterCloseGuard:_,updatePanelTitle:A}=De(),k=o.minimized.some(f=>f.id===i),S=(0,D.useRef)(k);(0,D.useEffect)(()=>{let f=Fe.get(i);f&&(k&&!S.current?f.onMinimize.forEach(z=>z()):!k&&S.current&&f.onRestore.forEach(z=>z()),S.current=k)},[k,i]),(0,D.useEffect)(()=>()=>{let f=Fe.get(i);f&&(f.onClose.forEach(z=>z()),Fe.delete(i))},[i]);let F=D.default.useMemo(()=>({requestClose:f=>c(i,f),setDirty:f=>R(i,f),onCloseRequested:f=>(x(i,f),()=>_(i)),setTitle:f=>A(i,f),instanceId:i,onClose:f=>{let z=lt(i);return z.onClose.add(f),()=>z.onClose.delete(f)},onMinimize:f=>{let z=lt(i);return z.onMinimize.add(f),()=>z.onMinimize.delete(f)},onRestore:f=>{let z=lt(i);return z.onRestore.add(f),()=>z.onRestore.delete(f)},onResize:f=>{let z=lt(i);return z.onResize.add(f),()=>z.onResize.delete(f)}}),[i,c,R,x,_,A]);return(0,d.jsx)(ke,{value:F,children:t})},Ht=({node:i,path:t,onTabRightClick:o,activeDropZone:c,onHoverDropZone:R,onTabDragStart:x,hoveredTab:_,onTabHover:A,defaultPanelIcon:k,onRequestClosePanel:S})=>{let{updateSplitSizes:F}=De();if(i.type==="leaf")return(0,d.jsx)(fn,{leaf:i,onTabRightClick:o,activeDropZone:c,onHoverDropZone:R,onTabDragStart:x,hoveredTab:_,onTabHover:A,defaultPanelIcon:k,onRequestClosePanel:S});let f=i.orientation==="horizontal",z=(w,I)=>{I.preventDefault();let W=f?I.clientX:I.clientY,u=[...i.sizes],v=I.currentTarget;v.classList.add("active"),document.body.classList.add("resizing-active",f?"resizing-row-active":"resizing-col-active");let y=I.currentTarget.parentElement,h=y?f?y.clientWidth:y.clientHeight:f?1e3:800,H=P=>{let N=((f?P.clientX:P.clientY)-W)/h,Y=[...u];Y[w]+=N,Y[w+1]-=N,Y[w]>.1&&Y[w+1]>.1&&F(t,Y)},G=()=>{v.classList.remove("active"),document.body.classList.remove("resizing-active","resizing-row-active","resizing-col-active"),window.removeEventListener("mousemove",H),window.removeEventListener("mouseup",G)};window.addEventListener("mousemove",H),window.addEventListener("mouseup",G)};return(0,d.jsx)("div",{style:{display:"flex",flexDirection:f?"row":"column",width:"100%",height:"100%",overflow:"hidden",position:"relative"},children:i.children.map((w,I)=>{let W=i.sizes[I]*100;return(0,d.jsxs)(D.default.Fragment,{children:[(0,d.jsx)("div",{style:{flexGrow:i.sizes[I],flexBasis:`${W}%`,overflow:"hidden",position:"relative"},children:(0,d.jsx)(Ht,{node:w,path:[...t,I],onTabRightClick:o,activeDropZone:c,onHoverDropZone:R,onTabDragStart:x,hoveredTab:_,onTabHover:A,defaultPanelIcon:k,onRequestClosePanel:S})}),I<i.children.length-1&&(0,d.jsx)("div",{onMouseDown:u=>z(I,u),style:{cursor:f?"col-resize":"row-resize",width:f?"1px":"100%",height:f?"100%":"1px",zIndex:20},className:"resizer-bar"})]},I)})})},fn=({leaf:i,onTabRightClick:t,activeDropZone:o,onHoverDropZone:c,onTabDragStart:R,hoveredTab:x,onTabHover:_,defaultPanelIcon:A,onRequestClosePanel:k})=>{let S=be(),F=Oe(),{openPanel:f,closeLeafGroup:z,setActivePanel:w}=mt(),I=fe(),W=he(),{windowClass:u,windowBodyClass:v}=xe(),y=h=>{f(h,S.panels[h].component),w(h)};return(0,d.jsxs)("div",{"data-active-panel-id":i.activePanelId||"",className:`workspace-panel ${u??""}`,style:{overflow:"hidden",position:"relative"},children:[(0,d.jsxs)("div",{className:"workspace-tab-bar",style:{minHeight:"38px"},children:[(0,d.jsx)("div",{className:"tab-headers-container",style:{scrollbarWidth:"none"},onMouseMove:h=>{S.draggedPanelId&&h.target===h.currentTarget&&_(i.id,"EMPTY",i.panels.length,"right")},onMouseLeave:h=>{S.draggedPanelId&&h.target===h.currentTarget&&_(i.id,"",-1,null)},children:i.panels.map((h,H)=>{let G=S.panels[h];if(!G)return null;let P=i.activePanelId===h,T=S.activePanelId===h,N=F.get(G.component)?.defaultOptions,Y=x&&x.leafId===i.id&&x.panelId===h,X=H===i.panels.length-1,pe=x&&x.leafId===i.id&&x.panelId==="EMPTY"&&X,ie=Y?x.side==="left"?"drag-hover-left":"drag-hover-right":pe?"drag-hover-right":"";return(0,d.jsxs)("div",{onClick:()=>y(h),onMouseDown:K=>{N?.canDrag!==!1&&R(h,K)},onContextMenu:K=>t(h,K),onMouseMove:K=>{if(S.draggedPanelId){let ne=K.currentTarget.getBoundingClientRect(),we=K.clientX-ne.left<ne.width/2?"left":"right";_(i.id,h,H,we)}},onMouseLeave:()=>{S.draggedPanelId&&_(i.id,"",-1,null)},className:`workspace-tab ${P?T?"active workspace-tab-active-focused":"active workspace-tab-active-unfocused":"workspace-tab-inactive"} ${ie}`,style:{cursor:N?.canDrag===!1?"default":"pointer"},children:[(0,d.jsxs)("span",{className:"text-truncate",style:{maxWidth:"120px",display:"flex",alignItems:"center"},children:[(0,d.jsx)("span",{className:"workspace-tab-icon",children:N?.icon||A||vt}),(0,d.jsxs)("span",{children:[q(G.title,I),G.dirty?" *":""]})]}),N?.renderHeaderActions&&(0,d.jsx)("span",{className:"tab-header-actions",onClick:K=>K.stopPropagation(),onMouseDown:K=>K.stopPropagation(),children:N.renderHeaderActions(h)}),N?.canClose!==!1&&(0,d.jsx)("span",{onClick:K=>{K.stopPropagation(),k(h)},title:q(W.closeTab,I),className:"close-tab-x",style:{width:"18px",height:"18px",...N?.renderHeaderActions?{}:{marginInlineStart:"auto"}},children:(0,d.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:(0,d.jsx)("path",{d:"M18 6L6 18M6 6l12 12"})})})]},h)})}),i.panels.length===0&&i.keepOnEmpty&&i.canClose!==!1&&(0,d.jsx)("span",{onClick:()=>z(i.id),className:"close-tab-x header-close-empty-group",style:{width:"18px",height:"18px",cursor:"pointer"},title:q(W.closeEmptyGroup,I),children:(0,d.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:(0,d.jsx)("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),(0,d.jsxs)("div",{className:`dw-panel-body ${v??""}`,style:{position:"relative",overflow:"hidden"},children:[i.activePanelId&&S.panels[i.activePanelId]?(0,d.jsx)(_t,{panelId:i.activePanelId},i.activePanelId):(0,d.jsx)("div",{className:"empty-leaf-placeholder",children:(0,d.jsx)("span",{children:"Empty Workspace Section"})}),S.draggedPanelId!==null&&(0,d.jsx)("div",{className:"dock-drop-zone-overlay",children:(0,d.jsxs)("div",{className:"dock-target-cross",children:[(0,d.jsx)("div",{onMouseEnter:()=>c(i.id,"top"),onMouseLeave:()=>c(i.id,null),className:"dock-target-box dock-target-top",children:"\u25B2"}),(0,d.jsx)("div",{onMouseEnter:()=>c(i.id,"bottom"),onMouseLeave:()=>c(i.id,null),className:"dock-target-box dock-target-bottom",children:"\u25BC"}),(0,d.jsx)("div",{onMouseEnter:()=>c(i.id,"left"),onMouseLeave:()=>c(i.id,null),className:"dock-target-box dock-target-left",children:"\u25C0"}),(0,d.jsx)("div",{onMouseEnter:()=>c(i.id,"right"),onMouseLeave:()=>c(i.id,null),className:"dock-target-box dock-target-right",children:"\u25B6"}),(0,d.jsx)("div",{onMouseEnter:()=>c(i.id,"center"),onMouseLeave:()=>c(i.id,null),className:"dock-target-box dock-target-center",children:"\u25A3"})]})}),S.draggedPanelId!==null&&o!==null&&o.leafId===i.id&&(0,d.jsx)("div",{className:"dock-preview-highlight",style:{left:o.position==="right"?"50%":"0",top:o.position==="bottom"?"50%":"0",width:o.position==="left"||o.position==="right"?"50%":"100%",height:o.position==="top"||o.position==="bottom"?"50%":"100%"}})]})]})},mn=({skin:i="vscode",defaultPanelIcon:t})=>{let o=be(),c=Oe(),{restorePanel:R,minimizePanel:x,requestClosePanel:_,maximizePanel:A,updateFloatingPosition:k,focusPanel:S,floatPanel:F,setDraggedPanelId:f,dockPanelToGroup:z,movePanelOrder:w,dockPanelToWorkspaceEdge:I,setActivePanel:W,setDirection:u}=mt(),{openModal:v}=Ie(),y=fe(),h=he(),H=D.default.useCallback(a=>{let b=o.panels[a];_(a,{onConfirm:g=>new Promise(L=>{let O=g||b?.dirtyOptions,U=b?q(b.title,y):"Panel";v(Te,{title:O?.title||h.unsavedChangesTitle,message:O?.message||{id:h.unsavedChangesMessage.id,defaultMessage:h.unsavedChangesMessage.defaultMessage,values:{title:U}},alert:O?.alert,alertType:O?.alertType||"danger",useYesNoTitles:!0,onOK:()=>L(!0),onCancel:()=>L(!1)},{size:"small"})})})},[_,o.panels,y,v,h]),{windowClass:G,windowBodyClass:P}=xe(),T=(0,D.useRef)(null),B=(0,D.useRef)(null),[N,Y]=(0,D.useState)(null),X=(0,D.useRef)(null),[pe,ie]=(0,D.useState)(!1);(0,D.useEffect)(()=>()=>{X.current&&clearTimeout(X.current)},[]),(0,D.useEffect)(()=>{N&&(o.minimized.some(b=>b.id===N.id)||Y(null))},[o.minimized,N]);let[ue,K]=(0,D.useState)(null),ne=(0,D.useRef)(null),[ye,we]=(0,D.useState)({x:0,y:0}),[ee,Pe]=(0,D.useState)(null),oe=(0,D.useRef)(null),se=a=>{Pe(a),oe.current=a},[$e,Ee]=(0,D.useState)(null),Re=(0,D.useRef)(null),Ge=(a,b,g,L)=>{let O=L?{leafId:a,panelId:b,index:g,side:L}:null;Ee(O),Re.current=O},Ye=(a,b)=>{let g=b?{leafId:a,position:b}:null;K(g),ne.current=g},Xe=(a,b)=>{if(b.button!==0)return;let g=b.clientX,L=b.clientY,O=!1,U=r=>{let n=r.clientX-g,s=r.clientY-L;!O&&(Math.abs(n)>5||Math.abs(s)>5)&&(O=!0,f(a)),O&&we({x:r.clientX,y:r.clientY})},j=r=>{if(window.removeEventListener("mousemove",U),window.removeEventListener("mouseup",e),O){let n=ne.current,s=Re.current,l=oe.current;if(l)I(a,l);else if(s){let p=s.index;s.side==="right"&&(p+=1),w(a,s.leafId,p)}else n?z(a,n.leafId,n.position):F(a,{x:r.clientX-150,y:r.clientY-15,width:450,height:350});f(null),K(null),ne.current=null,Ee(null),Re.current=null,se(null)}},e=r=>{j(r)};window.addEventListener("mousemove",U),window.addEventListener("mouseup",e)},qe=(a,b)=>{b.preventDefault();let g=o.panels[a];if(!g)return;let O=c.get(g.component)?.defaultOptions,U=[];O?.canDrag!==!1&&U.push({label:q(h.floatWindow,y),action:()=>F(a)}),O?.canMinimize!==!1&&U.push({label:q(h.minimizePanel,y),action:()=>x(a)}),U.length>0&&O?.canClose!==!1&&U.push({separator:!0}),O?.canClose!==!1&&U.push({label:q(h.closeTab,y),action:()=>H(a)}),U.length!==0&&B.current?.show({event:b,contextMenu:{items:U}})},Ke=(a,b)=>{b.preventDefault(),Y(null),B.current?.show({event:b,contextMenu:{items:[{label:q(h.restorePanel,y),action:()=>R(a)},{label:q(h.maximizePanel,y),action:()=>A(a)},{separator:!0},{label:q(h.closePanel,y),action:()=>H(a)}]}})};(0,D.useEffect)(()=>{let a=Object.keys(o.panels);for(let b of Array.from(He.keys()))a.includes(b)||He.delete(b)},[o.panels]),(0,D.useEffect)(()=>{let a=()=>{o.draggedPanelId!==null&&(f(null),K(null),Ee(null))};return window.addEventListener("blur",a),()=>{window.removeEventListener("blur",a)}},[o.draggedPanelId]);let Le=(0,D.useRef)(null),[Ce,Ue]=(0,D.useState)({width:1024,height:768});(0,D.useEffect)(()=>{let a=Le.current;if(!a)return;let b=new ResizeObserver(g=>{if(!g||g.length===0)return;let L=g[0].contentRect;process.env.NODE_ENV==="development"&&L.height<10&&console.warn("[react-dockable-desktop] Workspace height is near zero. Add: html, body, #root { height: 100%; overflow: hidden; }"),Ue({width:Math.max(100,L.width),height:Math.max(100,L.height)})});return b.observe(a),()=>{b.disconnect()}},[]),(0,D.useEffect)(()=>{let a=Le.current;if(!a)return;let b=()=>{let O=Wt(a);u(O?"rtl":"ltr")};b();let g=new MutationObserver(b);g.observe(document.documentElement,{attributes:!0,attributeFilter:["dir"]}),g.observe(document.body,{attributes:!0,attributeFilter:["dir"]});let L=a.closest("[dir]");return L&&L!==document.documentElement&&L!==document.body&&g.observe(L,{attributes:!0,attributeFilter:["dir"]}),()=>{g.disconnect()}},[u]),(0,D.useEffect)(()=>{let a=Ce.width,b=Ce.height;o.floating.forEach(g=>{let L=typeof g.width=="string"?parseFloat(g.width):g.width,O=typeof g.height=="string"?parseFloat(g.height):g.height,U=typeof g.x=="string"?parseFloat(g.x):g.x,j=typeof g.y=="string"?parseFloat(g.y):g.y,e=L,r=O,n=U,s=j,l=!1;e>a&&(e=Math.max(200,a-20),l=!0),r>b&&(r=Math.max(150,b-40),l=!0);let p=10;if(g.stickyRight)n=a-e-p,l=!0;else{let C=a-100;n>C&&(n=Math.max(0,C),l=!0)}if(g.stickyBottom)s=b-r-p,l=!0;else{let C=b-40;s>C&&(s=Math.max(0,C),l=!0)}l&&k(g.id,{x:n,y:s,width:e,height:r})})},[Ce,o.floating,k]),(0,D.useEffect)(()=>{let a=b=>{if(b.button!==0)return;let g=b.target;if(!g)return;let L=g.closest(".floating-window");if(L){let U=L.getAttribute("data-window-id");U&&(W(U),S(U));return}let O=g.closest(".workspace-panel");if(O){let U=O.getAttribute("data-active-panel-id");U&&W(U)}};return document.addEventListener("mousedown",a),()=>{document.removeEventListener("mousedown",a)}},[S,W]);let je=(a,b)=>{let g=o.floating.find(p=>p.id===a);if(!g||g.maximized)return;S(a);let L=b.clientX,O=b.clientY,j=b.currentTarget.closest(".floating-window"),e=j?j.offsetLeft:0,r=j?j.offsetTop:0,n=!1,s=p=>{let C=p.clientX-L,E=p.clientY-O;if(!n&&(Math.abs(C)>5||Math.abs(E)>5)&&(n=!0,f(a)),n){let M=e+C,$=r+E;k(a,{x:M,y:$,stickyRight:!1,stickyBottom:!1})}},l=()=>{if(n){let p=ne.current,C=Re.current,E=oe.current;if(E)I(a,E);else if(C){let M=C.index;C.side==="right"&&(M+=1),w(a,C.leafId,M)}else p&&z(a,p.leafId,p.position);f(null),K(null),ne.current=null,Ee(null),Re.current=null,se(null)}window.removeEventListener("mousemove",s),window.removeEventListener("mouseup",l)};window.addEventListener("mousemove",s),window.addEventListener("mouseup",l)},Je=(a,b)=>{b.stopPropagation();let g=o.floating.find(l=>l.id===a);if(!g||g.maximized)return;S(a);let L=b.clientX,O=b.clientY,j=b.currentTarget.closest(".floating-window"),e=j?j.offsetWidth:400,r=j?j.offsetHeight:300,n=l=>{let p=l.clientX-L,C=l.clientY-O,E=Math.max(200,e+p),M=Math.max(150,r+C),$=g.x,V=g.y,Z=Ce.width,me=Ce.height,Q=typeof g.x=="string"?parseFloat(g.x):g.x,ae=typeof g.y=="string"?parseFloat(g.y):g.y,Qe=typeof g.width=="string"?parseFloat(g.width):g.width,gt=typeof g.height=="string"?parseFloat(g.height):g.height,et=Math.abs(Q+Qe-Z)<4,tt=Math.abs(ae+gt-me)<4;et&&($=Z-E,$<0&&($=0,E=Z)),tt&&(V=me-M,V<0&&(V=0,M=me)),k(a,{x:$,y:V,width:E,height:M,stickyRight:et,stickyBottom:tt})},s=()=>{window.removeEventListener("mousemove",n),window.removeEventListener("mouseup",s)};window.addEventListener("mousemove",n),window.addEventListener("mouseup",s)},Ae=a=>{if(T.current){let b=a==="left"?-150:150;T.current.scrollBy({left:b,behavior:"smooth"})}},[Ve,Ze]=(0,D.useState)("dark");return(0,D.useEffect)(()=>{let a=()=>{let g=document.documentElement.getAttribute("data-color-scheme")==="light"?"light":"dark";Ze(g)};a();let b=new MutationObserver(a);return b.observe(document.documentElement,{attributes:!0,attributeFilter:["data-color-scheme"]}),()=>b.disconnect()},[]),(0,d.jsxs)("div",{"data-workspace-skin":i,"data-color-scheme":Ve,style:{display:"flex",flexDirection:"column",width:"100%",height:"100%",overflow:"hidden",userSelect:"none"},dir:o.dir,children:[(0,d.jsxs)("div",{ref:Le,className:o.draggedPanelId?"dragging-active":void 0,style:{flexGrow:1,width:"100%",position:"relative",overflow:"hidden"},children:[o.draggedPanelId!==null&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("div",{className:"workspace-edge-trigger edge-trigger-left",onMouseEnter:()=>se("left"),onMouseLeave:()=>se(null)}),(0,d.jsx)("div",{className:"workspace-edge-trigger edge-trigger-right",onMouseEnter:()=>se("right"),onMouseLeave:()=>se(null)}),(0,d.jsx)("div",{className:"workspace-edge-trigger edge-trigger-top",onMouseEnter:()=>se("top"),onMouseLeave:()=>se(null)}),(0,d.jsx)("div",{className:"workspace-edge-trigger edge-trigger-bottom",onMouseEnter:()=>se("bottom"),onMouseLeave:()=>se(null)})]}),o.draggedPanelId!==null&&ee!==null&&(0,d.jsx)("div",{className:`workspace-edge-preview edge-preview-${ee}`}),(0,d.jsx)("div",{style:{width:"100%",height:"100%",overflow:"hidden",position:"relative"},children:o.gridRoot?(0,d.jsx)(Ht,{node:o.gridRoot,path:[],onTabRightClick:qe,activeDropZone:ue,onHoverDropZone:Ye,onTabDragStart:Xe,hoveredTab:$e,onTabHover:Ge,defaultPanelIcon:t,onRequestClosePanel:H}):(0,d.jsx)("div",{className:"empty-workspace-grid",children:"Grid Empty"})}),o.floating.map(a=>{let b=o.panels[a.id];if(!b)return null;let g=a.maximized,L=o.draggedPanelId===a.id,O=o.activePanelId===a.id,j=c.get(b.component)?.defaultOptions;return(0,d.jsxs)("div",{"data-window-id":a.id,dir:o.dir,onMouseDownCapture:()=>{W(a.id),S(a.id)},className:`floating-window ${g?"maximized":""} ${O?"v2-window-focused":""} ${G??""}`,style:{position:"absolute",left:g?0:typeof a.x=="number"?`${a.x}px`:a.x,top:g?0:typeof a.y=="number"?`${a.y}px`:a.y,width:g?"100%":typeof a.width=="number"?`${a.width}px`:a.width,height:g?"100%":typeof a.height=="number"?`${a.height}px`:a.height,zIndex:a.z,pointerEvents:L?"none":"auto"},children:[(0,d.jsxs)("div",{onDoubleClick:()=>A(a.id),onMouseDown:e=>{j?.canDrag!==!1&&je(a.id,e)},className:"floating-window-titlebar cursor-move",style:{cursor:g||j?.canDrag===!1?"default":"move"},children:[(0,d.jsxs)("span",{className:"floating-window-title",children:[(0,d.jsx)("span",{className:"window-title-icon",children:j?.icon||t||vt}),(0,d.jsxs)("span",{children:[q(b.title,y),b.dirty?" *":""]})]}),(0,d.jsxs)("div",{className:"fw-titlebar-actions",style:{gap:"var(--header-button-gap, 4px)"},onMouseDown:e=>e.stopPropagation(),children:[j?.renderHeaderActions&&(0,d.jsx)("div",{className:"window-header-actions",children:j.renderHeaderActions(a.id)}),j?.canDrag!==!1&&(0,d.jsx)("button",{type:"button",title:q(h.windowAnchoringOptions,y),onClick:e=>{let r=!!a.stickyRight,n=!!a.stickyBottom;B.current?.show({event:e,contextMenu:{items:[{label:q(h.anchorToRightEdge,y),checkbox:{active:!0,enabled:!0,value:r},action:()=>{let s=Ce.width,l=typeof a.width=="string"?parseFloat(a.width):a.width;r?k(a.id,{stickyRight:!1}):k(a.id,{x:s-l-10,stickyRight:!0})}},{label:q(h.anchorToBottomEdge,y),checkbox:{active:!0,enabled:!0,value:n},action:()=>{let s=Ce.height,l=typeof a.height=="string"?parseFloat(a.height):a.height;n?k(a.id,{stickyBottom:!1}):k(a.id,{y:s-l-10,stickyBottom:!0})}}]}})},className:"custom-tab-btn btn-anchor-tab",children:(0,d.jsxs)("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:[(0,d.jsx)("circle",{cx:"12",cy:"5",r:"2"}),(0,d.jsx)("path",{d:"M12 7v7m0 0a4 4 0 0 1-4-4M12 14a4 4 0 0 0 4-4M5 18h14"})]})}),(0,d.jsx)("button",{type:"button",title:g?q(h.restoreSize,y):q(h.maximize,y),onClick:()=>A(a.id),className:"custom-tab-btn btn-maximize-tab",children:(0,d.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:(0,d.jsx)("rect",{x:"4",y:"4",width:"16",height:"16",rx:"1.5"})})}),j?.canMinimize!==!1&&(0,d.jsx)("button",{type:"button",title:q(h.minimize,y),onClick:()=>x(a.id),className:"custom-tab-btn btn-minimize-tab",children:(0,d.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:(0,d.jsx)("path",{d:"M5 12h14"})})}),j?.canClose!==!1&&(0,d.jsx)("button",{type:"button",title:q(h.close,y),onClick:()=>H(a.id),className:"custom-tab-btn btn-close-tab",children:(0,d.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:(0,d.jsx)("path",{d:"M18 6L6 18M6 6l12 12"})})})]})]}),(0,d.jsx)("div",{className:P??void 0,style:{flexGrow:1,width:"100%",overflow:"hidden",position:"relative",isolation:"isolate"},children:(0,d.jsx)(_t,{panelId:a.id},a.id)}),!g&&(0,d.jsx)("div",{onMouseDown:e=>Je(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)})]}),o.minimized.length>0&&(0,d.jsxs)("div",{className:"taskbar-footer-container",style:{height:"48px",zIndex:100},children:[(0,d.jsx)("button",{type:"button",onClick:()=>Ae("left"),className:"taskbar-nav-btn",style:{display:o.minimized.length>4?"block":"none"},children:"\u25C0"}),(0,d.jsx)("div",{ref:T,className:"taskbar-items-container",style:{scrollSnapType:"x mandatory"},children:o.minimized.map(a=>{let g=c.get(a.component)?.defaultOptions?.icon||t||vt;return(0,d.jsx)("div",{onClick:()=>{Y(null),R(a.id)},onContextMenu:L=>Ke(a.id,L),onMouseEnter:L=>{if(pe)return;X.current&&clearTimeout(X.current);let O=L.currentTarget.getBoundingClientRect();L.clientX>=O.left&&L.clientX<=O.right&&L.clientY>=O.top&&L.clientY<=O.bottom&&Y({id:a.id,rect:O,title:a.title,component:a.component})},onMouseLeave:()=>{X.current=setTimeout(()=>{Y(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:(0,d.jsx)("span",{className:"taskbar-item-icon",children:g})},a.id)})}),N&&(0,Pt.createPortal)((0,d.jsxs)("div",{className:"taskbar-item-tooltip",dir:o.dir,style:{position:"fixed",left:`${N.rect.left+N.rect.width/2}px`,top:`${N.rect.top-8}px`,transform:"translateX(-50%) translateY(-100%)",opacity:1,pointerEvents:"auto",zIndex:999999},onMouseEnter:()=>{X.current&&clearTimeout(X.current)},onMouseLeave:()=>{Y(null)},onClick:()=>{R(N.id),Y(null)},children:[(0,d.jsxs)("div",{className:"tooltip-header-row",children:[(0,d.jsxs)("span",{className:"tooltip-title-text text-truncate",style:{maxWidth:"140px"},children:[q(N.title,y),o.panels[N.id]?.dirty?" *":""]}),(0,d.jsx)("span",{onClick:a=>{a.stopPropagation(),H(N.id),Y(null)},title:q(h.closePanel,y),className:"tooltip-close-x",children:(0,d.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:(0,d.jsx)("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),(0,d.jsx)(gn,{panelId:N.id})]}),document.body),(0,d.jsx)("button",{type:"button",onClick:()=>Ae("right"),className:"taskbar-nav-btn",style:{display:o.minimized.length>4?"block":"none"},children:"\u25B6"})]}),Object.keys(o.panels).map(a=>{let b=o.panels[a];if(!b)return null;let g=At(a);return(0,Pt.createPortal)((0,d.jsx)(pn,{panelId:a,children:(0,d.jsx)("div",{style:{width:"100%",height:"100%"},children:un(a,b.component,c)})}),g,a)}),(0,d.jsx)(Ft.JsonContextMenu,{ref:B,id:"workspace-context-menu",theme:"dark",onShow:()=>ie(!0),onHide:()=>ie(!1)}),o.draggedPanelId!==null&&!o.floating.some(a=>a.id===o.draggedPanelId)&&(0,d.jsxs)("div",{className:"drag-ghost-tab",style:{left:ye.x+12,top:ye.y+12,zIndex:1e5},children:["\u{1F4C4} ",q(o.panels[o.draggedPanelId]?.title,y)||"Tab"]})]})},$t=mn;var ct=class{registry;initialState;config;_actions=null;_initialized=!1;_pendingCalls=[];_pendingOpenPanelIds=new Set;_pendingSubscriptions=[];_disconnectedWarnTimer=null;constructor(t={}){if(this.registry=new ze,this.initialState=t.initialState??null,this.config={formatMessage:t.formatMessage,predefinedMessages:t.predefinedMessages,dir:t.dir},t.panels)for(let[o,c]of Object.entries(t.panels))this.registry.register(o,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 o=this._pendingCalls.splice(0);for(let c of o)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,o){if(this._actions)return this._actions.subscribe(t,o);let c={event:t,callback:o,unsub:null};return this._pendingSubscriptions.push(c),()=>{c.unsub?.(),c.unsub=null;let R=this._pendingSubscriptions.indexOf(c);R!==-1&&this._pendingSubscriptions.splice(R,1)}}openPanel(...t){if(this._actions){this._actions.openPanel(...t);return}let o=t[0];this._pendingOpenPanelIds.has(o)||(this._pendingOpenPanelIds.add(o),this._pendingCalls.push(c=>{this._pendingOpenPanelIds.delete(o),c.openPanel(...t)}),this._startWarnTimer())}closePanel(t){this._dispatch(o=>o.closePanel(t))}minimizePanel(t){this._dispatch(o=>o.minimizePanel(t))}restorePanel(t){this._dispatch(o=>o.restorePanel(t))}floatPanel(...t){this._dispatch(o=>o.floatPanel(...t))}dockPanel(...t){this._dispatch(o=>o.dockPanel(...t))}maximizePanel(t){this._dispatch(o=>o.maximizePanel(t))}focusPanel(t){this._dispatch(o=>o.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(o=>{o.loadLayout(t)}),!1)}setDirection(t){this._dispatch(o=>o.setDirection(t))}publish(t,o){this._dispatch(c=>c.publish(t,o))}subscribe(t,o){return this._subscribeRaw(t,o)}onPanelOpen(t){return this._subscribeRaw("panel:opened",o=>{let c=o;t(c.id,c.component)})}onPanelClose(t){return this._subscribeRaw("panel:closed",o=>{t(o.id)})}onPanelMinimize(t){return this._subscribeRaw("panel:minimized",o=>{t(o.id)})}onPanelRestore(t){return this._subscribeRaw("panel:restored",o=>{t(o.id)})}};var qn=require("react");var bt=require("react/jsx-runtime"),Gt=i=>(0,bt.jsx)(st,{...i,children:(0,bt.jsx)(at,{children:i.children})});var ge=require("react");var re=require("react/jsx-runtime"),hn=({modal:i,index:t,isTopmost:o})=>{let{close:c,openModal:R,updateInstance:x,setDirty:_}=Ie(),A=fe(),k=he(),{dir:S}=be(),{modalClass:F,modalBodyClass:f}=xe(),z=(0,ge.useRef)(null),{id:w,Component:I,props:W,options:u,dirty:v,dirtyOptions:y}=i,h=u,[H,G]=(0,ge.useState)(h.icon||null),P=(0,ge.useRef)(h);P.current=h;let T=q(h.title,A),B=(0,ge.useCallback)(async ee=>{if(ee?.force){c(w);return}if(z.current){if(!await z.current())return;c(w);return}if(v){R(Te,{title:y?.title||k.unsavedChangesTitle,message:y?.message||{id:k.unsavedChangesMessage.id,defaultMessage:k.unsavedChangesMessage.defaultMessage,values:{title:T}},alert:y?.alert,alertType:y?.alertType||"danger",useYesNoTitles:!0,onOK:()=>c(w)},{size:"small"});return}c(w)},[c,R,w,v,y,T,k]),N=(0,ge.useCallback)((ee,Pe)=>_(w,ee,Pe),[_,w]),Y=(0,ge.useCallback)(ee=>x(w,{options:{...P.current,title:ee}}),[x,w]),X=(0,ge.useCallback)(ee=>G(ee),[]),pe=(0,ge.useCallback)(ee=>(z.current=ee,()=>{z.current=null}),[]),ie=(0,ge.useMemo)(()=>({requestClose:B,setDirty:N,setTitle:Y,setIcon:X,onCloseRequested:pe,containerType:"modal",instanceId:w}),[B,N,Y,X,pe,w]),ue=v?`${T} *`:T,K=h.size?`v2-modal-size-${h.size}`:"v2-modal-size-auto",ne=h.closable!==!1;(0,ge.useEffect)(()=>{if(!o||!ne)return;let ee=Pe=>{Pe.key==="Escape"&&(Pe.stopPropagation(),B())};return document.addEventListener("keydown",ee),()=>document.removeEventListener("keydown",ee)},[B,ne,o]);let we=1e4+t*10;return(0,re.jsxs)("div",{className:"v2-modal-overlay",style:{zIndex:we},dir:S,children:[(0,re.jsx)("div",{className:"v2-modal-curtain",onClick:ne?()=>B():void 0}),(0,re.jsxs)("div",{className:`v2-modal-window ${K} ${F??""}`,children:[(0,re.jsxs)("div",{className:"v2-modal-header",children:[H&&(0,re.jsx)("div",{className:"v2-modal-icon",children:H}),(0,re.jsx)("h4",{className:"v2-modal-title",children:ue}),ne&&(0,re.jsx)("button",{className:"v2-modal-close-button",onClick:()=>B(),title:A(k.closeTooltip),type:"button",children:(0,re.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:(0,re.jsx)("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),(0,re.jsx)("div",{className:`v2-modal-body ${f??""}`,children:(0,re.jsx)(ke,{value:ie,children:(0,re.jsx)(I,{...W,panelId:w})})})]})]})},yn=()=>{let{modals:i}=Me();return i.length===0?null:(0,re.jsx)(re.Fragment,{children:i.map((t,o)=>(0,re.jsx)(hn,{modal:t,index:o,isTopmost:o===i.length-1},t.id))})},Yt=yn;var le=require("react");var te=require("react/jsx-runtime"),ut=({panel:i,position:t,defaultWidth:o})=>{let{close:c,openModal:R,updateInstance:x,setDirty:_,registerCloseHandler:A,unregisterCloseHandler:k}=Ie(),{modals:S}=Me(),F=fe(),f=he(),{dir:z}=be(),{sidePanelClass:w,sidePanelBodyClass:I}=xe(),W=(0,le.useRef)(null),{id:u,Component:v,props:y,options:h,dirty:H,dirtyOptions:G}=i,P=h,[T,B]=(0,le.useState)(P.icon||null),N=(0,le.useRef)(P);N.current=P;let Y=q(P.title,F),X=(0,le.useCallback)(async oe=>{if(oe?.force){c(u);return}if(W.current){if(!await W.current())return;c(u);return}if(H){R(Te,{title:G?.title||f.unsavedChangesTitle,message:G?.message||{id:f.unsavedChangesMessage.id,defaultMessage:f.unsavedChangesMessage.defaultMessage,values:{title:Y}},alert:G?.alert,alertType:G?.alertType||"danger",useYesNoTitles:!0,onOK:()=>c(u)},{size:"small"});return}c(u)},[c,R,u,H,G,Y,f]),pe=(0,le.useCallback)(async()=>W.current?await W.current():!H,[H]);(0,le.useEffect)(()=>(A(u,pe),()=>k(u)),[u,pe,A,k]);let ie=(0,le.useCallback)((oe,se)=>_(u,oe,se),[_,u]),ue=(0,le.useCallback)(oe=>x(u,{options:{...N.current,title:oe}}),[x,u]),K=(0,le.useCallback)(oe=>B(oe),[]),ne=(0,le.useCallback)(oe=>(W.current=oe,()=>{W.current=null}),[]),ye=(0,le.useMemo)(()=>({requestClose:X,setDirty:ie,setTitle:ue,setIcon:K,onCloseRequested:ne,containerType:t==="left"?"left-panel":"right-panel",instanceId:u}),[X,ie,ue,K,ne,t,u]),we=H?`${Y} *`:Y;(0,le.useEffect)(()=>{let oe=se=>{se.key==="Escape"&&S.length===0&&X()};return document.addEventListener("keydown",oe),()=>document.removeEventListener("keydown",oe)},[X,S.length]);let ee=P.width||o||400,Pe=typeof ee=="number"?`${ee}px`:ee;return(0,te.jsx)("div",{className:`v2-side-panel v2-side-panel-${t} v2-side-panel-visible ${w??""}`,style:{width:Pe},dir:z,children:(0,te.jsxs)("div",{className:"v2-side-panel-window",children:[(0,te.jsxs)("div",{className:"v2-side-panel-header",children:[T&&(0,te.jsx)("div",{className:"v2-side-panel-icon",children:T}),(0,te.jsx)("h4",{className:"v2-side-panel-title",children:we}),(0,te.jsx)("button",{className:"v2-side-panel-close-button",onClick:()=>X(),title:F(f.closeTooltip),type:"button",children:(0,te.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:(0,te.jsx)("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),(0,te.jsx)("div",{className:`v2-side-panel-body ${I??""}`,children:(0,te.jsx)(ke,{value:ye,children:(0,te.jsx)(v,{...y,panelId:u})})})]})})},Pn=({defaultWidth:i})=>{let{leftPanel:t,rightPanel:o}=Me();return(0,te.jsxs)(te.Fragment,{children:[t&&(0,te.jsx)(ut,{panel:t,position:"left",defaultWidth:i},t.id),o&&(0,te.jsx)(ut,{panel:o,position:"right",defaultWidth:i},o.id)]})},Xt=({defaultWidth:i})=>{let{leftPanel:t}=Me();return t?(0,te.jsx)(ut,{panel:t,position:"left",defaultWidth:i},t.id):null},qt=({defaultWidth:i})=>{let{rightPanel:t}=Me();return t?(0,te.jsx)(ut,{panel:t,position:"right",defaultWidth:i},t.id):null},Kt=Pn;var de=require("react");var ce=require("react/jsx-runtime"),Ut=(0,de.forwardRef)(function({position:t="right",tabs:o,drawerWidth:c="220px",activeTabId:R,onActiveTabChange:x,children:_},A){let k=R!==void 0,S=fe(),F=he(),[f,z]=(0,de.useState)(null),w=k?R:f,[I,W]=(0,de.useState)(()=>{let P=new Set;for(let T of o)T.eagerMount&&P.add(T.id);return P});(0,de.useEffect)(()=>{let P=o.filter(T=>T.eagerMount&&!I.has(T.id));P.length>0&&W(T=>{let B=new Set(T);for(let N of P)B.add(N.id);return B})},[o]);let u=(0,de.useRef)(w??null);(0,de.useEffect)(()=>{u.current=w??null},[w]);let v=(0,de.useCallback)(P=>{k||z(P),x?.(P)},[k,x]);(0,de.useImperativeHandle)(A,()=>({openTab:P=>v(P),closeDrawer:()=>v(null),getActiveTab:()=>u.current}),[v]);let y=P=>{v(w===P?null:P)},h=(0,de.useCallback)(()=>v(null),[v]);(0,de.useEffect)(()=>{w&&!I.has(w)&&W(P=>{let T=new Set(P);return T.add(w),T})},[w,I]),(0,de.useEffect)(()=>{w===null&&W(P=>{let T=!1,B=new Set(P);for(let N of P){let Y=o.find(X=>X.id===N);Y&&!Y.eagerMount&&!Y.preserveState&&(B.delete(N),T=!0)}return T?B:P})},[w,o]);let H=(0,ce.jsx)("div",{className:`sidebar-tabs-strip ${t}`,style:{width:"56px",height:"100%"},children:o.map(P=>{let T=w===P.id;return(0,ce.jsx)("button",{type:"button",onClick:()=>y(P.id),className:`sidebar-tab-btn ${T?"active":""}`,title:P.label,"aria-pressed":T,children:P.icon},P.id)})}),G=(0,ce.jsx)("div",{className:`sidebar-content-drawer h-100 ${t}`,style:{width:w?c:"0px",minWidth:w?c:"0px",overflow:"hidden",flexShrink:0},children:o.map(P=>{if(!I.has(P.id))return null;let B=w===P.id,N=()=>v(P.id);return(0,ce.jsxs)("div",{style:{display:B?"flex":"none",flexDirection:"column",height:"100%",width:"100%"},children:[(0,ce.jsxs)("div",{className:"sidebar-drawer-header",children:[(0,ce.jsx)("span",{className:"sidebar-header-title",children:P.label}),(0,ce.jsx)("button",{type:"button",onClick:h,className:"sidebar-close-btn",title:S(F.closePanelTooltip),"aria-label":S(F.closePanelTooltip),children:(0,ce.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,ce.jsx)("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),(0,ce.jsx)("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),(0,ce.jsx)("div",{className:"sidebar-drawer-body",children:P.renderContent(P.id,h,N)})]},P.id)})});return(0,ce.jsxs)(ce.Fragment,{children:[t==="left"&&H,t==="left"&&G,_,t==="right"&&G,t==="right"&&H]})});0&&(module.exports={ConfirmationForm,DockableDesktopProvider,FormContainerContext,FormContainerProvider,LeftPanelRenderer,ModalStackRenderer,PanelProvider,PanelRegistry,PanelRegistryClass,RightPanelRenderer,SidePanelRenderer,Sidebar,WindowManager,WindowManagerProvider,WorkspaceClient,defaultPredefinedMessages,formatLabel,useFormContainer,useFormatMessage,usePanelActions,usePanelContext,usePanelId,usePanelState,usePredefinedMessages,useRegistry,useStyleClasses,useWindowManagerActions,useWindowManagerState});
4
4
  //# sourceMappingURL=index.cjs.map