@ahpd/web 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/assets/{ActivityBarItem-DNjVAT_E.js → ActivityBarItem-ai2cgVXn.js} +1 -1
- package/dist/app/assets/{AudioPage-CTBMdEWh.js → AudioPage-g-XDUEDw.js} +1 -1
- package/dist/app/assets/Bood-Dg-XtOTh.js +1 -0
- package/dist/app/assets/BotLayer-DBe4Fyhe.js +1 -0
- package/dist/app/assets/CommandPalette-G86xI_6j.js +1 -0
- package/dist/app/assets/Composer-DYocj0Ot.js +2 -0
- package/dist/app/assets/{ContextMenu-DYnWIBAF.js → ContextMenu-DlF_3KO_.js} +1 -1
- package/dist/app/assets/{CopyButton-Dqp4FT7R.js → CopyButton-BSesWpVW.js} +1 -1
- package/dist/app/assets/{DataTable-Di749duh.js → DataTable-BwoG_VY8.js} +1 -1
- package/dist/app/assets/Details-CH_RhTnb.js +1 -0
- package/dist/app/assets/DiffPage-BWZV83j-.js +3 -0
- package/dist/app/assets/Edit-C2ayFdz3.js +1 -0
- package/dist/app/assets/Edit-nBofGkbp.js +1 -0
- package/dist/app/assets/Explorer-8HHRQU3j.js +1 -0
- package/dist/app/assets/Explorer-B4eWCDt-.js +1 -0
- package/dist/app/assets/Explorer-CcJsHUFk.js +1 -0
- package/dist/app/assets/Explorer-D4cvjXRf.js +1 -0
- package/dist/app/assets/Explorer-D5NpZ_El.js +1 -0
- package/dist/app/assets/Explorer-D5UOVCR4.js +1 -0
- package/dist/app/assets/Explorer-Dbqg4t3H.js +1 -0
- package/dist/app/assets/Explorer-Dg4dz1Y8.js +1 -0
- package/dist/app/assets/Explorer-Dy6T9Nil.js +1 -0
- package/dist/app/assets/Explorer-DzRNgpV9.js +1 -0
- package/dist/app/assets/ExplorerList-DU80dY_f.js +1 -0
- package/dist/app/assets/Field-jnYjqqvV.js +1 -0
- package/dist/app/assets/FilePage-Cqa5Gu-X.js +1 -0
- package/dist/app/assets/{HeaderAction-Vq-h0k1X.js → HeaderAction-Bs-AE__U.js} +1 -1
- package/dist/app/assets/HostLines-CtIqw3A0.js +1 -0
- package/dist/app/assets/HostSwitcher-CBjT2TTb.js +1 -0
- package/dist/app/assets/{ImagePage-iB_X7JK-.js → ImagePage-C0fdIV7s.js} +1 -1
- package/dist/app/assets/Info-DPV0HZOg.js +1 -0
- package/dist/app/assets/LogPage-C3fGac0t.js +1 -0
- package/dist/app/assets/LoginForm-DxyP1mZO.js +1 -0
- package/dist/app/assets/MarkdownPage-qhogl5sV.js +1 -0
- package/dist/app/assets/NamedPage-CoZEwEtx.js +1 -0
- package/dist/app/assets/New-BiFpU6ut.js +4 -0
- package/dist/app/assets/New-GW4BjzMj.js +1 -0
- package/dist/app/assets/OpenEditors-DN3NPzWo.js +1 -0
- package/dist/app/assets/Page-1jvuUZH2.js +1 -0
- package/dist/app/assets/Page-B1rQUqL-.js +1 -0
- package/dist/app/assets/Page-By2cWeM8.js +3 -0
- package/dist/app/assets/Page-DKXwLUAx.css +1 -0
- package/dist/app/assets/Page-JyFk5XMA.js +1 -0
- package/dist/app/assets/Page-fKKaK_Dn.js +1 -0
- package/dist/app/assets/PoolPage-cZ6yGgGG.js +1 -0
- package/dist/app/assets/PortaLock-DD-lS5R3.js +2 -0
- package/dist/app/assets/RolePage-C4v5v12n.js +3 -0
- package/dist/app/assets/{Settings-D7Fa-31J.js → Settings-CAzrumeA.js} +1 -1
- package/dist/app/assets/SigillumGate-CXCvctfp.js +1 -0
- package/dist/app/assets/{SingleLayout-DrZzqh9e.js → SingleLayout-Bi4nK6CY.js} +1 -1
- package/dist/app/assets/{SpatialLayout-DZfRmqF0.js → SpatialLayout-QbjNYiGj.js} +1 -1
- package/dist/app/assets/{SplitLayout-Bytjyrrj.js → SplitLayout-tQayoihg.js} +1 -1
- package/dist/app/assets/{StackLayout-BCyRY0nG.js → StackLayout-B0qUSU7d.js} +1 -1
- package/dist/app/assets/Start-NxBne1u6.js +1 -0
- package/dist/app/assets/{TabLayout-Czi2A6i3.js → TabLayout-B_pbKMRi.js} +1 -1
- package/dist/app/assets/{TabPanelLayout-B_7L0Dyp.js → TabPanelLayout-DKamepPL.js} +1 -1
- package/dist/app/assets/TerminalPage-AG2B5hHZ.js +18 -0
- package/dist/app/assets/ThemeModeToggle-DmEp0Qr8.js +1 -0
- package/dist/app/assets/ThemePicker-Bj_ObpXS.js +1 -0
- package/dist/app/assets/{Tree-BvNPcfhW.js → Tree-DoJ8zO-u.js} +1 -1
- package/dist/app/assets/UserPage-C0Vk5NUV.js +1 -0
- package/dist/app/assets/VideoPage-CKx-gxgb.js +1 -0
- package/dist/app/assets/actions-CFnmwNqb.js +1 -0
- package/dist/app/assets/actions-CkDFjYZd.js +1 -0
- package/dist/app/assets/changeset-FRFDlNj7.js +1 -0
- package/dist/app/assets/channel-BWOXaftf.js +3 -0
- package/dist/app/assets/{clicks-Doh5a3f9.js → clicks-BeeNCvCP.js} +1 -1
- package/dist/app/assets/composer-commands-CzjP_L_C.js +2 -0
- package/dist/app/assets/data-DsJQo1Qk.js +3 -0
- package/dist/app/assets/drag-CxTqzQcr.js +1 -0
- package/dist/app/assets/emojis-B4zHbUyk.js +1 -0
- package/dist/app/assets/form-Bw0484oP.js +2 -0
- package/dist/app/assets/grouping-BZNQYyEm.js +1 -0
- package/dist/app/assets/hosts-A0gEDScb.js +3 -0
- package/dist/app/assets/index-DJ3IEy30.css +1 -0
- package/dist/app/assets/index-ddqm5vYD.js +19 -0
- package/dist/app/assets/locales-DOA2j2AT.js +3 -0
- package/dist/app/assets/media-BFQqiLAd.js +1 -0
- package/dist/app/assets/notify-B2F6UAgq.js +1 -0
- package/dist/app/assets/pick-CEYUa4kK.js +1 -0
- package/dist/app/assets/pins-DhjQhJuu.js +1 -0
- package/dist/app/assets/save-file-CirO0l-u.js +1 -0
- package/dist/app/assets/save-zwMG_vNN.js +1 -0
- package/dist/app/assets/sessions-DxQFcZ2M.js +2 -0
- package/dist/app/assets/state-DQKzjLgu.js +1 -0
- package/dist/app/assets/{terminal-_7S7Eyr-.js → terminal-Ctk6FYnN.js} +1 -1
- package/dist/app/assets/text-D6GxOCYM.js +1 -0
- package/dist/app/assets/trust-ask-ewG_CvW8.js +1 -0
- package/dist/app/assets/viewers--ctbhTPt.js +1 -0
- package/dist/app/assets/{words-DF1J9CaQ.js → words-1m-GRHoT.js} +1 -1
- package/dist/app/assets/words-D8X2_Vc_.js +1 -0
- package/dist/app/index.html +23 -16
- package/dist/embed/index.d.ts +17 -4
- package/dist/embed/index.js +4 -0
- package/package.json +2 -1
- package/dist/app/assets/CommandPalette-wYX5XXUP.js +0 -1
- package/dist/app/assets/Composer-DHrV5Yeq.js +0 -2
- package/dist/app/assets/Details-DD3vmkCl.js +0 -1
- package/dist/app/assets/DiffPage-BId8ozv7.js +0 -3
- package/dist/app/assets/Edit-jFXpMjZc.js +0 -1
- package/dist/app/assets/Explorer-COyfGhcR.js +0 -1
- package/dist/app/assets/Explorer-Cau0IyIv.js +0 -1
- package/dist/app/assets/Explorer-DV3iMW_H.js +0 -1
- package/dist/app/assets/Explorer-Dfcbd81k.js +0 -1
- package/dist/app/assets/Explorer-gCfiH4Xy.js +0 -1
- package/dist/app/assets/ExplorerList-0duzRsX6.js +0 -1
- package/dist/app/assets/FilePage-C2oyHqAU.js +0 -1
- package/dist/app/assets/HostSwitcher-CpnK8XaS.js +0 -1
- package/dist/app/assets/Info-zs1cf5D4.js +0 -1
- package/dist/app/assets/LogPage-BksXBBRH.js +0 -1
- package/dist/app/assets/LoginForm-C83NjSZc.js +0 -1
- package/dist/app/assets/MarkdownPage-B3Uf-uhF.js +0 -1
- package/dist/app/assets/New-DSGbzxwy.js +0 -4
- package/dist/app/assets/OpenEditors-FoK0L7cG.js +0 -1
- package/dist/app/assets/Page-C__t0LNx.js +0 -1
- package/dist/app/assets/Page-D2Aojkph.js +0 -2
- package/dist/app/assets/Page-D_hX82GR.js +0 -1
- package/dist/app/assets/PortaLock-Q4MlsHWm.js +0 -2
- package/dist/app/assets/SigillumGate-B75RU_FM.js +0 -1
- package/dist/app/assets/Start-DX8T0ii8.js +0 -1
- package/dist/app/assets/TerminalPage-BOIBCy2W.js +0 -18
- package/dist/app/assets/ThemeModeToggle-CFpNVcU1.js +0 -1
- package/dist/app/assets/ThemePicker-CqnA9Que.js +0 -1
- package/dist/app/assets/VideoPage-v3zVSos7.js +0 -1
- package/dist/app/assets/actions-CIzLn0YN.js +0 -1
- package/dist/app/assets/changeset-IbJWvDqP.js +0 -1
- package/dist/app/assets/channel-C6Ss9Aem.js +0 -1
- package/dist/app/assets/composer-commands-BOXuqfcP.js +0 -2
- package/dist/app/assets/data-DPJ4OTLn.js +0 -2
- package/dist/app/assets/drag-ruzgQUFW.js +0 -1
- package/dist/app/assets/emojis-DanG-8fr.js +0 -1
- package/dist/app/assets/folder-path-CJJ4uFfN.js +0 -1
- package/dist/app/assets/grouping-DtiUUpdw.js +0 -1
- package/dist/app/assets/index-BiJaGB50.css +0 -1
- package/dist/app/assets/index-xynK_AEL.js +0 -14
- package/dist/app/assets/locales-Dnk_Y338.js +0 -1
- package/dist/app/assets/media-Da9OmSvb.js +0 -1
- package/dist/app/assets/notify-BmjJL_fx.js +0 -1
- package/dist/app/assets/sessions-CLjdYeF3.js +0 -2
- package/dist/app/assets/state-CKNqusrK.js +0 -1
- package/dist/app/assets/text-D_lQQGN1.js +0 -1
- package/dist/app/assets/viewers-Vk4T9IkZ.js +0 -1
- package/dist/app/assets/words-T8-D0K4W.js +0 -1
- /package/dist/app/{ahpw.svg → assets/ahpw-FhxegLNr.svg} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./jsx-runtime-BguD1OXD.js";import{t}from"./react-CybPckBe.js";import{t as n}from"./colors-BieSUSt7.js";import{t as r}from"./useI18n-T3BwAm0z.js";import{n as i}from"./ScenaProvider-6A3TJumQ.js";import{t as a}from"./ContextMenu-DYnWIBAF.js";import{r as o}from"./Icon-CIQ7doud.js";import{r as s}from"./MountTitle-BYR1nX0U.js";var c=t(),l=e();function u({className:e,style:t,direction:n=`row`,align:r,justify:i,gap:a,children:o}){let s={...t};return r!==void 0&&(s.alignItems=r),i!==void 0&&(s.justifyContent=i),a!==void 0&&(s.gap=a),(0,l.jsx)(`div`,{className:[`oo-toolbar`,e].filter(Boolean).join(` `),"data-direction":n,style:s,children:o})}var d=(0,c.createContext)(null);function f(){let e=(0,c.useContext)(d);if(!e)throw Error(`useCampus() must be used inside <CampusView>`);return e}var p=(0,c.createContext)(1);function m(){return(0,c.useContext)(p)}var h={n:`ns-resize`,s:`ns-resize`,e:`ew-resize`,w:`ew-resize`,ne:`nesw-resize`,sw:`nesw-resize`,nw:`nwse-resize`,se:`nwse-resize`},g={w:80,h:60};function _(e,t,n,r,i,a){let o=t.x,s=t.y,c=t.w,l=t.h;return e.includes(`w`)&&(o=t.x+n,c=t.w-n),e.includes(`e`)&&(c=t.w+n),e.includes(`n`)&&(s=t.y+r,l=t.h-r),e.includes(`s`)&&(l=t.h+r),c<i.w&&(e.includes(`w`)&&(o=t.x+(t.w-i.w)),c=i.w),l<i.h&&(e.includes(`n`)&&(s=t.y+(t.h-i.h)),l=i.h),isFinite(a)&&(o<-a&&(e.includes(`w`)&&(c=t.x+t.w- -a),o=-a),s<-a&&(e.includes(`n`)&&(l=t.y+t.h- -a),s=-a),o+c>a&&(c=a-o),s+l>a&&(l=a-s)),{x:o,y:s,w:c,h:l}}function v(e,t,n,r){let i=e.x+t,a=e.y+n;return isFinite(r)&&(i=Math.max(-r,Math.min(r-e.w,i)),a=Math.max(-r,Math.min(r-e.h,a))),{...e,x:i,y:a}}function y({bounds:e,onCommit:t,minSize:n=g,resizable:r=!0,movable:i=!0,dragHandle:a=`[data-campus-drag]`,selected:o=!1,zIndex:s,children:u,onPointerDownCapture:d,onClick:p,onContextMenu:h,className:y,style:x,bodyStyle:S}){let{viewportRef:C,maxDepth:w}=f(),T=m(),[E,D]=(0,c.useState)(null),O=(0,c.useRef)(null),k=(0,c.useRef)(null),A=(0,c.useRef)(null);(0,c.useEffect)(()=>{D(null)},[e.x,e.y,e.w,e.h]);function j(){A.current&&=(D(A.current),null),k.current=null}function M(t,n){n.preventDefault(),n.stopPropagation(),n.currentTarget.setPointerCapture(n.pointerId),O.current={mode:t,startX:n.clientX,startY:n.clientY,start:E??e}}function N(e){if(!i)return;let t=e.target;t&&t.closest(a)&&M(`move`,e)}function P(e){let t=O.current;if(!t)return;let r=C.current.scale*T||1,i=(e.clientX-t.startX)/r,a=(e.clientY-t.startY)/r,o=t.mode===`move`?v(t.start,i,a,w):_(t.mode,t.start,i,a,n,w);A.current=o,k.current===null&&(k.current=requestAnimationFrame(j))}function F(n){if(!O.current)return;k.current!==null&&(cancelAnimationFrame(k.current),j()),n.currentTarget.releasePointerCapture(n.pointerId);let r=A.current??E??e;A.current=null,O.current=null,t(r)}let I=E??e,L={position:`absolute`,left:I.x,top:I.y,width:I.w,height:I.h,display:`flex`,flexDirection:`column`,overflow:`hidden`,zIndex:s??(o?10:1),background:`var(--oo-color-canvas)`,border:`1px solid ${o?`var(--oo-color-accent)`:`var(--oo-color-border)`}`,borderRadius:`var(--oo-radius-sm)`,boxShadow:o?`var(--oo-shadow-lg)`:`var(--oo-shadow-md)`,...x};return(0,l.jsxs)(`div`,{className:[`oo-campus-nodus`,y].filter(Boolean).join(` `),"data-selected":o,style:L,onPointerDownCapture:d,onPointerDown:N,onPointerMove:P,onPointerUp:F,onClick:p,onContextMenu:h,children:[(0,l.jsx)(`div`,{style:{flex:1,minHeight:0,display:`flex`,flexDirection:`column`,overflow:`hidden`,...S},children:u}),r?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(b,{mode:`n`,startDrag:M,onPointerMove:P,endDrag:F}),(0,l.jsx)(b,{mode:`s`,startDrag:M,onPointerMove:P,endDrag:F}),(0,l.jsx)(b,{mode:`e`,startDrag:M,onPointerMove:P,endDrag:F}),(0,l.jsx)(b,{mode:`w`,startDrag:M,onPointerMove:P,endDrag:F}),(0,l.jsx)(b,{mode:`nw`,startDrag:M,onPointerMove:P,endDrag:F}),(0,l.jsx)(b,{mode:`ne`,startDrag:M,onPointerMove:P,endDrag:F}),(0,l.jsx)(b,{mode:`sw`,startDrag:M,onPointerMove:P,endDrag:F}),(0,l.jsx)(b,{mode:`se`,startDrag:M,onPointerMove:P,endDrag:F})]}):null]})}function b({mode:e,startDrag:t,onPointerMove:n,endDrag:r}){let i=e.length===2,a;if(i)a={position:`absolute`,width:12,height:12,cursor:h[e],touchAction:`none`,zIndex:1,...e.includes(`n`)?{top:-6}:{bottom:-6},...e.includes(`w`)?{left:-6}:{right:-6}};else{let t=e===`n`||e===`s`;a={position:`absolute`,cursor:h[e],touchAction:`none`,zIndex:1,...t?{left:12,right:12,height:6,...e===`n`?{top:-3}:{bottom:-3}}:{top:12,bottom:12,width:6,...e===`w`?{left:-3}:{right:-3}}}}return(0,l.jsx)(`div`,{className:`oo-campus-nodus-resize oo-campus-nodus-resize--${e}`,onPointerDown:n=>t(e,n),onPointerMove:n,onPointerUp:r,style:a})}function x({zoom:e=1,pan:t,zIndex:n,className:r,style:i,children:a}){let o=t?.x??0,s=t?.y??0,c=o!==0||s!==0||e!==1?`translate(${o}px, ${s}px) scale(${e})`:void 0;return(0,l.jsx)(p.Provider,{value:e,children:(0,l.jsx)(`div`,{className:[`oo-campus-stratum`,r].filter(Boolean).join(` `),style:{position:`absolute`,left:0,top:0,width:0,height:0,transformOrigin:`0 0`,transform:c,zIndex:n,...i},children:a})})}function S({className:e,style:t,children:n}){return n==null||n===!1?null:(0,l.jsx)(`div`,{className:[`oo-campus-velum`,e].filter(Boolean).join(` `),style:{position:`absolute`,inset:0,pointerEvents:`none`,zIndex:30,...t},children:n})}var C=.1,w=4,T=1.1,E=9,D=.95,O=40,k=140;function A(e,t,n){return Math.max(t,Math.min(n,e))}function j(e){return`translate(${e.panX}px, ${e.panY}px) scale(${e.scale})`}function M(e,t,n,r,i){let a=A(e.scale,r,i);if(!isFinite(n))return{...e,scale:a};let{panX:o,panY:s}=e,c=n*a,l=n*a;return o=2*c>=t.w?A(o,t.w-c,c):t.w/2,s=2*l>=t.h?A(s,t.h-l,l):t.h/2,{scale:a,panX:o,panY:s}}function N({viewport:e,onViewportChange:t,maxDepth:n=1/0,minScale:r=C,maxScale:i=w,zoomStep:a=T,showGrid:o=!0,onBackgroundClick:s,onBackgroundContextMenu:u,nodes:f,nodeTypes:p,nodeLayers:m,defaultLayer:h,onNodeCommit:g,onNodeSelect:_,onNodeContextMenu:v,className:y,style:b,children:O,ref:N}){let I=(0,c.useRef)(null),L=(0,c.useRef)(null),R=(0,c.useRef)(a),z=(0,c.useRef)(r),B=(0,c.useRef)(i),V=(0,c.useRef)(Q),[H,U]=(0,c.useState)({w:0,h:0});(0,c.useEffect)(()=>{let e=I.current;if(!e)return;function t(){let t=e.getBoundingClientRect();U({w:t.width,h:t.height})}t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[]);let W=(0,c.useRef)(e),G=(0,c.useRef)(new Set),K=(0,c.useCallback)(e=>(G.current.add(e),()=>{G.current.delete(e)}),[]);function ee(){G.current.forEach(e=>e())}function q(e){let t=L.current;t&&(t.style.transform=j(e))}let te=(0,c.useRef)(t);te.current=t;let J=(0,c.useRef)(null);function ne(){J.current!==null&&window.clearTimeout(J.current),J.current=window.setTimeout(()=>{J.current=null,te.current(W.current)},k)}(0,c.useEffect)(()=>()=>{J.current!==null&&window.clearTimeout(J.current)},[]),(0,c.useEffect)(()=>{let t=W.current;(e.scale!==t.scale||e.panX!==t.panX||e.panY!==t.panY)&&(W.current=e,q(e),ee())},[e]);let Y=(0,c.useRef)(null),X=(0,c.useRef)(null);function Z(e){let t=M(e,H,n,r,i);W.current=t,q(t),ee(),ne()}function Q(e){Y.current=e,X.current===null&&(X.current=requestAnimationFrame(()=>{X.current=null;let e=Y.current;Y.current=null,e&&Z(e)}))}(0,c.useEffect)(()=>{R.current=a,z.current=r,B.current=i,V.current=Q}),(0,c.useEffect)(()=>{let e=I.current;if(!e)return;function t(t){if(!e)return;let n=e.getBoundingClientRect(),r=W.current;if(t.ctrlKey||t.metaKey){t.preventDefault();let e=t.clientX-n.left,i=t.clientY-n.top,a=t.deltaY<0?R.current:1/R.current,o=A(r.scale*a,z.current,B.current),s=(e-r.panX)/r.scale,c=(i-r.panY)/r.scale;V.current({scale:o,panX:e-s*o,panY:i-c*o})}else{t.preventDefault();let e=-(t.shiftKey?t.deltaY:t.deltaX),n=-(t.shiftKey?0:t.deltaY);V.current({scale:r.scale,panX:r.panX+e,panY:r.panY+n})}}return e.addEventListener(`wheel`,t,{passive:!1}),()=>e.removeEventListener(`wheel`,t)},[]);let $=(0,c.useRef)(null);function re(e){return e===I.current||e===L.current}function ie(e){if(!re(e.target))return;e.currentTarget.setPointerCapture(e.pointerId);let t=W.current;$.current={startX:e.clientX,startY:e.clientY,startPanX:t.panX,startPanY:t.panY,moved:!1}}function ae(e){let t=$.current;if(!t)return;let n=e.clientX-t.startX,r=e.clientY-t.startY;!t.moved&&n*n+r*r<E||(!t.moved&&I.current&&(I.current.style.cursor=`grabbing`),t.moved=!0,Q({scale:W.current.scale,panX:t.startPanX+n,panY:t.startPanY+r}))}function oe(e){let t=$.current;t&&(e.currentTarget.releasePointerCapture(e.pointerId),$.current=null,I.current&&(I.current.style.cursor=``),t.moved||s?.())}function se(e){re(e.target)&&u?.(e)}(0,c.useImperativeHandle)(N,()=>({fitToView(e){let t=H;if(t.w===0||t.h===0)return;let a=e??(isFinite(n)?{x:-n,y:-n,w:2*n,h:2*n}:{x:0,y:0,w:0,h:0});if(a.w<=0||a.h<=0)return;let o=A(Math.min(t.w/a.w,t.h/a.h)*D,r,i),s=a.x+a.w/2,c=a.y+a.h/2;Z({scale:o,panX:t.w/2-s*o,panY:t.h/2-c*o})},centerOn(e,t){let n=H,r=W.current;n.w!==0&&n.h!==0&&Z({scale:r.scale,panX:n.w/2-e*r.scale,panY:n.h/2-t*r.scale})},resetViewport(){Z({scale:1,panX:0,panY:0})},zoomBy(e){ce(W.current.scale*e)},zoomToScale(e){ce(e)}}),[H,n,r,i]);function ce(e){let t=H;if(t.w===0||t.h===0)return;let n=W.current,a=A(e,r,i);if(a===n.scale)return;let o=t.w/2,s=t.h/2,c=(o-n.panX)/n.scale,l=(s-n.panY)/n.scale;Z({scale:a,panX:o-c*a,panY:s-l*a})}let le=(0,c.useMemo)(()=>{let e=Object.entries(m??{}).map(([e,t])=>({name:e,config:t})).sort((e,t)=>e.config.index-t.config.index),t=h??e[0]?.name??`default`,n=new Map;for(let e of f??[]){let r=e.layer&&m?.[e.layer]?e.layer:t,i=n.get(r);i?i.push(e):n.set(r,[e])}let r=[],i=new Set;for(let{name:t,config:a}of e)r.push({name:t,config:a,nodes:n.get(t)??[]}),i.add(t);for(let[e,t]of n)i.has(e)||r.push({name:e,config:{index:r.length},nodes:t});return r},[f,m,h]),ue=(0,c.useMemo)(()=>({viewportRef:W,subscribeViewport:K,container:H,maxDepth:n}),[K,H,n]);return(0,l.jsx)(d.Provider,{value:ue,children:(0,l.jsxs)(`div`,{ref:I,className:[`oo-campus`,y].filter(Boolean).join(` `),onPointerDown:ie,onPointerMove:ae,onPointerUp:oe,onContextMenu:se,style:{position:`relative`,width:`100%`,height:`100%`,overflow:`hidden`,background:`var(--oo-color-surface)`,touchAction:`none`,cursor:`default`,...b},children:[o?(0,l.jsx)(F,{}):null,(0,l.jsx)(`div`,{ref:L,className:`oo-campus-world`,style:{position:`absolute`,left:0,top:0,width:0,height:0,transform:j(W.current),transformOrigin:`0 0`},children:le.map(e=>(0,l.jsx)(x,{zoom:e.config.zoom,pan:e.config.pan,zIndex:e.config.index,children:e.nodes.map(e=>{let t=p?.[e.type];return t?(0,l.jsx)(P,{node:e,onCommit:g,onSelect:_,onContextMenu:v,children:(0,l.jsx)(t,{id:e.id,selected:!!e.selected,data:e.data})},e.id):null})},e.name))}),(0,l.jsx)(S,{children:O})]})})}function P({node:e,onCommit:t,onSelect:n,onContextMenu:r,children:i}){return(0,l.jsx)(y,{bounds:e.bounds,selected:e.selected,resizable:e.resizable,movable:e.movable,onCommit:n=>t?.(e.id,n),onPointerDownCapture:()=>{e.selected||n?.(e.id)},onContextMenu:t=>{t.preventDefault(),t.stopPropagation(),n?.(e.id),r?.(e.id,t)},children:i})}function F(){let{viewportRef:e,subscribeViewport:t}=f(),{panX:n,panY:r,scale:i}=(0,c.useSyncExternalStore)(t,()=>e.current),a=O*i,o=a<6?0:a>200?.04:Math.min(.12,a/200);if(o<=0)return null;let s=(n%a+a)%a,u=(r%a+a)%a,d=`rgba(128, 128, 128, ${o})`;return(0,l.jsx)(`div`,{className:`oo-campus-grid`,"aria-hidden":!0,style:{position:`absolute`,inset:0,pointerEvents:`none`,backgroundImage:`linear-gradient(to right, ${d} 1px, transparent 1px),linear-gradient(to bottom, ${d} 1px, transparent 1px)`,backgroundSize:`${a}px ${a}px, ${a}px ${a}px`,backgroundPosition:`${s}px ${u}px, ${s}px ${u}px`}})}var I=160,L=110,R=12,z={bottom:12,right:12};function B({nodes:e,onJumpTo:t,width:r=I,height:i=L,padding:a=R,anchor:o=z,className:s,style:u}){let{viewportRef:d,subscribeViewport:p,container:m}=f(),h=(0,c.useSyncExternalStore)(p,()=>d.current);if(m.w===0||m.h===0)return null;let g=1/0,_=1/0,v=-1/0,y=-1/0;for(let t of e)g=Math.min(g,t.bounds.x),_=Math.min(_,t.bounds.y),v=Math.max(v,t.bounds.x+t.bounds.w),y=Math.max(y,t.bounds.y+t.bounds.h);let b=-h.panX/h.scale,x=-h.panY/h.scale,S=b+m.w/h.scale,C=x+m.h/h.scale;isFinite(g)?(g=Math.min(g,b),_=Math.min(_,x),v=Math.max(v,S),y=Math.max(y,C)):(g=b,_=x,v=S,y=C);let w=Math.max(1,v-g),T=Math.max(1,y-_),E=r-a*2,D=i-a*2,O=Math.min(E/w,D/T);function k(e,t){return[a+(e-g)*O,a+(t-_)*O]}function A(e){let n=e.currentTarget.getBoundingClientRect(),r=e.clientX-n.left,i=e.clientY-n.top;t((r-a)/O+g,(i-a)/O+_)}let[j,M]=k(b,x),N=(S-b)*O,P=(C-x)*O;return(0,l.jsxs)(`div`,{className:[`oo-campus-mappa`,s].filter(Boolean).join(` `),onClick:A,onPointerDown:e=>e.stopPropagation(),style:{position:`absolute`,...o,width:r,height:i,pointerEvents:`auto`,background:`rgba(20, 20, 24, 0.75)`,backdropFilter:`blur(6px)`,WebkitBackdropFilter:`blur(6px)`,borderRadius:`var(--oo-radius-sm, 4px)`,boxShadow:`0 6px 20px rgba(0, 0, 0, 0.32)`,cursor:`crosshair`,zIndex:40,overflow:`hidden`,...u},children:[e.map(e=>{let[t,r]=k(e.bounds.x,e.bounds.y),i=Math.max(2,e.bounds.w*O),a=Math.max(2,e.bounds.h*O);return(0,l.jsx)(`div`,{title:e.id,style:{position:`absolute`,left:t,top:r,width:i,height:a,background:n(e.color,.85),border:e.selected?`1px solid rgba(255, 255, 255, 0.9)`:`1px solid rgba(255, 255, 255, 0.18)`,borderRadius:2,boxSizing:`border-box`}},e.id)}),(0,l.jsx)(`div`,{style:{position:`absolute`,left:j,top:M,width:N,height:P,border:`1px solid rgba(255, 255, 255, 0.9)`,background:`rgba(255, 255, 255, 0.06)`,pointerEvents:`none`,boxSizing:`border-box`}})]})}function V({selected:e,data:t}){let{t:n}=r(),{mount:a,renderMount:c,onClose:u}=t,d=i().components.get(a.component.component)?.props,f=s(a,a.key),p=a.props?.icon??d?.icon,m=a.props?.color??d?.color;return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)(`div`,{className:`oo-spatial-card__header`,"data-campus-drag":!0,"data-color":m,style:{padding:`var(--oo-spacing-xs) var(--oo-spacing-sm)`,borderBottom:`1px solid var(--oo-color-border)`,fontSize:`var(--oo-font-size-xs)`,color:e?`inherit`:`var(--oo-color-muted)`,background:e?`var(--oo-color-active)`:`var(--oo-color-surface)`,display:`flex`,justifyContent:`space-between`,alignItems:`center`,cursor:`grab`,userSelect:`none`,touchAction:`none`,flex:`0 0 auto`},children:[(0,l.jsxs)(`span`,{title:f,style:{display:`inline-flex`,alignItems:`center`,gap:6,minWidth:0},children:[p?(0,l.jsx)(`span`,{className:`oo-spatial-card__icon`,"aria-hidden":!0,children:p}):null,(0,l.jsx)(`span`,{className:`oo-spatial-card__title`,style:{overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:f})]}),(0,l.jsx)(`span`,{onPointerDown:e=>e.stopPropagation(),onClick:e=>{e.stopPropagation(),u()},title:n(`common/close`,`Close`),style:{cursor:`pointer`},children:o.closePanel})]}),(0,l.jsx)(`div`,{className:`oo-spatial-card__body`,style:{flex:1,overflow:`auto`,minHeight:0},children:c(a)})]})}var H=960,U=768,W=36,G=40,K=16,ee=8e3;function q(e,t,n){if(n===`grid`&&t>0){let n=Math.max(1,Math.floor(Math.sqrt(t))),r=e%n,i=Math.floor(e/n);return{x:K+r*976,y:K+i*784,w:H,h:U}}return{x:G+e*W,y:G+e*W,w:H,h:U}}var te={scale:1,panX:0,panY:0},J={},ne=1.1,Y={card:V},X=`input, textarea, select, [contenteditable]:not([contenteditable="false"]), [role="textbox"], [role="combobox"], [role="listbox"], [role="menu"], [role="dialog"], [role="alertdialog"]`;function Z({surface:e,mounts:t,state:n,setState:o,renderMount:s,renderEmpty:d,onClose:f,onActivate:p}){let{t:m}=r(),h=i(),[g,_]=(0,c.useState)(null),[v,y]=(0,c.useState)(null),b=n.spatial?.arrangement??`cascade`,x=n.spatial?.bounds??J,S=n.spatial?.selectedKey,C=n.spatial?.viewport??te,w=(0,c.useRef)({arrangement:b,bounds:x,selectedKey:S,viewport:C});w.current={arrangement:b,bounds:x,selectedKey:S,viewport:C};function T(e){let t={...w.current,...e};w.current=t,o({spatial:t})}function E(e){T({viewport:e})}let D=(0,c.useMemo)(()=>{let e={};return t.forEach((n,r)=>{b===`manual`?e[n.key]=x[n.key]??q(r,t.length,`cascade`):e[n.key]=q(r,t.length,b)}),e},[t,b,x]);function O(e){if(e===`manual`){let e={};for(let n of t)e[n.key]=D[n.key];T({arrangement:`manual`,bounds:e})}else T({arrangement:e,bounds:{}})}function k(e,n){if(w.current.arrangement!==`manual`){let r={};for(let e of t)r[e.key]=D[e.key];r[e]=n,T({arrangement:`manual`,bounds:r,selectedKey:e});return}T({bounds:{...w.current.bounds,[e]:n},selectedKey:e})}let A=(0,c.useRef)(void 0);function j(e){w.current.selectedKey!==e&&(T({selectedKey:e}),A.current=e,e&&p(e))}let M=(0,c.useRef)(null);function P(){if(t.length===0){M.current?.fitToView();return}let e=1/0,n=1/0,r=-1/0,i=-1/0;for(let a of t){let t=D[a.key];t&&(e=Math.min(e,t.x),n=Math.min(n,t.y),r=Math.max(r,t.x+t.w),i=Math.max(i,t.y+t.h))}isFinite(e)&&M.current?.fitToView({x:e,y:n,w:r-e,h:i-n})}function F(){let e=S;if(!e)return;let t=D[e];t&&M.current?.centerOn(t.x+t.w/2,t.y+t.h/2)}function I(e){let t=D[e];t&&M.current?.centerOn(t.x+t.w/2,t.y+t.h/2)}function L(e){let n=t.findIndex(t=>t.key===e);n<0||k(e,q(n,t.length,`cascade`))}let R=(0,c.useRef)({fitToView:P,resetViewport:()=>M.current?.resetViewport(),centerOnSelected:F,setArrangement:O,centerOnCard:I,resetBoundsForCard:L});R.current={fitToView:P,resetViewport:()=>M.current?.resetViewport(),centerOnSelected:F,setArrangement:O,centerOnCard:I,resetBoundsForCard:L};let z=n.activeContainerKey,V=z!==void 0&&t.some(e=>e.key===z);(0,c.useEffect)(()=>{if(z!==void 0&&V){if(A.current===z){A.current=void 0;return}w.current.selectedKey!==z&&T({selectedKey:z}),R.current.centerOnCard(z)}},[z,V]);let H=(0,c.useRef)(null),U=(0,c.useRef)(f);U.current=f,(0,c.useEffect)(()=>{function e(e){if(e.key!==`Escape`||e.defaultPrevented||e.repeat||e.ctrlKey||e.altKey||e.metaKey||e.shiftKey)return;let t=w.current.selectedKey;if(t===void 0)return;let n=e.target instanceof Element?e.target:null;(n===null||n===document.body||H.current?.contains(n))&&(n?.closest(X)||(e.preventDefault(),U.current(t)))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),(0,c.useEffect)(()=>{let e=[h.commands.register({id:`surface.fitToView`,title:`Fit to view`,description:`Frame all cards`,icon:`⛶`,color:`blue`,slots:[`surface:context`],when:`$/surface/layoutId == "spatial"`,run:e=>{R.current.fitToView(),e.host?.closeMenu()}}),h.commands.register({id:`surface.resetZoom`,title:`Reset zoom`,icon:`↺`,slots:[`surface:context`],when:`$/surface/layoutId == "spatial"`,run:e=>{R.current.resetViewport(),e.host?.closeMenu()}}),h.commands.register({id:`surface.centerSelected`,title:`Center on selected`,icon:`◎`,color:`teal`,slots:[`surface:context`],when:`$/surface/layoutId == "spatial" && $/surface/hasSelection == true`,run:e=>{R.current.centerOnSelected(),e.host?.closeMenu()}}),h.commands.register({id:`surface.setArrangement.cascade`,title:`Arrange: Cascade`,icon:`▤`,slots:[`surface:context`],when:`$/surface/layoutId == "spatial" && $/surface/arrangement != "cascade"`,run:e=>{R.current.setArrangement(`cascade`),e.host?.closeMenu()}}),h.commands.register({id:`surface.setArrangement.grid`,title:`Arrange: Grid`,icon:`▦`,color:`violet`,slots:[`surface:context`],when:`$/surface/layoutId == "spatial" && $/surface/arrangement != "grid"`,run:e=>{R.current.setArrangement(`grid`),e.host?.closeMenu()}}),h.commands.register({id:`surface.setArrangement.manual`,title:`Arrange: Manual`,icon:`✥`,slots:[`surface:context`],when:`$/surface/layoutId == "spatial" && $/surface/arrangement != "manual"`,run:e=>{R.current.setArrangement(`manual`),e.host?.closeMenu()}}),h.commands.register({id:`card.centerOn`,title:`Center on this card`,icon:`◎`,color:`teal`,slots:[`card:context`],when:`$/surface/layoutId == "spatial"`,run:e=>{let t=e.store.get(`$/tab/key`);t&&(R.current.centerOnCard(t),e.host?.closeMenu())}}),h.commands.register({id:`card.resetBounds`,title:`Reset bounds`,description:`Recompute size + position`,icon:`↺`,slots:[`card:context`],when:`$/surface/layoutId == "spatial"`,run:e=>{let t=e.store.get(`$/tab/key`);t&&(R.current.resetBoundsForCard(t),e.host?.closeMenu())}})];return()=>{for(let t of e)t.dispose()}},[h]);let W=(0,c.useMemo)(()=>t.map(e=>({id:e.key,type:`card`,bounds:D[e.key],selected:e.key===S,data:{mount:e,renderMount:s,onClose:()=>f(e.key)}})),[t,D,S,s,f]),G=t.flatMap(e=>{let t=D[e.key];if(!t)return[];let n=h.components.get(e.component.component)?.opens?.color;return[{id:e.key,bounds:t,color:n,selected:e.key===S}]});function K(e){e.preventDefault(),_({x:e.clientX,y:e.clientY})}return t.length===0?d?.()??null:(0,l.jsxs)(`div`,{ref:H,className:`oo-layout oo-layout--spatial`,style:{display:`flex`,flexDirection:`column`,height:`100%`},children:[(0,l.jsxs)(u,{className:`oo-spatial-toolbar`,children:[(0,l.jsxs)(`label`,{style:{display:`flex`,gap:6,alignItems:`center`},children:[(0,l.jsx)(`span`,{style:{color:`var(--oo-color-muted)`},children:`arrange:`}),(0,l.jsxs)(`select`,{value:b,onChange:e=>O(e.target.value),children:[(0,l.jsx)(`option`,{value:`cascade`,children:`cascade`}),(0,l.jsx)(`option`,{value:`grid`,children:`grid`}),(0,l.jsx)(`option`,{value:`manual`,children:`manual`})]})]}),(0,l.jsx)(`button`,{type:`button`,onClick:()=>M.current?.zoomBy(1/ne),title:m(`spatial/zoomOut`,`Zoom out`),"aria-label":m(`spatial/zoomOut`,`Zoom out`),children:`−`}),(0,l.jsx)(re,{value:C.scale,onCommit:e=>M.current?.zoomToScale(e)}),(0,l.jsx)(`button`,{type:`button`,onClick:()=>M.current?.zoomBy(ne),title:m(`spatial/zoomIn`,`Zoom in`),"aria-label":m(`spatial/zoomIn`,`Zoom in`),children:`+`}),(0,l.jsx)(`button`,{type:`button`,onClick:P,title:m(`spatial/fit`,`Fit all cards to viewport`),children:`Fit`}),(0,l.jsx)(`button`,{type:`button`,onClick:()=>M.current?.resetViewport(),title:m(`spatial/reset`,`Reset zoom + pan`),children:`Reset`}),(0,l.jsxs)(`span`,{style:{color:`var(--oo-color-muted)`,fontSize:`var(--oo-font-size-xs)`},children:[`drag header to move · drag edges to resize · ctrl+wheel zooms · drag empty area to pan · first drag locks to `,(0,l.jsx)(`em`,{children:`manual`})]})]}),(0,l.jsx)(`div`,{style:{flex:1,minHeight:0,position:`relative`},children:(0,l.jsx)(N,{ref:M,viewport:C,onViewportChange:E,maxDepth:ee,nodes:W,nodeTypes:Y,onNodeCommit:(e,t)=>k(e,t),onNodeSelect:e=>j(e),onNodeContextMenu:(e,t)=>y({x:t.clientX,y:t.clientY,key:e}),onBackgroundClick:()=>j(void 0),onBackgroundContextMenu:K,children:(0,l.jsx)(B,{nodes:G,onJumpTo:(e,t)=>M.current?.centerOn(e,t)})})}),S?(0,l.jsx)(Q,{mount:t.find(e=>e.key===S),selectedKey:S,onCenter:()=>I(S),onReset:()=>L(S),onClose:()=>f(S),onDeselect:()=>j(void 0)}):null,g?(0,l.jsx)(a,{x:g.x,y:g.y,onClose:()=>_(null),spec:{query:{slot:`surface:context`},footerHints:!0},context:{"$/surface/name":e,"$/surface/layoutId":`spatial`,"$/surface/mountCount":t.length,"$/surface/closedHistory":0,"$/surface/arrangement":b,"$/surface/hasSelection":!!S}}):null,v?(0,l.jsx)(a,{x:v.x,y:v.y,onClose:()=>y(null),spec:{query:{slot:`card:context`},footerHints:!0},context:{"$/surface/name":e,"$/surface/layoutId":`spatial`,"$/surface/mountCount":t.length,"$/surface/closedHistory":0,"$/surface/arrangement":b,"$/tab/key":v.key,"$/tab/index":t.findIndex(e=>e.key===v.key),"$/tab/canSplit":!1,"$/tab/canMove":!1,"$/tab/isActive":v.key===S,"$/tab/isPinned":!1,"$/group/tabCount":t.length}}):null]})}function Q({mount:e,selectedKey:t,onCenter:n,onReset:i,onClose:a,onDeselect:o}){let{t:c}=r(),u=s(e,t);return(0,l.jsxs)(`div`,{className:`oo-spatial-footer`,role:`toolbar`,"aria-label":c(`spatial/selectedActions`,`Selected card actions`),style:{position:`absolute`,bottom:16,left:`50%`,transform:`translateX(-50%)`,display:`flex`,alignItems:`center`,gap:4,padding:`6px 8px`,background:`rgba(20, 20, 24, 0.78)`,backdropFilter:`blur(8px)`,WebkitBackdropFilter:`blur(8px)`,borderRadius:9999,color:`#fff`,fontSize:`var(--oo-font-size-xs)`,boxShadow:`0 6px 20px rgba(0, 0, 0, 0.32)`,pointerEvents:`auto`,zIndex:50},onPointerDown:e=>e.stopPropagation(),children:[(0,l.jsx)(`span`,{style:{padding:`0 8px`,color:`rgba(255, 255, 255, 0.8)`,maxWidth:220,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},title:u,children:u}),(0,l.jsx)($,{icon:`◎`,label:`Center on this card`,onClick:n}),(0,l.jsx)($,{icon:`↺`,label:`Reset bounds`,onClick:i}),(0,l.jsx)($,{icon:`✕`,label:`Close`,onClick:a,variant:`danger`}),(0,l.jsx)($,{icon:`⊗`,label:`Deselect`,onClick:o})]})}function $({icon:e,label:t,onClick:n,variant:r}){return(0,l.jsx)(`button`,{type:`button`,onClick:n,title:t,"aria-label":t,style:{width:28,height:28,display:`inline-flex`,alignItems:`center`,justifyContent:`center`,border:`none`,borderRadius:`50%`,background:`rgba(255, 255, 255, 0.08)`,color:r===`danger`?`rgb(255, 130, 130)`:`#fff`,cursor:`pointer`,font:`inherit`,lineHeight:1},onMouseEnter:e=>{e.currentTarget.style.background=`rgba(255, 255, 255, 0.18)`},onMouseLeave:e=>{e.currentTarget.style.background=`rgba(255, 255, 255, 0.08)`},children:e})}function re({value:e,onCommit:t}){let{t:n}=r(),i=Math.round(e*100),[a,o]=(0,c.useState)(`${i}`),[s,u]=(0,c.useState)(!1);!s&&a!==`${i}`&&o(`${i}`);function d(){let e=parseInt(a,10);Number.isFinite(e)&&e>0?t(e/100):o(`${i}`),u(!1)}return(0,l.jsx)(`input`,{type:`text`,inputMode:`numeric`,value:s?a:`${i}%`,onFocus:e=>{u(!0),o(`${i}`),requestAnimationFrame(()=>e.target.select?.())},onChange:e=>o(e.target.value.replace(/[^\d]/g,``)),onBlur:d,onKeyDown:e=>{e.key===`Enter`?(e.preventDefault(),e.target.blur()):e.key===`Escape`&&(e.preventDefault(),o(`${i}`),u(!1),e.target.blur())},title:n(`spatial/zoomPercent`,`Zoom percent`),"aria-label":n(`spatial/zoomPercent`,`Zoom percent`),style:{width:56,textAlign:`center`,font:`inherit`,padding:`2px 4px`,border:`1px solid var(--oo-color-border)`,borderRadius:`var(--oo-radius-sm, 4px)`,background:`var(--oo-color-canvas)`,color:`inherit`}})}export{Z as SpatialLayout};
|
|
1
|
+
import{t as e}from"./jsx-runtime-BguD1OXD.js";import{t}from"./react-CybPckBe.js";import{t as n}from"./colors-BieSUSt7.js";import{t as r}from"./useI18n-T3BwAm0z.js";import{n as i}from"./ScenaProvider-6A3TJumQ.js";import{t as a}from"./ContextMenu-DlF_3KO_.js";import{r as o}from"./Icon-CIQ7doud.js";import{r as s}from"./MountTitle-BYR1nX0U.js";var c=t(),l=e();function u({className:e,style:t,direction:n=`row`,align:r,justify:i,gap:a,children:o}){let s={...t};return r!==void 0&&(s.alignItems=r),i!==void 0&&(s.justifyContent=i),a!==void 0&&(s.gap=a),(0,l.jsx)(`div`,{className:[`oo-toolbar`,e].filter(Boolean).join(` `),"data-direction":n,style:s,children:o})}var d=(0,c.createContext)(null);function f(){let e=(0,c.useContext)(d);if(!e)throw Error(`useCampus() must be used inside <CampusView>`);return e}var p=(0,c.createContext)(1);function m(){return(0,c.useContext)(p)}var h={n:`ns-resize`,s:`ns-resize`,e:`ew-resize`,w:`ew-resize`,ne:`nesw-resize`,sw:`nesw-resize`,nw:`nwse-resize`,se:`nwse-resize`},g={w:80,h:60};function _(e,t,n,r,i,a){let o=t.x,s=t.y,c=t.w,l=t.h;return e.includes(`w`)&&(o=t.x+n,c=t.w-n),e.includes(`e`)&&(c=t.w+n),e.includes(`n`)&&(s=t.y+r,l=t.h-r),e.includes(`s`)&&(l=t.h+r),c<i.w&&(e.includes(`w`)&&(o=t.x+(t.w-i.w)),c=i.w),l<i.h&&(e.includes(`n`)&&(s=t.y+(t.h-i.h)),l=i.h),isFinite(a)&&(o<-a&&(e.includes(`w`)&&(c=t.x+t.w- -a),o=-a),s<-a&&(e.includes(`n`)&&(l=t.y+t.h- -a),s=-a),o+c>a&&(c=a-o),s+l>a&&(l=a-s)),{x:o,y:s,w:c,h:l}}function v(e,t,n,r){let i=e.x+t,a=e.y+n;return isFinite(r)&&(i=Math.max(-r,Math.min(r-e.w,i)),a=Math.max(-r,Math.min(r-e.h,a))),{...e,x:i,y:a}}function y({bounds:e,onCommit:t,minSize:n=g,resizable:r=!0,movable:i=!0,dragHandle:a=`[data-campus-drag]`,selected:o=!1,zIndex:s,children:u,onPointerDownCapture:d,onClick:p,onContextMenu:h,className:y,style:x,bodyStyle:S}){let{viewportRef:C,maxDepth:w}=f(),T=m(),[E,D]=(0,c.useState)(null),O=(0,c.useRef)(null),k=(0,c.useRef)(null),A=(0,c.useRef)(null);(0,c.useEffect)(()=>{D(null)},[e.x,e.y,e.w,e.h]);function j(){A.current&&=(D(A.current),null),k.current=null}function M(t,n){n.preventDefault(),n.stopPropagation(),n.currentTarget.setPointerCapture(n.pointerId),O.current={mode:t,startX:n.clientX,startY:n.clientY,start:E??e}}function N(e){if(!i)return;let t=e.target;t&&t.closest(a)&&M(`move`,e)}function P(e){let t=O.current;if(!t)return;let r=C.current.scale*T||1,i=(e.clientX-t.startX)/r,a=(e.clientY-t.startY)/r,o=t.mode===`move`?v(t.start,i,a,w):_(t.mode,t.start,i,a,n,w);A.current=o,k.current===null&&(k.current=requestAnimationFrame(j))}function F(n){if(!O.current)return;k.current!==null&&(cancelAnimationFrame(k.current),j()),n.currentTarget.releasePointerCapture(n.pointerId);let r=A.current??E??e;A.current=null,O.current=null,t(r)}let I=E??e,L={position:`absolute`,left:I.x,top:I.y,width:I.w,height:I.h,display:`flex`,flexDirection:`column`,overflow:`hidden`,zIndex:s??(o?10:1),background:`var(--oo-color-canvas)`,border:`1px solid ${o?`var(--oo-color-accent)`:`var(--oo-color-border)`}`,borderRadius:`var(--oo-radius-sm)`,boxShadow:o?`var(--oo-shadow-lg)`:`var(--oo-shadow-md)`,...x};return(0,l.jsxs)(`div`,{className:[`oo-campus-nodus`,y].filter(Boolean).join(` `),"data-selected":o,style:L,onPointerDownCapture:d,onPointerDown:N,onPointerMove:P,onPointerUp:F,onClick:p,onContextMenu:h,children:[(0,l.jsx)(`div`,{style:{flex:1,minHeight:0,display:`flex`,flexDirection:`column`,overflow:`hidden`,...S},children:u}),r?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(b,{mode:`n`,startDrag:M,onPointerMove:P,endDrag:F}),(0,l.jsx)(b,{mode:`s`,startDrag:M,onPointerMove:P,endDrag:F}),(0,l.jsx)(b,{mode:`e`,startDrag:M,onPointerMove:P,endDrag:F}),(0,l.jsx)(b,{mode:`w`,startDrag:M,onPointerMove:P,endDrag:F}),(0,l.jsx)(b,{mode:`nw`,startDrag:M,onPointerMove:P,endDrag:F}),(0,l.jsx)(b,{mode:`ne`,startDrag:M,onPointerMove:P,endDrag:F}),(0,l.jsx)(b,{mode:`sw`,startDrag:M,onPointerMove:P,endDrag:F}),(0,l.jsx)(b,{mode:`se`,startDrag:M,onPointerMove:P,endDrag:F})]}):null]})}function b({mode:e,startDrag:t,onPointerMove:n,endDrag:r}){let i=e.length===2,a;if(i)a={position:`absolute`,width:12,height:12,cursor:h[e],touchAction:`none`,zIndex:1,...e.includes(`n`)?{top:-6}:{bottom:-6},...e.includes(`w`)?{left:-6}:{right:-6}};else{let t=e===`n`||e===`s`;a={position:`absolute`,cursor:h[e],touchAction:`none`,zIndex:1,...t?{left:12,right:12,height:6,...e===`n`?{top:-3}:{bottom:-3}}:{top:12,bottom:12,width:6,...e===`w`?{left:-3}:{right:-3}}}}return(0,l.jsx)(`div`,{className:`oo-campus-nodus-resize oo-campus-nodus-resize--${e}`,onPointerDown:n=>t(e,n),onPointerMove:n,onPointerUp:r,style:a})}function x({zoom:e=1,pan:t,zIndex:n,className:r,style:i,children:a}){let o=t?.x??0,s=t?.y??0,c=o!==0||s!==0||e!==1?`translate(${o}px, ${s}px) scale(${e})`:void 0;return(0,l.jsx)(p.Provider,{value:e,children:(0,l.jsx)(`div`,{className:[`oo-campus-stratum`,r].filter(Boolean).join(` `),style:{position:`absolute`,left:0,top:0,width:0,height:0,transformOrigin:`0 0`,transform:c,zIndex:n,...i},children:a})})}function S({className:e,style:t,children:n}){return n==null||n===!1?null:(0,l.jsx)(`div`,{className:[`oo-campus-velum`,e].filter(Boolean).join(` `),style:{position:`absolute`,inset:0,pointerEvents:`none`,zIndex:30,...t},children:n})}var C=.1,w=4,T=1.1,E=9,D=.95,O=40,k=140;function A(e,t,n){return Math.max(t,Math.min(n,e))}function j(e){return`translate(${e.panX}px, ${e.panY}px) scale(${e.scale})`}function M(e,t,n,r,i){let a=A(e.scale,r,i);if(!isFinite(n))return{...e,scale:a};let{panX:o,panY:s}=e,c=n*a,l=n*a;return o=2*c>=t.w?A(o,t.w-c,c):t.w/2,s=2*l>=t.h?A(s,t.h-l,l):t.h/2,{scale:a,panX:o,panY:s}}function N({viewport:e,onViewportChange:t,maxDepth:n=1/0,minScale:r=C,maxScale:i=w,zoomStep:a=T,showGrid:o=!0,onBackgroundClick:s,onBackgroundContextMenu:u,nodes:f,nodeTypes:p,nodeLayers:m,defaultLayer:h,onNodeCommit:g,onNodeSelect:_,onNodeContextMenu:v,className:y,style:b,children:O,ref:N}){let I=(0,c.useRef)(null),L=(0,c.useRef)(null),R=(0,c.useRef)(a),z=(0,c.useRef)(r),B=(0,c.useRef)(i),V=(0,c.useRef)(Q),[H,U]=(0,c.useState)({w:0,h:0});(0,c.useEffect)(()=>{let e=I.current;if(!e)return;function t(){let t=e.getBoundingClientRect();U({w:t.width,h:t.height})}t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[]);let W=(0,c.useRef)(e),G=(0,c.useRef)(new Set),K=(0,c.useCallback)(e=>(G.current.add(e),()=>{G.current.delete(e)}),[]);function ee(){G.current.forEach(e=>e())}function q(e){let t=L.current;t&&(t.style.transform=j(e))}let te=(0,c.useRef)(t);te.current=t;let J=(0,c.useRef)(null);function ne(){J.current!==null&&window.clearTimeout(J.current),J.current=window.setTimeout(()=>{J.current=null,te.current(W.current)},k)}(0,c.useEffect)(()=>()=>{J.current!==null&&window.clearTimeout(J.current)},[]),(0,c.useEffect)(()=>{let t=W.current;(e.scale!==t.scale||e.panX!==t.panX||e.panY!==t.panY)&&(W.current=e,q(e),ee())},[e]);let Y=(0,c.useRef)(null),X=(0,c.useRef)(null);function Z(e){let t=M(e,H,n,r,i);W.current=t,q(t),ee(),ne()}function Q(e){Y.current=e,X.current===null&&(X.current=requestAnimationFrame(()=>{X.current=null;let e=Y.current;Y.current=null,e&&Z(e)}))}(0,c.useEffect)(()=>{R.current=a,z.current=r,B.current=i,V.current=Q}),(0,c.useEffect)(()=>{let e=I.current;if(!e)return;function t(t){if(!e)return;let n=e.getBoundingClientRect(),r=W.current;if(t.ctrlKey||t.metaKey){t.preventDefault();let e=t.clientX-n.left,i=t.clientY-n.top,a=t.deltaY<0?R.current:1/R.current,o=A(r.scale*a,z.current,B.current),s=(e-r.panX)/r.scale,c=(i-r.panY)/r.scale;V.current({scale:o,panX:e-s*o,panY:i-c*o})}else{t.preventDefault();let e=-(t.shiftKey?t.deltaY:t.deltaX),n=-(t.shiftKey?0:t.deltaY);V.current({scale:r.scale,panX:r.panX+e,panY:r.panY+n})}}return e.addEventListener(`wheel`,t,{passive:!1}),()=>e.removeEventListener(`wheel`,t)},[]);let $=(0,c.useRef)(null);function re(e){return e===I.current||e===L.current}function ie(e){if(!re(e.target))return;e.currentTarget.setPointerCapture(e.pointerId);let t=W.current;$.current={startX:e.clientX,startY:e.clientY,startPanX:t.panX,startPanY:t.panY,moved:!1}}function ae(e){let t=$.current;if(!t)return;let n=e.clientX-t.startX,r=e.clientY-t.startY;!t.moved&&n*n+r*r<E||(!t.moved&&I.current&&(I.current.style.cursor=`grabbing`),t.moved=!0,Q({scale:W.current.scale,panX:t.startPanX+n,panY:t.startPanY+r}))}function oe(e){let t=$.current;t&&(e.currentTarget.releasePointerCapture(e.pointerId),$.current=null,I.current&&(I.current.style.cursor=``),t.moved||s?.())}function se(e){re(e.target)&&u?.(e)}(0,c.useImperativeHandle)(N,()=>({fitToView(e){let t=H;if(t.w===0||t.h===0)return;let a=e??(isFinite(n)?{x:-n,y:-n,w:2*n,h:2*n}:{x:0,y:0,w:0,h:0});if(a.w<=0||a.h<=0)return;let o=A(Math.min(t.w/a.w,t.h/a.h)*D,r,i),s=a.x+a.w/2,c=a.y+a.h/2;Z({scale:o,panX:t.w/2-s*o,panY:t.h/2-c*o})},centerOn(e,t){let n=H,r=W.current;n.w!==0&&n.h!==0&&Z({scale:r.scale,panX:n.w/2-e*r.scale,panY:n.h/2-t*r.scale})},resetViewport(){Z({scale:1,panX:0,panY:0})},zoomBy(e){ce(W.current.scale*e)},zoomToScale(e){ce(e)}}),[H,n,r,i]);function ce(e){let t=H;if(t.w===0||t.h===0)return;let n=W.current,a=A(e,r,i);if(a===n.scale)return;let o=t.w/2,s=t.h/2,c=(o-n.panX)/n.scale,l=(s-n.panY)/n.scale;Z({scale:a,panX:o-c*a,panY:s-l*a})}let le=(0,c.useMemo)(()=>{let e=Object.entries(m??{}).map(([e,t])=>({name:e,config:t})).sort((e,t)=>e.config.index-t.config.index),t=h??e[0]?.name??`default`,n=new Map;for(let e of f??[]){let r=e.layer&&m?.[e.layer]?e.layer:t,i=n.get(r);i?i.push(e):n.set(r,[e])}let r=[],i=new Set;for(let{name:t,config:a}of e)r.push({name:t,config:a,nodes:n.get(t)??[]}),i.add(t);for(let[e,t]of n)i.has(e)||r.push({name:e,config:{index:r.length},nodes:t});return r},[f,m,h]),ue=(0,c.useMemo)(()=>({viewportRef:W,subscribeViewport:K,container:H,maxDepth:n}),[K,H,n]);return(0,l.jsx)(d.Provider,{value:ue,children:(0,l.jsxs)(`div`,{ref:I,className:[`oo-campus`,y].filter(Boolean).join(` `),onPointerDown:ie,onPointerMove:ae,onPointerUp:oe,onContextMenu:se,style:{position:`relative`,width:`100%`,height:`100%`,overflow:`hidden`,background:`var(--oo-color-surface)`,touchAction:`none`,cursor:`default`,...b},children:[o?(0,l.jsx)(F,{}):null,(0,l.jsx)(`div`,{ref:L,className:`oo-campus-world`,style:{position:`absolute`,left:0,top:0,width:0,height:0,transform:j(W.current),transformOrigin:`0 0`},children:le.map(e=>(0,l.jsx)(x,{zoom:e.config.zoom,pan:e.config.pan,zIndex:e.config.index,children:e.nodes.map(e=>{let t=p?.[e.type];return t?(0,l.jsx)(P,{node:e,onCommit:g,onSelect:_,onContextMenu:v,children:(0,l.jsx)(t,{id:e.id,selected:!!e.selected,data:e.data})},e.id):null})},e.name))}),(0,l.jsx)(S,{children:O})]})})}function P({node:e,onCommit:t,onSelect:n,onContextMenu:r,children:i}){return(0,l.jsx)(y,{bounds:e.bounds,selected:e.selected,resizable:e.resizable,movable:e.movable,onCommit:n=>t?.(e.id,n),onPointerDownCapture:()=>{e.selected||n?.(e.id)},onContextMenu:t=>{t.preventDefault(),t.stopPropagation(),n?.(e.id),r?.(e.id,t)},children:i})}function F(){let{viewportRef:e,subscribeViewport:t}=f(),{panX:n,panY:r,scale:i}=(0,c.useSyncExternalStore)(t,()=>e.current),a=O*i,o=a<6?0:a>200?.04:Math.min(.12,a/200);if(o<=0)return null;let s=(n%a+a)%a,u=(r%a+a)%a,d=`rgba(128, 128, 128, ${o})`;return(0,l.jsx)(`div`,{className:`oo-campus-grid`,"aria-hidden":!0,style:{position:`absolute`,inset:0,pointerEvents:`none`,backgroundImage:`linear-gradient(to right, ${d} 1px, transparent 1px),linear-gradient(to bottom, ${d} 1px, transparent 1px)`,backgroundSize:`${a}px ${a}px, ${a}px ${a}px`,backgroundPosition:`${s}px ${u}px, ${s}px ${u}px`}})}var I=160,L=110,R=12,z={bottom:12,right:12};function B({nodes:e,onJumpTo:t,width:r=I,height:i=L,padding:a=R,anchor:o=z,className:s,style:u}){let{viewportRef:d,subscribeViewport:p,container:m}=f(),h=(0,c.useSyncExternalStore)(p,()=>d.current);if(m.w===0||m.h===0)return null;let g=1/0,_=1/0,v=-1/0,y=-1/0;for(let t of e)g=Math.min(g,t.bounds.x),_=Math.min(_,t.bounds.y),v=Math.max(v,t.bounds.x+t.bounds.w),y=Math.max(y,t.bounds.y+t.bounds.h);let b=-h.panX/h.scale,x=-h.panY/h.scale,S=b+m.w/h.scale,C=x+m.h/h.scale;isFinite(g)?(g=Math.min(g,b),_=Math.min(_,x),v=Math.max(v,S),y=Math.max(y,C)):(g=b,_=x,v=S,y=C);let w=Math.max(1,v-g),T=Math.max(1,y-_),E=r-a*2,D=i-a*2,O=Math.min(E/w,D/T);function k(e,t){return[a+(e-g)*O,a+(t-_)*O]}function A(e){let n=e.currentTarget.getBoundingClientRect(),r=e.clientX-n.left,i=e.clientY-n.top;t((r-a)/O+g,(i-a)/O+_)}let[j,M]=k(b,x),N=(S-b)*O,P=(C-x)*O;return(0,l.jsxs)(`div`,{className:[`oo-campus-mappa`,s].filter(Boolean).join(` `),onClick:A,onPointerDown:e=>e.stopPropagation(),style:{position:`absolute`,...o,width:r,height:i,pointerEvents:`auto`,background:`rgba(20, 20, 24, 0.75)`,backdropFilter:`blur(6px)`,WebkitBackdropFilter:`blur(6px)`,borderRadius:`var(--oo-radius-sm, 4px)`,boxShadow:`0 6px 20px rgba(0, 0, 0, 0.32)`,cursor:`crosshair`,zIndex:40,overflow:`hidden`,...u},children:[e.map(e=>{let[t,r]=k(e.bounds.x,e.bounds.y),i=Math.max(2,e.bounds.w*O),a=Math.max(2,e.bounds.h*O);return(0,l.jsx)(`div`,{title:e.id,style:{position:`absolute`,left:t,top:r,width:i,height:a,background:n(e.color,.85),border:e.selected?`1px solid rgba(255, 255, 255, 0.9)`:`1px solid rgba(255, 255, 255, 0.18)`,borderRadius:2,boxSizing:`border-box`}},e.id)}),(0,l.jsx)(`div`,{style:{position:`absolute`,left:j,top:M,width:N,height:P,border:`1px solid rgba(255, 255, 255, 0.9)`,background:`rgba(255, 255, 255, 0.06)`,pointerEvents:`none`,boxSizing:`border-box`}})]})}function V({selected:e,data:t}){let{t:n}=r(),{mount:a,renderMount:c,onClose:u}=t,d=i().components.get(a.component.component)?.props,f=s(a,a.key),p=a.props?.icon??d?.icon,m=a.props?.color??d?.color;return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)(`div`,{className:`oo-spatial-card__header`,"data-campus-drag":!0,"data-color":m,style:{padding:`var(--oo-spacing-xs) var(--oo-spacing-sm)`,borderBottom:`1px solid var(--oo-color-border)`,fontSize:`var(--oo-font-size-xs)`,color:e?`inherit`:`var(--oo-color-muted)`,background:e?`var(--oo-color-active)`:`var(--oo-color-surface)`,display:`flex`,justifyContent:`space-between`,alignItems:`center`,cursor:`grab`,userSelect:`none`,touchAction:`none`,flex:`0 0 auto`},children:[(0,l.jsxs)(`span`,{title:f,style:{display:`inline-flex`,alignItems:`center`,gap:6,minWidth:0},children:[p?(0,l.jsx)(`span`,{className:`oo-spatial-card__icon`,"aria-hidden":!0,children:p}):null,(0,l.jsx)(`span`,{className:`oo-spatial-card__title`,style:{overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:f})]}),(0,l.jsx)(`span`,{onPointerDown:e=>e.stopPropagation(),onClick:e=>{e.stopPropagation(),u()},title:n(`common/close`,`Close`),style:{cursor:`pointer`},children:o.closePanel})]}),(0,l.jsx)(`div`,{className:`oo-spatial-card__body`,style:{flex:1,overflow:`auto`,minHeight:0},children:c(a)})]})}var H=960,U=768,W=36,G=40,K=16,ee=8e3;function q(e,t,n){if(n===`grid`&&t>0){let n=Math.max(1,Math.floor(Math.sqrt(t))),r=e%n,i=Math.floor(e/n);return{x:K+r*976,y:K+i*784,w:H,h:U}}return{x:G+e*W,y:G+e*W,w:H,h:U}}var te={scale:1,panX:0,panY:0},J={},ne=1.1,Y={card:V},X=`input, textarea, select, [contenteditable]:not([contenteditable="false"]), [role="textbox"], [role="combobox"], [role="listbox"], [role="menu"], [role="dialog"], [role="alertdialog"]`;function Z({surface:e,mounts:t,state:n,setState:o,renderMount:s,renderEmpty:d,onClose:f,onActivate:p}){let{t:m}=r(),h=i(),[g,_]=(0,c.useState)(null),[v,y]=(0,c.useState)(null),b=n.spatial?.arrangement??`cascade`,x=n.spatial?.bounds??J,S=n.spatial?.selectedKey,C=n.spatial?.viewport??te,w=(0,c.useRef)({arrangement:b,bounds:x,selectedKey:S,viewport:C});w.current={arrangement:b,bounds:x,selectedKey:S,viewport:C};function T(e){let t={...w.current,...e};w.current=t,o({spatial:t})}function E(e){T({viewport:e})}let D=(0,c.useMemo)(()=>{let e={};return t.forEach((n,r)=>{b===`manual`?e[n.key]=x[n.key]??q(r,t.length,`cascade`):e[n.key]=q(r,t.length,b)}),e},[t,b,x]);function O(e){if(e===`manual`){let e={};for(let n of t)e[n.key]=D[n.key];T({arrangement:`manual`,bounds:e})}else T({arrangement:e,bounds:{}})}function k(e,n){if(w.current.arrangement!==`manual`){let r={};for(let e of t)r[e.key]=D[e.key];r[e]=n,T({arrangement:`manual`,bounds:r,selectedKey:e});return}T({bounds:{...w.current.bounds,[e]:n},selectedKey:e})}let A=(0,c.useRef)(void 0);function j(e){w.current.selectedKey!==e&&(T({selectedKey:e}),A.current=e,e&&p(e))}let M=(0,c.useRef)(null);function P(){if(t.length===0){M.current?.fitToView();return}let e=1/0,n=1/0,r=-1/0,i=-1/0;for(let a of t){let t=D[a.key];t&&(e=Math.min(e,t.x),n=Math.min(n,t.y),r=Math.max(r,t.x+t.w),i=Math.max(i,t.y+t.h))}isFinite(e)&&M.current?.fitToView({x:e,y:n,w:r-e,h:i-n})}function F(){let e=S;if(!e)return;let t=D[e];t&&M.current?.centerOn(t.x+t.w/2,t.y+t.h/2)}function I(e){let t=D[e];t&&M.current?.centerOn(t.x+t.w/2,t.y+t.h/2)}function L(e){let n=t.findIndex(t=>t.key===e);n<0||k(e,q(n,t.length,`cascade`))}let R=(0,c.useRef)({fitToView:P,resetViewport:()=>M.current?.resetViewport(),centerOnSelected:F,setArrangement:O,centerOnCard:I,resetBoundsForCard:L});R.current={fitToView:P,resetViewport:()=>M.current?.resetViewport(),centerOnSelected:F,setArrangement:O,centerOnCard:I,resetBoundsForCard:L};let z=n.activeContainerKey,V=z!==void 0&&t.some(e=>e.key===z);(0,c.useEffect)(()=>{if(z!==void 0&&V){if(A.current===z){A.current=void 0;return}w.current.selectedKey!==z&&T({selectedKey:z}),R.current.centerOnCard(z)}},[z,V]);let H=(0,c.useRef)(null),U=(0,c.useRef)(f);U.current=f,(0,c.useEffect)(()=>{function e(e){if(e.key!==`Escape`||e.defaultPrevented||e.repeat||e.ctrlKey||e.altKey||e.metaKey||e.shiftKey)return;let t=w.current.selectedKey;if(t===void 0)return;let n=e.target instanceof Element?e.target:null;(n===null||n===document.body||H.current?.contains(n))&&(n?.closest(X)||(e.preventDefault(),U.current(t)))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),(0,c.useEffect)(()=>{let e=[h.commands.register({id:`surface.fitToView`,title:`Fit to view`,description:`Frame all cards`,icon:`⛶`,color:`blue`,slots:[`surface:context`],when:`$/surface/layoutId == "spatial"`,run:e=>{R.current.fitToView(),e.host?.closeMenu()}}),h.commands.register({id:`surface.resetZoom`,title:`Reset zoom`,icon:`↺`,slots:[`surface:context`],when:`$/surface/layoutId == "spatial"`,run:e=>{R.current.resetViewport(),e.host?.closeMenu()}}),h.commands.register({id:`surface.centerSelected`,title:`Center on selected`,icon:`◎`,color:`teal`,slots:[`surface:context`],when:`$/surface/layoutId == "spatial" && $/surface/hasSelection == true`,run:e=>{R.current.centerOnSelected(),e.host?.closeMenu()}}),h.commands.register({id:`surface.setArrangement.cascade`,title:`Arrange: Cascade`,icon:`▤`,slots:[`surface:context`],when:`$/surface/layoutId == "spatial" && $/surface/arrangement != "cascade"`,run:e=>{R.current.setArrangement(`cascade`),e.host?.closeMenu()}}),h.commands.register({id:`surface.setArrangement.grid`,title:`Arrange: Grid`,icon:`▦`,color:`violet`,slots:[`surface:context`],when:`$/surface/layoutId == "spatial" && $/surface/arrangement != "grid"`,run:e=>{R.current.setArrangement(`grid`),e.host?.closeMenu()}}),h.commands.register({id:`surface.setArrangement.manual`,title:`Arrange: Manual`,icon:`✥`,slots:[`surface:context`],when:`$/surface/layoutId == "spatial" && $/surface/arrangement != "manual"`,run:e=>{R.current.setArrangement(`manual`),e.host?.closeMenu()}}),h.commands.register({id:`card.centerOn`,title:`Center on this card`,icon:`◎`,color:`teal`,slots:[`card:context`],when:`$/surface/layoutId == "spatial"`,run:e=>{let t=e.store.get(`$/tab/key`);t&&(R.current.centerOnCard(t),e.host?.closeMenu())}}),h.commands.register({id:`card.resetBounds`,title:`Reset bounds`,description:`Recompute size + position`,icon:`↺`,slots:[`card:context`],when:`$/surface/layoutId == "spatial"`,run:e=>{let t=e.store.get(`$/tab/key`);t&&(R.current.resetBoundsForCard(t),e.host?.closeMenu())}})];return()=>{for(let t of e)t.dispose()}},[h]);let W=(0,c.useMemo)(()=>t.map(e=>({id:e.key,type:`card`,bounds:D[e.key],selected:e.key===S,data:{mount:e,renderMount:s,onClose:()=>f(e.key)}})),[t,D,S,s,f]),G=t.flatMap(e=>{let t=D[e.key];if(!t)return[];let n=h.components.get(e.component.component)?.opens?.color;return[{id:e.key,bounds:t,color:n,selected:e.key===S}]});function K(e){e.preventDefault(),_({x:e.clientX,y:e.clientY})}return t.length===0?d?.()??null:(0,l.jsxs)(`div`,{ref:H,className:`oo-layout oo-layout--spatial`,style:{display:`flex`,flexDirection:`column`,height:`100%`},children:[(0,l.jsxs)(u,{className:`oo-spatial-toolbar`,children:[(0,l.jsxs)(`label`,{style:{display:`flex`,gap:6,alignItems:`center`},children:[(0,l.jsx)(`span`,{style:{color:`var(--oo-color-muted)`},children:`arrange:`}),(0,l.jsxs)(`select`,{value:b,onChange:e=>O(e.target.value),children:[(0,l.jsx)(`option`,{value:`cascade`,children:`cascade`}),(0,l.jsx)(`option`,{value:`grid`,children:`grid`}),(0,l.jsx)(`option`,{value:`manual`,children:`manual`})]})]}),(0,l.jsx)(`button`,{type:`button`,onClick:()=>M.current?.zoomBy(1/ne),title:m(`spatial/zoomOut`,`Zoom out`),"aria-label":m(`spatial/zoomOut`,`Zoom out`),children:`−`}),(0,l.jsx)(re,{value:C.scale,onCommit:e=>M.current?.zoomToScale(e)}),(0,l.jsx)(`button`,{type:`button`,onClick:()=>M.current?.zoomBy(ne),title:m(`spatial/zoomIn`,`Zoom in`),"aria-label":m(`spatial/zoomIn`,`Zoom in`),children:`+`}),(0,l.jsx)(`button`,{type:`button`,onClick:P,title:m(`spatial/fit`,`Fit all cards to viewport`),children:`Fit`}),(0,l.jsx)(`button`,{type:`button`,onClick:()=>M.current?.resetViewport(),title:m(`spatial/reset`,`Reset zoom + pan`),children:`Reset`}),(0,l.jsxs)(`span`,{style:{color:`var(--oo-color-muted)`,fontSize:`var(--oo-font-size-xs)`},children:[`drag header to move · drag edges to resize · ctrl+wheel zooms · drag empty area to pan · first drag locks to `,(0,l.jsx)(`em`,{children:`manual`})]})]}),(0,l.jsx)(`div`,{style:{flex:1,minHeight:0,position:`relative`},children:(0,l.jsx)(N,{ref:M,viewport:C,onViewportChange:E,maxDepth:ee,nodes:W,nodeTypes:Y,onNodeCommit:(e,t)=>k(e,t),onNodeSelect:e=>j(e),onNodeContextMenu:(e,t)=>y({x:t.clientX,y:t.clientY,key:e}),onBackgroundClick:()=>j(void 0),onBackgroundContextMenu:K,children:(0,l.jsx)(B,{nodes:G,onJumpTo:(e,t)=>M.current?.centerOn(e,t)})})}),S?(0,l.jsx)(Q,{mount:t.find(e=>e.key===S),selectedKey:S,onCenter:()=>I(S),onReset:()=>L(S),onClose:()=>f(S),onDeselect:()=>j(void 0)}):null,g?(0,l.jsx)(a,{x:g.x,y:g.y,onClose:()=>_(null),spec:{query:{slot:`surface:context`},footerHints:!0},context:{"$/surface/name":e,"$/surface/layoutId":`spatial`,"$/surface/mountCount":t.length,"$/surface/closedHistory":0,"$/surface/arrangement":b,"$/surface/hasSelection":!!S}}):null,v?(0,l.jsx)(a,{x:v.x,y:v.y,onClose:()=>y(null),spec:{query:{slot:`card:context`},footerHints:!0},context:{"$/surface/name":e,"$/surface/layoutId":`spatial`,"$/surface/mountCount":t.length,"$/surface/closedHistory":0,"$/surface/arrangement":b,"$/tab/key":v.key,"$/tab/index":t.findIndex(e=>e.key===v.key),"$/tab/canSplit":!1,"$/tab/canMove":!1,"$/tab/isActive":v.key===S,"$/tab/isPinned":!1,"$/group/tabCount":t.length}}):null]})}function Q({mount:e,selectedKey:t,onCenter:n,onReset:i,onClose:a,onDeselect:o}){let{t:c}=r(),u=s(e,t);return(0,l.jsxs)(`div`,{className:`oo-spatial-footer`,role:`toolbar`,"aria-label":c(`spatial/selectedActions`,`Selected card actions`),style:{position:`absolute`,bottom:16,left:`50%`,transform:`translateX(-50%)`,display:`flex`,alignItems:`center`,gap:4,padding:`6px 8px`,background:`rgba(20, 20, 24, 0.78)`,backdropFilter:`blur(8px)`,WebkitBackdropFilter:`blur(8px)`,borderRadius:9999,color:`#fff`,fontSize:`var(--oo-font-size-xs)`,boxShadow:`0 6px 20px rgba(0, 0, 0, 0.32)`,pointerEvents:`auto`,zIndex:50},onPointerDown:e=>e.stopPropagation(),children:[(0,l.jsx)(`span`,{style:{padding:`0 8px`,color:`rgba(255, 255, 255, 0.8)`,maxWidth:220,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},title:u,children:u}),(0,l.jsx)($,{icon:`◎`,label:`Center on this card`,onClick:n}),(0,l.jsx)($,{icon:`↺`,label:`Reset bounds`,onClick:i}),(0,l.jsx)($,{icon:`✕`,label:`Close`,onClick:a,variant:`danger`}),(0,l.jsx)($,{icon:`⊗`,label:`Deselect`,onClick:o})]})}function $({icon:e,label:t,onClick:n,variant:r}){return(0,l.jsx)(`button`,{type:`button`,onClick:n,title:t,"aria-label":t,style:{width:28,height:28,display:`inline-flex`,alignItems:`center`,justifyContent:`center`,border:`none`,borderRadius:`50%`,background:`rgba(255, 255, 255, 0.08)`,color:r===`danger`?`rgb(255, 130, 130)`:`#fff`,cursor:`pointer`,font:`inherit`,lineHeight:1},onMouseEnter:e=>{e.currentTarget.style.background=`rgba(255, 255, 255, 0.18)`},onMouseLeave:e=>{e.currentTarget.style.background=`rgba(255, 255, 255, 0.08)`},children:e})}function re({value:e,onCommit:t}){let{t:n}=r(),i=Math.round(e*100),[a,o]=(0,c.useState)(`${i}`),[s,u]=(0,c.useState)(!1);!s&&a!==`${i}`&&o(`${i}`);function d(){let e=parseInt(a,10);Number.isFinite(e)&&e>0?t(e/100):o(`${i}`),u(!1)}return(0,l.jsx)(`input`,{type:`text`,inputMode:`numeric`,value:s?a:`${i}%`,onFocus:e=>{u(!0),o(`${i}`),requestAnimationFrame(()=>e.target.select?.())},onChange:e=>o(e.target.value.replace(/[^\d]/g,``)),onBlur:d,onKeyDown:e=>{e.key===`Enter`?(e.preventDefault(),e.target.blur()):e.key===`Escape`&&(e.preventDefault(),o(`${i}`),u(!1),e.target.blur())},title:n(`spatial/zoomPercent`,`Zoom percent`),"aria-label":n(`spatial/zoomPercent`,`Zoom percent`),style:{width:56,textAlign:`center`,font:`inherit`,padding:`2px 4px`,border:`1px solid var(--oo-color-border)`,borderRadius:`var(--oo-radius-sm, 4px)`,background:`var(--oo-color-canvas)`,color:`inherit`}})}export{Z as SpatialLayout};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./jsx-runtime-BguD1OXD.js";import{t}from"./react-CybPckBe.js";import{t as n}from"./useI18n-T3BwAm0z.js";import{n as r}from"./ScenaProvider-6A3TJumQ.js";import{t as i}from"./ContextMenu-
|
|
1
|
+
import{t as e}from"./jsx-runtime-BguD1OXD.js";import{t}from"./react-CybPckBe.js";import{t as n}from"./useI18n-T3BwAm0z.js";import{n as r}from"./ScenaProvider-6A3TJumQ.js";import{t as i}from"./ContextMenu-DlF_3KO_.js";import{r as a}from"./Icon-CIQ7doud.js";import{t as o}from"./Divisor-hrrJK3bw.js";import{t as s}from"./MountTitle-BYR1nX0U.js";var c=e(),l=t(),u=.05,d=`application/x-scena-split-index`;function f({surface:e,mounts:t,state:f,setState:m,renderMount:h,renderEmpty:g,onClose:_,onReorder:v}){let{t:y}=n(),b=r(),x=(0,l.useRef)(null),S=f.split?.order??[],C=new Set(S),w=S.map(e=>t.find(t=>t.key===e)).filter(e=>!!e),T=t.filter(e=>!C.has(e.key)),E=[...w,...T],D=E.length>0?1/E.length:1,O=(()=>{let e=f.split?.ratios;return e&&e.length===E.length?e:E.map(()=>D)})();function k(e,t){let n=t;if(E.length<2)return;let r=O.slice(0,n).reduce((e,t)=>e+t,0),i=(O[n]??0)+(O[n+1]??0);if(i<=0)return;let a=p(e-r,u,i-u),o=i-a;o<u&&(o=u,a=i-o);let s=[...O];s[n]=a,s[n+1]=o,m({split:{order:f.split?.order,ratios:s,collapsed:f.split?.collapsed}})}let[A,j]=(0,l.useState)(null),[M,N]=(0,l.useState)(null),[P,F]=(0,l.useState)(null);function I(e,t,n){e.preventDefault(),e.stopPropagation(),N({x:e.clientX,y:e.clientY,key:t,idx:n})}function L(e){e.target===e.currentTarget&&(e.preventDefault(),F({x:e.clientX,y:e.clientY}))}let R={"$/surface/name":e,"$/surface/layoutId":`split`,"$/surface/mountCount":t.length,"$/surface/closedHistory":0,"$/tab/canSplit":!1,"$/tab/canMove":!1,"$/group/canClose":!1,"$/group/canMaximize":!1};function z(e,t){e.dataTransfer.setData(d,String(t)),e.dataTransfer.effectAllowed=`move`}function B(e,t){e.dataTransfer.types.includes(d)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`,j(t))}function V(){j(null)}function H(e,t){if(!e.dataTransfer.types.includes(d))return;e.preventDefault();let n=Number(e.dataTransfer.getData(d));j(null),Number.isFinite(n)&&n!==t&&v(n,t)}return E.length===0?g?.()??null:(0,c.jsxs)(`div`,{ref:x,className:`oo-layout oo-layout--split`,style:{display:`flex`,flexDirection:`row`,height:`100%`,minHeight:0},onContextMenu:L,children:[E.map((e,t)=>{let n=b.components.get(e.component.component)?.props,r=e.props?.color??n?.color;return(0,c.jsxs)(l.Fragment,{children:[(0,c.jsxs)(`div`,{"data-pane-index":t,"data-drag-over":A===t,"data-color":r,className:`oo-split-pane`,style:{flex:O[t]??D,minWidth:0,overflow:`hidden`,display:`flex`,flexDirection:`column`},children:[(0,c.jsxs)(`div`,{className:`oo-split-pane-header`,draggable:!0,onDragStart:e=>z(e,t),onDragOver:e=>B(e,t),onDragLeave:V,onDrop:e=>H(e,t),onContextMenu:n=>I(n,e.key,t),style:{flex:`0 0 auto`,display:`flex`,alignItems:`center`,justifyContent:`space-between`,padding:`var(--oo-spacing-xs) var(--oo-spacing-sm)`,background:`var(--oo-color-surface)`,borderBottom:`1px solid var(--oo-color-border)`,fontSize:`var(--oo-font-size-xs)`,color:`var(--oo-color-muted)`,cursor:`grab`,userSelect:`none`},children:[(0,c.jsx)(s,{mount:e,fallback:e.key,iconClassName:`oo-split-pane-header__icon`,titleClassName:`oo-split-pane-header__title`}),(0,c.jsx)(`span`,{onClick:t=>{t.stopPropagation(),_(e.key)},title:y(`common/close`,`Close`),style:{cursor:`pointer`},children:a.closePanel})]}),(0,c.jsx)(`div`,{style:{flex:1,overflow:`auto`,minHeight:0},children:h(e)})]}),t<E.length-1?(0,c.jsx)(o,{id:t,direction:`row`,containerRef:x,onCommit:k}):null]},e.key)}),M?(0,c.jsx)(i,{x:M.x,y:M.y,onClose:()=>N(null),spec:{query:{slot:`tab:context`},footerHints:!0},context:{...R,"$/tab/key":M.key,"$/tab/index":M.idx,"$/tab/isActive":!0,"$/tab/isPinned":!1,"$/group/tabCount":t.length}}):null,P?(0,c.jsx)(i,{x:P.x,y:P.y,onClose:()=>F(null),spec:{query:{slot:`surface:context`},footerHints:!0},context:R}):null]})}function p(e,t,n){return Math.max(t,Math.min(n,e))}export{f as SplitLayout};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./jsx-runtime-BguD1OXD.js";import{t}from"./react-CybPckBe.js";import{t as n}from"./label-hTY0RCEf.js";import{l as r,t as i}from"./useI18n-T3BwAm0z.js";import{n as a}from"./ScenaProvider-6A3TJumQ.js";import{t as o}from"./ContextMenu-
|
|
1
|
+
import{t as e}from"./jsx-runtime-BguD1OXD.js";import{t}from"./react-CybPckBe.js";import{t as n}from"./label-hTY0RCEf.js";import{l as r,t as i}from"./useI18n-T3BwAm0z.js";import{n as a}from"./ScenaProvider-6A3TJumQ.js";import{t as o}from"./ContextMenu-DlF_3KO_.js";import{r as s}from"./Icon-CIQ7doud.js";import{t as c}from"./Divisor-hrrJK3bw.js";import{t as l}from"./HeaderAction-Bs-AE__U.js";import{n as u,t as d}from"./MountTitle-BYR1nX0U.js";var f=e(),p=t();function m({mounts:e,state:t,setState:n,title:r,icon:c,color:l}){let{t:d}=i(),m=a(),h=t.split?.order??[],g=new Set(h),_=h.map(t=>e.find(e=>e.key===t)).filter(e=>!!e),v=e.filter(e=>!g.has(e.key)),y=[..._,...v],b=new Set(t.stack?.hidden??[]),[x,S]=(0,p.useState)(null);function C(e){n({stack:{...t.stack,hidden:[...e]}})}function w(e){let t=new Set(b);t.has(e)?t.delete(e):t.add(e),C(t)}function T(e){e.stopPropagation();let t=e.currentTarget.getBoundingClientRect();S({x:t.right,y:t.bottom+2})}return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(`div`,{className:`oo-stack-container-header`,"data-color":l,style:{flex:`0 0 auto`,display:`flex`,alignItems:`center`,justifyContent:`space-between`,padding:`var(--oo-spacing-xs) var(--oo-spacing-sm)`,background:`var(--oo-color-surface)`,borderBottom:`1px solid var(--oo-color-border)`,fontSize:`var(--oo-font-size-xs)`,textTransform:`uppercase`,letterSpacing:`0.06em`,color:`var(--oo-color-muted)`,userSelect:`none`,minWidth:0,minHeight:32},children:[(0,f.jsxs)(`span`,{style:{display:`inline-flex`,alignItems:`center`,gap:6},children:[c?(0,f.jsx)(`span`,{className:`oo-stack-container-header__icon`,"aria-hidden":!0,children:c}):null,(0,f.jsx)(`span`,{className:`oo-stack-container-header__title`,children:r})]}),(0,f.jsx)(`button`,{type:`button`,className:`oo-stack-container-header__overflow`,title:d(`layout/togglePanes`,`Toggle panes`),"aria-label":d(`layout/togglePanes`,`Toggle panes`),onClick:T,style:{background:`transparent`,border:`none`,color:`var(--oo-color-muted)`,cursor:`pointer`,font:`inherit`,padding:`0 4px`},children:s.moreHoriz})]}),x?(0,f.jsx)(o,{x:x.x,y:x.y,onClose:()=>S(null),spec:{footerHints:!0,items:y.map(e=>{let t=m.components.get(e.component.component)?.props,n=!b.has(e.key);return{title:u(m,e),icon:e.props?.icon??t?.icon,color:e.props?.color??t?.color,active:n,onSelect:t=>{w(e.key),t.closeMenu()}}})}}):null]})}var h=`application/x-scena-stack-index`,g=48;function _({surface:e,mounts:t,state:u,setState:_,renderMount:v,renderEmpty:y,onClose:b,onReorder:x}){let{t:S}=i(),C=a(),w=u.split?.order??[],T=new Set(w),E=w.map(e=>t.find(t=>t.key===e)).filter(e=>!!e),D=t.filter(e=>!T.has(e.key)),O=[...E,...D],k=new Set(u.stack?.hidden??[]),A=O.filter(e=>!k.has(e.key)),j=u.stack?.container,M=new Set(u.split?.collapsed??[]),[N,P]=(0,p.useState)(null),F=(0,p.useRef)(null),I=(0,p.useRef)(new Map),L=A.filter(e=>!M.has(e.key)),R=u.stack?.sizes??{},z=L.length>0&&L.every(e=>(R[e.key]??0)>0);function B(e,t,n){let r=F.current?.getBoundingClientRect(),i=I.current.get(t)?.getBoundingClientRect(),a=I.current.get(n)?.getBoundingClientRect();if(!r||!i||!a)return;let o={...R};for(let e of L){let t=I.current.get(e.key)?.getBoundingClientRect().height??0;o[e.key]=Math.max(t,g)}let s=i.height+a.height;if(s<96)return;let c=r.top+e*r.height,l=Math.min(Math.max(c-i.top,g),s-g);o[t]=l,o[n]=s-l,_({stack:{...u.stack,sizes:o}})}function V(e,t){return t?{flex:`0 0 auto`}:z?{flex:`${R[e.key]} 1 0px`}:e.policy.fitContent?{flex:`0 1 auto`,maxHeight:`50%`}:{flex:`1 1 0px`}}function H(e){let t=new Set(M);t.has(e)?t.delete(e):t.add(e),_({split:{order:u.split?.order,ratios:u.split?.ratios,collapsed:[...t]}})}function U(e,t){e.dataTransfer.setData(h,String(t)),e.dataTransfer.effectAllowed=`move`}function W(e,t){e.dataTransfer.types.includes(h)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`,P(t))}function G(){P(null)}function K(e,t){if(!e.dataTransfer.types.includes(h))return;e.preventDefault();let n=Number(e.dataTransfer.getData(h));P(null),Number.isFinite(n)&&n!==t&&x(n,t)}let[q,J]=(0,p.useState)(null),[Y,X]=(0,p.useState)(null);function Z(e,t,n){e.preventDefault(),e.stopPropagation(),J({x:e.clientX,y:e.clientY,key:t,idx:n})}function Q(e){e.target===e.currentTarget&&(e.preventDefault(),X({x:e.clientX,y:e.clientY}))}let $={"$/surface/name":e,"$/surface/layoutId":`stack`,"$/surface/mountCount":t.length,"$/surface/closedHistory":0,"$/tab/canSplit":!1,"$/tab/canMove":t.length>1,"$/group/canClose":!1,"$/group/canMaximize":!1};return A.length===0?y?.()??null:(0,f.jsxs)(`div`,{ref:F,className:`oo-layout oo-layout--stack`,style:{display:`flex`,flexDirection:`column`,height:`100%`,minHeight:0},onContextMenu:Q,children:[(0,f.jsx)(m,{title:j?.title??`Details`,icon:j?.icon,color:j?.color,mounts:t,state:u,setState:_}),A.map((e,t)=>{let i=M.has(e.key),a=C.components.get(e.component.component)?.props,o=e.props?.color??a?.color,u=e.props?.actions??a?.actions??[],m=A[t+1],h=!i&&m!==void 0&&!M.has(m.key),g=!z&&!i&&e.policy.fitContent===!0;return(0,f.jsxs)(p.Fragment,{children:[(0,f.jsxs)(`div`,{ref:t=>{t?I.current.set(e.key,t):I.current.delete(e.key)},className:`oo-stack-section`,"data-collapsed":i,"data-drag-over":N===t,"data-color":o,style:{...V(e,i),minHeight:0,display:`flex`,flexDirection:`column`,borderBottom:h?void 0:`1px solid var(--oo-color-border)`},children:[(0,f.jsxs)(`div`,{className:`oo-stack-header`,draggable:!0,onDragStart:e=>U(e,t),onDragOver:e=>W(e,t),onDragLeave:G,onDrop:e=>K(e,t),onClick:()=>H(e.key),onContextMenu:n=>Z(n,e.key,t),style:{cursor:`grab`,padding:`var(--oo-spacing-xs) var(--oo-spacing-sm)`,background:`var(--oo-color-surface)`,fontSize:`var(--oo-font-size-xs)`,textTransform:`uppercase`,color:`var(--oo-color-muted)`,display:`flex`,justifyContent:`space-between`,alignItems:`center`,userSelect:`none`},children:[(0,f.jsxs)(`span`,{style:{display:`inline-flex`,alignItems:`center`,gap:6},children:[(0,f.jsx)(`span`,{"aria-hidden":!0,children:i?`▶`:`▼`}),(0,f.jsx)(d,{mount:e,fallback:e.key,iconClassName:`oo-stack-section__icon`,titleClassName:`oo-stack-section__title`})]}),(0,f.jsxs)(`span`,{style:{display:`inline-flex`,alignItems:`center`,gap:2},children:[u.length>0?(0,f.jsx)(`span`,{style:{display:`inline-flex`,alignItems:`center`,gap:2},onClick:e=>e.stopPropagation(),children:u.map(e=>(0,f.jsx)(l,{action:e,text:n(e.label,{get:e=>C.store.get(e),translate:r}),run:e=>void C.commands.execute(e)},e.command))}):null,e.policy.closable===!1?null:(0,f.jsx)(`span`,{onClick:t=>{t.stopPropagation(),b(e.key)},title:S(`common/close`,`Close`),style:{cursor:`pointer`},children:s.closePanel})]})]}),i?null:(0,f.jsx)(`div`,{style:{flex:g?`1 1 auto`:1,overflow:`auto`,minHeight:0},children:v(e)})]}),h?(0,f.jsx)(c,{direction:`col`,containerRef:F,min:0,max:1,onCommit:t=>B(t,e.key,m.key)}):null]},e.key)}),q?(0,f.jsx)(o,{x:q.x,y:q.y,onClose:()=>J(null),spec:{query:{slot:`tab:context`},footerHints:!0},context:{...$,"$/tab/key":q.key,"$/tab/index":q.idx,"$/tab/isActive":!0,"$/tab/isPinned":!1,"$/group/tabCount":t.length}}):null,Y?(0,f.jsx)(o,{x:Y.x,y:Y.y,onClose:()=>X(null),spec:{query:{slot:`surface:context`},footerHints:!0},context:$}):null]})}export{_ as StackLayout};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./jsx-runtime-BguD1OXD.js";import{t}from"./useI18n-T3BwAm0z.js";import{n}from"./ScenaProvider-6A3TJumQ.js";import{t as r}from"./Button-_R1oktDz.js";import{Ft as i}from"./index-ddqm5vYD.js";var a=e();function o(){let e=n(),{t:o}=t();return(0,a.jsxs)(`div`,{className:`web-start`,children:[(0,a.jsx)(i,{size:72}),(0,a.jsx)(`p`,{className:`web-note`,children:o(`sessions/start/note`)}),(0,a.jsx)(r,{label:o(`sessions/commands/newSession`),variant:`primary`,onClick:()=>void e.commands.execute(`ahp.newSession`)})]})}export{o as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./jsx-runtime-BguD1OXD.js";import{t}from"./react-CybPckBe.js";import{t as n}from"./useI18n-T3BwAm0z.js";import{n as r}from"./ScenaProvider-6A3TJumQ.js";import{t as i}from"./ContextMenu-
|
|
1
|
+
import{t as e}from"./jsx-runtime-BguD1OXD.js";import{t}from"./react-CybPckBe.js";import{t as n}from"./useI18n-T3BwAm0z.js";import{n as r}from"./ScenaProvider-6A3TJumQ.js";import{t as i}from"./ContextMenu-DlF_3KO_.js";import{r as a}from"./Icon-CIQ7doud.js";import{TabTitle as o}from"./TabPanelLayout-DKamepPL.js";var s=e(),c=t(),l=`application/x-scena-tab-index`;function u({surface:e,mounts:t,state:u,renderMount:d,renderEmpty:f,onActivate:p,onClose:m,onReorder:h}){let{t:g}=n(),_=r(),v=u.split?.order??[],y=new Set(v),b=v.map(e=>t.find(t=>t.key===e)).filter(e=>!!e),x=t.filter(e=>!y.has(e.key)),S=[...b,...x],C=S.find(e=>e.key===u.activeContainerKey)??S[S.length-1],w=new Set(u.split?.pinned??[]),T=C?_.commands.list({slot:`view/title`,enabled:!0}):[],E=C?.component.component,D={"$/surface/name":e,"$/tab/key":C?.key,"$/tab/component":typeof E==`string`?E:void 0},O=_.commands.list({slot:`surface/title`}).filter(e=>e.when===void 0||_.when.evaluate(e.when,D)),k=t=>{_.store.set(`$/surface/name`,e),_.store.set(`$/tab/key`,C?.key),_.commands.execute(t)},[A,j]=(0,c.useState)(null),[M,N]=(0,c.useState)(null),[P,F]=(0,c.useState)(null),[I,L]=(0,c.useState)(null),R=(0,c.useRef)(null);(0,c.useEffect)(()=>{let e=R.current;if(!e)return;function t(t){t.deltaY!==0&&(t.preventDefault(),e.scrollLeft+=t.deltaY)}return e.addEventListener(`wheel`,t,{passive:!1}),()=>e.removeEventListener(`wheel`,t)},[]);function z(e,t,n){e.preventDefault(),e.stopPropagation(),N({x:e.clientX,y:e.clientY,tabKey:t,tabIdx:n})}function B(e){let t=e.currentTarget.getBoundingClientRect();F({x:t.right,y:t.bottom+2})}function V(e){e.target===e.currentTarget&&(e.preventDefault(),L({x:e.clientX,y:e.clientY}))}function H(e,t){e.dataTransfer.setData(l,String(t)),e.dataTransfer.effectAllowed=`move`}function U(e,t){e.dataTransfer.types.includes(l)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`,j(t))}function W(){j(null)}function G(e,t){if(!e.dataTransfer.types.includes(l))return;e.preventDefault();let n=Number(e.dataTransfer.getData(l));j(null),Number.isFinite(n)&&n!==t&&h(n,t)}let K={"$/tab/canSplit":!1,"$/tab/canMove":!1,"$/group/canClose":!1,"$/group/canMaximize":!1,"$/surface/name":e,"$/surface/layoutId":`tab`,"$/surface/mountCount":t.length,"$/surface/closedHistory":0},q=M?S.find(e=>e.key===M.tabKey):void 0,J=q?_.mountMenus.collect(`tab:context`,q):void 0;return(0,s.jsxs)(`div`,{className:`oo-layout oo-layout--tab`,style:{display:`flex`,flexDirection:`column`,height:`100%`},children:[(0,s.jsxs)(`div`,{className:`tab-bar`,children:[(0,s.jsx)(`div`,{className:`tab-bar__strip`,ref:R,children:S.map((t,n)=>{let r=w.has(t.key);return(0,s.jsx)(o,{resourceKey:t.key,m:t,idx:n,isPinned:r,isActive:t===C,dragOverTab:A,onDragStart:e=>H(e,n),onDragOver:e=>U(e,n),onDragLeave:W,onDrop:e=>G(e,n),onClick:()=>p(t.key),onContextMenu:e=>z(e,t.key,n),onClose:e=>{e.stopPropagation(),m(t.key)},onUnpin:n=>{n.stopPropagation(),_.store.set(`$/tab/key`,t.key),_.store.set(`$/surface/name`,e),_.commands.execute(`tab.unpin`)}},t.key)})}),(0,s.jsxs)(`div`,{className:`tab-bar__extras`,children:[T.map((e,t)=>{let n=typeof e.title==`function`?e.title():e.title;return(0,s.jsxs)(`button`,{onClick:()=>_.commands.execute(e.id),title:String(n),children:[e.icon?`${e.icon} `:``,String(n)]},t)}),O.map(e=>{let t=String(typeof e.title==`function`?e.title():e.title);return(0,s.jsx)(`button`,{onClick:()=>k(e.id),title:t,"aria-label":t,children:e.icon??t},e.id)}),(0,s.jsx)(`button`,{className:`tab-bar__more`,title:g(`layout/groupActions`,`Group actions`),"aria-label":g(`layout/groupActions`,`Group actions`),onClick:B,children:a.moreHoriz})]})]}),(0,s.jsx)(`div`,{style:{flex:1,minHeight:0,position:`relative`},onContextMenu:V,children:S.length===0?f?.()??null:S.map(e=>(0,s.jsx)(`div`,{className:`oo-layout__mount`,"data-active":e===C||void 0,style:{height:`100%`,overflow:`auto`,display:e===C?`block`:`none`},children:d(e)},e.key))}),M?(0,s.jsx)(i,{x:M.x,y:M.y,onClose:()=>N(null),spec:{query:{slot:`tab:context`},extraItems:J,footerHints:!0},context:{...K,"$/tab/key":M.tabKey,"$/tab/index":M.tabIdx,"$/tab/isActive":M.tabKey===C?.key,"$/tab/isPinned":w.has(M.tabKey),"$/group/tabCount":S.length}}):null,P?(0,s.jsx)(i,{x:P.x,y:P.y,onClose:()=>F(null),spec:{query:{slot:`tab-group:context`},footerHints:!0},context:{...K,"$/group/tabCount":S.length}}):null,I?(0,s.jsx)(i,{x:I.x,y:I.y,onClose:()=>L(null),spec:{query:{slot:`surface:context`},footerHints:!0},context:K}):null]})}export{u as TabLayout};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./jsx-runtime-BguD1OXD.js";import{t}from"./react-CybPckBe.js";import{n}from"./colors-BieSUSt7.js";import{t as r}from"./useI18n-T3BwAm0z.js";import{n as i}from"./ScenaProvider-6A3TJumQ.js";import{t as a}from"./ContextMenu-DYnWIBAF.js";import{r as o}from"./Icon-CIQ7doud.js";import{t as s}from"./Divisor-hrrJK3bw.js";import{t as c}from"./useStoreLabel-BtAsVCsr.js";var l=e(),u=t(),d=`application/x-scena-tab-panel`,f=.2,p=.05;function m(){return`g_${Math.random().toString(36).slice(2,10)}`}function h(e,t){return{kind:`leaf`,id:m(),tabs:e,activeKey:t}}function g(e,t){if(e.kind===`leaf`){for(let n of e.tabs)t.add(n);return}g(e.first,t),g(e.second,t)}function _(e,t){if(e.kind===`leaf`){t.push(e);return}_(e.first,t),_(e.second,t)}function v(e,t){if(e.kind===`leaf`){let n=e.tabs.filter(e=>t.has(e)),r=e.activeKey&&t.has(e.activeKey)?e.activeKey:n[0];return{...e,tabs:n,activeKey:r}}return{...e,first:v(e.first,t),second:v(e.second,t)}}function y(e,t){if(e.kind===`leaf`)return t(e);let n=y(e.first,t),r=y(e.second,t);return n&&r?{...e,first:n,second:r}:n??r}function b(e,t,n){return e.kind===`leaf`?e.id===t?n:e:{...e,first:b(e.first,t,n),second:b(e.second,t,n)}}function x(e,t,n){return e.kind===`leaf`?e:t(e)?{...e,...n}:{...e,first:x(e.first,t,n),second:x(e.second,t,n)}}function S(e,t){if(e.kind===`leaf`){if(t.has(e.id)){let n=m();return t.add(n),{...e,id:n}}return t.add(e.id),e}return{...e,first:S(e.first,t),second:S(e.second,t)}}function C(e,t,n){let r=new Set(t),i=e?S(v(e,r),new Set):h([...t],n),a=new Set;g(i,a);let o=t.filter(e=>!a.has(e));if(o.length>0){let e=[];_(i,e);let t=n&&e.find(e=>e.tabs.includes(n))||e.find(e=>e.tabs.length>0)||e[0];if(t){let e=n&&o.includes(n)?n:o[o.length-1];i=b(i,t.id,{...t,tabs:[...t.tabs,...o],activeKey:e})}}if(n){let e=y(i,e=>e.tabs.includes(n)&&e.activeKey!==n?{...e,activeKey:n}:e);e&&(i=e)}return{tree:i}}function w(e,t){return e===t?!0:!e||!t||e.kind!==t.kind?!1:e.kind===`leaf`&&t.kind===`leaf`?e.id===t.id&&e.activeKey===t.activeKey&&e.tabs.length===t.tabs.length&&e.tabs.every((e,n)=>e===t.tabs[n]):e.kind===`split`&&t.kind===`split`&&e.direction===t.direction&&(e.ratio??.5)===(t.ratio??.5)&&w(e.first,t.first)&&w(e.second,t.second)}function T({leaf:e,ctx:t}){let{t:n}=r(),s=i(),c=e.activeKey??e.tabs[0],[p,m]=(0,u.useState)(null),[h,g]=(0,u.useState)(null),_=(0,u.useRef)(null),v=(0,u.useRef)(null);(0,u.useEffect)(()=>{let e=v.current;if(!e)return;function t(t){t.deltaY!==0&&(t.preventDefault(),e.scrollLeft+=t.deltaY)}return e.addEventListener(`wheel`,t,{passive:!1}),()=>e.removeEventListener(`wheel`,t)},[]),(0,u.useEffect)(()=>{let e=()=>{g(null),m(null)};return window.addEventListener(`dragend`,e),window.addEventListener(`drop`,e),()=>{window.removeEventListener(`dragend`,e),window.removeEventListener(`drop`,e)}},[]);function b(n){let r=y(t.tree,t=>t.id===e.id?{...t,activeKey:n}:t);r&&t.commit(r),t.onActivate(n)}function x(t,n){let r={sourceLeafId:e.id,tabKey:n};t.dataTransfer.setData(d,JSON.stringify(r)),t.dataTransfer.effectAllowed=`move`}function S(e,t){e.dataTransfer.types.includes(d)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`,m(t))}function C(){m(null)}function w(n,r){if(!n.dataTransfer.types.includes(d))return;n.preventDefault(),m(null);let i=D(n);i&&k(t,i,e.id,r)}function T(e){let t=_.current;if(!t)return null;let n=t.getBoundingClientRect();if(n.width<=0||n.height<=0)return null;let r=(e.clientX-n.left)/n.width,i=(e.clientY-n.top)/n.height;return i<f?`top`:i>.8?`bottom`:r<f?`left`:r>.8?`right`:`center`}function O(e){e.dataTransfer.types.includes(d)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`,g(T(e)))}function j(e){let t=e.relatedTarget;(!t||!e.currentTarget.contains(t))&&g(null)}function M(n){if(!n.dataTransfer.types.includes(d))return;n.preventDefault();let r=T(n);g(null);let i=D(n);i&&r&&(r===`center`?k(t,i,e.id,e.tabs.length):A(t,i,e.id,r))}let[N,P]=(0,u.useState)(null);function I(e){e.stopPropagation();let t=e.currentTarget.getBoundingClientRect();P({x:t.right-4,y:t.bottom+2})}function L(){P(null)}let[R,z]=(0,u.useState)(null);function B(e,t,n){e.preventDefault(),z({x:e.clientX,y:e.clientY,tabKey:t,tabIdx:n})}function V(){z(null)}let H=R?t.mounts.find(e=>e.key===R.tabKey):void 0,U=H?s.mountMenus.collect(`tab:context`,H):void 0;return(0,l.jsxs)(`div`,{className:`oo-tab-panel-group`,"data-leaf-id":e.id,style:{flex:1,minWidth:0,minHeight:0,display:`flex`,flexDirection:`column`,overflow:`hidden`},children:[(0,l.jsxs)(`div`,{className:`tab-bar`,children:[(0,l.jsx)(`div`,{className:`tab-bar__strip`,ref:v,children:e.tabs.map((e,n)=>{let r=t.mounts.find(t=>t.key===e);return(0,l.jsx)(F,{resourceKey:e,idx:n,m:r,isActive:e===c,isPinned:t.pinned.has(e),dragOverTab:p,onDragStart:t=>x(t,e),onDragOver:e=>S(e,n),onDragLeave:C,onDrop:e=>w(e,n),onClick:()=>b(e),onContextMenu:t=>B(t,e,n),onClose:()=>t.onClose(e),onUnpin:n=>{n.stopPropagation(),s.store.set(`$/tab/key`,e),s.store.set(`$/surface/name`,t.surface),s.commands.execute(`tab.unpin`)}},e)})}),(0,l.jsx)(`div`,{className:`tab-bar__extras`,children:(0,l.jsx)(`button`,{className:`tab-bar__more`,title:n(`layout/groupActions`,`Group actions`),"aria-label":n(`layout/groupActions`,`Group actions`),onClick:I,children:o.moreHoriz})})]}),(0,l.jsxs)(`div`,{ref:_,onDragOver:O,onDragLeave:j,onDrop:M,style:{flex:1,minHeight:0,position:`relative`,overflow:`auto`},children:[e.tabs.length===0?t.mounts.length===0?t.renderEmpty?.()??null:(0,l.jsx)(`div`,{style:{padding:24,color:`var(--oo-color-muted)`},children:`Empty group. Drag a tab here.`}):e.tabs.map(e=>{let n=t.mounts.find(t=>t.key===e);return n?(0,l.jsx)(`div`,{className:`oo-layout__mount`,"data-active":e===c||void 0,style:{position:`absolute`,inset:0,overflow:`auto`,display:e===c?`block`:`none`},children:t.renderMount(n)},e):null}),h?(0,l.jsx)(E,{zone:h}):null]}),N?(0,l.jsx)(a,{x:N.x,y:N.y,onClose:L,spec:{query:{slot:`tab-group:context`},footerHints:!0},context:{"$/surface/name":t.surface,"$/surface/layoutId":`tab-panel`,"$/surface/mountCount":t.mounts.length,"$/surface/closedHistory":0,"$/group/key":e.id,"$/group/tabCount":e.tabs.length,"$/group/canClose":!0,"$/group/canMaximize":!1,"$/tab/canSplit":!0,"$/tab/canMove":t.leafCount>1}}):null,R?(0,l.jsx)(a,{x:R.x,y:R.y,onClose:V,spec:{query:{slot:`tab:context`},extraItems:U,footerHints:!0},context:{"$/surface/name":t.surface,"$/surface/layoutId":`tab-panel`,"$/surface/mountCount":t.mounts.length,"$/surface/closedHistory":0,"$/group/key":e.id,"$/group/tabCount":e.tabs.length,"$/group/canClose":!0,"$/tab/key":R.tabKey,"$/tab/index":R.tabIdx,"$/tab/leafId":e.id,"$/tab/isActive":R.tabKey===c,"$/tab/isPinned":t.pinned.has(R.tabKey),"$/tab/canSplit":!0,"$/tab/canMove":t.leafCount>1}}):null]})}function E({zone:e}){let t={position:`absolute`,pointerEvents:`none`,background:`rgba(59,130,246,0.12)`,border:`2px solid rgba(59,130,246,0.6)`,boxSizing:`border-box`,zIndex:5,transition:`all 80ms ease-out`},n=(()=>{switch(e){case`center`:return{...t,inset:0};case`top`:return{...t,top:0,left:0,right:0,height:`50%`};case`bottom`:return{...t,bottom:0,left:0,right:0,height:`50%`};case`left`:return{...t,top:0,bottom:0,left:0,width:`50%`};case`right`:return{...t,top:0,bottom:0,right:0,width:`50%`}}})();return(0,l.jsx)(`div`,{className:`oo-tab-panel-drop-preview`,style:n})}function D(e){let t=e.dataTransfer.getData(d);if(!t)return null;try{let e=JSON.parse(t);return typeof e.sourceLeafId!=`string`||typeof e.tabKey!=`string`?null:e}catch{return null}}function O(e,t){return y(e,e=>{if(!e.tabs.includes(t))return e;let n=e.tabs.filter(e=>e!==t);return n.length===0?null:{...e,tabs:n,activeKey:e.activeKey===t?n[0]:e.activeKey}})}function k(e,t,n,r){if(t.sourceLeafId===n){let i=y(e.tree,e=>{if(e.id!==n)return e;let i=e.tabs.indexOf(t.tabKey);if(i===-1)return e;let a=[...e.tabs];a.splice(i,1);let o=i<r?r-1:r;return a.splice(o,0,t.tabKey),{...e,tabs:a,activeKey:t.tabKey}});i&&e.commit(i),e.onActivate(t.tabKey);return}let i=O(e.tree,t.tabKey);if(!i)return;let a=y(i,e=>{if(e.id!==n)return e;let i=[...e.tabs],a=Math.max(0,Math.min(r,i.length));return i.splice(a,0,t.tabKey),{...e,tabs:i,activeKey:t.tabKey}});a&&e.commit(a),e.onActivate(t.tabKey)}function A(e,t,n,r){let i=e.tree,a=j(i,t.sourceLeafId);if(a&&a.id===n&&a.tabs.length===1||(i=O(i,t.tabKey),!i))return;let o=j(i,n);if(!o)return;let s=h([t.tabKey],t.tabKey),c=b(i,n,{kind:`split`,direction:r===`left`||r===`right`?`row`:`column`,ratio:.5,first:r===`left`||r===`top`?s:o,second:r===`left`||r===`top`?o:s});e.commit(c),e.onActivate(t.tabKey)}function j(e,t){return e.kind===`leaf`?e.id===t?e:null:j(e.first,t)||j(e.second,t)}function M({node:e,ctx:t}){return e.kind===`leaf`?(0,l.jsx)(T,{leaf:e,ctx:t}):(0,l.jsx)(N,{node:e,ctx:t})}function N({node:e,ctx:t}){let n=(0,u.useRef)(null),r=e.ratio??.5;function i(n){let r=x(t.tree,t=>t===e,{ratio:n});t.commit(r)}let a=e.direction===`row`;return(0,l.jsxs)(`div`,{ref:n,className:`oo-tab-panel-split`,"data-direction":e.direction,style:{display:`flex`,flexDirection:a?`row`:`column`,flex:1,minWidth:0,minHeight:0},children:[(0,l.jsx)(`div`,{style:{flex:r,minWidth:0,minHeight:0,display:`flex`},children:(0,l.jsx)(M,{node:e.first,ctx:t})}),(0,l.jsx)(s,{direction:e.direction===`row`?`row`:`col`,containerRef:n,min:p,max:.95,onCommit:i}),(0,l.jsx)(`div`,{style:{flex:1-r,minWidth:0,minHeight:0,display:`flex`},children:(0,l.jsx)(M,{node:e.second,ctx:t})})]})}function P({surface:e,mounts:t,state:n,setState:r,renderMount:i,renderEmpty:a,onActivate:o,onClose:s}){let c=t.map(e=>e.key),{tree:d}=C(n.tabPanel?.tree,c,n.activeContainerKey);(0,u.useEffect)(()=>{w(n.tabPanel?.tree,d)||r({tabPanel:{tree:d}})});let f=[];_(d,f);let p={surface:e,mounts:t,renderMount:i,renderEmpty:a,onActivate:o,onClose:s,tree:d,commit:e=>r({tabPanel:{tree:e}}),leafCount:f.length,pinned:new Set(n.split?.pinned??[])};return(0,l.jsx)(`div`,{className:`oo-layout oo-layout--tab-panel`,style:{display:`flex`,height:`100%`,minHeight:0},children:(0,l.jsx)(M,{node:d,ctx:p})})}function F({m:e,resourceKey:t,isActive:a,dragOverTab:s,idx:u,onDragStart:d,onDragOver:f,onDragLeave:p,onDrop:m,onClick:h,onContextMenu:g,onClose:_,onUnpin:v,isPinned:y}){let{t:b}=r(),x=i(),S=e?x.components.get(e.component.component)?.props:void 0,C=c(e?.props?.title??S?.title,``,e?.dataContext)||t,w=e?.props?.icon??S?.icon,T=e?.props?.color??S?.color;return(0,l.jsxs)(`div`,{className:`tab-bar__tab`,"data-active":a,"data-drag-over":s===u?`true`:void 0,"data-color":T,"data-pinned":y||void 0,draggable:!0,onDragStart:d,onDragOver:f,onDragLeave:p,onDrop:m,onClick:h,onContextMenu:g,title:C,style:{...T?{"--tab-color":n(T)}:{}},children:[w?(0,l.jsx)(`span`,{className:`tab__icon`,"aria-hidden":!0,children:w}):null,(0,l.jsx)(`span`,{className:`tab__label`,children:C}),y?(0,l.jsx)(`span`,{className:`pin`,onClick:e=>{e.stopPropagation(),v(e)},title:b(`tabs/unpin`,`Unpin tab`),children:o.pin}):(0,l.jsx)(`span`,{className:`close`,onClick:e=>{e.stopPropagation(),_(e)},title:b(`common/close`,`Close`),children:o.closePanel})]})}export{P as TabPanelLayout,F as TabTitle};
|
|
1
|
+
import{t as e}from"./jsx-runtime-BguD1OXD.js";import{t}from"./react-CybPckBe.js";import{n}from"./colors-BieSUSt7.js";import{t as r}from"./useI18n-T3BwAm0z.js";import{n as i}from"./ScenaProvider-6A3TJumQ.js";import{t as a}from"./ContextMenu-DlF_3KO_.js";import{r as o}from"./Icon-CIQ7doud.js";import{t as s}from"./Divisor-hrrJK3bw.js";import{t as c}from"./useStoreLabel-BtAsVCsr.js";var l=e(),u=t(),d=`application/x-scena-tab-panel`,f=.2,p=.05;function m(){return`g_${Math.random().toString(36).slice(2,10)}`}function h(e,t){return{kind:`leaf`,id:m(),tabs:e,activeKey:t}}function g(e,t){if(e.kind===`leaf`){for(let n of e.tabs)t.add(n);return}g(e.first,t),g(e.second,t)}function _(e,t){if(e.kind===`leaf`){t.push(e);return}_(e.first,t),_(e.second,t)}function v(e,t){if(e.kind===`leaf`){let n=e.tabs.filter(e=>t.has(e)),r=e.activeKey&&t.has(e.activeKey)?e.activeKey:n[0];return{...e,tabs:n,activeKey:r}}return{...e,first:v(e.first,t),second:v(e.second,t)}}function y(e,t){if(e.kind===`leaf`)return t(e);let n=y(e.first,t),r=y(e.second,t);return n&&r?{...e,first:n,second:r}:n??r}function b(e,t,n){return e.kind===`leaf`?e.id===t?n:e:{...e,first:b(e.first,t,n),second:b(e.second,t,n)}}function x(e,t,n){return e.kind===`leaf`?e:t(e)?{...e,...n}:{...e,first:x(e.first,t,n),second:x(e.second,t,n)}}function S(e,t){if(e.kind===`leaf`){if(t.has(e.id)){let n=m();return t.add(n),{...e,id:n}}return t.add(e.id),e}return{...e,first:S(e.first,t),second:S(e.second,t)}}function C(e,t,n){let r=new Set(t),i=e?S(v(e,r),new Set):h([...t],n),a=new Set;g(i,a);let o=t.filter(e=>!a.has(e));if(o.length>0){let e=[];_(i,e);let t=n&&e.find(e=>e.tabs.includes(n))||e.find(e=>e.tabs.length>0)||e[0];if(t){let e=n&&o.includes(n)?n:o[o.length-1];i=b(i,t.id,{...t,tabs:[...t.tabs,...o],activeKey:e})}}if(n){let e=y(i,e=>e.tabs.includes(n)&&e.activeKey!==n?{...e,activeKey:n}:e);e&&(i=e)}return{tree:i}}function w(e,t){return e===t?!0:!e||!t||e.kind!==t.kind?!1:e.kind===`leaf`&&t.kind===`leaf`?e.id===t.id&&e.activeKey===t.activeKey&&e.tabs.length===t.tabs.length&&e.tabs.every((e,n)=>e===t.tabs[n]):e.kind===`split`&&t.kind===`split`&&e.direction===t.direction&&(e.ratio??.5)===(t.ratio??.5)&&w(e.first,t.first)&&w(e.second,t.second)}function T({leaf:e,ctx:t}){let{t:n}=r(),s=i(),c=e.activeKey??e.tabs[0],[p,m]=(0,u.useState)(null),[h,g]=(0,u.useState)(null),_=(0,u.useRef)(null),v=(0,u.useRef)(null);(0,u.useEffect)(()=>{let e=v.current;if(!e)return;function t(t){t.deltaY!==0&&(t.preventDefault(),e.scrollLeft+=t.deltaY)}return e.addEventListener(`wheel`,t,{passive:!1}),()=>e.removeEventListener(`wheel`,t)},[]),(0,u.useEffect)(()=>{let e=()=>{g(null),m(null)};return window.addEventListener(`dragend`,e),window.addEventListener(`drop`,e),()=>{window.removeEventListener(`dragend`,e),window.removeEventListener(`drop`,e)}},[]);function b(n){let r=y(t.tree,t=>t.id===e.id?{...t,activeKey:n}:t);r&&t.commit(r),t.onActivate(n)}function x(t,n){let r={sourceLeafId:e.id,tabKey:n};t.dataTransfer.setData(d,JSON.stringify(r)),t.dataTransfer.effectAllowed=`move`}function S(e,t){e.dataTransfer.types.includes(d)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`,m(t))}function C(){m(null)}function w(n,r){if(!n.dataTransfer.types.includes(d))return;n.preventDefault(),m(null);let i=D(n);i&&k(t,i,e.id,r)}function T(e){let t=_.current;if(!t)return null;let n=t.getBoundingClientRect();if(n.width<=0||n.height<=0)return null;let r=(e.clientX-n.left)/n.width,i=(e.clientY-n.top)/n.height;return i<f?`top`:i>.8?`bottom`:r<f?`left`:r>.8?`right`:`center`}function O(e){e.dataTransfer.types.includes(d)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`,g(T(e)))}function j(e){let t=e.relatedTarget;(!t||!e.currentTarget.contains(t))&&g(null)}function M(n){if(!n.dataTransfer.types.includes(d))return;n.preventDefault();let r=T(n);g(null);let i=D(n);i&&r&&(r===`center`?k(t,i,e.id,e.tabs.length):A(t,i,e.id,r))}let[N,P]=(0,u.useState)(null);function I(e){e.stopPropagation();let t=e.currentTarget.getBoundingClientRect();P({x:t.right-4,y:t.bottom+2})}function L(){P(null)}let[R,z]=(0,u.useState)(null);function B(e,t,n){e.preventDefault(),z({x:e.clientX,y:e.clientY,tabKey:t,tabIdx:n})}function V(){z(null)}let H=R?t.mounts.find(e=>e.key===R.tabKey):void 0,U=H?s.mountMenus.collect(`tab:context`,H):void 0;return(0,l.jsxs)(`div`,{className:`oo-tab-panel-group`,"data-leaf-id":e.id,style:{flex:1,minWidth:0,minHeight:0,display:`flex`,flexDirection:`column`,overflow:`hidden`},children:[(0,l.jsxs)(`div`,{className:`tab-bar`,children:[(0,l.jsx)(`div`,{className:`tab-bar__strip`,ref:v,children:e.tabs.map((e,n)=>{let r=t.mounts.find(t=>t.key===e);return(0,l.jsx)(F,{resourceKey:e,idx:n,m:r,isActive:e===c,isPinned:t.pinned.has(e),dragOverTab:p,onDragStart:t=>x(t,e),onDragOver:e=>S(e,n),onDragLeave:C,onDrop:e=>w(e,n),onClick:()=>b(e),onContextMenu:t=>B(t,e,n),onClose:()=>t.onClose(e),onUnpin:n=>{n.stopPropagation(),s.store.set(`$/tab/key`,e),s.store.set(`$/surface/name`,t.surface),s.commands.execute(`tab.unpin`)}},e)})}),(0,l.jsx)(`div`,{className:`tab-bar__extras`,children:(0,l.jsx)(`button`,{className:`tab-bar__more`,title:n(`layout/groupActions`,`Group actions`),"aria-label":n(`layout/groupActions`,`Group actions`),onClick:I,children:o.moreHoriz})})]}),(0,l.jsxs)(`div`,{ref:_,onDragOver:O,onDragLeave:j,onDrop:M,style:{flex:1,minHeight:0,position:`relative`,overflow:`auto`},children:[e.tabs.length===0?t.mounts.length===0?t.renderEmpty?.()??null:(0,l.jsx)(`div`,{style:{padding:24,color:`var(--oo-color-muted)`},children:`Empty group. Drag a tab here.`}):e.tabs.map(e=>{let n=t.mounts.find(t=>t.key===e);return n?(0,l.jsx)(`div`,{className:`oo-layout__mount`,"data-active":e===c||void 0,style:{position:`absolute`,inset:0,overflow:`auto`,display:e===c?`block`:`none`},children:t.renderMount(n)},e):null}),h?(0,l.jsx)(E,{zone:h}):null]}),N?(0,l.jsx)(a,{x:N.x,y:N.y,onClose:L,spec:{query:{slot:`tab-group:context`},footerHints:!0},context:{"$/surface/name":t.surface,"$/surface/layoutId":`tab-panel`,"$/surface/mountCount":t.mounts.length,"$/surface/closedHistory":0,"$/group/key":e.id,"$/group/tabCount":e.tabs.length,"$/group/canClose":!0,"$/group/canMaximize":!1,"$/tab/canSplit":!0,"$/tab/canMove":t.leafCount>1}}):null,R?(0,l.jsx)(a,{x:R.x,y:R.y,onClose:V,spec:{query:{slot:`tab:context`},extraItems:U,footerHints:!0},context:{"$/surface/name":t.surface,"$/surface/layoutId":`tab-panel`,"$/surface/mountCount":t.mounts.length,"$/surface/closedHistory":0,"$/group/key":e.id,"$/group/tabCount":e.tabs.length,"$/group/canClose":!0,"$/tab/key":R.tabKey,"$/tab/index":R.tabIdx,"$/tab/leafId":e.id,"$/tab/isActive":R.tabKey===c,"$/tab/isPinned":t.pinned.has(R.tabKey),"$/tab/canSplit":!0,"$/tab/canMove":t.leafCount>1}}):null]})}function E({zone:e}){let t={position:`absolute`,pointerEvents:`none`,background:`rgba(59,130,246,0.12)`,border:`2px solid rgba(59,130,246,0.6)`,boxSizing:`border-box`,zIndex:5,transition:`all 80ms ease-out`},n=(()=>{switch(e){case`center`:return{...t,inset:0};case`top`:return{...t,top:0,left:0,right:0,height:`50%`};case`bottom`:return{...t,bottom:0,left:0,right:0,height:`50%`};case`left`:return{...t,top:0,bottom:0,left:0,width:`50%`};case`right`:return{...t,top:0,bottom:0,right:0,width:`50%`}}})();return(0,l.jsx)(`div`,{className:`oo-tab-panel-drop-preview`,style:n})}function D(e){let t=e.dataTransfer.getData(d);if(!t)return null;try{let e=JSON.parse(t);return typeof e.sourceLeafId!=`string`||typeof e.tabKey!=`string`?null:e}catch{return null}}function O(e,t){return y(e,e=>{if(!e.tabs.includes(t))return e;let n=e.tabs.filter(e=>e!==t);return n.length===0?null:{...e,tabs:n,activeKey:e.activeKey===t?n[0]:e.activeKey}})}function k(e,t,n,r){if(t.sourceLeafId===n){let i=y(e.tree,e=>{if(e.id!==n)return e;let i=e.tabs.indexOf(t.tabKey);if(i===-1)return e;let a=[...e.tabs];a.splice(i,1);let o=i<r?r-1:r;return a.splice(o,0,t.tabKey),{...e,tabs:a,activeKey:t.tabKey}});i&&e.commit(i),e.onActivate(t.tabKey);return}let i=O(e.tree,t.tabKey);if(!i)return;let a=y(i,e=>{if(e.id!==n)return e;let i=[...e.tabs],a=Math.max(0,Math.min(r,i.length));return i.splice(a,0,t.tabKey),{...e,tabs:i,activeKey:t.tabKey}});a&&e.commit(a),e.onActivate(t.tabKey)}function A(e,t,n,r){let i=e.tree,a=j(i,t.sourceLeafId);if(a&&a.id===n&&a.tabs.length===1||(i=O(i,t.tabKey),!i))return;let o=j(i,n);if(!o)return;let s=h([t.tabKey],t.tabKey),c=b(i,n,{kind:`split`,direction:r===`left`||r===`right`?`row`:`column`,ratio:.5,first:r===`left`||r===`top`?s:o,second:r===`left`||r===`top`?o:s});e.commit(c),e.onActivate(t.tabKey)}function j(e,t){return e.kind===`leaf`?e.id===t?e:null:j(e.first,t)||j(e.second,t)}function M({node:e,ctx:t}){return e.kind===`leaf`?(0,l.jsx)(T,{leaf:e,ctx:t}):(0,l.jsx)(N,{node:e,ctx:t})}function N({node:e,ctx:t}){let n=(0,u.useRef)(null),r=e.ratio??.5;function i(n){let r=x(t.tree,t=>t===e,{ratio:n});t.commit(r)}let a=e.direction===`row`;return(0,l.jsxs)(`div`,{ref:n,className:`oo-tab-panel-split`,"data-direction":e.direction,style:{display:`flex`,flexDirection:a?`row`:`column`,flex:1,minWidth:0,minHeight:0},children:[(0,l.jsx)(`div`,{style:{flex:r,minWidth:0,minHeight:0,display:`flex`},children:(0,l.jsx)(M,{node:e.first,ctx:t})}),(0,l.jsx)(s,{direction:e.direction===`row`?`row`:`col`,containerRef:n,min:p,max:.95,onCommit:i}),(0,l.jsx)(`div`,{style:{flex:1-r,minWidth:0,minHeight:0,display:`flex`},children:(0,l.jsx)(M,{node:e.second,ctx:t})})]})}function P({surface:e,mounts:t,state:n,setState:r,renderMount:i,renderEmpty:a,onActivate:o,onClose:s}){let c=t.map(e=>e.key),{tree:d}=C(n.tabPanel?.tree,c,n.activeContainerKey);(0,u.useEffect)(()=>{w(n.tabPanel?.tree,d)||r({tabPanel:{tree:d}})});let f=[];_(d,f);let p={surface:e,mounts:t,renderMount:i,renderEmpty:a,onActivate:o,onClose:s,tree:d,commit:e=>r({tabPanel:{tree:e}}),leafCount:f.length,pinned:new Set(n.split?.pinned??[])};return(0,l.jsx)(`div`,{className:`oo-layout oo-layout--tab-panel`,style:{display:`flex`,height:`100%`,minHeight:0},children:(0,l.jsx)(M,{node:d,ctx:p})})}function F({m:e,resourceKey:t,isActive:a,dragOverTab:s,idx:u,onDragStart:d,onDragOver:f,onDragLeave:p,onDrop:m,onClick:h,onContextMenu:g,onClose:_,onUnpin:v,isPinned:y}){let{t:b}=r(),x=i(),S=e?x.components.get(e.component.component)?.props:void 0,C=c(e?.props?.title??S?.title,``,e?.dataContext)||t,w=e?.props?.icon??S?.icon,T=e?.props?.color??S?.color;return(0,l.jsxs)(`div`,{className:`tab-bar__tab`,"data-active":a,"data-drag-over":s===u?`true`:void 0,"data-color":T,"data-pinned":y||void 0,draggable:!0,onDragStart:d,onDragOver:f,onDragLeave:p,onDrop:m,onClick:h,onContextMenu:g,title:C,style:{...T?{"--tab-color":n(T)}:{}},children:[w?(0,l.jsx)(`span`,{className:`tab__icon`,"aria-hidden":!0,children:w}):null,(0,l.jsx)(`span`,{className:`tab__label`,children:C}),y?(0,l.jsx)(`span`,{className:`pin`,onClick:e=>{e.stopPropagation(),v(e)},title:b(`tabs/unpin`,`Unpin tab`),children:o.pin}):(0,l.jsx)(`span`,{className:`close`,onClick:e=>{e.stopPropagation(),_(e)},title:b(`common/close`,`Close`),children:o.closePanel})]})}export{P as TabPanelLayout,F as TabTitle};
|