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