react-dockable-desktop 6.1.0 → 6.2.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 +1 -1
- package/dist/index.cjs +4 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -2
- package/dist/index.d.ts +5 -2
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import On,{useState as rt,useRef as Ne,useEffect as Se,useCallback as Wn,useContext as So}from"react";import{createPortal as To}from"react-dom";import{createContext as Rt,useContext as dt,useState as mr,useRef as Ze,useMemo as sn,useCallback as ne,useEffect as Ot,useSyncExternalStore as hr}from"react";import{createContext as dr,useContext as cr,useSyncExternalStore as ur}from"react";var pr={requestClose:()=>{console.warn("FormContainerContract: requestClose called but no container is present")},setDirty:()=>{},onCloseRequested:()=>()=>{},registerStateProvider:()=>()=>{},setTitle:()=>{},setIcon:()=>{},containerType:"standalone",instanceId:"standalone",onClose:()=>()=>{},onMinimize:()=>()=>{},onRestore:()=>()=>{},onResize:()=>()=>{},requestMinimize:()=>{},getDimensions:()=>null,onActivate:()=>()=>{},onDeactivate:()=>()=>{},onContainerTypeChange:()=>()=>{}},wn=dr(pr),Ct=wn.Provider,Dt=()=>cr(wn),gr=()=>{let{onResize:e,getDimensions:t}=Dt();return ur(n=>e?e(()=>n()):()=>{},()=>t?t():null)};var Wt=class{registry=new Map;register(t,n,o){this.registry.set(t,{Component:n,defaultOptions:o})}get(t){return this.registry.get(t)}getRegisteredIds(){return Array.from(this.registry.keys())}},rn=new Wt;var Vt={floatWindow:{id:"dockable-desktop-floatWindow",defaultMessage:"Float Window"},minimizePanel:{id:"dockable-desktop-minimizePanel",defaultMessage:"Minimize Panel"},closeTab:{id:"dockable-desktop-closeTab",defaultMessage:"Close Tab"},restorePanel:{id:"dockable-desktop-restorePanel",defaultMessage:"Restore Panel"},maximizePanel:{id:"dockable-desktop-maximizePanel",defaultMessage:"Maximize Panel"},closePanel:{id:"dockable-desktop-closePanel",defaultMessage:"Close Panel"},dockWindow:{id:"dockable-desktop-dockWindow",defaultMessage:"Dock Window"},minimize:{id:"dockable-desktop-minimize",defaultMessage:"Minimize"},maximize:{id:"dockable-desktop-maximize",defaultMessage:"Maximize"},restoreSize:{id:"dockable-desktop-restoreSize",defaultMessage:"Restore Size"},close:{id:"dockable-desktop-close",defaultMessage:"Close"},closeEmptyGroup:{id:"dockable-desktop-closeEmptyGroup",defaultMessage:"Close empty split group"},unsavedChangesTitle:{id:"dockable-desktop-unsavedChangesTitle",defaultMessage:"Unsaved Changes"},unsavedChangesMessage:{id:"dockable-desktop-unsavedChangesMessage",defaultMessage:'"{title}" has unsaved changes. Do you want to discard your changes and close?'},discardChanges:{id:"dockable-desktop-discardChanges",defaultMessage:"Discard Changes"},cancel:{id:"dockable-desktop-cancel",defaultMessage:"Cancel"},yes:{id:"dockable-desktop-yes",defaultMessage:"Yes"},no:{id:"dockable-desktop-no",defaultMessage:"No"},ok:{id:"dockable-desktop-ok",defaultMessage:"OK"},closePanelTooltip:{id:"dockable-desktop-closePanelTooltip",defaultMessage:"Close panel"},closeTooltip:{id:"dockable-desktop-closeTooltip",defaultMessage:"Close"}};import{isValidElement as fr}from"react";function At(e){if(e===null)return!0;if(e===void 0)return!1;let t=typeof e;if(t==="string"||t==="number"||t==="boolean")return!0;if(t==="function"||t==="symbol"||t==="bigint")return!1;if(e instanceof Date)return!0;if(fr(e))return!1;if(Array.isArray(e))return e.every(At);let n=Object.getPrototypeOf(e);return n!==Object.prototype&&n!==null?!1:Object.values(e).every(At)}import{jsx as wt}from"react/jsx-runtime";var Ft=Rt(null),an=Rt(null),ro=Rt(null),io=Rt(null),so=Rt(Vt),ao=Rt({}),pt=()=>dt(ao),lo=Rt(rn),Kt=()=>dt(lo),Rn=class{listeners={};subscribe(t,n){return this.listeners[t]||(this.listeners[t]=[]),this.listeners[t].push(n),()=>{this.listeners[t]=this.listeners[t].filter(o=>o!==n)}}publish(t,n){this.listeners[t]&&this.listeners[t].forEach(o=>o(n))}},br={type:"leaf",id:"group-default",panels:[],activePanelId:null};function co(e,t){let n=t.panels[e];if(!n||n.state==="minimized")return!1;if(t.floating.some(d=>d.id===e))return!0;let o=d=>d.type==="leaf"?d.activePanelId===e:d.children.some(o);return t.gridRoot?o(t.gridRoot):!1}function Mn(e){let t=s=>s!==null&&!!e.panels[s]&&e.panels[s].state!=="minimized",n=s=>{if(s.type==="leaf")return t(s.activePanelId)?s.activePanelId:null;for(let L of s.children){let M=n(L);if(M)return M}return null},o=e.gridRoot?n(e.gridRoot):null;if(o)return o;let d=null;for(let s of e.floating)t(s.id)&&(!d||s.z>d.z)&&(d=s);return d?.id??null}function uo(e){if(!e||!e.gridRoot||!Array.isArray(e.floating)||!Array.isArray(e.minimized)||!e.panels)return null;let t=e.floating.map(s=>{if("stickyRight"in s||"stickyBottom"in s){let L=s.stickyRight&&s.stickyBottom?"bottom-right":s.stickyRight?"top-right":s.stickyBottom?"bottom-left":null,{stickyRight:M,stickyBottom:x,...v}=s;return{...v,anchor:L}}return s}),n={gridRoot:e.gridRoot,floating:t,panels:e.panels},o=typeof e.activePanelId=="string"?e.activePanelId:null,d=null;return o!==null&&(co(o,n)?d=o:process.env.NODE_ENV==="development"&&console.warn(`[react-dockable-desktop] Ignoring the saved layout's activePanelId ("${o}") \u2014 it doesn't name a currently visible panel (it may have been closed, minimized, or excluded from the snapshot as non-serializable). Falling back to the selected tab of the first leaf in the grid.`)),d===null&&(d=Mn(n)),{gridRoot:e.gridRoot,floating:t,minimized:e.minimized,panels:e.panels,activePanelId:d}}function vr(e){if(e)try{let t=uo(JSON.parse(e));if(t)return t}catch{}return{gridRoot:br,floating:[],minimized:[],panels:{},activePanelId:null}}var Sn=({children:e,client:t,formatMessage:n,predefinedMessages:o,dir:d,modalClass:s,modalBodyClass:L,sidePanelClass:M,sidePanelBodyClass:x,windowClass:v,windowBodyClass:C,zIndexBase:u})=>{let I=Ze(t?.registry??rn).current,k=t?.config.formatMessage??n,E=t?.config.predefinedMessages??o,_=t?.config.dir??d,p=t?.config.zIndexBase??u??1e3,[w,R]=mr(()=>({...vr(t?.initialState??null),draggedPanelId:null,dir:_||"ltr",isRtl:_==="rtl",splitRatio:Math.min(.9,Math.max(.1,t?.config.defaultSplitRatio??.5)),edgeSplitRatio:Math.min(.9,Math.max(.1,t?.config.defaultEdgeSplitRatio??.2))})),W=Ze(w);W.current=w;let m=Ze(new Set);Ot(()=>{m.current.forEach(i=>i())},[w]);let P=ne(()=>W.current,[]),F=ne(i=>(m.current.add(i),()=>m.current.delete(i)),[]),O=Ze({}),l=Ze({}),z=sn(()=>({...Vt,...E}),[E]),H=Ze(new Rn),B=Ze(p);Ot(()=>(document.documentElement.style.setProperty("--rdd-z-base",String(p)),()=>{document.documentElement.style.removeProperty("--rdd-z-base")}),[p]);let J=ne((i,b)=>H.current.subscribe(i,b),[]),Q=ne((i,b)=>{H.current.publish(i,b)},[]),Z=ne((i,b)=>{let c=typeof i.x=="string"?parseFloat(i.x):i.x,a=typeof i.y=="string"?parseFloat(i.y):i.y,A=typeof i.width=="string"?parseFloat(i.width):i.width,r=typeof i.height=="string"?parseFloat(i.height):i.height;isNaN(c)&&(c=300),isNaN(a)&&(a=150),isNaN(A)&&(A=450),isNaN(r)&&(r=350);let y=T=>b.some(N=>{let D=typeof N.x=="string"?parseFloat(N.x):N.x,K=typeof N.y=="string"?parseFloat(N.y):N.y;return!N.maximized&&Math.abs(D-T.x)<20&&Math.abs(K-T.y)<20}),g=0;for(;y({x:c,y:a})&&g<10;)c+=30,a+=30,g++;let h=Math.max(100,window.innerWidth||1024),f=Math.max(100,window.innerHeight||768);return(c+A>h||a+r>f)&&(c=100+g%5*30,a=100+g%5*30),c=Math.max(0,Math.min(c,h-100)),a=Math.max(0,Math.min(a,f-40)),{x:c,y:a,width:A,height:r}},[]),me=ne(i=>{R(b=>{let c=b.panels[i];if(!c)return b;if(c.state==="floating"){let a=b.floating.find(r=>r.id===i);if(!a)return b;let A=!b.floating.some(r=>r.z>a.z);return A&&b.activePanelId===i?b:(A||(B.current+=1),{...b,floating:b.floating.map(r=>r.id===i?{...r,z:A?a.z:B.current}:r),activePanelId:i})}else if(c.state==="docked"){if(b.activePanelId===i)return b;let a=A=>A.type==="leaf"?A.panels.includes(i)?{...A,activePanelId:i}:A:{...A,children:A.children.map(a)};return{...b,gridRoot:a(b.gridRoot),activePanelId:i}}return b.activePanelId===i?b:{...b,activePanelId:i}})},[]),le=(i,b)=>{if(i.type==="leaf"){let c=i.panels.indexOf(b);if(c===-1)return i;let a=i.panels.filter(y=>y!==b),A=i.activePanelId===b?a[c]||a[c-1]||a[0]||null:i.activePanelId,r={...i,panels:a,activePanelId:A};return a.length===0&&!i.keepOnEmpty?null:r}else{let c=i.children.map(r=>le(r,b)).filter(r=>r!==null);if(c.length===0)return null;if(c.length===1)return c[0];let a=i.sizes.slice(0,c.length),A=a.reduce((r,y)=>r+y,0);return{...i,children:c,sizes:a.map(r=>r/A)}}},Y=(i,b,c)=>{if(i.type==="leaf"){if(i.id===b){let a=i.panels.includes(c)?i.panels:[...i.panels,c];return{...i,panels:a,activePanelId:c}}return i}else return{...i,children:i.children.map(a=>Y(a,b,c))}},j=i=>{if(i.type==="leaf")return i.id;for(let b of i.children){let c=j(b);if(c)return c}return null},X=ne((i,b,c)=>{let a=i;if(c?.dedupeKey!==void 0){let f=Object.values(W.current.panels).find(T=>T.component===b&&T.dedupeKey===c.dedupeKey);f&&(a=f.id)}let A=!(a in W.current.panels),r=a!==i,y=c?.focus!==!1,h=c?.props!==void 0?At(c.props):!0;R(f=>{let T=f.panels[a],N=I.get(b),D=c?.title||c?.title||N?.defaultOptions?.title||a,K=c?.initialTarget||N?.defaultOptions?.initialTarget||"docked",te=N?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},V=y?a:f.activePanelId;if(T)if(T.state==="minimized"){let de=f.minimized.filter(ge=>ge.id!==a);if(K==="floating"||!f.gridRoot){B.current+=1;let ge=Z(te,f.floating);return{...f,minimized:de,floating:[...f.floating,{...ge,id:a,z:B.current}],panels:{...f.panels,[a]:{...T,state:"floating"}},activePanelId:V}}else{let ge=j(f.gridRoot)||"group-default";return{...f,minimized:de,gridRoot:Y(f.gridRoot,ge,a),panels:{...f.panels,[a]:{...T,state:"docked"}},activePanelId:V}}}else{if(T.state==="floating")return y&&me(a),f;{let de=ge=>ge.type==="leaf"?ge.panels.includes(a)?{...ge,activePanelId:a}:ge:{...ge,children:ge.children.map(de)};return{...f,gridRoot:de(f.gridRoot),activePanelId:V}}}let pe={id:a,title:D,component:b,state:K==="tabbed"?"docked":K,props:c?.props,serializable:h,dedupeKey:c?.dedupeKey},ie={...f.panels,[a]:pe};if(K==="floating"){B.current+=1;let de=Z(te,f.floating),ge=c?.anchor??N?.defaultOptions?.defaultAnchor??null;return{...f,floating:[...f.floating,{...de,id:a,z:B.current,anchor:ge}],panels:ie,activePanelId:V}}else{let de=j(f.gridRoot)||"group-default";return{...f,gridRoot:Y(f.gridRoot,de,a),panels:ie,activePanelId:V}}}),A&&H.current.publish("panel:opened",{id:a,component:b}),(A||r)&&H.current.publish("layout:changed",{})},[Z,me]),G=ne(i=>{let b=i in W.current.panels;R(c=>{let a=c.panels[i];if(!a||I.get(a.component)?.defaultOptions?.canClose===!1)return c;delete O.current[i],delete l.current[i];let r={...c.panels};delete r[i];let y=le(c.gridRoot,i)||{type:"leaf",id:"group-default",panels:[],activePanelId:null},g=c.floating.filter(f=>f.id!==i),h=c.activePanelId===i?Mn({gridRoot:y,floating:g,panels:r}):c.activePanelId;return{...c,gridRoot:y,floating:g,minimized:c.minimized.filter(f=>f.id!==i),panels:r,activePanelId:h}}),b&&(H.current.publish("panel:closed",{id:i}),H.current.publish("layout:changed",{}))},[]),re=ne((i,b)=>{O.current[i]=b},[]),ue=ne(i=>{delete O.current[i]},[]),Oe=ne((i,b)=>{l.current[i]=b},[]),U=ne(i=>{delete l.current[i]},[]),Fe=ne((i,b,c)=>{R(a=>{let A=a.panels[i];return A?{...a,panels:{...a.panels,[i]:{...A,dirty:b,dirtyOptions:c}}}:a})},[]),$e=ne((i,b)=>{R(c=>{let a=c.panels[i];return a?{...c,panels:{...c.panels,[i]:{...a,title:b}}}:c})},[]),Be=ne(async(i,b)=>{if(b?.force){G(i);return}let c=O.current[i];if(c&&!await c())return;let a=W.current.panels[i];if(a?.dirty)if(b?.onConfirm){if(!await b.onConfirm(a.dirtyOptions))return}else return;G(i)},[G]),Ge=ne(i=>{let b=W.current.panels[i]?.state!=="minimized"&&i in W.current.panels;R(c=>{let a=c.panels[i];if(!a||a.state==="minimized"||I.get(a.component)?.defaultOptions?.canMinimize===!1)return c;let r,y;if(a.state==="floating"){let N=c.floating.find(D=>D.id===i);N&&(r={x:Number(N.x),y:Number(N.y),width:Number(N.width),height:Number(N.height),anchor:N.anchor??null})}else if(a.state==="docked"){let N=D=>{if(D.type==="leaf")return D.panels.includes(i)?D.id:null;for(let K of D.children){let te=N(K);if(te)return te}return null};y=N(c.gridRoot)??void 0}let g=le(c.gridRoot,i)||{type:"leaf",id:"group-default",panels:[],activePanelId:null},h=c.floating.filter(N=>N.id!==i),f={...c.panels,[i]:{...a,state:"minimized",previousState:a.state,lastFloatingRect:r,lastLeafId:y}},T=c.activePanelId===i?Mn({gridRoot:g,floating:h,panels:f}):c.activePanelId;return{...c,gridRoot:g,floating:h,minimized:[...c.minimized,{id:i,title:a.title,component:a.component}],panels:f,activePanelId:T}}),b&&(H.current.publish("panel:minimized",{id:i}),H.current.publish("layout:changed",{}))},[]),st=ne(i=>{let b=W.current.panels[i]?.state==="minimized";R(c=>{let a=c.panels[i];if(!a||a.state!=="minimized")return c;let A=c.minimized.filter(y=>y.id!==i);if((a.previousState||"docked")==="floating"){B.current+=1;let y=I.get(a.component),g=a.lastFloatingRect||y?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},h=Z(g,c.floating);return{...c,minimized:A,floating:[...c.floating,{...h,id:i,z:B.current,anchor:a.lastFloatingRect?.anchor??null}],panels:{...c.panels,[i]:{...a,state:"floating"}}}}else{let y=(T,N)=>T.type==="leaf"?T.id===N:T.children.some(D=>y(D,N)),g=a.lastLeafId&&y(c.gridRoot,a.lastLeafId),h=I.get(a.component),f=h?.defaultOptions?.canDrag!==!1;if(g)return{...c,minimized:A,gridRoot:Y(c.gridRoot,a.lastLeafId,i),panels:{...c.panels,[i]:{...a,state:"docked"}}};if(f){B.current+=1;let T=a.lastFloatingRect||h?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},N=Z(T,c.floating);return{...c,minimized:A,floating:[...c.floating,{...N,id:i,z:B.current,anchor:a.lastFloatingRect?.anchor??null}],panels:{...c.panels,[i]:{...a,state:"floating"}}}}else{let T=j(c.gridRoot)||"group-default";return{...c,minimized:A,gridRoot:Y(c.gridRoot,T,i),panels:{...c.panels,[i]:{...a,state:"docked"}}}}}}),b&&(H.current.publish("panel:restored",{id:i}),H.current.publish("layout:changed",{}))},[Z]),tt=ne((i,b,c)=>{R(a=>{let A=a.panels[i];if(!A||I.get(A.component)?.defaultOptions?.canDrag===!1)return a;let y=I.get(A.component),g=b||y?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},h=le(a.gridRoot,i);B.current+=1;let f=Z(g,a.floating);return{...a,gridRoot:h||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:[...a.floating,{...f,id:i,z:B.current,anchor:c??null}],panels:{...a.panels,[i]:{...A,state:"floating"}}}})},[Z]),nt=ne((i,b)=>{R(c=>{let a=c.panels[i];if(!a)return c;let A=c.floating.filter(g=>g.id!==i),r=le(c.gridRoot,i),y=b||j(r||c.gridRoot)||"group-default";return{...c,gridRoot:Y(r||c.gridRoot,y,i),floating:A,panels:{...c.panels,[i]:{...a,state:"docked"}}}})},[]),qe=(i,b,c,a,A)=>{if(i.type==="leaf"){if(i.id===b){let r={type:"leaf",id:`group-split-${Date.now()}-${Math.floor(Math.random()*1e3)}`,panels:[c],activePanelId:c},y=a==="left"||a==="right"?"horizontal":"vertical",g=a==="left"||a==="top"?[r,i]:[i,r],h=a==="left"||a==="top"?[A,1-A]:[1-A,A];return{type:"branch",orientation:y,sizes:h,children:g}}return i}else return{...i,children:i.children.map(r=>qe(r,b,c,a,A))}},je=ne(i=>{R(b=>({...b,draggedPanelId:i}))},[]),se=ne((i,b,c)=>{R(a=>{let A=a.panels[i];if(!A)return a;let r=a.floating.filter(h=>h.id!==i),y=le(a.gridRoot,i),g;return c==="center"?g=Y(y||a.gridRoot,b,i):g=qe(y||a.gridRoot,b,i,c,a.splitRatio),{...a,gridRoot:g,floating:r,panels:{...a.panels,[i]:{...A,state:"docked"}},draggedPanelId:null}})},[]),ee=ne((i,b)=>{R(c=>{let a=c.panels[i];if(!a)return c;let A=c.floating.filter(N=>N.id!==i),r=le(c.gridRoot,i),y={type:"leaf",id:`group-edge-${Date.now()}-${Math.floor(Math.random()*1e3)}`,panels:[i],activePanelId:i},g=b==="left"||b==="right"?"horizontal":"vertical",h=b==="left"||b==="top"?[y,r||c.gridRoot]:[r||c.gridRoot,y],f=c.edgeSplitRatio,T={type:"branch",orientation:g,sizes:b==="left"||b==="top"?[f,1-f]:[1-f,f],children:h};return{...c,gridRoot:T,floating:A,panels:{...c.panels,[i]:{...a,state:"docked"}},draggedPanelId:null}})},[]),Ee=ne((i,b,c)=>{R(a=>{let A=a.panels[i];if(!A)return a;let r=le(a.gridRoot,i),y=f=>{if(f.type==="leaf"){if(f.id===b){let T=f.panels.filter(K=>K!==i),N=Math.max(0,Math.min(c,T.length)),D=[...T];return D.splice(N,0,i),{...f,panels:D,activePanelId:i}}return f}else return{...f,children:f.children.map(y)}},g=y(r||a.gridRoot),h=a.floating.filter(f=>f.id!==i);return{...a,gridRoot:g,floating:h,panels:{...a.panels,[i]:{...A,state:"docked"}},draggedPanelId:null}})},[]),$=ne(i=>{R(b=>{let c=A=>{if(A.type==="leaf")return A.id===i&&A.canClose!==!1?null:A;{let r=A.children.map(h=>c(h)).filter(h=>h!==null);if(r.length===0)return null;if(r.length===1)return r[0];let y=A.sizes.slice(0,r.length),g=y.reduce((h,f)=>h+f,0);return{...A,children:r,sizes:y.map(h=>h/g)}}},a=c(b.gridRoot);return{...b,gridRoot:a||{type:"leaf",id:"group-default",panels:[],activePanelId:null}}})},[]),q=ne(i=>{R(b=>({...b,floating:b.floating.map(c=>c.id===i?{...c,maximized:!c.maximized}:c)}))},[]),ce=ne((i,b)=>{let c=(a,A)=>{if(a.type==="leaf")return a;if(A===i.length)return{...a,sizes:b};let r=i[A],y=a.children.map((g,h)=>h===r?c(g,A+1):g);return{...a,children:y}};R(a=>({...a,gridRoot:c(a.gridRoot,0)}))},[]),he=ne((i,b)=>{R(c=>({...c,floating:c.floating.map(a=>a.id===i?{...a,...b}:a)}))},[]),be=ne(()=>{let i=W.current.panels,b=[],c={};for(let[f,T]of Object.entries(i)){let N=l.current[f],D=N?.(),K=N!==void 0&&D!==void 0,te=K?D:T.props,V=K?At(D):T.serializable;V?c[f]=K?{...T,props:te,serializable:V}:T:b.push(f)}let a=W.current.gridRoot,A=W.current.floating,r=W.current.minimized;for(let f of b)a=le(a,f)||{type:"leaf",id:"group-default",panels:[],activePanelId:null},A=A.filter(T=>T.id!==f),r=r.filter(T=>T.id!==f);b.length>0&&H.current.publish("layout:panels-excluded",{panels:b.map(f=>({id:f,component:i[f].component}))});let y=W.current.activePanelId,g=y!==null&&co(y,{gridRoot:a,floating:A,panels:c})?y:null,h={version:2,...g!==null?{activePanelId:g}:{},gridRoot:a,floating:A,minimized:r,panels:c};return JSON.stringify(h)},[]),ye=ne(i=>{try{let b=uo(JSON.parse(i));return b?(R(c=>({...c,gridRoot:b.gridRoot,floating:b.floating,minimized:b.minimized,panels:b.panels,draggedPanelId:null,activePanelId:b.activePanelId})),!0):!1}catch(b){return console.error("Failed to parse layout configuration:",b),!1}},[]),De=ne(i=>{R(b=>b.activePanelId===i?b:{...b,activePanelId:i})},[]),_e=ne(i=>{R(b=>b.dir===i?b:{...b,dir:i,isRtl:i==="rtl"})},[]),We=ne(i=>i in W.current.panels,[]),Me=ne(()=>Object.keys(W.current.panels),[]),at=ne((i,b)=>Object.values(W.current.panels).find(a=>a.component===i&&a.dedupeKey===b)?.id??null,[]);Ot(()=>{_&&R(i=>i.dir===_?i:{...i,dir:_,isRtl:_==="rtl"})},[_]);let Pe=Ze(new Map),Ce=Ze(null),Le=ne(i=>(Ce.current=i,()=>{Ce.current=null}),[]),He=ne(i=>{Ce.current?.(i)},[]),Ye=ne((i,b)=>(Pe.current.set(i,b),()=>{Pe.current.delete(i)}),[]),ze=ne(i=>Pe.current.get(i)?.()??[],[]),ut=sn(()=>({openPanel:X,closePanel:G,minimizePanel:Ge,restorePanel:st,floatPanel:tt,dockPanel:nt,maximizePanel:q,updateSplitSizes:ce,updateFloatingPosition:he,focusPanel:me,isOpen:We,getOpenPanelIds:Me,findPanelId:at,saveLayout:be,loadLayout:ye,publish:Q,subscribe:J,setDraggedPanelId:je,dockPanelToGroup:se,movePanelOrder:Ee,closeLeafGroup:$,registerCloseGuard:re,unregisterCloseGuard:ue,registerStateProvider:Oe,unregisterStateProvider:U,setPanelDirty:Fe,updatePanelTitle:$e,requestClosePanel:Be,dockPanelToWorkspaceEdge:ee,setActivePanel:De,setDirection:_e,registerPanelContextMenu:Ye,getPanelContextMenuItems:ze,showContextMenu:He,registerContextMenuFn:Le}),[X,G,Ge,st,tt,nt,q,ce,he,me,We,Me,at,be,ye,Q,J,je,se,Ee,$,re,ue,Oe,U,Fe,$e,Be,ee,De,_e,Ye,ze,He,Le]),lt=i=>{let b=i.defaultMessage||i.id;return i.values&&Object.entries(i.values).forEach(([c,a])=>{b=b.replace(`{${c}}`,String(a))}),b},yt=sn(()=>({modalClass:s,modalBodyClass:L,sidePanelClass:M,sidePanelBodyClass:x,windowClass:v,windowBodyClass:C}),[s,L,M,x,v,C]);Ot(()=>{if(process.env.NODE_ENV==="development")try{getComputedStyle(document.documentElement).getPropertyValue("--rdd-styles-loaded").trim()!=="1"&&console.error(`[react-dockable-desktop] styles.css is not imported.
|
|
1
|
+
import On,{useState as rt,useRef as Ne,useEffect as Se,useCallback as Wn,useContext as So}from"react";import{createPortal as To}from"react-dom";import{createContext as Rt,useContext as dt,useState as mr,useRef as Ze,useMemo as sn,useCallback as ne,useEffect as Ot,useSyncExternalStore as hr}from"react";import{createContext as dr,useContext as cr,useSyncExternalStore as ur}from"react";var pr={requestClose:()=>{console.warn("FormContainerContract: requestClose called but no container is present")},setDirty:()=>{},onCloseRequested:()=>()=>{},registerStateProvider:()=>()=>{},setTitle:()=>{},setIcon:()=>{},containerType:"standalone",instanceId:"standalone",onClose:()=>()=>{},onMinimize:()=>()=>{},onRestore:()=>()=>{},onResize:()=>()=>{},requestMinimize:()=>{},getDimensions:()=>null,onActivate:()=>()=>{},onDeactivate:()=>()=>{},onContainerTypeChange:()=>()=>{}},wn=dr(pr),Ct=wn.Provider,Dt=()=>cr(wn),gr=()=>{let{onResize:e,getDimensions:t}=Dt();return ur(n=>e?e(()=>n()):()=>{},()=>t?t():null)};var Wt=class{registry=new Map;register(t,n,o){this.registry.set(t,{Component:n,defaultOptions:o})}get(t){return this.registry.get(t)}getRegisteredIds(){return Array.from(this.registry.keys())}},rn=new Wt;var Vt={floatWindow:{id:"dockable-desktop-floatWindow",defaultMessage:"Float Window"},minimizePanel:{id:"dockable-desktop-minimizePanel",defaultMessage:"Minimize Panel"},closeTab:{id:"dockable-desktop-closeTab",defaultMessage:"Close Tab"},restorePanel:{id:"dockable-desktop-restorePanel",defaultMessage:"Restore Panel"},maximizePanel:{id:"dockable-desktop-maximizePanel",defaultMessage:"Maximize Panel"},closePanel:{id:"dockable-desktop-closePanel",defaultMessage:"Close Panel"},dockWindow:{id:"dockable-desktop-dockWindow",defaultMessage:"Dock Window"},minimize:{id:"dockable-desktop-minimize",defaultMessage:"Minimize"},maximize:{id:"dockable-desktop-maximize",defaultMessage:"Maximize"},restoreSize:{id:"dockable-desktop-restoreSize",defaultMessage:"Restore Size"},close:{id:"dockable-desktop-close",defaultMessage:"Close"},closeEmptyGroup:{id:"dockable-desktop-closeEmptyGroup",defaultMessage:"Close empty split group"},unsavedChangesTitle:{id:"dockable-desktop-unsavedChangesTitle",defaultMessage:"Unsaved Changes"},unsavedChangesMessage:{id:"dockable-desktop-unsavedChangesMessage",defaultMessage:'"{title}" has unsaved changes. Do you want to discard your changes and close?'},discardChanges:{id:"dockable-desktop-discardChanges",defaultMessage:"Discard Changes"},cancel:{id:"dockable-desktop-cancel",defaultMessage:"Cancel"},yes:{id:"dockable-desktop-yes",defaultMessage:"Yes"},no:{id:"dockable-desktop-no",defaultMessage:"No"},ok:{id:"dockable-desktop-ok",defaultMessage:"OK"},closePanelTooltip:{id:"dockable-desktop-closePanelTooltip",defaultMessage:"Close panel"},closeTooltip:{id:"dockable-desktop-closeTooltip",defaultMessage:"Close"}};import{isValidElement as fr}from"react";function At(e){if(e===null)return!0;if(e===void 0)return!1;let t=typeof e;if(t==="string"||t==="number"||t==="boolean")return!0;if(t==="function"||t==="symbol"||t==="bigint")return!1;if(e instanceof Date)return!0;if(fr(e))return!1;if(Array.isArray(e))return e.every(At);let n=Object.getPrototypeOf(e);return n!==Object.prototype&&n!==null?!1:Object.values(e).every(At)}import{jsx as wt}from"react/jsx-runtime";var Ft=Rt(null),an=Rt(null),ro=Rt(null),io=Rt(null),so=Rt(Vt),ao=Rt({}),pt=()=>dt(ao),lo=Rt(rn),Kt=()=>dt(lo),Rn=class{listeners={};subscribe(t,n){return this.listeners[t]||(this.listeners[t]=[]),this.listeners[t].push(n),()=>{this.listeners[t]=this.listeners[t].filter(o=>o!==n)}}publish(t,n){this.listeners[t]&&this.listeners[t].forEach(o=>o(n))}},br={type:"leaf",id:"group-default",panels:[],activePanelId:null};function co(e,t){let n=t.panels[e];if(!n||n.state==="minimized")return!1;if(t.floating.some(l=>l.id===e))return!0;let o=l=>l.type==="leaf"?l.activePanelId===e:l.children.some(o);return t.gridRoot?o(t.gridRoot):!1}function Mn(e){let t=s=>s!==null&&!!e.panels[s]&&e.panels[s].state!=="minimized",n=s=>{if(s.type==="leaf")return t(s.activePanelId)?s.activePanelId:null;for(let L of s.children){let M=n(L);if(M)return M}return null},o=e.gridRoot?n(e.gridRoot):null;if(o)return o;let l=null;for(let s of e.floating)t(s.id)&&(!l||s.z>l.z)&&(l=s);return l?.id??null}function uo(e){if(!e||!e.gridRoot||!Array.isArray(e.floating)||!Array.isArray(e.minimized)||!e.panels)return null;let t=e.floating.map(s=>{if("stickyRight"in s||"stickyBottom"in s){let L=s.stickyRight&&s.stickyBottom?"bottom-right":s.stickyRight?"top-right":s.stickyBottom?"bottom-left":null,{stickyRight:M,stickyBottom:x,...v}=s;return{...v,anchor:L}}return s}),n={gridRoot:e.gridRoot,floating:t,panels:e.panels},o=typeof e.activePanelId=="string"?e.activePanelId:null,l=null;return o!==null&&(co(o,n)?l=o:process.env.NODE_ENV==="development"&&console.warn(`[react-dockable-desktop] Ignoring the saved layout's activePanelId ("${o}") \u2014 it doesn't name a currently visible panel (it may have been closed, minimized, or excluded from the snapshot as non-serializable). Falling back to the selected tab of the first leaf in the grid.`)),l===null&&(l=Mn(n)),{gridRoot:e.gridRoot,floating:t,minimized:e.minimized,panels:e.panels,activePanelId:l}}function vr(e){if(e)try{let t=uo(JSON.parse(e));if(t)return t}catch{}return{gridRoot:br,floating:[],minimized:[],panels:{},activePanelId:null}}var Sn=({children:e,client:t,formatMessage:n,predefinedMessages:o,dir:l,modalClass:s,modalBodyClass:L,sidePanelClass:M,sidePanelBodyClass:x,windowClass:v,windowBodyClass:C,zIndexBase:c})=>{let I=Ze(t?.registry??rn).current,k=t?.config.formatMessage??n,E=t?.config.predefinedMessages??o,_=t?.config.dir??l,u=t?.config.zIndexBase??c??1e3,[w,R]=mr(()=>({...vr(t?.initialState??null),draggedPanelId:null,dir:_||"ltr",isRtl:_==="rtl",splitRatio:Math.min(.9,Math.max(.1,t?.config.defaultSplitRatio??.5)),edgeSplitRatio:Math.min(.9,Math.max(.1,t?.config.defaultEdgeSplitRatio??.2))})),A=Ze(w);A.current=w;let m=Ze(new Set);Ot(()=>{m.current.forEach(i=>i())},[w]);let y=ne(()=>A.current,[]),F=ne(i=>(m.current.add(i),()=>m.current.delete(i)),[]),O=Ze({}),a=Ze({}),z=sn(()=>({...Vt,...E}),[E]),H=Ze(new Rn),B=Ze(u);Ot(()=>(document.documentElement.style.setProperty("--rdd-z-base",String(u)),()=>{document.documentElement.style.removeProperty("--rdd-z-base")}),[u]);let J=ne((i,b)=>H.current.subscribe(i,b),[]),ee=ne((i,b)=>{H.current.publish(i,b)},[]),Z=ne((i,b)=>{let g=typeof i.x=="string"?parseFloat(i.x):i.x,d=typeof i.y=="string"?parseFloat(i.y):i.y,S=typeof i.width=="string"?parseFloat(i.width):i.width,r=typeof i.height=="string"?parseFloat(i.height):i.height;isNaN(g)&&(g=300),isNaN(d)&&(d=150),isNaN(S)&&(S=450),isNaN(r)&&(r=350);let P=N=>b.some(D=>{let W=typeof D.x=="string"?parseFloat(D.x):D.x,G=typeof D.y=="string"?parseFloat(D.y):D.y;return!D.maximized&&Math.abs(W-N.x)<20&&Math.abs(G-N.y)<20}),f=0;for(;P({x:g,y:d})&&f<10;)g+=30,d+=30,f++;let h=Math.max(100,window.innerWidth||1024),p=Math.max(100,window.innerHeight||768);return(g+S>h||d+r>p)&&(g=100+f%5*30,d=100+f%5*30),g=Math.max(0,Math.min(g,h-100)),d=Math.max(0,Math.min(d,p-40)),{x:g,y:d,width:S,height:r}},[]),me=ne(i=>{R(b=>{let g=b.panels[i];if(!g)return b;if(g.state==="floating"){let d=b.floating.find(r=>r.id===i);if(!d)return b;let S=!b.floating.some(r=>r.z>d.z);return S&&b.activePanelId===i?b:(S||(B.current+=1),{...b,floating:b.floating.map(r=>r.id===i?{...r,z:S?d.z:B.current}:r),activePanelId:i})}else if(g.state==="docked"){if(b.activePanelId===i)return b;let d=S=>S.type==="leaf"?S.panels.includes(i)?{...S,activePanelId:i}:S:{...S,children:S.children.map(d)};return{...b,gridRoot:d(b.gridRoot),activePanelId:i}}return b.activePanelId===i?b:{...b,activePanelId:i}})},[]),le=(i,b)=>{if(i.type==="leaf"){let g=i.panels.indexOf(b);if(g===-1)return i;let d=i.panels.filter(P=>P!==b),S=i.activePanelId===b?d[g]||d[g-1]||d[0]||null:i.activePanelId,r={...i,panels:d,activePanelId:S};return d.length===0&&!i.keepOnEmpty?null:r}else{let g=i.children.map(r=>le(r,b)).filter(r=>r!==null);if(g.length===0)return null;if(g.length===1)return g[0];let d=i.sizes.slice(0,g.length),S=d.reduce((r,P)=>r+P,0);return{...i,children:g,sizes:d.map(r=>r/S)}}},X=(i,b,g)=>{if(i.type==="leaf"){if(i.id===b){let d=i.panels.includes(g)?i.panels:[...i.panels,g];return{...i,panels:d,activePanelId:g}}return i}else return{...i,children:i.children.map(d=>X(d,b,g))}},j=i=>{if(i.type==="leaf")return i.id;for(let b of i.children){let g=j(b);if(g)return g}return null},K=ne((i,b,g)=>{let d=i;if(g?.dedupeKey!==void 0){let p=Object.values(A.current.panels).find(N=>N.component===b&&N.dedupeKey===g.dedupeKey);p&&(d=p.id)}let S=!(d in A.current.panels),r=d!==i,P=g?.focus!==!1,h=g?.props!==void 0?At(g.props):!0;R(p=>{let N=p.panels[d],D=I.get(b),W=g?.title||g?.title||D?.defaultOptions?.title||d,G=g?.initialTarget||D?.defaultOptions?.initialTarget||"docked",Q=D?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},V=P?d:p.activePanelId;if(N)if(N.state==="minimized"){let de=p.minimized.filter(ge=>ge.id!==d);if(G==="floating"||!p.gridRoot){B.current+=1;let ge=Z(Q,p.floating);return{...p,minimized:de,floating:[...p.floating,{...ge,id:d,z:B.current}],panels:{...p.panels,[d]:{...N,state:"floating"}},activePanelId:V}}else{let ge=j(p.gridRoot)||"group-default";return{...p,minimized:de,gridRoot:X(p.gridRoot,ge,d),panels:{...p.panels,[d]:{...N,state:"docked"}},activePanelId:V}}}else{if(N.state==="floating")return P&&me(d),p;{let de=ge=>ge.type==="leaf"?ge.panels.includes(d)?{...ge,activePanelId:d}:ge:{...ge,children:ge.children.map(de)};return{...p,gridRoot:de(p.gridRoot),activePanelId:V}}}let pe={id:d,title:W,component:b,state:G==="tabbed"?"docked":G,props:g?.props,serializable:h,dedupeKey:g?.dedupeKey},ie={...p.panels,[d]:pe};if(G==="floating"){B.current+=1;let de=Z(Q,p.floating),ge=g?.anchor??D?.defaultOptions?.defaultAnchor??null;return{...p,floating:[...p.floating,{...de,id:d,z:B.current,anchor:ge}],panels:ie,activePanelId:V}}else{let de=j(p.gridRoot)||"group-default";return{...p,gridRoot:X(p.gridRoot,de,d),panels:ie,activePanelId:V}}}),S&&H.current.publish("panel:opened",{id:d,component:b}),(S||r)&&H.current.publish("layout:changed",{})},[Z,me]),Y=ne(i=>{let b=i in A.current.panels;R(g=>{let d=g.panels[i];if(!d||I.get(d.component)?.defaultOptions?.canClose===!1)return g;delete O.current[i],delete a.current[i];let r={...g.panels};delete r[i];let P=le(g.gridRoot,i)||{type:"leaf",id:"group-default",panels:[],activePanelId:null},f=g.floating.filter(p=>p.id!==i),h=g.activePanelId===i?Mn({gridRoot:P,floating:f,panels:r}):g.activePanelId;return{...g,gridRoot:P,floating:f,minimized:g.minimized.filter(p=>p.id!==i),panels:r,activePanelId:h}}),b&&(H.current.publish("panel:closed",{id:i}),H.current.publish("layout:changed",{}))},[]),re=ne((i,b)=>{O.current[i]=b},[]),ue=ne(i=>{delete O.current[i]},[]),Oe=ne((i,b)=>{a.current[i]=b},[]),U=ne(i=>{delete a.current[i]},[]),Fe=ne((i,b,g)=>{R(d=>{let S=d.panels[i];return S?{...d,panels:{...d.panels,[i]:{...S,dirty:b,dirtyOptions:g}}}:d})},[]),$e=ne((i,b)=>{R(g=>{let d=g.panels[i];return d?{...g,panels:{...g.panels,[i]:{...d,title:b}}}:g})},[]),Be=ne(async(i,b)=>{if(b?.force){Y(i);return}let g=O.current[i];if(g&&!await g())return;let d=A.current.panels[i];if(d?.dirty)if(b?.onConfirm){if(!await b.onConfirm(d.dirtyOptions))return}else return;Y(i)},[Y]),Ge=ne(i=>{let b=A.current.panels[i]?.state!=="minimized"&&i in A.current.panels;R(g=>{let d=g.panels[i];if(!d||d.state==="minimized"||I.get(d.component)?.defaultOptions?.canMinimize===!1)return g;let r,P;if(d.state==="floating"){let D=g.floating.find(W=>W.id===i);D&&(r={x:Number(D.x),y:Number(D.y),width:Number(D.width),height:Number(D.height),anchor:D.anchor??null})}else if(d.state==="docked"){let D=W=>{if(W.type==="leaf")return W.panels.includes(i)?W.id:null;for(let G of W.children){let Q=D(G);if(Q)return Q}return null};P=D(g.gridRoot)??void 0}let f=le(g.gridRoot,i)||{type:"leaf",id:"group-default",panels:[],activePanelId:null},h=g.floating.filter(D=>D.id!==i),p={...g.panels,[i]:{...d,state:"minimized",previousState:d.state,lastFloatingRect:r,lastLeafId:P}},N=g.activePanelId===i?Mn({gridRoot:f,floating:h,panels:p}):g.activePanelId;return{...g,gridRoot:f,floating:h,minimized:[...g.minimized,{id:i,title:d.title,component:d.component}],panels:p,activePanelId:N}}),b&&(H.current.publish("panel:minimized",{id:i}),H.current.publish("layout:changed",{}))},[]),st=ne((i,b)=>{let g=A.current.panels[i]?.state==="minimized",d=b?.focus!==!1;R(S=>{let r=S.panels[i];if(!r||r.state!=="minimized")return S;let P=S.minimized.filter(p=>p.id!==i),f=r.previousState||"docked",h=d?i:S.activePanelId;if(f==="floating"){B.current+=1;let p=I.get(r.component),N=r.lastFloatingRect||p?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},D=Z(N,S.floating);return{...S,minimized:P,floating:[...S.floating,{...D,id:i,z:B.current,anchor:r.lastFloatingRect?.anchor??null}],panels:{...S.panels,[i]:{...r,state:"floating"}},activePanelId:h}}else{let p=(G,Q)=>G.type==="leaf"?G.id===Q:G.children.some(V=>p(V,Q)),N=r.lastLeafId&&p(S.gridRoot,r.lastLeafId),D=I.get(r.component),W=D?.defaultOptions?.canDrag!==!1;if(N)return{...S,minimized:P,gridRoot:X(S.gridRoot,r.lastLeafId,i),panels:{...S.panels,[i]:{...r,state:"docked"}},activePanelId:h};if(W){B.current+=1;let G=r.lastFloatingRect||D?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},Q=Z(G,S.floating);return{...S,minimized:P,floating:[...S.floating,{...Q,id:i,z:B.current,anchor:r.lastFloatingRect?.anchor??null}],panels:{...S.panels,[i]:{...r,state:"floating"}},activePanelId:h}}else{let G=j(S.gridRoot)||"group-default";return{...S,minimized:P,gridRoot:X(S.gridRoot,G,i),panels:{...S.panels,[i]:{...r,state:"docked"}},activePanelId:h}}}}),g&&(H.current.publish("panel:restored",{id:i}),H.current.publish("layout:changed",{}))},[Z]),tt=ne((i,b,g)=>{R(d=>{let S=d.panels[i];if(!S||I.get(S.component)?.defaultOptions?.canDrag===!1)return d;let P=I.get(S.component),f=b||P?.defaultOptions?.favoritePosition||{x:300,y:150,width:450,height:350},h=le(d.gridRoot,i);B.current+=1;let p=Z(f,d.floating);return{...d,gridRoot:h||{type:"leaf",id:"group-default",panels:[],activePanelId:null},floating:[...d.floating,{...p,id:i,z:B.current,anchor:g??null}],panels:{...d.panels,[i]:{...S,state:"floating"}}}})},[Z]),nt=ne((i,b)=>{R(g=>{let d=g.panels[i];if(!d)return g;let S=g.floating.filter(f=>f.id!==i),r=le(g.gridRoot,i),P=b||j(r||g.gridRoot)||"group-default";return{...g,gridRoot:X(r||g.gridRoot,P,i),floating:S,panels:{...g.panels,[i]:{...d,state:"docked"}}}})},[]),qe=(i,b,g,d,S)=>{if(i.type==="leaf"){if(i.id===b){let r={type:"leaf",id:`group-split-${Date.now()}-${Math.floor(Math.random()*1e3)}`,panels:[g],activePanelId:g},P=d==="left"||d==="right"?"horizontal":"vertical",f=d==="left"||d==="top"?[r,i]:[i,r],h=d==="left"||d==="top"?[S,1-S]:[1-S,S];return{type:"branch",orientation:P,sizes:h,children:f}}return i}else return{...i,children:i.children.map(r=>qe(r,b,g,d,S))}},je=ne(i=>{R(b=>({...b,draggedPanelId:i}))},[]),se=ne((i,b,g)=>{R(d=>{let S=d.panels[i];if(!S)return d;let r=d.floating.filter(h=>h.id!==i),P=le(d.gridRoot,i),f;return g==="center"?f=X(P||d.gridRoot,b,i):f=qe(P||d.gridRoot,b,i,g,d.splitRatio),{...d,gridRoot:f,floating:r,panels:{...d.panels,[i]:{...S,state:"docked"}},draggedPanelId:null}})},[]),te=ne((i,b)=>{R(g=>{let d=g.panels[i];if(!d)return g;let S=g.floating.filter(D=>D.id!==i),r=le(g.gridRoot,i),P={type:"leaf",id:`group-edge-${Date.now()}-${Math.floor(Math.random()*1e3)}`,panels:[i],activePanelId:i},f=b==="left"||b==="right"?"horizontal":"vertical",h=b==="left"||b==="top"?[P,r||g.gridRoot]:[r||g.gridRoot,P],p=g.edgeSplitRatio,N={type:"branch",orientation:f,sizes:b==="left"||b==="top"?[p,1-p]:[1-p,p],children:h};return{...g,gridRoot:N,floating:S,panels:{...g.panels,[i]:{...d,state:"docked"}},draggedPanelId:null}})},[]),Ee=ne((i,b,g)=>{R(d=>{let S=d.panels[i];if(!S)return d;let r=le(d.gridRoot,i),P=p=>{if(p.type==="leaf"){if(p.id===b){let N=p.panels.filter(G=>G!==i),D=Math.max(0,Math.min(g,N.length)),W=[...N];return W.splice(D,0,i),{...p,panels:W,activePanelId:i}}return p}else return{...p,children:p.children.map(P)}},f=P(r||d.gridRoot),h=d.floating.filter(p=>p.id!==i);return{...d,gridRoot:f,floating:h,panels:{...d.panels,[i]:{...S,state:"docked"}},draggedPanelId:null}})},[]),$=ne(i=>{R(b=>{let g=S=>{if(S.type==="leaf")return S.id===i&&S.canClose!==!1?null:S;{let r=S.children.map(h=>g(h)).filter(h=>h!==null);if(r.length===0)return null;if(r.length===1)return r[0];let P=S.sizes.slice(0,r.length),f=P.reduce((h,p)=>h+p,0);return{...S,children:r,sizes:P.map(h=>h/f)}}},d=g(b.gridRoot);return{...b,gridRoot:d||{type:"leaf",id:"group-default",panels:[],activePanelId:null}}})},[]),q=ne(i=>{R(b=>({...b,floating:b.floating.map(g=>g.id===i?{...g,maximized:!g.maximized}:g)}))},[]),ce=ne((i,b)=>{let g=(d,S)=>{if(d.type==="leaf")return d;if(S===i.length)return{...d,sizes:b};let r=i[S],P=d.children.map((f,h)=>h===r?g(f,S+1):f);return{...d,children:P}};R(d=>({...d,gridRoot:g(d.gridRoot,0)}))},[]),he=ne((i,b)=>{R(g=>({...g,floating:g.floating.map(d=>d.id===i?{...d,...b}:d)}))},[]),be=ne(()=>{let i=A.current.panels,b=[],g={};for(let[p,N]of Object.entries(i)){let D=a.current[p],W=D?.(),G=D!==void 0&&W!==void 0,Q=G?W:N.props,V=G?At(W):N.serializable;V?g[p]=G?{...N,props:Q,serializable:V}:N:b.push(p)}let d=A.current.gridRoot,S=A.current.floating,r=A.current.minimized;for(let p of b)d=le(d,p)||{type:"leaf",id:"group-default",panels:[],activePanelId:null},S=S.filter(N=>N.id!==p),r=r.filter(N=>N.id!==p);b.length>0&&H.current.publish("layout:panels-excluded",{panels:b.map(p=>({id:p,component:i[p].component}))});let P=A.current.activePanelId,f=P!==null&&co(P,{gridRoot:d,floating:S,panels:g})?P:null,h={version:2,...f!==null?{activePanelId:f}:{},gridRoot:d,floating:S,minimized:r,panels:g};return JSON.stringify(h)},[]),ye=ne(i=>{try{let b=uo(JSON.parse(i));return b?(R(g=>({...g,gridRoot:b.gridRoot,floating:b.floating,minimized:b.minimized,panels:b.panels,draggedPanelId:null,activePanelId:b.activePanelId})),!0):!1}catch(b){return console.error("Failed to parse layout configuration:",b),!1}},[]),De=ne(i=>{R(b=>b.activePanelId===i?b:{...b,activePanelId:i})},[]),_e=ne(i=>{R(b=>b.dir===i?b:{...b,dir:i,isRtl:i==="rtl"})},[]),We=ne(i=>i in A.current.panels,[]),Me=ne(()=>Object.keys(A.current.panels),[]),at=ne((i,b)=>Object.values(A.current.panels).find(d=>d.component===i&&d.dedupeKey===b)?.id??null,[]);Ot(()=>{_&&R(i=>i.dir===_?i:{...i,dir:_,isRtl:_==="rtl"})},[_]);let Pe=Ze(new Map),Ce=Ze(null),Le=ne(i=>(Ce.current=i,()=>{Ce.current=null}),[]),He=ne(i=>{Ce.current?.(i)},[]),Ye=ne((i,b)=>(Pe.current.set(i,b),()=>{Pe.current.delete(i)}),[]),ze=ne(i=>Pe.current.get(i)?.()??[],[]),ut=sn(()=>({openPanel:K,closePanel:Y,minimizePanel:Ge,restorePanel:st,floatPanel:tt,dockPanel:nt,maximizePanel:q,updateSplitSizes:ce,updateFloatingPosition:he,focusPanel:me,isOpen:We,getOpenPanelIds:Me,findPanelId:at,saveLayout:be,loadLayout:ye,publish:ee,subscribe:J,setDraggedPanelId:je,dockPanelToGroup:se,movePanelOrder:Ee,closeLeafGroup:$,registerCloseGuard:re,unregisterCloseGuard:ue,registerStateProvider:Oe,unregisterStateProvider:U,setPanelDirty:Fe,updatePanelTitle:$e,requestClosePanel:Be,dockPanelToWorkspaceEdge:te,setActivePanel:De,setDirection:_e,registerPanelContextMenu:Ye,getPanelContextMenuItems:ze,showContextMenu:He,registerContextMenuFn:Le}),[K,Y,Ge,st,tt,nt,q,ce,he,me,We,Me,at,be,ye,ee,J,je,se,Ee,$,re,ue,Oe,U,Fe,$e,Be,te,De,_e,Ye,ze,He,Le]),lt=i=>{let b=i.defaultMessage||i.id;return i.values&&Object.entries(i.values).forEach(([g,d])=>{b=b.replace(`{${g}}`,String(d))}),b},yt=sn(()=>({modalClass:s,modalBodyClass:L,sidePanelClass:M,sidePanelBodyClass:x,windowClass:v,windowBodyClass:C}),[s,L,M,x,v,C]);Ot(()=>{if(process.env.NODE_ENV==="development")try{getComputedStyle(document.documentElement).getPropertyValue("--rdd-styles-loaded").trim()!=="1"&&console.error(`[react-dockable-desktop] styles.css is not imported.
|
|
2
2
|
Add this to your entry file (main.tsx / index.tsx):
|
|
3
3
|
import 'react-dockable-desktop/styles.css'
|
|
4
|
-
Without it the workspace renders as a black screen with no console errors.`)}catch{}},[]),Ot(()=>{if(t)return t._connect(ut),()=>{t._disconnect()}},[t,ut]);let Pt=sn(()=>({getSnapshot:P,subscribeToState:F}),[P,F]);return wt(ao.Provider,{value:yt,children:wt(lo.Provider,{value:I,children:wt(io.Provider,{value:Pt,children:wt(Ft.Provider,{value:w,children:wt(an.Provider,{value:ut,children:wt(ro.Provider,{value:k||lt,children:wt(so.Provider,{value:z,children:e})})})})})})})},oo=e=>()=>{};function Ve(e){let t=dt(Ft),n=dt(io),o=Ze(e);o.current=e;let d=hr(e?n?.subscribeToState??oo:oo,()=>{let s=n?.getSnapshot()??t;return o.current?o.current(s):s},()=>{let s=n?.getSnapshot()??t;return o.current?o.current(s):s});if(!t)throw new Error("useWindowManagerState must be used within WindowManagerProvider");return e?d:t}var qt=()=>{let e=dt(an);if(!e)throw new Error("useWindowManagerActions must be used within WindowManagerProvider");return e},Tn=()=>{let e=dt(an);if(!e)throw new Error("useWindowManagerActionsInternal must be used within WindowManagerProvider");return e},Ue=()=>dt(ro)||(t=>{let n=t.defaultMessage||t.id;return t.values&&Object.entries(t.values).forEach(([o,d])=>{n=n.replace(`{${o}}`,String(d))}),n}),ve=(e,t)=>e?typeof e=="string"?e:t(e):"",yr=()=>{let{publish:e,subscribe:t}=qt();return{publish:e,subscribe:t}},ot=()=>dt(so),ln=()=>Dt().instanceId;function Pr(e){let t=dt(an),n=ln(),o=Ze(e);o.current=e,Ot(()=>{if(!(!t?.registerPanelContextMenu||!n))return t.registerPanelContextMenu(n,()=>o.current)},[n,t?.registerPanelContextMenu])}import Zt,{forwardRef as mo,useImperativeHandle as xr,useState as po,useRef as jt,useEffect as go,useLayoutEffect as ho}from"react";import{createPortal as bo}from"react-dom";import{Fragment as Rr,jsx as we,jsxs as Mt}from"react/jsx-runtime";function Cr(e){return e?"touches"in e&&e.touches.length>0?{x:e.touches[0].clientX,y:e.touches[0].clientY}:{x:e.clientX,y:e.clientY}:{x:0,y:0}}function _t(e,t){return typeof e=="string"?e:t?t(e):e.defaultMessage??e.id}function kn(e){return"separator"in e}function dn(e){return!kn(e)&&"items"in e}var vo=mo(({items:e,x:t,y:n,theme:o,fmt:d,onClose:s,onMouseEnter:L,onMouseLeave:M},x)=>(ho(()=>{let v=x?.current;if(!v)return;let C=v.getBoundingClientRect(),u=8;C.right>window.innerWidth-u&&(v.style.left=`${Math.max(u,window.innerWidth-C.width-u)}px`,v.style.right="auto"),C.bottom>window.innerHeight-u&&(v.style.top=`${Math.max(u,window.innerHeight-C.height-u)}px`),C.left<u&&(v.style.left=`${u}px`,v.style.right="auto"),C.top<u&&(v.style.top=`${u}px`)}),bo(we("div",{ref:x,className:`rdd-context-menu rdd-context-menu--${o} rdd-context-menu--submenu`,style:{position:"fixed",left:t,top:n},role:"menu",onMouseEnter:L,onMouseLeave:M,children:e.map((v,C)=>{if(kn(v))return we("hr",{className:"rdd-context-menu__separator",role:"separator"},C);let u=v,I=u.checkbox&&u.checkbox.active!==!1,k=I&&u.checkbox.value,E=u.disabled===!0||(I?u.checkbox.enabled===!1:!1);return Mt("button",{type:"button",className:`rdd-context-menu__item${E?" rdd-context-menu__item--disabled":""}`,title:u.title?_t(u.title,d):void 0,disabled:E,"data-cy-action":u.cyAction,onClick:()=>{E||(u.action?.(),s())},role:"menuitem","aria-checked":I?k:void 0,children:[u.icon?we("span",{className:"rdd-context-menu__icon",children:u.icon}):we("span",{className:"rdd-context-menu__icon","aria-hidden":"true"}),we("span",{className:"rdd-context-menu__label",children:_t(u.label,d)}),I&&we("span",{className:`rdd-context-menu__checkbox${k?" rdd-context-menu__checkbox--checked":""}`,"aria-hidden":"true",children:Mt("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[we("rect",{x:"0.75",y:"0.75",width:"10.5",height:"10.5",rx:"2",fill:"none",stroke:"currentColor",strokeWidth:"1.5"}),k&&we("path",{d:"M2.5 6 L4.5 8.5 L9.5 3.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]})})]},C)})}),document.body)));vo.displayName="ContextMenuSubMenuPanel";var fo={visible:!1,x:0,y:0,items:[]},In=mo(({theme:e="dark",formatMessageProvider:t,onShow:n,onHide:o,onOpenChange:d,className:s,style:L},M)=>{let[x,v]=po(fo),[C,u]=po(null),I=jt(null),k=jt(null),E=jt(new Map),_=jt({open:null,close:null}),p=Zt.useCallback(()=>{v(fo),u(null),_.current.open&&clearTimeout(_.current.open),_.current.close&&clearTimeout(_.current.close),_.current.open=null,_.current.close=null,o?.(),d?.(!1)},[o,d]);if(xr(M,()=>({show({event:l,x:z,y:H,items:B}){let J=l?Cr(l):{x:z??0,y:H??0};E.current.clear(),v({visible:!0,x:J.x,y:J.y,items:B}),u(null),n?.(),d?.(!0)}}),[n,d]),go(()=>{if(!x.visible)return;let l=z=>{I.current?.contains(z.target)||k.current?.contains(z.target)||p()};return document.addEventListener("pointerdown",l,{capture:!0}),window.addEventListener("click",l),()=>{document.removeEventListener("pointerdown",l,{capture:!0}),window.removeEventListener("click",l)}},[x.visible,p]),go(()=>{if(!x.visible)return;let l=z=>{z.key==="Escape"&&p()};return document.addEventListener("keydown",l),()=>document.removeEventListener("keydown",l)},[x.visible,p]),ho(()=>{if(!x.visible||!I.current)return;let l=I.current,z=l.getBoundingClientRect(),H=8;z.right>window.innerWidth-H&&(l.style.left=`${Math.max(H,window.innerWidth-z.width-H)}px`),z.bottom>window.innerHeight-H&&(l.style.top=`${Math.max(H,window.innerHeight-z.height-H)}px`),z.left<H&&(l.style.left=`${H}px`),z.top<H&&(l.style.top=`${H}px`)},[x.visible]),!x.visible)return null;let w=t,R=0,W=0;if(C!==null){let l=E.current.get(C);if(l){let z=l.getBoundingClientRect();R=document.documentElement.dir==="rtl"?window.innerWidth-z.left+2:z.right+2,W=z.top}}function m(){_.current.open&&(clearTimeout(_.current.open),_.current.open=null)}function P(){_.current.close&&(clearTimeout(_.current.close),_.current.close=null)}function F(l,z){P(),C!==null&&C!==l&&(m(),u(null)),dn(z)&&z.items?.length?(m(),_.current.open=setTimeout(()=>{u(l)},150)):dn(z)||(m(),C!==null&&(_.current.close=setTimeout(()=>u(null),200)))}function O(l){m(),dn(l)&&l.items?.length&&(_.current.close=setTimeout(()=>u(null),200))}return bo(Mt(Rr,{children:[we("div",{ref:I,className:`rdd-context-menu rdd-context-menu--${e}${s?` ${s}`:""}`,style:{position:"fixed",left:x.x,top:x.y,...L},role:"menu","aria-orientation":"vertical",children:x.items.map((l,z)=>{if(kn(l))return we("hr",{className:"rdd-context-menu__separator",role:"separator"},z);if(dn(l))return Mt("button",{ref:Z=>{E.current.set(z,Z)},type:"button",className:`rdd-context-menu__item rdd-context-menu__item--has-submenu${C===z?" rdd-context-menu__item--submenu-open":""}`,title:l.title?_t(l.title,w):void 0,onMouseEnter:()=>F(z,l),onMouseLeave:()=>O(l),role:"menuitem","aria-haspopup":"true","aria-expanded":C===z,children:[we("span",{className:"rdd-context-menu__icon","aria-hidden":"true"}),we("span",{className:"rdd-context-menu__label",children:_t(l.label,w)}),we("span",{className:"rdd-context-menu__chevron","aria-hidden":"true",children:"\u203A"})]},z);let H=l,B=H.checkbox&&H.checkbox.active!==!1,J=B&&H.checkbox.value,Q=H.disabled===!0||(B?H.checkbox.enabled===!1:!1);return Mt("button",{ref:Z=>{E.current.set(z,Z)},type:"button",className:`rdd-context-menu__item${Q?" rdd-context-menu__item--disabled":""}`,title:H.title?_t(H.title,w):void 0,disabled:Q,"data-cy-action":H.cyAction,onClick:()=>{Q||(H.action?.(),p())},onMouseEnter:()=>F(z,l),onMouseLeave:()=>O(l),role:"menuitem","aria-checked":B?J:void 0,children:[H.icon?we("span",{className:"rdd-context-menu__icon",children:H.icon}):we("span",{className:"rdd-context-menu__icon","aria-hidden":"true"}),we("span",{className:"rdd-context-menu__label",children:_t(H.label,w)}),B&&we("span",{className:`rdd-context-menu__checkbox${J?" rdd-context-menu__checkbox--checked":""}`,"aria-hidden":"true",children:Mt("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[we("rect",{x:"0.75",y:"0.75",width:"10.5",height:"10.5",rx:"2",fill:J?"currentColor":"none",stroke:"currentColor",strokeWidth:"1.5"}),J&&we("path",{d:"M2.5 6 L4.5 8.5 L9.5 3.5",stroke:"white",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]})})]},z)})}),C!==null&&(()=>{let l=x.items[C];return we(vo,{ref:k,items:l.items??[],x:R,y:W,theme:e,fmt:w,onClose:p,onMouseEnter:()=>P(),onMouseLeave:()=>{_.current.close=setTimeout(()=>u(null),200)}})})()]}),document.body)});In.displayName="ContextMenu";var Ht={Component:In},Bt=Zt.createContext(null),En=({adapter:e=Ht,children:t,...n})=>{let o=jt(null),[d,s]=Zt.useState(!1),L=Zt.useCallback(M=>{o.current?.show(M)},[]);return Mt(Bt.Provider,{value:{show:L,isOpen:d},children:[t,we(e.Component,{ref:o,...n,onShow:()=>{s(!0),n.onShow?.()},onHide:()=>{s(!1),n.onHide?.()}})]})};function wr(){let e=Zt.useContext(Bt);if(!e)throw new Error("useShowContextMenu must be used within a ContextMenuProvider");return e.show}import{createContext as xo,useContext as Co,useState as Mr,useCallback as Je,useMemo as Sr,useRef as Tr}from"react";import{jsx as Po}from"react/jsx-runtime";var kr=0,Ln=()=>`panel-${++kr}-${Date.now()}`,cn=new Map,yo={leftPanel:null,rightPanel:null,modals:[]},wo=xo(null),Ro=xo(null),zn=({children:e})=>{let[t,n]=Mr(yo),o=Tr(t);o.current=t;let d=Je((p,w)=>{cn.set(p,w)},[]),s=Je(p=>{cn.delete(p)},[]),L=Je(async(p,w,R={})=>{let W=o.current.leftPanel;if(W){let F=cn.get(W.id);if(F&&!await F())return null}let m=Ln(),P={id:m,Component:p,props:w,containerType:"left-panel",options:R};return n(F=>({...F,leftPanel:P})),m},[]),M=Je(async(p,w,R={})=>{let W=o.current.rightPanel;if(W){let F=cn.get(W.id);if(F&&!await F())return null}let m=Ln(),P={id:m,Component:p,props:w,containerType:"right-panel",options:R};return n(F=>({...F,rightPanel:P})),m},[]),x=Je((p,w,R={})=>{let W=Ln(),m=w.title,P={...R,title:R.title||m||"Confirmation"},F={id:W,Component:p,props:w,containerType:"modal",options:P};return n(O=>({...O,modals:[...O.modals,F]})),W},[]),v=Je(p=>{n(w=>({leftPanel:w.leftPanel?.id===p?null:w.leftPanel,rightPanel:w.rightPanel?.id===p?null:w.rightPanel,modals:w.modals.filter(R=>R.id!==p)}))},[]),C=Je(()=>{n(yo)},[]),u=Je(()=>{n(p=>({...p,modals:[]}))},[]),I=Je(p=>t.leftPanel?.id===p?t.leftPanel:t.rightPanel?.id===p?t.rightPanel:t.modals.find(w=>w.id===p),[t]),k=Je((p,w)=>{n(R=>({leftPanel:R.leftPanel?.id===p?{...R.leftPanel,...w}:R.leftPanel,rightPanel:R.rightPanel?.id===p?{...R.rightPanel,...w}:R.rightPanel,modals:R.modals.map(W=>W.id===p?{...W,...w}:W)}))},[]),E=Je((p,w,R)=>{k(p,{dirty:w,dirtyOptions:R})},[k]),_=Sr(()=>({openLeftPanel:L,openRightPanel:M,openModal:x,close:v,closeAll:C,closeAllModals:u,getInstance:I,updateInstance:k,setDirty:E,registerCloseHandler:d,unregisterCloseHandler:s}),[L,M,x,v,C,u,I,k,E,d,s]);return Po(wo.Provider,{value:t,children:Po(Ro.Provider,{value:_,children:e})})},gt=()=>{let e=Co(wo);if(!e)throw new Error("usePanelState must be used within PanelProvider");return e},St=()=>{let e=Co(Ro);if(!e)throw new Error("usePanelActions must be used within PanelProvider");return e};import{useEffect as Mo,useRef as Ir}from"react";import{jsx as Tt,jsxs as Nn}from"react/jsx-runtime";var Er=({title:e,message:t,alert:n,alertType:o="info",useYesNoTitles:d=!1,onOK:s,onCancel:L})=>{let{requestClose:M,setIcon:x,setTitle:v}=Dt(),C=Ue(),u=ot(),I=Ir(null);Mo(()=>{if(e){let R=typeof e=="string"?e:C(e);v(R)}x&&x(Tt("span",{children:"\u2753"}))},[e,v,x,C]),Mo(()=>{I.current?.focus({preventScroll:!0})},[]);let k=typeof t=="string"?t:C(t),E=C(d?u.no:u.cancel),_=C(d?u.yes:u.ok),p=R=>{R.preventDefault(),s?.(),M()},w=()=>{L?.(),M()};return Nn("form",{onSubmit:p,className:"rdd-confirmation-form-body",children:[n&&Nn("div",{className:`rdd-confirmation-alert rdd-confirmation-alert-${o}`,children:[Tt("span",{children:"\u2139\uFE0F"}),Tt("span",{children:n})]}),Tt("div",{style:{fontSize:"0.9rem",color:"inherit",lineHeight:1.5},children:k}),Tt("hr",{style:{marginTop:"0.5rem",marginBottom:"0.5rem",opacity:.1}}),Nn("div",{className:"rdd-confirmation-actions",children:[Tt("button",{type:"button",className:"rdd-btn rdd-btn-sm rdd-btn-outline",onClick:w,children:E}),Tt("button",{type:"submit",className:"rdd-btn rdd-btn-sm rdd-btn-primary",ref:I,children:_})]})]})},kt=Er;function Ut(e){return e==="top-left"?"top-right":e==="top-right"?"top-left":e==="bottom-left"?"bottom-right":"bottom-left"}function ft(e){let{element:t,pointerId:n,startClientX:o,startClientY:d,captureStart:s,onMove:L,onEnd:M,activeClasses:x}=e;t.setPointerCapture(n),x?.forEach(({el:I,classes:k})=>I.classList.add(...k));let v=s(),C=I=>{L(I.clientX-o,I.clientY-d,v)},u=()=>{x?.forEach(({el:I,classes:k})=>I.classList.remove(...k)),t.removeEventListener("pointermove",C),t.removeEventListener("pointerup",u),t.removeEventListener("pointercancel",u),M?.(v)};t.addEventListener("pointermove",C),t.addEventListener("pointerup",u),t.addEventListener("pointercancel",u)}function Jt(e,t,n,o,d){let{minW:s,minH:L,maxW:M,maxH:x,minX:v,minY:C}=d,{x:u,y:I,w:k,h:E}=o;if(e.includes("e")&&(k=Math.max(s,Math.min(o.w+t,M??1/0))),e.includes("w")){let _=o.w-s,p=v!=null?-(o.x-v):-1/0,w=Math.max(p,Math.min(t,_));k=o.w-w,u=o.x+w}if(e.includes("s")&&(E=Math.max(L,Math.min(o.h+n,x??1/0))),e.includes("n")){let _=o.h-L,p=C!=null?-(o.y-C):-1/0,w=Math.max(p,Math.min(n,_));E=o.h-w,I=o.y+w}return{x:u,y:I,w:k,h:E}}import{useEffect as Lr,useState as zr}from"react";function Dn(){let[e,t]=zr(()=>document.documentElement.getAttribute("data-color-scheme")==="light"?"light":"dark");return Lr(()=>{let n=()=>{t(document.documentElement.getAttribute("data-color-scheme")==="light"?"light":"dark")};n();let o=new MutationObserver(n);return o.observe(document.documentElement,{attributes:!0,attributeFilter:["data-color-scheme"]}),()=>o.disconnect()},[]),e}import{Fragment as ko,jsx as S,jsxs as fe}from"react/jsx-runtime";var Io=(e,t)=>{if(!e)return null;if(e.type==="leaf")return e.id===t?e:null;for(let n of e.children){let o=Io(n,t);if(o)return o}return null},Qt=new Map,un="preserved-dom-container",An=fe("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:[S("rect",{x:"3",y:"3",width:"7",height:"9",rx:"1"}),S("rect",{x:"14",y:"3",width:"7",height:"5",rx:"1"}),S("rect",{x:"14",y:"12",width:"7",height:"9",rx:"1"}),S("rect",{x:"3",y:"16",width:"7",height:"5",rx:"1"})]}),$t={float:S("span",{className:"rdd-menu-icon",children:fe("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:[S("rect",{x:"2",y:"8",width:"14",height:"14",rx:"1"}),S("rect",{x:"8",y:"2",width:"14",height:"14",rx:"1"})]})}),minimize:S("span",{className:"rdd-menu-icon",children:S("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",style:{display:"block"},children:S("line",{x1:"4",y1:"18",x2:"20",y2:"18"})})}),restore:S("span",{className:"rdd-menu-icon",children:S("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:S("rect",{x:"4",y:"4",width:"16",height:"16",rx:"1"})})}),maximize:S("span",{className:"rdd-menu-icon",children:S("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:S("rect",{x:"2",y:"2",width:"20",height:"20",rx:"1"})})}),close:S("span",{className:"rdd-menu-icon",children:S("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:S("path",{d:"M18 6L6 18M6 6l12 12"})})})},Eo=e=>{let t=Qt.get(e);return t||(t=document.createElement("div"),t.style.width="100%",t.style.height="100%",Qt.set(e,t)),t},Nr=(e,t,n)=>{let o=t.component,d=n.get(o);if(!d)return console.warn(`[react-dockable-desktop] Panel "${e}" references component key "${o}" which is not registered. Add it to the WorkspaceClient panels config:
|
|
5
|
-
new WorkspaceClient({ panels: { "${o}": { component: YourComponent } } })`),fe("div",{className:"rdd-unregistered-panel",style:{border:"2px dashed #dc3545"},children:[S("h6",{style:{fontWeight:700,marginBottom:"0.25rem"},children:"\u26A0\uFE0F Component Unregistered"}),fe("span",{style:{fontSize:"0.875rem",color:"var(--rdd-text-secondary, #94a3b8)"},children:["Key: ",o]})]});let s=d.Component;return S(s,{...t.props??{},panelId:e})},Fn=new Map,mt=new Map,It=e=>{let t=mt.get(e);return t||(t={onClose:new Set,onMinimize:new Set,onRestore:new Set,onResize:new Set,onActivate:new Set,onDeactivate:new Set,onContainerTypeChange:new Set},mt.set(e,t)),t},Lo=({panelId:e})=>{let t=Ne(null);return Se(()=>{let n=t.current;if(!n)return;let o=Eo(e);n.appendChild(o);let d=new ResizeObserver(s=>{for(let L of s){let{width:M,height:x}=L.contentRect;if(M>0&&x>0){Fn.set(e,{width:M,height:x});let v=mt.get(e);v&&v.onResize.forEach(C=>C(M,x))}}});return d.observe(n),()=>{d.disconnect();let s=document.getElementById(un);s||(s=document.createElement("div"),s.id=un,s.style.display="none",document.body.appendChild(s)),s.appendChild(o)}},[e]),S("div",{ref:t,style:{width:"100%",height:"100%"}})},Dr=({panelId:e})=>{let t=Ve(),n=Kt(),o=Ue(),d=Ne(null),s=t.panels[e],L=s?n.get(s.component):null,M=L?.defaultOptions?.disableLivePreview||!1,x=Fn.get(e)||{width:800,height:500},v=x.width,C=x.height,k=Math.min(220/v,140/C);if(Se(()=>{if(M)return;let E=d.current;if(!E)return;let _=Qt.get(e);if(_)return E.appendChild(_),()=>{let p=document.getElementById(un);p||(p=document.createElement("div"),p.id=un,p.style.display="none",document.body.appendChild(p)),p.appendChild(_)}},[e,M]),M){let E=v*k,_=C*k,p=s?.title||L?.defaultOptions?.title||"Panel",w=ve(p,o),R=(Array.from(w)[0]||"P").toUpperCase();return S("div",{className:"rdd-taskbar-item-preview-frame",style:{width:`${E}px`,height:`${_}px`,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(108, 117, 125, 0.15)",border:"1px dashed var(--rdd-taskbar-item-border, rgba(255, 255, 255, 0.15))"},children:S("div",{style:{fontSize:"2rem",fontWeight:600,color:"var(--rdd-panel-title-color, var(--rdd-panel-text, rgba(255, 255, 255, 0.85)))",userSelect:"none"},children:R})})}return S("div",{className:"rdd-taskbar-item-preview-frame",style:{width:`${v*k}px`,height:`${C*k}px`},children:S("div",{ref:d,className:"rdd-taskbar-item-preview-host",style:{width:`${v}px`,height:`${C}px`,transform:`scale(${k})`,transformOrigin:"top left",position:"absolute",top:0,left:0,"--rdd-preview-scale":k}})})},Wr=({panelId:e,children:t})=>{let n=Ve(),{requestClosePanel:o,setPanelDirty:d,registerCloseGuard:s,unregisterCloseGuard:L,registerStateProvider:M,unregisterStateProvider:x,updatePanelTitle:v,minimizePanel:C}=qt(),u=n.minimized.some(m=>m.id===e),I=Ne(u);Se(()=>{let m=mt.get(e);m&&(u&&!I.current?m.onMinimize.forEach(P=>P()):!u&&I.current&&m.onRestore.forEach(P=>P()),I.current=u)},[u,e]);let k=n.activePanelId===e,E=Ne(k);Se(()=>{let m=E.current;E.current=k;let P=mt.get(e);P&&(k&&!m?P.onActivate.forEach(F=>F()):!k&&m&&P.onDeactivate.forEach(F=>F()))},[k,e]);let _=n.panels[e]?.state,p=_==="floating"?"floating-window":"dockable-panel",w=Ne(p);Se(()=>{if(_==="minimized")return;let m=w.current;w.current=p;let P=mt.get(e);P&&p!==m&&P.onContainerTypeChange.forEach(F=>F(p))},[p,_,e]),Se(()=>()=>{let m=mt.get(e);m&&(E.current&&m.onDeactivate.forEach(P=>P()),m.onClose.forEach(P=>P()),mt.delete(e))},[e]);let R=Ne(p),W=On.useMemo(()=>({requestClose:m=>o(e,m),setDirty:m=>d(e,m),onCloseRequested:m=>(s(e,m),()=>L(e)),registerStateProvider:m=>(M(e,m),()=>x(e)),setTitle:m=>v(e,m),instanceId:e,containerType:R.current,onClose:m=>{let P=It(e);return P.onClose.add(m),()=>P.onClose.delete(m)},onMinimize:m=>{let P=It(e);return P.onMinimize.add(m),()=>P.onMinimize.delete(m)},onRestore:m=>{let P=It(e);return P.onRestore.add(m),()=>P.onRestore.delete(m)},onResize:m=>{let P=It(e);return P.onResize.add(m),()=>P.onResize.delete(m)},requestMinimize:()=>C(e),getDimensions:()=>Fn.get(e)??null,onActivate:m=>{let P=It(e);return P.onActivate.add(m),()=>P.onActivate.delete(m)},onDeactivate:m=>{let P=It(e);return P.onDeactivate.add(m),()=>P.onDeactivate.delete(m)},onContainerTypeChange:m=>{let P=It(e);return P.onContainerTypeChange.add(m),()=>P.onContainerTypeChange.delete(m)}}),[e,o,d,s,L,M,x,v,C]);return S(Ct,{value:W,children:t})},zo=({node:e,path:t,onTabRightClick:n,activeDropZone:o,onHoverDropZone:d,onTabDragStart:s,hoveredTab:L,onTabHover:M,defaultPanelIcon:x,onRequestClosePanel:v})=>{let{updateSplitSizes:C}=qt();if(e.type==="leaf")return S(Ar,{leaf:e,onTabRightClick:n,activeDropZone:o,onHoverDropZone:d,onTabDragStart:s,hoveredTab:L,onTabHover:M,defaultPanelIcon:x,onRequestClosePanel:v});let u=e.orientation==="horizontal",I=(k,E)=>{E.preventDefault();let _=E.currentTarget,p=_.parentElement,w=p?u?p.clientWidth:p.clientHeight:u?1e3:800;ft({element:_,pointerId:E.pointerId,startClientX:E.clientX,startClientY:E.clientY,captureStart:()=>[...e.sizes],activeClasses:[{el:_,classes:["rdd-active"]},{el:document.body,classes:["rdd-resizing-active",u?"rdd-resizing-col-active":"rdd-resizing-row-active"]}],onMove:(R,W,m)=>{let P=(u?R:W)/w,F=[...m];F[k]+=P,F[k+1]-=P,F[k]>.1&&F[k+1]>.1&&C(t,F)}})};return S("div",{style:{display:"flex",flexDirection:u?"row":"column",width:"100%",height:"100%",overflow:"hidden",position:"relative"},children:e.children.map((k,E)=>{let _=e.sizes[E]*100;return fe(On.Fragment,{children:[S("div",{style:{flexGrow:e.sizes[E],flexBasis:`${_}%`,overflow:"hidden",position:"relative",minWidth:0,minHeight:0},children:S(zo,{node:k,path:[...t,E],onTabRightClick:n,activeDropZone:o,onHoverDropZone:d,onTabDragStart:s,hoveredTab:L,onTabHover:M,defaultPanelIcon:x,onRequestClosePanel:v})}),E<e.children.length-1&&S("div",{onPointerDown:p=>I(E,p),style:{cursor:u?"col-resize":"row-resize",width:u?"1px":"100%",height:u?"100%":"1px",zIndex:20},className:"rdd-resizer-bar"})]},E)})})},Ar=({leaf:e,onTabRightClick:t,activeDropZone:n,onHoverDropZone:o,onTabDragStart:d,hoveredTab:s,onTabHover:L,defaultPanelIcon:M,onRequestClosePanel:x})=>{let v=Ve(),C=Kt(),{openPanel:u,closeLeafGroup:I,setActivePanel:k}=Tn(),E=Ue(),_=ot(),{windowClass:p,windowBodyClass:w}=pt(),R=Ne(null),[W,m]=rt({left:!1,right:!1}),P=Wn(()=>{let l=R.current;l&&m({left:l.scrollLeft>0,right:l.scrollLeft<l.scrollWidth-l.clientWidth-1})},[]);Se(()=>{let l=R.current;if(!l)return;l.addEventListener("scroll",P,{passive:!0});let z=new ResizeObserver(P);return z.observe(l),P(),()=>{l.removeEventListener("scroll",P),z.disconnect()}},[P]);let F=l=>{R.current?.scrollBy({left:l==="left"?-120:120,behavior:"smooth"})},O=l=>{u(l,v.panels[l].component),k(l)};return fe("div",{"data-active-panel-id":e.activePanelId||"",className:`rdd-workspace-panel ${p??""}`,style:{overflow:"hidden",position:"relative"},children:[fe("div",{className:"rdd-workspace-tab-bar",style:{minHeight:"38px"},children:[W.left&&S("button",{className:"rdd-tab-scroll-btn rdd-tab-scroll-btn-left",onPointerDown:l=>l.stopPropagation(),onClick:()=>F("left"),tabIndex:-1,"aria-label":"Scroll tabs left",children:"\u2039"}),S("div",{ref:R,className:"rdd-tab-headers-container",style:{scrollbarWidth:"none"},onPointerMove:l=>{v.draggedPanelId&&l.target===l.currentTarget&&L(e.id,"EMPTY",e.panels.length,"right")},onPointerLeave:l=>{v.draggedPanelId&&l.target===l.currentTarget&&L(e.id,"",-1,null)},children:e.panels.map((l,z)=>{let H=v.panels[l];if(!H)return null;let B=e.activePanelId===l,J=v.activePanelId===l,Z=C.get(H.component)?.defaultOptions,me=s&&s.leafId===e.id&&s.panelId===l,le=z===e.panels.length-1,Y=s&&s.leafId===e.id&&s.panelId==="EMPTY"&&le,j=me?s.side==="left"?"rdd-drag-hover-left":"rdd-drag-hover-right":Y?"rdd-drag-hover-right":"",X=B?J?"rdd-active rdd-workspace-tab-active-focused":"rdd-active rdd-workspace-tab-active-unfocused":"rdd-workspace-tab-inactive";return fe("div",{"data-tab-id":l,"data-leaf-id":e.id,"data-tab-index":String(z),onClick:()=>O(l),onPointerDown:G=>{Z?.canDrag!==!1&&d(l,G)},onContextMenu:G=>t(l,G),onPointerMove:G=>{if(v.draggedPanelId&&G.pointerType!=="touch"){let re=G.currentTarget.getBoundingClientRect(),Oe=G.clientX-re.left<re.width/2?"left":"right";L(e.id,l,z,Oe)}},onPointerLeave:()=>{v.draggedPanelId&&L(e.id,"",-1,null)},className:`rdd-workspace-tab ${X} ${j}`,style:{cursor:Z?.canDrag===!1?"default":"pointer"},children:[fe("span",{className:"rdd-text-truncate",style:{maxWidth:"120px",display:"flex",alignItems:"center"},children:[S("span",{className:"rdd-workspace-tab-icon",children:Z?.icon||M||An}),fe("span",{children:[ve(H.title,E),H.dirty?" *":""]})]}),Z?.renderHeaderActions&&S("span",{className:"rdd-tab-header-actions",onClick:G=>G.stopPropagation(),onPointerDown:G=>G.stopPropagation(),children:Z.renderHeaderActions(l)}),Z?.canClose!==!1&&S("span",{onClick:G=>{G.stopPropagation(),x(l)},title:ve(_.closeTab,E),className:"rdd-close-tab-x",style:{width:"18px",height:"18px",...Z?.renderHeaderActions?{}:{marginInlineStart:"auto"}},children:S("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:S("path",{d:"M18 6L6 18M6 6l12 12"})})})]},l)})}),W.right&&S("button",{className:"rdd-tab-scroll-btn rdd-tab-scroll-btn-right",onPointerDown:l=>l.stopPropagation(),onClick:()=>F("right"),tabIndex:-1,"aria-label":"Scroll tabs right",children:"\u203A"}),e.panels.length===0&&e.keepOnEmpty&&e.canClose!==!1&&S("span",{onClick:()=>I(e.id),className:"rdd-close-tab-x rdd-header-close-empty-group",style:{width:"18px",height:"18px",cursor:"pointer"},title:ve(_.closeEmptyGroup,E),children:S("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:S("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),fe("div",{className:`rdd-panel-body ${w??""}`,style:{position:"relative",overflow:"hidden"},children:[e.activePanelId&&v.panels[e.activePanelId]?S(Lo,{panelId:e.activePanelId},e.activePanelId):S("div",{className:"rdd-empty-leaf-placeholder",children:S("span",{children:"Empty Workspace Section"})}),v.draggedPanelId!==null&&(()=>{let l=z=>n?.leafId===e.id&&n.position===z;return S("div",{className:"rdd-dock-drop-zone-overlay",children:fe("div",{className:"rdd-dock-target-cross",children:[S("div",{"data-leaf-id":e.id,"data-drop-zone":"top",onPointerEnter:()=>o(e.id,"top"),onPointerLeave:()=>o(e.id,null),className:`rdd-dock-target-box rdd-dock-target-top${l("top")?" rdd-dock-target-box--active":""}`,children:"\u25B2"}),S("div",{"data-leaf-id":e.id,"data-drop-zone":"bottom",onPointerEnter:()=>o(e.id,"bottom"),onPointerLeave:()=>o(e.id,null),className:`rdd-dock-target-box rdd-dock-target-bottom${l("bottom")?" rdd-dock-target-box--active":""}`,children:"\u25BC"}),S("div",{"data-leaf-id":e.id,"data-drop-zone":"left",onPointerEnter:()=>o(e.id,"left"),onPointerLeave:()=>o(e.id,null),className:`rdd-dock-target-box rdd-dock-target-left${l("left")?" rdd-dock-target-box--active":""}`,children:"\u25C0"}),S("div",{"data-leaf-id":e.id,"data-drop-zone":"right",onPointerEnter:()=>o(e.id,"right"),onPointerLeave:()=>o(e.id,null),className:`rdd-dock-target-box rdd-dock-target-right${l("right")?" rdd-dock-target-box--active":""}`,children:"\u25B6"}),S("div",{"data-leaf-id":e.id,"data-drop-zone":"center",onPointerEnter:()=>o(e.id,"center"),onPointerLeave:()=>o(e.id,null),className:`rdd-dock-target-box rdd-dock-target-center${l("center")?" rdd-dock-target-box--active":""}`,children:"\u25A3"})]})})})(),v.draggedPanelId!==null&&n!==null&&n.leafId===e.id&&S("div",{className:"rdd-dock-preview-highlight",style:(()=>{let l=n.position,z=`${v.splitRatio*100}%`,H=`${(1-v.splitRatio)*100}%`;return{left:l==="right"?H:"0",top:l==="bottom"?H:"0",width:l==="left"||l==="right"?z:"100%",height:l==="top"||l==="bottom"?z:"100%"}})()})]})]})},Or=({skin:e="vscode",defaultPanelIcon:t,taskbarVisibility:n="always",contextMenuAdapter:o=Ht,animations:d=!0})=>{let s=Ve(),L=Kt(),{restorePanel:M,minimizePanel:x,requestClosePanel:v,maximizePanel:C,updateFloatingPosition:u,focusPanel:I,floatPanel:k,setDraggedPanelId:E,dockPanelToGroup:_,movePanelOrder:p,dockPanelToWorkspaceEdge:w,setActivePanel:R,getPanelContextMenuItems:W,showContextMenu:m,registerContextMenuFn:P}=Tn(),{openModal:F}=St(),O=Ue(),l=ot(),z=On.useCallback(r=>{let y=s.panels[r];v(r,{onConfirm:g=>new Promise(h=>{let f=g||y?.dirtyOptions,T=y?ve(y.title,O):"Panel";F(kt,{title:f?.title||l.unsavedChangesTitle,message:f?.message||{id:l.unsavedChangesMessage.id,defaultMessage:l.unsavedChangesMessage.defaultMessage,values:{title:T}},alert:f?.alert,alertType:f?.alertType||"danger",useYesNoTitles:!0,onOK:()=>h(!0),onCancel:()=>h(!1)},{size:"small"})})})},[v,s.panels,O,F,l]),{windowClass:H,windowBodyClass:B}=pt(),J=So(Bt),Q=Ne(null);Se(()=>P(J!==null?r=>J.show(r):r=>Q.current?.show(r)),[J,P]);let Z=Ne(null),[me,le]=rt(!1),Y=Ne(null),j=Ne(s.minimized.length),[X,G]=rt(null),re=Ne(null),ue=Ne("mouse"),[Oe,U]=rt(!1),Fe=J!==null?J.isOpen:Oe;Se(()=>()=>{re.current&&clearTimeout(re.current)},[]),Se(()=>{X&&(s.minimized.some(y=>y.id===X.id)||G(null))},[s.minimized,X]),Se(()=>{if(!X?.fromTouch)return;let r=y=>{y.pointerType!=="touch"||document.querySelector(".rdd-taskbar-item-tooltip")?.contains(y.target)||G(null)};return document.addEventListener("pointerdown",r,{capture:!0}),()=>document.removeEventListener("pointerdown",r,{capture:!0})},[X?.fromTouch]);let[$e,Be]=rt(null),Ge=Ne(null),[st,tt]=rt({x:0,y:0}),[nt,qe]=rt(null),je=Ne(null),se=r=>{qe(r),je.current=r},[ee,Ee]=rt(null),$=Ne(null),q=r=>{Ee(r),$.current=r},ce=So(Ft)?.isRtl??!1,[he,be]=rt(null),ye=Ne(null),De=(r,y,g,h)=>{let f=h?{leafId:r,panelId:y,index:g,side:h}:null;be(f),ye.current=f},_e=(r,y)=>{let g=y?{leafId:r,position:y}:null;Be(g),Ge.current=g,g&&(se(null),q(null))},We=(r,y)=>{let g=document.elementsFromPoint(r,y),h=!1,f=!1,T=!1;for(let N of g)if(N instanceof HTMLElement){if(!h&&N.dataset.dropZone){let D=N.dataset.leafId;if(D){let K=N.dataset.dropZone;Be({leafId:D,position:K}),Ge.current={leafId:D,position:K},h=!0}}if(!T&&N.dataset.tabId){let D=N.dataset.leafId,K=parseInt(N.dataset.tabIndex||"0",10);if(D){let te=N.getBoundingClientRect(),V=r-te.left<te.width/2?"left":"right";be({leafId:D,panelId:N.dataset.tabId,index:K,side:V}),ye.current={leafId:D,panelId:N.dataset.tabId,index:K,side:V},T=!0}}if(!f&&N.dataset.edgeTrigger&&(se(N.dataset.edgeTrigger),f=!0),h&&f&&T)break}h||(Be(null),Ge.current=null),f||se(null),T||(be(null),ye.current=null)},Me=300,at=8,Pe=()=>{E(null),Be(null),Ge.current=null,be(null),ye.current=null,se(null)},Ce=r=>s.isRtl?r==="left"?"right":r==="right"?"left":r:r,Le=(r,y)=>{let g=Ge.current,h=ye.current,f=je.current,T=$.current;if(f)w(r,Ce(f));else if(h){let N=h.index;h.side==="right"&&(N+=1);let D=Io(s.gridRoot,h.leafId);if(D){let K=D.panels.indexOf(r);K!==-1&&K<N&&(N-=1)}p(r,h.leafId,N)}else g?_(r,g.leafId,Ce(g.position)):T?k(r,void 0,ce?Ut(T):T):k(r,{x:y.clientX-150,y:y.clientY-15,width:450,height:350});q(null),Pe()},He=(r,y)=>{if(y.pointerType==="mouse"&&y.button!==0)return;y.preventDefault();let g=y.currentTarget,h=y.clientX,f=y.clientY;if(y.pointerType==="touch"){let T=y.pointerId,N=!1,D=()=>{N=!0,clearTimeout(te),g.removeEventListener("pointermove",K),g.removeEventListener("pointerup",D),g.removeEventListener("pointercancel",D)},K=V=>{Math.hypot(V.clientX-h,V.clientY-f)>at&&D()},te=setTimeout(()=>{if(N)return;g.removeEventListener("pointermove",K),g.removeEventListener("pointerup",D),g.removeEventListener("pointercancel",D);try{g.setPointerCapture(T)}catch{return}g.classList.add("rdd-long-press-active"),document.body.classList.add("rdd-dragging-active"),navigator.vibrate&&navigator.vibrate(10);let V=!1,oe=de=>{V||(V=!0,E(r)),tt({x:de.clientX,y:de.clientY}),We(de.clientX,de.clientY)},pe=de=>{g.classList.remove("rdd-long-press-active"),document.body.classList.remove("rdd-dragging-active"),g.removeEventListener("pointermove",oe),g.removeEventListener("pointerup",pe),g.removeEventListener("pointercancel",ie),V?Le(r,de):Ye(r,de)},ie=()=>{g.classList.remove("rdd-long-press-active"),document.body.classList.remove("rdd-dragging-active"),g.removeEventListener("pointermove",oe),g.removeEventListener("pointerup",pe),g.removeEventListener("pointercancel",ie),V&&Pe()};g.addEventListener("pointermove",oe),g.addEventListener("pointerup",pe),g.addEventListener("pointercancel",ie)},Me);g.addEventListener("pointermove",K),g.addEventListener("pointerup",D),g.addEventListener("pointercancel",D)}else{let T=!1,N=te=>{let V=te.clientX-h,oe=te.clientY-f;!T&&(Math.abs(V)>5||Math.abs(oe)>5)&&(T=!0,E(r)),T&&tt({x:te.clientX,y:te.clientY})},D=te=>{document.body.classList.remove("rdd-dragging-active"),window.removeEventListener("pointermove",N),window.removeEventListener("pointerup",D),window.removeEventListener("pointercancel",K),T&&Le(r,te)},K=()=>{document.body.classList.remove("rdd-dragging-active"),window.removeEventListener("pointermove",N),window.removeEventListener("pointerup",D),window.removeEventListener("pointercancel",K),T&&Pe()};document.body.classList.add("rdd-dragging-active"),window.addEventListener("pointermove",N),window.addEventListener("pointerup",D),window.addEventListener("pointercancel",K)}},Ye=(r,y)=>{y.preventDefault();let g=s.panels[r];if(!g)return;let f=L.get(g.component)?.defaultOptions,T=[];if(f?.canDrag!==!1&&T.push({label:ve(l.floatWindow,O),icon:$t.float,action:()=>k(r)}),f?.canMinimize!==!1&&T.push({label:ve(l.minimizePanel,O),icon:$t.minimize,action:()=>x(r)}),T.length>0&&f?.canClose!==!1&&T.push({separator:!0}),f?.canClose!==!1&&T.push({label:ve(l.closeTab,O),icon:$t.close,action:()=>z(r)}),T.length===0)return;let N=W(r),D=N.length>0?[...T,{separator:!0},...N]:T;m({event:y,items:D})},ze=(r,y)=>{y.preventDefault(),G(null),m({event:y,items:[{label:ve(l.restorePanel,O),icon:$t.restore,action:()=>M(r)},{label:ve(l.maximizePanel,O),icon:$t.maximize,action:()=>C(r)},{separator:!0},{label:ve(l.closePanel,O),icon:$t.close,action:()=>z(r)}]})};Se(()=>{let r=Object.keys(s.panels);for(let y of Array.from(Qt.keys()))r.includes(y)||Qt.delete(y)},[s.panels]),Se(()=>{let r=()=>{s.draggedPanelId!==null&&(E(null),Be(null),be(null))};return window.addEventListener("blur",r),()=>{window.removeEventListener("blur",r)}},[s.draggedPanelId]);let ut=Ne(null),[lt,yt]=rt({width:1024,height:768});Se(()=>{let r=ut.current;if(!r)return;let y=!1,g=new ResizeObserver(h=>{if(!h||h.length===0)return;let f=h[0].contentRect;if(process.env.NODE_ENV==="development"&&f.height<10&&!y){y=!0;let T=r,N=r.parentElement;for(;N&&N!==document.documentElement&&N.getBoundingClientRect().height<10;){T=N;N=N.parentElement}let D=T.tagName.toLowerCase(),K=T.id?` id="${T.id}"`:"",te=T.className?` class="${T.className}"`:"",V=T===r?"the WindowManager container itself":`a wrapper element: <${D}${K}${te}>`;console.warn(`[react-dockable-desktop] Workspace height is 0px \u2014 the workspace will be invisible.
|
|
4
|
+
Without it the workspace renders as a black screen with no console errors.`)}catch{}},[]),Ot(()=>{if(t)return t._connect(ut),()=>{t._disconnect()}},[t,ut]);let Pt=sn(()=>({getSnapshot:y,subscribeToState:F}),[y,F]);return wt(ao.Provider,{value:yt,children:wt(lo.Provider,{value:I,children:wt(io.Provider,{value:Pt,children:wt(Ft.Provider,{value:w,children:wt(an.Provider,{value:ut,children:wt(ro.Provider,{value:k||lt,children:wt(so.Provider,{value:z,children:e})})})})})})})},oo=e=>()=>{};function Ve(e){let t=dt(Ft),n=dt(io),o=Ze(e);o.current=e;let l=hr(e?n?.subscribeToState??oo:oo,()=>{let s=n?.getSnapshot()??t;return o.current?o.current(s):s},()=>{let s=n?.getSnapshot()??t;return o.current?o.current(s):s});if(!t)throw new Error("useWindowManagerState must be used within WindowManagerProvider");return e?l:t}var qt=()=>{let e=dt(an);if(!e)throw new Error("useWindowManagerActions must be used within WindowManagerProvider");return e},Tn=()=>{let e=dt(an);if(!e)throw new Error("useWindowManagerActionsInternal must be used within WindowManagerProvider");return e},Ue=()=>dt(ro)||(t=>{let n=t.defaultMessage||t.id;return t.values&&Object.entries(t.values).forEach(([o,l])=>{n=n.replace(`{${o}}`,String(l))}),n}),ve=(e,t)=>e?typeof e=="string"?e:t(e):"",yr=()=>{let{publish:e,subscribe:t}=qt();return{publish:e,subscribe:t}},ot=()=>dt(so),ln=()=>Dt().instanceId;function Pr(e){let t=dt(an),n=ln(),o=Ze(e);o.current=e,Ot(()=>{if(!(!t?.registerPanelContextMenu||!n))return t.registerPanelContextMenu(n,()=>o.current)},[n,t?.registerPanelContextMenu])}import Zt,{forwardRef as mo,useImperativeHandle as xr,useState as po,useRef as jt,useEffect as go,useLayoutEffect as ho}from"react";import{createPortal as bo}from"react-dom";import{Fragment as Rr,jsx as we,jsxs as Mt}from"react/jsx-runtime";function Cr(e){return e?"touches"in e&&e.touches.length>0?{x:e.touches[0].clientX,y:e.touches[0].clientY}:{x:e.clientX,y:e.clientY}:{x:0,y:0}}function _t(e,t){return typeof e=="string"?e:t?t(e):e.defaultMessage??e.id}function kn(e){return"separator"in e}function dn(e){return!kn(e)&&"items"in e}var vo=mo(({items:e,x:t,y:n,theme:o,fmt:l,onClose:s,onMouseEnter:L,onMouseLeave:M},x)=>(ho(()=>{let v=x?.current;if(!v)return;let C=v.getBoundingClientRect(),c=8;C.right>window.innerWidth-c&&(v.style.left=`${Math.max(c,window.innerWidth-C.width-c)}px`,v.style.right="auto"),C.bottom>window.innerHeight-c&&(v.style.top=`${Math.max(c,window.innerHeight-C.height-c)}px`),C.left<c&&(v.style.left=`${c}px`,v.style.right="auto"),C.top<c&&(v.style.top=`${c}px`)}),bo(we("div",{ref:x,className:`rdd-context-menu rdd-context-menu--${o} rdd-context-menu--submenu`,style:{position:"fixed",left:t,top:n},role:"menu",onMouseEnter:L,onMouseLeave:M,children:e.map((v,C)=>{if(kn(v))return we("hr",{className:"rdd-context-menu__separator",role:"separator"},C);let c=v,I=c.checkbox&&c.checkbox.active!==!1,k=I&&c.checkbox.value,E=c.disabled===!0||(I?c.checkbox.enabled===!1:!1);return Mt("button",{type:"button",className:`rdd-context-menu__item${E?" rdd-context-menu__item--disabled":""}`,title:c.title?_t(c.title,l):void 0,disabled:E,"data-cy-action":c.cyAction,onClick:()=>{E||(c.action?.(),s())},role:"menuitem","aria-checked":I?k:void 0,children:[c.icon?we("span",{className:"rdd-context-menu__icon",children:c.icon}):we("span",{className:"rdd-context-menu__icon","aria-hidden":"true"}),we("span",{className:"rdd-context-menu__label",children:_t(c.label,l)}),I&&we("span",{className:`rdd-context-menu__checkbox${k?" rdd-context-menu__checkbox--checked":""}`,"aria-hidden":"true",children:Mt("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[we("rect",{x:"0.75",y:"0.75",width:"10.5",height:"10.5",rx:"2",fill:"none",stroke:"currentColor",strokeWidth:"1.5"}),k&&we("path",{d:"M2.5 6 L4.5 8.5 L9.5 3.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]})})]},C)})}),document.body)));vo.displayName="ContextMenuSubMenuPanel";var fo={visible:!1,x:0,y:0,items:[]},In=mo(({theme:e="dark",formatMessageProvider:t,onShow:n,onHide:o,onOpenChange:l,className:s,style:L},M)=>{let[x,v]=po(fo),[C,c]=po(null),I=jt(null),k=jt(null),E=jt(new Map),_=jt({open:null,close:null}),u=Zt.useCallback(()=>{v(fo),c(null),_.current.open&&clearTimeout(_.current.open),_.current.close&&clearTimeout(_.current.close),_.current.open=null,_.current.close=null,o?.(),l?.(!1)},[o,l]);if(xr(M,()=>({show({event:a,x:z,y:H,items:B}){let J=a?Cr(a):{x:z??0,y:H??0};E.current.clear(),v({visible:!0,x:J.x,y:J.y,items:B}),c(null),n?.(),l?.(!0)}}),[n,l]),go(()=>{if(!x.visible)return;let a=z=>{I.current?.contains(z.target)||k.current?.contains(z.target)||u()};return document.addEventListener("pointerdown",a,{capture:!0}),window.addEventListener("click",a),()=>{document.removeEventListener("pointerdown",a,{capture:!0}),window.removeEventListener("click",a)}},[x.visible,u]),go(()=>{if(!x.visible)return;let a=z=>{z.key==="Escape"&&u()};return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[x.visible,u]),ho(()=>{if(!x.visible||!I.current)return;let a=I.current,z=a.getBoundingClientRect(),H=8;z.right>window.innerWidth-H&&(a.style.left=`${Math.max(H,window.innerWidth-z.width-H)}px`),z.bottom>window.innerHeight-H&&(a.style.top=`${Math.max(H,window.innerHeight-z.height-H)}px`),z.left<H&&(a.style.left=`${H}px`),z.top<H&&(a.style.top=`${H}px`)},[x.visible]),!x.visible)return null;let w=t,R=0,A=0;if(C!==null){let a=E.current.get(C);if(a){let z=a.getBoundingClientRect();R=document.documentElement.dir==="rtl"?window.innerWidth-z.left+2:z.right+2,A=z.top}}function m(){_.current.open&&(clearTimeout(_.current.open),_.current.open=null)}function y(){_.current.close&&(clearTimeout(_.current.close),_.current.close=null)}function F(a,z){y(),C!==null&&C!==a&&(m(),c(null)),dn(z)&&z.items?.length?(m(),_.current.open=setTimeout(()=>{c(a)},150)):dn(z)||(m(),C!==null&&(_.current.close=setTimeout(()=>c(null),200)))}function O(a){m(),dn(a)&&a.items?.length&&(_.current.close=setTimeout(()=>c(null),200))}return bo(Mt(Rr,{children:[we("div",{ref:I,className:`rdd-context-menu rdd-context-menu--${e}${s?` ${s}`:""}`,style:{position:"fixed",left:x.x,top:x.y,...L},role:"menu","aria-orientation":"vertical",children:x.items.map((a,z)=>{if(kn(a))return we("hr",{className:"rdd-context-menu__separator",role:"separator"},z);if(dn(a))return Mt("button",{ref:Z=>{E.current.set(z,Z)},type:"button",className:`rdd-context-menu__item rdd-context-menu__item--has-submenu${C===z?" rdd-context-menu__item--submenu-open":""}`,title:a.title?_t(a.title,w):void 0,onMouseEnter:()=>F(z,a),onMouseLeave:()=>O(a),role:"menuitem","aria-haspopup":"true","aria-expanded":C===z,children:[we("span",{className:"rdd-context-menu__icon","aria-hidden":"true"}),we("span",{className:"rdd-context-menu__label",children:_t(a.label,w)}),we("span",{className:"rdd-context-menu__chevron","aria-hidden":"true",children:"\u203A"})]},z);let H=a,B=H.checkbox&&H.checkbox.active!==!1,J=B&&H.checkbox.value,ee=H.disabled===!0||(B?H.checkbox.enabled===!1:!1);return Mt("button",{ref:Z=>{E.current.set(z,Z)},type:"button",className:`rdd-context-menu__item${ee?" rdd-context-menu__item--disabled":""}`,title:H.title?_t(H.title,w):void 0,disabled:ee,"data-cy-action":H.cyAction,onClick:()=>{ee||(H.action?.(),u())},onMouseEnter:()=>F(z,a),onMouseLeave:()=>O(a),role:"menuitem","aria-checked":B?J:void 0,children:[H.icon?we("span",{className:"rdd-context-menu__icon",children:H.icon}):we("span",{className:"rdd-context-menu__icon","aria-hidden":"true"}),we("span",{className:"rdd-context-menu__label",children:_t(H.label,w)}),B&&we("span",{className:`rdd-context-menu__checkbox${J?" rdd-context-menu__checkbox--checked":""}`,"aria-hidden":"true",children:Mt("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[we("rect",{x:"0.75",y:"0.75",width:"10.5",height:"10.5",rx:"2",fill:J?"currentColor":"none",stroke:"currentColor",strokeWidth:"1.5"}),J&&we("path",{d:"M2.5 6 L4.5 8.5 L9.5 3.5",stroke:"white",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]})})]},z)})}),C!==null&&(()=>{let a=x.items[C];return we(vo,{ref:k,items:a.items??[],x:R,y:A,theme:e,fmt:w,onClose:u,onMouseEnter:()=>y(),onMouseLeave:()=>{_.current.close=setTimeout(()=>c(null),200)}})})()]}),document.body)});In.displayName="ContextMenu";var Ht={Component:In},Bt=Zt.createContext(null),En=({adapter:e=Ht,children:t,...n})=>{let o=jt(null),[l,s]=Zt.useState(!1),L=Zt.useCallback(M=>{o.current?.show(M)},[]);return Mt(Bt.Provider,{value:{show:L,isOpen:l},children:[t,we(e.Component,{ref:o,...n,onShow:()=>{s(!0),n.onShow?.()},onHide:()=>{s(!1),n.onHide?.()}})]})};function wr(){let e=Zt.useContext(Bt);if(!e)throw new Error("useShowContextMenu must be used within a ContextMenuProvider");return e.show}import{createContext as xo,useContext as Co,useState as Mr,useCallback as Je,useMemo as Sr,useRef as Tr}from"react";import{jsx as Po}from"react/jsx-runtime";var kr=0,Ln=()=>`panel-${++kr}-${Date.now()}`,cn=new Map,yo={leftPanel:null,rightPanel:null,modals:[]},wo=xo(null),Ro=xo(null),zn=({children:e})=>{let[t,n]=Mr(yo),o=Tr(t);o.current=t;let l=Je((u,w)=>{cn.set(u,w)},[]),s=Je(u=>{cn.delete(u)},[]),L=Je(async(u,w,R={})=>{let A=o.current.leftPanel;if(A){let F=cn.get(A.id);if(F&&!await F())return null}let m=Ln(),y={id:m,Component:u,props:w,containerType:"left-panel",options:R};return n(F=>({...F,leftPanel:y})),m},[]),M=Je(async(u,w,R={})=>{let A=o.current.rightPanel;if(A){let F=cn.get(A.id);if(F&&!await F())return null}let m=Ln(),y={id:m,Component:u,props:w,containerType:"right-panel",options:R};return n(F=>({...F,rightPanel:y})),m},[]),x=Je((u,w,R={})=>{let A=Ln(),m=w.title,y={...R,title:R.title||m||"Confirmation"},F={id:A,Component:u,props:w,containerType:"modal",options:y};return n(O=>({...O,modals:[...O.modals,F]})),A},[]),v=Je(u=>{n(w=>({leftPanel:w.leftPanel?.id===u?null:w.leftPanel,rightPanel:w.rightPanel?.id===u?null:w.rightPanel,modals:w.modals.filter(R=>R.id!==u)}))},[]),C=Je(()=>{n(yo)},[]),c=Je(()=>{n(u=>({...u,modals:[]}))},[]),I=Je(u=>t.leftPanel?.id===u?t.leftPanel:t.rightPanel?.id===u?t.rightPanel:t.modals.find(w=>w.id===u),[t]),k=Je((u,w)=>{n(R=>({leftPanel:R.leftPanel?.id===u?{...R.leftPanel,...w}:R.leftPanel,rightPanel:R.rightPanel?.id===u?{...R.rightPanel,...w}:R.rightPanel,modals:R.modals.map(A=>A.id===u?{...A,...w}:A)}))},[]),E=Je((u,w,R)=>{k(u,{dirty:w,dirtyOptions:R})},[k]),_=Sr(()=>({openLeftPanel:L,openRightPanel:M,openModal:x,close:v,closeAll:C,closeAllModals:c,getInstance:I,updateInstance:k,setDirty:E,registerCloseHandler:l,unregisterCloseHandler:s}),[L,M,x,v,C,c,I,k,E,l,s]);return Po(wo.Provider,{value:t,children:Po(Ro.Provider,{value:_,children:e})})},gt=()=>{let e=Co(wo);if(!e)throw new Error("usePanelState must be used within PanelProvider");return e},St=()=>{let e=Co(Ro);if(!e)throw new Error("usePanelActions must be used within PanelProvider");return e};import{useEffect as Mo,useRef as Ir}from"react";import{jsx as Tt,jsxs as Nn}from"react/jsx-runtime";var Er=({title:e,message:t,alert:n,alertType:o="info",useYesNoTitles:l=!1,onOK:s,onCancel:L})=>{let{requestClose:M,setIcon:x,setTitle:v}=Dt(),C=Ue(),c=ot(),I=Ir(null);Mo(()=>{if(e){let R=typeof e=="string"?e:C(e);v(R)}x&&x(Tt("span",{children:"\u2753"}))},[e,v,x,C]),Mo(()=>{I.current?.focus({preventScroll:!0})},[]);let k=typeof t=="string"?t:C(t),E=C(l?c.no:c.cancel),_=C(l?c.yes:c.ok),u=R=>{R.preventDefault(),s?.(),M()},w=()=>{L?.(),M()};return Nn("form",{onSubmit:u,className:"rdd-confirmation-form-body",children:[n&&Nn("div",{className:`rdd-confirmation-alert rdd-confirmation-alert-${o}`,children:[Tt("span",{children:"\u2139\uFE0F"}),Tt("span",{children:n})]}),Tt("div",{style:{fontSize:"0.9rem",color:"inherit",lineHeight:1.5},children:k}),Tt("hr",{style:{marginTop:"0.5rem",marginBottom:"0.5rem",opacity:.1}}),Nn("div",{className:"rdd-confirmation-actions",children:[Tt("button",{type:"button",className:"rdd-btn rdd-btn-sm rdd-btn-outline",onClick:w,children:E}),Tt("button",{type:"submit",className:"rdd-btn rdd-btn-sm rdd-btn-primary",ref:I,children:_})]})]})},kt=Er;function Ut(e){return e==="top-left"?"top-right":e==="top-right"?"top-left":e==="bottom-left"?"bottom-right":"bottom-left"}function ft(e){let{element:t,pointerId:n,startClientX:o,startClientY:l,captureStart:s,onMove:L,onEnd:M,activeClasses:x}=e;t.setPointerCapture(n),x?.forEach(({el:I,classes:k})=>I.classList.add(...k));let v=s(),C=I=>{L(I.clientX-o,I.clientY-l,v)},c=()=>{x?.forEach(({el:I,classes:k})=>I.classList.remove(...k)),t.removeEventListener("pointermove",C),t.removeEventListener("pointerup",c),t.removeEventListener("pointercancel",c),M?.(v)};t.addEventListener("pointermove",C),t.addEventListener("pointerup",c),t.addEventListener("pointercancel",c)}function Jt(e,t,n,o,l){let{minW:s,minH:L,maxW:M,maxH:x,minX:v,minY:C}=l,{x:c,y:I,w:k,h:E}=o;if(e.includes("e")&&(k=Math.max(s,Math.min(o.w+t,M??1/0))),e.includes("w")){let _=o.w-s,u=v!=null?-(o.x-v):-1/0,w=Math.max(u,Math.min(t,_));k=o.w-w,c=o.x+w}if(e.includes("s")&&(E=Math.max(L,Math.min(o.h+n,x??1/0))),e.includes("n")){let _=o.h-L,u=C!=null?-(o.y-C):-1/0,w=Math.max(u,Math.min(n,_));E=o.h-w,I=o.y+w}return{x:c,y:I,w:k,h:E}}import{useEffect as Lr,useState as zr}from"react";function Dn(){let[e,t]=zr(()=>document.documentElement.getAttribute("data-color-scheme")==="light"?"light":"dark");return Lr(()=>{let n=()=>{t(document.documentElement.getAttribute("data-color-scheme")==="light"?"light":"dark")};n();let o=new MutationObserver(n);return o.observe(document.documentElement,{attributes:!0,attributeFilter:["data-color-scheme"]}),()=>o.disconnect()},[]),e}import{Fragment as ko,jsx as T,jsxs as fe}from"react/jsx-runtime";var Io=(e,t)=>{if(!e)return null;if(e.type==="leaf")return e.id===t?e:null;for(let n of e.children){let o=Io(n,t);if(o)return o}return null},Qt=new Map,un="preserved-dom-container",An=fe("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:[T("rect",{x:"3",y:"3",width:"7",height:"9",rx:"1"}),T("rect",{x:"14",y:"3",width:"7",height:"5",rx:"1"}),T("rect",{x:"14",y:"12",width:"7",height:"9",rx:"1"}),T("rect",{x:"3",y:"16",width:"7",height:"5",rx:"1"})]}),$t={float:T("span",{className:"rdd-menu-icon",children:fe("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:[T("rect",{x:"2",y:"8",width:"14",height:"14",rx:"1"}),T("rect",{x:"8",y:"2",width:"14",height:"14",rx:"1"})]})}),minimize:T("span",{className:"rdd-menu-icon",children:T("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",style:{display:"block"},children:T("line",{x1:"4",y1:"18",x2:"20",y2:"18"})})}),restore:T("span",{className:"rdd-menu-icon",children:T("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:T("rect",{x:"4",y:"4",width:"16",height:"16",rx:"1"})})}),maximize:T("span",{className:"rdd-menu-icon",children:T("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:T("rect",{x:"2",y:"2",width:"20",height:"20",rx:"1"})})}),close:T("span",{className:"rdd-menu-icon",children:T("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:T("path",{d:"M18 6L6 18M6 6l12 12"})})})},Eo=e=>{let t=Qt.get(e);return t||(t=document.createElement("div"),t.style.width="100%",t.style.height="100%",Qt.set(e,t)),t},Nr=(e,t,n)=>{let o=t.component,l=n.get(o);if(!l)return console.warn(`[react-dockable-desktop] Panel "${e}" references component key "${o}" which is not registered. Add it to the WorkspaceClient panels config:
|
|
5
|
+
new WorkspaceClient({ panels: { "${o}": { component: YourComponent } } })`),fe("div",{className:"rdd-unregistered-panel",style:{border:"2px dashed #dc3545"},children:[T("h6",{style:{fontWeight:700,marginBottom:"0.25rem"},children:"\u26A0\uFE0F Component Unregistered"}),fe("span",{style:{fontSize:"0.875rem",color:"var(--rdd-text-secondary, #94a3b8)"},children:["Key: ",o]})]});let s=l.Component;return T(s,{...t.props??{},panelId:e})},Fn=new Map,mt=new Map,It=e=>{let t=mt.get(e);return t||(t={onClose:new Set,onMinimize:new Set,onRestore:new Set,onResize:new Set,onActivate:new Set,onDeactivate:new Set,onContainerTypeChange:new Set},mt.set(e,t)),t},Lo=({panelId:e})=>{let t=Ne(null);return Se(()=>{let n=t.current;if(!n)return;let o=Eo(e);n.appendChild(o);let l=new ResizeObserver(s=>{for(let L of s){let{width:M,height:x}=L.contentRect;if(M>0&&x>0){Fn.set(e,{width:M,height:x});let v=mt.get(e);v&&v.onResize.forEach(C=>C(M,x))}}});return l.observe(n),()=>{l.disconnect();let s=document.getElementById(un);s||(s=document.createElement("div"),s.id=un,s.style.display="none",document.body.appendChild(s)),s.appendChild(o)}},[e]),T("div",{ref:t,style:{width:"100%",height:"100%"}})},Dr=({panelId:e})=>{let t=Ve(),n=Kt(),o=Ue(),l=Ne(null),s=t.panels[e],L=s?n.get(s.component):null,M=L?.defaultOptions?.disableLivePreview||!1,x=Fn.get(e)||{width:800,height:500},v=x.width,C=x.height,k=Math.min(220/v,140/C);if(Se(()=>{if(M)return;let E=l.current;if(!E)return;let _=Qt.get(e);if(_)return E.appendChild(_),()=>{let u=document.getElementById(un);u||(u=document.createElement("div"),u.id=un,u.style.display="none",document.body.appendChild(u)),u.appendChild(_)}},[e,M]),M){let E=v*k,_=C*k,u=s?.title||L?.defaultOptions?.title||"Panel",w=ve(u,o),R=(Array.from(w)[0]||"P").toUpperCase();return T("div",{className:"rdd-taskbar-item-preview-frame",style:{width:`${E}px`,height:`${_}px`,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(108, 117, 125, 0.15)",border:"1px dashed var(--rdd-taskbar-item-border, rgba(255, 255, 255, 0.15))"},children:T("div",{style:{fontSize:"2rem",fontWeight:600,color:"var(--rdd-panel-title-color, var(--rdd-panel-text, rgba(255, 255, 255, 0.85)))",userSelect:"none"},children:R})})}return T("div",{className:"rdd-taskbar-item-preview-frame",style:{width:`${v*k}px`,height:`${C*k}px`},children:T("div",{ref:l,className:"rdd-taskbar-item-preview-host",style:{width:`${v}px`,height:`${C}px`,transform:`scale(${k})`,transformOrigin:"top left",position:"absolute",top:0,left:0,"--rdd-preview-scale":k}})})},Wr=({panelId:e,children:t})=>{let n=Ve(),{requestClosePanel:o,setPanelDirty:l,registerCloseGuard:s,unregisterCloseGuard:L,registerStateProvider:M,unregisterStateProvider:x,updatePanelTitle:v,minimizePanel:C}=qt(),c=n.minimized.some(m=>m.id===e),I=Ne(c);Se(()=>{let m=mt.get(e);m&&(c&&!I.current?m.onMinimize.forEach(y=>y()):!c&&I.current&&m.onRestore.forEach(y=>y()),I.current=c)},[c,e]);let k=n.activePanelId===e,E=Ne(k);Se(()=>{let m=E.current;E.current=k;let y=mt.get(e);y&&(k&&!m?y.onActivate.forEach(F=>F()):!k&&m&&y.onDeactivate.forEach(F=>F()))},[k,e]);let _=n.panels[e]?.state,u=_==="floating"?"floating-window":"dockable-panel",w=Ne(u);Se(()=>{if(_==="minimized")return;let m=w.current;w.current=u;let y=mt.get(e);y&&u!==m&&y.onContainerTypeChange.forEach(F=>F(u))},[u,_,e]),Se(()=>()=>{let m=mt.get(e);m&&(E.current&&m.onDeactivate.forEach(y=>y()),m.onClose.forEach(y=>y()),mt.delete(e))},[e]);let R=Ne(u),A=On.useMemo(()=>({requestClose:m=>o(e,m),setDirty:m=>l(e,m),onCloseRequested:m=>(s(e,m),()=>L(e)),registerStateProvider:m=>(M(e,m),()=>x(e)),setTitle:m=>v(e,m),instanceId:e,containerType:R.current,onClose:m=>{let y=It(e);return y.onClose.add(m),()=>y.onClose.delete(m)},onMinimize:m=>{let y=It(e);return y.onMinimize.add(m),()=>y.onMinimize.delete(m)},onRestore:m=>{let y=It(e);return y.onRestore.add(m),()=>y.onRestore.delete(m)},onResize:m=>{let y=It(e);return y.onResize.add(m),()=>y.onResize.delete(m)},requestMinimize:()=>C(e),getDimensions:()=>Fn.get(e)??null,onActivate:m=>{let y=It(e);return y.onActivate.add(m),()=>y.onActivate.delete(m)},onDeactivate:m=>{let y=It(e);return y.onDeactivate.add(m),()=>y.onDeactivate.delete(m)},onContainerTypeChange:m=>{let y=It(e);return y.onContainerTypeChange.add(m),()=>y.onContainerTypeChange.delete(m)}}),[e,o,l,s,L,M,x,v,C]);return T(Ct,{value:A,children:t})},zo=({node:e,path:t,onTabRightClick:n,activeDropZone:o,onHoverDropZone:l,onTabDragStart:s,hoveredTab:L,onTabHover:M,defaultPanelIcon:x,onRequestClosePanel:v})=>{let{updateSplitSizes:C}=qt();if(e.type==="leaf")return T(Ar,{leaf:e,onTabRightClick:n,activeDropZone:o,onHoverDropZone:l,onTabDragStart:s,hoveredTab:L,onTabHover:M,defaultPanelIcon:x,onRequestClosePanel:v});let c=e.orientation==="horizontal",I=(k,E)=>{E.preventDefault();let _=E.currentTarget,u=_.parentElement,w=u?c?u.clientWidth:u.clientHeight:c?1e3:800;ft({element:_,pointerId:E.pointerId,startClientX:E.clientX,startClientY:E.clientY,captureStart:()=>[...e.sizes],activeClasses:[{el:_,classes:["rdd-active"]},{el:document.body,classes:["rdd-resizing-active",c?"rdd-resizing-col-active":"rdd-resizing-row-active"]}],onMove:(R,A,m)=>{let y=(c?R:A)/w,F=[...m];F[k]+=y,F[k+1]-=y,F[k]>.1&&F[k+1]>.1&&C(t,F)}})};return T("div",{style:{display:"flex",flexDirection:c?"row":"column",width:"100%",height:"100%",overflow:"hidden",position:"relative"},children:e.children.map((k,E)=>{let _=e.sizes[E]*100;return fe(On.Fragment,{children:[T("div",{style:{flexGrow:e.sizes[E],flexBasis:`${_}%`,overflow:"hidden",position:"relative",minWidth:0,minHeight:0},children:T(zo,{node:k,path:[...t,E],onTabRightClick:n,activeDropZone:o,onHoverDropZone:l,onTabDragStart:s,hoveredTab:L,onTabHover:M,defaultPanelIcon:x,onRequestClosePanel:v})}),E<e.children.length-1&&T("div",{onPointerDown:u=>I(E,u),style:{cursor:c?"col-resize":"row-resize",width:c?"1px":"100%",height:c?"100%":"1px",zIndex:20},className:"rdd-resizer-bar"})]},E)})})},Ar=({leaf:e,onTabRightClick:t,activeDropZone:n,onHoverDropZone:o,onTabDragStart:l,hoveredTab:s,onTabHover:L,defaultPanelIcon:M,onRequestClosePanel:x})=>{let v=Ve(),C=Kt(),{openPanel:c,closeLeafGroup:I,setActivePanel:k}=Tn(),E=Ue(),_=ot(),{windowClass:u,windowBodyClass:w}=pt(),R=Ne(null),[A,m]=rt({left:!1,right:!1}),y=Wn(()=>{let a=R.current;a&&m({left:a.scrollLeft>0,right:a.scrollLeft<a.scrollWidth-a.clientWidth-1})},[]);Se(()=>{let a=R.current;if(!a)return;a.addEventListener("scroll",y,{passive:!0});let z=new ResizeObserver(y);return z.observe(a),y(),()=>{a.removeEventListener("scroll",y),z.disconnect()}},[y]);let F=a=>{R.current?.scrollBy({left:a==="left"?-120:120,behavior:"smooth"})},O=a=>{c(a,v.panels[a].component),k(a)};return fe("div",{"data-active-panel-id":e.activePanelId||"",className:`rdd-workspace-panel ${u??""}`,style:{overflow:"hidden",position:"relative"},children:[fe("div",{className:"rdd-workspace-tab-bar",style:{minHeight:"38px"},children:[A.left&&T("button",{className:"rdd-tab-scroll-btn rdd-tab-scroll-btn-left",onPointerDown:a=>a.stopPropagation(),onClick:()=>F("left"),tabIndex:-1,"aria-label":"Scroll tabs left",children:"\u2039"}),T("div",{ref:R,className:"rdd-tab-headers-container",style:{scrollbarWidth:"none"},onPointerMove:a=>{v.draggedPanelId&&a.target===a.currentTarget&&L(e.id,"EMPTY",e.panels.length,"right")},onPointerLeave:a=>{v.draggedPanelId&&a.target===a.currentTarget&&L(e.id,"",-1,null)},children:e.panels.map((a,z)=>{let H=v.panels[a];if(!H)return null;let B=e.activePanelId===a,J=v.activePanelId===a,Z=C.get(H.component)?.defaultOptions,me=s&&s.leafId===e.id&&s.panelId===a,le=z===e.panels.length-1,X=s&&s.leafId===e.id&&s.panelId==="EMPTY"&&le,j=me?s.side==="left"?"rdd-drag-hover-left":"rdd-drag-hover-right":X?"rdd-drag-hover-right":"",K=B?J?"rdd-active rdd-workspace-tab-active-focused":"rdd-active rdd-workspace-tab-active-unfocused":"rdd-workspace-tab-inactive";return fe("div",{"data-tab-id":a,"data-leaf-id":e.id,"data-tab-index":String(z),onClick:()=>O(a),onPointerDown:Y=>{Z?.canDrag!==!1&&l(a,Y)},onContextMenu:Y=>t(a,Y),onPointerMove:Y=>{if(v.draggedPanelId&&Y.pointerType!=="touch"){let re=Y.currentTarget.getBoundingClientRect(),Oe=Y.clientX-re.left<re.width/2?"left":"right";L(e.id,a,z,Oe)}},onPointerLeave:()=>{v.draggedPanelId&&L(e.id,"",-1,null)},className:`rdd-workspace-tab ${K} ${j}`,style:{cursor:Z?.canDrag===!1?"default":"pointer"},children:[fe("span",{className:"rdd-text-truncate",style:{maxWidth:"120px",display:"flex",alignItems:"center"},children:[T("span",{className:"rdd-workspace-tab-icon",children:Z?.icon||M||An}),fe("span",{children:[ve(H.title,E),H.dirty?" *":""]})]}),Z?.renderHeaderActions&&T("span",{className:"rdd-tab-header-actions",onClick:Y=>Y.stopPropagation(),onPointerDown:Y=>Y.stopPropagation(),children:Z.renderHeaderActions(a)}),Z?.canClose!==!1&&T("span",{onClick:Y=>{Y.stopPropagation(),x(a)},title:ve(_.closeTab,E),className:"rdd-close-tab-x",style:{width:"18px",height:"18px",...Z?.renderHeaderActions?{}:{marginInlineStart:"auto"}},children:T("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:T("path",{d:"M18 6L6 18M6 6l12 12"})})})]},a)})}),A.right&&T("button",{className:"rdd-tab-scroll-btn rdd-tab-scroll-btn-right",onPointerDown:a=>a.stopPropagation(),onClick:()=>F("right"),tabIndex:-1,"aria-label":"Scroll tabs right",children:"\u203A"}),e.panels.length===0&&e.keepOnEmpty&&e.canClose!==!1&&T("span",{onClick:()=>I(e.id),className:"rdd-close-tab-x rdd-header-close-empty-group",style:{width:"18px",height:"18px",cursor:"pointer"},title:ve(_.closeEmptyGroup,E),children:T("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:T("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),fe("div",{className:`rdd-panel-body ${w??""}`,style:{position:"relative",overflow:"hidden"},children:[e.activePanelId&&v.panels[e.activePanelId]?T(Lo,{panelId:e.activePanelId},e.activePanelId):T("div",{className:"rdd-empty-leaf-placeholder",children:T("span",{children:"Empty Workspace Section"})}),v.draggedPanelId!==null&&(()=>{let a=z=>n?.leafId===e.id&&n.position===z;return T("div",{className:"rdd-dock-drop-zone-overlay",children:fe("div",{className:"rdd-dock-target-cross",children:[T("div",{"data-leaf-id":e.id,"data-drop-zone":"top",onPointerEnter:()=>o(e.id,"top"),onPointerLeave:()=>o(e.id,null),className:`rdd-dock-target-box rdd-dock-target-top${a("top")?" rdd-dock-target-box--active":""}`,children:"\u25B2"}),T("div",{"data-leaf-id":e.id,"data-drop-zone":"bottom",onPointerEnter:()=>o(e.id,"bottom"),onPointerLeave:()=>o(e.id,null),className:`rdd-dock-target-box rdd-dock-target-bottom${a("bottom")?" rdd-dock-target-box--active":""}`,children:"\u25BC"}),T("div",{"data-leaf-id":e.id,"data-drop-zone":"left",onPointerEnter:()=>o(e.id,"left"),onPointerLeave:()=>o(e.id,null),className:`rdd-dock-target-box rdd-dock-target-left${a("left")?" rdd-dock-target-box--active":""}`,children:"\u25C0"}),T("div",{"data-leaf-id":e.id,"data-drop-zone":"right",onPointerEnter:()=>o(e.id,"right"),onPointerLeave:()=>o(e.id,null),className:`rdd-dock-target-box rdd-dock-target-right${a("right")?" rdd-dock-target-box--active":""}`,children:"\u25B6"}),T("div",{"data-leaf-id":e.id,"data-drop-zone":"center",onPointerEnter:()=>o(e.id,"center"),onPointerLeave:()=>o(e.id,null),className:`rdd-dock-target-box rdd-dock-target-center${a("center")?" rdd-dock-target-box--active":""}`,children:"\u25A3"})]})})})(),v.draggedPanelId!==null&&n!==null&&n.leafId===e.id&&T("div",{className:"rdd-dock-preview-highlight",style:(()=>{let a=n.position,z=`${v.splitRatio*100}%`,H=`${(1-v.splitRatio)*100}%`;return{left:a==="right"?H:"0",top:a==="bottom"?H:"0",width:a==="left"||a==="right"?z:"100%",height:a==="top"||a==="bottom"?z:"100%"}})()})]})]})},Or=({skin:e="vscode",defaultPanelIcon:t,taskbarVisibility:n="autohide",contextMenuAdapter:o=Ht,animations:l=!0})=>{let s=Ve(),L=Kt(),{restorePanel:M,minimizePanel:x,requestClosePanel:v,maximizePanel:C,updateFloatingPosition:c,focusPanel:I,floatPanel:k,setDraggedPanelId:E,dockPanelToGroup:_,movePanelOrder:u,dockPanelToWorkspaceEdge:w,setActivePanel:R,getPanelContextMenuItems:A,showContextMenu:m,registerContextMenuFn:y}=Tn(),{openModal:F}=St(),O=Ue(),a=ot(),z=On.useCallback(r=>{let P=s.panels[r];v(r,{onConfirm:f=>new Promise(h=>{let p=f||P?.dirtyOptions,N=P?ve(P.title,O):"Panel";F(kt,{title:p?.title||a.unsavedChangesTitle,message:p?.message||{id:a.unsavedChangesMessage.id,defaultMessage:a.unsavedChangesMessage.defaultMessage,values:{title:N}},alert:p?.alert,alertType:p?.alertType||"danger",useYesNoTitles:!0,onOK:()=>h(!0),onCancel:()=>h(!1)},{size:"small"})})})},[v,s.panels,O,F,a]),{windowClass:H,windowBodyClass:B}=pt(),J=So(Bt),ee=Ne(null);Se(()=>y(J!==null?r=>J.show(r):r=>ee.current?.show(r)),[J,y]);let Z=Ne(null),[me,le]=rt(!1),X=Ne(null),j=Ne(s.minimized.length),[K,Y]=rt(null),re=Ne(null),ue=Ne("mouse"),[Oe,U]=rt(!1),Fe=J!==null?J.isOpen:Oe;Se(()=>()=>{re.current&&clearTimeout(re.current)},[]),Se(()=>{K&&(s.minimized.some(P=>P.id===K.id)||Y(null))},[s.minimized,K]),Se(()=>{if(!K?.fromTouch)return;let r=P=>{P.pointerType!=="touch"||document.querySelector(".rdd-taskbar-item-tooltip")?.contains(P.target)||Y(null)};return document.addEventListener("pointerdown",r,{capture:!0}),()=>document.removeEventListener("pointerdown",r,{capture:!0})},[K?.fromTouch]);let[$e,Be]=rt(null),Ge=Ne(null),[st,tt]=rt({x:0,y:0}),[nt,qe]=rt(null),je=Ne(null),se=r=>{qe(r),je.current=r},[te,Ee]=rt(null),$=Ne(null),q=r=>{Ee(r),$.current=r},ce=So(Ft)?.isRtl??!1,[he,be]=rt(null),ye=Ne(null),De=(r,P,f,h)=>{let p=h?{leafId:r,panelId:P,index:f,side:h}:null;be(p),ye.current=p},_e=(r,P)=>{let f=P?{leafId:r,position:P}:null;Be(f),Ge.current=f,f&&(se(null),q(null))},We=(r,P)=>{let f=document.elementsFromPoint(r,P),h=!1,p=!1,N=!1;for(let D of f)if(D instanceof HTMLElement){if(!h&&D.dataset.dropZone){let W=D.dataset.leafId;if(W){let G=D.dataset.dropZone;Be({leafId:W,position:G}),Ge.current={leafId:W,position:G},h=!0}}if(!N&&D.dataset.tabId){let W=D.dataset.leafId,G=parseInt(D.dataset.tabIndex||"0",10);if(W){let Q=D.getBoundingClientRect(),V=r-Q.left<Q.width/2?"left":"right";be({leafId:W,panelId:D.dataset.tabId,index:G,side:V}),ye.current={leafId:W,panelId:D.dataset.tabId,index:G,side:V},N=!0}}if(!p&&D.dataset.edgeTrigger&&(se(D.dataset.edgeTrigger),p=!0),h&&p&&N)break}h||(Be(null),Ge.current=null),p||se(null),N||(be(null),ye.current=null)},Me=300,at=8,Pe=()=>{E(null),Be(null),Ge.current=null,be(null),ye.current=null,se(null)},Ce=r=>s.isRtl?r==="left"?"right":r==="right"?"left":r:r,Le=(r,P)=>{let f=Ge.current,h=ye.current,p=je.current,N=$.current;if(p)w(r,Ce(p));else if(h){let D=h.index;h.side==="right"&&(D+=1);let W=Io(s.gridRoot,h.leafId);if(W){let G=W.panels.indexOf(r);G!==-1&&G<D&&(D-=1)}u(r,h.leafId,D)}else f?_(r,f.leafId,Ce(f.position)):N?k(r,void 0,ce?Ut(N):N):k(r,{x:P.clientX-150,y:P.clientY-15,width:450,height:350});q(null),Pe()},He=(r,P)=>{if(P.pointerType==="mouse"&&P.button!==0)return;P.preventDefault();let f=P.currentTarget,h=P.clientX,p=P.clientY;if(P.pointerType==="touch"){let N=P.pointerId,D=!1,W=()=>{D=!0,clearTimeout(Q),f.removeEventListener("pointermove",G),f.removeEventListener("pointerup",W),f.removeEventListener("pointercancel",W)},G=V=>{Math.hypot(V.clientX-h,V.clientY-p)>at&&W()},Q=setTimeout(()=>{if(D)return;f.removeEventListener("pointermove",G),f.removeEventListener("pointerup",W),f.removeEventListener("pointercancel",W);try{f.setPointerCapture(N)}catch{return}f.classList.add("rdd-long-press-active"),document.body.classList.add("rdd-dragging-active"),navigator.vibrate&&navigator.vibrate(10);let V=!1,oe=de=>{V||(V=!0,E(r)),tt({x:de.clientX,y:de.clientY}),We(de.clientX,de.clientY)},pe=de=>{f.classList.remove("rdd-long-press-active"),document.body.classList.remove("rdd-dragging-active"),f.removeEventListener("pointermove",oe),f.removeEventListener("pointerup",pe),f.removeEventListener("pointercancel",ie),V?Le(r,de):Ye(r,de)},ie=()=>{f.classList.remove("rdd-long-press-active"),document.body.classList.remove("rdd-dragging-active"),f.removeEventListener("pointermove",oe),f.removeEventListener("pointerup",pe),f.removeEventListener("pointercancel",ie),V&&Pe()};f.addEventListener("pointermove",oe),f.addEventListener("pointerup",pe),f.addEventListener("pointercancel",ie)},Me);f.addEventListener("pointermove",G),f.addEventListener("pointerup",W),f.addEventListener("pointercancel",W)}else{let N=!1,D=Q=>{let V=Q.clientX-h,oe=Q.clientY-p;!N&&(Math.abs(V)>5||Math.abs(oe)>5)&&(N=!0,E(r)),N&&tt({x:Q.clientX,y:Q.clientY})},W=Q=>{document.body.classList.remove("rdd-dragging-active"),window.removeEventListener("pointermove",D),window.removeEventListener("pointerup",W),window.removeEventListener("pointercancel",G),N&&Le(r,Q)},G=()=>{document.body.classList.remove("rdd-dragging-active"),window.removeEventListener("pointermove",D),window.removeEventListener("pointerup",W),window.removeEventListener("pointercancel",G),N&&Pe()};document.body.classList.add("rdd-dragging-active"),window.addEventListener("pointermove",D),window.addEventListener("pointerup",W),window.addEventListener("pointercancel",G)}},Ye=(r,P)=>{P.preventDefault();let f=s.panels[r];if(!f)return;let p=L.get(f.component)?.defaultOptions,N=[];if(p?.canDrag!==!1&&N.push({label:ve(a.floatWindow,O),icon:$t.float,action:()=>k(r)}),p?.canMinimize!==!1&&N.push({label:ve(a.minimizePanel,O),icon:$t.minimize,action:()=>x(r)}),N.length>0&&p?.canClose!==!1&&N.push({separator:!0}),p?.canClose!==!1&&N.push({label:ve(a.closeTab,O),icon:$t.close,action:()=>z(r)}),N.length===0)return;let D=A(r),W=D.length>0?[...N,{separator:!0},...D]:N;m({event:P,items:W})},ze=(r,P)=>{P.preventDefault(),Y(null),m({event:P,items:[{label:ve(a.restorePanel,O),icon:$t.restore,action:()=>M(r)},{label:ve(a.maximizePanel,O),icon:$t.maximize,action:()=>C(r)},{separator:!0},{label:ve(a.closePanel,O),icon:$t.close,action:()=>z(r)}]})};Se(()=>{let r=Object.keys(s.panels);for(let P of Array.from(Qt.keys()))r.includes(P)||Qt.delete(P)},[s.panels]),Se(()=>{let r=()=>{s.draggedPanelId!==null&&(E(null),Be(null),be(null))};return window.addEventListener("blur",r),()=>{window.removeEventListener("blur",r)}},[s.draggedPanelId]);let ut=Ne(null),[lt,yt]=rt({width:1024,height:768});Se(()=>{let r=ut.current;if(!r)return;let P=!1,f=new ResizeObserver(h=>{if(!h||h.length===0)return;let p=h[0].contentRect;if(process.env.NODE_ENV==="development"&&p.height<10&&!P){P=!0;let N=r,D=r.parentElement;for(;D&&D!==document.documentElement&&D.getBoundingClientRect().height<10;){N=D;D=D.parentElement}let W=N.tagName.toLowerCase(),G=N.id?` id="${N.id}"`:"",Q=N.className?` class="${N.className}"`:"",V=N===r?"the WindowManager container itself":`a wrapper element: <${W}${G}${Q}>`;console.warn(`[react-dockable-desktop] Workspace height is 0px \u2014 the workspace will be invisible.
|
|
6
6
|
|
|
7
7
|
Zero height found at: ${V}
|
|
8
8
|
|
|
@@ -20,5 +20,5 @@ Fix options:
|
|
|
20
20
|
.layout { display: flex; flex-direction: column; height: 100vh; }
|
|
21
21
|
.workspace { flex: 1; min-height: 0; }
|
|
22
22
|
|
|
23
|
-
3. Verify styles.css is imported \u2014 it anchors html, body, #root to 100% height.`)}yt({width:Math.max(100,f.width),height:Math.max(100,f.height)})});return g.observe(r),()=>{g.disconnect()}},[]),Se(()=>{let r=lt.width,y=lt.height;s.floating.forEach(g=>{let h=typeof g.width=="string"?parseFloat(g.width):g.width,f=typeof g.height=="string"?parseFloat(g.height):g.height,T=typeof g.x=="string"?parseFloat(g.x):g.x,N=typeof g.y=="string"?parseFloat(g.y):g.y,D=h,K=f,te=T,V=N,oe=!1;if(D>r&&(D=Math.max(200,r-20),oe=!0),K>y&&(K=Math.max(150,y-40),oe=!0),!g.anchor){let pe=r-100;te>pe&&(te=Math.max(0,pe),oe=!0);let ie=y-40;V>ie&&(V=Math.max(0,ie),oe=!0)}oe&&u(g.id,{x:te,y:V,width:D,height:K})})},[lt,s.floating,u]),Se(()=>{let r=y=>{if(y.button!==0)return;let g=y.target;if(!g||typeof g.closest!="function")return;let h=g.closest(".rdd-floating-window");if(h){let T=h.getAttribute("data-window-id");T&&(R(T),I(T));return}let f=g.closest(".rdd-workspace-panel");if(f){let T=f.getAttribute("data-active-panel-id");T&&R(T)}};return document.addEventListener("pointerdown",r),()=>{document.removeEventListener("pointerdown",r)}},[I,R]);let Pt=(r,y)=>{y.preventDefault();let g=s.floating.find(V=>V.id===r);if(!g||g.maximized)return;I(r);let h=y.currentTarget,f=h.closest(".rdd-floating-window"),T=y.clientX,N=y.clientY,D=f?f.offsetLeft:0,K=f?f.offsetTop:0,te=()=>{let V=Ge.current,oe=ye.current,pe=je.current,ie=$.current;if(ie)u(r,{anchor:ce?Ut(ie):ie});else if(pe)w(r,Ce(pe));else if(oe){let de=oe.index;oe.side==="right"&&(de+=1),p(r,oe.leafId,de)}else V&&_(r,V.leafId,Ce(V.position));q(null),Pe()};if(y.pointerType==="touch"){let V=y.pointerId,oe=!1,pe=()=>{oe=!0,clearTimeout(de),h.removeEventListener("pointermove",ie),h.removeEventListener("pointerup",pe),h.removeEventListener("pointercancel",pe)},ie=ge=>{Math.hypot(ge.clientX-T,ge.clientY-N)>at&&pe()},de=setTimeout(()=>{if(oe)return;h.removeEventListener("pointermove",ie),h.removeEventListener("pointerup",pe),h.removeEventListener("pointercancel",pe);try{h.setPointerCapture(V)}catch{return}h.classList.add("rdd-long-press-active"),document.body.classList.add("rdd-dragging-active"),E(r);let ge=Lt=>{let zt=Lt.clientX-T,Nt=Lt.clientY-N;u(r,{x:D+zt,y:K+Nt,anchor:null}),We(Lt.clientX,Lt.clientY)},Te=()=>{h.classList.remove("rdd-long-press-active"),document.body.classList.remove("rdd-dragging-active"),h.removeEventListener("pointermove",ge),h.removeEventListener("pointerup",Te),h.removeEventListener("pointercancel",xt),te()},xt=()=>{h.classList.remove("rdd-long-press-active"),document.body.classList.remove("rdd-dragging-active"),h.removeEventListener("pointermove",ge),h.removeEventListener("pointerup",Te),h.removeEventListener("pointercancel",xt),Pe()};h.addEventListener("pointermove",ge),h.addEventListener("pointerup",Te),h.addEventListener("pointercancel",xt)},Me);h.addEventListener("pointermove",ie),h.addEventListener("pointerup",pe),h.addEventListener("pointercancel",pe)}else{let V=!1,oe=de=>{let ge=de.clientX-T,Te=de.clientY-N;!V&&(Math.abs(ge)>5||Math.abs(Te)>5)&&(V=!0,E(r)),V&&u(r,{x:D+ge,y:K+Te,anchor:null})},pe=()=>{document.body.classList.remove("rdd-dragging-active"),window.removeEventListener("pointermove",oe),window.removeEventListener("pointerup",pe),window.removeEventListener("pointercancel",ie),V&&te()},ie=()=>{document.body.classList.remove("rdd-dragging-active"),window.removeEventListener("pointermove",oe),window.removeEventListener("pointerup",pe),window.removeEventListener("pointercancel",ie),V&&Pe()};document.body.classList.add("rdd-dragging-active"),window.addEventListener("pointermove",oe),window.addEventListener("pointerup",pe),window.addEventListener("pointercancel",ie)}},i=(r,y,g)=>{g.preventDefault(),g.stopPropagation();let h=s.floating.find(ge=>ge.id===r);if(!h||h.maximized)return;I(r);let f=g.currentTarget,T=f.closest(".rdd-floating-window"),N={x:T?T.offsetLeft:0,y:T?T.offsetTop:0,w:T?T.offsetWidth:400,h:T?T.offsetHeight:300},D=lt.width,K=lt.height,te=typeof h.x=="string"?parseFloat(h.x):h.x,V=typeof h.y=="string"?parseFloat(h.y):h.y,oe=typeof h.width=="string"?parseFloat(h.width):h.width,pe=typeof h.height=="string"?parseFloat(h.height):h.height,ie=y==="se"&&Math.abs(te+oe-D)<4,de=y==="se"&&Math.abs(V+pe-K)<4;ft({element:f,pointerId:g.pointerId,startClientX:g.clientX,startClientY:g.clientY,captureStart:()=>N,activeClasses:[{el:document.body,classes:["rdd-resizing-active"]}],onMove:(ge,Te,xt)=>{let Lt=Jt(y,ge,Te,xt,{minW:200,minH:150}),{x:zt,y:Nt,w:xn,h:Cn}=Lt;ie&&(zt=D-xn,zt<0&&(zt=0,xn=D)),de&&(Nt=K-Cn,Nt<0&&(Nt=0,Cn=K)),u(r,{x:zt,y:Nt,width:xn,height:Cn})}})},b=r=>{if(Z.current){let y=r==="left"?-150:150;Z.current.scrollBy({left:y,behavior:"smooth"})}},c=Wn(()=>{Y.current&&clearTimeout(Y.current),le(!0)},[]),a=Wn(()=>{Y.current=setTimeout(()=>le(!1),400)},[]);Se(()=>{n==="autohide"&&s.minimized.length>j.current&&(Y.current&&clearTimeout(Y.current),le(!0),Y.current=setTimeout(()=>le(!1),2e3)),j.current=s.minimized.length},[s.minimized.length,n]);let A=Dn();return Se(()=>(e?document.documentElement.setAttribute("data-workspace-skin",e):document.documentElement.removeAttribute("data-workspace-skin"),()=>{document.documentElement.removeAttribute("data-workspace-skin")}),[e]),Se(()=>(A==="light"?document.documentElement.setAttribute("data-color-scheme","light"):document.documentElement.removeAttribute("data-color-scheme"),()=>{document.documentElement.removeAttribute("data-color-scheme")}),[A]),Se(()=>(d?document.documentElement.classList.remove("rdd-no-animations"):document.documentElement.classList.add("rdd-no-animations"),()=>{document.documentElement.classList.remove("rdd-no-animations")}),[d]),fe("div",{className:`rdd-workspace${d?"":" rdd-no-animations"}`,"data-workspace-skin":e,"data-color-scheme":A,style:{display:"flex",flexDirection:"column",position:"relative",width:"100%",height:"100%",overflow:"hidden",userSelect:"none"},dir:s.dir,children:[fe("div",{ref:ut,className:s.draggedPanelId?"rdd-dragging-active":void 0,style:{flexGrow:1,width:"100%",position:"relative",overflow:"hidden"},children:[s.draggedPanelId!==null&&fe(ko,{children:[S("div",{"data-edge-trigger":"left",className:"rdd-workspace-edge-trigger rdd-edge-trigger-left",onPointerEnter:()=>se("left"),onPointerLeave:()=>se(null)}),S("div",{"data-edge-trigger":"right",className:"rdd-workspace-edge-trigger rdd-edge-trigger-right",onPointerEnter:()=>se("right"),onPointerLeave:()=>se(null)}),S("div",{"data-edge-trigger":"top",className:"rdd-workspace-edge-trigger rdd-edge-trigger-top",onPointerEnter:()=>se("top"),onPointerLeave:()=>se(null)}),S("div",{"data-edge-trigger":"bottom",className:"rdd-workspace-edge-trigger rdd-edge-trigger-bottom",onPointerEnter:()=>se("bottom"),onPointerLeave:()=>se(null)})]}),s.draggedPanelId!==null&&["top-left","top-right","bottom-left","bottom-right"].map(r=>S("div",{className:`rdd-corner-zone rdd-corner-zone--${r}${ee===r?" rdd-corner-zone--hovered":""}`,onPointerEnter:()=>{q(r),se(null)},onPointerLeave:()=>q(null),"aria-hidden":"true"},r)),s.draggedPanelId!==null&&nt!==null&&S("div",{className:"rdd-workspace-edge-preview",style:(()=>{let r=`${s.edgeSplitRatio*100}%`;switch(nt){case"left":return{left:0,top:0,bottom:0,width:r};case"right":return{right:0,top:0,bottom:0,width:r};case"top":return{top:0,left:0,right:0,height:r};case"bottom":return{bottom:0,left:0,right:0,height:r}}})()}),S("div",{style:{width:"100%",height:"100%",overflow:"hidden",position:"relative"},children:s.gridRoot?S(zo,{node:s.gridRoot,path:[],onTabRightClick:Ye,activeDropZone:$e,onHoverDropZone:_e,onTabDragStart:He,hoveredTab:he,onTabHover:De,defaultPanelIcon:t,onRequestClosePanel:z}):S("div",{className:"rdd-empty-workspace-grid",children:"Grid Empty"})}),s.floating.map(r=>{let y=s.panels[r.id];if(!y)return null;let g=r.maximized,h=s.draggedPanelId===r.id,f=s.activePanelId===r.id,N=L.get(y.component)?.defaultOptions;return fe("div",{"data-window-id":r.id,dir:s.dir,onPointerDownCapture:()=>{R(r.id),I(r.id)},className:`rdd-floating-window ${g?"rdd-maximized":""} ${f?"rdd-window-focused":""} ${H??""}`,style:(()=>{let te=typeof r.width=="number"?`${r.width}px`:r.width,V=typeof r.height=="number"?`${r.height}px`:r.height;if(g)return{position:"absolute",left:0,top:0,width:"100%",height:"100%",zIndex:r.z,pointerEvents:h?"none":"auto"};if(r.anchor){let oe=s.floating.filter(Te=>Te.anchor===r.anchor&&!Te.maximized),pe=oe.findIndex(Te=>Te.id===r.id),ie=8;for(let Te=0;Te<pe;Te++){let xt=typeof oe[Te].height=="number"?oe[Te].height:parseFloat(oe[Te].height);ie+=xt+8}let de=r.anchor.startsWith("top");return{position:"absolute",[r.anchor.endsWith("-right")?"insetInlineEnd":"insetInlineStart"]:8,[de?"top":"bottom"]:ie,width:te,height:V,zIndex:r.z,transition:h?"none":"top 0.2s ease, bottom 0.2s ease",pointerEvents:h?"none":"auto"}}return{position:"absolute",left:typeof r.x=="number"?`${r.x}px`:r.x,top:typeof r.y=="number"?`${r.y}px`:r.y,width:te,height:V,zIndex:r.z,pointerEvents:h?"none":"auto"}})(),children:[fe("div",{onDoubleClick:()=>C(r.id),onPointerDown:D=>{N?.canDrag!==!1&&Pt(r.id,D)},className:"rdd-floating-window-titlebar rdd-cursor-move",style:{cursor:g||N?.canDrag===!1?"default":"move"},children:[fe("span",{className:"rdd-floating-window-title",children:[S("span",{className:"rdd-window-title-icon",children:N?.icon||t||An}),fe("span",{children:[ve(y.title,O),y.dirty?" *":""]})]}),fe("div",{className:"rdd-titlebar-actions",style:{gap:"var(--rdd-header-button-gap, 4px)"},onPointerDown:D=>D.stopPropagation(),children:[N?.renderHeaderActions&&S("div",{className:"rdd-window-header-actions",children:N.renderHeaderActions(r.id)}),W(r.id).length>0&&S("button",{type:"button",className:"rdd-custom-tab-btn rdd-btn-more-actions",title:"More actions",onClick:D=>{D.stopPropagation();let K=W(r.id);K.length!==0&&m({event:D,items:K})},children:fe("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"currentColor",style:{display:"block"},children:[S("circle",{cx:"12",cy:"5",r:"2"}),S("circle",{cx:"12",cy:"12",r:"2"}),S("circle",{cx:"12",cy:"19",r:"2"})]})}),S("button",{type:"button",title:g?ve(l.restoreSize,O):ve(l.maximize,O),onClick:()=>C(r.id),className:"rdd-custom-tab-btn rdd-btn-maximize-tab",children:S("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:S("rect",{x:"4",y:"4",width:"16",height:"16",rx:"1.5"})})}),N?.canMinimize!==!1&&S("button",{type:"button",title:ve(l.minimize,O),onClick:()=>x(r.id),className:"rdd-custom-tab-btn rdd-btn-minimize-tab",children:S("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:S("path",{d:"M5 12h14"})})}),N?.canClose!==!1&&S("button",{type:"button",title:ve(l.close,O),onClick:()=>z(r.id),className:"rdd-custom-tab-btn rdd-btn-close-tab",children:S("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:S("path",{d:"M18 6L6 18M6 6l12 12"})})})]})]}),S("div",{className:B??void 0,style:{flexGrow:1,width:"100%",overflow:"hidden",position:"relative",isolation:"isolate"},children:S(Lo,{panelId:r.id},r.id)}),!g&&fe(ko,{children:[S("div",{onPointerDown:D=>i(r.id,"n",D),className:"rdd-resize-handle rdd-resize-n"}),S("div",{onPointerDown:D=>i(r.id,"ne",D),className:"rdd-resize-handle rdd-resize-ne"}),S("div",{onPointerDown:D=>i(r.id,"e",D),className:"rdd-resize-handle rdd-resize-e"}),S("div",{onPointerDown:D=>i(r.id,"se",D),className:"rdd-resize-handle rdd-resize-se"}),S("div",{onPointerDown:D=>i(r.id,"s",D),className:"rdd-resize-handle rdd-resize-s"}),S("div",{onPointerDown:D=>i(r.id,"sw",D),className:"rdd-resize-handle rdd-resize-sw"}),S("div",{onPointerDown:D=>i(r.id,"w",D),className:"rdd-resize-handle rdd-resize-w"}),S("div",{onPointerDown:D=>i(r.id,"nw",D),className:"rdd-resize-handle rdd-resize-nw"})]})]},r.id)})]}),(n==="always"||s.minimized.length>0)&&fe("div",{className:["rdd-taskbar-footer-container",`rdd-taskbar-mode-${n}`,n==="autohide"&&me?"rdd-taskbar-expanded":""].filter(Boolean).join(" "),style:{height:"48px",zIndex:100},onPointerEnter:n==="autohide"?c:void 0,onPointerLeave:n==="autohide"?a:void 0,children:[n==="autohide"&&S("div",{className:"rdd-taskbar-peek-handle"}),S("button",{type:"button",onClick:()=>b("left"),className:"rdd-taskbar-nav-btn",style:{display:s.minimized.length>4?"block":"none"},children:"\u25C0"}),S("div",{ref:Z,className:"rdd-taskbar-items-container",style:{scrollSnapType:"x mandatory"},children:s.minimized.map(r=>{let g=L.get(r.component)?.defaultOptions?.icon||t||An;return S("div",{onClick:()=>{ue.current!=="touch"&&(G(null),M(r.id))},onContextMenu:h=>ze(r.id,h),onPointerDown:h=>{if(ue.current=h.pointerType,h.pointerType!=="touch")return;let f=h.currentTarget,T=h.clientX,N=h.clientY,D=h.pointerId,K=!1,te=()=>{K=!0,clearTimeout(pe),f.removeEventListener("pointermove",oe),f.removeEventListener("pointerup",V),f.removeEventListener("pointercancel",te)},V=()=>{te();let ie=f.getBoundingClientRect();X?.id===r.id?(M(r.id),G(null)):G({id:r.id,rect:ie,title:r.title,component:r.component,fromTouch:!0})},oe=ie=>{Math.hypot(ie.clientX-T,ie.clientY-N)>at&&te()},pe=setTimeout(()=>{if(K)return;f.removeEventListener("pointermove",oe),f.removeEventListener("pointerup",V),f.removeEventListener("pointercancel",te);try{f.setPointerCapture(D)}catch{return}navigator.vibrate&&navigator.vibrate(10);let ie=de=>{f.removeEventListener("pointerup",ie),f.removeEventListener("pointercancel",ie),ze(r.id,de)};f.addEventListener("pointerup",ie),f.addEventListener("pointercancel",ie)},Me);f.addEventListener("pointermove",oe),f.addEventListener("pointerup",V),f.addEventListener("pointercancel",te)},onPointerEnter:h=>{if(h.pointerType==="touch"||Fe)return;re.current&&clearTimeout(re.current);let f=h.currentTarget.getBoundingClientRect();h.clientX>=f.left&&h.clientX<=f.right&&h.clientY>=f.top&&h.clientY<=f.bottom&&G({id:r.id,rect:f,title:r.title,component:r.component})},onPointerLeave:h=>{h.pointerType!=="touch"&&(re.current=setTimeout(()=>{G(null)},150))},className:"rdd-taskbar-glassmorphic-item",style:{backdropFilter:"blur(6px)",transition:"all 0.2s",cursor:"pointer",scrollSnapAlign:"start",width:"38px",height:"38px",position:"relative",padding:0},children:S("span",{className:"rdd-taskbar-item-icon",children:g})},r.id)})}),X&&To(fe("div",{className:"rdd-taskbar-item-tooltip",dir:s.dir,style:{position:"fixed",left:`${X.rect.left+X.rect.width/2}px`,top:`${X.rect.top-8}px`,transform:"translateX(-50%) translateY(-100%)",opacity:1,pointerEvents:"auto",zIndex:999999},onPointerEnter:()=>{re.current&&clearTimeout(re.current)},onPointerLeave:r=>{r.pointerType!=="touch"&&G(null)},onClick:()=>{M(X.id),G(null)},onContextMenu:r=>ze(X.id,r),onPointerDown:r=>{if(r.pointerType!=="touch")return;let y=X.id,g=r.currentTarget,h=r.clientX,f=r.clientY,T=r.pointerId,N=!1,D=()=>{N=!0,clearTimeout(te),g.removeEventListener("pointermove",K),g.removeEventListener("pointerup",D),g.removeEventListener("pointercancel",D)},K=V=>{Math.hypot(V.clientX-h,V.clientY-f)>at&&D()},te=setTimeout(()=>{if(N)return;g.removeEventListener("pointermove",K),g.removeEventListener("pointerup",D),g.removeEventListener("pointercancel",D);try{g.setPointerCapture(T)}catch{return}navigator.vibrate&&navigator.vibrate(10);let V=oe=>{g.removeEventListener("pointerup",V),g.removeEventListener("pointercancel",V),ze(y,oe)};g.addEventListener("pointerup",V),g.addEventListener("pointercancel",V)},Me);g.addEventListener("pointermove",K),g.addEventListener("pointerup",D),g.addEventListener("pointercancel",D)},children:[fe("div",{className:"rdd-tooltip-header-row",children:[fe("span",{className:"rdd-tooltip-title-text rdd-text-truncate",style:{maxWidth:"140px"},children:[ve(X.title,O),s.panels[X.id]?.dirty?" *":""]}),S("span",{onClick:r=>{r.stopPropagation(),z(X.id),G(null)},title:ve(l.closePanel,O),className:"rdd-tooltip-close-x",children:S("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:S("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),S(Dr,{panelId:X.id})]}),document.body),S("button",{type:"button",onClick:()=>b("right"),className:"rdd-taskbar-nav-btn",style:{display:s.minimized.length>4?"block":"none"},children:"\u25B6"})]}),Object.keys(s.panels).map(r=>{let y=s.panels[r];if(!y)return null;let g=Eo(r);return To(S(Wr,{panelId:r,children:S("div",{style:{width:"100%",height:"100%"},dir:s.dir,children:Nr(r,y,L)})}),g,r)}),J===null&&S(o.Component,{ref:Q,theme:"dark",formatMessageProvider:O,onShow:()=>U(!0),onHide:()=>U(!1)}),s.draggedPanelId!==null&&!s.floating.some(r=>r.id===s.draggedPanelId)&&fe("div",{className:"rdd-drag-ghost-tab",style:{left:st.x+12,top:st.y+12,zIndex:1e5},children:["\u{1F4C4} ",ve(s.panels[s.draggedPanelId]?.title,O)||"Tab"]})]})},Fr=Or;var _n=class{registry;initialState;config;_actions=null;_initialized=!1;_pendingCalls=[];_pendingOpenPanelIds=new Set;_pendingSubscriptions=[];_disconnectedWarnTimer=null;constructor(t={}){if(this.registry=new Wt,this.initialState=t.initialState??null,this.config={formatMessage:t.formatMessage,predefinedMessages:t.predefinedMessages,dir:t.dir,defaultSplitRatio:t.defaultSplitRatio,defaultEdgeSplitRatio:t.defaultEdgeSplitRatio,zIndexBase:t.zIndexBase},t.panels)for(let[n,o]of Object.entries(t.panels))this.registry.register(n,o.component,o.defaultOptions)}_connect(t){this._actions=t,this._disconnectedWarnTimer!==null&&(clearTimeout(this._disconnectedWarnTimer),this._disconnectedWarnTimer=null),this._initialized||(this._initialized=!0);for(let o of this._pendingSubscriptions)o.unsub=t.subscribe(o.event,o.callback);let n=this._pendingCalls.splice(0);for(let o of n)o(t)}_disconnect(){this._actions=null;for(let t of this._pendingSubscriptions)t.unsub?.(),t.unsub=null}get isConnected(){return this._actions!==null}_startWarnTimer(){this._disconnectedWarnTimer===null&&(this._disconnectedWarnTimer=setTimeout(()=>{!this.isConnected&&this._pendingCalls.length>0&&console.error("[react-dockable-desktop] WorkspaceClient has "+this._pendingCalls.length+" queued call(s) but was never connected to a WindowManagerProvider. Did you forget client={workspace} on <WindowManagerProvider>?")},process.env.NODE_ENV==="production"?5e3:1e3))}_dispatch(t){this._actions?t(this._actions):(this._pendingCalls.push(t),this._startWarnTimer())}_subscribeRaw(t,n){if(this._actions)return this._actions.subscribe(t,n);let o={event:t,callback:n,unsub:null};return this._pendingSubscriptions.push(o),()=>{o.unsub?.(),o.unsub=null;let d=this._pendingSubscriptions.indexOf(o);d!==-1&&this._pendingSubscriptions.splice(d,1)}}openPanel(...t){if(this._actions){this._actions.openPanel(...t);return}let n=t[0];this._pendingOpenPanelIds.has(n)||(this._pendingOpenPanelIds.add(n),this._pendingCalls.push(o=>{this._pendingOpenPanelIds.delete(n),o.openPanel(...t)}),this._startWarnTimer())}closePanel(t){this._dispatch(n=>n.closePanel(t))}minimizePanel(t){this._dispatch(n=>n.minimizePanel(t))}restorePanel(t){this._dispatch(n=>n.restorePanel(t))}floatPanel(...t){this._dispatch(n=>n.floatPanel(...t))}dockPanel(...t){this._dispatch(n=>n.dockPanel(...t))}maximizePanel(t){this._dispatch(n=>n.maximizePanel(t))}focusPanel(t){this._dispatch(n=>n.focusPanel(t))}isOpen(t){return this._actions?.isOpen(t)??!1}getOpenPanelIds(){return this._actions?.getOpenPanelIds()??[]}findPanelId(t,n){return this._actions?.findPanelId(t,n)??null}saveLayout(){return this._actions?.saveLayout()??""}loadLayout(t){return this._actions?this._actions.loadLayout(t):(this._pendingCalls.push(n=>{n.loadLayout(t)}),!1)}setDirection(t){this._dispatch(n=>n.setDirection(t))}updateSplitSizes(t,n){this._dispatch(o=>o.updateSplitSizes(t,n))}updateFloatingPosition(t,n){this._dispatch(o=>o.updateFloatingPosition(t,n))}setDraggedPanelId(t){this._dispatch(n=>n.setDraggedPanelId(t))}dockPanelToGroup(t,n,o){this._dispatch(d=>d.dockPanelToGroup(t,n,o))}movePanelOrder(t,n,o){this._dispatch(d=>d.movePanelOrder(t,n,o))}closeLeafGroup(t){this._dispatch(n=>n.closeLeafGroup(t))}registerCloseGuard(t,n){this._dispatch(o=>o.registerCloseGuard(t,n))}unregisterCloseGuard(t){this._dispatch(n=>n.unregisterCloseGuard(t))}registerStateProvider(t,n){this._dispatch(o=>o.registerStateProvider(t,n))}unregisterStateProvider(t){this._dispatch(n=>n.unregisterStateProvider(t))}setPanelDirty(t,n,o){this._dispatch(d=>d.setPanelDirty(t,n,o))}updatePanelTitle(t,n){this._dispatch(o=>o.updatePanelTitle(t,n))}requestClosePanel(t,n){return this._actions?this._actions.requestClosePanel(t,n):(this._pendingCalls.push(o=>{o.requestClosePanel(t,n)}),Promise.resolve())}dockPanelToWorkspaceEdge(t,n){this._dispatch(o=>o.dockPanelToWorkspaceEdge(t,n))}showContextMenu(t){this._dispatch(n=>n.showContextMenu(t))}publish(t,n){this._dispatch(o=>o.publish(t,n))}subscribe(t,n){return this._subscribeRaw(t,n)}onPanelOpen(t){return this._subscribeRaw("panel:opened",n=>{let o=n;t(o.id,o.component)})}onPanelClose(t){return this._subscribeRaw("panel:closed",n=>{t(n.id)})}onPanelMinimize(t){return this._subscribeRaw("panel:minimized",n=>{t(n.id)})}onPanelRestore(t){return this._subscribeRaw("panel:restored",n=>{t(n.id)})}onLayoutChanged(t){return this._subscribeRaw("layout:changed",()=>t())}onPanelsExcluded(t){return this._subscribeRaw("layout:panels-excluded",n=>{t(n.panels)})}};import{useContext as ei}from"react";import{createContext as _r,useContext as Hr,useMemo as Br,useState as No}from"react";import{jsx as $r}from"react/jsx-runtime";var Do=_r(null),pn=({children:e})=>{let[t,n]=No({}),[o,d]=No({}),s=Br(()=>({getActiveInGroup:L=>t[L]??null,setActiveInGroup:(L,M)=>n(x=>({...x,[L]:M})),isModifierActive:L=>o[L]??!1,setModifierActive:(L,M)=>d(x=>({...x,[L]:M})),toggleModifier:L=>d(M=>({...M,[L]:!M[L]}))}),[t,o]);return $r(Do.Provider,{value:s,children:e})};function gn(){let e=Hr(Do);if(!e)throw new Error("useToolbar must be used within DockableDesktopProvider");return e}import{createContext as Gr,useCallback as Yr,useContext as Wo,useLayoutEffect as Xr,useMemo as Vr,useRef as Kr,useSyncExternalStore as qr}from"react";import{jsx as Qr}from"react/jsx-runtime";function jr(){let e=new Map,t=new Set,n=()=>t.forEach(o=>o());return{publish(o,d){return e.set(o,d),n(),()=>{e.get(o)===d&&(e.delete(o),n())}},get(o){return e.get(o)??null},subscribe(o){return t.add(o),()=>t.delete(o)}}}var Hn=Gr(null),Bn=({children:e})=>{let t=Vr(()=>jr(),[]);return Qr(Hn.Provider,{value:t,children:e})};function Zr(e){let t=ln(),n=Wo(Hn),o=Kr(null);if(!n)throw new Error("usePanelContribution must be used within PanelContributionProvider");Xr(()=>{if(n)return o.current?.(),o.current=n.publish(t,e),()=>{o.current?.(),o.current=null}},[n,t,e])}function $n(){let e=Ve(d=>d.activePanelId),t=Wo(Hn);if(!t)throw new Error("useActivePanelContribution must be used within PanelContributionProvider");let n=Yr(d=>t?t.subscribe(d):()=>{},[t]),o=()=>t&&e?t.get(e):null;return qr(n,o,o)}function Ao(e,t=null){return{id:e.id,label:e.label,icon:e.icon??t,renderContent:()=>e.content}}function Ur(e){let t=$n();return t?.toolbarItems?.length?[...e,{type:"separator"},...t.toolbarItems]:e}function Jr(e,t=null){let n=$n();return n?.sidebarSections?.length?[...e,...n.sidebarSections.map(o=>Ao(o,t))]:e}import{jsx as en}from"react/jsx-runtime";var ti=({contextMenuAdapter:e=Ht,...t})=>{let n=ei(Bt),o=en(pn,{children:en(Sn,{...t,children:en(Bn,{children:en(zn,{children:t.children})})})});return n!==null?o:en(En,{adapter:e,formatMessageProvider:t.formatMessage,children:o})};import{useCallback as tn,useRef as Oo,useEffect as ni,useState as oi,useMemo as ri}from"react";import{Fragment as li,jsx as Qe,jsxs as Gn}from"react/jsx-runtime";var ii=({modal:e,index:t,isTopmost:n})=>{let{close:o,openModal:d,updateInstance:s,setDirty:L}=St(),M=Ue(),x=ot(),{dir:v}=Ve(),{modalClass:C,modalBodyClass:u}=pt(),I=Oo(null),{id:k,Component:E,props:_,options:p,dirty:w,dirtyOptions:R}=e,W=p,[m,P]=oi(W.icon||null),F=Oo(W);F.current=W;let O=ve(W.title,M),l=tn(async G=>{if(G?.force){o(k);return}if(I.current){if(!await I.current())return;o(k);return}if(w){d(kt,{title:R?.title||x.unsavedChangesTitle,message:R?.message||{id:x.unsavedChangesMessage.id,defaultMessage:x.unsavedChangesMessage.defaultMessage,values:{title:O}},alert:R?.alert,alertType:R?.alertType||"danger",useYesNoTitles:!0,onOK:()=>o(k)},{size:"small"});return}o(k)},[o,d,k,w,R,O,x]),z=tn((G,re)=>L(k,G,re),[L,k]),H=tn(G=>s(k,{options:{...F.current,title:G}}),[s,k]),B=tn(G=>P(G),[]),J=tn(G=>(I.current=G,()=>{I.current=null}),[]),Q=ri(()=>({requestClose:l,setDirty:z,setTitle:H,setIcon:B,onCloseRequested:J,containerType:"modal",instanceId:k}),[l,z,H,B,J,k]),Z=w?`${O} *`:O,me=W.size?`rdd-modal-size-${W.size}`:"rdd-modal-size-auto",le=W.closable!==!1,Y=W.bodyPadding,j=Y!=null?typeof Y=="number"?`${Y}px`:Y:void 0;ni(()=>{if(!n||!le)return;let G=re=>{re.key==="Escape"&&(re.stopPropagation(),l())};return document.addEventListener("keydown",G),()=>document.removeEventListener("keydown",G)},[l,le,n]);let X=`calc(var(--rdd-z-base, 1000) + 9000 + ${t*10})`;return Gn("div",{className:"rdd-modal-overlay",style:{zIndex:X},dir:v,children:[Qe("div",{className:"rdd-modal-curtain",onClick:le?()=>l():void 0}),Gn("div",{className:`rdd-modal-window ${me} ${C??""}`,children:[Gn("div",{className:"rdd-modal-header",children:[m&&Qe("div",{className:"rdd-modal-icon",children:m}),Qe("h4",{className:"rdd-modal-title",children:Z}),le&&Qe("button",{className:"rdd-modal-close-button",onClick:()=>l(),title:M(x.closeTooltip),type:"button",children:Qe("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:Qe("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),Qe("div",{className:`rdd-modal-body ${u??""}`,style:j!=null?{padding:j}:void 0,children:Qe(Ct,{value:Q,children:Qe(E,{..._,panelId:k})})})]})]})},si=()=>{let{modals:e}=gt();return e.length===0?null:Qe(li,{children:e.map((t,n)=>Qe(ii,{modal:t,index:n,isTopmost:n===e.length-1},t.id))})},ai=si;import{useCallback as Gt,useRef as Yn,useEffect as _o,useState as ui,useMemo as pi}from"react";import{useLayoutEffect as di,useState as ci}from"react";function Fo(e){let[t,n]=ci(null);return di(()=>{let o=e.current?.parentElement;if(!o)return;let d=()=>{let L=o.getBoundingClientRect();n({top:L.top,left:L.left,right:window.innerWidth-L.right,height:L.height})};d();let s=new ResizeObserver(d);return s.observe(o),window.addEventListener("resize",d),()=>{s.disconnect(),window.removeEventListener("resize",d)}},[e]),t}import{Fragment as bi,jsx as Ae,jsxs as Xn}from"react/jsx-runtime";var fn=({panel:e,position:t,defaultWidth:n,containerRect:o})=>{let{close:d,openModal:s,updateInstance:L,setDirty:M,registerCloseHandler:x,unregisterCloseHandler:v}=St(),{modals:C}=gt(),u=Ue(),I=ot(),{dir:k}=Ve(),{sidePanelClass:E,sidePanelBodyClass:_}=pt(),p=Yn(null),{id:w,Component:R,props:W,options:m,dirty:P,dirtyOptions:F}=e,O=m,[l,z]=ui(O.icon||null),H=Yn(O);H.current=O;let B=ve(O.title,u),J=Gt(async U=>{if(U?.force){d(w);return}if(p.current){if(!await p.current())return;d(w);return}if(P){s(kt,{title:F?.title||I.unsavedChangesTitle,message:F?.message||{id:I.unsavedChangesMessage.id,defaultMessage:I.unsavedChangesMessage.defaultMessage,values:{title:B}},alert:F?.alert,alertType:F?.alertType||"danger",useYesNoTitles:!0,onOK:()=>d(w)},{size:"small"});return}d(w)},[d,s,w,P,F,B,I]),Q=Gt(async()=>p.current?await p.current():!P,[P]);_o(()=>(x(w,Q),()=>v(w)),[w,Q,x,v]);let Z=Gt((U,Fe)=>M(w,U,Fe),[M,w]),me=Gt(U=>L(w,{options:{...H.current,title:U}}),[L,w]),le=Gt(U=>z(U),[]),Y=Gt(U=>(p.current=U,()=>{p.current=null}),[]),j=pi(()=>({requestClose:J,setDirty:Z,setTitle:me,setIcon:le,onCloseRequested:Y,containerType:t==="left"?"left-panel":"right-panel",instanceId:w}),[J,Z,me,le,Y,t,w]),X=P?`${B} *`:B;_o(()=>{let U=Fe=>{Fe.key==="Escape"&&C.length===0&&J()};return document.addEventListener("keydown",U),()=>document.removeEventListener("keydown",U)},[J,C.length]);let G=O.width||n||400,re=typeof G=="number"?`${G}px`:G,ue=O.bodyPadding,Oe=ue!=null?typeof ue=="number"?`${ue}px`:ue:void 0;return Ae("div",{className:`rdd-side-panel rdd-side-panel-${t} rdd-side-panel-visible ${E??""}`,style:{width:re,...o?{top:o.top,height:o.height,bottom:"auto",...t==="right"?{right:o.right}:{left:o.left}}:{}},dir:k,children:Xn("div",{className:"rdd-side-panel-window",children:[Xn("div",{className:"rdd-side-panel-header",children:[l&&Ae("div",{className:"rdd-side-panel-icon",children:l}),Ae("h4",{className:"rdd-side-panel-title",children:X}),Ae("button",{className:"rdd-side-panel-close-button",onClick:()=>J(),title:u(I.closeTooltip),type:"button",children:Ae("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:Ae("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),Ae("div",{className:`rdd-side-panel-body ${_??""}`,style:Oe!=null?{padding:Oe}:void 0,children:Ae(Ct,{value:j,children:Ae(R,{...W,panelId:w})})})]})})},Vn=({children:e})=>{let t=Yn(null),n=Fo(t);return Ae("div",{ref:t,style:{display:"contents"},children:e(n)})},gi=({defaultWidth:e})=>{let{leftPanel:t,rightPanel:n}=gt();return Ae(Vn,{children:o=>Xn(bi,{children:[t&&Ae(fn,{panel:t,position:"left",defaultWidth:e,containerRect:o},t.id),n&&Ae(fn,{panel:n,position:"right",defaultWidth:e,containerRect:o},n.id)]})})},fi=({defaultWidth:e})=>{let{leftPanel:t}=gt();return Ae(Vn,{children:n=>t?Ae(fn,{panel:t,position:"left",defaultWidth:e,containerRect:n},t.id):null})},mi=({defaultWidth:e})=>{let{rightPanel:t}=gt();return Ae(Vn,{children:n=>t?Ae(fn,{panel:t,position:"right",defaultWidth:e,containerRect:n},t.id):null})},hi=gi;import vi,{useState as mn,useEffect as hn,useRef as Kn,useCallback as bn,useImperativeHandle as yi,useContext as jn,useMemo as ht,createContext as Go,forwardRef as Yo,memo as Pi}from"react";import{jsx as xe,jsxs as vn}from"react/jsx-runtime";function qn(e){return"renderContent"in e}function xi(e){return"render"in e}function Ho(e){return e==null?[]:Array.isArray(e)?e:[e]}var Zn=Go(null),Xo=Go(null);function Ci({tabId:e,onClose:t,onOpen:n,setActiveTabId:o,children:d}){let s=ht(()=>({tabId:e,onClose:t,onOpen:n,openTab:L=>o(L)}),[e,t,n,o]);return xe(Xo.Provider,{value:s,children:d})}function Bo(e,t,n,o){if(xi(e))return xe(vi.Fragment,{children:e.render()},e.id??t);if(qn(e)){if(e.hidden)return null;let d=n===e.id;return xe("button",{type:"button",onClick:()=>o(e.id),className:`rdd-sidebar-tab-btn${d?" rdd-active":""}`,title:e.label,"aria-pressed":d,children:e.icon},e.id)}return xe("button",{type:"button",onClick:e.onClick,disabled:e.disabled,className:"rdd-sidebar-tab-btn rdd-sidebar-header-action-btn",title:e.label,"aria-label":e.label,children:e.icon},e.id??t)}var $o=Pi(function({tabs:t,headerEntries:n,footerEntries:o,activeTabId:d,isVisible:s,position:L,onTabClick:M}){return xe("div",{style:{width:s?"56px":"0px",height:"100%",overflow:"hidden",transition:"width 0.25s cubic-bezier(0.4, 0, 0.2, 1)",flexShrink:0},children:vn("div",{className:`rdd-sidebar-tabs-strip rdd-${L}${n.length?" rdd-sidebar-tabs-strip--has-header-action":""}${o.length?" rdd-sidebar-tabs-strip--has-footer-action":""}`,style:{width:"56px",height:"100%"},children:[n.length>0&&xe("div",{className:"rdd-sidebar-header-area",children:n.map((x,v)=>Bo(x,v,d,M))}),xe("div",{className:"rdd-sidebar-tabs-list",children:t.map(x=>{if(x.hidden)return null;let v=d===x.id;return xe("button",{type:"button",onClick:()=>M(x.id),className:`rdd-sidebar-tab-btn${v?" rdd-active":""}`,title:x.label,"aria-pressed":v,children:x.icon},x.id)})}),o.length>0&&xe("div",{className:"rdd-sidebar-footer-area",children:o.map((x,v)=>Bo(x,v,d,M))})]})})});function wi({position:e,currentWidth:t,minWidth:n,maxWidth:o,onWidthChange:d,onResizeStart:s,onResizeEnd:L}){return xe("div",{className:"rdd-resizer-bar",style:{cursor:"col-resize",width:"1px",height:"100%",flexShrink:0,zIndex:20},onPointerDown:x=>{x.preventDefault();let v=x.currentTarget,C=[{el:v,classes:["rdd-active"]},{el:document.body,classes:["rdd-resizing-active","rdd-resizing-col-active"]}];s(),ft({element:v,pointerId:x.pointerId,startClientX:x.clientX,startClientY:x.clientY,captureStart:()=>t,activeClasses:C,onMove:(u,I,k)=>{let E=e==="right"?k-u:k+u;d(Math.max(n,Math.min(o,E)))},onEnd:()=>L()})}})}var Vo=Yo(function({position:t="right",tabs:n,headerAction:o,footerAction:d,defaultWidth:s,minWidth:L=150,maxWidth:M=600,onWidthChange:x,activeTabId:v,onActiveTabChange:C,visible:u,onVisibilityChange:I,stripVisible:k,onStripVisibilityChange:E,showCloseButton:_=!1,hideDefaultHeader:p=!1,renderHeader:w,isSecondary:R=!1,children:W},m){let P=v!==void 0,[F,O]=mn(()=>s??280),l=bn(ee=>{O(ee),x?.(ee)},[x]),[z,H]=mn(!1),[B,J]=mn(null),Q=P?v:B,Z=ht(()=>Ho(o),[o]),me=ht(()=>Ho(d),[d]),le=ht(()=>Z.filter(qn),[Z]),Y=ht(()=>me.filter(qn),[me]),j=ht(()=>[...le,...n,...Y],[le,n,Y]),[X,G]=mn(()=>new Set),re=ht(()=>{let ee=new Set(X);Q&&ee.add(Q);for(let Ee of j)Ee.eagerMount&&ee.add(Ee.id);return ee},[X,Q,j]),ue=Kn(Q??null);hn(()=>{ue.current=Q??null},[Q]);let Oe=Kn(F);hn(()=>{Oe.current=F},[F]);let U=bn(ee=>{G(ee!==null?Ee=>{if(Ee.has(ee))return Ee;let $=new Set(Ee);return $.add(ee),$}:Ee=>{let $=!1,q=new Set(Ee);for(let ce of Ee){let he=j.find(be=>be.id===ce);he&&!he.eagerMount&&!he.preserveState&&(q.delete(ce),$=!0)}return $?q:Ee}),P||J(ee),C?.(ee)},[P,C,j]);hn(()=>{Q!=null&&!j.some(ee=>ee.id===Q)&&U(null)},[Q,j,U]),yi(m,()=>({openTab:ee=>U(ee),closeDrawer:()=>U(null),getActiveTab:()=>ue.current,show:()=>I?.(!0),hide:()=>I?.(!1),toggle:()=>I?.(u===!1),showStrip:()=>E?.(!0),hideStrip:()=>E?.(!1),setWidth:ee=>l(Math.max(L,Math.min(M,ee))),getWidth:()=>Oe.current}),[U,u,I,E,l,L,M]);let Fe=bn(ee=>{U(Q===ee?null:ee)},[Q,U]),$e=bn(()=>U(null),[U]),Be=p||w!=null,Ge=Kn(!1);hn(()=>{process.env.NODE_ENV==="development"&&(!_||!Be||Ge.current||(Ge.current=!0,console.warn('[react-dockable-desktop] `showCloseButton` has no effect because the default header is suppressed (`hideDefaultHeader` is set, or `renderHeader` was passed). The "X" close button only renders as part of the library\'s own default header, which is skipped in this case. Add your own close control inside `renderHeader` (or `renderContent`), wired to its `onClose` parameter or `useSidebarTab().onClose`.')))},[_,Be]);let st=ht(()=>({openTab:ee=>U(ee),closeDrawer:()=>U(null),getActiveTab:()=>ue.current,position:t,isSecondary:R}),[U,t,R]),tt=u!==!1,nt=tt&&k!==!1,qe=tt&&Q!=null,je=xe("div",{className:`rdd-sidebar-content-drawer rdd-${t}`,style:{flexBasis:qe?`${F}px`:"0px",flexShrink:1,flexGrow:0,minWidth:qe?`${L}px`:"0px",maxWidth:qe?`${M}px`:"0px",overflow:"hidden",transition:z?"none":"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:j.map(ee=>{if(!re.has(ee.id))return null;let $=Q===ee.id,q=()=>U(ee.id);return vn("div",{style:{display:$?"flex":"none",flexDirection:"column",height:"100%",width:"100%"},children:[Be?w?.(ee,$e,q):vn("div",{className:"rdd-sidebar-drawer-header",children:[xe("span",{className:"rdd-sidebar-header-title",children:ee.label}),_&&xe("button",{type:"button",className:"rdd-sidebar-drawer-close-button",onClick:$e,title:"Close","aria-label":"Close",children:xe("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:xe("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),xe("div",{className:"rdd-sidebar-drawer-body",children:xe(Ci,{tabId:ee.id,onClose:$e,onOpen:q,setActiveTabId:U,children:ee.renderContent(ee.id,$e,q)})})]},ee.id)})}),se=qe?xe(wi,{position:t,currentWidth:F,minWidth:L,maxWidth:M,onWidthChange:l,onResizeStart:()=>H(!0),onResizeEnd:()=>H(!1)}):null;return xe(Zn.Provider,{value:st,children:vn("div",{style:{display:"flex",flexDirection:"row",width:"100%",height:"100%",overflow:"hidden"},children:[t==="left"&&xe($o,{tabs:n,headerEntries:Z,footerEntries:me,activeTabId:Q,isVisible:nt,position:t,onTabClick:Fe}),t==="left"&&je,t==="left"&&se,xe("div",{style:{flex:"1 1 0%",minWidth:0,overflow:"hidden"},children:W}),t==="right"&&se,t==="right"&&je,t==="right"&&xe($o,{tabs:n,headerEntries:Z,footerEntries:me,activeTabId:Q,isVisible:nt,position:t,onTabClick:Fe})]})})}),Ri=Yo(function(t,n){let o=jn(Zn);if(!o)throw new Error("SecondarySidebar must be rendered inside a primary Sidebar's children");if(o.isSecondary)throw new Error("SecondarySidebar cannot be nested inside another SecondarySidebar");let d=o.position==="left"?"right":"left";return xe(Vo,{ref:n,...t,position:d,isSecondary:!0})});function Mi(){let e=jn(Zn);if(!e)throw new Error("useSidebar must be used within Sidebar");return e}function Si(){let e=jn(Xo);if(!e)throw new Error("useSidebarTab must be used within a Sidebar tab renderContent tree");return e}import{forwardRef as Ti,useImperativeHandle as ki,useState as Ko,useRef as qo,useEffect as jo,useLayoutEffect as Ii}from"react";import{createPortal as Ei}from"react-dom";import{Fragment as Wi,jsx as Ke,jsxs as Zo}from"react/jsx-runtime";function Li(e,t,n=!1,o=8){switch(t){case"left":return n?{right:window.innerWidth-e.left+o,top:e.top}:{left:e.right+o,top:e.top};case"right":return n?{left:e.right+o,top:e.top}:{right:window.innerWidth-e.left+o,top:e.top};case"top":return n?{top:e.bottom+o,right:window.innerWidth-e.right}:{top:e.bottom+o,left:e.left};case"bottom":return n?{bottom:window.innerHeight-e.top+o,right:window.innerWidth-e.right}:{bottom:window.innerHeight-e.top+o,left:e.left}}}function zi({item:e,position:t,toolbar:n}){let[o,d]=Ko(!1),[s,L]=Ko(null),M=qo(null),x=qo(null),v=e.activeItemId!==void 0,C=v?e.activeItemId:n.getActiveInGroup(e.id),u=e.items.find(p=>!("type"in p)&&p.id===C),I=C!==null,k=u?.icon??e.defaultIcon,E=u?.label??e.label,_=()=>{e.disabled||(!o&&M.current&&L(M.current.getBoundingClientRect()),d(p=>!p))};return Ii(()=>{if(!o||!x.current)return;let p=x.current,w=p.getBoundingClientRect(),R=8;w.right>window.innerWidth-R&&(p.style.left=`${Math.max(R,window.innerWidth-w.width-R)}px`,p.style.right="auto"),w.left<R&&(p.style.left=`${R}px`,p.style.right="auto"),w.bottom>window.innerHeight-R&&(p.style.top=`${Math.max(R,window.innerHeight-w.height-R)}px`,p.style.bottom="auto"),w.top<R&&(p.style.top=`${R}px`,p.style.bottom="auto")},[o]),jo(()=>{if(!o)return;let p=w=>{let R=w.target;M.current?.contains(R)||x.current?.contains(R)||d(!1)};return document.addEventListener("mousedown",p),()=>document.removeEventListener("mousedown",p)},[o]),jo(()=>{if(!o)return;let p=w=>{w.key==="Escape"&&d(!1)};return document.addEventListener("keydown",p),()=>document.removeEventListener("keydown",p)},[o]),Zo(Wi,{children:[Ke("button",{ref:M,type:"button",className:`rdd-toolbar-btn rdd-toolbar-btn-group${I?" rdd-active":""}`,title:E,"aria-label":E,"aria-expanded":o,"aria-haspopup":"menu",disabled:e.disabled,onClick:_,children:k}),o&&s&&Ei(Ke("div",{ref:x,className:`rdd-toolbar-group-flyout rdd-${t}`,style:Li(s,t,document.documentElement.dir==="rtl"),role:"menu",children:e.items.map((p,w)=>{if("type"in p)return Ke("div",{className:"rdd-toolbar-group-flyout-sep",role:"separator"},`sep-${w}`);let R=C===p.id;return Zo("button",{type:"button",className:`rdd-toolbar-group-flyout-item${R?" rdd-active":""}`,disabled:p.disabled,role:"menuitem","aria-pressed":R,onClick:()=>{v?e.onActiveItemChange?.(p.id):n.setActiveInGroup(e.id,p.id),p.onActivate?.(p.id),d(!1)},children:[Ke("span",{className:"rdd-toolbar-group-flyout-icon",children:p.icon}),Ke("span",{className:"rdd-toolbar-group-flyout-label",children:p.label}),p.shortcut&&Ke("span",{className:"rdd-toolbar-group-flyout-shortcut",children:p.shortcut})]},p.id)})}),document.body)]})}function Ni(e,t,n,o){switch(e.type){case"separator":return Ke("div",{className:"rdd-toolbar-separator",role:"separator"},`sep-${t}`);case"action":return Ke("button",{type:"button",className:"rdd-toolbar-btn rdd-toolbar-btn-action",title:e.label,"aria-label":e.label,disabled:e.disabled,onClick:e.onClick,children:e.icon},e.id);case"radio":{let d=n.getActiveInGroup(e.group)===e.id;return Ke("button",{type:"button",className:`rdd-toolbar-btn rdd-toolbar-btn-radio${d?" rdd-active":""}`,title:e.label,"aria-label":e.label,"aria-pressed":d,disabled:e.disabled,onClick:()=>{n.setActiveInGroup(e.group,e.id),e.onActivate?.(e.id)},children:e.icon},e.id)}case"toggle":{let d=e.active!==void 0,s=d?e.active:n.isModifierActive(e.id);return Ke("button",{type:"button",className:`rdd-toolbar-btn rdd-toolbar-btn-toggle${s?" rdd-active":""}`,title:e.label,"aria-label":e.label,"aria-pressed":s,disabled:e.disabled,onClick:()=>{d||n.toggleModifier(e.id),e.onToggle?.(!s)},children:e.icon},e.id)}case"group":return Ke(zi,{item:e,position:o,toolbar:n},e.id)}}var Di=Ti(function({position:t="left",items:n,visible:o,onVisibilityChange:d,className:s,style:L},M){let x=gn(),v=t==="left"||t==="right";ki(M,()=>({show:()=>d?.(!0),hide:()=>d?.(!1),toggle:()=>d?.(o===!1)}),[o,d]);let C=o!==!1?{}:v?{width:"0px"}:{height:"0px"};return Ke("div",{className:`rdd-toolbar-strip rdd-${t}${s?` ${s}`:""}`,role:"toolbar","aria-orientation":v?"vertical":"horizontal",style:{...C,...L},children:n.map((u,I)=>Ni(u,I,x,t))})});import{useCallback as Jn,useEffect as nn,useLayoutEffect as Ai,useRef as Et,useState as Qn}from"react";import{createPortal as Uo}from"react-dom";import{jsx as Re,jsxs as on}from"react/jsx-runtime";var eo=class{listeners=new Set;counter=0;subscribe(t){this.listeners.add(t)}unsubscribe(t){this.listeners.delete(t)}show(t,n={}){let o=n.id??`toast-${++this.counter}`;return this.emit({kind:"show",id:o,message:t,rawOpts:{...n,id:o}}),o}update(t,n,o){this.emit({kind:"update",id:t,message:n,patch:o})}dismiss(t){this.emit({kind:"dismiss",id:t})}emit(t){this.listeners.forEach(n=>n(t))}},Xe=new eo,Oi=Object.assign((e,t)=>Xe.show(e,t),{info:(e,t)=>Xe.show(e,{...t,type:"info"}),success:(e,t)=>Xe.show(e,{...t,type:"success"}),warning:(e,t)=>Xe.show(e,{...t,type:"warning"}),error:(e,t)=>Xe.show(e,{...t,type:"error"}),dismiss:e=>Xe.dismiss(e),promise:(e,t,n)=>{let o=Xe.show(t.pending,{...n,type:"info",duration:0});return e.then(d=>{let s=typeof t.success=="function"?t.success(d):t.success;Xe.update(o,s,{type:"success",duration:n?.duration??5e3})},d=>{let s=typeof t.error=="function"?t.error(d):t.error;Xe.update(o,s,{type:"error",duration:n?.duration??5e3})}),e}}),Fi=()=>on("svg",{className:"rdd-toast__icon",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:[Re("circle",{cx:"8",cy:"8",r:"7",stroke:"currentColor",strokeWidth:"1.5"}),Re("path",{d:"M8 5v.01M8 7.5v3.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]}),_i=()=>on("svg",{className:"rdd-toast__icon",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:[Re("circle",{cx:"8",cy:"8",r:"7",stroke:"currentColor",strokeWidth:"1.5"}),Re("path",{d:"M5 8l2 2 4-4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]}),Hi=()=>on("svg",{className:"rdd-toast__icon",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:[Re("path",{d:"M8 2.5L14 13.5H2L8 2.5z",stroke:"currentColor",strokeWidth:"1.5",strokeLinejoin:"round"}),Re("path",{d:"M8 7v2.5M8 11.5v.01",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]}),Bi=()=>on("svg",{className:"rdd-toast__icon",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:[Re("circle",{cx:"8",cy:"8",r:"7",stroke:"currentColor",strokeWidth:"1.5"}),Re("path",{d:"M5.5 5.5l5 5M10.5 5.5l-5 5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]}),$i=()=>Re("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:Re("path",{d:"M4 4l8 8M12 4l-8 8",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})}),Gi={info:Re(Fi,{}),success:Re(_i,{}),warning:Re(Hi,{}),error:Re(Bi,{})};function Yi({id:e,message:t,options:n,exiting:o,isLeft:d,showProgress:s,pauseOnHover:L,animation:M,onDismiss:x,onExited:v}){let C=Et(null),u=Et(null),I=Et(null),k=Et(n.duration),E=Et(0),[_,p]=Qn(!1),w=M==="none"?"rdd-toast--visible":M==="fade"?"rdd-toast--fade-entering":d?"rdd-toast--entering-left":"rdd-toast--entering",[R,W]=Qn(w);Ai(()=>{let z=C.current,H=u.current;if(!z||!H||o)return;let B=()=>{z.style.maxHeight=`${z.scrollHeight}px`};B();let J=new ResizeObserver(B);return J.observe(H),()=>J.disconnect()},[o]),nn(()=>{if(M==="none")return;let z=requestAnimationFrame(()=>W("rdd-toast--visible"));return()=>cancelAnimationFrame(z)},[]);let m=Jn(z=>{z<=0||(E.current=Date.now(),I.current=setTimeout(()=>x(e),z))},[e,x]);nn(()=>(I.current&&clearTimeout(I.current),k.current=n.duration,m(n.duration),()=>{I.current&&clearTimeout(I.current)}),[n.duration,m]),nn(()=>{if(!o)return;let z=C.current;if(!z||M==="none"){v(e);return}let H=J=>{J.propertyName==="max-height"&&v(e)};z.addEventListener("transitionend",H);let B=setTimeout(()=>v(e),520);return()=>{z.removeEventListener("transitionend",H),clearTimeout(B)}},[o,e,v,M]);let P=()=>{!L||n.duration===0||(I.current&&(clearTimeout(I.current),I.current=null,k.current=Math.max(0,k.current-(Date.now()-E.current))),p(!0))},F=()=>{!L||n.duration===0||(p(!1),m(k.current))},O=["rdd-toast",n.type&&`rdd-toast--${n.type}`,R,o&&"rdd-toast--exiting",_&&"rdd-toast--paused"].filter(Boolean).join(" "),l=n.icon!==void 0?n.icon:n.type?Gi[n.type]:null;return on("div",{ref:C,role:"status","aria-live":"polite",className:O,onMouseEnter:P,onMouseLeave:F,children:[l&&l,Re("div",{ref:u,className:"rdd-toast__body",children:n.content!==void 0?n.content:t}),n.closable&&Re("button",{type:"button",className:"rdd-toast__close",onClick:()=>x(e),"aria-label":"Close notification",children:Re($i,{})}),s&&n.duration>0&&Re("div",{className:"rdd-toast__progress",style:{animationDuration:`${n.duration}ms`}})]})}function Un(e,t,n){return{id:e.id,type:e.type??"info",duration:e.duration??t,closable:e.closable??n,icon:e.icon,content:e.content,onClose:e.onClose}}function Xi({position:e="top-right",maxVisible:t=3,defaultDuration:n=5e3,defaultClosable:o=!0,pauseOnHover:d=!0,animation:s="slide",newestOnTop:L=!1,progressBar:M=!1,width:x=320,adapter:v}){let[C,u]=Qn([]),I=Et([]),k=Et(C);k.current=C;let E=Jn(W=>{u(m=>m.map(P=>P.id===W?{...P,exiting:!0}:P)),k.current.find(m=>m.id===W)?.options.onClose?.()},[]),_=Jn(W=>{let m=I.current.shift()??null;u(P=>{let F=P.filter(l=>l.id!==W);if(!m)return F;let O=Un(m.rawOpts,n,o);return[...F,{id:m.id,message:m.message,options:O,exiting:!1}]})},[n,o]);if(nn(()=>{if(v)return;let W=m=>{if(m.kind==="show"){let P=Un(m.rawOpts,n,o),F={id:m.id,message:m.message,options:P,exiting:!1},O={id:m.id,message:m.message,rawOpts:m.rawOpts};u(l=>l.find(B=>B.id===m.id)?l.map(B=>B.id===m.id?{...B,message:m.message,options:P}:B):l.filter(B=>!B.exiting).length<t?[...l,F]:(I.current.some(B=>B.id===O.id)||I.current.push(O),l))}else m.kind==="update"?(u(P=>P.map(F=>{if(F.id!==m.id)return F;let O={...F.options,...m.patch,id:F.id};return{...F,message:m.message,options:O}})),I.current=I.current.map(P=>P.id!==m.id?P:{...P,message:m.message,rawOpts:{...P.rawOpts,...m.patch}})):m.kind==="dismiss"&&(m.id===void 0?(u(P=>P.map(F=>({...F,exiting:!0}))),I.current=[]):k.current.some(F=>F.id===m.id)?E(m.id):I.current=I.current.filter(F=>F.id!==m.id))};return Xe.subscribe(W),()=>Xe.unsubscribe(W)},[v,t,n,o,E]),nn(()=>{if(!v)return;let W=m=>{if(m.kind==="show"){let P=Un(m.rawOpts,n,o);v.show(m.id,m.message,P)}else m.kind==="update"?v.update(m.id,m.message,m.patch):m.kind==="dismiss"&&v.dismiss(m.id)};return Xe.subscribe(W),()=>Xe.unsubscribe(W)},[v,n,o]),v){if(!v.Container)return null;let W=v.Container;return Uo(Re(W,{position:e}),document.body)}let p=e.endsWith("left"),w="";L===!0&&(w="rdd-toast-container--newest-top"),L===!1&&(w="rdd-toast-container--newest-bottom");let R=["rdd-toast-container",`rdd-toast-container--${e}`,w].filter(Boolean).join(" ");return Uo(Re("div",{className:R,style:{width:x},"aria-label":"Notifications","aria-live":"polite",children:C.map(W=>Re(Yi,{id:W.id,message:W.message,options:W.options,exiting:W.exiting,isLeft:p,showProgress:M,pauseOnHover:d,animation:s,onDismiss:E,onExited:_},W.id))}),document.body)}import nr,{useState as Ie,useContext as Pn,createContext as no,useRef as ke,useLayoutEffect as to,useCallback as et,useMemo as Xt,useEffect as Jo}from"react";import{createPortal as Vi}from"react-dom";import{Fragment as gs,jsx as ae,jsxs as vt}from"react/jsx-runtime";var ct=e=>e==="width"||e==="both",it=e=>e==="height"||e==="both",Qo=(e,t)=>t==="inline"?it(e)?"both":"width":ct(e)?"both":"height",yn=(e,t)=>t==="inline"?e==="both"?"height":ct(e)?null:e:e==="both"?"width":it(e)?null:e,or=(e,t)=>it(t)?[]:ct(t)?e.startsWith("top-")?["top-left","top-right"]:["bottom-left","bottom-right"]:[e],Ki=(e,t)=>`${e.startsWith("top-")?"top":"bottom"}-${t}`,qi=(e,t)=>`${t}-${e.endsWith("-right")?"right":"left"}`,rr=["top-left","top-right","bottom-left","bottom-right"],ir=no(null),sr=no(null),ar=no(null),bt=80;function ji(e,t,n){let o=e.getBoundingClientRect(),d=t-o.left,s=n-o.top;return d<bt&&s<bt?"top-left":d>o.width-bt&&s<bt?"top-right":d<bt&&s>o.height-bt?"bottom-left":d>o.width-bt&&s>o.height-bt?"bottom-right":null}function Zi({children:e,className:t,style:n}){let[o,d]=Ie({}),[s,L]=Ie({}),[M,x]=Ie({"top-left":[],"top-right":[],"bottom-left":[],"bottom-right":[]}),[v,C]=Ie({}),[u,I]=Ie(null),[k,E]=Ie(null),[_,p]=Ie(null),[w,R]=Ie(()=>new Map),W=ke(100),m=ke(null),P=et((Y,j)=>(d(X=>({...X,[Y]:j})),()=>d(X=>{let G={...X};return delete G[Y],G})),[]),F=et(Y=>{W.current+=1;let j=W.current;L(X=>({...X,[Y]:j})),p(Y)},[]),O=et((Y,j,X=null)=>{let G=or(j,X);x(re=>{let ue={"top-left":re["top-left"].filter(U=>U!==Y),"top-right":re["top-right"].filter(U=>U!==Y),"bottom-left":re["bottom-left"].filter(U=>U!==Y),"bottom-right":re["bottom-right"].filter(U=>U!==Y)};for(let U of G)ue[U]=[...ue[U],Y];return rr.every(U=>ue[U].length===re[U].length&&ue[U].every((Fe,$e)=>Fe===re[U][$e]))?re:ue})},[]),l=et(Y=>{x(j=>({"top-left":j["top-left"].filter(X=>X!==Y),"top-right":j["top-right"].filter(X=>X!==Y),"bottom-left":j["bottom-left"].filter(X=>X!==Y),"bottom-right":j["bottom-right"].filter(X=>X!==Y)}))},[]),z=et((Y,j)=>{C(X=>X[Y]===j?X:{...X,[Y]:j})},[]),H=et((Y,j)=>{R(X=>{let G=new Map(X);return G.set(Y,j),G})},[]),B=et(Y=>{R(j=>{let X=new Map(j);return X.delete(Y),X})},[]),J=et(()=>{R(new Map)},[]),Q=Xt(()=>Array.from(w.keys()),[w]),Z=Xt(()=>({registerToolbar:P,insetTop:o.top??0,insetBottom:o.bottom??0}),[P,o]),me=Xt(()=>({managedWindowIds:Q,openManaged:H,closeManaged:B,closeAllManaged:J}),[Q,H,B,J]),le=Xt(()=>({topId:_,zOrders:s,focusWindow:F,containerRef:m,stacks:M,dockedSizes:v,dockWindow:O,undockWindow:l,reportDockedSize:z,draggingId:u,setDraggingId:I,hoveredZone:k,setHoveredZone:E,insetTop:o.top??0,insetBottom:o.bottom??0,insetInlineStart:o.left??0,insetInlineEnd:o.right??0}),[_,s,F,M,v,O,l,z,u,k,o]);return ae(ir.Provider,{value:Z,children:ae(sr.Provider,{value:me,children:ae(ar.Provider,{value:le,children:vt("div",{ref:m,className:`rdd-panel-overlay-root${u!==null?" rdd-dragging-active":""}${t?" "+t:""}`,style:n,children:[e,u!==null&&ae(Ui,{hoveredZone:k}),Array.from(w.entries()).map(([Y,j])=>ae(lr,{id:Y,title:j.title,icon:j.icon,open:!0,onClose:()=>B(Y),defaultAnchor:j.anchor??"top-right",defaultWidth:j.width??320,defaultHeight:j.height??240,defaultStretch:j.stretch,children:j.content},Y))]})})})})}function Ui({hoveredZone:e}){return ae(gs,{children:rr.map(t=>ae("div",{className:`rdd-panel-float-dropzone rdd-panel-float-dropzone--${t}${e===t?" rdd-panel-float-dropzone--hovered":""}`,"aria-hidden":"true"},t))})}function Ji({position:e,variant:t="transparent",buttonVariant:n="ghost",buttonSize:o,style:d,className:s,children:L}){let M=Pn(ir),x=ke(null),v=ke(null);to(()=>{let E=x.current;if(!E||!M)return;let _=()=>{let w=e==="top"||e==="bottom"?E.offsetHeight:E.offsetWidth;v.current?.(),v.current=M.registerToolbar(e,w)};_();let p=new ResizeObserver(_);return p.observe(E),()=>{p.disconnect(),v.current?.(),v.current=null}},[e,M?.registerToolbar]);let C={position:"absolute",zIndex:5,pointerEvents:"none",boxSizing:"border-box"};e==="top"?(C.top=0,C.left=0,C.right=0):e==="bottom"?(C.bottom=0,C.left=0,C.right=0):e==="left"?(C.insetInlineStart=0,C.top=M?.insetTop??0,C.bottom=M?.insetBottom??0):(C.insetInlineEnd=0,C.top=M?.insetTop??0,C.bottom=M?.insetBottom??0);let I=e==="left"||e==="right"?{...(M?.insetTop??0)>0?{paddingTop:0}:{},...(M?.insetBottom??0)>0?{paddingBottom:0}:{}}:{},k=o!=null?{"--rdd-panel-toolbar-btn-size":`${o}px`}:{};return ae("div",{ref:x,className:`rdd-panel-toolbar rdd-panel-toolbar--${e}${s?" "+s:""}`,"data-variant":t,"data-btn-variant":n,style:{...C,...I,...k,...d},children:L})}function Qi({icon:e,onClick:t,disabled:n,title:o,variant:d}){return ae("button",{type:"button",className:"rdd-panel-toolbar-btn",onClick:t,disabled:n,title:o,"aria-label":o,...d?{"data-variant":d}:{},children:e})}function es({icon:e,active:t,onToggle:n,disabled:o,title:d,variant:s}){return ae("button",{type:"button",className:`rdd-panel-toolbar-btn${t?" rdd-panel-toolbar-btn--active":""}`,onClick:n,disabled:o,title:d,"aria-label":d,"aria-pressed":t,...s?{"data-variant":s}:{},children:e})}function ts(){return ae("span",{className:"rdd-panel-toolbar__sep","aria-hidden":"true"})}function ns(){return ae("span",{className:"rdd-panel-toolbar__spacer","aria-hidden":"true"})}function os({children:e}){return ae("span",{className:"rdd-panel-toolbar__item",children:e})}function rs({children:e}){return ae("div",{className:"rdd-panel-toolbar__center",children:e})}function is({placeholder:e="Search\u2026",onSearch:t,onSelect:n}){let[o,d]=Ie(!1),[s,L]=Ie(""),[M,x]=Ie([]),[v,C]=Ie(null),u=ke(null),I=ke(null),k=ke(null),E=ke(null),_=()=>{d(!0),setTimeout(()=>I.current?.focus({preventScroll:!0}),0)},p=()=>{d(!1),L(""),x([]),C(null),k.current?.abort(),E.current&&clearTimeout(E.current)},w=O=>{let l=O.target.value;if(L(l),k.current?.abort(),E.current&&clearTimeout(E.current),!l.trim()){x([]),C(null);return}E.current=setTimeout(async()=>{let z=new AbortController;k.current=z;try{let H=await t(l,z.signal);if(!z.signal.aborted){x(H);let B=u.current;if(B&&H.length>0){let J=B.getBoundingClientRect(),Q=Math.max(J.width,240),Z=J.left;Z+Q>window.innerWidth-8&&(Z=window.innerWidth-Q-8),C({top:J.bottom+4,left:Z,width:Q})}else C(null)}}catch{}},300)},R=O=>{n(O),p()},W=O=>{u.current?.contains(O.relatedTarget)||p()},m=O=>{O.key==="Escape"&&p()},P=Xt(()=>{let O={};for(let l of M){let z=l.group??"";O[z]||(O[z]=[]),O[z].push(l)}return O},[M]),F=vt("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[ae("circle",{cx:"6.5",cy:"6.5",r:"4.5"}),ae("line",{x1:"10",y1:"10",x2:"14",y2:"14"})]});return o?vt("div",{ref:u,className:"rdd-panel-toolbar-search rdd-panel-toolbar-search--open",onBlur:W,children:[ae("button",{type:"button",className:"rdd-panel-toolbar-btn",onClick:p,"aria-label":"Close search",title:"Close search",children:F}),ae("input",{ref:I,className:"rdd-panel-toolbar-search__input",type:"text",value:s,onChange:w,onKeyDown:m,placeholder:e,autoComplete:"off"}),v&&M.length>0&&Vi(ae("div",{className:"rdd-panel-toolbar-search__dropdown",style:{position:"fixed",top:v.top,left:v.left,width:v.width},onMouseDown:O=>O.preventDefault(),children:Object.entries(P).map(([O,l])=>vt(nr.Fragment,{children:[O&&ae("div",{className:"rdd-panel-toolbar-search__group",children:O}),l.map(z=>vt("button",{type:"button",className:"rdd-panel-toolbar-search__item",onClick:()=>R(z),children:[z.icon&&ae("span",{className:"rdd-panel-toolbar-search__item-icon",children:z.icon}),ae("span",{className:"rdd-panel-toolbar-search__item-label",children:z.label}),z.description&&ae("span",{className:"rdd-panel-toolbar-search__item-desc",children:z.description})]},z.id))]},O||"__default__"))}),document.body)]}):ae("div",{ref:u,className:"rdd-panel-toolbar-search",children:ae("button",{type:"button",className:"rdd-panel-toolbar-btn",onClick:_,title:"Search","aria-label":"Search",children:F})})}function lr(e){let t=Pn(ar);return e.open?ae(ds,{ctx:t,...e},e.id):null}var ss=120,as=60,Yt=8,ls=8,er=16,tr=40;function ds({id:e,title:t,icon:n,defaultAnchor:o,defaultWidth:d,defaultHeight:s,defaultStretch:L,stretch:M,onPlacementChange:x,stretchable:v=!0,children:C,ctx:u,onClose:I}){let k=Pn(Ft)?.isRtl??!1,[E,_]=Ie("docked"),[p,w]=Ie(o),[R,W]=Ie(L??null),m=M!==void 0,P=m?M??null:R,[F,O]=Ie(null),[l,z]=Ie({w:d,h:s}),H=ke(null),B=ke(E);B.current=E;let J=ke(F);J.current=F;let Q=ke(l);Q.current=l;let Z=ke(P);Z.current=P;let me=ke(p);me.current=p;let le=ke(x);le.current=x;let[Y,j]=Ie({inline:!1,block:!1}),X=ke(Y);X.current=Y;let G=ke(0),re=et(($,q)=>{w($),m||W(q),le.current?.({anchor:$,stretch:q})},[m]),ue=ke(null);to(()=>{E==="docked"&&u?.dockWindow(e,p,P)},[E,p,P]),to(()=>()=>{u?.undockWindow(e)},[]);let Oe=ke(!1);Jo(()=>{if(process.env.NODE_ENV!=="development"||Oe.current||E!=="docked"||!it(P)||!u)return;let $=p.endsWith("-right")?"right":"left",q=[`top-${$}`,`bottom-${$}`].flatMap(ce=>u.stacks[ce]??[]).filter(ce=>ce!==e);q.length!==0&&(Oe.current=!0,console.warn(`[react-dockable-desktop] PanelFloatingWindow "${e}" stretches the block axis (stretch: "${P}") while ${q.length} other widget(s) are anchored to the same side (${q.join(", ")}). A block-stretched widget spans the axis that stacking uses to separate siblings, so it cannot stack and will overlap them \u2014 z-order decides which is on top. Either give it a fixed height, or move the other widgets to the opposite side.`))},[E,P,p,u?.stacks,e]),Jo(()=>{u?.reportDockedSize(e,l.h)},[l.h]);let U=u?.zOrders[e]??101,Fe=!u||u.topId===e,$e=()=>{let $=H.current?.offsetParent;return{cw:$?.clientWidth??9999,ch:$?.clientHeight??9999}},Be=()=>{let $=u?.insetInlineStart??0,q=u?.insetInlineEnd??0;return{left:(k?q:$)+Yt,right:(k?$:q)+Yt,top:u?.insetTop??0,bottom:u?.insetBottom??0}},Ge=()=>{u?.focusWindow(e)},st=$=>{if($.button!==0)return;$.preventDefault();let q,ce;if(B.current==="docked"){let he=H.current,be=u?.containerRef?.current;if(he&&be){let ye=he.getBoundingClientRect(),De=be.getBoundingClientRect();q=ye.left-De.left,ce=ye.top-De.top}else q=Yt,ce=u?.insetTop??0}else q=J.current?.x??0,ce=J.current?.y??0;ue.current={mouseX:$.clientX,mouseY:$.clientY,posX:q,posY:ce,hasDragged:!1},H.current?.setPointerCapture($.pointerId)},tt=$=>q=>{if(q.button!==0)return;q.preventDefault(),q.stopPropagation();let ce=0,he=0;if(B.current==="free")ce=J.current?.x??0,he=J.current?.y??0;else{let Pe=H.current,Ce=Pe?.offsetParent;if(Pe&&Ce){let Le=Pe.getBoundingClientRect(),He=Ce.getBoundingClientRect();ce=Le.left-He.left,he=Le.top-He.top}}let be=H.current?.getBoundingClientRect(),ye={x:ce,y:he,w:ct(Z.current)&&be?be.width:Q.current.w,h:it(Z.current)&&be?be.height:Q.current.h},De=$.includes("e")||$.includes("w"),_e=$.includes("n")||$.includes("s"),We=!1,Me={inline:!1,block:!1},at=()=>{if(We||B.current!=="docked")return;let Pe=Z.current,Ce=De&&ct(Pe),Le=_e&&it(Pe);if(!Ce&&!Le)return;We=!0;let He=Pe,Ye=me.current;if(Ce){He=yn(He,"inline");let ze=$.includes("e");Ye=Ki(Ye,ze!==k?"left":"right")}Le&&(He=yn(He,"block"),Ye=qi(Ye,$.includes("s")?"top":"bottom")),re(Ye,He)};ft({element:q.currentTarget,pointerId:q.pointerId,startClientX:q.clientX,startClientY:q.clientY,captureStart:()=>ye,activeClasses:[{el:document.body,classes:["rdd-resizing-active"]}],onMove:(Pe,Ce,Le)=>{let{cw:He,ch:Ye}=$e(),ze=B.current==="docked"?Be():{left:0,right:0,top:0,bottom:0},{x:ut,y:lt,w:yt,h:Pt}=Jt($,Pe,Ce,Le,{minW:ss,minH:as,maxW:He-ze.right-Le.x,maxH:Ye-ze.bottom-Le.y,minX:ze.left,minY:ze.top});if(at(),B.current==="docked"&&v){let b=He-ze.left-ze.right,c=Ye-ze.top-ze.bottom-G.current,a=Z.current,A={...Me};De&&!ct(a)&&(yt>=b-er?A.inline=!0:Me.inline&&yt<b-tr&&(A.inline=!1)),_e&&!it(a)&&(Pt>=c-er?A.block=!0:Me.block&&Pt<c-tr&&(A.block=!1)),(A.inline!==Me.inline||A.block!==Me.block)&&(Me=A,j(A))}let i=We?yn(yn(Z.current,De?"inline":"block"),_e?"block":"inline"):Z.current;z(b=>({w:ct(i)?b.w:yt,h:it(i)?b.h:Pt})),B.current==="free"&&O({x:ut,y:lt})},onEnd:Pe=>{if(!Me.inline&&!Me.block){(X.current.inline||X.current.block)&&j({inline:!1,block:!1});return}z(Le=>({w:Me.inline?Pe.w:Le.w,h:Me.block?Pe.h:Le.h}));let Ce=Z.current;Me.inline&&(Ce=Qo(Ce,"inline")),Me.block&&(Ce=Qo(Ce,"block")),re(me.current,Ce),j({inline:!1,block:!1})}})},nt=$=>{if(ue.current){let q=ue.current;if(!q.hasDragged){if(Math.abs($.clientX-q.mouseX)+Math.abs($.clientY-q.mouseY)<4)return;if(q.hasDragged=!0,B.current==="docked"){if(Z.current){let We=H.current?.getBoundingClientRect();We&&z({w:Math.round(We.width),h:Math.round(We.height)}),re(me.current,null)}u?.undockWindow(e),_("free")}document.body.classList.add("rdd-dragging-active"),u?.setDraggingId(e)}let{cw:ce,ch:he}=$e(),be=Math.max(0,Math.min(q.posX+$.clientX-q.mouseX,ce-Q.current.w)),ye=Math.max(0,Math.min(q.posY+$.clientY-q.mouseY,he-Q.current.h));O({x:be,y:ye});let De=u?.containerRef?.current;if(De){let _e=ji(De,$.clientX,$.clientY);u?.setHoveredZone(_e&&k?Ut(_e):_e)}}},qe=()=>{if(ue.current?.hasDragged){let $=u?.hoveredZone;$&&(u?.dockWindow(e,$,Z.current),_("docked"),O(null),re($,Z.current)),u?.setHoveredZone(null),u?.setDraggingId(null)}document.body.classList.remove("rdd-dragging-active"),ue.current=null},je=()=>{ue.current?.hasDragged&&(u?.setHoveredZone(null),u?.setDraggingId(null)),document.body.classList.remove("rdd-dragging-active"),ue.current=null},se;if(E==="docked"&&u){let $=or(p,P),q=0,ce=$.length===0;for(let be of $){let ye=u.stacks[be]??[],De=ye.indexOf(e);if(De===-1)continue;ce=!0;let _e=0;for(let We=0;We<De;We++)_e+=(u.dockedSizes[ye[We]]??s)+ls;q=Math.max(q,_e)}G.current=q;let he=Be();se={zIndex:U,transition:"top 0.2s ease, bottom 0.2s ease",opacity:ce?void 0:0,pointerEvents:ce?void 0:"none"},ct(P)?(se.insetInlineStart=(u.insetInlineStart??0)+Yt,se.insetInlineEnd=(u.insetInlineEnd??0)+Yt):(se[p.endsWith("-right")?"insetInlineEnd":"insetInlineStart"]=Yt,se.width=l.w),it(P)?(se.top=he.top,se.bottom=he.bottom):p.startsWith("top-")?(se.top=he.top+q,se.height=l.h):(se.bottom=he.bottom+q,se.height=l.h)}else se={left:F?.x??0,top:F?.y??0,width:l.w,height:l.h,zIndex:U};let ee=nr.useMemo(()=>{if(E==="free")return["n","ne","e","se","s","sw","w","nw"];let $=p.startsWith("top-")?"s":"n",ce=p.endsWith("-right")!==k?"w":"e",he=ct(P),be=it(P),ye=[];return ye.push(...he?["e","w"]:[ce]),ye.push(...be?["n","s"]:[$]),!he&&!be&&ye.push(`${$}${ce}`),ye},[E,p,k,P]),Ee=vt("svg",{width:"8",height:"8",viewBox:"0 0 10 10",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",children:[ae("line",{x1:"1",y1:"1",x2:"9",y2:"9"}),ae("line",{x1:"9",y1:"1",x2:"1",y2:"9"})]});return vt("div",{ref:H,dir:k?"rtl":"ltr",className:["rdd-panel-float",Fe?"rdd-panel-float--active":"",Y.inline||Y.block?"rdd-panel-float--snapping":""].filter(Boolean).join(" "),style:se,onPointerDown:Ge,onPointerMove:nt,onPointerUp:qe,onPointerCancel:je,children:[vt("div",{className:"rdd-panel-float__header",onPointerDown:st,children:[n&&ae("span",{className:"rdd-panel-float__icon",children:n}),ae("span",{className:"rdd-panel-float__title",children:t}),ae("button",{type:"button",className:"rdd-panel-float__close",onClick:I,onPointerDown:$=>$.stopPropagation(),title:"Close","aria-label":"Close",children:Ee})]}),ae("div",{className:"rdd-panel-float__body",children:C}),ee.map($=>ae("div",{className:`rdd-resize-handle rdd-resize-${$}`,onPointerDown:tt($)},$))]})}function cs(){let[e,t]=Ie(!1),n=et(()=>{t(!0)},[]),o=et(()=>{t(!1)},[]);return{isOpen:e,open:n,close:o}}var us=[];function ps(){let e=Pn(sr),t=e?.managedWindowIds??us;return Xt(()=>({open:(n,o)=>e?.openManaged(n,o),close:n=>e?.closeManaged(n),closeAll:()=>e?.closeAllManaged(),isOpen:n=>t.includes(n),openIds:t}),[e,t])}export{kt as ConfirmationForm,In as ContextMenu,En as ContextMenuProvider,Ht as DefaultContextMenuAdapter,ti as DockableDesktopProvider,wn as FormContainerContext,Ct as FormContainerProvider,fi as LeftPanelRenderer,ai as ModalStackRenderer,Bn as PanelContributionProvider,lr as PanelFloatingWindow,Zi as PanelOverlayRoot,zn as PanelProvider,rn as PanelRegistry,Wt as PanelRegistryClass,Ji as PanelToolbar,os as PanelToolbarItem,ts as PanelToolbarSeparator,mi as RightPanelRenderer,Ri as SecondarySidebar,hi as SidePanelRenderer,Vo as Sidebar,Xi as ToastContainer,Di as Toolbar,Qi as ToolbarButton,rs as ToolbarCenter,pn as ToolbarProvider,is as ToolbarSearchInput,ns as ToolbarSpacer,es as ToolbarToggle,Fr as WindowManager,Sn as WindowManagerProvider,_n as WorkspaceClient,Jt as computeResizedRect,Vt as defaultPredefinedMessages,ve as formatLabel,At as isSerializable,Ao as sidebarSectionToTab,ft as startPointerDrag,Oi as toast,$n as useActivePanelContribution,Dn as useColorScheme,Dt as useFormContainer,Ue as useFormatMessage,Jr as useMergedSidebarTabs,Ur as useMergedToolbarItems,St as usePanelActions,yr as usePanelContext,Pr as usePanelContextMenu,Zr as usePanelContribution,cs as usePanelFloatingWindow,ps as usePanelFloatingWindowManager,ln as usePanelId,gr as usePanelSize,gt as usePanelState,ot as usePredefinedMessages,Kt as useRegistry,wr as useShowContextMenu,Mi as useSidebar,Si as useSidebarTab,pt as useStyleClasses,gn as useToolbar,qt as useWindowManagerActions,Ve as useWindowManagerState};
|
|
23
|
+
3. Verify styles.css is imported \u2014 it anchors html, body, #root to 100% height.`)}yt({width:Math.max(100,p.width),height:Math.max(100,p.height)})});return f.observe(r),()=>{f.disconnect()}},[]),Se(()=>{let r=lt.width,P=lt.height;s.floating.forEach(f=>{let h=typeof f.width=="string"?parseFloat(f.width):f.width,p=typeof f.height=="string"?parseFloat(f.height):f.height,N=typeof f.x=="string"?parseFloat(f.x):f.x,D=typeof f.y=="string"?parseFloat(f.y):f.y,W=h,G=p,Q=N,V=D,oe=!1;if(W>r&&(W=Math.max(200,r-20),oe=!0),G>P&&(G=Math.max(150,P-40),oe=!0),!f.anchor){let pe=r-100;Q>pe&&(Q=Math.max(0,pe),oe=!0);let ie=P-40;V>ie&&(V=Math.max(0,ie),oe=!0)}oe&&c(f.id,{x:Q,y:V,width:W,height:G})})},[lt,s.floating,c]),Se(()=>{let r=P=>{if(P.button!==0)return;let f=P.target;if(!f||typeof f.closest!="function")return;let h=f.closest(".rdd-floating-window");if(h){let N=h.getAttribute("data-window-id");N&&(R(N),I(N));return}let p=f.closest(".rdd-workspace-panel");if(p){let N=p.getAttribute("data-active-panel-id");N&&R(N)}};return document.addEventListener("pointerdown",r),()=>{document.removeEventListener("pointerdown",r)}},[I,R]);let Pt=(r,P)=>{P.preventDefault();let f=s.floating.find(V=>V.id===r);if(!f||f.maximized)return;I(r);let h=P.currentTarget,p=h.closest(".rdd-floating-window"),N=P.clientX,D=P.clientY,W=p?p.offsetLeft:0,G=p?p.offsetTop:0,Q=()=>{let V=Ge.current,oe=ye.current,pe=je.current,ie=$.current;if(ie)c(r,{anchor:ce?Ut(ie):ie});else if(pe)w(r,Ce(pe));else if(oe){let de=oe.index;oe.side==="right"&&(de+=1),u(r,oe.leafId,de)}else V&&_(r,V.leafId,Ce(V.position));q(null),Pe()};if(P.pointerType==="touch"){let V=P.pointerId,oe=!1,pe=()=>{oe=!0,clearTimeout(de),h.removeEventListener("pointermove",ie),h.removeEventListener("pointerup",pe),h.removeEventListener("pointercancel",pe)},ie=ge=>{Math.hypot(ge.clientX-N,ge.clientY-D)>at&&pe()},de=setTimeout(()=>{if(oe)return;h.removeEventListener("pointermove",ie),h.removeEventListener("pointerup",pe),h.removeEventListener("pointercancel",pe);try{h.setPointerCapture(V)}catch{return}h.classList.add("rdd-long-press-active"),document.body.classList.add("rdd-dragging-active"),E(r);let ge=Lt=>{let zt=Lt.clientX-N,Nt=Lt.clientY-D;c(r,{x:W+zt,y:G+Nt,anchor:null}),We(Lt.clientX,Lt.clientY)},Te=()=>{h.classList.remove("rdd-long-press-active"),document.body.classList.remove("rdd-dragging-active"),h.removeEventListener("pointermove",ge),h.removeEventListener("pointerup",Te),h.removeEventListener("pointercancel",xt),Q()},xt=()=>{h.classList.remove("rdd-long-press-active"),document.body.classList.remove("rdd-dragging-active"),h.removeEventListener("pointermove",ge),h.removeEventListener("pointerup",Te),h.removeEventListener("pointercancel",xt),Pe()};h.addEventListener("pointermove",ge),h.addEventListener("pointerup",Te),h.addEventListener("pointercancel",xt)},Me);h.addEventListener("pointermove",ie),h.addEventListener("pointerup",pe),h.addEventListener("pointercancel",pe)}else{let V=!1,oe=de=>{let ge=de.clientX-N,Te=de.clientY-D;!V&&(Math.abs(ge)>5||Math.abs(Te)>5)&&(V=!0,E(r)),V&&c(r,{x:W+ge,y:G+Te,anchor:null})},pe=()=>{document.body.classList.remove("rdd-dragging-active"),window.removeEventListener("pointermove",oe),window.removeEventListener("pointerup",pe),window.removeEventListener("pointercancel",ie),V&&Q()},ie=()=>{document.body.classList.remove("rdd-dragging-active"),window.removeEventListener("pointermove",oe),window.removeEventListener("pointerup",pe),window.removeEventListener("pointercancel",ie),V&&Pe()};document.body.classList.add("rdd-dragging-active"),window.addEventListener("pointermove",oe),window.addEventListener("pointerup",pe),window.addEventListener("pointercancel",ie)}},i=(r,P,f)=>{f.preventDefault(),f.stopPropagation();let h=s.floating.find(ge=>ge.id===r);if(!h||h.maximized)return;I(r);let p=f.currentTarget,N=p.closest(".rdd-floating-window"),D={x:N?N.offsetLeft:0,y:N?N.offsetTop:0,w:N?N.offsetWidth:400,h:N?N.offsetHeight:300},W=lt.width,G=lt.height,Q=typeof h.x=="string"?parseFloat(h.x):h.x,V=typeof h.y=="string"?parseFloat(h.y):h.y,oe=typeof h.width=="string"?parseFloat(h.width):h.width,pe=typeof h.height=="string"?parseFloat(h.height):h.height,ie=P==="se"&&Math.abs(Q+oe-W)<4,de=P==="se"&&Math.abs(V+pe-G)<4;ft({element:p,pointerId:f.pointerId,startClientX:f.clientX,startClientY:f.clientY,captureStart:()=>D,activeClasses:[{el:document.body,classes:["rdd-resizing-active"]}],onMove:(ge,Te,xt)=>{let Lt=Jt(P,ge,Te,xt,{minW:200,minH:150}),{x:zt,y:Nt,w:xn,h:Cn}=Lt;ie&&(zt=W-xn,zt<0&&(zt=0,xn=W)),de&&(Nt=G-Cn,Nt<0&&(Nt=0,Cn=G)),c(r,{x:zt,y:Nt,width:xn,height:Cn})}})},b=r=>{if(Z.current){let P=r==="left"?-150:150;Z.current.scrollBy({left:P,behavior:"smooth"})}},g=Wn(()=>{X.current&&clearTimeout(X.current),le(!0)},[]),d=Wn(()=>{X.current=setTimeout(()=>le(!1),400)},[]);Se(()=>{n==="autohide"&&s.minimized.length>j.current&&(X.current&&clearTimeout(X.current),le(!0),X.current=setTimeout(()=>le(!1),2e3)),j.current=s.minimized.length},[s.minimized.length,n]);let S=Dn();return Se(()=>(e?document.documentElement.setAttribute("data-workspace-skin",e):document.documentElement.removeAttribute("data-workspace-skin"),()=>{document.documentElement.removeAttribute("data-workspace-skin")}),[e]),Se(()=>(S==="light"?document.documentElement.setAttribute("data-color-scheme","light"):document.documentElement.removeAttribute("data-color-scheme"),()=>{document.documentElement.removeAttribute("data-color-scheme")}),[S]),Se(()=>(l?document.documentElement.classList.remove("rdd-no-animations"):document.documentElement.classList.add("rdd-no-animations"),()=>{document.documentElement.classList.remove("rdd-no-animations")}),[l]),fe("div",{className:`rdd-workspace${l?"":" rdd-no-animations"}`,"data-workspace-skin":e,"data-color-scheme":S,style:{display:"flex",flexDirection:"column",position:"relative",width:"100%",height:"100%",overflow:"hidden",userSelect:"none"},dir:s.dir,children:[fe("div",{ref:ut,className:s.draggedPanelId?"rdd-dragging-active":void 0,style:{flexGrow:1,width:"100%",position:"relative",overflow:"hidden"},children:[s.draggedPanelId!==null&&fe(ko,{children:[T("div",{"data-edge-trigger":"left",className:"rdd-workspace-edge-trigger rdd-edge-trigger-left",onPointerEnter:()=>se("left"),onPointerLeave:()=>se(null)}),T("div",{"data-edge-trigger":"right",className:"rdd-workspace-edge-trigger rdd-edge-trigger-right",onPointerEnter:()=>se("right"),onPointerLeave:()=>se(null)}),T("div",{"data-edge-trigger":"top",className:"rdd-workspace-edge-trigger rdd-edge-trigger-top",onPointerEnter:()=>se("top"),onPointerLeave:()=>se(null)}),T("div",{"data-edge-trigger":"bottom",className:"rdd-workspace-edge-trigger rdd-edge-trigger-bottom",onPointerEnter:()=>se("bottom"),onPointerLeave:()=>se(null)})]}),s.draggedPanelId!==null&&["top-left","top-right","bottom-left","bottom-right"].map(r=>T("div",{className:`rdd-corner-zone rdd-corner-zone--${r}${te===r?" rdd-corner-zone--hovered":""}`,onPointerEnter:()=>{q(r),se(null)},onPointerLeave:()=>q(null),"aria-hidden":"true"},r)),s.draggedPanelId!==null&&nt!==null&&T("div",{className:"rdd-workspace-edge-preview",style:(()=>{let r=`${s.edgeSplitRatio*100}%`;switch(nt){case"left":return{left:0,top:0,bottom:0,width:r};case"right":return{right:0,top:0,bottom:0,width:r};case"top":return{top:0,left:0,right:0,height:r};case"bottom":return{bottom:0,left:0,right:0,height:r}}})()}),T("div",{style:{width:"100%",height:"100%",overflow:"hidden",position:"relative"},children:s.gridRoot?T(zo,{node:s.gridRoot,path:[],onTabRightClick:Ye,activeDropZone:$e,onHoverDropZone:_e,onTabDragStart:He,hoveredTab:he,onTabHover:De,defaultPanelIcon:t,onRequestClosePanel:z}):T("div",{className:"rdd-empty-workspace-grid",children:"Grid Empty"})}),s.floating.map(r=>{let P=s.panels[r.id];if(!P)return null;let f=r.maximized,h=s.draggedPanelId===r.id,p=s.activePanelId===r.id,D=L.get(P.component)?.defaultOptions;return fe("div",{"data-window-id":r.id,dir:s.dir,onPointerDownCapture:()=>{R(r.id),I(r.id)},className:`rdd-floating-window ${f?"rdd-maximized":""} ${p?"rdd-window-focused":""} ${H??""}`,style:(()=>{let Q=typeof r.width=="number"?`${r.width}px`:r.width,V=typeof r.height=="number"?`${r.height}px`:r.height;if(f)return{position:"absolute",left:0,top:0,width:"100%",height:"100%",zIndex:r.z,pointerEvents:h?"none":"auto"};if(r.anchor){let oe=s.floating.filter(Te=>Te.anchor===r.anchor&&!Te.maximized),pe=oe.findIndex(Te=>Te.id===r.id),ie=8;for(let Te=0;Te<pe;Te++){let xt=typeof oe[Te].height=="number"?oe[Te].height:parseFloat(oe[Te].height);ie+=xt+8}let de=r.anchor.startsWith("top");return{position:"absolute",[r.anchor.endsWith("-right")?"insetInlineEnd":"insetInlineStart"]:8,[de?"top":"bottom"]:ie,width:Q,height:V,zIndex:r.z,transition:h?"none":"top 0.2s ease, bottom 0.2s ease",pointerEvents:h?"none":"auto"}}return{position:"absolute",left:typeof r.x=="number"?`${r.x}px`:r.x,top:typeof r.y=="number"?`${r.y}px`:r.y,width:Q,height:V,zIndex:r.z,pointerEvents:h?"none":"auto"}})(),children:[fe("div",{onDoubleClick:()=>C(r.id),onPointerDown:W=>{D?.canDrag!==!1&&Pt(r.id,W)},className:"rdd-floating-window-titlebar rdd-cursor-move",style:{cursor:f||D?.canDrag===!1?"default":"move"},children:[fe("span",{className:"rdd-floating-window-title",children:[T("span",{className:"rdd-window-title-icon",children:D?.icon||t||An}),fe("span",{children:[ve(P.title,O),P.dirty?" *":""]})]}),fe("div",{className:"rdd-titlebar-actions",style:{gap:"var(--rdd-header-button-gap, 4px)"},onPointerDown:W=>W.stopPropagation(),children:[D?.renderHeaderActions&&T("div",{className:"rdd-window-header-actions",children:D.renderHeaderActions(r.id)}),A(r.id).length>0&&T("button",{type:"button",className:"rdd-custom-tab-btn rdd-btn-more-actions",title:"More actions",onClick:W=>{W.stopPropagation();let G=A(r.id);G.length!==0&&m({event:W,items:G})},children:fe("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"currentColor",style:{display:"block"},children:[T("circle",{cx:"12",cy:"5",r:"2"}),T("circle",{cx:"12",cy:"12",r:"2"}),T("circle",{cx:"12",cy:"19",r:"2"})]})}),T("button",{type:"button",title:f?ve(a.restoreSize,O):ve(a.maximize,O),onClick:()=>C(r.id),className:"rdd-custom-tab-btn rdd-btn-maximize-tab",children:T("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:T("rect",{x:"4",y:"4",width:"16",height:"16",rx:"1.5"})})}),D?.canMinimize!==!1&&T("button",{type:"button",title:ve(a.minimize,O),onClick:()=>x(r.id),className:"rdd-custom-tab-btn rdd-btn-minimize-tab",children:T("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:T("path",{d:"M5 12h14"})})}),D?.canClose!==!1&&T("button",{type:"button",title:ve(a.close,O),onClick:()=>z(r.id),className:"rdd-custom-tab-btn rdd-btn-close-tab",children:T("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:T("path",{d:"M18 6L6 18M6 6l12 12"})})})]})]}),T("div",{className:B??void 0,style:{flexGrow:1,width:"100%",overflow:"hidden",position:"relative",isolation:"isolate"},children:T(Lo,{panelId:r.id},r.id)}),!f&&fe(ko,{children:[T("div",{onPointerDown:W=>i(r.id,"n",W),className:"rdd-resize-handle rdd-resize-n"}),T("div",{onPointerDown:W=>i(r.id,"ne",W),className:"rdd-resize-handle rdd-resize-ne"}),T("div",{onPointerDown:W=>i(r.id,"e",W),className:"rdd-resize-handle rdd-resize-e"}),T("div",{onPointerDown:W=>i(r.id,"se",W),className:"rdd-resize-handle rdd-resize-se"}),T("div",{onPointerDown:W=>i(r.id,"s",W),className:"rdd-resize-handle rdd-resize-s"}),T("div",{onPointerDown:W=>i(r.id,"sw",W),className:"rdd-resize-handle rdd-resize-sw"}),T("div",{onPointerDown:W=>i(r.id,"w",W),className:"rdd-resize-handle rdd-resize-w"}),T("div",{onPointerDown:W=>i(r.id,"nw",W),className:"rdd-resize-handle rdd-resize-nw"})]})]},r.id)})]}),(n==="always"||s.minimized.length>0)&&fe("div",{className:["rdd-taskbar-footer-container",`rdd-taskbar-mode-${n}`,n==="autohide"&&me?"rdd-taskbar-expanded":""].filter(Boolean).join(" "),style:{height:"48px",zIndex:100},onPointerEnter:n==="autohide"?g:void 0,onPointerLeave:n==="autohide"?d:void 0,children:[n==="autohide"&&T("div",{className:"rdd-taskbar-peek-handle"}),T("button",{type:"button",onClick:()=>b("left"),className:"rdd-taskbar-nav-btn",style:{display:s.minimized.length>4?"block":"none"},children:"\u25C0"}),T("div",{ref:Z,className:"rdd-taskbar-items-container",style:{scrollSnapType:"x mandatory"},children:s.minimized.map(r=>{let f=L.get(r.component)?.defaultOptions?.icon||t||An;return T("div",{onClick:()=>{ue.current!=="touch"&&(Y(null),M(r.id))},onContextMenu:h=>ze(r.id,h),onPointerDown:h=>{if(ue.current=h.pointerType,h.pointerType!=="touch")return;let p=h.currentTarget,N=h.clientX,D=h.clientY,W=h.pointerId,G=!1,Q=()=>{G=!0,clearTimeout(pe),p.removeEventListener("pointermove",oe),p.removeEventListener("pointerup",V),p.removeEventListener("pointercancel",Q)},V=()=>{Q();let ie=p.getBoundingClientRect();K?.id===r.id?(M(r.id),Y(null)):Y({id:r.id,rect:ie,title:r.title,component:r.component,fromTouch:!0})},oe=ie=>{Math.hypot(ie.clientX-N,ie.clientY-D)>at&&Q()},pe=setTimeout(()=>{if(G)return;p.removeEventListener("pointermove",oe),p.removeEventListener("pointerup",V),p.removeEventListener("pointercancel",Q);try{p.setPointerCapture(W)}catch{return}navigator.vibrate&&navigator.vibrate(10);let ie=de=>{p.removeEventListener("pointerup",ie),p.removeEventListener("pointercancel",ie),ze(r.id,de)};p.addEventListener("pointerup",ie),p.addEventListener("pointercancel",ie)},Me);p.addEventListener("pointermove",oe),p.addEventListener("pointerup",V),p.addEventListener("pointercancel",Q)},onPointerEnter:h=>{if(h.pointerType==="touch"||Fe)return;re.current&&clearTimeout(re.current);let p=h.currentTarget.getBoundingClientRect();h.clientX>=p.left&&h.clientX<=p.right&&h.clientY>=p.top&&h.clientY<=p.bottom&&Y({id:r.id,rect:p,title:r.title,component:r.component})},onPointerLeave:h=>{h.pointerType!=="touch"&&(re.current=setTimeout(()=>{Y(null)},150))},className:"rdd-taskbar-glassmorphic-item",style:{backdropFilter:"blur(6px)",transition:"all 0.2s",cursor:"pointer",scrollSnapAlign:"start",width:"38px",height:"38px",position:"relative",padding:0},children:T("span",{className:"rdd-taskbar-item-icon",children:f})},r.id)})}),K&&To(fe("div",{className:"rdd-taskbar-item-tooltip",dir:s.dir,style:{position:"fixed",left:`${K.rect.left+K.rect.width/2}px`,top:`${K.rect.top-8}px`,transform:"translateX(-50%) translateY(-100%)",opacity:1,pointerEvents:"auto",zIndex:999999},onPointerEnter:()=>{re.current&&clearTimeout(re.current)},onPointerLeave:r=>{r.pointerType!=="touch"&&Y(null)},onClick:()=>{M(K.id),Y(null)},onContextMenu:r=>ze(K.id,r),onPointerDown:r=>{if(r.pointerType!=="touch")return;let P=K.id,f=r.currentTarget,h=r.clientX,p=r.clientY,N=r.pointerId,D=!1,W=()=>{D=!0,clearTimeout(Q),f.removeEventListener("pointermove",G),f.removeEventListener("pointerup",W),f.removeEventListener("pointercancel",W)},G=V=>{Math.hypot(V.clientX-h,V.clientY-p)>at&&W()},Q=setTimeout(()=>{if(D)return;f.removeEventListener("pointermove",G),f.removeEventListener("pointerup",W),f.removeEventListener("pointercancel",W);try{f.setPointerCapture(N)}catch{return}navigator.vibrate&&navigator.vibrate(10);let V=oe=>{f.removeEventListener("pointerup",V),f.removeEventListener("pointercancel",V),ze(P,oe)};f.addEventListener("pointerup",V),f.addEventListener("pointercancel",V)},Me);f.addEventListener("pointermove",G),f.addEventListener("pointerup",W),f.addEventListener("pointercancel",W)},children:[fe("div",{className:"rdd-tooltip-header-row",children:[fe("span",{className:"rdd-tooltip-title-text rdd-text-truncate",style:{maxWidth:"140px"},children:[ve(K.title,O),s.panels[K.id]?.dirty?" *":""]}),T("span",{onClick:r=>{r.stopPropagation(),z(K.id),Y(null)},title:ve(a.closePanel,O),className:"rdd-tooltip-close-x",children:T("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:T("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),T(Dr,{panelId:K.id})]}),document.body),T("button",{type:"button",onClick:()=>b("right"),className:"rdd-taskbar-nav-btn",style:{display:s.minimized.length>4?"block":"none"},children:"\u25B6"})]}),Object.keys(s.panels).map(r=>{let P=s.panels[r];if(!P)return null;let f=Eo(r);return To(T(Wr,{panelId:r,children:T("div",{style:{width:"100%",height:"100%"},dir:s.dir,children:Nr(r,P,L)})}),f,r)}),J===null&&T(o.Component,{ref:ee,theme:"dark",formatMessageProvider:O,onShow:()=>U(!0),onHide:()=>U(!1)}),s.draggedPanelId!==null&&!s.floating.some(r=>r.id===s.draggedPanelId)&&fe("div",{className:"rdd-drag-ghost-tab",style:{left:st.x+12,top:st.y+12,zIndex:1e5},children:["\u{1F4C4} ",ve(s.panels[s.draggedPanelId]?.title,O)||"Tab"]})]})},Fr=Or;var _n=class{registry;initialState;config;_actions=null;_initialized=!1;_pendingCalls=[];_pendingOpenPanelIds=new Set;_pendingSubscriptions=[];_disconnectedWarnTimer=null;constructor(t={}){if(this.registry=new Wt,this.initialState=t.initialState??null,this.config={formatMessage:t.formatMessage,predefinedMessages:t.predefinedMessages,dir:t.dir,defaultSplitRatio:t.defaultSplitRatio,defaultEdgeSplitRatio:t.defaultEdgeSplitRatio,zIndexBase:t.zIndexBase},t.panels)for(let[n,o]of Object.entries(t.panels))this.registry.register(n,o.component,o.defaultOptions)}_connect(t){this._actions=t,this._disconnectedWarnTimer!==null&&(clearTimeout(this._disconnectedWarnTimer),this._disconnectedWarnTimer=null),this._initialized||(this._initialized=!0);for(let o of this._pendingSubscriptions)o.unsub=t.subscribe(o.event,o.callback);let n=this._pendingCalls.splice(0);for(let o of n)o(t)}_disconnect(){this._actions=null;for(let t of this._pendingSubscriptions)t.unsub?.(),t.unsub=null}get isConnected(){return this._actions!==null}_startWarnTimer(){this._disconnectedWarnTimer===null&&(this._disconnectedWarnTimer=setTimeout(()=>{!this.isConnected&&this._pendingCalls.length>0&&console.error("[react-dockable-desktop] WorkspaceClient has "+this._pendingCalls.length+" queued call(s) but was never connected to a WindowManagerProvider. Did you forget client={workspace} on <WindowManagerProvider>?")},process.env.NODE_ENV==="production"?5e3:1e3))}_dispatch(t){this._actions?t(this._actions):(this._pendingCalls.push(t),this._startWarnTimer())}_subscribeRaw(t,n){if(this._actions)return this._actions.subscribe(t,n);let o={event:t,callback:n,unsub:null};return this._pendingSubscriptions.push(o),()=>{o.unsub?.(),o.unsub=null;let l=this._pendingSubscriptions.indexOf(o);l!==-1&&this._pendingSubscriptions.splice(l,1)}}openPanel(...t){if(this._actions){this._actions.openPanel(...t);return}let n=t[0];this._pendingOpenPanelIds.has(n)||(this._pendingOpenPanelIds.add(n),this._pendingCalls.push(o=>{this._pendingOpenPanelIds.delete(n),o.openPanel(...t)}),this._startWarnTimer())}closePanel(t){this._dispatch(n=>n.closePanel(t))}minimizePanel(t){this._dispatch(n=>n.minimizePanel(t))}restorePanel(...t){this._dispatch(n=>n.restorePanel(...t))}floatPanel(...t){this._dispatch(n=>n.floatPanel(...t))}dockPanel(...t){this._dispatch(n=>n.dockPanel(...t))}maximizePanel(t){this._dispatch(n=>n.maximizePanel(t))}focusPanel(t){this._dispatch(n=>n.focusPanel(t))}isOpen(t){return this._actions?.isOpen(t)??!1}getOpenPanelIds(){return this._actions?.getOpenPanelIds()??[]}findPanelId(t,n){return this._actions?.findPanelId(t,n)??null}saveLayout(){return this._actions?.saveLayout()??""}loadLayout(t){return this._actions?this._actions.loadLayout(t):(this._pendingCalls.push(n=>{n.loadLayout(t)}),!1)}setDirection(t){this._dispatch(n=>n.setDirection(t))}updateSplitSizes(t,n){this._dispatch(o=>o.updateSplitSizes(t,n))}updateFloatingPosition(t,n){this._dispatch(o=>o.updateFloatingPosition(t,n))}setDraggedPanelId(t){this._dispatch(n=>n.setDraggedPanelId(t))}dockPanelToGroup(t,n,o){this._dispatch(l=>l.dockPanelToGroup(t,n,o))}movePanelOrder(t,n,o){this._dispatch(l=>l.movePanelOrder(t,n,o))}closeLeafGroup(t){this._dispatch(n=>n.closeLeafGroup(t))}registerCloseGuard(t,n){this._dispatch(o=>o.registerCloseGuard(t,n))}unregisterCloseGuard(t){this._dispatch(n=>n.unregisterCloseGuard(t))}registerStateProvider(t,n){this._dispatch(o=>o.registerStateProvider(t,n))}unregisterStateProvider(t){this._dispatch(n=>n.unregisterStateProvider(t))}setPanelDirty(t,n,o){this._dispatch(l=>l.setPanelDirty(t,n,o))}updatePanelTitle(t,n){this._dispatch(o=>o.updatePanelTitle(t,n))}requestClosePanel(t,n){return this._actions?this._actions.requestClosePanel(t,n):(this._pendingCalls.push(o=>{o.requestClosePanel(t,n)}),Promise.resolve())}dockPanelToWorkspaceEdge(t,n){this._dispatch(o=>o.dockPanelToWorkspaceEdge(t,n))}showContextMenu(t){this._dispatch(n=>n.showContextMenu(t))}publish(t,n){this._dispatch(o=>o.publish(t,n))}subscribe(t,n){return this._subscribeRaw(t,n)}onPanelOpen(t){return this._subscribeRaw("panel:opened",n=>{let o=n;t(o.id,o.component)})}onPanelClose(t){return this._subscribeRaw("panel:closed",n=>{t(n.id)})}onPanelMinimize(t){return this._subscribeRaw("panel:minimized",n=>{t(n.id)})}onPanelRestore(t){return this._subscribeRaw("panel:restored",n=>{t(n.id)})}onLayoutChanged(t){return this._subscribeRaw("layout:changed",()=>t())}onPanelsExcluded(t){return this._subscribeRaw("layout:panels-excluded",n=>{t(n.panels)})}};import{useContext as ei}from"react";import{createContext as _r,useContext as Hr,useMemo as Br,useState as No}from"react";import{jsx as $r}from"react/jsx-runtime";var Do=_r(null),pn=({children:e})=>{let[t,n]=No({}),[o,l]=No({}),s=Br(()=>({getActiveInGroup:L=>t[L]??null,setActiveInGroup:(L,M)=>n(x=>({...x,[L]:M})),isModifierActive:L=>o[L]??!1,setModifierActive:(L,M)=>l(x=>({...x,[L]:M})),toggleModifier:L=>l(M=>({...M,[L]:!M[L]}))}),[t,o]);return $r(Do.Provider,{value:s,children:e})};function gn(){let e=Hr(Do);if(!e)throw new Error("useToolbar must be used within DockableDesktopProvider");return e}import{createContext as Gr,useCallback as Yr,useContext as Wo,useLayoutEffect as Xr,useMemo as Vr,useRef as Kr,useSyncExternalStore as qr}from"react";import{jsx as Qr}from"react/jsx-runtime";function jr(){let e=new Map,t=new Set,n=()=>t.forEach(o=>o());return{publish(o,l){return e.set(o,l),n(),()=>{e.get(o)===l&&(e.delete(o),n())}},get(o){return e.get(o)??null},subscribe(o){return t.add(o),()=>t.delete(o)}}}var Hn=Gr(null),Bn=({children:e})=>{let t=Vr(()=>jr(),[]);return Qr(Hn.Provider,{value:t,children:e})};function Zr(e){let t=ln(),n=Wo(Hn),o=Kr(null);if(!n)throw new Error("usePanelContribution must be used within PanelContributionProvider");Xr(()=>{if(n)return o.current?.(),o.current=n.publish(t,e),()=>{o.current?.(),o.current=null}},[n,t,e])}function $n(){let e=Ve(l=>l.activePanelId),t=Wo(Hn);if(!t)throw new Error("useActivePanelContribution must be used within PanelContributionProvider");let n=Yr(l=>t?t.subscribe(l):()=>{},[t]),o=()=>t&&e?t.get(e):null;return qr(n,o,o)}function Ao(e,t=null){return{id:e.id,label:e.label,icon:e.icon??t,renderContent:()=>e.content}}function Ur(e){let t=$n();return t?.toolbarItems?.length?[...e,{type:"separator"},...t.toolbarItems]:e}function Jr(e,t=null){let n=$n();return n?.sidebarSections?.length?[...e,...n.sidebarSections.map(o=>Ao(o,t))]:e}import{jsx as en}from"react/jsx-runtime";var ti=({contextMenuAdapter:e=Ht,...t})=>{let n=ei(Bt),o=en(pn,{children:en(Sn,{...t,children:en(Bn,{children:en(zn,{children:t.children})})})});return n!==null?o:en(En,{adapter:e,formatMessageProvider:t.formatMessage,children:o})};import{useCallback as tn,useRef as Oo,useEffect as ni,useState as oi,useMemo as ri}from"react";import{Fragment as li,jsx as Qe,jsxs as Gn}from"react/jsx-runtime";var ii=({modal:e,index:t,isTopmost:n})=>{let{close:o,openModal:l,updateInstance:s,setDirty:L}=St(),M=Ue(),x=ot(),{dir:v}=Ve(),{modalClass:C,modalBodyClass:c}=pt(),I=Oo(null),{id:k,Component:E,props:_,options:u,dirty:w,dirtyOptions:R}=e,A=u,[m,y]=oi(A.icon||null),F=Oo(A);F.current=A;let O=ve(A.title,M),a=tn(async Y=>{if(Y?.force){o(k);return}if(I.current){if(!await I.current())return;o(k);return}if(w){l(kt,{title:R?.title||x.unsavedChangesTitle,message:R?.message||{id:x.unsavedChangesMessage.id,defaultMessage:x.unsavedChangesMessage.defaultMessage,values:{title:O}},alert:R?.alert,alertType:R?.alertType||"danger",useYesNoTitles:!0,onOK:()=>o(k)},{size:"small"});return}o(k)},[o,l,k,w,R,O,x]),z=tn((Y,re)=>L(k,Y,re),[L,k]),H=tn(Y=>s(k,{options:{...F.current,title:Y}}),[s,k]),B=tn(Y=>y(Y),[]),J=tn(Y=>(I.current=Y,()=>{I.current=null}),[]),ee=ri(()=>({requestClose:a,setDirty:z,setTitle:H,setIcon:B,onCloseRequested:J,containerType:"modal",instanceId:k}),[a,z,H,B,J,k]),Z=w?`${O} *`:O,me=A.size?`rdd-modal-size-${A.size}`:"rdd-modal-size-auto",le=A.closable!==!1,X=A.bodyPadding,j=X!=null?typeof X=="number"?`${X}px`:X:void 0;ni(()=>{if(!n||!le)return;let Y=re=>{re.key==="Escape"&&(re.stopPropagation(),a())};return document.addEventListener("keydown",Y),()=>document.removeEventListener("keydown",Y)},[a,le,n]);let K=`calc(var(--rdd-z-base, 1000) + 9000 + ${t*10})`;return Gn("div",{className:"rdd-modal-overlay",style:{zIndex:K},dir:v,children:[Qe("div",{className:"rdd-modal-curtain",onClick:le?()=>a():void 0}),Gn("div",{className:`rdd-modal-window ${me} ${C??""}`,children:[Gn("div",{className:"rdd-modal-header",children:[m&&Qe("div",{className:"rdd-modal-icon",children:m}),Qe("h4",{className:"rdd-modal-title",children:Z}),le&&Qe("button",{className:"rdd-modal-close-button",onClick:()=>a(),title:M(x.closeTooltip),type:"button",children:Qe("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:Qe("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),Qe("div",{className:`rdd-modal-body ${c??""}`,style:j!=null?{padding:j}:void 0,children:Qe(Ct,{value:ee,children:Qe(E,{..._,panelId:k})})})]})]})},si=()=>{let{modals:e}=gt();return e.length===0?null:Qe(li,{children:e.map((t,n)=>Qe(ii,{modal:t,index:n,isTopmost:n===e.length-1},t.id))})},ai=si;import{useCallback as Gt,useRef as Yn,useEffect as _o,useState as ui,useMemo as pi}from"react";import{useLayoutEffect as di,useState as ci}from"react";function Fo(e){let[t,n]=ci(null);return di(()=>{let o=e.current?.parentElement;if(!o)return;let l=()=>{let L=o.getBoundingClientRect();n({top:L.top,left:L.left,right:window.innerWidth-L.right,height:L.height})};l();let s=new ResizeObserver(l);return s.observe(o),window.addEventListener("resize",l),()=>{s.disconnect(),window.removeEventListener("resize",l)}},[e]),t}import{Fragment as bi,jsx as Ae,jsxs as Xn}from"react/jsx-runtime";var fn=({panel:e,position:t,defaultWidth:n,containerRect:o})=>{let{close:l,openModal:s,updateInstance:L,setDirty:M,registerCloseHandler:x,unregisterCloseHandler:v}=St(),{modals:C}=gt(),c=Ue(),I=ot(),{dir:k}=Ve(),{sidePanelClass:E,sidePanelBodyClass:_}=pt(),u=Yn(null),{id:w,Component:R,props:A,options:m,dirty:y,dirtyOptions:F}=e,O=m,[a,z]=ui(O.icon||null),H=Yn(O);H.current=O;let B=ve(O.title,c),J=Gt(async U=>{if(U?.force){l(w);return}if(u.current){if(!await u.current())return;l(w);return}if(y){s(kt,{title:F?.title||I.unsavedChangesTitle,message:F?.message||{id:I.unsavedChangesMessage.id,defaultMessage:I.unsavedChangesMessage.defaultMessage,values:{title:B}},alert:F?.alert,alertType:F?.alertType||"danger",useYesNoTitles:!0,onOK:()=>l(w)},{size:"small"});return}l(w)},[l,s,w,y,F,B,I]),ee=Gt(async()=>u.current?await u.current():!y,[y]);_o(()=>(x(w,ee),()=>v(w)),[w,ee,x,v]);let Z=Gt((U,Fe)=>M(w,U,Fe),[M,w]),me=Gt(U=>L(w,{options:{...H.current,title:U}}),[L,w]),le=Gt(U=>z(U),[]),X=Gt(U=>(u.current=U,()=>{u.current=null}),[]),j=pi(()=>({requestClose:J,setDirty:Z,setTitle:me,setIcon:le,onCloseRequested:X,containerType:t==="left"?"left-panel":"right-panel",instanceId:w}),[J,Z,me,le,X,t,w]),K=y?`${B} *`:B;_o(()=>{let U=Fe=>{Fe.key==="Escape"&&C.length===0&&J()};return document.addEventListener("keydown",U),()=>document.removeEventListener("keydown",U)},[J,C.length]);let Y=O.width||n||400,re=typeof Y=="number"?`${Y}px`:Y,ue=O.bodyPadding,Oe=ue!=null?typeof ue=="number"?`${ue}px`:ue:void 0;return Ae("div",{className:`rdd-side-panel rdd-side-panel-${t} rdd-side-panel-visible ${E??""}`,style:{width:re,...o?{top:o.top,height:o.height,bottom:"auto",...t==="right"?{right:o.right}:{left:o.left}}:{}},dir:k,children:Xn("div",{className:"rdd-side-panel-window",children:[Xn("div",{className:"rdd-side-panel-header",children:[a&&Ae("div",{className:"rdd-side-panel-icon",children:a}),Ae("h4",{className:"rdd-side-panel-title",children:K}),Ae("button",{className:"rdd-side-panel-close-button",onClick:()=>J(),title:c(I.closeTooltip),type:"button",children:Ae("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:Ae("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),Ae("div",{className:`rdd-side-panel-body ${_??""}`,style:Oe!=null?{padding:Oe}:void 0,children:Ae(Ct,{value:j,children:Ae(R,{...A,panelId:w})})})]})})},Vn=({children:e})=>{let t=Yn(null),n=Fo(t);return Ae("div",{ref:t,style:{display:"contents"},children:e(n)})},gi=({defaultWidth:e})=>{let{leftPanel:t,rightPanel:n}=gt();return Ae(Vn,{children:o=>Xn(bi,{children:[t&&Ae(fn,{panel:t,position:"left",defaultWidth:e,containerRect:o},t.id),n&&Ae(fn,{panel:n,position:"right",defaultWidth:e,containerRect:o},n.id)]})})},fi=({defaultWidth:e})=>{let{leftPanel:t}=gt();return Ae(Vn,{children:n=>t?Ae(fn,{panel:t,position:"left",defaultWidth:e,containerRect:n},t.id):null})},mi=({defaultWidth:e})=>{let{rightPanel:t}=gt();return Ae(Vn,{children:n=>t?Ae(fn,{panel:t,position:"right",defaultWidth:e,containerRect:n},t.id):null})},hi=gi;import vi,{useState as mn,useEffect as hn,useRef as Kn,useCallback as bn,useImperativeHandle as yi,useContext as jn,useMemo as ht,createContext as Go,forwardRef as Yo,memo as Pi}from"react";import{jsx as xe,jsxs as vn}from"react/jsx-runtime";function qn(e){return"renderContent"in e}function xi(e){return"render"in e}function Ho(e){return e==null?[]:Array.isArray(e)?e:[e]}var Zn=Go(null),Xo=Go(null);function Ci({tabId:e,onClose:t,onOpen:n,setActiveTabId:o,children:l}){let s=ht(()=>({tabId:e,onClose:t,onOpen:n,openTab:L=>o(L)}),[e,t,n,o]);return xe(Xo.Provider,{value:s,children:l})}function Bo(e,t,n,o){if(xi(e))return xe(vi.Fragment,{children:e.render()},e.id??t);if(qn(e)){if(e.hidden)return null;let l=n===e.id;return xe("button",{type:"button",onClick:()=>o(e.id),className:`rdd-sidebar-tab-btn${l?" rdd-active":""}`,title:e.label,"aria-pressed":l,children:e.icon},e.id)}return xe("button",{type:"button",onClick:e.onClick,disabled:e.disabled,className:"rdd-sidebar-tab-btn rdd-sidebar-header-action-btn",title:e.label,"aria-label":e.label,children:e.icon},e.id??t)}var $o=Pi(function({tabs:t,headerEntries:n,footerEntries:o,activeTabId:l,isVisible:s,position:L,onTabClick:M}){return xe("div",{style:{width:s?"56px":"0px",height:"100%",overflow:"hidden",transition:"width 0.25s cubic-bezier(0.4, 0, 0.2, 1)",flexShrink:0},children:vn("div",{className:`rdd-sidebar-tabs-strip rdd-${L}${n.length?" rdd-sidebar-tabs-strip--has-header-action":""}${o.length?" rdd-sidebar-tabs-strip--has-footer-action":""}`,style:{width:"56px",height:"100%"},children:[n.length>0&&xe("div",{className:"rdd-sidebar-header-area",children:n.map((x,v)=>Bo(x,v,l,M))}),xe("div",{className:"rdd-sidebar-tabs-list",children:t.map(x=>{if(x.hidden)return null;let v=l===x.id;return xe("button",{type:"button",onClick:()=>M(x.id),className:`rdd-sidebar-tab-btn${v?" rdd-active":""}`,title:x.label,"aria-pressed":v,children:x.icon},x.id)})}),o.length>0&&xe("div",{className:"rdd-sidebar-footer-area",children:o.map((x,v)=>Bo(x,v,l,M))})]})})});function wi({position:e,currentWidth:t,minWidth:n,maxWidth:o,onWidthChange:l,onResizeStart:s,onResizeEnd:L}){return xe("div",{className:"rdd-resizer-bar",style:{cursor:"col-resize",width:"1px",height:"100%",flexShrink:0,zIndex:20},onPointerDown:x=>{x.preventDefault();let v=x.currentTarget,C=[{el:v,classes:["rdd-active"]},{el:document.body,classes:["rdd-resizing-active","rdd-resizing-col-active"]}];s(),ft({element:v,pointerId:x.pointerId,startClientX:x.clientX,startClientY:x.clientY,captureStart:()=>t,activeClasses:C,onMove:(c,I,k)=>{let E=e==="right"?k-c:k+c;l(Math.max(n,Math.min(o,E)))},onEnd:()=>L()})}})}var Vo=Yo(function({position:t="right",tabs:n,headerAction:o,footerAction:l,defaultWidth:s,minWidth:L=150,maxWidth:M=600,onWidthChange:x,activeTabId:v,onActiveTabChange:C,visible:c,onVisibilityChange:I,stripVisible:k,onStripVisibilityChange:E,showCloseButton:_=!1,hideDefaultHeader:u=!1,renderHeader:w,isSecondary:R=!1,children:A},m){let y=v!==void 0,[F,O]=mn(()=>s??280),a=bn(te=>{O(te),x?.(te)},[x]),[z,H]=mn(!1),[B,J]=mn(null),ee=y?v:B,Z=ht(()=>Ho(o),[o]),me=ht(()=>Ho(l),[l]),le=ht(()=>Z.filter(qn),[Z]),X=ht(()=>me.filter(qn),[me]),j=ht(()=>[...le,...n,...X],[le,n,X]),[K,Y]=mn(()=>new Set),re=ht(()=>{let te=new Set(K);ee&&te.add(ee);for(let Ee of j)Ee.eagerMount&&te.add(Ee.id);return te},[K,ee,j]),ue=Kn(ee??null);hn(()=>{ue.current=ee??null},[ee]);let Oe=Kn(F);hn(()=>{Oe.current=F},[F]);let U=bn(te=>{Y(te!==null?Ee=>{if(Ee.has(te))return Ee;let $=new Set(Ee);return $.add(te),$}:Ee=>{let $=!1,q=new Set(Ee);for(let ce of Ee){let he=j.find(be=>be.id===ce);he&&!he.eagerMount&&!he.preserveState&&(q.delete(ce),$=!0)}return $?q:Ee}),y||J(te),C?.(te)},[y,C,j]);hn(()=>{ee!=null&&!j.some(te=>te.id===ee)&&U(null)},[ee,j,U]),yi(m,()=>({openTab:te=>U(te),closeDrawer:()=>U(null),getActiveTab:()=>ue.current,show:()=>I?.(!0),hide:()=>I?.(!1),toggle:()=>I?.(c===!1),showStrip:()=>E?.(!0),hideStrip:()=>E?.(!1),setWidth:te=>a(Math.max(L,Math.min(M,te))),getWidth:()=>Oe.current}),[U,c,I,E,a,L,M]);let Fe=bn(te=>{U(ee===te?null:te)},[ee,U]),$e=bn(()=>U(null),[U]),Be=u||w!=null,Ge=Kn(!1);hn(()=>{process.env.NODE_ENV==="development"&&(!_||!Be||Ge.current||(Ge.current=!0,console.warn('[react-dockable-desktop] `showCloseButton` has no effect because the default header is suppressed (`hideDefaultHeader` is set, or `renderHeader` was passed). The "X" close button only renders as part of the library\'s own default header, which is skipped in this case. Add your own close control inside `renderHeader` (or `renderContent`), wired to its `onClose` parameter or `useSidebarTab().onClose`.')))},[_,Be]);let st=ht(()=>({openTab:te=>U(te),closeDrawer:()=>U(null),getActiveTab:()=>ue.current,position:t,isSecondary:R}),[U,t,R]),tt=c!==!1,nt=tt&&k!==!1,qe=tt&&ee!=null,je=xe("div",{className:`rdd-sidebar-content-drawer rdd-${t}`,style:{flexBasis:qe?`${F}px`:"0px",flexShrink:1,flexGrow:0,minWidth:qe?`${L}px`:"0px",maxWidth:qe?`${M}px`:"0px",overflow:"hidden",transition:z?"none":"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:j.map(te=>{if(!re.has(te.id))return null;let $=ee===te.id,q=()=>U(te.id);return vn("div",{style:{display:$?"flex":"none",flexDirection:"column",height:"100%",width:"100%"},children:[Be?w?.(te,$e,q):vn("div",{className:"rdd-sidebar-drawer-header",children:[xe("span",{className:"rdd-sidebar-header-title",children:te.label}),_&&xe("button",{type:"button",className:"rdd-sidebar-drawer-close-button",onClick:$e,title:"Close","aria-label":"Close",children:xe("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:xe("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),xe("div",{className:"rdd-sidebar-drawer-body",children:xe(Ci,{tabId:te.id,onClose:$e,onOpen:q,setActiveTabId:U,children:te.renderContent(te.id,$e,q)})})]},te.id)})}),se=qe?xe(wi,{position:t,currentWidth:F,minWidth:L,maxWidth:M,onWidthChange:a,onResizeStart:()=>H(!0),onResizeEnd:()=>H(!1)}):null;return xe(Zn.Provider,{value:st,children:vn("div",{style:{display:"flex",flexDirection:"row",width:"100%",height:"100%",overflow:"hidden"},children:[t==="left"&&xe($o,{tabs:n,headerEntries:Z,footerEntries:me,activeTabId:ee,isVisible:nt,position:t,onTabClick:Fe}),t==="left"&&je,t==="left"&&se,xe("div",{style:{flex:"1 1 0%",minWidth:0,overflow:"hidden"},children:A}),t==="right"&&se,t==="right"&&je,t==="right"&&xe($o,{tabs:n,headerEntries:Z,footerEntries:me,activeTabId:ee,isVisible:nt,position:t,onTabClick:Fe})]})})}),Ri=Yo(function(t,n){let o=jn(Zn);if(!o)throw new Error("SecondarySidebar must be rendered inside a primary Sidebar's children");if(o.isSecondary)throw new Error("SecondarySidebar cannot be nested inside another SecondarySidebar");let l=o.position==="left"?"right":"left";return xe(Vo,{ref:n,...t,position:l,isSecondary:!0})});function Mi(){let e=jn(Zn);if(!e)throw new Error("useSidebar must be used within Sidebar");return e}function Si(){let e=jn(Xo);if(!e)throw new Error("useSidebarTab must be used within a Sidebar tab renderContent tree");return e}import{forwardRef as Ti,useImperativeHandle as ki,useState as Ko,useRef as qo,useEffect as jo,useLayoutEffect as Ii}from"react";import{createPortal as Ei}from"react-dom";import{Fragment as Wi,jsx as Ke,jsxs as Zo}from"react/jsx-runtime";function Li(e,t,n=!1,o=8){switch(t){case"left":return n?{right:window.innerWidth-e.left+o,top:e.top}:{left:e.right+o,top:e.top};case"right":return n?{left:e.right+o,top:e.top}:{right:window.innerWidth-e.left+o,top:e.top};case"top":return n?{top:e.bottom+o,right:window.innerWidth-e.right}:{top:e.bottom+o,left:e.left};case"bottom":return n?{bottom:window.innerHeight-e.top+o,right:window.innerWidth-e.right}:{bottom:window.innerHeight-e.top+o,left:e.left}}}function zi({item:e,position:t,toolbar:n}){let[o,l]=Ko(!1),[s,L]=Ko(null),M=qo(null),x=qo(null),v=e.activeItemId!==void 0,C=v?e.activeItemId:n.getActiveInGroup(e.id),c=e.items.find(u=>!("type"in u)&&u.id===C),I=C!==null,k=c?.icon??e.defaultIcon,E=c?.label??e.label,_=()=>{e.disabled||(!o&&M.current&&L(M.current.getBoundingClientRect()),l(u=>!u))};return Ii(()=>{if(!o||!x.current)return;let u=x.current,w=u.getBoundingClientRect(),R=8;w.right>window.innerWidth-R&&(u.style.left=`${Math.max(R,window.innerWidth-w.width-R)}px`,u.style.right="auto"),w.left<R&&(u.style.left=`${R}px`,u.style.right="auto"),w.bottom>window.innerHeight-R&&(u.style.top=`${Math.max(R,window.innerHeight-w.height-R)}px`,u.style.bottom="auto"),w.top<R&&(u.style.top=`${R}px`,u.style.bottom="auto")},[o]),jo(()=>{if(!o)return;let u=w=>{let R=w.target;M.current?.contains(R)||x.current?.contains(R)||l(!1)};return document.addEventListener("mousedown",u),()=>document.removeEventListener("mousedown",u)},[o]),jo(()=>{if(!o)return;let u=w=>{w.key==="Escape"&&l(!1)};return document.addEventListener("keydown",u),()=>document.removeEventListener("keydown",u)},[o]),Zo(Wi,{children:[Ke("button",{ref:M,type:"button",className:`rdd-toolbar-btn rdd-toolbar-btn-group${I?" rdd-active":""}`,title:E,"aria-label":E,"aria-expanded":o,"aria-haspopup":"menu",disabled:e.disabled,onClick:_,children:k}),o&&s&&Ei(Ke("div",{ref:x,className:`rdd-toolbar-group-flyout rdd-${t}`,style:Li(s,t,document.documentElement.dir==="rtl"),role:"menu",children:e.items.map((u,w)=>{if("type"in u)return Ke("div",{className:"rdd-toolbar-group-flyout-sep",role:"separator"},`sep-${w}`);let R=C===u.id;return Zo("button",{type:"button",className:`rdd-toolbar-group-flyout-item${R?" rdd-active":""}`,disabled:u.disabled,role:"menuitem","aria-pressed":R,onClick:()=>{v?e.onActiveItemChange?.(u.id):n.setActiveInGroup(e.id,u.id),u.onActivate?.(u.id),l(!1)},children:[Ke("span",{className:"rdd-toolbar-group-flyout-icon",children:u.icon}),Ke("span",{className:"rdd-toolbar-group-flyout-label",children:u.label}),u.shortcut&&Ke("span",{className:"rdd-toolbar-group-flyout-shortcut",children:u.shortcut})]},u.id)})}),document.body)]})}function Ni(e,t,n,o){switch(e.type){case"separator":return Ke("div",{className:"rdd-toolbar-separator",role:"separator"},`sep-${t}`);case"action":return Ke("button",{type:"button",className:"rdd-toolbar-btn rdd-toolbar-btn-action",title:e.label,"aria-label":e.label,disabled:e.disabled,onClick:e.onClick,children:e.icon},e.id);case"radio":{let l=n.getActiveInGroup(e.group)===e.id;return Ke("button",{type:"button",className:`rdd-toolbar-btn rdd-toolbar-btn-radio${l?" rdd-active":""}`,title:e.label,"aria-label":e.label,"aria-pressed":l,disabled:e.disabled,onClick:()=>{n.setActiveInGroup(e.group,e.id),e.onActivate?.(e.id)},children:e.icon},e.id)}case"toggle":{let l=e.active!==void 0,s=l?e.active:n.isModifierActive(e.id);return Ke("button",{type:"button",className:`rdd-toolbar-btn rdd-toolbar-btn-toggle${s?" rdd-active":""}`,title:e.label,"aria-label":e.label,"aria-pressed":s,disabled:e.disabled,onClick:()=>{l||n.toggleModifier(e.id),e.onToggle?.(!s)},children:e.icon},e.id)}case"group":return Ke(zi,{item:e,position:o,toolbar:n},e.id)}}var Di=Ti(function({position:t="left",items:n,visible:o,onVisibilityChange:l,className:s,style:L},M){let x=gn(),v=t==="left"||t==="right";ki(M,()=>({show:()=>l?.(!0),hide:()=>l?.(!1),toggle:()=>l?.(o===!1)}),[o,l]);let C=o!==!1?{}:v?{width:"0px"}:{height:"0px"};return Ke("div",{className:`rdd-toolbar-strip rdd-${t}${s?` ${s}`:""}`,role:"toolbar","aria-orientation":v?"vertical":"horizontal",style:{...C,...L},children:n.map((c,I)=>Ni(c,I,x,t))})});import{useCallback as Jn,useEffect as nn,useLayoutEffect as Ai,useRef as Et,useState as Qn}from"react";import{createPortal as Uo}from"react-dom";import{jsx as Re,jsxs as on}from"react/jsx-runtime";var eo=class{listeners=new Set;counter=0;subscribe(t){this.listeners.add(t)}unsubscribe(t){this.listeners.delete(t)}show(t,n={}){let o=n.id??`toast-${++this.counter}`;return this.emit({kind:"show",id:o,message:t,rawOpts:{...n,id:o}}),o}update(t,n,o){this.emit({kind:"update",id:t,message:n,patch:o})}dismiss(t){this.emit({kind:"dismiss",id:t})}emit(t){this.listeners.forEach(n=>n(t))}},Xe=new eo,Oi=Object.assign((e,t)=>Xe.show(e,t),{info:(e,t)=>Xe.show(e,{...t,type:"info"}),success:(e,t)=>Xe.show(e,{...t,type:"success"}),warning:(e,t)=>Xe.show(e,{...t,type:"warning"}),error:(e,t)=>Xe.show(e,{...t,type:"error"}),dismiss:e=>Xe.dismiss(e),promise:(e,t,n)=>{let o=Xe.show(t.pending,{...n,type:"info",duration:0});return e.then(l=>{let s=typeof t.success=="function"?t.success(l):t.success;Xe.update(o,s,{type:"success",duration:n?.duration??5e3})},l=>{let s=typeof t.error=="function"?t.error(l):t.error;Xe.update(o,s,{type:"error",duration:n?.duration??5e3})}),e}}),Fi=()=>on("svg",{className:"rdd-toast__icon",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:[Re("circle",{cx:"8",cy:"8",r:"7",stroke:"currentColor",strokeWidth:"1.5"}),Re("path",{d:"M8 5v.01M8 7.5v3.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]}),_i=()=>on("svg",{className:"rdd-toast__icon",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:[Re("circle",{cx:"8",cy:"8",r:"7",stroke:"currentColor",strokeWidth:"1.5"}),Re("path",{d:"M5 8l2 2 4-4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]}),Hi=()=>on("svg",{className:"rdd-toast__icon",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:[Re("path",{d:"M8 2.5L14 13.5H2L8 2.5z",stroke:"currentColor",strokeWidth:"1.5",strokeLinejoin:"round"}),Re("path",{d:"M8 7v2.5M8 11.5v.01",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]}),Bi=()=>on("svg",{className:"rdd-toast__icon",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:[Re("circle",{cx:"8",cy:"8",r:"7",stroke:"currentColor",strokeWidth:"1.5"}),Re("path",{d:"M5.5 5.5l5 5M10.5 5.5l-5 5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]}),$i=()=>Re("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:Re("path",{d:"M4 4l8 8M12 4l-8 8",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})}),Gi={info:Re(Fi,{}),success:Re(_i,{}),warning:Re(Hi,{}),error:Re(Bi,{})};function Yi({id:e,message:t,options:n,exiting:o,isLeft:l,showProgress:s,pauseOnHover:L,animation:M,onDismiss:x,onExited:v}){let C=Et(null),c=Et(null),I=Et(null),k=Et(n.duration),E=Et(0),[_,u]=Qn(!1),w=M==="none"?"rdd-toast--visible":M==="fade"?"rdd-toast--fade-entering":l?"rdd-toast--entering-left":"rdd-toast--entering",[R,A]=Qn(w);Ai(()=>{let z=C.current,H=c.current;if(!z||!H||o)return;let B=()=>{z.style.maxHeight=`${z.scrollHeight}px`};B();let J=new ResizeObserver(B);return J.observe(H),()=>J.disconnect()},[o]),nn(()=>{if(M==="none")return;let z=requestAnimationFrame(()=>A("rdd-toast--visible"));return()=>cancelAnimationFrame(z)},[]);let m=Jn(z=>{z<=0||(E.current=Date.now(),I.current=setTimeout(()=>x(e),z))},[e,x]);nn(()=>(I.current&&clearTimeout(I.current),k.current=n.duration,m(n.duration),()=>{I.current&&clearTimeout(I.current)}),[n.duration,m]),nn(()=>{if(!o)return;let z=C.current;if(!z||M==="none"){v(e);return}let H=J=>{J.propertyName==="max-height"&&v(e)};z.addEventListener("transitionend",H);let B=setTimeout(()=>v(e),520);return()=>{z.removeEventListener("transitionend",H),clearTimeout(B)}},[o,e,v,M]);let y=()=>{!L||n.duration===0||(I.current&&(clearTimeout(I.current),I.current=null,k.current=Math.max(0,k.current-(Date.now()-E.current))),u(!0))},F=()=>{!L||n.duration===0||(u(!1),m(k.current))},O=["rdd-toast",n.type&&`rdd-toast--${n.type}`,R,o&&"rdd-toast--exiting",_&&"rdd-toast--paused"].filter(Boolean).join(" "),a=n.icon!==void 0?n.icon:n.type?Gi[n.type]:null;return on("div",{ref:C,role:"status","aria-live":"polite",className:O,onMouseEnter:y,onMouseLeave:F,children:[a&&a,Re("div",{ref:c,className:"rdd-toast__body",children:n.content!==void 0?n.content:t}),n.closable&&Re("button",{type:"button",className:"rdd-toast__close",onClick:()=>x(e),"aria-label":"Close notification",children:Re($i,{})}),s&&n.duration>0&&Re("div",{className:"rdd-toast__progress",style:{animationDuration:`${n.duration}ms`}})]})}function Un(e,t,n){return{id:e.id,type:e.type??"info",duration:e.duration??t,closable:e.closable??n,icon:e.icon,content:e.content,onClose:e.onClose}}function Xi({position:e="top-right",maxVisible:t=3,defaultDuration:n=5e3,defaultClosable:o=!0,pauseOnHover:l=!0,animation:s="slide",newestOnTop:L=!1,progressBar:M=!1,width:x=320,adapter:v}){let[C,c]=Qn([]),I=Et([]),k=Et(C);k.current=C;let E=Jn(A=>{c(m=>m.map(y=>y.id===A?{...y,exiting:!0}:y)),k.current.find(m=>m.id===A)?.options.onClose?.()},[]),_=Jn(A=>{let m=I.current.shift()??null;c(y=>{let F=y.filter(a=>a.id!==A);if(!m)return F;let O=Un(m.rawOpts,n,o);return[...F,{id:m.id,message:m.message,options:O,exiting:!1}]})},[n,o]);if(nn(()=>{if(v)return;let A=m=>{if(m.kind==="show"){let y=Un(m.rawOpts,n,o),F={id:m.id,message:m.message,options:y,exiting:!1},O={id:m.id,message:m.message,rawOpts:m.rawOpts};c(a=>a.find(B=>B.id===m.id)?a.map(B=>B.id===m.id?{...B,message:m.message,options:y}:B):a.filter(B=>!B.exiting).length<t?[...a,F]:(I.current.some(B=>B.id===O.id)||I.current.push(O),a))}else m.kind==="update"?(c(y=>y.map(F=>{if(F.id!==m.id)return F;let O={...F.options,...m.patch,id:F.id};return{...F,message:m.message,options:O}})),I.current=I.current.map(y=>y.id!==m.id?y:{...y,message:m.message,rawOpts:{...y.rawOpts,...m.patch}})):m.kind==="dismiss"&&(m.id===void 0?(c(y=>y.map(F=>({...F,exiting:!0}))),I.current=[]):k.current.some(F=>F.id===m.id)?E(m.id):I.current=I.current.filter(F=>F.id!==m.id))};return Xe.subscribe(A),()=>Xe.unsubscribe(A)},[v,t,n,o,E]),nn(()=>{if(!v)return;let A=m=>{if(m.kind==="show"){let y=Un(m.rawOpts,n,o);v.show(m.id,m.message,y)}else m.kind==="update"?v.update(m.id,m.message,m.patch):m.kind==="dismiss"&&v.dismiss(m.id)};return Xe.subscribe(A),()=>Xe.unsubscribe(A)},[v,n,o]),v){if(!v.Container)return null;let A=v.Container;return Uo(Re(A,{position:e}),document.body)}let u=e.endsWith("left"),w="";L===!0&&(w="rdd-toast-container--newest-top"),L===!1&&(w="rdd-toast-container--newest-bottom");let R=["rdd-toast-container",`rdd-toast-container--${e}`,w].filter(Boolean).join(" ");return Uo(Re("div",{className:R,style:{width:x},"aria-label":"Notifications","aria-live":"polite",children:C.map(A=>Re(Yi,{id:A.id,message:A.message,options:A.options,exiting:A.exiting,isLeft:u,showProgress:M,pauseOnHover:l,animation:s,onDismiss:E,onExited:_},A.id))}),document.body)}import nr,{useState as Ie,useContext as Pn,createContext as no,useRef as ke,useLayoutEffect as to,useCallback as et,useMemo as Xt,useEffect as Jo}from"react";import{createPortal as Vi}from"react-dom";import{Fragment as gs,jsx as ae,jsxs as vt}from"react/jsx-runtime";var ct=e=>e==="width"||e==="both",it=e=>e==="height"||e==="both",Qo=(e,t)=>t==="inline"?it(e)?"both":"width":ct(e)?"both":"height",yn=(e,t)=>t==="inline"?e==="both"?"height":ct(e)?null:e:e==="both"?"width":it(e)?null:e,or=(e,t)=>it(t)?[]:ct(t)?e.startsWith("top-")?["top-left","top-right"]:["bottom-left","bottom-right"]:[e],Ki=(e,t)=>`${e.startsWith("top-")?"top":"bottom"}-${t}`,qi=(e,t)=>`${t}-${e.endsWith("-right")?"right":"left"}`,rr=["top-left","top-right","bottom-left","bottom-right"],ir=no(null),sr=no(null),ar=no(null),bt=80;function ji(e,t,n){let o=e.getBoundingClientRect(),l=t-o.left,s=n-o.top;return l<bt&&s<bt?"top-left":l>o.width-bt&&s<bt?"top-right":l<bt&&s>o.height-bt?"bottom-left":l>o.width-bt&&s>o.height-bt?"bottom-right":null}function Zi({children:e,className:t,style:n}){let[o,l]=Ie({}),[s,L]=Ie({}),[M,x]=Ie({"top-left":[],"top-right":[],"bottom-left":[],"bottom-right":[]}),[v,C]=Ie({}),[c,I]=Ie(null),[k,E]=Ie(null),[_,u]=Ie(null),[w,R]=Ie(()=>new Map),A=ke(100),m=ke(null),y=et((X,j)=>(l(K=>({...K,[X]:j})),()=>l(K=>{let Y={...K};return delete Y[X],Y})),[]),F=et(X=>{A.current+=1;let j=A.current;L(K=>({...K,[X]:j})),u(X)},[]),O=et((X,j,K=null)=>{let Y=or(j,K);x(re=>{let ue={"top-left":re["top-left"].filter(U=>U!==X),"top-right":re["top-right"].filter(U=>U!==X),"bottom-left":re["bottom-left"].filter(U=>U!==X),"bottom-right":re["bottom-right"].filter(U=>U!==X)};for(let U of Y)ue[U]=[...ue[U],X];return rr.every(U=>ue[U].length===re[U].length&&ue[U].every((Fe,$e)=>Fe===re[U][$e]))?re:ue})},[]),a=et(X=>{x(j=>({"top-left":j["top-left"].filter(K=>K!==X),"top-right":j["top-right"].filter(K=>K!==X),"bottom-left":j["bottom-left"].filter(K=>K!==X),"bottom-right":j["bottom-right"].filter(K=>K!==X)}))},[]),z=et((X,j)=>{C(K=>K[X]===j?K:{...K,[X]:j})},[]),H=et((X,j)=>{R(K=>{let Y=new Map(K);return Y.set(X,j),Y})},[]),B=et(X=>{R(j=>{let K=new Map(j);return K.delete(X),K})},[]),J=et(()=>{R(new Map)},[]),ee=Xt(()=>Array.from(w.keys()),[w]),Z=Xt(()=>({registerToolbar:y,insetTop:o.top??0,insetBottom:o.bottom??0}),[y,o]),me=Xt(()=>({managedWindowIds:ee,openManaged:H,closeManaged:B,closeAllManaged:J}),[ee,H,B,J]),le=Xt(()=>({topId:_,zOrders:s,focusWindow:F,containerRef:m,stacks:M,dockedSizes:v,dockWindow:O,undockWindow:a,reportDockedSize:z,draggingId:c,setDraggingId:I,hoveredZone:k,setHoveredZone:E,insetTop:o.top??0,insetBottom:o.bottom??0,insetInlineStart:o.left??0,insetInlineEnd:o.right??0}),[_,s,F,M,v,O,a,z,c,k,o]);return ae(ir.Provider,{value:Z,children:ae(sr.Provider,{value:me,children:ae(ar.Provider,{value:le,children:vt("div",{ref:m,className:`rdd-panel-overlay-root${c!==null?" rdd-dragging-active":""}${t?" "+t:""}`,style:n,children:[e,c!==null&&ae(Ui,{hoveredZone:k}),Array.from(w.entries()).map(([X,j])=>ae(lr,{id:X,title:j.title,icon:j.icon,open:!0,onClose:()=>B(X),defaultAnchor:j.anchor??"top-right",defaultWidth:j.width??320,defaultHeight:j.height??240,defaultStretch:j.stretch,children:j.content},X))]})})})})}function Ui({hoveredZone:e}){return ae(gs,{children:rr.map(t=>ae("div",{className:`rdd-panel-float-dropzone rdd-panel-float-dropzone--${t}${e===t?" rdd-panel-float-dropzone--hovered":""}`,"aria-hidden":"true"},t))})}function Ji({position:e,variant:t="transparent",buttonVariant:n="ghost",buttonSize:o,style:l,className:s,children:L}){let M=Pn(ir),x=ke(null),v=ke(null);to(()=>{let E=x.current;if(!E||!M)return;let _=()=>{let w=e==="top"||e==="bottom"?E.offsetHeight:E.offsetWidth;v.current?.(),v.current=M.registerToolbar(e,w)};_();let u=new ResizeObserver(_);return u.observe(E),()=>{u.disconnect(),v.current?.(),v.current=null}},[e,M?.registerToolbar]);let C={position:"absolute",zIndex:5,pointerEvents:"none",boxSizing:"border-box"};e==="top"?(C.top=0,C.left=0,C.right=0):e==="bottom"?(C.bottom=0,C.left=0,C.right=0):e==="left"?(C.insetInlineStart=0,C.top=M?.insetTop??0,C.bottom=M?.insetBottom??0):(C.insetInlineEnd=0,C.top=M?.insetTop??0,C.bottom=M?.insetBottom??0);let I=e==="left"||e==="right"?{...(M?.insetTop??0)>0?{paddingTop:0}:{},...(M?.insetBottom??0)>0?{paddingBottom:0}:{}}:{},k=o!=null?{"--rdd-panel-toolbar-btn-size":`${o}px`}:{};return ae("div",{ref:x,className:`rdd-panel-toolbar rdd-panel-toolbar--${e}${s?" "+s:""}`,"data-variant":t,"data-btn-variant":n,style:{...C,...I,...k,...l},children:L})}function Qi({icon:e,onClick:t,disabled:n,title:o,variant:l}){return ae("button",{type:"button",className:"rdd-panel-toolbar-btn",onClick:t,disabled:n,title:o,"aria-label":o,...l?{"data-variant":l}:{},children:e})}function es({icon:e,active:t,onToggle:n,disabled:o,title:l,variant:s}){return ae("button",{type:"button",className:`rdd-panel-toolbar-btn${t?" rdd-panel-toolbar-btn--active":""}`,onClick:n,disabled:o,title:l,"aria-label":l,"aria-pressed":t,...s?{"data-variant":s}:{},children:e})}function ts(){return ae("span",{className:"rdd-panel-toolbar__sep","aria-hidden":"true"})}function ns(){return ae("span",{className:"rdd-panel-toolbar__spacer","aria-hidden":"true"})}function os({children:e}){return ae("span",{className:"rdd-panel-toolbar__item",children:e})}function rs({children:e}){return ae("div",{className:"rdd-panel-toolbar__center",children:e})}function is({placeholder:e="Search\u2026",onSearch:t,onSelect:n}){let[o,l]=Ie(!1),[s,L]=Ie(""),[M,x]=Ie([]),[v,C]=Ie(null),c=ke(null),I=ke(null),k=ke(null),E=ke(null),_=()=>{l(!0),setTimeout(()=>I.current?.focus({preventScroll:!0}),0)},u=()=>{l(!1),L(""),x([]),C(null),k.current?.abort(),E.current&&clearTimeout(E.current)},w=O=>{let a=O.target.value;if(L(a),k.current?.abort(),E.current&&clearTimeout(E.current),!a.trim()){x([]),C(null);return}E.current=setTimeout(async()=>{let z=new AbortController;k.current=z;try{let H=await t(a,z.signal);if(!z.signal.aborted){x(H);let B=c.current;if(B&&H.length>0){let J=B.getBoundingClientRect(),ee=Math.max(J.width,240),Z=J.left;Z+ee>window.innerWidth-8&&(Z=window.innerWidth-ee-8),C({top:J.bottom+4,left:Z,width:ee})}else C(null)}}catch{}},300)},R=O=>{n(O),u()},A=O=>{c.current?.contains(O.relatedTarget)||u()},m=O=>{O.key==="Escape"&&u()},y=Xt(()=>{let O={};for(let a of M){let z=a.group??"";O[z]||(O[z]=[]),O[z].push(a)}return O},[M]),F=vt("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[ae("circle",{cx:"6.5",cy:"6.5",r:"4.5"}),ae("line",{x1:"10",y1:"10",x2:"14",y2:"14"})]});return o?vt("div",{ref:c,className:"rdd-panel-toolbar-search rdd-panel-toolbar-search--open",onBlur:A,children:[ae("button",{type:"button",className:"rdd-panel-toolbar-btn",onClick:u,"aria-label":"Close search",title:"Close search",children:F}),ae("input",{ref:I,className:"rdd-panel-toolbar-search__input",type:"text",value:s,onChange:w,onKeyDown:m,placeholder:e,autoComplete:"off"}),v&&M.length>0&&Vi(ae("div",{className:"rdd-panel-toolbar-search__dropdown",style:{position:"fixed",top:v.top,left:v.left,width:v.width},onMouseDown:O=>O.preventDefault(),children:Object.entries(y).map(([O,a])=>vt(nr.Fragment,{children:[O&&ae("div",{className:"rdd-panel-toolbar-search__group",children:O}),a.map(z=>vt("button",{type:"button",className:"rdd-panel-toolbar-search__item",onClick:()=>R(z),children:[z.icon&&ae("span",{className:"rdd-panel-toolbar-search__item-icon",children:z.icon}),ae("span",{className:"rdd-panel-toolbar-search__item-label",children:z.label}),z.description&&ae("span",{className:"rdd-panel-toolbar-search__item-desc",children:z.description})]},z.id))]},O||"__default__"))}),document.body)]}):ae("div",{ref:c,className:"rdd-panel-toolbar-search",children:ae("button",{type:"button",className:"rdd-panel-toolbar-btn",onClick:_,title:"Search","aria-label":"Search",children:F})})}function lr(e){let t=Pn(ar);return e.open?ae(ds,{ctx:t,...e},e.id):null}var ss=120,as=60,Yt=8,ls=8,er=16,tr=40;function ds({id:e,title:t,icon:n,defaultAnchor:o,defaultWidth:l,defaultHeight:s,defaultStretch:L,stretch:M,onPlacementChange:x,stretchable:v=!0,children:C,ctx:c,onClose:I}){let k=Pn(Ft)?.isRtl??!1,[E,_]=Ie("docked"),[u,w]=Ie(o),[R,A]=Ie(L??null),m=M!==void 0,y=m?M??null:R,[F,O]=Ie(null),[a,z]=Ie({w:l,h:s}),H=ke(null),B=ke(E);B.current=E;let J=ke(F);J.current=F;let ee=ke(a);ee.current=a;let Z=ke(y);Z.current=y;let me=ke(u);me.current=u;let le=ke(x);le.current=x;let[X,j]=Ie({inline:!1,block:!1}),K=ke(X);K.current=X;let Y=ke(0),re=et(($,q)=>{w($),m||A(q),le.current?.({anchor:$,stretch:q})},[m]),ue=ke(null);to(()=>{E==="docked"&&c?.dockWindow(e,u,y)},[E,u,y]),to(()=>()=>{c?.undockWindow(e)},[]);let Oe=ke(!1);Jo(()=>{if(process.env.NODE_ENV!=="development"||Oe.current||E!=="docked"||!it(y)||!c)return;let $=u.endsWith("-right")?"right":"left",q=[`top-${$}`,`bottom-${$}`].flatMap(ce=>c.stacks[ce]??[]).filter(ce=>ce!==e);q.length!==0&&(Oe.current=!0,console.warn(`[react-dockable-desktop] PanelFloatingWindow "${e}" stretches the block axis (stretch: "${y}") while ${q.length} other widget(s) are anchored to the same side (${q.join(", ")}). A block-stretched widget spans the axis that stacking uses to separate siblings, so it cannot stack and will overlap them \u2014 z-order decides which is on top. Either give it a fixed height, or move the other widgets to the opposite side.`))},[E,y,u,c?.stacks,e]),Jo(()=>{c?.reportDockedSize(e,a.h)},[a.h]);let U=c?.zOrders[e]??101,Fe=!c||c.topId===e,$e=()=>{let $=H.current?.offsetParent;return{cw:$?.clientWidth??9999,ch:$?.clientHeight??9999}},Be=()=>{let $=c?.insetInlineStart??0,q=c?.insetInlineEnd??0;return{left:(k?q:$)+Yt,right:(k?$:q)+Yt,top:c?.insetTop??0,bottom:c?.insetBottom??0}},Ge=()=>{c?.focusWindow(e)},st=$=>{if($.button!==0)return;$.preventDefault();let q,ce;if(B.current==="docked"){let he=H.current,be=c?.containerRef?.current;if(he&&be){let ye=he.getBoundingClientRect(),De=be.getBoundingClientRect();q=ye.left-De.left,ce=ye.top-De.top}else q=Yt,ce=c?.insetTop??0}else q=J.current?.x??0,ce=J.current?.y??0;ue.current={mouseX:$.clientX,mouseY:$.clientY,posX:q,posY:ce,hasDragged:!1},H.current?.setPointerCapture($.pointerId)},tt=$=>q=>{if(q.button!==0)return;q.preventDefault(),q.stopPropagation();let ce=0,he=0;if(B.current==="free")ce=J.current?.x??0,he=J.current?.y??0;else{let Pe=H.current,Ce=Pe?.offsetParent;if(Pe&&Ce){let Le=Pe.getBoundingClientRect(),He=Ce.getBoundingClientRect();ce=Le.left-He.left,he=Le.top-He.top}}let be=H.current?.getBoundingClientRect(),ye={x:ce,y:he,w:ct(Z.current)&&be?be.width:ee.current.w,h:it(Z.current)&&be?be.height:ee.current.h},De=$.includes("e")||$.includes("w"),_e=$.includes("n")||$.includes("s"),We=!1,Me={inline:!1,block:!1},at=()=>{if(We||B.current!=="docked")return;let Pe=Z.current,Ce=De&&ct(Pe),Le=_e&&it(Pe);if(!Ce&&!Le)return;We=!0;let He=Pe,Ye=me.current;if(Ce){He=yn(He,"inline");let ze=$.includes("e");Ye=Ki(Ye,ze!==k?"left":"right")}Le&&(He=yn(He,"block"),Ye=qi(Ye,$.includes("s")?"top":"bottom")),re(Ye,He)};ft({element:q.currentTarget,pointerId:q.pointerId,startClientX:q.clientX,startClientY:q.clientY,captureStart:()=>ye,activeClasses:[{el:document.body,classes:["rdd-resizing-active"]}],onMove:(Pe,Ce,Le)=>{let{cw:He,ch:Ye}=$e(),ze=B.current==="docked"?Be():{left:0,right:0,top:0,bottom:0},{x:ut,y:lt,w:yt,h:Pt}=Jt($,Pe,Ce,Le,{minW:ss,minH:as,maxW:He-ze.right-Le.x,maxH:Ye-ze.bottom-Le.y,minX:ze.left,minY:ze.top});if(at(),B.current==="docked"&&v){let b=He-ze.left-ze.right,g=Ye-ze.top-ze.bottom-Y.current,d=Z.current,S={...Me};De&&!ct(d)&&(yt>=b-er?S.inline=!0:Me.inline&&yt<b-tr&&(S.inline=!1)),_e&&!it(d)&&(Pt>=g-er?S.block=!0:Me.block&&Pt<g-tr&&(S.block=!1)),(S.inline!==Me.inline||S.block!==Me.block)&&(Me=S,j(S))}let i=We?yn(yn(Z.current,De?"inline":"block"),_e?"block":"inline"):Z.current;z(b=>({w:ct(i)?b.w:yt,h:it(i)?b.h:Pt})),B.current==="free"&&O({x:ut,y:lt})},onEnd:Pe=>{if(!Me.inline&&!Me.block){(K.current.inline||K.current.block)&&j({inline:!1,block:!1});return}z(Le=>({w:Me.inline?Pe.w:Le.w,h:Me.block?Pe.h:Le.h}));let Ce=Z.current;Me.inline&&(Ce=Qo(Ce,"inline")),Me.block&&(Ce=Qo(Ce,"block")),re(me.current,Ce),j({inline:!1,block:!1})}})},nt=$=>{if(ue.current){let q=ue.current;if(!q.hasDragged){if(Math.abs($.clientX-q.mouseX)+Math.abs($.clientY-q.mouseY)<4)return;if(q.hasDragged=!0,B.current==="docked"){if(Z.current){let We=H.current?.getBoundingClientRect();We&&z({w:Math.round(We.width),h:Math.round(We.height)}),re(me.current,null)}c?.undockWindow(e),_("free")}document.body.classList.add("rdd-dragging-active"),c?.setDraggingId(e)}let{cw:ce,ch:he}=$e(),be=Math.max(0,Math.min(q.posX+$.clientX-q.mouseX,ce-ee.current.w)),ye=Math.max(0,Math.min(q.posY+$.clientY-q.mouseY,he-ee.current.h));O({x:be,y:ye});let De=c?.containerRef?.current;if(De){let _e=ji(De,$.clientX,$.clientY);c?.setHoveredZone(_e&&k?Ut(_e):_e)}}},qe=()=>{if(ue.current?.hasDragged){let $=c?.hoveredZone;$&&(c?.dockWindow(e,$,Z.current),_("docked"),O(null),re($,Z.current)),c?.setHoveredZone(null),c?.setDraggingId(null)}document.body.classList.remove("rdd-dragging-active"),ue.current=null},je=()=>{ue.current?.hasDragged&&(c?.setHoveredZone(null),c?.setDraggingId(null)),document.body.classList.remove("rdd-dragging-active"),ue.current=null},se;if(E==="docked"&&c){let $=or(u,y),q=0,ce=$.length===0;for(let be of $){let ye=c.stacks[be]??[],De=ye.indexOf(e);if(De===-1)continue;ce=!0;let _e=0;for(let We=0;We<De;We++)_e+=(c.dockedSizes[ye[We]]??s)+ls;q=Math.max(q,_e)}Y.current=q;let he=Be();se={zIndex:U,transition:"top 0.2s ease, bottom 0.2s ease",opacity:ce?void 0:0,pointerEvents:ce?void 0:"none"},ct(y)?(se.insetInlineStart=(c.insetInlineStart??0)+Yt,se.insetInlineEnd=(c.insetInlineEnd??0)+Yt):(se[u.endsWith("-right")?"insetInlineEnd":"insetInlineStart"]=Yt,se.width=a.w),it(y)?(se.top=he.top,se.bottom=he.bottom):u.startsWith("top-")?(se.top=he.top+q,se.height=a.h):(se.bottom=he.bottom+q,se.height=a.h)}else se={left:F?.x??0,top:F?.y??0,width:a.w,height:a.h,zIndex:U};let te=nr.useMemo(()=>{if(E==="free")return["n","ne","e","se","s","sw","w","nw"];let $=u.startsWith("top-")?"s":"n",ce=u.endsWith("-right")!==k?"w":"e",he=ct(y),be=it(y),ye=[];return ye.push(...he?["e","w"]:[ce]),ye.push(...be?["n","s"]:[$]),!he&&!be&&ye.push(`${$}${ce}`),ye},[E,u,k,y]),Ee=vt("svg",{width:"8",height:"8",viewBox:"0 0 10 10",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",children:[ae("line",{x1:"1",y1:"1",x2:"9",y2:"9"}),ae("line",{x1:"9",y1:"1",x2:"1",y2:"9"})]});return vt("div",{ref:H,dir:k?"rtl":"ltr",className:["rdd-panel-float",Fe?"rdd-panel-float--active":"",X.inline||X.block?"rdd-panel-float--snapping":""].filter(Boolean).join(" "),style:se,onPointerDown:Ge,onPointerMove:nt,onPointerUp:qe,onPointerCancel:je,children:[vt("div",{className:"rdd-panel-float__header",onPointerDown:st,children:[n&&ae("span",{className:"rdd-panel-float__icon",children:n}),ae("span",{className:"rdd-panel-float__title",children:t}),ae("button",{type:"button",className:"rdd-panel-float__close",onClick:I,onPointerDown:$=>$.stopPropagation(),title:"Close","aria-label":"Close",children:Ee})]}),ae("div",{className:"rdd-panel-float__body",children:C}),te.map($=>ae("div",{className:`rdd-resize-handle rdd-resize-${$}`,onPointerDown:tt($)},$))]})}function cs(){let[e,t]=Ie(!1),n=et(()=>{t(!0)},[]),o=et(()=>{t(!1)},[]);return{isOpen:e,open:n,close:o}}var us=[];function ps(){let e=Pn(sr),t=e?.managedWindowIds??us;return Xt(()=>({open:(n,o)=>e?.openManaged(n,o),close:n=>e?.closeManaged(n),closeAll:()=>e?.closeAllManaged(),isOpen:n=>t.includes(n),openIds:t}),[e,t])}export{kt as ConfirmationForm,In as ContextMenu,En as ContextMenuProvider,Ht as DefaultContextMenuAdapter,ti as DockableDesktopProvider,wn as FormContainerContext,Ct as FormContainerProvider,fi as LeftPanelRenderer,ai as ModalStackRenderer,Bn as PanelContributionProvider,lr as PanelFloatingWindow,Zi as PanelOverlayRoot,zn as PanelProvider,rn as PanelRegistry,Wt as PanelRegistryClass,Ji as PanelToolbar,os as PanelToolbarItem,ts as PanelToolbarSeparator,mi as RightPanelRenderer,Ri as SecondarySidebar,hi as SidePanelRenderer,Vo as Sidebar,Xi as ToastContainer,Di as Toolbar,Qi as ToolbarButton,rs as ToolbarCenter,pn as ToolbarProvider,is as ToolbarSearchInput,ns as ToolbarSpacer,es as ToolbarToggle,Fr as WindowManager,Sn as WindowManagerProvider,_n as WorkspaceClient,Jt as computeResizedRect,Vt as defaultPredefinedMessages,ve as formatLabel,At as isSerializable,Ao as sidebarSectionToTab,ft as startPointerDrag,Oi as toast,$n as useActivePanelContribution,Dn as useColorScheme,Dt as useFormContainer,Ue as useFormatMessage,Jr as useMergedSidebarTabs,Ur as useMergedToolbarItems,St as usePanelActions,yr as usePanelContext,Pr as usePanelContextMenu,Zr as usePanelContribution,cs as usePanelFloatingWindow,ps as usePanelFloatingWindowManager,ln as usePanelId,gr as usePanelSize,gt as usePanelState,ot as usePredefinedMessages,Kt as useRegistry,wr as useShowContextMenu,Mi as useSidebar,Si as useSidebarTab,pt as useStyleClasses,gn as useToolbar,qt as useWindowManagerActions,Ve as useWindowManagerState};
|
|
24
24
|
//# sourceMappingURL=index.js.map
|