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