react-dockable-desktop 3.2.0 → 4.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,11 +1,10 @@
1
- import $t,{useState as ke,useRef as pe,useEffect as le,useCallback as _t}from"react";import{createPortal as hn}from"react-dom";import{createContext as Ye,useContext as Se,useState as Gn,useRef as Ie,useMemo as Rt,useCallback as X,useEffect as dt,useSyncExternalStore as $n}from"react";import{createContext as Bn,useContext as Hn}from"react";var _n={requestClose:()=>{console.warn("FormContainerContract: requestClose called but no container is present")},setDirty:()=>{},onCloseRequested:()=>()=>{},setTitle:()=>{},setIcon:()=>{},containerType:"standalone",instanceId:"standalone",onClose:()=>()=>{},onMinimize:()=>()=>{},onRestore:()=>()=>{},onResize:()=>()=>{}},Wt=Bn(_n),Ge=Wt.Provider,at=()=>Hn(Wt);var Je=class{registry=new Map;register(n,r,i){this.registry.set(n,{Component:r,defaultOptions:i})}get(n){return this.registry.get(n)}getRegisteredIds(){return Array.from(this.registry.keys())}},wt=new Je;var lt={floatWindow:{id:"dockable-desktop-floatWindow",defaultMessage:"Float Window"},minimizePanel:{id:"dockable-desktop-minimizePanel",defaultMessage:"Minimize Panel"},closeTab:{id:"dockable-desktop-closeTab",defaultMessage:"Close Tab"},restorePanel:{id:"dockable-desktop-restorePanel",defaultMessage:"Restore Panel"},maximizePanel:{id:"dockable-desktop-maximizePanel",defaultMessage:"Maximize Panel"},closePanel:{id:"dockable-desktop-closePanel",defaultMessage:"Close Panel"},dockWindow:{id:"dockable-desktop-dockWindow",defaultMessage:"Dock Window"},minimize:{id:"dockable-desktop-minimize",defaultMessage:"Minimize"},maximize:{id:"dockable-desktop-maximize",defaultMessage:"Maximize"},restoreSize:{id:"dockable-desktop-restoreSize",defaultMessage:"Restore Size"},close:{id:"dockable-desktop-close",defaultMessage:"Close"},closeEmptyGroup:{id:"dockable-desktop-closeEmptyGroup",defaultMessage:"Close empty split group"},anchorToRightEdge:{id:"dockable-desktop-anchorToRightEdge",defaultMessage:"Anchor to Right Edge"},anchorToBottomEdge:{id:"dockable-desktop-anchorToBottomEdge",defaultMessage:"Anchor to Bottom Edge"},windowAnchoringOptions:{id:"dockable-desktop-windowAnchoringOptions",defaultMessage:"Window Anchoring Options"},unsavedChangesTitle:{id:"dockable-desktop-unsavedChangesTitle",defaultMessage:"Unsaved Changes"},unsavedChangesMessage:{id:"dockable-desktop-unsavedChangesMessage",defaultMessage:'"{title}" has unsaved changes. Do you want to discard your changes and close?'},discardChanges:{id:"dockable-desktop-discardChanges",defaultMessage:"Discard Changes"},cancel:{id:"dockable-desktop-cancel",defaultMessage:"Cancel"},yes:{id:"dockable-desktop-yes",defaultMessage:"Yes"},no:{id:"dockable-desktop-no",defaultMessage:"No"},ok:{id:"dockable-desktop-ok",defaultMessage:"OK"},closePanelTooltip:{id:"dockable-desktop-closePanelTooltip",defaultMessage:"Close panel"},closeTooltip:{id:"dockable-desktop-closeTooltip",defaultMessage:"Close"}};import{jsx as $e}from"react/jsx-runtime";var en=Ye(null),Mt=Ye(null),tn=Ye(null),nn=Ye(null),on=Ye(lt),rn=Ye({}),Fe=()=>Se(rn),sn=Ye(wt),ct=()=>Se(sn),Dt=class{listeners={};subscribe(n,r){return this.listeners[n]||(this.listeners[n]=[]),this.listeners[n].push(r),()=>{this.listeners[n]=this.listeners[n].filter(i=>i!==r)}}publish(n,r){this.listeners[n]&&this.listeners[n].forEach(i=>i(r))}},Yn={type:"leaf",id:"group-default",panels:[],activePanelId:null};function Xn(t){if(t)try{let n=JSON.parse(t);if(n.gridRoot&&Array.isArray(n.floating)&&Array.isArray(n.minimized)&&n.panels)return{gridRoot:n.gridRoot,floating:n.floating,minimized:n.minimized,panels:n.panels,activePanelId:Object.keys(n.panels)[0]??null}}catch{}return{gridRoot:Yn,floating:[],minimized:[],panels:{},activePanelId:null}}var Ot=({children:t,client:n,formatMessage:r,predefinedMessages:i,dir:b,modalClass:P,modalBodyClass:k,sidePanelClass:T,sidePanelBodyClass:R,windowClass:M,windowBodyClass:N})=>{let v=Ie(n?.registry??wt).current,S=n?.config.formatMessage??r,z=n?.config.predefinedMessages??i,D=n?.config.dir??b,[O,p]=Gn(()=>({...Xn(n?.initialState??null),draggedPanelId:null,dir:D||"ltr",isRtl:D==="rtl"})),w=Ie(O);w.current=O;let I=Ie(new Set);dt(()=>{I.current.forEach(o=>o())},[O]);let _=X(()=>w.current,[]),A=X(o=>(I.current.add(o),()=>I.current.delete(o)),[]),W=Ie({}),F=Rt(()=>({...lt,...z}),[z]),J=Ie(new Dt),x=Ie(1e3),Z=X((o,g)=>J.current.subscribe(o,g),[]),te=X((o,g)=>{J.current.publish(o,g)},[]),ne=X((o,g)=>{let a=typeof o.x=="string"?parseFloat(o.x):o.x,d=typeof o.y=="string"?parseFloat(o.y):o.y,e=typeof o.width=="string"?parseFloat(o.width):o.width,l=typeof o.height=="string"?parseFloat(o.height):o.height;isNaN(a)&&(a=300),isNaN(d)&&(d=150),isNaN(e)&&(e=450),isNaN(l)&&(l=350);let s=y=>g.some(m=>{let E=typeof m.x=="string"?parseFloat(m.x):m.x,L=typeof m.y=="string"?parseFloat(m.y):m.y;return!m.maximized&&Math.abs(E-y.x)<20&&Math.abs(L-y.y)<20}),c=0;for(;s({x:a,y:d})&&c<10;)a+=30,d+=30,c++;let u=Math.max(100,window.innerWidth||1024),h=Math.max(100,window.innerHeight||768);return(a+e>u||d+l>h)&&(a=100+c%5*30,d=100+c%5*30),a=Math.max(0,Math.min(a,u-100)),d=Math.max(0,Math.min(d,h-40)),{x:a,y:d,width:e,height:l}},[]),se=X(o=>{p(g=>{let a=g.panels[o];if(!a)return g;if(a.state==="floating"){let d=g.floating.find(l=>l.id===o);if(!d)return g;let e=!g.floating.some(l=>l.z>d.z);return e&&g.activePanelId===o?g:(e||(x.current+=1),{...g,floating:g.floating.map(l=>l.id===o?{...l,z:e?d.z:x.current}:l),activePanelId:o})}else if(a.state==="docked"){if(g.activePanelId===o)return g;let d=e=>e.type==="leaf"?e.panels.includes(o)?{...e,activePanelId:o}:e:{...e,children:e.children.map(d)};return{...g,gridRoot:d(g.gridRoot),activePanelId:o}}return g.activePanelId===o?g:{...g,activePanelId:o}})},[]),$=(o,g)=>{if(o.type==="leaf"){let a=o.panels.indexOf(g);if(a===-1)return o;let d=o.panels.filter(s=>s!==g),e=o.activePanelId===g?d[a]||d[a-1]||d[0]||null:o.activePanelId,l={...o,panels:d,activePanelId:e};return d.length===0&&!o.keepOnEmpty?null:l}else{let a=o.children.map(l=>$(l,g)).filter(l=>l!==null);if(a.length===0)return null;if(a.length===1)return a[0];let d=o.sizes.slice(0,a.length),e=d.reduce((l,s)=>l+s,0);return{...o,children:a,sizes:d.map(l=>l/e)}}},Q=(o,g,a)=>{if(o.type==="leaf"){if(o.id===g){let d=o.panels.includes(a)?o.panels:[...o.panels,a];return{...o,panels:d,activePanelId:a}}return o}else return{...o,children:o.children.map(d=>Q(d,g,a))}},Y=o=>{if(o.type==="leaf")return o.id;for(let g of o.children){let a=Y(g);if(a)return a}return null},ee=X((o,g,a)=>{let d=!(o in w.current.panels);p(e=>{let l=e.panels[o],s=v.get(g),c=a?.title||a?.title||s?.defaultOptions?.title||o,u=a?.initialTarget||s?.defaultOptions?.initialTarget||"docked",h=s?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350};if(l)if(l.state==="minimized"){let L=e.minimized.filter(C=>C.id!==o);if(u==="floating"||!e.gridRoot){x.current+=1;let C=ne(h,e.floating);return{...e,minimized:L,floating:[...e.floating,{...C,id:o,z:x.current}],panels:{...e.panels,[o]:{...l,state:"floating"}}}}else{let C=Y(e.gridRoot)||"group-default";return{...e,minimized:L,gridRoot:Q(e.gridRoot,C,o),panels:{...e.panels,[o]:{...l,state:"docked"}}}}}else{if(l.state==="floating")return se(o),e;{let L=C=>C.type==="leaf"?C.panels.includes(o)?{...C,activePanelId:o}:C:{...C,children:C.children.map(L)};return{...e,gridRoot:L(e.gridRoot)}}}let m={id:o,title:c,component:g,state:u==="tabbed"?"docked":u},E={...e.panels,[o]:m};if(u==="floating"){x.current+=1;let L=ne(h,e.floating),C=a?.stickyRight??s?.defaultOptions?.defaultStickyRight??!1,H=a?.stickyBottom??s?.defaultOptions?.defaultStickyBottom??!1,q=Math.max(100,window.innerWidth||1024),G=Math.max(100,window.innerHeight||768),ae=typeof L.width=="string"?parseFloat(L.width):L.width,fe=typeof L.height=="string"?parseFloat(L.height):L.height,De=L.x,Oe=L.y,we=10;return C&&(De=q-ae-we),H&&(Oe=G-fe-we),{...e,floating:[...e.floating,{...L,id:o,z:x.current,x:De,y:Oe,stickyRight:C,stickyBottom:H}],panels:E}}else{let L=Y(e.gridRoot)||"group-default";return{...e,gridRoot:Q(e.gridRoot,L,o),panels:E}}}),d&&J.current.publish("panel:opened",{id:o,component:g})},[ne,se]),re=X(o=>{let g=o in w.current.panels;p(a=>{let d=a.panels[o];if(!d||v.get(d.component)?.defaultOptions?.canClose===!1)return a;delete W.current[o];let l={...a.panels};delete l[o];let s=$(a.gridRoot,o);return{...a,gridRoot:s||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:a.floating.filter(c=>c.id!==o),minimized:a.minimized.filter(c=>c.id!==o),panels:l}}),g&&J.current.publish("panel:closed",{id:o})},[]),ce=X((o,g)=>{W.current[o]=g},[]),K=X(o=>{delete W.current[o]},[]),V=X((o,g,a)=>{p(d=>{let e=d.panels[o];return e?{...d,panels:{...d.panels,[o]:{...e,dirty:g,dirtyOptions:a}}}:d})},[]),oe=X((o,g)=>{p(a=>{let d=a.panels[o];return d?{...a,panels:{...a.panels,[o]:{...d,title:g}}}:a})},[]),B=X(async(o,g)=>{if(g?.force){re(o);return}let a=W.current[o];if(a&&!await a())return;let d=w.current.panels[o];if(d?.dirty)if(g?.onConfirm){if(!await g.onConfirm(d.dirtyOptions))return}else return;re(o)},[re]),ie=X(o=>{let g=w.current.panels[o]?.state!=="minimized"&&o in w.current.panels;p(a=>{let d=a.panels[o];if(!d||d.state==="minimized"||v.get(d.component)?.defaultOptions?.canMinimize===!1)return a;let l,s;if(d.state==="floating"){let u=a.floating.find(h=>h.id===o);u&&(l={x:Number(u.x),y:Number(u.y),width:Number(u.width),height:Number(u.height),stickyRight:u.stickyRight,stickyBottom:u.stickyBottom})}else if(d.state==="docked"){let u=h=>{if(h.type==="leaf")return h.panels.includes(o)?h.id:null;for(let y of h.children){let m=u(y);if(m)return m}return null};s=u(a.gridRoot)??void 0}let c=$(a.gridRoot,o);return{...a,gridRoot:c||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:a.floating.filter(u=>u.id!==o),minimized:[...a.minimized,{id:o,title:d.title,component:d.component}],panels:{...a.panels,[o]:{...d,state:"minimized",previousState:d.state,lastFloatingRect:l,lastLeafId:s}}}}),g&&J.current.publish("panel:minimized",{id:o})},[]),ge=X(o=>{let g=w.current.panels[o]?.state==="minimized";p(a=>{let d=a.panels[o];if(!d||d.state!=="minimized")return a;let e=a.minimized.filter(s=>s.id!==o);if((d.previousState||"docked")==="floating"){x.current+=1;let s=v.get(d.component),c=d.lastFloatingRect||s?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},u=ne(c,a.floating);return{...a,minimized:e,floating:[...a.floating,{...u,id:o,z:x.current,stickyRight:!!d.lastFloatingRect?.stickyRight,stickyBottom:!!d.lastFloatingRect?.stickyBottom}],panels:{...a.panels,[o]:{...d,state:"floating"}}}}else{let s=(y,m)=>y.type==="leaf"?y.id===m:y.children.some(E=>s(E,m)),c=d.lastLeafId&&s(a.gridRoot,d.lastLeafId),u=v.get(d.component),h=u?.defaultOptions?.canDrag!==!1;if(c)return{...a,minimized:e,gridRoot:Q(a.gridRoot,d.lastLeafId,o),panels:{...a.panels,[o]:{...d,state:"docked"}}};if(h){x.current+=1;let y=d.lastFloatingRect||u?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},m=ne(y,a.floating);return{...a,minimized:e,floating:[...a.floating,{...m,id:o,z:x.current,stickyRight:!!d.lastFloatingRect?.stickyRight,stickyBottom:!!d.lastFloatingRect?.stickyBottom}],panels:{...a.panels,[o]:{...d,state:"floating"}}}}else{let y=Y(a.gridRoot)||"group-default";return{...a,minimized:e,gridRoot:Q(a.gridRoot,y,o),panels:{...a.panels,[o]:{...d,state:"docked"}}}}}}),g&&J.current.publish("panel:restored",{id:o})},[ne]),ve=X((o,g)=>{p(a=>{let d=a.panels[o];if(!d||v.get(d.component)?.defaultOptions?.canDrag===!1)return a;let l=v.get(d.component),s=g||l?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},c=$(a.gridRoot,o);x.current+=1;let u=ne(s,a.floating);return{...a,gridRoot:c||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:[...a.floating,{...u,id:o,z:x.current}],panels:{...a.panels,[o]:{...d,state:"floating"}}}})},[ne]),Ee=X((o,g)=>{p(a=>{let d=a.panels[o];if(!d)return a;let e=a.floating.filter(c=>c.id!==o),l=$(a.gridRoot,o),s=g||Y(l||a.gridRoot)||"group-default";return{...a,gridRoot:Q(l||a.gridRoot,s,o),floating:e,panels:{...a.panels,[o]:{...d,state:"docked"}}}})},[]),Le=(o,g,a,d)=>{if(o.type==="leaf"){if(o.id===g){let e={type:"leaf",id:`group-split-${Date.now()}-${Math.floor(Math.random()*1e3)}`,panels:[a],activePanelId:a};return{type:"branch",orientation:d==="left"||d==="right"?"horizontal":"vertical",sizes:[.5,.5],children:d==="left"||d==="top"?[e,o]:[o,e]}}return o}else return{...o,children:o.children.map(e=>Le(e,g,a,d))}},ze=X(o=>{p(g=>({...g,draggedPanelId:o}))},[]),ue=X((o,g,a)=>{p(d=>{let e=d.panels[o];if(!e)return d;let l=d.floating.filter(u=>u.id!==o),s=$(d.gridRoot,o),c;return a==="center"?c=Q(s||d.gridRoot,g,o):c=Le(s||d.gridRoot,g,o,a),{...d,gridRoot:c,floating:l,panels:{...d.panels,[o]:{...e,state:"docked"}},draggedPanelId:null}})},[]),ft=X((o,g)=>{p(a=>{let d=a.panels[o];if(!d)return a;let e=a.floating.filter(y=>y.id!==o),l=$(a.gridRoot,o),s={type:"leaf",id:`group-edge-${Date.now()}-${Math.floor(Math.random()*1e3)}`,panels:[o],activePanelId:o},c=g==="left"||g==="right"?"horizontal":"vertical",u=g==="left"||g==="top"?[s,l||a.gridRoot]:[l||a.gridRoot,s];return{...a,gridRoot:{type:"branch",orientation:c,sizes:g==="left"||g==="top"?[.3,.7]:[.7,.3],children:u},floating:e,panels:{...a.panels,[o]:{...d,state:"docked"}},draggedPanelId:null}})},[]),Ne=X((o,g,a)=>{p(d=>{let e=d.panels[o];if(!e)return d;let l=$(d.gridRoot,o),s=h=>{if(h.type==="leaf"){if(h.id===g){let y=h.panels.filter(L=>L!==o),m=Math.max(0,Math.min(a,y.length)),E=[...y];return E.splice(m,0,o),{...h,panels:E,activePanelId:o}}return h}else return{...h,children:h.children.map(s)}},c=s(l||d.gridRoot),u=d.floating.filter(h=>h.id!==o);return{...d,gridRoot:c,floating:u,panels:{...d.panels,[o]:{...e,state:"docked"}},draggedPanelId:null}})},[]),Te=X(o=>{p(g=>{let a=e=>{if(e.type==="leaf")return e.id===o&&e.canClose!==!1?null:e;{let l=e.children.map(u=>a(u)).filter(u=>u!==null);if(l.length===0)return null;if(l.length===1)return l[0];let s=e.sizes.slice(0,l.length),c=s.reduce((u,h)=>u+h,0);return{...e,children:l,sizes:s.map(u=>u/c)}}},d=a(g.gridRoot);return{...g,gridRoot:d||{type:"leaf",id:"group-default",panels:[],activePanelId:null}}})},[]),mt=X(o=>{p(g=>({...g,floating:g.floating.map(a=>a.id===o?{...a,maximized:!a.maximized}:a)}))},[]),ht=X((o,g)=>{let a=(d,e)=>{if(d.type==="leaf")return d;if(e===o.length)return{...d,sizes:g};let l=o[e],s=d.children.map((c,u)=>u===l?a(c,e+1):c);return{...d,children:s}};p(d=>({...d,gridRoot:a(d.gridRoot,0)}))},[]),tt=X((o,g)=>{p(a=>({...a,floating:a.floating.map(d=>d.id===o?{...d,...g}:d)}))},[]),Be=X(()=>JSON.stringify({gridRoot:w.current.gridRoot,floating:w.current.floating,minimized:w.current.minimized,panels:w.current.panels}),[]),He=X(o=>{try{let g=JSON.parse(o);if(g.gridRoot&&g.floating&&g.minimized&&g.panels){let a=Object.keys(g.panels)[0]||null;return p(d=>({...d,gridRoot:g.gridRoot,floating:g.floating,minimized:g.minimized,panels:g.panels,draggedPanelId:null,activePanelId:a})),!0}return!1}catch(g){return console.error("Failed to parse layout configuration:",g),!1}},[]),_e=X(o=>{p(g=>g.activePanelId===o?g:{...g,activePanelId:o})},[]),nt=X(o=>{p(g=>g.dir===o?g:{...g,dir:o,isRtl:o==="rtl"})},[]),vt=X(o=>o in w.current.panels,[]),ot=X(()=>Object.keys(w.current.panels),[]);dt(()=>{D&&p(o=>o.dir===D?o:{...o,dir:D,isRtl:D==="rtl"})},[D]);let We=Ie(new Map),Ke=X((o,g)=>(We.current.set(o,g),()=>{We.current.delete(o)}),[]),xe=X(o=>We.current.get(o)?.()??[],[]),it=Rt(()=>({openPanel:ee,closePanel:re,minimizePanel:ie,restorePanel:ge,floatPanel:ve,dockPanel:Ee,maximizePanel:mt,updateSplitSizes:ht,updateFloatingPosition:tt,focusPanel:se,isOpen:vt,getOpenPanelIds:ot,saveLayout:Be,loadLayout:He,publish:te,subscribe:Z,setDraggedPanelId:ze,dockPanelToGroup:ue,movePanelOrder:Ne,closeLeafGroup:Te,registerCloseGuard:ce,unregisterCloseGuard:K,setPanelDirty:V,updatePanelTitle:oe,requestClosePanel:B,dockPanelToWorkspaceEdge:ft,setActivePanel:_e,setDirection:nt,registerPanelContextMenu:Ke,getPanelContextMenuItems:xe}),[ee,re,ie,ge,ve,Ee,mt,ht,tt,se,vt,ot,Be,He,te,Z,ze,ue,Ne,Te,ce,K,V,oe,B,ft,_e,nt,Ke,xe]),Nt=o=>{let g=o.defaultMessage||o.id;return o.values&&Object.entries(o.values).forEach(([a,d])=>{g=g.replace(`{${a}}`,String(d))}),g},Ce=Rt(()=>({modalClass:P,modalBodyClass:k,sidePanelClass:T,sidePanelBodyClass:R,windowClass:M,windowBodyClass:N}),[P,k,T,R,M,N]);dt(()=>{if(process.env.NODE_ENV!=="development")return;try{getComputedStyle(document.documentElement).getPropertyValue("--rdd-styles-loaded").trim()!=="1"&&console.error(`[react-dockable-desktop] styles.css is not imported.
1
+ import yn,{useState as Ae,useRef as Me,useEffect as Ce,useCallback as bn,useContext as er}from"react";import{createPortal as no}from"react-dom";import{createContext as rt,useContext as Xe,useState as Fo,useRef as Ye,useMemo as Vt,useCallback as de,useEffect as St,useSyncExternalStore as _o}from"react";import{createContext as Do,useContext as Oo}from"react";var Ao={requestClose:()=>{console.warn("FormContainerContract: requestClose called but no container is present")},setDirty:()=>{},onCloseRequested:()=>()=>{},setTitle:()=>{},setIcon:()=>{},containerType:"standalone",instanceId:"standalone",onClose:()=>()=>{},onMinimize:()=>()=>{},onRestore:()=>()=>{},onResize:()=>()=>{}},an=Do(Ao),nt=an.Provider,Tt=()=>Oo(an);var gt=class{registry=new Map;register(t,n,i){this.registry.set(t,{Component:n,defaultOptions:i})}get(t){return this.registry.get(t)}getRegisteredIds(){return Array.from(this.registry.keys())}},Gt=new gt;var kt={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"},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 ot}from"react/jsx-runtime";var ft=rt(null),Kt=rt(null),On=rt(null),An=rt(null),Fn=rt(kt),_n=rt({}),je=()=>Xe(_n),Hn=rt(Gt),It=()=>Xe(Hn),ln=class{listeners={};subscribe(t,n){return this.listeners[t]||(this.listeners[t]=[]),this.listeners[t].push(n),()=>{this.listeners[t]=this.listeners[t].filter(i=>i!==n)}}publish(t,n){this.listeners[t]&&this.listeners[t].forEach(i=>i(n))}},Ho={type:"leaf",id:"group-default",panels:[],activePanelId:null};function Bo(e){if(e)try{let t=JSON.parse(e);if(t.gridRoot&&Array.isArray(t.floating)&&Array.isArray(t.minimized)&&t.panels)return{gridRoot:t.gridRoot,floating:t.floating,minimized:t.minimized,panels:t.panels,activePanelId:Object.keys(t.panels)[0]??null}}catch{}return{gridRoot:Ho,floating:[],minimized:[],panels:{},activePanelId:null}}var cn=({children:e,client:t,formatMessage:n,predefinedMessages:i,dir:s,modalClass:P,modalBodyClass:W,sidePanelClass:f,sidePanelBodyClass:C,windowClass:b,windowBodyClass:h})=>{let l=Ye(t?.registry??Gt).current,T=t?.config.formatMessage??n,L=t?.config.predefinedMessages??i,N=t?.config.dir??s,[E,a]=Fo(()=>({...Bo(t?.initialState??null),draggedPanelId:null,dir:N||"ltr",isRtl:N==="rtl",splitRatio:Math.min(.9,Math.max(.1,t?.config.defaultSplitRatio??.5)),edgeSplitRatio:Math.min(.9,Math.max(.1,t?.config.defaultEdgeSplitRatio??.2))})),R=Ye(E);R.current=E;let M=Ye(new Set);St(()=>{M.current.forEach(o=>o())},[E]);let O=de(()=>R.current,[]),v=de(o=>(M.current.add(o),()=>M.current.delete(o)),[]),I=Ye({}),z=Vt(()=>({...kt,...L}),[L]),H=Ye(new ln),c=Ye(1e3),k=de((o,g)=>H.current.subscribe(o,g),[]),B=de((o,g)=>{H.current.publish(o,g)},[]),K=de((o,g)=>{let d=typeof o.x=="string"?parseFloat(o.x):o.x,u=typeof o.y=="string"?parseFloat(o.y):o.y,w=typeof o.width=="string"?parseFloat(o.width):o.width,F=typeof o.height=="string"?parseFloat(o.height):o.height;isNaN(d)&&(d=300),isNaN(u)&&(u=150),isNaN(w)&&(w=450),isNaN(F)&&(F=350);let J=ye=>g.some(r=>{let S=typeof r.x=="string"?parseFloat(r.x):r.x,p=typeof r.y=="string"?parseFloat(r.y):r.y;return!r.maximized&&Math.abs(S-ye.x)<20&&Math.abs(p-ye.y)<20}),ne=0;for(;J({x:d,y:u})&&ne<10;)d+=30,u+=30,ne++;let j=Math.max(100,window.innerWidth||1024),le=Math.max(100,window.innerHeight||768);return(d+w>j||u+F>le)&&(d=100+ne%5*30,u=100+ne%5*30),d=Math.max(0,Math.min(d,j-100)),u=Math.max(0,Math.min(u,le-40)),{x:d,y:u,width:w,height:F}},[]),oe=de(o=>{a(g=>{let d=g.panels[o];if(!d)return g;if(d.state==="floating"){let u=g.floating.find(F=>F.id===o);if(!u)return g;let w=!g.floating.some(F=>F.z>u.z);return w&&g.activePanelId===o?g:(w||(c.current+=1),{...g,floating:g.floating.map(F=>F.id===o?{...F,z:w?u.z:c.current}:F),activePanelId:o})}else if(d.state==="docked"){if(g.activePanelId===o)return g;let u=w=>w.type==="leaf"?w.panels.includes(o)?{...w,activePanelId:o}:w:{...w,children:w.children.map(u)};return{...g,gridRoot:u(g.gridRoot),activePanelId:o}}return g.activePanelId===o?g:{...g,activePanelId:o}})},[]),G=(o,g)=>{if(o.type==="leaf"){let d=o.panels.indexOf(g);if(d===-1)return o;let u=o.panels.filter(J=>J!==g),w=o.activePanelId===g?u[d]||u[d-1]||u[0]||null:o.activePanelId,F={...o,panels:u,activePanelId:w};return u.length===0&&!o.keepOnEmpty?null:F}else{let d=o.children.map(F=>G(F,g)).filter(F=>F!==null);if(d.length===0)return null;if(d.length===1)return d[0];let u=o.sizes.slice(0,d.length),w=u.reduce((F,J)=>F+J,0);return{...o,children:d,sizes:u.map(F=>F/w)}}},te=(o,g,d)=>{if(o.type==="leaf"){if(o.id===g){let u=o.panels.includes(d)?o.panels:[...o.panels,d];return{...o,panels:u,activePanelId:d}}return o}else return{...o,children:o.children.map(u=>te(u,g,d))}},re=o=>{if(o.type==="leaf")return o.id;for(let g of o.children){let d=re(g);if(d)return d}return null},se=de((o,g,d)=>{let u=!(o in R.current.panels);a(w=>{let F=w.panels[o],J=l.get(g),ne=d?.title||d?.title||J?.defaultOptions?.title||o,j=d?.initialTarget||J?.defaultOptions?.initialTarget||"docked",le=J?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350};if(F)if(F.state==="minimized"){let p=w.minimized.filter(m=>m.id!==o);if(j==="floating"||!w.gridRoot){c.current+=1;let m=K(le,w.floating);return{...w,minimized:p,floating:[...w.floating,{...m,id:o,z:c.current}],panels:{...w.panels,[o]:{...F,state:"floating"}}}}else{let m=re(w.gridRoot)||"group-default";return{...w,minimized:p,gridRoot:te(w.gridRoot,m,o),panels:{...w.panels,[o]:{...F,state:"docked"}}}}}else{if(F.state==="floating")return oe(o),w;{let p=m=>m.type==="leaf"?m.panels.includes(o)?{...m,activePanelId:o}:m:{...m,children:m.children.map(p)};return{...w,gridRoot:p(w.gridRoot)}}}let r={id:o,title:ne,component:g,state:j==="tabbed"?"docked":j},S={...w.panels,[o]:r};if(j==="floating"){c.current+=1;let p=K(le,w.floating),m=d?.anchor??J?.defaultOptions?.defaultAnchor??null;return{...w,floating:[...w.floating,{...p,id:o,z:c.current,anchor:m}],panels:S}}else{let p=re(w.gridRoot)||"group-default";return{...w,gridRoot:te(w.gridRoot,p,o),panels:S}}}),u&&H.current.publish("panel:opened",{id:o,component:g})},[K,oe]),Z=de(o=>{let g=o in R.current.panels;a(d=>{let u=d.panels[o];if(!u||l.get(u.component)?.defaultOptions?.canClose===!1)return d;delete I.current[o];let F={...d.panels};delete F[o];let J=G(d.gridRoot,o);return{...d,gridRoot:J||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:d.floating.filter(ne=>ne.id!==o),minimized:d.minimized.filter(ne=>ne.id!==o),panels:F}}),g&&H.current.publish("panel:closed",{id:o})},[]),_=de((o,g)=>{I.current[o]=g},[]),y=de(o=>{delete I.current[o]},[]),$=de((o,g,d)=>{a(u=>{let w=u.panels[o];return w?{...u,panels:{...u.panels,[o]:{...w,dirty:g,dirtyOptions:d}}}:u})},[]),U=de((o,g)=>{a(d=>{let u=d.panels[o];return u?{...d,panels:{...d.panels,[o]:{...u,title:g}}}:d})},[]),Y=de(async(o,g)=>{if(g?.force){Z(o);return}let d=I.current[o];if(d&&!await d())return;let u=R.current.panels[o];if(u?.dirty)if(g?.onConfirm){if(!await g.onConfirm(u.dirtyOptions))return}else return;Z(o)},[Z]),ce=de(o=>{let g=R.current.panels[o]?.state!=="minimized"&&o in R.current.panels;a(d=>{let u=d.panels[o];if(!u||u.state==="minimized"||l.get(u.component)?.defaultOptions?.canMinimize===!1)return d;let F,J;if(u.state==="floating"){let j=d.floating.find(le=>le.id===o);j&&(F={x:Number(j.x),y:Number(j.y),width:Number(j.width),height:Number(j.height),anchor:j.anchor??null})}else if(u.state==="docked"){let j=le=>{if(le.type==="leaf")return le.panels.includes(o)?le.id:null;for(let ye of le.children){let r=j(ye);if(r)return r}return null};J=j(d.gridRoot)??void 0}let ne=G(d.gridRoot,o);return{...d,gridRoot:ne||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:d.floating.filter(j=>j.id!==o),minimized:[...d.minimized,{id:o,title:u.title,component:u.component}],panels:{...d.panels,[o]:{...u,state:"minimized",previousState:u.state,lastFloatingRect:F,lastLeafId:J}}}}),g&&H.current.publish("panel:minimized",{id:o})},[]),fe=de(o=>{let g=R.current.panels[o]?.state==="minimized";a(d=>{let u=d.panels[o];if(!u||u.state!=="minimized")return d;let w=d.minimized.filter(J=>J.id!==o);if((u.previousState||"docked")==="floating"){c.current+=1;let J=l.get(u.component),ne=u.lastFloatingRect||J?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},j=K(ne,d.floating);return{...d,minimized:w,floating:[...d.floating,{...j,id:o,z:c.current,anchor:u.lastFloatingRect?.anchor??null}],panels:{...d.panels,[o]:{...u,state:"floating"}}}}else{let J=(ye,r)=>ye.type==="leaf"?ye.id===r:ye.children.some(S=>J(S,r)),ne=u.lastLeafId&&J(d.gridRoot,u.lastLeafId),j=l.get(u.component),le=j?.defaultOptions?.canDrag!==!1;if(ne)return{...d,minimized:w,gridRoot:te(d.gridRoot,u.lastLeafId,o),panels:{...d.panels,[o]:{...u,state:"docked"}}};if(le){c.current+=1;let ye=u.lastFloatingRect||j?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},r=K(ye,d.floating);return{...d,minimized:w,floating:[...d.floating,{...r,id:o,z:c.current,anchor:u.lastFloatingRect?.anchor??null}],panels:{...d.panels,[o]:{...u,state:"floating"}}}}else{let ye=re(d.gridRoot)||"group-default";return{...d,minimized:w,gridRoot:te(d.gridRoot,ye,o),panels:{...d.panels,[o]:{...u,state:"docked"}}}}}}),g&&H.current.publish("panel:restored",{id:o})},[K]),he=de((o,g,d)=>{a(u=>{let w=u.panels[o];if(!w||l.get(w.component)?.defaultOptions?.canDrag===!1)return u;let J=l.get(w.component),ne=g||J?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},j=G(u.gridRoot,o);c.current+=1;let le=K(ne,u.floating);return{...u,gridRoot:j||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:[...u.floating,{...le,id:o,z:c.current,anchor:d??null}],panels:{...u.panels,[o]:{...w,state:"floating"}}}})},[K]),Ne=de((o,g)=>{a(d=>{let u=d.panels[o];if(!u)return d;let w=d.floating.filter(ne=>ne.id!==o),F=G(d.gridRoot,o),J=g||re(F||d.gridRoot)||"group-default";return{...d,gridRoot:te(F||d.gridRoot,J,o),floating:w,panels:{...d.panels,[o]:{...u,state:"docked"}}}})},[]),ze=(o,g,d,u,w)=>{if(o.type==="leaf"){if(o.id===g){let F={type:"leaf",id:`group-split-${Date.now()}-${Math.floor(Math.random()*1e3)}`,panels:[d],activePanelId:d},J=u==="left"||u==="right"?"horizontal":"vertical",ne=u==="left"||u==="top"?[F,o]:[o,F],j=u==="left"||u==="top"?[w,1-w]:[1-w,w];return{type:"branch",orientation:J,sizes:j,children:ne}}return o}else return{...o,children:o.children.map(F=>ze(F,g,d,u,w))}},ke=de(o=>{a(g=>({...g,draggedPanelId:o}))},[]),Re=de((o,g,d)=>{a(u=>{let w=u.panels[o];if(!w)return u;let F=u.floating.filter(j=>j.id!==o),J=G(u.gridRoot,o),ne;return d==="center"?ne=te(J||u.gridRoot,g,o):ne=ze(J||u.gridRoot,g,o,d,u.splitRatio),{...u,gridRoot:ne,floating:F,panels:{...u.panels,[o]:{...w,state:"docked"}},draggedPanelId:null}})},[]),Dt=de((o,g)=>{a(d=>{let u=d.panels[o];if(!u)return d;let w=d.floating.filter(r=>r.id!==o),F=G(d.gridRoot,o),J={type:"leaf",id:`group-edge-${Date.now()}-${Math.floor(Math.random()*1e3)}`,panels:[o],activePanelId:o},ne=g==="left"||g==="right"?"horizontal":"vertical",j=g==="left"||g==="top"?[J,F||d.gridRoot]:[F||d.gridRoot,J],le=d.edgeSplitRatio,ye={type:"branch",orientation:ne,sizes:g==="left"||g==="top"?[le,1-le]:[1-le,le],children:j};return{...d,gridRoot:ye,floating:w,panels:{...d.panels,[o]:{...u,state:"docked"}},draggedPanelId:null}})},[]),Ot=de((o,g,d)=>{a(u=>{let w=u.panels[o];if(!w)return u;let F=G(u.gridRoot,o),J=le=>{if(le.type==="leaf"){if(le.id===g){let ye=le.panels.filter(p=>p!==o),r=Math.max(0,Math.min(d,ye.length)),S=[...ye];return S.splice(r,0,o),{...le,panels:S,activePanelId:o}}return le}else return{...le,children:le.children.map(J)}},ne=J(F||u.gridRoot),j=u.floating.filter(le=>le.id!==o);return{...u,gridRoot:ne,floating:j,panels:{...u.panels,[o]:{...w,state:"docked"}},draggedPanelId:null}})},[]),lt=de(o=>{a(g=>{let d=w=>{if(w.type==="leaf")return w.id===o&&w.canClose!==!1?null:w;{let F=w.children.map(j=>d(j)).filter(j=>j!==null);if(F.length===0)return null;if(F.length===1)return F[0];let J=w.sizes.slice(0,F.length),ne=J.reduce((j,le)=>j+le,0);return{...w,children:F,sizes:J.map(j=>j/ne)}}},u=d(g.gridRoot);return{...g,gridRoot:u||{type:"leaf",id:"group-default",panels:[],activePanelId:null}}})},[]),Qe=de(o=>{a(g=>({...g,floating:g.floating.map(d=>d.id===o?{...d,maximized:!d.maximized}:d)}))},[]),ct=de((o,g)=>{let d=(u,w)=>{if(u.type==="leaf")return u;if(w===o.length)return{...u,sizes:g};let F=o[w],J=u.children.map((ne,j)=>j===F?d(ne,w+1):ne);return{...u,children:J}};a(u=>({...u,gridRoot:d(u.gridRoot,0)}))},[]),wt=de((o,g)=>{a(d=>({...d,floating:d.floating.map(u=>u.id===o?{...u,...g}:u)}))},[]),At=de(()=>JSON.stringify({gridRoot:R.current.gridRoot,floating:R.current.floating,minimized:R.current.minimized,panels:R.current.panels}),[]),Ve=de(o=>{try{let g=JSON.parse(o);if(g.gridRoot&&g.floating&&g.minimized&&g.panels){let d=g.floating.map(w=>{if("stickyRight"in w||"stickyBottom"in w){let F=w.stickyRight&&w.stickyBottom?"bottom-right":w.stickyRight?"top-right":w.stickyBottom?"bottom-left":null,{stickyRight:J,stickyBottom:ne,...j}=w;return{...j,anchor:F}}return w}),u=Object.keys(g.panels)[0]||null;return a(w=>({...w,gridRoot:g.gridRoot,floating:d,minimized:g.minimized,panels:g.panels,draggedPanelId:null,activePanelId:u})),!0}return!1}catch(g){return console.error("Failed to parse layout configuration:",g),!1}},[]),$e=de(o=>{a(g=>g.activePanelId===o?g:{...g,activePanelId:o})},[]),Ft=de(o=>{a(g=>g.dir===o?g:{...g,dir:o,isRtl:o==="rtl"})},[]),_t=de(o=>o in R.current.panels,[]),Ct=de(()=>Object.keys(R.current.panels),[]);St(()=>{N&&a(o=>o.dir===N?o:{...o,dir:N,isRtl:N==="rtl"})},[N]);let Ke=Ye(new Map),et=de((o,g)=>(Ke.current.set(o,g),()=>{Ke.current.delete(o)}),[]),tt=de(o=>Ke.current.get(o)?.()??[],[]),Ze=Vt(()=>({openPanel:se,closePanel:Z,minimizePanel:ce,restorePanel:fe,floatPanel:he,dockPanel:Ne,maximizePanel:Qe,updateSplitSizes:ct,updateFloatingPosition:wt,focusPanel:oe,isOpen:_t,getOpenPanelIds:Ct,saveLayout:At,loadLayout:Ve,publish:B,subscribe:k,setDraggedPanelId:ke,dockPanelToGroup:Re,movePanelOrder:Ot,closeLeafGroup:lt,registerCloseGuard:_,unregisterCloseGuard:y,setPanelDirty:$,updatePanelTitle:U,requestClosePanel:Y,dockPanelToWorkspaceEdge:Dt,setActivePanel:$e,setDirection:Ft,registerPanelContextMenu:et,getPanelContextMenuItems:tt}),[se,Z,ce,fe,he,Ne,Qe,ct,wt,oe,_t,Ct,At,Ve,B,k,ke,Re,Ot,lt,_,y,$,U,Y,Dt,$e,Ft,et,tt]),Ht=o=>{let g=o.defaultMessage||o.id;return o.values&&Object.entries(o.values).forEach(([d,u])=>{g=g.replace(`{${d}}`,String(u))}),g},rn=Vt(()=>({modalClass:P,modalBodyClass:W,sidePanelClass:f,sidePanelBodyClass:C,windowClass:b,windowBodyClass:h}),[P,W,f,C,b,h]);St(()=>{if(process.env.NODE_ENV==="development")try{getComputedStyle(document.documentElement).getPropertyValue("--rdd-styles-loaded").trim()!=="1"&&console.error(`[react-dockable-desktop] styles.css is not imported.
2
2
  Add this to your entry file (main.tsx / index.tsx):
3
3
  import 'react-dockable-desktop/styles.css'
4
- Without it the workspace renders as a black screen with no console errors.`)}catch{}let o=!1;try{for(let g of Array.from(document.styleSheets))try{if(Array.from(g.cssRules||[]).some(d=>d.cssText?.includes("react-contexify"))){o=!0;break}}catch{}}catch{}o||console.warn(`[react-dockable-desktop] replace-react-contexify CSS not detected. Context menus may not render correctly.
5
- Add: import "replace-react-contexify/dist/ReactContexify.css"`)},[]),dt(()=>{if(n)return n._connect(it),()=>{n._disconnect()}},[n,it]);let bt=Rt(()=>({getSnapshot:_,subscribeToState:A}),[_,A]);return $e(rn.Provider,{value:Ce,children:$e(sn.Provider,{value:v,children:$e(nn.Provider,{value:bt,children:$e(en.Provider,{value:O,children:$e(Mt.Provider,{value:it,children:$e(tn.Provider,{value:S||Nt,children:$e(on.Provider,{value:F,children:t})})})})})})})},Qt=t=>()=>{};function Re(t){let n=Se(en),r=Se(nn),i=Ie(t);i.current=t;let b=$n(t?r?.subscribeToState??Qt:Qt,()=>{let P=r?.getSnapshot()??n;return i.current?i.current(P):P},()=>{let P=r?.getSnapshot()??n;return i.current?i.current(P):P});if(!n)throw new Error("useWindowManagerState must be used within WindowManagerProvider");return t?b:n}var ut=()=>{let t=Se(Mt);if(!t)throw new Error("useWindowManagerActions must be used within WindowManagerProvider");return t},Ft=()=>{let t=Se(Mt);if(!t)throw new Error("useWindowManagerActionsInternal must be used within WindowManagerProvider");return t},be=()=>Se(tn)||(n=>{let r=n.defaultMessage||n.id;return n.values&&Object.entries(n.values).forEach(([i,b])=>{r=r.replace(`{${i}}`,String(b))}),r}),j=(t,n)=>t?typeof t=="string"?t:n(t):"",Vn=()=>{let{publish:t,subscribe:n}=ut();return{publish:t,subscribe:n}},Me=()=>Se(on),an=()=>at().instanceId;function qn(t){let n=Se(Mt),r=an(),i=Ie(t);i.current=t,dt(()=>{if(!(!n?.registerPanelContextMenu||!r))return n.registerPanelContextMenu(r,()=>i.current)},[r,n?.registerPanelContextMenu])}function ln(t){if(!t)return typeof document<"u"?document.documentElement.dir?.toLowerCase()==="rtl"||document.body.dir?.toLowerCase()==="rtl":!1;let n=t.closest("[dir]");return n?n.getAttribute("dir")?.toLowerCase()==="rtl":document.documentElement.dir?.toLowerCase()==="rtl"||document.body.dir?.toLowerCase()==="rtl"}import{JsonContextMenu as eo}from"replace-react-contexify";import"replace-react-contexify/styles.css";import{createContext as un,useContext as pn,useState as Kn,useCallback as ye,useMemo as jn,useRef as Un}from"react";import{jsx as cn}from"react/jsx-runtime";var Jn=0,At=()=>`panel-${++Jn}-${Date.now()}`,kt=new Map,dn={leftPanel:null,rightPanel:null,modals:[]},gn=un(null),fn=un(null),Bt=({children:t})=>{let[n,r]=Kn(dn),i=Un(n);i.current=n;let b=ye((p,w)=>{kt.set(p,w)},[]),P=ye(p=>{kt.delete(p)},[]),k=ye(async(p,w,I={})=>{let _=i.current.leftPanel;if(_){let F=kt.get(_.id);if(F&&!await F())return null}let A=At(),W={id:A,Component:p,props:w,containerType:"left-panel",options:I};return r(F=>({...F,leftPanel:W})),A},[]),T=ye(async(p,w,I={})=>{let _=i.current.rightPanel;if(_){let F=kt.get(_.id);if(F&&!await F())return null}let A=At(),W={id:A,Component:p,props:w,containerType:"right-panel",options:I};return r(F=>({...F,rightPanel:W})),A},[]),R=ye((p,w,I={})=>{let _=At(),A=w.title,W={...I,title:I.title||A||"Confirmation"},F={id:_,Component:p,props:w,containerType:"modal",options:W};return r(J=>({...J,modals:[...J.modals,F]})),_},[]),M=ye(p=>{r(w=>({leftPanel:w.leftPanel?.id===p?null:w.leftPanel,rightPanel:w.rightPanel?.id===p?null:w.rightPanel,modals:w.modals.filter(I=>I.id!==p)}))},[]),N=ye(()=>{r(dn)},[]),v=ye(()=>{r(p=>({...p,modals:[]}))},[]),S=ye(p=>n.leftPanel?.id===p?n.leftPanel:n.rightPanel?.id===p?n.rightPanel:n.modals.find(w=>w.id===p),[n]),z=ye((p,w)=>{r(I=>({leftPanel:I.leftPanel?.id===p?{...I.leftPanel,...w}:I.leftPanel,rightPanel:I.rightPanel?.id===p?{...I.rightPanel,...w}:I.rightPanel,modals:I.modals.map(_=>_.id===p?{..._,...w}:_)}))},[]),D=ye((p,w,I)=>{z(p,{dirty:w,dirtyOptions:I})},[z]),O=jn(()=>({openLeftPanel:k,openRightPanel:T,openModal:R,close:M,closeAll:N,closeAllModals:v,getInstance:S,updateInstance:z,setDirty:D,registerCloseHandler:b,unregisterCloseHandler:P}),[k,T,R,M,N,v,S,z,D,b,P]);return cn(gn.Provider,{value:n,children:cn(fn.Provider,{value:O,children:t})})},Ae=()=>{let t=pn(gn);if(!t)throw new Error("usePanelState must be used within PanelProvider");return t},Xe=()=>{let t=pn(fn);if(!t)throw new Error("usePanelActions must be used within PanelProvider");return t};import{useEffect as mn,useRef as Zn}from"react";import{jsx as Ve,jsxs as Ht}from"react/jsx-runtime";var Qn=({title:t,message:n,alert:r,alertType:i="info",useYesNoTitles:b=!1,onOK:P,onCancel:k})=>{let{requestClose:T,setIcon:R,setTitle:M}=at(),N=be(),v=Me(),S=Zn(null);mn(()=>{if(t){let I=typeof t=="string"?t:N(t);M(I)}R&&R(Ve("span",{children:"\u2753"}))},[t,M,R,N]),mn(()=>{S.current?.focus()},[]);let z=typeof n=="string"?n:N(n),D=N(b?v.no:v.cancel),O=N(b?v.yes:v.ok),p=I=>{I.preventDefault(),P?.(),T()},w=()=>{k?.(),T()};return Ht("form",{onSubmit:p,className:"confirmation-form-body",children:[r&&Ht("div",{className:`confirmation-alert confirmation-alert-${i}`,children:[Ve("span",{children:"\u2139\uFE0F"}),Ve("span",{children:r})]}),Ve("div",{style:{fontSize:"0.9rem",color:"inherit",lineHeight:1.5},children:z}),Ve("hr",{style:{marginTop:"0.5rem",marginBottom:"0.5rem",opacity:.1}}),Ht("div",{className:"confirmation-actions",children:[Ve("button",{type:"button",className:"dw-btn dw-btn-sm dw-btn-outline",onClick:w,children:D}),Ve("button",{type:"submit",className:"dw-btn dw-btn-sm dw-btn-primary",ref:S,children:O})]})]})},qe=Qn;import{Fragment as vn,jsx as f,jsxs as U}from"react/jsx-runtime";var bn=(t,n)=>{if(!t)return null;if(t.type==="leaf")return t.id===n?t:null;for(let r of t.children){let i=bn(r,n);if(i)return i}return null},pt=new Map,It="preserved-dom-container",Gt=U("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:[f("rect",{x:"3",y:"3",width:"7",height:"9",rx:"1"}),f("rect",{x:"14",y:"3",width:"7",height:"5",rx:"1"}),f("rect",{x:"14",y:"12",width:"7",height:"9",rx:"1"}),f("rect",{x:"3",y:"16",width:"7",height:"5",rx:"1"})]}),Ze={float:f("span",{className:"wm-menu-icon",children:U("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:[f("rect",{x:"2",y:"8",width:"14",height:"14",rx:"1"}),f("rect",{x:"8",y:"2",width:"14",height:"14",rx:"1"})]})}),minimize:f("span",{className:"wm-menu-icon",children:f("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",style:{display:"block"},children:f("line",{x1:"4",y1:"18",x2:"20",y2:"18"})})}),restore:f("span",{className:"wm-menu-icon",children:f("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:f("rect",{x:"4",y:"4",width:"16",height:"16",rx:"1"})})}),maximize:f("span",{className:"wm-menu-icon",children:f("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:f("rect",{x:"2",y:"2",width:"20",height:"20",rx:"1"})})}),close:f("span",{className:"wm-menu-icon",children:f("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:f("path",{d:"M18 6L6 18M6 6l12 12"})})})},yn=t=>{let n=pt.get(t);return n||(n=document.createElement("div"),n.style.width="100%",n.style.height="100%",pt.set(t,n)),n},to=(t,n,r)=>{let i=r.get(n);if(!i)return console.warn(`[react-dockable-desktop] Panel "${t}" references component key "${n}" which is not registered. Add it to the WorkspaceClient panels config:
6
- new WorkspaceClient({ panels: { "${n}": { component: YourComponent } } })`),U("div",{className:"dw-unregistered-panel",style:{border:"2px dashed #dc3545"},children:[f("h6",{style:{fontWeight:700,marginBottom:"0.25rem"},children:"\u26A0\uFE0F Component Unregistered"}),U("span",{style:{fontSize:"0.875rem",color:"var(--text-secondary, #94a3b8)"},children:["Key: ",n]})]});let b=i.Component;return f(b,{panelId:t})},Pn=new Map,Qe=new Map,Tt=t=>{let n=Qe.get(t);return n||(n={onClose:new Set,onMinimize:new Set,onRestore:new Set,onResize:new Set},Qe.set(t,n)),n},xn=({panelId:t})=>{let n=pe(null);return le(()=>{let r=n.current;if(!r)return;let i=yn(t);r.appendChild(i);let b=new ResizeObserver(P=>{for(let k of P){let{width:T,height:R}=k.contentRect;if(T>0&&R>0){Pn.set(t,{width:T,height:R});let M=Qe.get(t);M&&M.onResize.forEach(N=>N(T,R))}}});return b.observe(r),()=>{b.disconnect();let P=document.getElementById(It);P||(P=document.createElement("div"),P.id=It,P.style.display="none",document.body.appendChild(P)),P.appendChild(i)}},[t]),f("div",{ref:n,style:{width:"100%",height:"100%"}})},no=({panelId:t})=>{let n=Re(),r=ct(),i=be(),b=pe(null),P=n.panels[t],k=P?r.get(P.component):null,T=k?.defaultOptions?.disableLivePreview||!1,R=Pn.get(t)||{width:800,height:500},M=R.width,N=R.height,z=Math.min(220/M,140/N);if(le(()=>{if(T)return;let D=b.current;if(!D)return;let O=pt.get(t);if(O)return D.appendChild(O),()=>{let p=document.getElementById(It);p||(p=document.createElement("div"),p.id=It,p.style.display="none",document.body.appendChild(p)),p.appendChild(O)}},[t,T]),T){let D=M*z,O=N*z,p=P?.title||k?.defaultOptions?.title||"Panel",w=j(p,i),I=(Array.from(w)[0]||"P").toUpperCase();return f("div",{className:"taskbar-item-preview-frame",style:{width:`${D}px`,height:`${O}px`,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(108, 117, 125, 0.15)",border:"1px dashed var(--taskbar-item-border, rgba(255, 255, 255, 0.15))"},children:f("div",{style:{fontSize:"2rem",fontWeight:600,color:"var(--panel-title-color, var(--panel-text, rgba(255, 255, 255, 0.85)))",userSelect:"none"},children:I})})}return f("div",{className:"taskbar-item-preview-frame",style:{width:`${M*z}px`,height:`${N*z}px`},children:f("div",{ref:b,className:"taskbar-item-preview-host",style:{width:`${M}px`,height:`${N}px`,transform:`scale(${z})`,transformOrigin:"top left",position:"absolute",top:0,left:0,"--preview-scale":z}})})},oo=({panelId:t,children:n})=>{let r=Re(),{requestClosePanel:i,setPanelDirty:b,registerCloseGuard:P,unregisterCloseGuard:k,updatePanelTitle:T}=ut(),R=r.minimized.some(v=>v.id===t),M=pe(R);le(()=>{let v=Qe.get(t);v&&(R&&!M.current?v.onMinimize.forEach(S=>S()):!R&&M.current&&v.onRestore.forEach(S=>S()),M.current=R)},[R,t]),le(()=>()=>{let v=Qe.get(t);v&&(v.onClose.forEach(S=>S()),Qe.delete(t))},[t]);let N=$t.useMemo(()=>({requestClose:v=>i(t,v),setDirty:v=>b(t,v),onCloseRequested:v=>(P(t,v),()=>k(t)),setTitle:v=>T(t,v),instanceId:t,onClose:v=>{let S=Tt(t);return S.onClose.add(v),()=>S.onClose.delete(v)},onMinimize:v=>{let S=Tt(t);return S.onMinimize.add(v),()=>S.onMinimize.delete(v)},onRestore:v=>{let S=Tt(t);return S.onRestore.add(v),()=>S.onRestore.delete(v)},onResize:v=>{let S=Tt(t);return S.onResize.add(v),()=>S.onResize.delete(v)}}),[t,i,b,P,k,T]);return f(Ge,{value:N,children:n})},Cn=({node:t,path:n,onTabRightClick:r,activeDropZone:i,onHoverDropZone:b,onTabDragStart:P,hoveredTab:k,onTabHover:T,defaultPanelIcon:R,onRequestClosePanel:M})=>{let{updateSplitSizes:N}=ut();if(t.type==="leaf")return f(io,{leaf:t,onTabRightClick:r,activeDropZone:i,onHoverDropZone:b,onTabDragStart:P,hoveredTab:k,onTabHover:T,defaultPanelIcon:R,onRequestClosePanel:M});let v=t.orientation==="horizontal",S=(z,D)=>{D.preventDefault();let O=D.currentTarget;O.setPointerCapture(D.pointerId);let p=v?D.clientX:D.clientY,w=[...t.sizes];O.classList.add("active"),document.body.classList.add("resizing-active",v?"resizing-col-active":"resizing-row-active");let I=O.parentElement,_=I?v?I.clientWidth:I.clientHeight:v?1e3:800,A=F=>{let x=((v?F.clientX:F.clientY)-p)/_,Z=[...w];Z[z]+=x,Z[z+1]-=x,Z[z]>.1&&Z[z+1]>.1&&N(n,Z)},W=()=>{O.classList.remove("active"),document.body.classList.remove("resizing-active","resizing-row-active","resizing-col-active"),O.removeEventListener("pointermove",A),O.removeEventListener("pointerup",W),O.removeEventListener("pointercancel",W)};O.addEventListener("pointermove",A),O.addEventListener("pointerup",W),O.addEventListener("pointercancel",W)};return f("div",{style:{display:"flex",flexDirection:v?"row":"column",width:"100%",height:"100%",overflow:"hidden",position:"relative"},children:t.children.map((z,D)=>{let O=t.sizes[D]*100;return U($t.Fragment,{children:[f("div",{style:{flexGrow:t.sizes[D],flexBasis:`${O}%`,overflow:"hidden",position:"relative"},children:f(Cn,{node:z,path:[...n,D],onTabRightClick:r,activeDropZone:i,onHoverDropZone:b,onTabDragStart:P,hoveredTab:k,onTabHover:T,defaultPanelIcon:R,onRequestClosePanel:M})}),D<t.children.length-1&&f("div",{onPointerDown:p=>S(D,p),style:{cursor:v?"col-resize":"row-resize",width:v?"1px":"100%",height:v?"100%":"1px",zIndex:20},className:"resizer-bar"})]},D)})})},io=({leaf:t,onTabRightClick:n,activeDropZone:r,onHoverDropZone:i,onTabDragStart:b,hoveredTab:P,onTabHover:k,defaultPanelIcon:T,onRequestClosePanel:R})=>{let M=Re(),N=ct(),{openPanel:v,closeLeafGroup:S,setActivePanel:z}=Ft(),D=be(),O=Me(),{windowClass:p,windowBodyClass:w}=Fe(),I=pe(null),[_,A]=ke({left:!1,right:!1}),W=_t(()=>{let x=I.current;x&&A({left:x.scrollLeft>0,right:x.scrollLeft<x.scrollWidth-x.clientWidth-1})},[]);le(()=>{let x=I.current;if(!x)return;x.addEventListener("scroll",W,{passive:!0});let Z=new ResizeObserver(W);return Z.observe(x),W(),()=>{x.removeEventListener("scroll",W),Z.disconnect()}},[W]);let F=x=>{I.current?.scrollBy({left:x==="left"?-120:120,behavior:"smooth"})},J=x=>{v(x,M.panels[x].component),z(x)};return U("div",{"data-active-panel-id":t.activePanelId||"",className:`workspace-panel ${p??""}`,style:{overflow:"hidden",position:"relative"},children:[U("div",{className:"workspace-tab-bar",style:{minHeight:"38px"},children:[_.left&&f("button",{className:"tab-scroll-btn tab-scroll-btn-left",onPointerDown:x=>x.stopPropagation(),onClick:()=>F("left"),tabIndex:-1,"aria-label":"Scroll tabs left",children:"\u2039"}),f("div",{ref:I,className:"tab-headers-container",style:{scrollbarWidth:"none"},onPointerMove:x=>{M.draggedPanelId&&x.target===x.currentTarget&&k(t.id,"EMPTY",t.panels.length,"right")},onPointerLeave:x=>{M.draggedPanelId&&x.target===x.currentTarget&&k(t.id,"",-1,null)},children:t.panels.map((x,Z)=>{let te=M.panels[x];if(!te)return null;let ne=t.activePanelId===x,se=M.activePanelId===x,Q=N.get(te.component)?.defaultOptions,Y=P&&P.leafId===t.id&&P.panelId===x,ee=Z===t.panels.length-1,re=P&&P.leafId===t.id&&P.panelId==="EMPTY"&&ee,ce=Y?P.side==="left"?"drag-hover-left":"drag-hover-right":re?"drag-hover-right":"",K=ne?se?"active workspace-tab-active-focused":"active workspace-tab-active-unfocused":"workspace-tab-inactive";return U("div",{"data-tab-id":x,"data-leaf-id":t.id,"data-tab-index":String(Z),onClick:()=>J(x),onPointerDown:V=>{Q?.canDrag!==!1&&b(x,V)},onContextMenu:V=>n(x,V),onPointerMove:V=>{if(M.draggedPanelId&&V.pointerType!=="touch"){let oe=V.currentTarget.getBoundingClientRect(),ie=V.clientX-oe.left<oe.width/2?"left":"right";k(t.id,x,Z,ie)}},onPointerLeave:()=>{M.draggedPanelId&&k(t.id,"",-1,null)},className:`workspace-tab ${K} ${ce}`,style:{cursor:Q?.canDrag===!1?"default":"pointer"},children:[U("span",{className:"text-truncate",style:{maxWidth:"120px",display:"flex",alignItems:"center"},children:[f("span",{className:"workspace-tab-icon",children:Q?.icon||T||Gt}),U("span",{children:[j(te.title,D),te.dirty?" *":""]})]}),Q?.renderHeaderActions&&f("span",{className:"tab-header-actions",onClick:V=>V.stopPropagation(),onPointerDown:V=>V.stopPropagation(),children:Q.renderHeaderActions(x)}),Q?.canClose!==!1&&f("span",{onClick:V=>{V.stopPropagation(),R(x)},title:j(O.closeTab,D),className:"close-tab-x",style:{width:"18px",height:"18px",...Q?.renderHeaderActions?{}:{marginInlineStart:"auto"}},children:f("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:f("path",{d:"M18 6L6 18M6 6l12 12"})})})]},x)})}),_.right&&f("button",{className:"tab-scroll-btn tab-scroll-btn-right",onPointerDown:x=>x.stopPropagation(),onClick:()=>F("right"),tabIndex:-1,"aria-label":"Scroll tabs right",children:"\u203A"}),t.panels.length===0&&t.keepOnEmpty&&t.canClose!==!1&&f("span",{onClick:()=>S(t.id),className:"close-tab-x header-close-empty-group",style:{width:"18px",height:"18px",cursor:"pointer"},title:j(O.closeEmptyGroup,D),children:f("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:f("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),U("div",{className:`dw-panel-body ${w??""}`,style:{position:"relative",overflow:"hidden"},children:[t.activePanelId&&M.panels[t.activePanelId]?f(xn,{panelId:t.activePanelId},t.activePanelId):f("div",{className:"empty-leaf-placeholder",children:f("span",{children:"Empty Workspace Section"})}),M.draggedPanelId!==null&&f("div",{className:"dock-drop-zone-overlay",children:U("div",{className:"dock-target-cross",children:[f("div",{"data-leaf-id":t.id,"data-drop-zone":"top",onPointerEnter:()=>i(t.id,"top"),onPointerLeave:()=>i(t.id,null),className:"dock-target-box dock-target-top",children:"\u25B2"}),f("div",{"data-leaf-id":t.id,"data-drop-zone":"bottom",onPointerEnter:()=>i(t.id,"bottom"),onPointerLeave:()=>i(t.id,null),className:"dock-target-box dock-target-bottom",children:"\u25BC"}),f("div",{"data-leaf-id":t.id,"data-drop-zone":"left",onPointerEnter:()=>i(t.id,"left"),onPointerLeave:()=>i(t.id,null),className:"dock-target-box dock-target-left",children:"\u25C0"}),f("div",{"data-leaf-id":t.id,"data-drop-zone":"right",onPointerEnter:()=>i(t.id,"right"),onPointerLeave:()=>i(t.id,null),className:"dock-target-box dock-target-right",children:"\u25B6"}),f("div",{"data-leaf-id":t.id,"data-drop-zone":"center",onPointerEnter:()=>i(t.id,"center"),onPointerLeave:()=>i(t.id,null),className:"dock-target-box dock-target-center",children:"\u25A3"})]})}),M.draggedPanelId!==null&&r!==null&&r.leafId===t.id&&f("div",{className:"dock-preview-highlight",style:{left:r.position==="right"?"50%":"0",top:r.position==="bottom"?"50%":"0",width:r.position==="left"||r.position==="right"?"50%":"100%",height:r.position==="top"||r.position==="bottom"?"50%":"100%"}})]})]})},ro=({skin:t="vscode",defaultPanelIcon:n,taskbarVisibility:r="always"})=>{let i=Re(),b=ct(),{restorePanel:P,minimizePanel:k,requestClosePanel:T,maximizePanel:R,updateFloatingPosition:M,focusPanel:N,floatPanel:v,setDraggedPanelId:S,dockPanelToGroup:z,movePanelOrder:D,dockPanelToWorkspaceEdge:O,setActivePanel:p,setDirection:w,getPanelContextMenuItems:I}=Ft(),{openModal:_}=Xe(),A=be(),W=Me(),F=$t.useCallback(e=>{let l=i.panels[e];T(e,{onConfirm:s=>new Promise(c=>{let u=s||l?.dirtyOptions,h=l?j(l.title,A):"Panel";_(qe,{title:u?.title||W.unsavedChangesTitle,message:u?.message||{id:W.unsavedChangesMessage.id,defaultMessage:W.unsavedChangesMessage.defaultMessage,values:{title:h}},alert:u?.alert,alertType:u?.alertType||"danger",useYesNoTitles:!0,onOK:()=>c(!0),onCancel:()=>c(!1)},{size:"small"})})})},[T,i.panels,A,_,W]),{windowClass:J,windowBodyClass:x}=Fe(),Z=pe(null),te=pe(null),[ne,se]=ke(!1),$=pe(null),Q=pe(i.minimized.length),[Y,ee]=ke(null),re=pe(null),ce=pe("mouse"),[K,V]=ke(!1);le(()=>()=>{re.current&&clearTimeout(re.current)},[]),le(()=>{Y&&(i.minimized.some(l=>l.id===Y.id)||ee(null))},[i.minimized,Y]),le(()=>{if(!Y?.fromTouch)return;let e=l=>{l.pointerType!=="touch"||document.querySelector(".taskbar-item-tooltip")?.contains(l.target)||ee(null)};return document.addEventListener("pointerdown",e,{capture:!0}),()=>document.removeEventListener("pointerdown",e,{capture:!0})},[Y?.fromTouch]);let[oe,B]=ke(null),ie=pe(null),[ge,ve]=ke({x:0,y:0}),[Ee,Le]=ke(null),ze=pe(null),ue=e=>{Le(e),ze.current=e},[ft,Ne]=ke(null),Te=pe(null),mt=(e,l,s,c)=>{let u=c?{leafId:e,panelId:l,index:s,side:c}:null;Ne(u),Te.current=u},ht=(e,l)=>{let s=l?{leafId:e,position:l}:null;B(s),ie.current=s},tt=(e,l)=>{let s=document.elementsFromPoint(e,l),c=!1,u=!1,h=!1;for(let y of s)if(y instanceof HTMLElement){if(!c&&y.dataset.dropZone){let m=y.dataset.leafId;if(m){let E=y.dataset.dropZone;B({leafId:m,position:E}),ie.current={leafId:m,position:E},c=!0}}if(!h&&y.dataset.tabId){let m=y.dataset.leafId,E=parseInt(y.dataset.tabIndex||"0",10);if(m){let L=y.getBoundingClientRect(),C=e-L.left<L.width/2?"left":"right";Ne({leafId:m,panelId:y.dataset.tabId,index:E,side:C}),Te.current={leafId:m,panelId:y.dataset.tabId,index:E,side:C},h=!0}}if(!u&&y.dataset.edgeTrigger&&(ue(y.dataset.edgeTrigger),u=!0),c&&u&&h)break}c||(B(null),ie.current=null),u||ue(null),h||(Ne(null),Te.current=null)},Be=300,He=8,_e=()=>{S(null),B(null),ie.current=null,Ne(null),Te.current=null,ue(null)},nt=(e,l)=>{let s=ie.current,c=Te.current,u=ze.current;if(u)O(e,u);else if(c){let h=c.index;c.side==="right"&&(h+=1);let y=bn(i.gridRoot,c.leafId);if(y){let m=y.panels.indexOf(e);m!==-1&&m<h&&(h-=1)}D(e,c.leafId,h)}else s?z(e,s.leafId,s.position):v(e,{x:l.clientX-150,y:l.clientY-15,width:450,height:350});_e()},vt=(e,l)=>{if(l.pointerType==="mouse"&&l.button!==0)return;let s=l.currentTarget,c=l.clientX,u=l.clientY;if(l.pointerType==="touch"){let h=l.pointerId,y=!1,m=()=>{y=!0,clearTimeout(L),s.removeEventListener("pointermove",E),s.removeEventListener("pointerup",m),s.removeEventListener("pointercancel",m)},E=C=>{Math.hypot(C.clientX-c,C.clientY-u)>He&&m()},L=setTimeout(()=>{if(y)return;s.removeEventListener("pointermove",E),s.removeEventListener("pointerup",m),s.removeEventListener("pointercancel",m);try{s.setPointerCapture(h)}catch{return}s.classList.add("long-press-active"),navigator.vibrate&&navigator.vibrate(10);let C=!1,H=ae=>{C||(C=!0,S(e)),ve({x:ae.clientX,y:ae.clientY}),tt(ae.clientX,ae.clientY)},q=ae=>{s.classList.remove("long-press-active"),s.removeEventListener("pointermove",H),s.removeEventListener("pointerup",q),s.removeEventListener("pointercancel",G),C?nt(e,ae):ot(e,ae)},G=()=>{s.classList.remove("long-press-active"),s.removeEventListener("pointermove",H),s.removeEventListener("pointerup",q),s.removeEventListener("pointercancel",G),C&&_e()};s.addEventListener("pointermove",H),s.addEventListener("pointerup",q),s.addEventListener("pointercancel",G)},Be);s.addEventListener("pointermove",E),s.addEventListener("pointerup",m),s.addEventListener("pointercancel",m)}else{let h=!1,y=E=>{let L=E.clientX-c,C=E.clientY-u;!h&&(Math.abs(L)>5||Math.abs(C)>5)&&(h=!0,S(e)),h&&ve({x:E.clientX,y:E.clientY})},m=E=>{window.removeEventListener("pointermove",y),window.removeEventListener("pointerup",m),h&&nt(e,E)};window.addEventListener("pointermove",y),window.addEventListener("pointerup",m)}},ot=(e,l)=>{l.preventDefault();let s=i.panels[e];if(!s)return;let u=b.get(s.component)?.defaultOptions,h=[];if(u?.canDrag!==!1&&h.push({label:j(W.floatWindow,A),icon:Ze.float,action:()=>v(e)}),u?.canMinimize!==!1&&h.push({label:j(W.minimizePanel,A),icon:Ze.minimize,action:()=>k(e)}),h.length>0&&u?.canClose!==!1&&h.push({separator:!0}),u?.canClose!==!1&&h.push({label:j(W.closeTab,A),icon:Ze.close,action:()=>F(e)}),h.length===0)return;let y=I(e),m=y.length>0?[...h,{separator:!0},...y]:h;te.current?.show({event:l,contextMenu:{items:m}})},We=(e,l)=>{l.preventDefault(),ee(null),te.current?.show({event:l,contextMenu:{items:[{label:j(W.restorePanel,A),icon:Ze.restore,action:()=>P(e)},{label:j(W.maximizePanel,A),icon:Ze.maximize,action:()=>R(e)},{separator:!0},{label:j(W.closePanel,A),icon:Ze.close,action:()=>F(e)}]}})};le(()=>{let e=Object.keys(i.panels);for(let l of Array.from(pt.keys()))e.includes(l)||pt.delete(l)},[i.panels]),le(()=>{let e=()=>{i.draggedPanelId!==null&&(S(null),B(null),Ne(null))};return window.addEventListener("blur",e),()=>{window.removeEventListener("blur",e)}},[i.draggedPanelId]);let Ke=pe(null),[xe,it]=ke({width:1024,height:768});le(()=>{let e=Ke.current;if(!e)return;let l=!1,s=new ResizeObserver(c=>{if(!c||c.length===0)return;let u=c[0].contentRect;if(process.env.NODE_ENV==="development"&&u.height<10&&!l){l=!0;let h=e,y=e.parentElement;for(;y&&y!==document.documentElement&&y.getBoundingClientRect().height<10;){h=y;y=y.parentElement}let m=h.tagName.toLowerCase(),E=h.id?` id="${h.id}"`:"",L=h.className?` class="${h.className}"`:"",C=h===e?"the WindowManager container itself":`a wrapper element: <${m}${E}${L}>`;console.warn(`[react-dockable-desktop] Workspace height is 0px \u2014 the workspace will be invisible.
4
+ Without it the workspace renders as a black screen with no console errors.`)}catch{}},[]),St(()=>{if(t)return t._connect(Ze),()=>{t._disconnect()}},[t,Ze]);let Bt=Vt(()=>({getSnapshot:O,subscribeToState:v}),[O,v]);return ot(_n.Provider,{value:rn,children:ot(Hn.Provider,{value:l,children:ot(An.Provider,{value:Bt,children:ot(ft.Provider,{value:E,children:ot(Kt.Provider,{value:Ze,children:ot(On.Provider,{value:T||Ht,children:ot(Fn.Provider,{value:z,children:e})})})})})})})},Dn=e=>()=>{};function _e(e){let t=Xe(ft),n=Xe(An),i=Ye(e);i.current=e;let s=_o(e?n?.subscribeToState??Dn:Dn,()=>{let P=n?.getSnapshot()??t;return i.current?i.current(P):P},()=>{let P=n?.getSnapshot()??t;return i.current?i.current(P):P});if(!t)throw new Error("useWindowManagerState must be used within WindowManagerProvider");return e?s:t}var Et=()=>{let e=Xe(Kt);if(!e)throw new Error("useWindowManagerActions must be used within WindowManagerProvider");return e},dn=()=>{let e=Xe(Kt);if(!e)throw new Error("useWindowManagerActionsInternal must be used within WindowManagerProvider");return e},De=()=>Xe(On)||(t=>{let n=t.defaultMessage||t.id;return t.values&&Object.entries(t.values).forEach(([i,s])=>{n=n.replace(`{${i}}`,String(s))}),n}),me=(e,t)=>e?typeof e=="string"?e:t(e):"",$o=()=>{let{publish:e,subscribe:t}=Et();return{publish:e,subscribe:t}},He=()=>Xe(Fn),Bn=()=>Tt().instanceId;function Yo(e){let t=Xe(Kt),n=Bn(),i=Ye(e);i.current=e,St(()=>{if(!(!t?.registerPanelContextMenu||!n))return t.registerPanelContextMenu(n,()=>i.current)},[n,t?.registerPanelContextMenu])}import Xo,{forwardRef as Gn,useImperativeHandle as Go,useState as $n,useRef as Zt,useEffect as Yn,useLayoutEffect as Vn}from"react";import{createPortal as Kn}from"react-dom";import{Fragment as Ko,jsx as Pe,jsxs as ht}from"react/jsx-runtime";function Vo(e){return e?"touches"in e&&e.touches.length>0?{x:e.touches[0].clientX,y:e.touches[0].clientY}:{x:e.clientX,y:e.clientY}:{x:0,y:0}}function mt(e,t){return typeof e=="string"?e:t?t(e):e.defaultMessage??e.id}function un(e){return"separator"in e}function qt(e){return!un(e)&&"items"in e}var Zn=Gn(({items:e,x:t,y:n,theme:i,fmt:s,onClose:P,onMouseEnter:W,onMouseLeave:f},C)=>(Vn(()=>{let b=C?.current;if(!b)return;let h=b.getBoundingClientRect(),l=8;h.right>window.innerWidth-l&&(b.style.left=`${Math.max(l,window.innerWidth-h.width-l)}px`,b.style.right="auto"),h.bottom>window.innerHeight-l&&(b.style.top=`${Math.max(l,window.innerHeight-h.height-l)}px`),h.left<l&&(b.style.left=`${l}px`,b.style.right="auto"),h.top<l&&(b.style.top=`${l}px`)}),Kn(Pe("div",{ref:C,className:`dw-context-menu dw-context-menu--${i} dw-context-menu--submenu`,style:{position:"fixed",left:t,top:n,zIndex:9501},role:"menu",onMouseEnter:W,onMouseLeave:f,children:e.map((b,h)=>{if(un(b))return Pe("hr",{className:"dw-context-menu__separator",role:"separator"},h);let l=b,T=l.checkbox&&l.checkbox.active!==!1,L=T&&l.checkbox.value,N=l.disabled===!0||(T?l.checkbox.enabled===!1:!1);return ht("button",{type:"button",className:`dw-context-menu__item${N?" dw-context-menu__item--disabled":""}`,title:l.title?mt(l.title,s):void 0,disabled:N,"data-cy-action":l.cyAction,onClick:()=>{N||(l.action?.(),P())},role:"menuitem","aria-checked":T?L:void 0,children:[l.icon?Pe("span",{className:"dw-context-menu__icon",children:l.icon}):Pe("span",{className:"dw-context-menu__icon","aria-hidden":"true"}),Pe("span",{className:"dw-context-menu__label",children:mt(l.label,s)}),T&&Pe("span",{className:`dw-context-menu__checkbox${L?" dw-context-menu__checkbox--checked":""}`,"aria-hidden":"true",children:ht("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[Pe("rect",{x:"0.75",y:"0.75",width:"10.5",height:"10.5",rx:"2",fill:"none",stroke:"currentColor",strokeWidth:"1.5"}),L&&Pe("path",{d:"M2.5 6 L4.5 8.5 L9.5 3.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]})})]},h)})}),document.body)));Zn.displayName="ContextMenuSubMenuPanel";var Xn={visible:!1,x:0,y:0,items:[]},pn=Gn(({theme:e="dark",formatMessageProvider:t,onShow:n,onHide:i,onOpenChange:s,className:P,style:W},f)=>{let[C,b]=$n(Xn),[h,l]=$n(null),T=Zt(null),L=Zt(null),N=Zt(new Map),E=Zt({open:null,close:null}),a=Xo.useCallback(()=>{b(Xn),l(null),E.current.open&&clearTimeout(E.current.open),E.current.close&&clearTimeout(E.current.close),E.current.open=null,E.current.close=null,i?.(),s?.(!1)},[i,s]);if(Go(f,()=>({show({event:c,x:k,y:B,items:K}){let oe=c?Vo(c):{x:k??0,y:B??0};N.current.clear(),b({visible:!0,x:oe.x,y:oe.y,items:K}),l(null),n?.(),s?.(!0)}}),[n,s]),Yn(()=>{if(!C.visible)return;let c=k=>{T.current?.contains(k.target)||L.current?.contains(k.target)||a()};return document.addEventListener("mousedown",c),()=>document.removeEventListener("mousedown",c)},[C.visible,a]),Yn(()=>{if(!C.visible)return;let c=k=>{k.key==="Escape"&&a()};return document.addEventListener("keydown",c),()=>document.removeEventListener("keydown",c)},[C.visible,a]),Vn(()=>{if(!C.visible||!T.current)return;let c=T.current,k=c.getBoundingClientRect(),B=8;k.right>window.innerWidth-B&&(c.style.left=`${Math.max(B,window.innerWidth-k.width-B)}px`),k.bottom>window.innerHeight-B&&(c.style.top=`${Math.max(B,window.innerHeight-k.height-B)}px`),k.left<B&&(c.style.left=`${B}px`),k.top<B&&(c.style.top=`${B}px`)},[C.visible]),!C.visible)return null;let R=t,M=0,O=0;if(h!==null){let c=N.current.get(h);if(c){let k=c.getBoundingClientRect();M=document.documentElement.dir==="rtl"?window.innerWidth-k.left+2:k.right+2,O=k.top}}function v(){E.current.open&&(clearTimeout(E.current.open),E.current.open=null)}function I(){E.current.close&&(clearTimeout(E.current.close),E.current.close=null)}function z(c,k){I(),h!==null&&h!==c&&(v(),l(null)),qt(k)&&k.items?.length?(v(),E.current.open=setTimeout(()=>{l(c)},150)):qt(k)||(v(),h!==null&&(E.current.close=setTimeout(()=>l(null),200)))}function H(c){v(),qt(c)&&c.items?.length&&(E.current.close=setTimeout(()=>l(null),200))}return Kn(ht(Ko,{children:[Pe("div",{ref:T,className:`dw-context-menu dw-context-menu--${e}${P?` ${P}`:""}`,style:{position:"fixed",left:C.x,top:C.y,zIndex:9500,...W},role:"menu","aria-orientation":"vertical",children:C.items.map((c,k)=>{if(un(c))return Pe("hr",{className:"dw-context-menu__separator",role:"separator"},k);if(qt(c))return ht("button",{ref:te=>{N.current.set(k,te)},type:"button",className:`dw-context-menu__item dw-context-menu__item--has-submenu${h===k?" dw-context-menu__item--submenu-open":""}`,title:c.title?mt(c.title,R):void 0,onMouseEnter:()=>z(k,c),onMouseLeave:()=>H(c),role:"menuitem","aria-haspopup":"true","aria-expanded":h===k,children:[Pe("span",{className:"dw-context-menu__icon","aria-hidden":"true"}),Pe("span",{className:"dw-context-menu__label",children:mt(c.label,R)}),Pe("span",{className:"dw-context-menu__chevron","aria-hidden":"true",children:"\u203A"})]},k);let B=c,K=B.checkbox&&B.checkbox.active!==!1,oe=K&&B.checkbox.value,G=B.disabled===!0||(K?B.checkbox.enabled===!1:!1);return ht("button",{ref:te=>{N.current.set(k,te)},type:"button",className:`dw-context-menu__item${G?" dw-context-menu__item--disabled":""}`,title:B.title?mt(B.title,R):void 0,disabled:G,"data-cy-action":B.cyAction,onClick:()=>{G||(B.action?.(),a())},onMouseEnter:()=>z(k,c),onMouseLeave:()=>H(c),role:"menuitem","aria-checked":K?oe:void 0,children:[B.icon?Pe("span",{className:"dw-context-menu__icon",children:B.icon}):Pe("span",{className:"dw-context-menu__icon","aria-hidden":"true"}),Pe("span",{className:"dw-context-menu__label",children:mt(B.label,R)}),K&&Pe("span",{className:`dw-context-menu__checkbox${oe?" dw-context-menu__checkbox--checked":""}`,"aria-hidden":"true",children:ht("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[Pe("rect",{x:"0.75",y:"0.75",width:"10.5",height:"10.5",rx:"2",fill:oe?"currentColor":"none",stroke:"currentColor",strokeWidth:"1.5"}),oe&&Pe("path",{d:"M2.5 6 L4.5 8.5 L9.5 3.5",stroke:"white",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]})})]},k)})}),h!==null&&(()=>{let c=C.items[h];return Pe(Zn,{ref:L,items:c.items??[],x:M,y:O,theme:e,fmt:R,onClose:a,onMouseEnter:()=>I(),onMouseLeave:()=>{E.current.close=setTimeout(()=>l(null),200)}})})()]}),document.body)});pn.displayName="ContextMenu";var gn={Component:pn};import{createContext as Un,useContext as Jn,useState as Zo,useCallback as Oe,useMemo as qo,useRef as jo}from"react";import{jsx as jn}from"react/jsx-runtime";var Uo=0,fn=()=>`panel-${++Uo}-${Date.now()}`,jt=new Map,qn={leftPanel:null,rightPanel:null,modals:[]},Qn=Un(null),eo=Un(null),mn=({children:e})=>{let[t,n]=Zo(qn),i=jo(t);i.current=t;let s=Oe((a,R)=>{jt.set(a,R)},[]),P=Oe(a=>{jt.delete(a)},[]),W=Oe(async(a,R,M={})=>{let O=i.current.leftPanel;if(O){let z=jt.get(O.id);if(z&&!await z())return null}let v=fn(),I={id:v,Component:a,props:R,containerType:"left-panel",options:M};return n(z=>({...z,leftPanel:I})),v},[]),f=Oe(async(a,R,M={})=>{let O=i.current.rightPanel;if(O){let z=jt.get(O.id);if(z&&!await z())return null}let v=fn(),I={id:v,Component:a,props:R,containerType:"right-panel",options:M};return n(z=>({...z,rightPanel:I})),v},[]),C=Oe((a,R,M={})=>{let O=fn(),v=R.title,I={...M,title:M.title||v||"Confirmation"},z={id:O,Component:a,props:R,containerType:"modal",options:I};return n(H=>({...H,modals:[...H.modals,z]})),O},[]),b=Oe(a=>{n(R=>({leftPanel:R.leftPanel?.id===a?null:R.leftPanel,rightPanel:R.rightPanel?.id===a?null:R.rightPanel,modals:R.modals.filter(M=>M.id!==a)}))},[]),h=Oe(()=>{n(qn)},[]),l=Oe(()=>{n(a=>({...a,modals:[]}))},[]),T=Oe(a=>t.leftPanel?.id===a?t.leftPanel:t.rightPanel?.id===a?t.rightPanel:t.modals.find(R=>R.id===a),[t]),L=Oe((a,R)=>{n(M=>({leftPanel:M.leftPanel?.id===a?{...M.leftPanel,...R}:M.leftPanel,rightPanel:M.rightPanel?.id===a?{...M.rightPanel,...R}:M.rightPanel,modals:M.modals.map(O=>O.id===a?{...O,...R}:O)}))},[]),N=Oe((a,R,M)=>{L(a,{dirty:R,dirtyOptions:M})},[L]),E=qo(()=>({openLeftPanel:W,openRightPanel:f,openModal:C,close:b,closeAll:h,closeAllModals:l,getInstance:T,updateInstance:L,setDirty:N,registerCloseHandler:s,unregisterCloseHandler:P}),[W,f,C,b,h,l,T,L,N,s,P]);return jn(Qn.Provider,{value:t,children:jn(eo.Provider,{value:E,children:e})})},Ue=()=>{let e=Jn(Qn);if(!e)throw new Error("usePanelState must be used within PanelProvider");return e},it=()=>{let e=Jn(eo);if(!e)throw new Error("usePanelActions must be used within PanelProvider");return e};import{useEffect as to,useRef as Jo}from"react";import{jsx as st,jsxs as hn}from"react/jsx-runtime";var Qo=({title:e,message:t,alert:n,alertType:i="info",useYesNoTitles:s=!1,onOK:P,onCancel:W})=>{let{requestClose:f,setIcon:C,setTitle:b}=Tt(),h=De(),l=He(),T=Jo(null);to(()=>{if(e){let M=typeof e=="string"?e:h(e);b(M)}C&&C(st("span",{children:"\u2753"}))},[e,b,C,h]),to(()=>{T.current?.focus()},[]);let L=typeof t=="string"?t:h(t),N=h(s?l.no:l.cancel),E=h(s?l.yes:l.ok),a=M=>{M.preventDefault(),P?.(),f()},R=()=>{W?.(),f()};return hn("form",{onSubmit:a,className:"confirmation-form-body",children:[n&&hn("div",{className:`confirmation-alert confirmation-alert-${i}`,children:[st("span",{children:"\u2139\uFE0F"}),st("span",{children:n})]}),st("div",{style:{fontSize:"0.9rem",color:"inherit",lineHeight:1.5},children:L}),st("hr",{style:{marginTop:"0.5rem",marginBottom:"0.5rem",opacity:.1}}),hn("div",{className:"confirmation-actions",children:[st("button",{type:"button",className:"dw-btn dw-btn-sm dw-btn-outline",onClick:R,children:N}),st("button",{type:"submit",className:"dw-btn dw-btn-sm dw-btn-primary",ref:T,children:E})]})]})},at=Qo;import{Fragment as oo,jsx as x,jsxs as ge}from"react/jsx-runtime";var ro=(e,t)=>{if(!e)return null;if(e.type==="leaf")return e.id===t?e:null;for(let n of e.children){let i=ro(n,t);if(i)return i}return null},Lt=new Map,Jt="preserved-dom-container",vn=ge("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:[x("rect",{x:"3",y:"3",width:"7",height:"9",rx:"1"}),x("rect",{x:"14",y:"3",width:"7",height:"5",rx:"1"}),x("rect",{x:"14",y:"12",width:"7",height:"9",rx:"1"}),x("rect",{x:"3",y:"16",width:"7",height:"5",rx:"1"})]}),bt={float:x("span",{className:"wm-menu-icon",children:ge("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:[x("rect",{x:"2",y:"8",width:"14",height:"14",rx:"1"}),x("rect",{x:"8",y:"2",width:"14",height:"14",rx:"1"})]})}),minimize:x("span",{className:"wm-menu-icon",children:x("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",style:{display:"block"},children:x("line",{x1:"4",y1:"18",x2:"20",y2:"18"})})}),restore:x("span",{className:"wm-menu-icon",children:x("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:x("rect",{x:"4",y:"4",width:"16",height:"16",rx:"1"})})}),maximize:x("span",{className:"wm-menu-icon",children:x("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:x("rect",{x:"2",y:"2",width:"20",height:"20",rx:"1"})})}),close:x("span",{className:"wm-menu-icon",children:x("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:x("path",{d:"M18 6L6 18M6 6l12 12"})})})},io=e=>{let t=Lt.get(e);return t||(t=document.createElement("div"),t.style.width="100%",t.style.height="100%",Lt.set(e,t)),t},tr=(e,t,n)=>{let i=n.get(t);if(!i)return console.warn(`[react-dockable-desktop] Panel "${e}" references component key "${t}" which is not registered. Add it to the WorkspaceClient panels config:
5
+ new WorkspaceClient({ panels: { "${t}": { component: YourComponent } } })`),ge("div",{className:"dw-unregistered-panel",style:{border:"2px dashed #dc3545"},children:[x("h6",{style:{fontWeight:700,marginBottom:"0.25rem"},children:"\u26A0\uFE0F Component Unregistered"}),ge("span",{style:{fontSize:"0.875rem",color:"var(--text-secondary, #94a3b8)"},children:["Key: ",t]})]});let s=i.Component;return x(s,{panelId:e})},so=new Map,vt=new Map,Ut=e=>{let t=vt.get(e);return t||(t={onClose:new Set,onMinimize:new Set,onRestore:new Set,onResize:new Set},vt.set(e,t)),t},ao=({panelId:e})=>{let t=Me(null);return Ce(()=>{let n=t.current;if(!n)return;let i=io(e);n.appendChild(i);let s=new ResizeObserver(P=>{for(let W of P){let{width:f,height:C}=W.contentRect;if(f>0&&C>0){so.set(e,{width:f,height:C});let b=vt.get(e);b&&b.onResize.forEach(h=>h(f,C))}}});return s.observe(n),()=>{s.disconnect();let P=document.getElementById(Jt);P||(P=document.createElement("div"),P.id=Jt,P.style.display="none",document.body.appendChild(P)),P.appendChild(i)}},[e]),x("div",{ref:t,style:{width:"100%",height:"100%"}})},nr=({panelId:e})=>{let t=_e(),n=It(),i=De(),s=Me(null),P=t.panels[e],W=P?n.get(P.component):null,f=W?.defaultOptions?.disableLivePreview||!1,C=so.get(e)||{width:800,height:500},b=C.width,h=C.height,L=Math.min(220/b,140/h);if(Ce(()=>{if(f)return;let N=s.current;if(!N)return;let E=Lt.get(e);if(E)return N.appendChild(E),()=>{let a=document.getElementById(Jt);a||(a=document.createElement("div"),a.id=Jt,a.style.display="none",document.body.appendChild(a)),a.appendChild(E)}},[e,f]),f){let N=b*L,E=h*L,a=P?.title||W?.defaultOptions?.title||"Panel",R=me(a,i),M=(Array.from(R)[0]||"P").toUpperCase();return x("div",{className:"taskbar-item-preview-frame",style:{width:`${N}px`,height:`${E}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:x("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 x("div",{className:"taskbar-item-preview-frame",style:{width:`${b*L}px`,height:`${h*L}px`},children:x("div",{ref:s,className:"taskbar-item-preview-host",style:{width:`${b}px`,height:`${h}px`,transform:`scale(${L})`,transformOrigin:"top left",position:"absolute",top:0,left:0,"--preview-scale":L}})})},or=({panelId:e,children:t})=>{let n=_e(),{requestClosePanel:i,setPanelDirty:s,registerCloseGuard:P,unregisterCloseGuard:W,updatePanelTitle:f}=Et(),C=n.minimized.some(l=>l.id===e),b=Me(C);Ce(()=>{let l=vt.get(e);l&&(C&&!b.current?l.onMinimize.forEach(T=>T()):!C&&b.current&&l.onRestore.forEach(T=>T()),b.current=C)},[C,e]),Ce(()=>()=>{let l=vt.get(e);l&&(l.onClose.forEach(T=>T()),vt.delete(e))},[e]);let h=yn.useMemo(()=>({requestClose:l=>i(e,l),setDirty:l=>s(e,l),onCloseRequested:l=>(P(e,l),()=>W(e)),setTitle:l=>f(e,l),instanceId:e,onClose:l=>{let T=Ut(e);return T.onClose.add(l),()=>T.onClose.delete(l)},onMinimize:l=>{let T=Ut(e);return T.onMinimize.add(l),()=>T.onMinimize.delete(l)},onRestore:l=>{let T=Ut(e);return T.onRestore.add(l),()=>T.onRestore.delete(l)},onResize:l=>{let T=Ut(e);return T.onResize.add(l),()=>T.onResize.delete(l)}}),[e,i,s,P,W,f]);return x(nt,{value:h,children:t})},lo=({node:e,path:t,onTabRightClick:n,activeDropZone:i,onHoverDropZone:s,onTabDragStart:P,hoveredTab:W,onTabHover:f,defaultPanelIcon:C,onRequestClosePanel:b})=>{let{updateSplitSizes:h}=Et();if(e.type==="leaf")return x(rr,{leaf:e,onTabRightClick:n,activeDropZone:i,onHoverDropZone:s,onTabDragStart:P,hoveredTab:W,onTabHover:f,defaultPanelIcon:C,onRequestClosePanel:b});let l=e.orientation==="horizontal",T=(L,N)=>{N.preventDefault();let E=N.currentTarget;E.setPointerCapture(N.pointerId);let a=l?N.clientX:N.clientY,R=[...e.sizes];E.classList.add("active"),document.body.classList.add("resizing-active",l?"resizing-col-active":"resizing-row-active");let M=E.parentElement,O=M?l?M.clientWidth:M.clientHeight:l?1e3:800,v=z=>{let c=((l?z.clientX:z.clientY)-a)/O,k=[...R];k[L]+=c,k[L+1]-=c,k[L]>.1&&k[L+1]>.1&&h(t,k)},I=()=>{E.classList.remove("active"),document.body.classList.remove("resizing-active","resizing-row-active","resizing-col-active"),E.removeEventListener("pointermove",v),E.removeEventListener("pointerup",I),E.removeEventListener("pointercancel",I)};E.addEventListener("pointermove",v),E.addEventListener("pointerup",I),E.addEventListener("pointercancel",I)};return x("div",{style:{display:"flex",flexDirection:l?"row":"column",width:"100%",height:"100%",overflow:"hidden",position:"relative"},children:e.children.map((L,N)=>{let E=e.sizes[N]*100;return ge(yn.Fragment,{children:[x("div",{style:{flexGrow:e.sizes[N],flexBasis:`${E}%`,overflow:"hidden",position:"relative"},children:x(lo,{node:L,path:[...t,N],onTabRightClick:n,activeDropZone:i,onHoverDropZone:s,onTabDragStart:P,hoveredTab:W,onTabHover:f,defaultPanelIcon:C,onRequestClosePanel:b})}),N<e.children.length-1&&x("div",{onPointerDown:a=>T(N,a),style:{cursor:l?"col-resize":"row-resize",width:l?"1px":"100%",height:l?"100%":"1px",zIndex:20},className:"resizer-bar"})]},N)})})},rr=({leaf:e,onTabRightClick:t,activeDropZone:n,onHoverDropZone:i,onTabDragStart:s,hoveredTab:P,onTabHover:W,defaultPanelIcon:f,onRequestClosePanel:C})=>{let b=_e(),h=It(),{openPanel:l,closeLeafGroup:T,setActivePanel:L}=dn(),N=De(),E=He(),{windowClass:a,windowBodyClass:R}=je(),M=Me(null),[O,v]=Ae({left:!1,right:!1}),I=bn(()=>{let c=M.current;c&&v({left:c.scrollLeft>0,right:c.scrollLeft<c.scrollWidth-c.clientWidth-1})},[]);Ce(()=>{let c=M.current;if(!c)return;c.addEventListener("scroll",I,{passive:!0});let k=new ResizeObserver(I);return k.observe(c),I(),()=>{c.removeEventListener("scroll",I),k.disconnect()}},[I]);let z=c=>{M.current?.scrollBy({left:c==="left"?-120:120,behavior:"smooth"})},H=c=>{l(c,b.panels[c].component),L(c)};return ge("div",{"data-active-panel-id":e.activePanelId||"",className:`workspace-panel ${a??""}`,style:{overflow:"hidden",position:"relative"},children:[ge("div",{className:"workspace-tab-bar",style:{minHeight:"38px"},children:[O.left&&x("button",{className:"tab-scroll-btn tab-scroll-btn-left",onPointerDown:c=>c.stopPropagation(),onClick:()=>z("left"),tabIndex:-1,"aria-label":"Scroll tabs left",children:"\u2039"}),x("div",{ref:M,className:"tab-headers-container",style:{scrollbarWidth:"none"},onPointerMove:c=>{b.draggedPanelId&&c.target===c.currentTarget&&W(e.id,"EMPTY",e.panels.length,"right")},onPointerLeave:c=>{b.draggedPanelId&&c.target===c.currentTarget&&W(e.id,"",-1,null)},children:e.panels.map((c,k)=>{let B=b.panels[c];if(!B)return null;let K=e.activePanelId===c,oe=b.activePanelId===c,te=h.get(B.component)?.defaultOptions,re=P&&P.leafId===e.id&&P.panelId===c,se=k===e.panels.length-1,Z=P&&P.leafId===e.id&&P.panelId==="EMPTY"&&se,_=re?P.side==="left"?"drag-hover-left":"drag-hover-right":Z?"drag-hover-right":"",y=K?oe?"active workspace-tab-active-focused":"active workspace-tab-active-unfocused":"workspace-tab-inactive";return ge("div",{"data-tab-id":c,"data-leaf-id":e.id,"data-tab-index":String(k),onClick:()=>H(c),onPointerDown:$=>{te?.canDrag!==!1&&s(c,$)},onContextMenu:$=>t(c,$),onPointerMove:$=>{if(b.draggedPanelId&&$.pointerType!=="touch"){let U=$.currentTarget.getBoundingClientRect(),ce=$.clientX-U.left<U.width/2?"left":"right";W(e.id,c,k,ce)}},onPointerLeave:()=>{b.draggedPanelId&&W(e.id,"",-1,null)},className:`workspace-tab ${y} ${_}`,style:{cursor:te?.canDrag===!1?"default":"pointer"},children:[ge("span",{className:"text-truncate",style:{maxWidth:"120px",display:"flex",alignItems:"center"},children:[x("span",{className:"workspace-tab-icon",children:te?.icon||f||vn}),ge("span",{children:[me(B.title,N),B.dirty?" *":""]})]}),te?.renderHeaderActions&&x("span",{className:"tab-header-actions",onClick:$=>$.stopPropagation(),onPointerDown:$=>$.stopPropagation(),children:te.renderHeaderActions(c)}),te?.canClose!==!1&&x("span",{onClick:$=>{$.stopPropagation(),C(c)},title:me(E.closeTab,N),className:"close-tab-x",style:{width:"18px",height:"18px",...te?.renderHeaderActions?{}:{marginInlineStart:"auto"}},children:x("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:x("path",{d:"M18 6L6 18M6 6l12 12"})})})]},c)})}),O.right&&x("button",{className:"tab-scroll-btn tab-scroll-btn-right",onPointerDown:c=>c.stopPropagation(),onClick:()=>z("right"),tabIndex:-1,"aria-label":"Scroll tabs right",children:"\u203A"}),e.panels.length===0&&e.keepOnEmpty&&e.canClose!==!1&&x("span",{onClick:()=>T(e.id),className:"close-tab-x header-close-empty-group",style:{width:"18px",height:"18px",cursor:"pointer"},title:me(E.closeEmptyGroup,N),children:x("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:x("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),ge("div",{className:`dw-panel-body ${R??""}`,style:{position:"relative",overflow:"hidden"},children:[e.activePanelId&&b.panels[e.activePanelId]?x(ao,{panelId:e.activePanelId},e.activePanelId):x("div",{className:"empty-leaf-placeholder",children:x("span",{children:"Empty Workspace Section"})}),b.draggedPanelId!==null&&x("div",{className:"dock-drop-zone-overlay",children:ge("div",{className:"dock-target-cross",children:[x("div",{"data-leaf-id":e.id,"data-drop-zone":"top",onPointerEnter:()=>i(e.id,"top"),onPointerLeave:()=>i(e.id,null),className:"dock-target-box dock-target-top",children:"\u25B2"}),x("div",{"data-leaf-id":e.id,"data-drop-zone":"bottom",onPointerEnter:()=>i(e.id,"bottom"),onPointerLeave:()=>i(e.id,null),className:"dock-target-box dock-target-bottom",children:"\u25BC"}),x("div",{"data-leaf-id":e.id,"data-drop-zone":"left",onPointerEnter:()=>i(e.id,"left"),onPointerLeave:()=>i(e.id,null),className:"dock-target-box dock-target-left",children:"\u25C0"}),x("div",{"data-leaf-id":e.id,"data-drop-zone":"right",onPointerEnter:()=>i(e.id,"right"),onPointerLeave:()=>i(e.id,null),className:"dock-target-box dock-target-right",children:"\u25B6"}),x("div",{"data-leaf-id":e.id,"data-drop-zone":"center",onPointerEnter:()=>i(e.id,"center"),onPointerLeave:()=>i(e.id,null),className:"dock-target-box dock-target-center",children:"\u25A3"})]})}),b.draggedPanelId!==null&&n!==null&&n.leafId===e.id&&x("div",{className:"dock-preview-highlight",style:(()=>{let c=n.position,k=`${b.splitRatio*100}%`,B=`${(1-b.splitRatio)*100}%`;return{left:c==="right"?B:"0",top:c==="bottom"?B:"0",width:c==="left"||c==="right"?k:"100%",height:c==="top"||c==="bottom"?k:"100%"}})()})]})]})},ir=({skin:e="vscode",defaultPanelIcon:t,taskbarVisibility:n="always",contextMenuAdapter:i=gn})=>{let s=_e(),P=It(),{restorePanel:W,minimizePanel:f,requestClosePanel:C,maximizePanel:b,updateFloatingPosition:h,focusPanel:l,floatPanel:T,setDraggedPanelId:L,dockPanelToGroup:N,movePanelOrder:E,dockPanelToWorkspaceEdge:a,setActivePanel:R,getPanelContextMenuItems:M}=dn(),{openModal:O}=it(),v=De(),I=He(),z=yn.useCallback(r=>{let S=s.panels[r];C(r,{onConfirm:p=>new Promise(m=>{let A=p||S?.dirtyOptions,X=S?me(S.title,v):"Panel";O(at,{title:A?.title||I.unsavedChangesTitle,message:A?.message||{id:I.unsavedChangesMessage.id,defaultMessage:I.unsavedChangesMessage.defaultMessage,values:{title:X}},alert:A?.alert,alertType:A?.alertType||"danger",useYesNoTitles:!0,onOK:()=>m(!0),onCancel:()=>m(!1)},{size:"small"})})})},[C,s.panels,v,O,I]),{windowClass:H,windowBodyClass:c}=je(),k=Me(null),B=Me(null),[K,oe]=Ae(!1),G=Me(null),te=Me(s.minimized.length),[re,se]=Ae(null),Z=Me(null),_=Me("mouse"),[y,$]=Ae(!1);Ce(()=>()=>{Z.current&&clearTimeout(Z.current)},[]),Ce(()=>{re&&(s.minimized.some(S=>S.id===re.id)||se(null))},[s.minimized,re]),Ce(()=>{if(!re?.fromTouch)return;let r=S=>{S.pointerType!=="touch"||document.querySelector(".taskbar-item-tooltip")?.contains(S.target)||se(null)};return document.addEventListener("pointerdown",r,{capture:!0}),()=>document.removeEventListener("pointerdown",r,{capture:!0})},[re?.fromTouch]);let[U,Y]=Ae(null),ce=Me(null),[fe,he]=Ae({x:0,y:0}),[Ne,ze]=Ae(null),ke=Me(null),Re=r=>{ze(r),ke.current=r},[Dt,Ot]=Ae(null),lt=Me(null),Qe=r=>{Ot(r),lt.current=r},ct=er(ft)?.isRtl??!1,wt=r=>r==="top-left"?"top-right":r==="top-right"?"top-left":r==="bottom-left"?"bottom-right":"bottom-left",[At,Ve]=Ae(null),$e=Me(null),Ft=(r,S,p,m)=>{let A=m?{leafId:r,panelId:S,index:p,side:m}:null;Ve(A),$e.current=A},_t=(r,S)=>{let p=S?{leafId:r,position:S}:null;Y(p),ce.current=p},Ct=(r,S)=>{let p=document.elementsFromPoint(r,S),m=!1,A=!1,X=!1;for(let V of p)if(V instanceof HTMLElement){if(!m&&V.dataset.dropZone){let D=V.dataset.leafId;if(D){let Q=V.dataset.dropZone;Y({leafId:D,position:Q}),ce.current={leafId:D,position:Q},m=!0}}if(!X&&V.dataset.tabId){let D=V.dataset.leafId,Q=parseInt(V.dataset.tabIndex||"0",10);if(D){let ue=V.getBoundingClientRect(),q=r-ue.left<ue.width/2?"left":"right";Ve({leafId:D,panelId:V.dataset.tabId,index:Q,side:q}),$e.current={leafId:D,panelId:V.dataset.tabId,index:Q,side:q},X=!0}}if(!A&&V.dataset.edgeTrigger&&(Re(V.dataset.edgeTrigger),A=!0),m&&A&&X)break}m||(Y(null),ce.current=null),A||Re(null),X||(Ve(null),$e.current=null)},Ke=300,et=8,tt=()=>{L(null),Y(null),ce.current=null,Ve(null),$e.current=null,Re(null)},Ze=r=>s.isRtl?r==="left"?"right":r==="right"?"left":r:r,Ht=(r,S)=>{let p=ce.current,m=$e.current,A=ke.current,X=lt.current;if(A)a(r,Ze(A));else if(m){let V=m.index;m.side==="right"&&(V+=1);let D=ro(s.gridRoot,m.leafId);if(D){let Q=D.panels.indexOf(r);Q!==-1&&Q<V&&(V-=1)}E(r,m.leafId,V)}else p?N(r,p.leafId,Ze(p.position)):X?T(r,void 0,ct?wt(X):X):T(r,{x:S.clientX-150,y:S.clientY-15,width:450,height:350});Qe(null),tt()},rn=(r,S)=>{if(S.pointerType==="mouse"&&S.button!==0)return;let p=S.currentTarget,m=S.clientX,A=S.clientY;if(S.pointerType==="touch"){let X=S.pointerId,V=!1,D=()=>{V=!0,clearTimeout(ue),p.removeEventListener("pointermove",Q),p.removeEventListener("pointerup",D),p.removeEventListener("pointercancel",D)},Q=q=>{Math.hypot(q.clientX-m,q.clientY-A)>et&&D()},ue=setTimeout(()=>{if(V)return;p.removeEventListener("pointermove",Q),p.removeEventListener("pointerup",D),p.removeEventListener("pointercancel",D);try{p.setPointerCapture(X)}catch{return}p.classList.add("long-press-active"),navigator.vibrate&&navigator.vibrate(10);let q=!1,ae=be=>{q||(q=!0,L(r)),he({x:be.clientX,y:be.clientY}),Ct(be.clientX,be.clientY)},pe=be=>{p.classList.remove("long-press-active"),p.removeEventListener("pointermove",ae),p.removeEventListener("pointerup",pe),p.removeEventListener("pointercancel",ie),q?Ht(r,be):Bt(r,be)},ie=()=>{p.classList.remove("long-press-active"),p.removeEventListener("pointermove",ae),p.removeEventListener("pointerup",pe),p.removeEventListener("pointercancel",ie),q&&tt()};p.addEventListener("pointermove",ae),p.addEventListener("pointerup",pe),p.addEventListener("pointercancel",ie)},Ke);p.addEventListener("pointermove",Q),p.addEventListener("pointerup",D),p.addEventListener("pointercancel",D)}else{let X=!1,V=Q=>{let ue=Q.clientX-m,q=Q.clientY-A;!X&&(Math.abs(ue)>5||Math.abs(q)>5)&&(X=!0,L(r)),X&&he({x:Q.clientX,y:Q.clientY})},D=Q=>{window.removeEventListener("pointermove",V),window.removeEventListener("pointerup",D),X&&Ht(r,Q)};window.addEventListener("pointermove",V),window.addEventListener("pointerup",D)}},Bt=(r,S)=>{S.preventDefault();let p=s.panels[r];if(!p)return;let A=P.get(p.component)?.defaultOptions,X=[];if(A?.canDrag!==!1&&X.push({label:me(I.floatWindow,v),icon:bt.float,action:()=>T(r)}),A?.canMinimize!==!1&&X.push({label:me(I.minimizePanel,v),icon:bt.minimize,action:()=>f(r)}),X.length>0&&A?.canClose!==!1&&X.push({separator:!0}),A?.canClose!==!1&&X.push({label:me(I.closeTab,v),icon:bt.close,action:()=>z(r)}),X.length===0)return;let V=M(r),D=V.length>0?[...X,{separator:!0},...V]:X;B.current?.show({event:S,items:D})},o=(r,S)=>{S.preventDefault(),se(null),B.current?.show({event:S,items:[{label:me(I.restorePanel,v),icon:bt.restore,action:()=>W(r)},{label:me(I.maximizePanel,v),icon:bt.maximize,action:()=>b(r)},{separator:!0},{label:me(I.closePanel,v),icon:bt.close,action:()=>z(r)}]})};Ce(()=>{let r=Object.keys(s.panels);for(let S of Array.from(Lt.keys()))r.includes(S)||Lt.delete(S)},[s.panels]),Ce(()=>{let r=()=>{s.draggedPanelId!==null&&(L(null),Y(null),Ve(null))};return window.addEventListener("blur",r),()=>{window.removeEventListener("blur",r)}},[s.draggedPanelId]);let g=Me(null),[d,u]=Ae({width:1024,height:768});Ce(()=>{let r=g.current;if(!r)return;let S=!1,p=new ResizeObserver(m=>{if(!m||m.length===0)return;let A=m[0].contentRect;if(process.env.NODE_ENV==="development"&&A.height<10&&!S){S=!0;let X=r,V=r.parentElement;for(;V&&V!==document.documentElement&&V.getBoundingClientRect().height<10;){X=V;V=V.parentElement}let D=X.tagName.toLowerCase(),Q=X.id?` id="${X.id}"`:"",ue=X.className?` class="${X.className}"`:"",q=X===r?"the WindowManager container itself":`a wrapper element: <${D}${Q}${ue}>`;console.warn(`[react-dockable-desktop] Workspace height is 0px \u2014 the workspace will be invisible.
7
6
 
8
- Zero height found at: ${C}
7
+ Zero height found at: ${q}
9
8
 
10
9
  Root cause: in CSS, "height: 100%" only works when the parent has an explicit height.
11
10
  If any ancestor has height: auto (the default for <div>), the chain breaks and
@@ -21,5 +20,5 @@ Fix options:
21
20
  .layout { display: flex; flex-direction: column; height: 100vh; }
22
21
  .workspace { flex: 1; min-height: 0; }
23
22
 
24
- 3. Verify styles.css is imported \u2014 it anchors html, body, #root to 100% height.`)}it({width:Math.max(100,u.width),height:Math.max(100,u.height)})});return s.observe(e),()=>{s.disconnect()}},[]),le(()=>{let e=Ke.current;if(!e)return;let l=()=>{let u=ln(e);w(u?"rtl":"ltr")};l();let s=new MutationObserver(l);s.observe(document.documentElement,{attributes:!0,attributeFilter:["dir"]}),s.observe(document.body,{attributes:!0,attributeFilter:["dir"]});let c=e.closest("[dir]");return c&&c!==document.documentElement&&c!==document.body&&s.observe(c,{attributes:!0,attributeFilter:["dir"]}),()=>{s.disconnect()}},[w]),le(()=>{let e=xe.width,l=xe.height;i.floating.forEach(s=>{let c=typeof s.width=="string"?parseFloat(s.width):s.width,u=typeof s.height=="string"?parseFloat(s.height):s.height,h=typeof s.x=="string"?parseFloat(s.x):s.x,y=typeof s.y=="string"?parseFloat(s.y):s.y,m=c,E=u,L=h,C=y,H=!1;m>e&&(m=Math.max(200,e-20),H=!0),E>l&&(E=Math.max(150,l-40),H=!0);let q=10;if(s.stickyRight)L=e-m-q,H=!0;else{let G=e-100;L>G&&(L=Math.max(0,G),H=!0)}if(s.stickyBottom)C=l-E-q,H=!0;else{let G=l-40;C>G&&(C=Math.max(0,G),H=!0)}H&&M(s.id,{x:L,y:C,width:m,height:E})})},[xe,i.floating,M]),le(()=>{let e=l=>{if(l.button!==0)return;let s=l.target;if(!s||typeof s.closest!="function")return;let c=s.closest(".floating-window");if(c){let h=c.getAttribute("data-window-id");h&&(p(h),N(h));return}let u=s.closest(".workspace-panel");if(u){let h=u.getAttribute("data-active-panel-id");h&&p(h)}};return document.addEventListener("pointerdown",e),()=>{document.removeEventListener("pointerdown",e)}},[N,p]);let Nt=(e,l)=>{let s=i.floating.find(C=>C.id===e);if(!s||s.maximized)return;N(e);let c=l.currentTarget,u=c.closest(".floating-window"),h=l.clientX,y=l.clientY,m=u?u.offsetLeft:0,E=u?u.offsetTop:0,L=()=>{let C=ie.current,H=Te.current,q=ze.current;if(q)O(e,q);else if(H){let G=H.index;H.side==="right"&&(G+=1),D(e,H.leafId,G)}else C&&z(e,C.leafId,C.position);_e()};if(l.pointerType==="touch"){let C=l.pointerId,H=!1,q=()=>{H=!0,clearTimeout(ae),c.removeEventListener("pointermove",G),c.removeEventListener("pointerup",q),c.removeEventListener("pointercancel",q)},G=fe=>{Math.hypot(fe.clientX-h,fe.clientY-y)>He&&q()},ae=setTimeout(()=>{if(H)return;c.removeEventListener("pointermove",G),c.removeEventListener("pointerup",q),c.removeEventListener("pointercancel",q);try{c.setPointerCapture(C)}catch{return}c.classList.add("long-press-active"),S(e);let fe=we=>{let yt=we.clientX-h,Pt=we.clientY-y;M(e,{x:m+yt,y:E+Pt,stickyRight:!1,stickyBottom:!1}),tt(we.clientX,we.clientY)},De=()=>{c.classList.remove("long-press-active"),c.removeEventListener("pointermove",fe),c.removeEventListener("pointerup",De),c.removeEventListener("pointercancel",Oe),L()},Oe=()=>{c.classList.remove("long-press-active"),c.removeEventListener("pointermove",fe),c.removeEventListener("pointerup",De),c.removeEventListener("pointercancel",Oe),_e()};c.addEventListener("pointermove",fe),c.addEventListener("pointerup",De),c.addEventListener("pointercancel",Oe)},Be);c.addEventListener("pointermove",G),c.addEventListener("pointerup",q),c.addEventListener("pointercancel",q)}else{let C=!1,H=G=>{let ae=G.clientX-h,fe=G.clientY-y;!C&&(Math.abs(ae)>5||Math.abs(fe)>5)&&(C=!0,S(e)),C&&M(e,{x:m+ae,y:E+fe,stickyRight:!1,stickyBottom:!1})},q=()=>{window.removeEventListener("pointermove",H),window.removeEventListener("pointerup",q),C&&L()};window.addEventListener("pointermove",H),window.addEventListener("pointerup",q)}},Ce=(e,l,s)=>{s.stopPropagation();let c=i.floating.find(Ct=>Ct.id===e);if(!c||c.maximized)return;N(e);let u=s.currentTarget;u.setPointerCapture(s.pointerId);let h=s.clientX,y=s.clientY,m=u.closest(".floating-window"),E=m?m.offsetWidth:400,L=m?m.offsetHeight:300,C=m?m.offsetLeft:0,H=m?m.offsetTop:0,q=xe.width,G=xe.height,ae=typeof c.x=="string"?parseFloat(c.x):c.x,fe=typeof c.y=="string"?parseFloat(c.y):c.y,De=typeof c.width=="string"?parseFloat(c.width):c.width,Oe=typeof c.height=="string"?parseFloat(c.height):c.height,we=l==="se"&&Math.abs(ae+De-q)<4,yt=l==="se"&&Math.abs(fe+Oe-G)<4,Pt=Ct=>{let Jt=Ct.clientX-h,Zt=Ct.clientY-y,rt=C,st=H,je=E,Ue=L;l.includes("e")&&(je=Math.max(200,E+Jt)),l.includes("w")&&(je=Math.max(200,E-Jt),rt=C+E-je),l.includes("s")&&(Ue=Math.max(150,L+Zt)),l.includes("n")&&(Ue=Math.max(150,L-Zt),st=H+L-Ue),we&&(rt=q-je,rt<0&&(rt=0,je=q)),yt&&(st=G-Ue,st<0&&(st=0,Ue=G)),M(e,{x:rt,y:st,width:je,height:Ue,stickyRight:we,stickyBottom:yt})},xt=()=>{u.removeEventListener("pointermove",Pt),u.removeEventListener("pointerup",xt),u.removeEventListener("pointercancel",xt)};u.addEventListener("pointermove",Pt),u.addEventListener("pointerup",xt),u.addEventListener("pointercancel",xt)},bt=e=>{if(Z.current){let l=e==="left"?-150:150;Z.current.scrollBy({left:l,behavior:"smooth"})}},o=_t(()=>{$.current&&clearTimeout($.current),se(!0)},[]),g=_t(()=>{$.current=setTimeout(()=>se(!1),400)},[]);le(()=>{r==="autohide"&&i.minimized.length>Q.current&&($.current&&clearTimeout($.current),se(!0),$.current=setTimeout(()=>se(!1),2e3)),Q.current=i.minimized.length},[i.minimized.length,r]);let[a,d]=ke("dark");return le(()=>{let e=()=>{let s=document.documentElement.getAttribute("data-color-scheme")==="light"?"light":"dark";d(s)};e();let l=new MutationObserver(e);return l.observe(document.documentElement,{attributes:!0,attributeFilter:["data-color-scheme"]}),()=>l.disconnect()},[]),le(()=>(t?document.documentElement.setAttribute("data-workspace-skin",t):document.documentElement.removeAttribute("data-workspace-skin"),()=>{document.documentElement.removeAttribute("data-workspace-skin")}),[t]),U("div",{"data-workspace-skin":t,"data-color-scheme":a,style:{display:"flex",flexDirection:"column",position:"relative",width:"100%",height:"100%",overflow:"hidden",userSelect:"none"},dir:i.dir,children:[U("div",{ref:Ke,className:i.draggedPanelId?"dragging-active":void 0,style:{flexGrow:1,width:"100%",position:"relative",overflow:"hidden"},children:[i.draggedPanelId!==null&&U(vn,{children:[f("div",{"data-edge-trigger":"left",className:"workspace-edge-trigger edge-trigger-left",onPointerEnter:()=>ue("left"),onPointerLeave:()=>ue(null)}),f("div",{"data-edge-trigger":"right",className:"workspace-edge-trigger edge-trigger-right",onPointerEnter:()=>ue("right"),onPointerLeave:()=>ue(null)}),f("div",{"data-edge-trigger":"top",className:"workspace-edge-trigger edge-trigger-top",onPointerEnter:()=>ue("top"),onPointerLeave:()=>ue(null)}),f("div",{"data-edge-trigger":"bottom",className:"workspace-edge-trigger edge-trigger-bottom",onPointerEnter:()=>ue("bottom"),onPointerLeave:()=>ue(null)})]}),i.draggedPanelId!==null&&Ee!==null&&f("div",{className:`workspace-edge-preview edge-preview-${Ee}`}),f("div",{style:{width:"100%",height:"100%",overflow:"hidden",position:"relative"},children:i.gridRoot?f(Cn,{node:i.gridRoot,path:[],onTabRightClick:ot,activeDropZone:oe,onHoverDropZone:ht,onTabDragStart:vt,hoveredTab:ft,onTabHover:mt,defaultPanelIcon:n,onRequestClosePanel:F}):f("div",{className:"empty-workspace-grid",children:"Grid Empty"})}),i.floating.map(e=>{let l=i.panels[e.id];if(!l)return null;let s=e.maximized,c=i.draggedPanelId===e.id,u=i.activePanelId===e.id,y=b.get(l.component)?.defaultOptions;return U("div",{"data-window-id":e.id,dir:i.dir,onPointerDownCapture:()=>{p(e.id),N(e.id)},className:`floating-window ${s?"maximized":""} ${u?"v2-window-focused":""} ${J??""}`,style:{position:"absolute",left:s?0:typeof e.x=="number"?`${e.x}px`:e.x,top:s?0:typeof e.y=="number"?`${e.y}px`:e.y,width:s?"100%":typeof e.width=="number"?`${e.width}px`:e.width,height:s?"100%":typeof e.height=="number"?`${e.height}px`:e.height,zIndex:e.z,pointerEvents:c?"none":"auto"},children:[U("div",{onDoubleClick:()=>R(e.id),onPointerDown:m=>{y?.canDrag!==!1&&Nt(e.id,m)},className:"floating-window-titlebar cursor-move",style:{cursor:s||y?.canDrag===!1?"default":"move"},children:[U("span",{className:"floating-window-title",children:[f("span",{className:"window-title-icon",children:y?.icon||n||Gt}),U("span",{children:[j(l.title,A),l.dirty?" *":""]})]}),U("div",{className:"fw-titlebar-actions",style:{gap:"var(--header-button-gap, 4px)"},onPointerDown:m=>m.stopPropagation(),children:[y?.renderHeaderActions&&f("div",{className:"window-header-actions",children:y.renderHeaderActions(e.id)}),I(e.id).length>0&&f("button",{type:"button",className:"custom-tab-btn btn-more-actions",title:"More actions",onClick:m=>{m.stopPropagation();let E=I(e.id);E.length!==0&&te.current?.show({event:m,contextMenu:{items:E}})},children:U("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"currentColor",style:{display:"block"},children:[f("circle",{cx:"12",cy:"5",r:"2"}),f("circle",{cx:"12",cy:"12",r:"2"}),f("circle",{cx:"12",cy:"19",r:"2"})]})}),y?.canDrag!==!1&&f("button",{type:"button",title:j(W.windowAnchoringOptions,A),onClick:m=>{let E=!!e.stickyRight,L=!!e.stickyBottom;te.current?.show({event:m,contextMenu:{items:[{label:j(W.anchorToRightEdge,A),checkbox:{active:!0,enabled:!0,value:E},action:()=>{let C=xe.width,H=typeof e.width=="string"?parseFloat(e.width):e.width;E?M(e.id,{stickyRight:!1}):M(e.id,{x:C-H-10,stickyRight:!0})}},{label:j(W.anchorToBottomEdge,A),checkbox:{active:!0,enabled:!0,value:L},action:()=>{let C=xe.height,H=typeof e.height=="string"?parseFloat(e.height):e.height;L?M(e.id,{stickyBottom:!1}):M(e.id,{y:C-H-10,stickyBottom:!0})}}]}})},className:"custom-tab-btn btn-anchor-tab",children:U("svg",{className:`anchor-icon ${e.stickyRight&&e.stickyBottom?"anchor-sticky-both":e.stickyRight?"anchor-sticky-right":e.stickyBottom?"anchor-sticky-bottom":""}`,width:"11",height:"11",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:[f("circle",{cx:"12",cy:"5",r:"2"}),f("path",{d:"M12 7v7m0 0a4 4 0 0 1-4-4M12 14a4 4 0 0 0 4-4M5 18h14"})]})}),f("button",{type:"button",title:s?j(W.restoreSize,A):j(W.maximize,A),onClick:()=>R(e.id),className:"custom-tab-btn btn-maximize-tab",children:f("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:f("rect",{x:"4",y:"4",width:"16",height:"16",rx:"1.5"})})}),y?.canMinimize!==!1&&f("button",{type:"button",title:j(W.minimize,A),onClick:()=>k(e.id),className:"custom-tab-btn btn-minimize-tab",children:f("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:f("path",{d:"M5 12h14"})})}),y?.canClose!==!1&&f("button",{type:"button",title:j(W.close,A),onClick:()=>F(e.id),className:"custom-tab-btn btn-close-tab",children:f("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:f("path",{d:"M18 6L6 18M6 6l12 12"})})})]})]}),f("div",{className:x??void 0,style:{flexGrow:1,width:"100%",overflow:"hidden",position:"relative",isolation:"isolate"},children:f(xn,{panelId:e.id},e.id)}),!s&&U(vn,{children:[f("div",{onPointerDown:m=>Ce(e.id,"n",m),className:"resize-handle resize-n"}),f("div",{onPointerDown:m=>Ce(e.id,"ne",m),className:"resize-handle resize-ne"}),f("div",{onPointerDown:m=>Ce(e.id,"e",m),className:"resize-handle resize-e"}),f("div",{onPointerDown:m=>Ce(e.id,"se",m),className:"resize-handle resize-se"}),f("div",{onPointerDown:m=>Ce(e.id,"s",m),className:"resize-handle resize-s"}),f("div",{onPointerDown:m=>Ce(e.id,"sw",m),className:"resize-handle resize-sw"}),f("div",{onPointerDown:m=>Ce(e.id,"w",m),className:"resize-handle resize-w"}),f("div",{onPointerDown:m=>Ce(e.id,"nw",m),className:"resize-handle resize-nw"})]})]},e.id)})]}),(r==="always"||i.minimized.length>0)&&U("div",{className:["taskbar-footer-container",`taskbar-mode-${r}`,r==="autohide"&&ne?"taskbar-expanded":""].filter(Boolean).join(" "),style:{height:"48px",zIndex:100},onPointerEnter:r==="autohide"?o:void 0,onPointerLeave:r==="autohide"?g:void 0,children:[r==="autohide"&&f("div",{className:"taskbar-peek-handle"}),f("button",{type:"button",onClick:()=>bt("left"),className:"taskbar-nav-btn",style:{display:i.minimized.length>4?"block":"none"},children:"\u25C0"}),f("div",{ref:Z,className:"taskbar-items-container",style:{scrollSnapType:"x mandatory"},children:i.minimized.map(e=>{let s=b.get(e.component)?.defaultOptions?.icon||n||Gt;return f("div",{onClick:()=>{ce.current!=="touch"&&(ee(null),P(e.id))},onContextMenu:c=>We(e.id,c),onPointerDown:c=>{if(ce.current=c.pointerType,c.pointerType!=="touch")return;let u=c.currentTarget,h=c.clientX,y=c.clientY,m=c.pointerId,E=!1,L=()=>{E=!0,clearTimeout(q),u.removeEventListener("pointermove",H),u.removeEventListener("pointerup",C),u.removeEventListener("pointercancel",L)},C=()=>{L();let G=u.getBoundingClientRect();Y?.id===e.id?(P(e.id),ee(null)):ee({id:e.id,rect:G,title:e.title,component:e.component,fromTouch:!0})},H=G=>{Math.hypot(G.clientX-h,G.clientY-y)>He&&L()},q=setTimeout(()=>{if(E)return;u.removeEventListener("pointermove",H),u.removeEventListener("pointerup",C),u.removeEventListener("pointercancel",L);try{u.setPointerCapture(m)}catch{return}navigator.vibrate&&navigator.vibrate(10);let G=ae=>{u.removeEventListener("pointerup",G),u.removeEventListener("pointercancel",G),We(e.id,ae)};u.addEventListener("pointerup",G),u.addEventListener("pointercancel",G)},Be);u.addEventListener("pointermove",H),u.addEventListener("pointerup",C),u.addEventListener("pointercancel",L)},onPointerEnter:c=>{if(c.pointerType==="touch"||K)return;re.current&&clearTimeout(re.current);let u=c.currentTarget.getBoundingClientRect();c.clientX>=u.left&&c.clientX<=u.right&&c.clientY>=u.top&&c.clientY<=u.bottom&&ee({id:e.id,rect:u,title:e.title,component:e.component})},onPointerLeave:c=>{c.pointerType!=="touch"&&(re.current=setTimeout(()=>{ee(null)},150))},className:"taskbar-glassmorphic-item",style:{backdropFilter:"blur(6px)",transition:"all 0.2s",cursor:"pointer",scrollSnapAlign:"start",width:"38px",height:"38px",position:"relative",padding:0},children:f("span",{className:"taskbar-item-icon",children:s})},e.id)})}),Y&&hn(U("div",{className:"taskbar-item-tooltip",dir:i.dir,style:{position:"fixed",left:`${Y.rect.left+Y.rect.width/2}px`,top:`${Y.rect.top-8}px`,transform:"translateX(-50%) translateY(-100%)",opacity:1,pointerEvents:"auto",zIndex:999999},onPointerEnter:()=>{re.current&&clearTimeout(re.current)},onPointerLeave:e=>{e.pointerType!=="touch"&&ee(null)},onClick:()=>{P(Y.id),ee(null)},onContextMenu:e=>We(Y.id,e),onPointerDown:e=>{if(e.pointerType!=="touch")return;let l=Y.id,s=e.currentTarget,c=e.clientX,u=e.clientY,h=e.pointerId,y=!1,m=()=>{y=!0,clearTimeout(L),s.removeEventListener("pointermove",E),s.removeEventListener("pointerup",m),s.removeEventListener("pointercancel",m)},E=C=>{Math.hypot(C.clientX-c,C.clientY-u)>He&&m()},L=setTimeout(()=>{if(y)return;s.removeEventListener("pointermove",E),s.removeEventListener("pointerup",m),s.removeEventListener("pointercancel",m);try{s.setPointerCapture(h)}catch{return}navigator.vibrate&&navigator.vibrate(10);let C=H=>{s.removeEventListener("pointerup",C),s.removeEventListener("pointercancel",C),We(l,H)};s.addEventListener("pointerup",C),s.addEventListener("pointercancel",C)},Be);s.addEventListener("pointermove",E),s.addEventListener("pointerup",m),s.addEventListener("pointercancel",m)},children:[U("div",{className:"tooltip-header-row",children:[U("span",{className:"tooltip-title-text text-truncate",style:{maxWidth:"140px"},children:[j(Y.title,A),i.panels[Y.id]?.dirty?" *":""]}),f("span",{onClick:e=>{e.stopPropagation(),F(Y.id),ee(null)},title:j(W.closePanel,A),className:"tooltip-close-x",children:f("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:f("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),f(no,{panelId:Y.id})]}),document.body),f("button",{type:"button",onClick:()=>bt("right"),className:"taskbar-nav-btn",style:{display:i.minimized.length>4?"block":"none"},children:"\u25B6"})]}),Object.keys(i.panels).map(e=>{let l=i.panels[e];if(!l)return null;let s=yn(e);return hn(f(oo,{panelId:e,children:f("div",{style:{width:"100%",height:"100%"},children:to(e,l.component,b)})}),s,e)}),f(eo,{ref:te,id:"workspace-context-menu",theme:"dark",onShow:()=>V(!0),onHide:()=>V(!1)}),i.draggedPanelId!==null&&!i.floating.some(e=>e.id===i.draggedPanelId)&&U("div",{className:"drag-ghost-tab",style:{left:ge.x+12,top:ge.y+12,zIndex:1e5},children:["\u{1F4C4} ",j(i.panels[i.draggedPanelId]?.title,A)||"Tab"]})]})},so=ro;var Yt=class{registry;initialState;config;_actions=null;_initialized=!1;_pendingCalls=[];_pendingOpenPanelIds=new Set;_pendingSubscriptions=[];_disconnectedWarnTimer=null;constructor(n={}){if(this.registry=new Je,this.initialState=n.initialState??null,this.config={formatMessage:n.formatMessage,predefinedMessages:n.predefinedMessages,dir:n.dir},n.panels)for(let[r,i]of Object.entries(n.panels))this.registry.register(r,i.component,i.defaultOptions)}_connect(n){this._actions=n,this._disconnectedWarnTimer!==null&&(clearTimeout(this._disconnectedWarnTimer),this._disconnectedWarnTimer=null),this._initialized||(this._initialized=!0);for(let i of this._pendingSubscriptions)i.unsub=n.subscribe(i.event,i.callback);let r=this._pendingCalls.splice(0);for(let i of r)i(n)}_disconnect(){this._actions=null;for(let n of this._pendingSubscriptions)n.unsub?.(),n.unsub=null}get isConnected(){return this._actions!==null}_startWarnTimer(){this._disconnectedWarnTimer===null&&(this._disconnectedWarnTimer=setTimeout(()=>{!this.isConnected&&this._pendingCalls.length>0&&console.error("[react-dockable-desktop] WorkspaceClient has "+this._pendingCalls.length+" queued call(s) but was never connected to a WindowManagerProvider. Did you forget client={workspace} on <WindowManagerProvider>?")},process.env.NODE_ENV==="production"?5e3:1e3))}_dispatch(n){this._actions?n(this._actions):(this._pendingCalls.push(n),this._startWarnTimer())}_subscribeRaw(n,r){if(this._actions)return this._actions.subscribe(n,r);let i={event:n,callback:r,unsub:null};return this._pendingSubscriptions.push(i),()=>{i.unsub?.(),i.unsub=null;let b=this._pendingSubscriptions.indexOf(i);b!==-1&&this._pendingSubscriptions.splice(b,1)}}openPanel(...n){if(this._actions){this._actions.openPanel(...n);return}let r=n[0];this._pendingOpenPanelIds.has(r)||(this._pendingOpenPanelIds.add(r),this._pendingCalls.push(i=>{this._pendingOpenPanelIds.delete(r),i.openPanel(...n)}),this._startWarnTimer())}closePanel(n){this._dispatch(r=>r.closePanel(n))}minimizePanel(n){this._dispatch(r=>r.minimizePanel(n))}restorePanel(n){this._dispatch(r=>r.restorePanel(n))}floatPanel(...n){this._dispatch(r=>r.floatPanel(...n))}dockPanel(...n){this._dispatch(r=>r.dockPanel(...n))}maximizePanel(n){this._dispatch(r=>r.maximizePanel(n))}focusPanel(n){this._dispatch(r=>r.focusPanel(n))}isOpen(n){return this._actions?.isOpen(n)??!1}getOpenPanelIds(){return this._actions?.getOpenPanelIds()??[]}saveLayout(){return this._actions?.saveLayout()??""}loadLayout(n){return this._actions?this._actions.loadLayout(n):(this._pendingCalls.push(r=>{r.loadLayout(n)}),!1)}setDirection(n){this._dispatch(r=>r.setDirection(n))}publish(n,r){this._dispatch(i=>i.publish(n,r))}subscribe(n,r){return this._subscribeRaw(n,r)}onPanelOpen(n){return this._subscribeRaw("panel:opened",r=>{let i=r;n(i.id,i.component)})}onPanelClose(n){return this._subscribeRaw("panel:closed",r=>{n(r.id)})}onPanelMinimize(n){return this._subscribeRaw("panel:minimized",r=>{n(r.id)})}onPanelRestore(n){return this._subscribeRaw("panel:restored",r=>{n(r.id)})}};import"react";import{createContext as ao,useContext as lo,useMemo as co,useState as wn}from"react";import{jsx as uo}from"react/jsx-runtime";var Rn=ao(null),St=({children:t})=>{let[n,r]=wn({}),[i,b]=wn({}),P=co(()=>({getActiveInGroup:k=>n[k]??null,setActiveInGroup:(k,T)=>r(R=>({...R,[k]:T})),isModifierActive:k=>i[k]??!1,setModifierActive:(k,T)=>b(R=>({...R,[k]:T})),toggleModifier:k=>b(T=>({...T,[k]:!T[k]}))}),[n,i]);return uo(Rn.Provider,{value:P,children:t})};function Et(){let t=lo(Rn);return t||(console.warn("useToolbar() called outside <DockableDesktopProvider>. Returning no-op."),{getActiveInGroup:()=>null,setActiveInGroup:()=>{},isModifierActive:()=>!1,setModifierActive:()=>{},toggleModifier:()=>{}})}import{jsx as Xt}from"react/jsx-runtime";var po=t=>Xt(St,{children:Xt(Ot,{...t,children:Xt(Bt,{children:t.children})})});import{useCallback as gt,useRef as Mn,useEffect as go,useState as fo,useMemo as mo}from"react";import{Fragment as yo,jsx as Pe,jsxs as Vt}from"react/jsx-runtime";var ho=({modal:t,index:n,isTopmost:r})=>{let{close:i,openModal:b,updateInstance:P,setDirty:k}=Xe(),T=be(),R=Me(),{dir:M}=Re(),{modalClass:N,modalBodyClass:v}=Fe(),S=Mn(null),{id:z,Component:D,props:O,options:p,dirty:w,dirtyOptions:I}=t,_=p,[A,W]=fo(_.icon||null),F=Mn(_);F.current=_;let J=j(_.title,T),x=gt(async K=>{if(K?.force){i(z);return}if(S.current){if(!await S.current())return;i(z);return}if(w){b(qe,{title:I?.title||R.unsavedChangesTitle,message:I?.message||{id:R.unsavedChangesMessage.id,defaultMessage:R.unsavedChangesMessage.defaultMessage,values:{title:J}},alert:I?.alert,alertType:I?.alertType||"danger",useYesNoTitles:!0,onOK:()=>i(z)},{size:"small"});return}i(z)},[i,b,z,w,I,J,R]),Z=gt((K,V)=>k(z,K,V),[k,z]),te=gt(K=>P(z,{options:{...F.current,title:K}}),[P,z]),ne=gt(K=>W(K),[]),se=gt(K=>(S.current=K,()=>{S.current=null}),[]),$=mo(()=>({requestClose:x,setDirty:Z,setTitle:te,setIcon:ne,onCloseRequested:se,containerType:"modal",instanceId:z}),[x,Z,te,ne,se,z]),Q=w?`${J} *`:J,Y=_.size?`v2-modal-size-${_.size}`:"v2-modal-size-auto",ee=_.closable!==!1;go(()=>{if(!r||!ee)return;let K=V=>{V.key==="Escape"&&(V.stopPropagation(),x())};return document.addEventListener("keydown",K),()=>document.removeEventListener("keydown",K)},[x,ee,r]);let ce=1e4+n*10;return Vt("div",{className:"v2-modal-overlay",style:{zIndex:ce},dir:M,children:[Pe("div",{className:"v2-modal-curtain",onClick:ee?()=>x():void 0}),Vt("div",{className:`v2-modal-window ${Y} ${N??""}`,children:[Vt("div",{className:"v2-modal-header",children:[A&&Pe("div",{className:"v2-modal-icon",children:A}),Pe("h4",{className:"v2-modal-title",children:Q}),ee&&Pe("button",{className:"v2-modal-close-button",onClick:()=>x(),title:T(R.closeTooltip),type:"button",children:Pe("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:Pe("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),Pe("div",{className:`v2-modal-body ${v??""}`,children:Pe(Ge,{value:$,children:Pe(D,{...O,panelId:z})})})]})]})},vo=()=>{let{modals:t}=Ae();return t.length===0?null:Pe(yo,{children:t.map((n,r)=>Pe(ho,{modal:n,index:r,isTopmost:r===t.length-1},n.id))})},bo=vo;import{useCallback as et,useRef as kn,useEffect as Tn,useState as Po,useMemo as xo}from"react";import{Fragment as ko,jsx as me,jsxs as qt}from"react/jsx-runtime";var Lt=({panel:t,position:n,defaultWidth:r})=>{let{close:i,openModal:b,updateInstance:P,setDirty:k,registerCloseHandler:T,unregisterCloseHandler:R}=Xe(),{modals:M}=Ae(),N=be(),v=Me(),{dir:S}=Re(),{sidePanelClass:z,sidePanelBodyClass:D}=Fe(),O=kn(null),{id:p,Component:w,props:I,options:_,dirty:A,dirtyOptions:W}=t,F=_,[J,x]=Po(F.icon||null),Z=kn(F);Z.current=F;let te=j(F.title,N),ne=et(async oe=>{if(oe?.force){i(p);return}if(O.current){if(!await O.current())return;i(p);return}if(A){b(qe,{title:W?.title||v.unsavedChangesTitle,message:W?.message||{id:v.unsavedChangesMessage.id,defaultMessage:v.unsavedChangesMessage.defaultMessage,values:{title:te}},alert:W?.alert,alertType:W?.alertType||"danger",useYesNoTitles:!0,onOK:()=>i(p)},{size:"small"});return}i(p)},[i,b,p,A,W,te,v]),se=et(async()=>O.current?await O.current():!A,[A]);Tn(()=>(T(p,se),()=>R(p)),[p,se,T,R]);let $=et((oe,B)=>k(p,oe,B),[k,p]),Q=et(oe=>P(p,{options:{...Z.current,title:oe}}),[P,p]),Y=et(oe=>x(oe),[]),ee=et(oe=>(O.current=oe,()=>{O.current=null}),[]),re=xo(()=>({requestClose:ne,setDirty:$,setTitle:Q,setIcon:Y,onCloseRequested:ee,containerType:n==="left"?"left-panel":"right-panel",instanceId:p}),[ne,$,Q,Y,ee,n,p]),ce=A?`${te} *`:te;Tn(()=>{let oe=B=>{B.key==="Escape"&&M.length===0&&ne()};return document.addEventListener("keydown",oe),()=>document.removeEventListener("keydown",oe)},[ne,M.length]);let K=F.width||r||400,V=typeof K=="number"?`${K}px`:K;return me("div",{className:`v2-side-panel v2-side-panel-${n} v2-side-panel-visible ${z??""}`,style:{width:V},dir:S,children:qt("div",{className:"v2-side-panel-window",children:[qt("div",{className:"v2-side-panel-header",children:[J&&me("div",{className:"v2-side-panel-icon",children:J}),me("h4",{className:"v2-side-panel-title",children:ce}),me("button",{className:"v2-side-panel-close-button",onClick:()=>ne(),title:N(v.closeTooltip),type:"button",children:me("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:me("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),me("div",{className:`v2-side-panel-body ${D??""}`,children:me(Ge,{value:re,children:me(w,{...I,panelId:p})})})]})})},Co=({defaultWidth:t})=>{let{leftPanel:n,rightPanel:r}=Ae();return qt(ko,{children:[n&&me(Lt,{panel:n,position:"left",defaultWidth:t},n.id),r&&me(Lt,{panel:r,position:"right",defaultWidth:t},r.id)]})},wo=({defaultWidth:t})=>{let{leftPanel:n}=Ae();return n?me(Lt,{panel:n,position:"left",defaultWidth:t},n.id):null},Ro=({defaultWidth:t})=>{let{rightPanel:n}=Ae();return n?me(Lt,{panel:n,position:"right",defaultWidth:t},n.id):null},Mo=Co;import{useState as Kt,useEffect as In,useRef as jt,useCallback as zt,useImperativeHandle as To,useContext as Ln,useMemo as Ut,createContext as zn,forwardRef as Io,memo as So}from"react";import{jsx as de,jsxs as En}from"react/jsx-runtime";var Nn=zn(null),Wn=zn(null);function Eo({tabId:t,onClose:n,onOpen:r,setActiveTabId:i,children:b}){let P=Ut(()=>({tabId:t,onClose:n,onOpen:r,openTab:k=>i(k)}),[t,n,r,i]);return de(Wn.Provider,{value:P,children:b})}var Sn=So(function({tabs:n,activeTabId:r,isVisible:i,position:b,onTabClick:P}){return de("div",{style:{width:i?"56px":"0px",height:"100%",overflow:"hidden",transition:"width 0.25s cubic-bezier(0.4, 0, 0.2, 1)",flexShrink:0},children:de("div",{className:`sidebar-tabs-strip ${b}`,style:{width:"56px",height:"100%"},children:n.map(k=>{let T=r===k.id;return de("button",{type:"button",onClick:()=>P(k.id),className:`sidebar-tab-btn${T?" active":""}`,title:k.label,"aria-pressed":T,children:k.icon},k.id)})})})});function Lo({position:t,currentWidth:n,minWidth:r,maxWidth:i,onWidthChange:b,rootRef:P}){return de("div",{className:"resizer-bar",style:{cursor:"col-resize",width:"1px",height:"100%",flexShrink:0,zIndex:20},onPointerDown:T=>{T.preventDefault();let R=T.currentTarget;R.setPointerCapture(T.pointerId);let M=T.clientX,N=n;R.classList.add("active"),document.body.classList.add("resizing-active","resizing-col-active"),P.current?.classList.add("sidebar-resizing");let v=z=>{let D=z.clientX-M,O=t==="right"?N-D:N+D;b(Math.max(r,Math.min(i,O)))},S=()=>{R.classList.remove("active"),document.body.classList.remove("resizing-active","resizing-col-active"),P.current?.classList.remove("sidebar-resizing"),R.removeEventListener("pointermove",v),R.removeEventListener("pointerup",S),R.removeEventListener("pointercancel",S)};R.addEventListener("pointermove",v),R.addEventListener("pointerup",S),R.addEventListener("pointercancel",S)}})}var zo=Io(function({position:n="right",tabs:r,defaultWidth:i,minWidth:b=150,maxWidth:P=600,onWidthChange:k,drawerWidth:T,activeTabId:R,onActiveTabChange:M,visible:N,onVisibilityChange:v,stripVisible:S,onStripVisibilityChange:z,children:D},O){let p=R!==void 0,[w,I]=Kt(()=>i!==void 0?i:T!==void 0&&parseInt(T,10)||220),_=zt(B=>{I(B),k?.(B)},[k]),[A,W]=Kt(null),F=p?R:A,[J,x]=Kt(()=>new Set),Z=Ut(()=>{let B=new Set(J);F&&B.add(F);for(let ie of r)ie.eagerMount&&B.add(ie.id);return B},[J,F,r]),te=jt(F??null);In(()=>{te.current=F??null},[F]);let ne=jt(w);In(()=>{ne.current=w},[w]);let se=jt(null),$=zt(B=>{x(B!==null?ie=>{if(ie.has(B))return ie;let ge=new Set(ie);return ge.add(B),ge}:ie=>{let ge=!1,ve=new Set(ie);for(let Ee of ie){let Le=r.find(ze=>ze.id===Ee);Le&&!Le.eagerMount&&!Le.preserveState&&(ve.delete(Ee),ge=!0)}return ge?ve:ie}),p||W(B),M?.(B)},[p,M,r]);To(O,()=>({openTab:B=>$(B),closeDrawer:()=>$(null),getActiveTab:()=>te.current,show:()=>v?.(!0),hide:()=>v?.(!1),toggle:()=>v?.(N===!1),showStrip:()=>z?.(!0),hideStrip:()=>z?.(!1),setWidth:B=>_(Math.max(b,Math.min(P,B))),getWidth:()=>ne.current}),[$,N,v,z,_,b,P]);let Q=zt(B=>{$(F===B?null:B)},[F,$]),Y=zt(()=>$(null),[$]),ee=Ut(()=>({openTab:B=>$(B),closeDrawer:()=>$(null),getActiveTab:()=>te.current}),[$]),re=N!==!1,ce=re&&S!==!1,K=re&&F!=null,V=de("div",{className:`sidebar-content-drawer ${n}`,style:{flexBasis:K?`${w}px`:"0px",flexShrink:1,flexGrow:0,minWidth:K?`${b}px`:"0px",maxWidth:K?`${P}px`:"0px",overflow:"hidden",transition:"flex-basis 0.2s cubic-bezier(0.4, 0, 0.2, 1), min-width 0.2s cubic-bezier(0.4, 0, 0.2, 1), max-width 0.2s cubic-bezier(0.4, 0, 0.2, 1)"},children:r.map(B=>{if(!Z.has(B.id))return null;let ge=F===B.id,ve=()=>$(B.id);return En("div",{style:{display:ge?"flex":"none",flexDirection:"column",height:"100%",width:"100%"},children:[de("div",{className:"sidebar-drawer-header",children:de("span",{className:"sidebar-header-title",children:B.label})}),de("div",{className:"sidebar-drawer-body",children:de(Eo,{tabId:B.id,onClose:Y,onOpen:ve,setActiveTabId:$,children:B.renderContent(B.id,Y,ve)})})]},B.id)})}),oe=K?de(Lo,{position:n,currentWidth:w,minWidth:b,maxWidth:P,onWidthChange:_,rootRef:se}):null;return de(Nn.Provider,{value:ee,children:En("div",{ref:se,style:{display:"flex",flexDirection:"row",width:"100%",height:"100%",overflow:"hidden"},children:[n==="left"&&de(Sn,{tabs:r,activeTabId:F,isVisible:ce,position:n,onTabClick:Q}),n==="left"&&V,n==="left"&&oe,de("div",{style:{flex:"1 1 auto",minWidth:0,overflow:"hidden"},children:D}),n==="right"&&oe,n==="right"&&V,n==="right"&&de(Sn,{tabs:r,activeTabId:F,isVisible:ce,position:n,onTabClick:Q})]})})});function No(){let t=Ln(Nn);return t||(console.warn("useSidebar() called outside a <Sidebar> tree. Returning no-op."),{openTab:()=>{},closeDrawer:()=>{},getActiveTab:()=>null})}function Wo(){let t=Ln(Wn);return t||(console.warn("useSidebarTab() called outside a <Sidebar> tab renderContent tree. Returning no-op."),{tabId:"",onOpen:()=>{},onClose:()=>{},openTab:()=>{}})}import{forwardRef as Do,useImperativeHandle as Oo,useState as Dn,useRef as On,useEffect as Fn}from"react";import{createPortal as Fo}from"react-dom";import{Fragment as Go,jsx as he,jsxs as An}from"react/jsx-runtime";function Ao(t,n,r=8){switch(n){case"left":return{left:t.right+r,top:t.top};case"right":return{right:window.innerWidth-t.left+r,top:t.top};case"top":return{top:t.bottom+r,left:t.left};case"bottom":return{bottom:window.innerHeight-t.top+r,left:t.left}}}function Bo({item:t,position:n,toolbar:r}){let[i,b]=Dn(!1),[P,k]=Dn(null),T=On(null),R=On(null),M=t.activeItemId!==void 0,N=M?t.activeItemId:r.getActiveInGroup(t.id),v=t.items.find(p=>!("type"in p)&&p.id===N),S=N!==null,z=v?.icon??t.defaultIcon,D=v?.label??t.label,O=()=>{t.disabled||(!i&&T.current&&k(T.current.getBoundingClientRect()),b(p=>!p))};return Fn(()=>{if(!i)return;let p=w=>{let I=w.target;T.current?.contains(I)||R.current?.contains(I)||b(!1)};return document.addEventListener("mousedown",p),()=>document.removeEventListener("mousedown",p)},[i]),Fn(()=>{if(!i)return;let p=w=>{w.key==="Escape"&&b(!1)};return document.addEventListener("keydown",p),()=>document.removeEventListener("keydown",p)},[i]),An(Go,{children:[he("button",{ref:T,type:"button",className:`toolbar-btn toolbar-btn-group${S?" active":""}`,title:D,"aria-label":D,"aria-expanded":i,"aria-haspopup":"menu",disabled:t.disabled,onClick:O,children:z}),i&&P&&Fo(he("div",{ref:R,className:`toolbar-group-flyout ${n}`,style:Ao(P,n),role:"menu",children:t.items.map((p,w)=>{if("type"in p)return he("div",{className:"toolbar-group-flyout-sep",role:"separator"},`sep-${w}`);let I=N===p.id;return An("button",{type:"button",className:`toolbar-group-flyout-item${I?" active":""}`,disabled:p.disabled,role:"menuitem","aria-pressed":I,onClick:()=>{M?t.onActiveItemChange?.(p.id):r.setActiveInGroup(t.id,p.id),p.onActivate?.(p.id),b(!1)},children:[he("span",{className:"toolbar-group-flyout-icon",children:p.icon}),he("span",{className:"toolbar-group-flyout-label",children:p.label}),p.shortcut&&he("span",{className:"toolbar-group-flyout-shortcut",children:p.shortcut})]},p.id)})}),document.body)]})}function Ho(t,n,r,i){switch(t.type){case"separator":return he("div",{className:"toolbar-separator",role:"separator"},`sep-${n}`);case"action":return he("button",{type:"button",className:"toolbar-btn toolbar-btn-action",title:t.label,"aria-label":t.label,disabled:t.disabled,onClick:t.onClick,children:t.icon},t.id);case"radio":{let b=r.getActiveInGroup(t.group)===t.id;return he("button",{type:"button",className:`toolbar-btn toolbar-btn-radio${b?" active":""}`,title:t.label,"aria-label":t.label,"aria-pressed":b,disabled:t.disabled,onClick:()=>{r.setActiveInGroup(t.group,t.id),t.onActivate?.(t.id)},children:t.icon},t.id)}case"toggle":{let b=r.isModifierActive(t.id);return he("button",{type:"button",className:`toolbar-btn toolbar-btn-toggle${b?" active":""}`,title:t.label,"aria-label":t.label,"aria-pressed":b,disabled:t.disabled,onClick:()=>{r.toggleModifier(t.id),t.onToggle?.(!b)},children:t.icon},t.id)}case"group":return he(Bo,{item:t,position:i,toolbar:r},t.id)}}var _o=Do(function({position:n="left",items:r,visible:i,onVisibilityChange:b,className:P,style:k},T){let R=Et(),M=n==="left"||n==="right";Oo(T,()=>({show:()=>b?.(!0),hide:()=>b?.(!1),toggle:()=>b?.(i===!1)}),[i,b]);let N=i!==!1?{}:M?{width:"0px"}:{height:"0px"};return he("div",{className:`toolbar-strip ${n}${P?` ${P}`:""}`,role:"toolbar","aria-orientation":M?"vertical":"horizontal",style:{...N,...k},children:r.map((v,S)=>Ho(v,S,R,n))})});export{qe as ConfirmationForm,po as DockableDesktopProvider,Wt as FormContainerContext,Ge as FormContainerProvider,wo as LeftPanelRenderer,bo as ModalStackRenderer,Bt as PanelProvider,wt as PanelRegistry,Je as PanelRegistryClass,Ro as RightPanelRenderer,Mo as SidePanelRenderer,zo as Sidebar,_o as Toolbar,St as ToolbarProvider,so as WindowManager,Ot as WindowManagerProvider,Yt as WorkspaceClient,lt as defaultPredefinedMessages,j as formatLabel,at as useFormContainer,be as useFormatMessage,Xe as usePanelActions,Vn as usePanelContext,qn as usePanelContextMenu,an as usePanelId,Ae as usePanelState,Me as usePredefinedMessages,ct as useRegistry,No as useSidebar,Wo as useSidebarTab,Fe as useStyleClasses,Et as useToolbar,ut as useWindowManagerActions,Re as useWindowManagerState};
23
+ 3. Verify styles.css is imported \u2014 it anchors html, body, #root to 100% height.`)}u({width:Math.max(100,A.width),height:Math.max(100,A.height)})});return p.observe(r),()=>{p.disconnect()}},[]),Ce(()=>{let r=d.width,S=d.height;s.floating.forEach(p=>{let m=typeof p.width=="string"?parseFloat(p.width):p.width,A=typeof p.height=="string"?parseFloat(p.height):p.height,X=typeof p.x=="string"?parseFloat(p.x):p.x,V=typeof p.y=="string"?parseFloat(p.y):p.y,D=m,Q=A,ue=X,q=V,ae=!1;D>r&&(D=Math.max(200,r-20),ae=!0),Q>S&&(Q=Math.max(150,S-40),ae=!0);let pe=10;if(p.anchor==="top-right"||p.anchor==="bottom-right")ue=r-D-pe,ae=!0;else{let ie=r-100;ue>ie&&(ue=Math.max(0,ie),ae=!0)}if(p.anchor==="bottom-left"||p.anchor==="bottom-right")q=S-Q-pe,ae=!0;else{let ie=S-40;q>ie&&(q=Math.max(0,ie),ae=!0)}ae&&h(p.id,{x:ue,y:q,width:D,height:Q})})},[d,s.floating,h]),Ce(()=>{let r=S=>{if(S.button!==0)return;let p=S.target;if(!p||typeof p.closest!="function")return;let m=p.closest(".floating-window");if(m){let X=m.getAttribute("data-window-id");X&&(R(X),l(X));return}let A=p.closest(".workspace-panel");if(A){let X=A.getAttribute("data-active-panel-id");X&&R(X)}};return document.addEventListener("pointerdown",r),()=>{document.removeEventListener("pointerdown",r)}},[l,R]);let w=(r,S)=>{let p=s.floating.find(q=>q.id===r);if(!p||p.maximized)return;l(r);let m=S.currentTarget,A=m.closest(".floating-window"),X=S.clientX,V=S.clientY,D=A?A.offsetLeft:0,Q=A?A.offsetTop:0,ue=()=>{let q=ce.current,ae=$e.current,pe=ke.current,ie=lt.current;if(ie)h(r,{anchor:ct?wt(ie):ie});else if(pe)a(r,Ze(pe));else if(ae){let be=ae.index;ae.side==="right"&&(be+=1),E(r,ae.leafId,be)}else q&&N(r,q.leafId,Ze(q.position));Qe(null),tt()};if(S.pointerType==="touch"){let q=S.pointerId,ae=!1,pe=()=>{ae=!0,clearTimeout(be),m.removeEventListener("pointermove",ie),m.removeEventListener("pointerup",pe),m.removeEventListener("pointercancel",pe)},ie=Se=>{Math.hypot(Se.clientX-X,Se.clientY-V)>et&&pe()},be=setTimeout(()=>{if(ae)return;m.removeEventListener("pointermove",ie),m.removeEventListener("pointerup",pe),m.removeEventListener("pointercancel",pe);try{m.setPointerCapture(q)}catch{return}m.classList.add("long-press-active"),L(r);let Se=qe=>{let sn=qe.clientX-X,$t=qe.clientY-V;h(r,{x:D+sn,y:Q+$t,anchor:null}),Ct(qe.clientX,qe.clientY)},dt=()=>{m.classList.remove("long-press-active"),m.removeEventListener("pointermove",Se),m.removeEventListener("pointerup",dt),m.removeEventListener("pointercancel",we),ue()},we=()=>{m.classList.remove("long-press-active"),m.removeEventListener("pointermove",Se),m.removeEventListener("pointerup",dt),m.removeEventListener("pointercancel",we),tt()};m.addEventListener("pointermove",Se),m.addEventListener("pointerup",dt),m.addEventListener("pointercancel",we)},Ke);m.addEventListener("pointermove",ie),m.addEventListener("pointerup",pe),m.addEventListener("pointercancel",pe)}else{let q=!1,ae=ie=>{let be=ie.clientX-X,Se=ie.clientY-V;!q&&(Math.abs(be)>5||Math.abs(Se)>5)&&(q=!0,L(r)),q&&h(r,{x:D+be,y:Q+Se,anchor:null})},pe=()=>{window.removeEventListener("pointermove",ae),window.removeEventListener("pointerup",pe),q&&ue()};window.addEventListener("pointermove",ae),window.addEventListener("pointerup",pe)}},F=(r,S,p)=>{p.stopPropagation();let m=s.floating.find(Xt=>Xt.id===r);if(!m||m.maximized)return;l(r);let A=p.currentTarget;A.setPointerCapture(p.pointerId);let X=p.clientX,V=p.clientY,D=A.closest(".floating-window"),Q=D?D.offsetWidth:400,ue=D?D.offsetHeight:300,q=D?D.offsetLeft:0,ae=D?D.offsetTop:0,pe=d.width,ie=d.height,be=typeof m.x=="string"?parseFloat(m.x):m.x,Se=typeof m.y=="string"?parseFloat(m.y):m.y,dt=typeof m.width=="string"?parseFloat(m.width):m.width,we=typeof m.height=="string"?parseFloat(m.height):m.height,qe=S==="se"&&Math.abs(be+dt-pe)<4,sn=S==="se"&&Math.abs(Se+we-ie)<4,$t=Xt=>{let zn=Xt.clientX-X,Wn=Xt.clientY-V,Rt=q,Mt=ae,ut=Q,pt=ue;S.includes("e")&&(ut=Math.max(200,Q+zn)),S.includes("w")&&(ut=Math.max(200,Q-zn),Rt=q+Q-ut),S.includes("s")&&(pt=Math.max(150,ue+Wn)),S.includes("n")&&(pt=Math.max(150,ue-Wn),Mt=ae+ue-pt),qe&&(Rt=pe-ut,Rt<0&&(Rt=0,ut=pe)),sn&&(Mt=ie-pt,Mt<0&&(Mt=0,pt=ie)),h(r,{x:Rt,y:Mt,width:ut,height:pt})},Yt=()=>{A.removeEventListener("pointermove",$t),A.removeEventListener("pointerup",Yt),A.removeEventListener("pointercancel",Yt)};A.addEventListener("pointermove",$t),A.addEventListener("pointerup",Yt),A.addEventListener("pointercancel",Yt)},J=r=>{if(k.current){let S=r==="left"?-150:150;k.current.scrollBy({left:S,behavior:"smooth"})}},ne=bn(()=>{G.current&&clearTimeout(G.current),oe(!0)},[]),j=bn(()=>{G.current=setTimeout(()=>oe(!1),400)},[]);Ce(()=>{n==="autohide"&&s.minimized.length>te.current&&(G.current&&clearTimeout(G.current),oe(!0),G.current=setTimeout(()=>oe(!1),2e3)),te.current=s.minimized.length},[s.minimized.length,n]);let[le,ye]=Ae("dark");return Ce(()=>{let r=()=>{let p=document.documentElement.getAttribute("data-color-scheme")==="light"?"light":"dark";ye(p)};r();let S=new MutationObserver(r);return S.observe(document.documentElement,{attributes:!0,attributeFilter:["data-color-scheme"]}),()=>S.disconnect()},[]),Ce(()=>(e?document.documentElement.setAttribute("data-workspace-skin",e):document.documentElement.removeAttribute("data-workspace-skin"),()=>{document.documentElement.removeAttribute("data-workspace-skin")}),[e]),ge("div",{"data-workspace-skin":e,"data-color-scheme":le,style:{display:"flex",flexDirection:"column",position:"relative",width:"100%",height:"100%",overflow:"hidden",userSelect:"none"},dir:s.dir,children:[ge("div",{ref:g,className:s.draggedPanelId?"dragging-active":void 0,style:{flexGrow:1,width:"100%",position:"relative",overflow:"hidden"},children:[s.draggedPanelId!==null&&ge(oo,{children:[x("div",{"data-edge-trigger":"left",className:"workspace-edge-trigger edge-trigger-left",onPointerEnter:()=>Re("left"),onPointerLeave:()=>Re(null)}),x("div",{"data-edge-trigger":"right",className:"workspace-edge-trigger edge-trigger-right",onPointerEnter:()=>Re("right"),onPointerLeave:()=>Re(null)}),x("div",{"data-edge-trigger":"top",className:"workspace-edge-trigger edge-trigger-top",onPointerEnter:()=>Re("top"),onPointerLeave:()=>Re(null)}),x("div",{"data-edge-trigger":"bottom",className:"workspace-edge-trigger edge-trigger-bottom",onPointerEnter:()=>Re("bottom"),onPointerLeave:()=>Re(null)})]}),s.draggedPanelId!==null&&["top-left","top-right","bottom-left","bottom-right"].map(r=>x("div",{className:`fw-corner-zone fw-corner-zone--${r}${Dt===r?" fw-corner-zone--hovered":""}`,onPointerEnter:()=>{Qe(r),Re(null)},onPointerLeave:()=>Qe(null),"aria-hidden":"true"},r)),s.draggedPanelId!==null&&Ne!==null&&x("div",{className:"workspace-edge-preview",style:(()=>{let r=`${s.edgeSplitRatio*100}%`;switch(Ne){case"left":return{left:0,top:0,bottom:0,width:r};case"right":return{right:0,top:0,bottom:0,width:r};case"top":return{top:0,left:0,right:0,height:r};case"bottom":return{bottom:0,left:0,right:0,height:r}}})()}),x("div",{style:{width:"100%",height:"100%",overflow:"hidden",position:"relative"},children:s.gridRoot?x(lo,{node:s.gridRoot,path:[],onTabRightClick:Bt,activeDropZone:U,onHoverDropZone:_t,onTabDragStart:rn,hoveredTab:At,onTabHover:Ft,defaultPanelIcon:t,onRequestClosePanel:z}):x("div",{className:"empty-workspace-grid",children:"Grid Empty"})}),s.floating.map(r=>{let S=s.panels[r.id];if(!S)return null;let p=r.maximized,m=s.draggedPanelId===r.id,A=s.activePanelId===r.id,V=P.get(S.component)?.defaultOptions;return ge("div",{"data-window-id":r.id,dir:s.dir,onPointerDownCapture:()=>{R(r.id),l(r.id)},className:`floating-window ${p?"maximized":""} ${A?"v2-window-focused":""} ${H??""}`,style:(()=>{let ue=typeof r.width=="number"?`${r.width}px`:r.width,q=typeof r.height=="number"?`${r.height}px`:r.height;if(p)return{position:"absolute",left:0,top:0,width:"100%",height:"100%",zIndex:r.z,pointerEvents:m?"none":"auto"};if(r.anchor){let ae=s.floating.filter(we=>we.anchor===r.anchor&&!we.maximized),pe=ae.findIndex(we=>we.id===r.id),ie=8;for(let we=0;we<pe;we++){let qe=typeof ae[we].height=="number"?ae[we].height:parseFloat(ae[we].height);ie+=qe+8}let be=r.anchor.startsWith("top"),Se=r.anchor.endsWith("-right");return{position:"absolute",[(ct?!Se:Se)?"right":"left"]:8,[be?"top":"bottom"]:ie,width:ue,height:q,zIndex:r.z,transition:m?"none":"top 0.2s ease, bottom 0.2s ease",pointerEvents:m?"none":"auto"}}return{position:"absolute",left:typeof r.x=="number"?`${r.x}px`:r.x,top:typeof r.y=="number"?`${r.y}px`:r.y,width:ue,height:q,zIndex:r.z,pointerEvents:m?"none":"auto"}})(),children:[ge("div",{onDoubleClick:()=>b(r.id),onPointerDown:D=>{V?.canDrag!==!1&&w(r.id,D)},className:"floating-window-titlebar cursor-move",style:{cursor:p||V?.canDrag===!1?"default":"move"},children:[ge("span",{className:"floating-window-title",children:[x("span",{className:"window-title-icon",children:V?.icon||t||vn}),ge("span",{children:[me(S.title,v),S.dirty?" *":""]})]}),ge("div",{className:"fw-titlebar-actions",style:{gap:"var(--header-button-gap, 4px)"},onPointerDown:D=>D.stopPropagation(),children:[V?.renderHeaderActions&&x("div",{className:"window-header-actions",children:V.renderHeaderActions(r.id)}),M(r.id).length>0&&x("button",{type:"button",className:"custom-tab-btn btn-more-actions",title:"More actions",onClick:D=>{D.stopPropagation();let Q=M(r.id);Q.length!==0&&B.current?.show({event:D,items:Q})},children:ge("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"currentColor",style:{display:"block"},children:[x("circle",{cx:"12",cy:"5",r:"2"}),x("circle",{cx:"12",cy:"12",r:"2"}),x("circle",{cx:"12",cy:"19",r:"2"})]})}),x("button",{type:"button",title:p?me(I.restoreSize,v):me(I.maximize,v),onClick:()=>b(r.id),className:"custom-tab-btn btn-maximize-tab",children:x("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:x("rect",{x:"4",y:"4",width:"16",height:"16",rx:"1.5"})})}),V?.canMinimize!==!1&&x("button",{type:"button",title:me(I.minimize,v),onClick:()=>f(r.id),className:"custom-tab-btn btn-minimize-tab",children:x("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:x("path",{d:"M5 12h14"})})}),V?.canClose!==!1&&x("button",{type:"button",title:me(I.close,v),onClick:()=>z(r.id),className:"custom-tab-btn btn-close-tab",children:x("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:x("path",{d:"M18 6L6 18M6 6l12 12"})})})]})]}),x("div",{className:c??void 0,style:{flexGrow:1,width:"100%",overflow:"hidden",position:"relative",isolation:"isolate"},children:x(ao,{panelId:r.id},r.id)}),!p&&ge(oo,{children:[x("div",{onPointerDown:D=>F(r.id,"n",D),className:"resize-handle resize-n"}),x("div",{onPointerDown:D=>F(r.id,"ne",D),className:"resize-handle resize-ne"}),x("div",{onPointerDown:D=>F(r.id,"e",D),className:"resize-handle resize-e"}),x("div",{onPointerDown:D=>F(r.id,"se",D),className:"resize-handle resize-se"}),x("div",{onPointerDown:D=>F(r.id,"s",D),className:"resize-handle resize-s"}),x("div",{onPointerDown:D=>F(r.id,"sw",D),className:"resize-handle resize-sw"}),x("div",{onPointerDown:D=>F(r.id,"w",D),className:"resize-handle resize-w"}),x("div",{onPointerDown:D=>F(r.id,"nw",D),className:"resize-handle resize-nw"})]})]},r.id)})]}),(n==="always"||s.minimized.length>0)&&ge("div",{className:["taskbar-footer-container",`taskbar-mode-${n}`,n==="autohide"&&K?"taskbar-expanded":""].filter(Boolean).join(" "),style:{height:"48px",zIndex:100},onPointerEnter:n==="autohide"?ne:void 0,onPointerLeave:n==="autohide"?j:void 0,children:[n==="autohide"&&x("div",{className:"taskbar-peek-handle"}),x("button",{type:"button",onClick:()=>J("left"),className:"taskbar-nav-btn",style:{display:s.minimized.length>4?"block":"none"},children:"\u25C0"}),x("div",{ref:k,className:"taskbar-items-container",style:{scrollSnapType:"x mandatory"},children:s.minimized.map(r=>{let p=P.get(r.component)?.defaultOptions?.icon||t||vn;return x("div",{onClick:()=>{_.current!=="touch"&&(se(null),W(r.id))},onContextMenu:m=>o(r.id,m),onPointerDown:m=>{if(_.current=m.pointerType,m.pointerType!=="touch")return;let A=m.currentTarget,X=m.clientX,V=m.clientY,D=m.pointerId,Q=!1,ue=()=>{Q=!0,clearTimeout(pe),A.removeEventListener("pointermove",ae),A.removeEventListener("pointerup",q),A.removeEventListener("pointercancel",ue)},q=()=>{ue();let ie=A.getBoundingClientRect();re?.id===r.id?(W(r.id),se(null)):se({id:r.id,rect:ie,title:r.title,component:r.component,fromTouch:!0})},ae=ie=>{Math.hypot(ie.clientX-X,ie.clientY-V)>et&&ue()},pe=setTimeout(()=>{if(Q)return;A.removeEventListener("pointermove",ae),A.removeEventListener("pointerup",q),A.removeEventListener("pointercancel",ue);try{A.setPointerCapture(D)}catch{return}navigator.vibrate&&navigator.vibrate(10);let ie=be=>{A.removeEventListener("pointerup",ie),A.removeEventListener("pointercancel",ie),o(r.id,be)};A.addEventListener("pointerup",ie),A.addEventListener("pointercancel",ie)},Ke);A.addEventListener("pointermove",ae),A.addEventListener("pointerup",q),A.addEventListener("pointercancel",ue)},onPointerEnter:m=>{if(m.pointerType==="touch"||y)return;Z.current&&clearTimeout(Z.current);let A=m.currentTarget.getBoundingClientRect();m.clientX>=A.left&&m.clientX<=A.right&&m.clientY>=A.top&&m.clientY<=A.bottom&&se({id:r.id,rect:A,title:r.title,component:r.component})},onPointerLeave:m=>{m.pointerType!=="touch"&&(Z.current=setTimeout(()=>{se(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:x("span",{className:"taskbar-item-icon",children:p})},r.id)})}),re&&no(ge("div",{className:"taskbar-item-tooltip",dir:s.dir,style:{position:"fixed",left:`${re.rect.left+re.rect.width/2}px`,top:`${re.rect.top-8}px`,transform:"translateX(-50%) translateY(-100%)",opacity:1,pointerEvents:"auto",zIndex:999999},onPointerEnter:()=>{Z.current&&clearTimeout(Z.current)},onPointerLeave:r=>{r.pointerType!=="touch"&&se(null)},onClick:()=>{W(re.id),se(null)},onContextMenu:r=>o(re.id,r),onPointerDown:r=>{if(r.pointerType!=="touch")return;let S=re.id,p=r.currentTarget,m=r.clientX,A=r.clientY,X=r.pointerId,V=!1,D=()=>{V=!0,clearTimeout(ue),p.removeEventListener("pointermove",Q),p.removeEventListener("pointerup",D),p.removeEventListener("pointercancel",D)},Q=q=>{Math.hypot(q.clientX-m,q.clientY-A)>et&&D()},ue=setTimeout(()=>{if(V)return;p.removeEventListener("pointermove",Q),p.removeEventListener("pointerup",D),p.removeEventListener("pointercancel",D);try{p.setPointerCapture(X)}catch{return}navigator.vibrate&&navigator.vibrate(10);let q=ae=>{p.removeEventListener("pointerup",q),p.removeEventListener("pointercancel",q),o(S,ae)};p.addEventListener("pointerup",q),p.addEventListener("pointercancel",q)},Ke);p.addEventListener("pointermove",Q),p.addEventListener("pointerup",D),p.addEventListener("pointercancel",D)},children:[ge("div",{className:"tooltip-header-row",children:[ge("span",{className:"tooltip-title-text text-truncate",style:{maxWidth:"140px"},children:[me(re.title,v),s.panels[re.id]?.dirty?" *":""]}),x("span",{onClick:r=>{r.stopPropagation(),z(re.id),se(null)},title:me(I.closePanel,v),className:"tooltip-close-x",children:x("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:x("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),x(nr,{panelId:re.id})]}),document.body),x("button",{type:"button",onClick:()=>J("right"),className:"taskbar-nav-btn",style:{display:s.minimized.length>4?"block":"none"},children:"\u25B6"})]}),Object.keys(s.panels).map(r=>{let S=s.panels[r];if(!S)return null;let p=io(r);return no(x(or,{panelId:r,children:x("div",{style:{width:"100%",height:"100%"},dir:s.dir,children:tr(r,S.component,P)})}),p,r)}),x(i.Component,{ref:B,theme:"dark",formatMessageProvider:v,onShow:()=>$(!0),onHide:()=>$(!1)}),s.draggedPanelId!==null&&!s.floating.some(r=>r.id===s.draggedPanelId)&&ge("div",{className:"drag-ghost-tab",style:{left:fe.x+12,top:fe.y+12,zIndex:1e5},children:["\u{1F4C4} ",me(s.panels[s.draggedPanelId]?.title,v)||"Tab"]})]})},sr=ir;var Pn=class{registry;initialState;config;_actions=null;_initialized=!1;_pendingCalls=[];_pendingOpenPanelIds=new Set;_pendingSubscriptions=[];_disconnectedWarnTimer=null;constructor(t={}){if(this.registry=new gt,this.initialState=t.initialState??null,this.config={formatMessage:t.formatMessage,predefinedMessages:t.predefinedMessages,dir:t.dir,defaultSplitRatio:t.defaultSplitRatio,defaultEdgeSplitRatio:t.defaultEdgeSplitRatio},t.panels)for(let[n,i]of Object.entries(t.panels))this.registry.register(n,i.component,i.defaultOptions)}_connect(t){this._actions=t,this._disconnectedWarnTimer!==null&&(clearTimeout(this._disconnectedWarnTimer),this._disconnectedWarnTimer=null),this._initialized||(this._initialized=!0);for(let i of this._pendingSubscriptions)i.unsub=t.subscribe(i.event,i.callback);let n=this._pendingCalls.splice(0);for(let i of n)i(t)}_disconnect(){this._actions=null;for(let t of this._pendingSubscriptions)t.unsub?.(),t.unsub=null}get isConnected(){return this._actions!==null}_startWarnTimer(){this._disconnectedWarnTimer===null&&(this._disconnectedWarnTimer=setTimeout(()=>{!this.isConnected&&this._pendingCalls.length>0&&console.error("[react-dockable-desktop] WorkspaceClient has "+this._pendingCalls.length+" queued call(s) but was never connected to a WindowManagerProvider. Did you forget client={workspace} on <WindowManagerProvider>?")},process.env.NODE_ENV==="production"?5e3:1e3))}_dispatch(t){this._actions?t(this._actions):(this._pendingCalls.push(t),this._startWarnTimer())}_subscribeRaw(t,n){if(this._actions)return this._actions.subscribe(t,n);let i={event:t,callback:n,unsub:null};return this._pendingSubscriptions.push(i),()=>{i.unsub?.(),i.unsub=null;let s=this._pendingSubscriptions.indexOf(i);s!==-1&&this._pendingSubscriptions.splice(s,1)}}openPanel(...t){if(this._actions){this._actions.openPanel(...t);return}let n=t[0];this._pendingOpenPanelIds.has(n)||(this._pendingOpenPanelIds.add(n),this._pendingCalls.push(i=>{this._pendingOpenPanelIds.delete(n),i.openPanel(...t)}),this._startWarnTimer())}closePanel(t){this._dispatch(n=>n.closePanel(t))}minimizePanel(t){this._dispatch(n=>n.minimizePanel(t))}restorePanel(t){this._dispatch(n=>n.restorePanel(t))}floatPanel(...t){this._dispatch(n=>n.floatPanel(...t))}dockPanel(...t){this._dispatch(n=>n.dockPanel(...t))}maximizePanel(t){this._dispatch(n=>n.maximizePanel(t))}focusPanel(t){this._dispatch(n=>n.focusPanel(t))}isOpen(t){return this._actions?.isOpen(t)??!1}getOpenPanelIds(){return this._actions?.getOpenPanelIds()??[]}saveLayout(){return this._actions?.saveLayout()??""}loadLayout(t){return this._actions?this._actions.loadLayout(t):(this._pendingCalls.push(n=>{n.loadLayout(t)}),!1)}setDirection(t){this._dispatch(n=>n.setDirection(t))}publish(t,n){this._dispatch(i=>i.publish(t,n))}subscribe(t,n){return this._subscribeRaw(t,n)}onPanelOpen(t){return this._subscribeRaw("panel:opened",n=>{let i=n;t(i.id,i.component)})}onPanelClose(t){return this._subscribeRaw("panel:closed",n=>{t(n.id)})}onPanelMinimize(t){return this._subscribeRaw("panel:minimized",n=>{t(n.id)})}onPanelRestore(t){return this._subscribeRaw("panel:restored",n=>{t(n.id)})}};import"react";import{createContext as ar,useContext as lr,useMemo as cr,useState as co}from"react";import{jsx as dr}from"react/jsx-runtime";var uo=ar(null),Qt=({children:e})=>{let[t,n]=co({}),[i,s]=co({}),P=cr(()=>({getActiveInGroup:W=>t[W]??null,setActiveInGroup:(W,f)=>n(C=>({...C,[W]:f})),isModifierActive:W=>i[W]??!1,setModifierActive:(W,f)=>s(C=>({...C,[W]:f})),toggleModifier:W=>s(f=>({...f,[W]:!f[W]}))}),[t,i]);return dr(uo.Provider,{value:P,children:e})};function en(){let e=lr(uo);return e||(console.warn("useToolbar() called outside <DockableDesktopProvider>. Returning no-op."),{getActiveInGroup:()=>null,setActiveInGroup:()=>{},isModifierActive:()=>!1,setModifierActive:()=>{},toggleModifier:()=>{}})}import{jsx as xn}from"react/jsx-runtime";var ur=e=>xn(Qt,{children:xn(cn,{...e,children:xn(mn,{children:e.children})})});import{useCallback as Nt,useRef as po,useEffect as pr,useState as gr,useMemo as fr}from"react";import{Fragment as vr,jsx as Fe,jsxs as wn}from"react/jsx-runtime";var mr=({modal:e,index:t,isTopmost:n})=>{let{close:i,openModal:s,updateInstance:P,setDirty:W}=it(),f=De(),C=He(),{dir:b}=_e(),{modalClass:h,modalBodyClass:l}=je(),T=po(null),{id:L,Component:N,props:E,options:a,dirty:R,dirtyOptions:M}=e,O=a,[v,I]=gr(O.icon||null),z=po(O);z.current=O;let H=me(O.title,f),c=Nt(async y=>{if(y?.force){i(L);return}if(T.current){if(!await T.current())return;i(L);return}if(R){s(at,{title:M?.title||C.unsavedChangesTitle,message:M?.message||{id:C.unsavedChangesMessage.id,defaultMessage:C.unsavedChangesMessage.defaultMessage,values:{title:H}},alert:M?.alert,alertType:M?.alertType||"danger",useYesNoTitles:!0,onOK:()=>i(L)},{size:"small"});return}i(L)},[i,s,L,R,M,H,C]),k=Nt((y,$)=>W(L,y,$),[W,L]),B=Nt(y=>P(L,{options:{...z.current,title:y}}),[P,L]),K=Nt(y=>I(y),[]),oe=Nt(y=>(T.current=y,()=>{T.current=null}),[]),G=fr(()=>({requestClose:c,setDirty:k,setTitle:B,setIcon:K,onCloseRequested:oe,containerType:"modal",instanceId:L}),[c,k,B,K,oe,L]),te=R?`${H} *`:H,re=O.size?`v2-modal-size-${O.size}`:"v2-modal-size-auto",se=O.closable!==!1;pr(()=>{if(!n||!se)return;let y=$=>{$.key==="Escape"&&($.stopPropagation(),c())};return document.addEventListener("keydown",y),()=>document.removeEventListener("keydown",y)},[c,se,n]);let _=1e4+t*10;return wn("div",{className:"v2-modal-overlay",style:{zIndex:_},dir:b,children:[Fe("div",{className:"v2-modal-curtain",onClick:se?()=>c():void 0}),wn("div",{className:`v2-modal-window ${re} ${h??""}`,children:[wn("div",{className:"v2-modal-header",children:[v&&Fe("div",{className:"v2-modal-icon",children:v}),Fe("h4",{className:"v2-modal-title",children:te}),se&&Fe("button",{className:"v2-modal-close-button",onClick:()=>c(),title:f(C.closeTooltip),type:"button",children:Fe("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:Fe("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),Fe("div",{className:`v2-modal-body ${l??""}`,children:Fe(nt,{value:G,children:Fe(N,{...E,panelId:L})})})]})]})},hr=()=>{let{modals:e}=Ue();return e.length===0?null:Fe(vr,{children:e.map((t,n)=>Fe(mr,{modal:t,index:n,isTopmost:n===e.length-1},t.id))})},br=hr;import{useCallback as yt,useRef as go,useEffect as fo,useState as yr,useMemo as Pr}from"react";import{Fragment as Mr,jsx as Ee,jsxs as Cn}from"react/jsx-runtime";var tn=({panel:e,position:t,defaultWidth:n})=>{let{close:i,openModal:s,updateInstance:P,setDirty:W,registerCloseHandler:f,unregisterCloseHandler:C}=it(),{modals:b}=Ue(),h=De(),l=He(),{dir:T}=_e(),{sidePanelClass:L,sidePanelBodyClass:N}=je(),E=go(null),{id:a,Component:R,props:M,options:O,dirty:v,dirtyOptions:I}=e,z=O,[H,c]=yr(z.icon||null),k=go(z);k.current=z;let B=me(z.title,h),K=yt(async U=>{if(U?.force){i(a);return}if(E.current){if(!await E.current())return;i(a);return}if(v){s(at,{title:I?.title||l.unsavedChangesTitle,message:I?.message||{id:l.unsavedChangesMessage.id,defaultMessage:l.unsavedChangesMessage.defaultMessage,values:{title:B}},alert:I?.alert,alertType:I?.alertType||"danger",useYesNoTitles:!0,onOK:()=>i(a)},{size:"small"});return}i(a)},[i,s,a,v,I,B,l]),oe=yt(async()=>E.current?await E.current():!v,[v]);fo(()=>(f(a,oe),()=>C(a)),[a,oe,f,C]);let G=yt((U,Y)=>W(a,U,Y),[W,a]),te=yt(U=>P(a,{options:{...k.current,title:U}}),[P,a]),re=yt(U=>c(U),[]),se=yt(U=>(E.current=U,()=>{E.current=null}),[]),Z=Pr(()=>({requestClose:K,setDirty:G,setTitle:te,setIcon:re,onCloseRequested:se,containerType:t==="left"?"left-panel":"right-panel",instanceId:a}),[K,G,te,re,se,t,a]),_=v?`${B} *`:B;fo(()=>{let U=Y=>{Y.key==="Escape"&&b.length===0&&K()};return document.addEventListener("keydown",U),()=>document.removeEventListener("keydown",U)},[K,b.length]);let y=z.width||n||400,$=typeof y=="number"?`${y}px`:y;return Ee("div",{className:`v2-side-panel v2-side-panel-${t} v2-side-panel-visible ${L??""}`,style:{width:$},dir:T,children:Cn("div",{className:"v2-side-panel-window",children:[Cn("div",{className:"v2-side-panel-header",children:[H&&Ee("div",{className:"v2-side-panel-icon",children:H}),Ee("h4",{className:"v2-side-panel-title",children:_}),Ee("button",{className:"v2-side-panel-close-button",onClick:()=>K(),title:h(l.closeTooltip),type:"button",children:Ee("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:Ee("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),Ee("div",{className:`v2-side-panel-body ${N??""}`,children:Ee(nt,{value:Z,children:Ee(R,{...M,panelId:a})})})]})})},xr=({defaultWidth:e})=>{let{leftPanel:t,rightPanel:n}=Ue();return Cn(Mr,{children:[t&&Ee(tn,{panel:t,position:"left",defaultWidth:e},t.id),n&&Ee(tn,{panel:n,position:"right",defaultWidth:e},n.id)]})},wr=({defaultWidth:e})=>{let{leftPanel:t}=Ue();return t?Ee(tn,{panel:t,position:"left",defaultWidth:e},t.id):null},Cr=({defaultWidth:e})=>{let{rightPanel:t}=Ue();return t?Ee(tn,{panel:t,position:"right",defaultWidth:e},t.id):null},Rr=xr;import{useState as Rn,useEffect as mo,useRef as Mn,useCallback as nn,useImperativeHandle as Tr,useContext as vo,useMemo as Tn,createContext as yo,forwardRef as kr,memo as Sr}from"react";import{jsx as Te,jsxs as bo}from"react/jsx-runtime";var Po=yo(null),xo=yo(null);function Ir({tabId:e,onClose:t,onOpen:n,setActiveTabId:i,children:s}){let P=Tn(()=>({tabId:e,onClose:t,onOpen:n,openTab:W=>i(W)}),[e,t,n,i]);return Te(xo.Provider,{value:P,children:s})}var ho=Sr(function({tabs:t,activeTabId:n,isVisible:i,position:s,onTabClick:P}){return Te("div",{style:{width:i?"56px":"0px",height:"100%",overflow:"hidden",transition:"width 0.25s cubic-bezier(0.4, 0, 0.2, 1)",flexShrink:0},children:Te("div",{className:`sidebar-tabs-strip ${s}`,style:{width:"56px",height:"100%"},children:t.map(W=>{let f=n===W.id;return Te("button",{type:"button",onClick:()=>P(W.id),className:`sidebar-tab-btn${f?" active":""}`,title:W.label,"aria-pressed":f,children:W.icon},W.id)})})})});function Er({position:e,currentWidth:t,minWidth:n,maxWidth:i,onWidthChange:s,rootRef:P}){return Te("div",{className:"resizer-bar",style:{cursor:"col-resize",width:"1px",height:"100%",flexShrink:0,zIndex:20},onPointerDown:f=>{f.preventDefault();let C=f.currentTarget;C.setPointerCapture(f.pointerId);let b=f.clientX,h=t;C.classList.add("active"),document.body.classList.add("resizing-active","resizing-col-active"),P.current?.classList.add("sidebar-resizing");let l=L=>{let N=L.clientX-b,E=e==="right"?h-N:h+N;s(Math.max(n,Math.min(i,E)))},T=()=>{C.classList.remove("active"),document.body.classList.remove("resizing-active","resizing-col-active"),P.current?.classList.remove("sidebar-resizing"),C.removeEventListener("pointermove",l),C.removeEventListener("pointerup",T),C.removeEventListener("pointercancel",T)};C.addEventListener("pointermove",l),C.addEventListener("pointerup",T),C.addEventListener("pointercancel",T)}})}var Lr=kr(function({position:t="right",tabs:n,defaultWidth:i,minWidth:s=150,maxWidth:P=600,onWidthChange:W,drawerWidth:f,activeTabId:C,onActiveTabChange:b,visible:h,onVisibilityChange:l,stripVisible:T,onStripVisibilityChange:L,children:N},E){let a=C!==void 0,[R,M]=Rn(()=>i!==void 0?i:f!==void 0&&parseInt(f,10)||220),O=nn(Y=>{M(Y),W?.(Y)},[W]),[v,I]=Rn(null),z=a?C:v,[H,c]=Rn(()=>new Set),k=Tn(()=>{let Y=new Set(H);z&&Y.add(z);for(let ce of n)ce.eagerMount&&Y.add(ce.id);return Y},[H,z,n]),B=Mn(z??null);mo(()=>{B.current=z??null},[z]);let K=Mn(R);mo(()=>{K.current=R},[R]);let oe=Mn(null),G=nn(Y=>{c(Y!==null?ce=>{if(ce.has(Y))return ce;let fe=new Set(ce);return fe.add(Y),fe}:ce=>{let fe=!1,he=new Set(ce);for(let Ne of ce){let ze=n.find(ke=>ke.id===Ne);ze&&!ze.eagerMount&&!ze.preserveState&&(he.delete(Ne),fe=!0)}return fe?he:ce}),a||I(Y),b?.(Y)},[a,b,n]);Tr(E,()=>({openTab:Y=>G(Y),closeDrawer:()=>G(null),getActiveTab:()=>B.current,show:()=>l?.(!0),hide:()=>l?.(!1),toggle:()=>l?.(h===!1),showStrip:()=>L?.(!0),hideStrip:()=>L?.(!1),setWidth:Y=>O(Math.max(s,Math.min(P,Y))),getWidth:()=>K.current}),[G,h,l,L,O,s,P]);let te=nn(Y=>{G(z===Y?null:Y)},[z,G]),re=nn(()=>G(null),[G]),se=Tn(()=>({openTab:Y=>G(Y),closeDrawer:()=>G(null),getActiveTab:()=>B.current}),[G]),Z=h!==!1,_=Z&&T!==!1,y=Z&&z!=null,$=Te("div",{className:`sidebar-content-drawer ${t}`,style:{flexBasis:y?`${R}px`:"0px",flexShrink:1,flexGrow:0,minWidth:y?`${s}px`:"0px",maxWidth:y?`${P}px`:"0px",overflow:"hidden",transition:"flex-basis 0.2s cubic-bezier(0.4, 0, 0.2, 1), min-width 0.2s cubic-bezier(0.4, 0, 0.2, 1), max-width 0.2s cubic-bezier(0.4, 0, 0.2, 1)"},children:n.map(Y=>{if(!k.has(Y.id))return null;let fe=z===Y.id,he=()=>G(Y.id);return bo("div",{style:{display:fe?"flex":"none",flexDirection:"column",height:"100%",width:"100%"},children:[Te("div",{className:"sidebar-drawer-header",children:Te("span",{className:"sidebar-header-title",children:Y.label})}),Te("div",{className:"sidebar-drawer-body",children:Te(Ir,{tabId:Y.id,onClose:re,onOpen:he,setActiveTabId:G,children:Y.renderContent(Y.id,re,he)})})]},Y.id)})}),U=y?Te(Er,{position:t,currentWidth:R,minWidth:s,maxWidth:P,onWidthChange:O,rootRef:oe}):null;return Te(Po.Provider,{value:se,children:bo("div",{ref:oe,style:{display:"flex",flexDirection:"row",width:"100%",height:"100%",overflow:"hidden"},children:[t==="left"&&Te(ho,{tabs:n,activeTabId:z,isVisible:_,position:t,onTabClick:te}),t==="left"&&$,t==="left"&&U,Te("div",{style:{flex:"1 1 auto",minWidth:0,overflow:"hidden"},children:N}),t==="right"&&U,t==="right"&&$,t==="right"&&Te(ho,{tabs:n,activeTabId:z,isVisible:_,position:t,onTabClick:te})]})})});function Nr(){let e=vo(Po);return e||(console.warn("useSidebar() called outside a <Sidebar> tree. Returning no-op."),{openTab:()=>{},closeDrawer:()=>{},getActiveTab:()=>null})}function zr(){let e=vo(xo);return e||(console.warn("useSidebarTab() called outside a <Sidebar> tab renderContent tree. Returning no-op."),{tabId:"",onOpen:()=>{},onClose:()=>{},openTab:()=>{}})}import{forwardRef as Wr,useImperativeHandle as Dr,useState as wo,useRef as Co,useEffect as Ro,useLayoutEffect as Or}from"react";import{createPortal as Ar}from"react-dom";import{Fragment as $r,jsx as We,jsxs as Mo}from"react/jsx-runtime";function Fr(e,t,n=!1,i=8){switch(t){case"left":return n?{right:window.innerWidth-e.left+i,top:e.top}:{left:e.right+i,top:e.top};case"right":return n?{left:e.right+i,top:e.top}:{right:window.innerWidth-e.left+i,top:e.top};case"top":return n?{top:e.bottom+i,right:window.innerWidth-e.right}:{top:e.bottom+i,left:e.left};case"bottom":return n?{bottom:window.innerHeight-e.top+i,right:window.innerWidth-e.right}:{bottom:window.innerHeight-e.top+i,left:e.left}}}function _r({item:e,position:t,toolbar:n}){let[i,s]=wo(!1),[P,W]=wo(null),f=Co(null),C=Co(null),b=e.activeItemId!==void 0,h=b?e.activeItemId:n.getActiveInGroup(e.id),l=e.items.find(a=>!("type"in a)&&a.id===h),T=h!==null,L=l?.icon??e.defaultIcon,N=l?.label??e.label,E=()=>{e.disabled||(!i&&f.current&&W(f.current.getBoundingClientRect()),s(a=>!a))};return Or(()=>{if(!i||!C.current)return;let a=C.current,R=a.getBoundingClientRect(),M=8;R.right>window.innerWidth-M&&(a.style.left=`${Math.max(M,window.innerWidth-R.width-M)}px`,a.style.right="auto"),R.left<M&&(a.style.left=`${M}px`,a.style.right="auto"),R.bottom>window.innerHeight-M&&(a.style.top=`${Math.max(M,window.innerHeight-R.height-M)}px`,a.style.bottom="auto"),R.top<M&&(a.style.top=`${M}px`,a.style.bottom="auto")},[i]),Ro(()=>{if(!i)return;let a=R=>{let M=R.target;f.current?.contains(M)||C.current?.contains(M)||s(!1)};return document.addEventListener("mousedown",a),()=>document.removeEventListener("mousedown",a)},[i]),Ro(()=>{if(!i)return;let a=R=>{R.key==="Escape"&&s(!1)};return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[i]),Mo($r,{children:[We("button",{ref:f,type:"button",className:`toolbar-btn toolbar-btn-group${T?" active":""}`,title:N,"aria-label":N,"aria-expanded":i,"aria-haspopup":"menu",disabled:e.disabled,onClick:E,children:L}),i&&P&&Ar(We("div",{ref:C,className:`toolbar-group-flyout ${t}`,style:Fr(P,t,document.documentElement.dir==="rtl"),role:"menu",children:e.items.map((a,R)=>{if("type"in a)return We("div",{className:"toolbar-group-flyout-sep",role:"separator"},`sep-${R}`);let M=h===a.id;return Mo("button",{type:"button",className:`toolbar-group-flyout-item${M?" active":""}`,disabled:a.disabled,role:"menuitem","aria-pressed":M,onClick:()=>{b?e.onActiveItemChange?.(a.id):n.setActiveInGroup(e.id,a.id),a.onActivate?.(a.id),s(!1)},children:[We("span",{className:"toolbar-group-flyout-icon",children:a.icon}),We("span",{className:"toolbar-group-flyout-label",children:a.label}),a.shortcut&&We("span",{className:"toolbar-group-flyout-shortcut",children:a.shortcut})]},a.id)})}),document.body)]})}function Hr(e,t,n,i){switch(e.type){case"separator":return We("div",{className:"toolbar-separator",role:"separator"},`sep-${t}`);case"action":return We("button",{type:"button",className:"toolbar-btn toolbar-btn-action",title:e.label,"aria-label":e.label,disabled:e.disabled,onClick:e.onClick,children:e.icon},e.id);case"radio":{let s=n.getActiveInGroup(e.group)===e.id;return We("button",{type:"button",className:`toolbar-btn toolbar-btn-radio${s?" active":""}`,title:e.label,"aria-label":e.label,"aria-pressed":s,disabled:e.disabled,onClick:()=>{n.setActiveInGroup(e.group,e.id),e.onActivate?.(e.id)},children:e.icon},e.id)}case"toggle":{let s=n.isModifierActive(e.id);return We("button",{type:"button",className:`toolbar-btn toolbar-btn-toggle${s?" active":""}`,title:e.label,"aria-label":e.label,"aria-pressed":s,disabled:e.disabled,onClick:()=>{n.toggleModifier(e.id),e.onToggle?.(!s)},children:e.icon},e.id)}case"group":return We(_r,{item:e,position:i,toolbar:n},e.id)}}var Br=Wr(function({position:t="left",items:n,visible:i,onVisibilityChange:s,className:P,style:W},f){let C=en(),b=t==="left"||t==="right";Dr(f,()=>({show:()=>s?.(!0),hide:()=>s?.(!1),toggle:()=>s?.(i===!1)}),[i,s]);let h=i!==!1?{}:b?{width:"0px"}:{height:"0px"};return We("div",{className:`toolbar-strip ${t}${P?` ${P}`:""}`,role:"toolbar","aria-orientation":b?"vertical":"horizontal",style:{...h,...W},children:n.map((l,T)=>Hr(l,T,C,t))})});import{useCallback as Sn,useEffect as zt,useLayoutEffect as Yr,useRef as Pt,useState as In}from"react";import{createPortal as To}from"react-dom";import{jsx as ve,jsxs as Wt}from"react/jsx-runtime";var En=class{listeners=new Set;counter=0;subscribe(t){this.listeners.add(t)}unsubscribe(t){this.listeners.delete(t)}show(t,n={}){let i=n.id??`toast-${++this.counter}`;return this.emit({kind:"show",id:i,message:t,rawOpts:{...n,id:i}}),i}update(t,n,i){this.emit({kind:"update",id:t,message:n,patch:i})}dismiss(t){this.emit({kind:"dismiss",id:t})}emit(t){this.listeners.forEach(n=>n(t))}},Le=new En,Xr=Object.assign((e,t)=>Le.show(e,t),{info:(e,t)=>Le.show(e,{...t,type:"info"}),success:(e,t)=>Le.show(e,{...t,type:"success"}),warning:(e,t)=>Le.show(e,{...t,type:"warning"}),error:(e,t)=>Le.show(e,{...t,type:"error"}),dismiss:e=>Le.dismiss(e),promise:(e,t,n)=>{let i=Le.show(t.pending,{...n,type:"info",duration:0});return e.then(s=>{let P=typeof t.success=="function"?t.success(s):t.success;Le.update(i,P,{type:"success",duration:n?.duration??5e3})},s=>{let P=typeof t.error=="function"?t.error(s):t.error;Le.update(i,P,{type:"error",duration:n?.duration??5e3})}),e}}),Gr=()=>Wt("svg",{className:"dw-toast__icon",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:[ve("circle",{cx:"8",cy:"8",r:"7",stroke:"currentColor",strokeWidth:"1.5"}),ve("path",{d:"M8 5v.01M8 7.5v3.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]}),Vr=()=>Wt("svg",{className:"dw-toast__icon",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:[ve("circle",{cx:"8",cy:"8",r:"7",stroke:"currentColor",strokeWidth:"1.5"}),ve("path",{d:"M5 8l2 2 4-4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]}),Kr=()=>Wt("svg",{className:"dw-toast__icon",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:[ve("path",{d:"M8 2.5L14 13.5H2L8 2.5z",stroke:"currentColor",strokeWidth:"1.5",strokeLinejoin:"round"}),ve("path",{d:"M8 7v2.5M8 11.5v.01",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]}),Zr=()=>Wt("svg",{className:"dw-toast__icon",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:[ve("circle",{cx:"8",cy:"8",r:"7",stroke:"currentColor",strokeWidth:"1.5"}),ve("path",{d:"M5.5 5.5l5 5M10.5 5.5l-5 5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]}),qr=()=>ve("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:ve("path",{d:"M4 4l8 8M12 4l-8 8",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})}),jr={info:ve(Gr,{}),success:ve(Vr,{}),warning:ve(Kr,{}),error:ve(Zr,{})};function Ur({id:e,message:t,options:n,exiting:i,isLeft:s,showProgress:P,pauseOnHover:W,animation:f,onDismiss:C,onExited:b}){let h=Pt(null),l=Pt(null),T=Pt(n.duration),L=Pt(0),[N,E]=In(!1),a=f==="none"?"dw-toast--visible":f==="fade"?"dw-toast--fade-entering":s?"dw-toast--entering-left":"dw-toast--entering",[R,M]=In(a);Yr(()=>{h.current&&(h.current.style.maxHeight=`${h.current.offsetHeight}px`)},[]),zt(()=>{if(f==="none")return;let c=requestAnimationFrame(()=>M("dw-toast--visible"));return()=>cancelAnimationFrame(c)},[]);let O=Sn(c=>{c<=0||(L.current=Date.now(),l.current=setTimeout(()=>C(e),c))},[e,C]);zt(()=>(l.current&&clearTimeout(l.current),T.current=n.duration,O(n.duration),()=>{l.current&&clearTimeout(l.current)}),[n.duration,O]),zt(()=>{if(!i)return;let c=h.current;if(!c||f==="none"){b(e);return}let k=K=>{K.propertyName==="max-height"&&b(e)};c.addEventListener("transitionend",k);let B=setTimeout(()=>b(e),520);return()=>{c.removeEventListener("transitionend",k),clearTimeout(B)}},[i,e,b,f]);let v=()=>{!W||n.duration===0||(l.current&&(clearTimeout(l.current),l.current=null,T.current=Math.max(0,T.current-(Date.now()-L.current))),E(!0))},I=()=>{!W||n.duration===0||(E(!1),O(T.current))},z=["dw-toast",n.type&&`dw-toast--${n.type}`,R,i&&"dw-toast--exiting",N&&"dw-toast--paused"].filter(Boolean).join(" "),H=n.icon!==void 0?n.icon:n.type?jr[n.type]:null;return Wt("div",{ref:h,role:"status","aria-live":"polite",className:z,onMouseEnter:v,onMouseLeave:I,children:[H&&H,ve("div",{className:"dw-toast__body",children:n.content!==void 0?n.content:t}),n.closable&&ve("button",{type:"button",className:"dw-toast__close",onClick:()=>C(e),"aria-label":"Close notification",children:ve(qr,{})}),P&&n.duration>0&&ve("div",{className:"dw-toast__progress",style:{animationDuration:`${n.duration}ms`}})]})}function kn(e,t,n){return{id:e.id,type:e.type??"info",duration:e.duration??t,closable:e.closable??n,icon:e.icon,content:e.content,onClose:e.onClose}}function Jr({position:e="top-right",maxVisible:t=3,defaultDuration:n=5e3,defaultClosable:i=!0,pauseOnHover:s=!0,animation:P="slide",newestOnTop:W=!1,progressBar:f=!1,width:C=320,adapter:b}){let[h,l]=In([]),T=Pt([]),L=Pt(h);L.current=h;let N=Sn(O=>{l(v=>v.map(I=>I.id===O?{...I,exiting:!0}:I)),L.current.find(v=>v.id===O)?.options.onClose?.()},[]),E=Sn(O=>{let v=T.current.shift()??null;l(I=>{let z=I.filter(c=>c.id!==O);if(!v)return z;let H=kn(v.rawOpts,n,i);return[...z,{id:v.id,message:v.message,options:H,exiting:!1}]})},[n,i]);if(zt(()=>{if(b)return;let O=v=>{if(v.kind==="show"){let I=kn(v.rawOpts,n,i),z={id:v.id,message:v.message,options:I,exiting:!1},H={id:v.id,message:v.message,rawOpts:v.rawOpts};l(c=>c.find(K=>K.id===v.id)?c.map(K=>K.id===v.id?{...K,message:v.message,options:I}:K):c.filter(K=>!K.exiting).length<t?[...c,z]:(T.current.some(K=>K.id===H.id)||T.current.push(H),c))}else v.kind==="update"?(l(I=>I.map(z=>{if(z.id!==v.id)return z;let H={...z.options,...v.patch,id:z.id};return{...z,message:v.message,options:H}})),T.current=T.current.map(I=>I.id!==v.id?I:{...I,message:v.message,rawOpts:{...I.rawOpts,...v.patch}})):v.kind==="dismiss"&&(v.id===void 0?(l(I=>I.map(z=>({...z,exiting:!0}))),T.current=[]):L.current.some(z=>z.id===v.id)?N(v.id):T.current=T.current.filter(z=>z.id!==v.id))};return Le.subscribe(O),()=>Le.unsubscribe(O)},[b,t,n,i,N]),zt(()=>{if(!b)return;let O=v=>{if(v.kind==="show"){let I=kn(v.rawOpts,n,i);b.show(v.id,v.message,I)}else v.kind==="update"?b.update(v.id,v.message,v.patch):v.kind==="dismiss"&&b.dismiss(v.id)};return Le.subscribe(O),()=>Le.unsubscribe(O)},[b,n,i]),b){if(!b.Container)return null;let O=b.Container;return To(ve(O,{position:e}),document.body)}let a=e.endsWith("left"),R="";W===!0&&(R="dw-toast-container--newest-top"),W===!1&&(R="dw-toast-container--newest-bottom");let M=["dw-toast-container",`dw-toast-container--${e}`,R].filter(Boolean).join(" ");return To(ve("div",{className:M,style:{width:C},"aria-label":"Notifications","aria-live":"polite",children:h.map(O=>ve(Ur,{id:O.id,message:O.message,options:O.options,exiting:O.exiting,isLeft:a,showProgress:f,pauseOnHover:s,animation:P,onDismiss:N,onExited:E},O.id))}),document.body)}import Qr,{useState as xe,useContext as on,createContext as Nn,useRef as Ie,useLayoutEffect as Io,useCallback as Be,useMemo as xt,useEffect as ei}from"react";import{createPortal as ti}from"react-dom";import{Fragment as Wo,jsx as ee,jsxs as Ge}from"react/jsx-runtime";var ni=["top-left","top-right","bottom-left","bottom-right"],Eo=Nn(null),Lo=Nn(null),No=Nn(null),Je=80;function oi(e,t,n){let i=e.getBoundingClientRect(),s=t-i.left,P=n-i.top;return s<Je&&P<Je?"top-left":s>i.width-Je&&P<Je?"top-right":s<Je&&P>i.height-Je?"bottom-left":s>i.width-Je&&P>i.height-Je?"bottom-right":null}function ri(e){return e==="top-left"?"top-right":e==="top-right"?"top-left":e==="bottom-left"?"bottom-right":"bottom-left"}function ii({children:e,className:t,style:n}){let[i,s]=xe({}),[P,W]=xe({}),[f,C]=xe({"top-left":[],"top-right":[],"bottom-left":[],"bottom-right":[]}),[b,h]=xe({}),[l,T]=xe(null),[L,N]=xe(null),[E,a]=xe(null),[R,M]=xe(()=>new Map),O=Ie(100),v=Ie(null),I=Be((Z,_)=>(s(y=>({...y,[Z]:_})),()=>s(y=>{let $={...y};return delete $[Z],$})),[]),z=Be(Z=>{O.current+=1;let _=O.current;W(y=>({...y,[Z]:_})),a(Z)},[]),H=Be((Z,_)=>{C(y=>{let $={"top-left":y["top-left"].filter(U=>U!==Z),"top-right":y["top-right"].filter(U=>U!==Z),"bottom-left":y["bottom-left"].filter(U=>U!==Z),"bottom-right":y["bottom-right"].filter(U=>U!==Z)};return $[_]=[...$[_],Z],$})},[]),c=Be(Z=>{C(_=>({"top-left":_["top-left"].filter(y=>y!==Z),"top-right":_["top-right"].filter(y=>y!==Z),"bottom-left":_["bottom-left"].filter(y=>y!==Z),"bottom-right":_["bottom-right"].filter(y=>y!==Z)}))},[]),k=Be((Z,_)=>{h(y=>y[Z]===_?y:{...y,[Z]:_})},[]),B=Be((Z,_)=>{M(y=>{let $=new Map(y);return $.set(Z,_),$})},[]),K=Be(Z=>{M(_=>{let y=new Map(_);return y.delete(Z),y})},[]),oe=Be(()=>{M(new Map)},[]),G=xt(()=>Array.from(R.keys()),[R]),te=xt(()=>({registerToolbar:I,insetTop:i.top??0,insetBottom:i.bottom??0}),[I,i]),re=xt(()=>({managedWindowIds:G,openManaged:B,closeManaged:K,closeAllManaged:oe}),[G,B,K,oe]),se=xt(()=>({topId:E,zOrders:P,focusWindow:z,containerRef:v,stacks:f,dockedSizes:b,dockWindow:H,undockWindow:c,reportDockedSize:k,draggingId:l,setDraggingId:T,hoveredZone:L,setHoveredZone:N,insetTop:i.top??0,insetBottom:i.bottom??0}),[E,P,z,f,b,H,c,k,l,L,i]);return ee(Eo.Provider,{value:te,children:ee(Lo.Provider,{value:re,children:ee(No.Provider,{value:se,children:Ge("div",{ref:v,className:`dw-panel-overlay-root${l!==null?" dragging-active":""}${t?" "+t:""}`,style:n,children:[e,l!==null&&ee(si,{hoveredZone:L}),Array.from(R.entries()).map(([Z,_])=>ee(zo,{id:Z,title:_.title,icon:_.icon,open:!0,onClose:()=>K(Z),defaultAnchor:_.anchor??"top-right",defaultWidth:_.width??320,defaultHeight:_.height??240,children:_.content},Z))]})})})})}function si({hoveredZone:e}){return ee(Wo,{children:ni.map(t=>ee("div",{className:`dw-panel-float-dropzone dw-panel-float-dropzone--${t}${e===t?" dw-panel-float-dropzone--hovered":""}`,"aria-hidden":"true"},t))})}function ai({position:e,variant:t="transparent",buttonVariant:n="ghost",buttonSize:i,style:s,className:P,children:W}){let f=on(Eo),C=Ie(null),b=Ie(null);Io(()=>{let N=C.current;if(!N||!f)return;let E=e==="top"||e==="bottom"?N.offsetHeight:N.offsetWidth;return b.current?.(),b.current=f.registerToolbar(e,E),()=>{b.current?.(),b.current=null}},[e,f?.registerToolbar]);let h={position:"absolute",zIndex:5,pointerEvents:"none",boxSizing:"border-box"};e==="top"?(h.top=0,h.left=0,h.right=0):e==="bottom"?(h.bottom=0,h.left=0,h.right=0):e==="left"?(h.insetInlineStart=0,h.top=f?.insetTop??0,h.bottom=f?.insetBottom??0):(h.insetInlineEnd=0,h.top=f?.insetTop??0,h.bottom=f?.insetBottom??0);let T=e==="left"||e==="right"?{...(f?.insetTop??0)>0?{paddingTop:0}:{},...(f?.insetBottom??0)>0?{paddingBottom:0}:{}}:{},L=i!=null?{"--panel-toolbar-btn-size":`${i}px`}:{};return ee("div",{ref:C,className:`dw-panel-toolbar dw-panel-toolbar--${e}${P?" "+P:""}`,"data-variant":t,"data-btn-variant":n,style:{...h,...T,...L,...s},children:W})}function li({icon:e,onClick:t,disabled:n,title:i,variant:s}){return ee("button",{type:"button",className:"dw-panel-toolbar-btn",onClick:t,disabled:n,title:i,"aria-label":i,...s?{"data-variant":s}:{},children:e})}function ci({icon:e,active:t,onToggle:n,disabled:i,title:s,variant:P}){return ee("button",{type:"button",className:`dw-panel-toolbar-btn${t?" dw-panel-toolbar-btn--active":""}`,onClick:n,disabled:i,title:s,"aria-label":s,"aria-pressed":t,...P?{"data-variant":P}:{},children:e})}function di(){return ee("span",{className:"dw-panel-toolbar__sep","aria-hidden":"true"})}function ui(){return ee("span",{className:"dw-panel-toolbar__spacer","aria-hidden":"true"})}function pi({children:e}){return ee("span",{className:"dw-panel-toolbar__item",children:e})}function gi({children:e}){return ee("div",{className:"dw-panel-toolbar__center",children:e})}function fi({placeholder:e="Search\u2026",onSearch:t,onSelect:n}){let[i,s]=xe(!1),[P,W]=xe(""),[f,C]=xe([]),[b,h]=xe(null),l=Ie(null),T=Ie(null),L=Ie(null),N=Ie(null),E=()=>{s(!0),setTimeout(()=>T.current?.focus(),0)},a=()=>{s(!1),W(""),C([]),h(null),L.current?.abort(),N.current&&clearTimeout(N.current)},R=H=>{let c=H.target.value;if(W(c),L.current?.abort(),N.current&&clearTimeout(N.current),!c.trim()){C([]),h(null);return}N.current=setTimeout(async()=>{let k=new AbortController;L.current=k;try{let B=await t(c,k.signal);if(!k.signal.aborted){C(B);let K=l.current;if(K&&B.length>0){let oe=K.getBoundingClientRect(),G=Math.max(oe.width,240),te=oe.left;te+G>window.innerWidth-8&&(te=window.innerWidth-G-8),h({top:oe.bottom+4,left:te,width:G})}else h(null)}}catch{}},300)},M=H=>{n(H),a()},O=H=>{l.current?.contains(H.relatedTarget)||a()},v=H=>{H.key==="Escape"&&a()},I=xt(()=>{let H={};for(let c of f){let k=c.group??"";H[k]||(H[k]=[]),H[k].push(c)}return H},[f]),z=Ge("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[ee("circle",{cx:"6.5",cy:"6.5",r:"4.5"}),ee("line",{x1:"10",y1:"10",x2:"14",y2:"14"})]});return i?Ge("div",{ref:l,className:"dw-panel-toolbar-search dw-panel-toolbar-search--open",onBlur:O,children:[ee("button",{type:"button",className:"dw-panel-toolbar-btn",onClick:a,"aria-label":"Close search",title:"Close search",children:z}),ee("input",{ref:T,className:"dw-panel-toolbar-search__input",type:"text",value:P,onChange:R,onKeyDown:v,placeholder:e,autoComplete:"off"}),b&&f.length>0&&ti(ee("div",{className:"dw-panel-toolbar-search__dropdown",style:{position:"fixed",top:b.top,left:b.left,width:b.width,zIndex:9502},onMouseDown:H=>H.preventDefault(),children:Object.entries(I).map(([H,c])=>Ge(Qr.Fragment,{children:[H&&ee("div",{className:"dw-panel-toolbar-search__group",children:H}),c.map(k=>Ge("button",{type:"button",className:"dw-panel-toolbar-search__item",onClick:()=>M(k),children:[k.icon&&ee("span",{className:"dw-panel-toolbar-search__item-icon",children:k.icon}),ee("span",{className:"dw-panel-toolbar-search__item-label",children:k.label}),k.description&&ee("span",{className:"dw-panel-toolbar-search__item-desc",children:k.description})]},k.id))]},H||"__default__"))}),document.body)]}):ee("div",{ref:l,className:"dw-panel-toolbar-search",children:ee("button",{type:"button",className:"dw-panel-toolbar-btn",onClick:E,title:"Search","aria-label":"Search",children:z})})}function zo(e){let t=on(No);return e.open?ee(hi,{ctx:t,...e},e.id):null}var ko=120,So=60,Ln=8,mi=8;function hi({id:e,title:t,icon:n,defaultAnchor:i,defaultWidth:s,defaultHeight:P,children:W,ctx:f,onClose:C}){let b=on(ft)?.isRtl??!1,[h,l]=xe("docked"),[T,L]=xe(i),[N,E]=xe(null),[a,R]=xe({w:s,h:P}),M=Ie(null),O=Ie(h);O.current=h;let v=Ie(N);v.current=N;let I=Ie(a);I.current=a;let z=Ie(null),H=Ie(null);Io(()=>(f?.dockWindow(e,i),()=>{f?.undockWindow(e)}),[]),ei(()=>{f?.reportDockedSize(e,a.h)},[a.h]);let c=f?.zOrders[e]??101,k=!f||f.topId===e,B=()=>{let _=M.current?.offsetParent;return{cw:_?.clientWidth??9999,ch:_?.clientHeight??9999}},K=()=>{f?.focusWindow(e)},oe=_=>{if(_.button!==0)return;_.preventDefault();let y,$;if(O.current==="docked"){let U=M.current,Y=f?.containerRef?.current;if(U&&Y){let ce=U.getBoundingClientRect(),fe=Y.getBoundingClientRect();y=ce.left-fe.left,$=ce.top-fe.top}else y=Ln,$=f?.insetTop??0;f?.undockWindow(e),l("free"),E({x:y,y:$})}else y=v.current?.x??0,$=v.current?.y??0;z.current={mouseX:_.clientX,mouseY:_.clientY,posX:y,posY:$,hasDragged:!1},M.current?.setPointerCapture(_.pointerId)},G=_=>y=>{if(y.button!==0)return;y.preventDefault(),y.stopPropagation();let $=0,U=0;if(O.current==="free")$=v.current?.x??0,U=v.current?.y??0;else{let Y=M.current,ce=Y?.offsetParent;if(Y&&ce){let fe=Y.getBoundingClientRect(),he=ce.getBoundingClientRect();$=fe.left-he.left,U=fe.top-he.top}}H.current={dir:_,mouseX:y.clientX,mouseY:y.clientY,startX:$,startY:U,w:I.current.w,h:I.current.h},M.current?.setPointerCapture(y.pointerId)},te=_=>{if(z.current){let y=z.current;if(!y.hasDragged){if(Math.abs(_.clientX-y.mouseX)+Math.abs(_.clientY-y.mouseY)<4)return;y.hasDragged=!0,f?.setDraggingId(e)}let{cw:$,ch:U}=B(),Y=Math.max(0,Math.min(y.posX+_.clientX-y.mouseX,$-I.current.w)),ce=Math.max(0,Math.min(y.posY+_.clientY-y.mouseY,U-I.current.h));E({x:Y,y:ce});let fe=f?.containerRef?.current;if(fe){let he=oi(fe,_.clientX,_.clientY);f?.setHoveredZone(he&&b?ri(he):he)}}else if(H.current){let y=H.current,$=_.clientX-y.mouseX,U=_.clientY-y.mouseY,{cw:Y,ch:ce}=B(),fe=y.startX,he=y.startY,Ne=y.w,ze=y.h;if(y.dir.includes("e")&&(Ne=Math.max(ko,Math.min(y.w+$,Y-y.startX))),y.dir.includes("s")&&(ze=Math.max(So,Math.min(y.h+U,ce-y.startY))),y.dir.includes("n")){let ke=Math.max(-y.startY,Math.min(U,y.h-So));ze=y.h-ke,he=y.startY+ke}if(y.dir.includes("w")){let ke=Math.max(-y.startX,Math.min($,y.w-ko));Ne=y.w-ke,fe=y.startX+ke}R({w:Ne,h:ze}),O.current==="free"&&E({x:fe,y:he})}},re=()=>{if(z.current){let _=f?.hoveredZone;_&&(f?.dockWindow(e,_),L(_),l("docked"),E(null)),f?.setHoveredZone(null),f?.setDraggingId(null)}z.current=null,H.current=null},se;if(h==="docked"&&f){let _=f.stacks[T]??[],y=_.indexOf(e),$=0;for(let U=0;U<y;U++)$+=(f.dockedSizes[_[U]]??P)+mi;se={width:a.w,height:a.h,zIndex:c,transition:"top 0.2s ease, bottom 0.2s ease",opacity:y===-1?0:void 0,pointerEvents:y===-1?"none":void 0},T.endsWith("-right")?se[b?"left":"right"]=Ln:se[b?"right":"left"]=Ln,T.startsWith("top-")?se.top=f.insetTop+$:se.bottom=f.insetBottom+$}else se={left:N?.x??0,top:N?.y??0,width:a.w,height:a.h,zIndex:c};return Ge("div",{ref:M,className:`dw-panel-float${k?" dw-panel-float--active":""}`,style:se,onPointerDown:K,onPointerMove:te,onPointerUp:re,children:[Ge("div",{className:"dw-panel-float__header",onPointerDown:oe,children:[n&&ee("span",{className:"dw-panel-float__icon",children:n}),ee("span",{className:"dw-panel-float__title",children:t}),ee("button",{type:"button",className:"dw-panel-float__close",onClick:C,onPointerDown:_=>_.stopPropagation(),title:"Close","aria-label":"Close",children:Ge("svg",{width:"8",height:"8",viewBox:"0 0 10 10",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",children:[ee("line",{x1:"1",y1:"1",x2:"9",y2:"9"}),ee("line",{x1:"9",y1:"1",x2:"1",y2:"9"})]})})]}),ee("div",{className:"dw-panel-float__body",children:W}),h==="free"&&Ge(Wo,{children:[ee("div",{className:"resize-handle resize-n",onPointerDown:G("n")}),ee("div",{className:"resize-handle resize-ne",onPointerDown:G("ne")}),ee("div",{className:"resize-handle resize-nw",onPointerDown:G("nw")})]}),ee("div",{className:"resize-handle resize-e",onPointerDown:G("e")}),ee("div",{className:"resize-handle resize-se",onPointerDown:G("se")}),ee("div",{className:"resize-handle resize-s",onPointerDown:G("s")}),ee("div",{className:"resize-handle resize-sw",onPointerDown:G("sw")}),ee("div",{className:"resize-handle resize-w",onPointerDown:G("w")})]})}function bi(){let[e,t]=xe(!1),n=Be(()=>{t(!0)},[]),i=Be(()=>{t(!1)},[]);return{isOpen:e,open:n,close:i}}var vi=[];function yi(){let e=on(Lo),t=e?.managedWindowIds??vi;return xt(()=>({open:(n,i)=>e?.openManaged(n,i),close:n=>e?.closeManaged(n),closeAll:()=>e?.closeAllManaged(),isOpen:n=>t.includes(n),openIds:t}),[e,t])}export{at as ConfirmationForm,pn as ContextMenu,gn as DefaultContextMenuAdapter,ur as DockableDesktopProvider,an as FormContainerContext,nt as FormContainerProvider,wr as LeftPanelRenderer,br as ModalStackRenderer,zo as PanelFloatingWindow,ii as PanelOverlayRoot,mn as PanelProvider,Gt as PanelRegistry,gt as PanelRegistryClass,ai as PanelToolbar,pi as PanelToolbarItem,di as PanelToolbarSeparator,Cr as RightPanelRenderer,Rr as SidePanelRenderer,Lr as Sidebar,Jr as ToastContainer,Br as Toolbar,li as ToolbarButton,gi as ToolbarCenter,Qt as ToolbarProvider,fi as ToolbarSearchInput,ui as ToolbarSpacer,ci as ToolbarToggle,sr as WindowManager,cn as WindowManagerProvider,Pn as WorkspaceClient,kt as defaultPredefinedMessages,me as formatLabel,Xr as toast,Tt as useFormContainer,De as useFormatMessage,it as usePanelActions,$o as usePanelContext,Yo as usePanelContextMenu,bi as usePanelFloatingWindow,yi as usePanelFloatingWindowManager,Bn as usePanelId,Ue as usePanelState,He as usePredefinedMessages,It as useRegistry,Nr as useSidebar,zr as useSidebarTab,je as useStyleClasses,en as useToolbar,Et as useWindowManagerActions,_e as useWindowManagerState};
25
24
  //# sourceMappingURL=index.js.map