react-dockable-desktop 1.3.0 → 2.1.0

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