| 1 |
var openStation=function(pr){"use strict";var hr=typeof document<"u"?document.currentScript:null;const mb="desktop-mode-my-wordpress";function Qc(){return window.wp?.os}async function gb(){const e=Qc();return typeof e?.loadWindowScript=="function"&&await e.loadWindowScript(mb),Qc()?.myWordpress}function Ns(e,t){return async(...n)=>{const o=await gb();if(!o||o===t())return;const s=o[e];typeof s=="function"&&await s(...n)}}function wb(){const e=window;e.wp=e.wp??{};const t=e.wp;t.os||(t.os={});const n=t.os;if(n.myWordpress)return;const o=[],s=()=>i,i={openDetail:Ns("openDetail",s),openMedia:Ns("openMedia",s),openUserFootprint:Ns("openUserFootprint",s),trashEntity:Ns("trashEntity",s),registerEntityKind:(r,a)=>{const l={unregister:null},c={kind:r,renderer:a,slot:l};return o.push(c),()=>{if(l.unregister){l.unregister(),l.unregister=null;return}const d=o.indexOf(c);d!==-1&&o.splice(d,1)}},__pendingKinds:o};n.myWordpress=i}wb();function Tt(){const e=window.wp?.hooks;if(!e)throw new Error("[openstation] `window.wp.hooks` is not available. The plugin declares `wp-hooks` as a script dependency; if you are seeing this error, verify the enqueue order.");return e}function Vn(e,t,n,o){Tt().addFilter(e,t,n,o)}function K(e,t,n,o){Tt().addAction(e,t,n,o)}function mr(e,t){return Tt().removeAction(e,t)}function V(e,t,...n){return Tt().applyFilters(e,t,...n)}function T(e,...t){Tt().doAction(e,...t)}function ed(e){return Tt().didAction(e)}function yb(){return Tt()}const b={INIT:"os.init",WALLPAPERS:"os.wallpapers",GAMES:"os.games",UNFOCUS_EFFECTS:"os.unfocus-effects",WINDOW_REVEALS:"os.window-reveals",WALLPAPER_MOUNTING:"os.wallpaper.mounting",WALLPAPER_MOUNTED:"os.wallpaper.mounted",WALLPAPER_UNMOUNTING:"os.wallpaper.unmounting",WALLPAPER_MOUNT_FAILED:"os.wallpaper.mount-failed",WALLPAPER_VISIBILITY:"os.wallpaper.visibility",WALLPAPER_SUSPEND:"os.wallpaper.suspend",WALLPAPER_PREVIEW_PARAMS:"os.wallpaper.preview-params",WALLPAPER_SETTINGS_CHANGED:"os.wallpaper.settings-changed",IFRAME_READY:"os.iframe.ready",IFRAME_ERROR:"os.iframe.error",IFRAME_NETWORK_COMPLETED:"os.iframe.network-completed",SHELL_ERROR:"os.shell.error",BROADCAST:"os.broadcast",MONITOR_ENTRY:"os.monitor.entry",WALLPAPER_SURFACES:"os.wallpaper.surfaces",DESKTOP_THEME_CHANGED:"os.os-theme.changed",DESKTOP_THEME_ICON:"os.os-theme.icon",DESKTOP_THEME_ICON_COLOR:"os.os-theme.icon-color",WALLPAPERS_SERVER_CHANGED:"os.wallpapers.server-changed",WINDOW_GEOMETRY:"os.window.geometry",WINDOW_OPENED:"os.window.opened",WINDOW_CONTENT_LOADING:"os.window.content-loading",WINDOW_CONTENT_LOADED:"os.window.content-loaded",WINDOW_LOADING_OVERLAY:"os.window.loading-overlay",WINDOW_REOPENED:"os.window.reopened",WINDOW_MENU_OPENED:"os.window.menu-opened",WINDOW_CLOSING:"os.window.closing",WINDOW_CLOSED:"os.window.closed",WINDOW_FOCUSED:"os.window.focused",WINDOW_BLURRED:"os.window.blurred",WINDOW_MINIMIZED:"os.window.minimized",WINDOW_RESTORED:"os.window.restored",WINDOW_CHILD_BLOCKED:"os.window.child-blocked",WINDOW_MAXIMIZED:"os.window.maximized",WINDOW_UNMAXIMIZED:"os.window.unmaximized",WINDOW_FULLSCREEN_ENTERED:"os.window.fullscreen-entered",WINDOW_FULLSCREEN_EXITED:"os.window.fullscreen-exited",WINDOW_AUTO_EXIT_FULLSCREEN:"os.window.auto-exit-fullscreen",WINDOW_FOCUS_ON_DRAG_HOVER:"os.window.focus-on-drag-hover",WINDOW_BOUNDS_CHANGED:"os.window.bounds-changed",WINDOW_MOVED:"os.window.moved",WINDOW_RESIZED:"os.window.resized",WINDOW_DRAG_START:"os.window.drag-start",WINDOW_DRAG_END:"os.window.drag-end",WINDOW_RESIZE_START:"os.window.resize-start",WINDOW_RESIZE_END:"os.window.resize-end",WINDOW_DETACHED:"os.window.detached",WINDOW_RELOADED:"os.window.reloaded",WINDOW_TITLE_CHANGED:"os.window.title-changed",WINDOW_HIGHLIGHT_CHANGED:"os.window.highlight-changed",WINDOW_BODY_RESIZED:"os.window.body-resized",NATIVE_WINDOW_BEFORE_RENDER:"os.native-window.before-render",NATIVE_WINDOW_AFTER_RENDER:"os.native-window.after-render",NATIVE_WINDOW_BEFORE_CLOSE:"os.native-window.before-close",WINDOW_CHROME_THEME:"os.window.chrome.theme",WINDOW_CHROME_CONTROLS:"os.window.chrome.controls",WINDOW_CHROME_SLOT:"os.window.chrome.slot",WINDOW_CHROME_RENDER:"os.window.chrome.render",WINDOW_CHROME_APPLIED:"os.window.chrome.applied",WINDOW_CHROME_THEME_CHANGED:"os.window.chrome.theme-changed",DESKTOP_ICON_CLICKED:"os.os-icon.clicked",DESKTOP_ICONS_RENDERED:"os.os-icons.rendered",ICON_BADGE_CHANGED:"os.icon.badge-changed",COMPONENTS_REGISTERED:"os.components.registered",DOCK_ITEM_APPENDED:"os.dock.item-appended",DOCK_ITEM_REMOVED:"os.dock.item-removed",DOCK_BEFORE_RENDER:"os.dock.before-render",DOCK_AFTER_RENDER:"os.dock.after-render",DOCK_REFRESH_ACTIVE:"os.dock.refresh-active",DOCK_TILE_CLASS:"os.dock.tile-class",DOCK_TILE_ELEMENT:"os.dock.tile-element",DOCK_TILE_RENDERED:"os.dock.tile-rendered",DOCK_TILE_TOOLTIP:"os.dock.tile-tooltip",DOCK_PEEK_CARD_CONTENT:"os.dock.peek-card-content",DOCK_PEEK_CARD_ELEMENT:"os.dock.peek-card-element",CONSTELLATION_PANEL:"os.constellation.panel",CONSTELLATION_OPENED:"os.constellation.opened",CONSTELLATION_CLOSED:"os.constellation.closed",OVERVIEW_ENTERING:"os.overview.entering",OVERVIEW_ENTERED:"os.overview.entered",OVERVIEW_EXITING:"os.overview.exiting",OVERVIEW_EXITED:"os.overview.exited",OVERVIEW_WINDOW_HOVER:"os.overview.window-hover",OVERVIEW_WINDOW_UNHOVER:"os.overview.window-unhover",OVERVIEW_WINDOW_CLICK:"os.overview.window-click",ARRANGE_CASCADE_STARTING:"os.arrange.cascade.starting",ARRANGE_CASCADE_APPLIED:"os.arrange.cascade.applied",ARRANGE_TILE_STARTING:"os.arrange.tile.starting",ARRANGE_TILE_APPLIED:"os.arrange.tile.applied",ARRANGE_TILE_DIMENSIONS:"os.arrange.tile.dimensions",ARRANGE_SNAP_CHANGED:"os.arrange.snap.changed",ARRANGE_SNAP_CELL_SIZE:"os.arrange.snap.cell-size",ARRANGE_CUSTOM_ACTION:"os.arrange.custom-action",SNAP_ZONE_PENDING:"os.snap.zone-pending",SNAP_ZONE_CANCELED:"os.snap.zone-canceled",SNAP_ZONE_COMMITTED:"os.snap.zone-committed",SNAP_SPLIT_FILLED:"os.snap.split-filled",WIDGETS:"os.widgets",WIDGET_MOUNTING:"os.widget.mounting",WIDGET_MOUNTED:"os.widget.mounted",WIDGET_UNMOUNTING:"os.widget.unmounting",WIDGET_MOUNT_FAILED:"os.widget.mount-failed",WIDGET_ADDED:"os.widget.added",WIDGET_REMOVED:"os.widget.removed",DESKTOP_CREATED:"os.os.created",DESKTOP_CLOSED:"os.os.closed",DESKTOP_SWITCHED:"os.os.switched",PRIMARY_DESKTOP_ID:"os.primary-desktop-id",WINDOWS_BEFORE_CLOSE_ALL:"os.windows.before-close-all",WINDOWS_CLOSE_ALL:"os.windows.close-all",WINDOWS_AFTER_CLOSE_ALL:"os.windows.after-close-all",COMMAND_BEFORE_RUN:"os.command.before-run",COMMAND_AFTER_RUN:"os.command.after-run",COMMAND_ERROR:"os.command.error",SHELL_RESIZED:"os.shell.resized",SHELL_VISIBILITY:"os.shell.visibility",CONNECTION_OPENED:"os.connection.opened",CONNECTION_CLOSED:"os.connection.closed",CONNECTION_MESSAGE:"os.connection.message",IFRAME_CONNECTION_REQUEST:"os.iframe.connection-request",WINDOW_CONTENT_CHANGED:"os.window-links.content-changed",WINDOW_LINK_GROUPS_CHANGED:"os.window-links.groups-changed",WINDOW_LINKS_CONTENT:"os.window-links.content",WINDOW_LINK_GROUPS:"os.window-links.groups",WINDOW_LINK_EDGES:"os.window-links.edges",RELATED_ENTITIES_ITEMS:"os.related-entities.items",WINDOW_LINK_RENDERERS:"os.window-links.renderers",WINDOW_LINK_RENDERER:"os.window-links.renderer",EDITOR_PREVIEW_WINDOW_CONFIG:"os.editor-preview.window-config",EDITOR_PREVIEW_LIVE:"os.editor-preview.live",EDITOR_PREVIEW_OPENED:"os.editor-preview.opened",EDITOR_PREVIEW_CLOSED:"os.editor-preview.closed",FILE_DROP_FILES_DETECTED:"os.drop.files-detected",FILE_DROP_FILES_REJECTED:"os.drop.files-rejected",FILE_DROP_DIALOG_FIELDS:"os.drop.dialog-fields",FILE_DROP_BEFORE_UPLOAD:"os.drop.before-upload",FILE_DROP_UPLOAD_STARTED:"os.drop.upload-started",FILE_DROP_UPLOAD_PROGRESS:"os.drop.upload-progress",FILE_DROP_AFTER_UPLOAD:"os.drop.after-upload",FILE_DROP_UPLOAD_FAILED:"os.drop.upload-failed",AUTH_LOST:"os.auth.lost",AUTH_RESTORED:"os.auth.restored"};let bb=0;function td(e){if(ed(b.INIT)>0){Promise.resolve().then(e);return}const t=`desktop-mode/when-ready-${++bb}`;K(b.INIT,t,e)}function vb(){return ed(b.INIT)>0}const _b=["post_type","page","taxonomy","path","post","c","tag_ID","item","p"];function nd(e){let t=e;try{t=decodeURIComponent(e)}catch{t=e}return t.replace(/\.php/g,"-php").replace(/[?&=/]/g,"-").replace(/[^a-zA-Z0-9_-]/g,"").replace(/-+/g,"-").replace(/^-|-$/g,"")||"index"}function ae(e,t){let n=null;try{n=new URL(e,t)}catch{n=null}if(n){const s=new URL(t).pathname,i=n.pathname.replace(s,"").replace(/^\/+/,""),r=new URLSearchParams;for(const l of _b){const c=n.searchParams.get(l);c&&r.set(l,c)}const a=r.toString();return nd(a?`${i}?${a}`:i)}let o=e.replace(t,"");return o.startsWith("/")&&(o=o.substring(1)),nd(o)}function od(e){return e.replace(/[^a-zA-Z0-9_-]/g,"")}function Eb(e){e.style.setProperty("--os-file-tile-enter-delay",`${(Math.random()*.25).toFixed(3)}s`),e.style.setProperty("--os-file-tile-enter-duration",`${(.3+Math.random()*.25).toFixed(3)}s`)}function sd(e){try{const t=new URL(e,window.location.origin);return t.searchParams.delete("openstation_chromeless"),t.searchParams.delete("desktop_mode_portal"),t.pathname.replace(/\/+$/,"")+"?"+t.searchParams.toString()}catch{return e}}function Ds(e){try{const t=new URL(e,window.location.origin);return t.searchParams.delete("openstation_chromeless"),t.searchParams.delete("desktop_mode_portal"),t.searchParams.delete("_wp_http_referer"),t.searchParams.sort(),t.pathname.replace(/\/+$/,"")+"?"+t.searchParams.toString()}catch{return e}}function id(e){if(typeof e!="string"||e===""||typeof DOMParser>"u")return"";let t;try{t=new DOMParser().parseFromString(e,"image/svg+xml")}catch{return""}const n=t.documentElement;if(!n||n.nodeName.toLowerCase()!=="svg"||t.getElementsByTagName("parsererror").length>0)return"";const o=new Set(["script","style","foreignobject","iframe","object","embed"]),s=i=>{const r=Array.from(i.children);for(const a of r){if(o.has(a.nodeName.toLowerCase())){a.remove();continue}for(const l of Array.from(a.attributes)){const c=l.name.toLowerCase(),d=l.value.trim().toLowerCase();if(c.startsWith("on")){a.removeAttribute(l.name);continue}d.startsWith("javascript:")&&a.removeAttribute(l.name)}s(a)}};s(n);for(const i of Array.from(n.attributes)){const r=i.name.toLowerCase(),a=i.value.trim().toLowerCase();(r.startsWith("on")||a.startsWith("javascript:"))&&n.removeAttribute(i.name)}return n.outerHTML}let en=null;function Rs(){return!!window.openStationWindowSystem}function rd(e){return new Promise((t,n)=>{const o=document.querySelector('script[data-os-window-system="1"]'),s=()=>{if(Rs()){t();return}n(new Error("[openstation] window-system bundle loaded but did not register `window.openStationWindowSystem`."))};if(o){Rs()?s():(o.addEventListener("load",s),o.addEventListener("error",()=>n(new Error("failed to load window-system bundle"))));return}const i=document.createElement("script");i.src=e,i.async=!0,i.dataset.osWindowSystem="1",i.addEventListener("load",s),i.addEventListener("error",()=>n(new Error("failed to load window-system bundle"))),document.head.appendChild(i)})}function kb(){return window.openStationConfig?.windowSystemBundleUrl??""}function Sb(e){!e||Rs()||en||(en=rd(e).catch(t=>{en=null,typeof console<"u"&&console.warn("[openstation] window-system preload failed; will retry on first open():",t)}))}async function Ab(e){if(Rs())return window.openStationWindowSystem;if(!e){const t=window.openStationWindowSystem;if(t)return t;throw new Error("[openstation] ensureWindowSystemLoaded(): no bundle URL configured and `window.openStationWindowSystem` is not pre-registered.")}return en||(en=rd(e)),await en,window.openStationWindowSystem}let tn=null;function qn(){return!!window.openStationShellOverlays}function ad(e){return new Promise((t,n)=>{const o=document.querySelector('script[data-os-shell-overlays="1"]'),s=()=>{if(qn()){t();return}n(new Error("[openstation] shell-overlays bundle loaded but did not set `window.openStationShellOverlays`."))};if(o){qn()?s():(o.addEventListener("load",s),o.addEventListener("error",()=>n(new Error("failed to load shell-overlays bundle"))));return}const i=document.createElement("script");i.src=e,i.async=!0,i.dataset.osShellOverlays="1",i.addEventListener("load",s),i.addEventListener("error",()=>n(new Error("failed to load shell-overlays bundle"))),document.head.appendChild(i)})}function Cb(e){!e||qn()||tn||(tn=ad(e).catch(t=>{tn=null,typeof console<"u"&&console.warn("[openstation] shell-overlays preload failed; will retry on first overlay use:",t)}))}function gr(e){return qn()||!e?Promise.resolve():(tn||(tn=ad(e)),tn)}function wr(){return window.openStationConfig?.shellOverlaysBundleUrl??""}function Os(e,t){const n=wr();if(qn()||!n){t();return}gr(n).then(()=>{e()&&t()}).catch(o=>{typeof console<"u"&&console.warn("[openstation] shell-overlays failed to load; menu/dialog suppressed:",o)})}const ld="desktop-mode";function yr(){return window.wp?.i18n}function S(e,t=ld){return yr()?.__(e,t)??e}function nn(e,t,n,o=ld){return yr()?._n(e,t,n,o)??(n===1?e:t)}function le(e,...t){const n=yr()?.sprintf;if(n)return n(e,...t);let o=0;return e.replace(/%(?:(\d+)\$)?[sd]/g,(s,i)=>{const r=i?Number.parseInt(i,10)-1:o++;return String(t[r]??"")})}function Ib(e,t){if(!e||typeof e!="object")return!1;const n=e.cols,o=e.rows;return typeof n!="number"||typeof o!="number"||!Number.isFinite(n)||!Number.isFinite(o)||n<1||o<1?!1:Math.floor(n)*Math.floor(o)>=t}function xb(e){if(!e||typeof e!="object")return!1;const t=e.cellWidth,n=e.cellHeight;return typeof t!="number"||typeof n!="number"||!Number.isFinite(t)||!Number.isFinite(n)?!1:t>0&&n>0}function Lb(e,t,n){if(e<=1)return{cols:1,rows:1};const o=t/Math.max(1,n),s=6;let i={cols:e,rows:1,score:1/0};for(let r=1;r<=Math.min(s,e);r++){const a=Math.min(s,Math.ceil(e/r));if(r*a<e)continue;const l=t/r/Math.max(1,n/a),c=Math.abs(l-o),d=r*a-e,u=c+d*.05;u<i.score&&(i={cols:r,rows:a,score:u})}return{cols:i.cols,rows:i.rows}}function br(e,t,n=0){const o=e.length;if(o===0)return[];const s=Math.ceil(Math.sqrt(o)),i=Math.ceil(o/s),r=40,a=24,l=34,c=(t.width-r*2-a*(s-1))/s,d=(t.height-r*2-n-a*(i-1))/i,u=Math.max(40,d-l);return e.map((f,p)=>{const g=p%s,m=Math.floor(p/s),h=t.left+r+g*(c+a),v=t.top+n+r+m*(d+a)+l,y=f.element.offsetWidth,x=f.element.offsetHeight,M=Math.min(c/y,u/x),I=y*M,W=x*M;return{win:f,x:h+(c-I)/2,y:v+(u-W)/2,scale:M}})}const cd=120,dd="__openStationSharedStores";function Tb(){const e=window;let t=e[dd];return t||(t=new Map,e[dd]=t),t}function ie(e,t){const n=Tb();let o=n.get(e);o||(o={state:t(),listeners:new Set,rebuild:t},n.set(e,o));const s={get state(){return o.state},set state(i){o.state=i},getState(){return o.state},notify(){for(const i of Array.from(o.listeners))try{i(o.state)}catch(r){console.error(`[desktop-mode/shared-store:${e}] subscriber threw:`,r)}},subscribe(i){return o.listeners.add(i),()=>{o.listeners.delete(i)}},setState(i){const r=o.state;if(typeof r!="object"||r===null){console.warn(`[desktop-mode/shared-store:${e}] setState called on a primitive store; use the state setter instead.`);return}Object.assign(r,i),s.notify()},reset(){const i=o.rebuild(),r=o.state;if(typeof r=="object"&&r!==null&&typeof i=="object"&&i!==null){const a=r;for(const l of Object.keys(a))delete a[l];Object.assign(a,i)}else o.state=i;o.listeners.clear()}};return s}const Kn=ie("desktop-mode/dock-rail-registry",()=>({registry:new Map,listeners:new Set,activeId:"default"})),at=Kn.state.registry,vr=Kn.state.listeners,Nb=/^[a-z0-9_-]+$/;function ud(e){if(!e||typeof e!="object")throw new TypeError("[openstation] registerDockRailRenderer: renderer must be an object.");if(typeof e.id!="string"||!Nb.test(e.id))throw new TypeError(`[openstation] registerDockRailRenderer: id must match /^[a-z0-9_-]+$/, got: ${String(e.id)}`);if(typeof e.label!="string"||e.label==="")throw new TypeError("[openstation] registerDockRailRenderer: label must be a non-empty string.");if(typeof e.mount!="function")throw new TypeError("[openstation] registerDockRailRenderer: mount must be a function.");if(e.apiVersion!==void 0&&e.apiVersion!==1)throw new TypeError(`[openstation] registerDockRailRenderer: unsupported apiVersion ${e.apiVersion} (this shell speaks v1).`);at.set(e.id,e),Ms()}function Db(e){at.delete(e)&&Ms()}function Rb(e){if(!e)return 0;let t=0;for(const[n,o]of Array.from(at.entries()))o.owner===e&&(at.delete(n),t++);return t>0&&Ms(),t}function Ob(e){return at.get(e)}function Mb(){return Array.from(at.values())}function Pb(e){return vr.add(e),()=>{vr.delete(e)}}function Wb(e){Kn.state.activeId!==e&&(Kn.state.activeId=e,Ms())}function _r(){return at.get(Kn.state.activeId)??at.get("default")??at.values().next().value}function Ms(){const e=Array.from(vr);for(const t of e)try{t()}catch(n){typeof console<"u"&&console.error("[openstation] dock-rail-renderer listener threw:",n)}}function Nt(e,t){if(!e||typeof e!="object")return["def (not an object)"];const n=e,o=[];for(const s of t)s.valid(n)||o.push(`${s.field} (${s.message})`);return o}class $b extends Error{constructor(t,n,o){super(`[openstation] ${t} registration rejected — fields: `+n.join(", ")+"."),this.name="RegistrationError",this.kind=t,this.errors=n,this.def=o}}function Ne(e,t,n){if(t.length!==0)throw new $b(e,t,n)}function fd(e,t,n){typeof console>"u"||console.warn(`[openstation] ${e} registration rejected — fields: `+t.join(", ")+".",n)}const yt=[[0,0],[100,0],[100,100],[0,100]],Ub=48,Fb=80,Er=6,kr=8,pd=4,hd=3,md=64,Sr=105,bt=2;function gd(e){return`${Math.round(e*1e3)/1e3}%`}function vt(e){return e.slice().reverse()}function Yn(e,t,n,o){return[[e,t],[n,t],[n,o],[e,o]]}function Bb(e,t,n,o){const s=[];for(let i=0;i<o;i++){const r=i/o*Math.PI*2;s.push([e+Math.cos(r)*n,t+Math.sin(r)*n])}return s}function et(e,t=[]){const n=[],o=s=>{n.push(`${gd(s[0])} ${gd(s[1])}`)};for(const s of e)o(s);if(t.length>0){o(e[0]);for(const s of t){for(const i of s)o(i);o(s[0]),o(e[0])}}return`polygon( ${n.join(", ")} )`}function wd(e){return et(yt,[vt(Bb(50,50,e,Ub))])}function yd(e){return et(yt,[vt(Yn(50-e,-bt,50+e,100+bt))])}function bd(e){const t=100/Er,n=[];for(let o=0;o<Er;o++){const s=o*t;n.push(vt(Yn(-bt,s,100+bt,s+e)))}return et(yt,n)}function vd(e){return et(yt,[vt(Yn(-bt,50-e,100+bt,50+e))])}function _d(e){const t=100/kr,n=[];for(let o=0;o<kr;o++){const s=o*t;n.push(vt(Yn(s,-bt,s+e,100+bt)))}return et(yt,n)}function Ed(e){return et(yt,[vt([[50,50-e],[50+e,50],[50,50+e],[50-e,50]])])}function kd(e){const t=100/pd,n=100/hd,o=[];for(let s=0;s<hd;s++)for(let i=0;i<pd;i++){const r=i*t+t/2,a=s*n+n/2,l=t/2*e,c=n/2*e;o.push(vt(Yn(r-l,a-c,r+l,a+c)))}return et(yt,o)}function Sd(e){const t=-Math.PI/2,n=e/180*Math.PI,o=[[50,50]];for(let s=0;s<md;s++){const i=t+s/(md-1)*n;o.push([50+Math.cos(i)*Sr,50+Math.sin(i)*Sr])}return et(yt,[vt(o)])}function Hb(){return{from:wd(0),to:wd(Fb)}}function zb(){return{from:yd(0),to:yd(52)}}function Gb(){return{from:bd(0),to:bd(100/Er+.5)}}function jb(){return{from:vd(0),to:vd(52)}}function Vb(){return{from:_d(0),to:_d(100/kr+.5)}}function qb(){return{from:Ed(0),to:Ed(Sr)}}function Kb(){return{from:kd(0),to:kd(1.04)}}function Yb(){return{from:Sd(0),to:Sd(360)}}function Xb(){return{from:"inset( 0% 0% 0% 0% )",to:"inset( 0% 0% 100% 0% )"}}function Zb(){return{from:"inset( 0% 0% 0% 0% )",to:"inset( 0% 0% 0% 100% )"}}function Jb(){return{from:et([[-60,0],[100,0],[100,100],[0,100]]),to:et([[100,0],[260,0],[260,100],[160,100]])}}const Ar=6,Cr=100,on=Cr/2,Ps=200,Ad=90,Cd=["#5c5c6d","#525261","#484855","#3e3e49","#34343d","#2a2a31"],Qb="#101014",ev=1.25,sn="http://www.w3.org/2000/svg";let tv=0;function Ws(e){return Math.round(e*1e3)/1e3}function Ir(e){return e/Ar*Math.PI*2-Math.PI/2}function nv(e){const n=Ir(e)+Math.PI/Ar+Math.PI/2;return{x:Math.cos(n),y:Math.sin(n)}}function ov(e){const t=Ir(e),n=Ir(e+1);return[[on,on],[on+Math.cos(t)*Ps,on+Math.sin(t)*Ps],[on+Math.cos(n)*Ps,on+Math.sin(n)*Ps]]}function Id(e,t){const n=ov(e),o=document.createElementNS(sn,"path");return o.setAttribute("d",`M ${n.map(([s,i])=>`${Ws(s)} ${Ws(i)}`).join(" L ")} Z`),t?o.setAttribute("fill","#fff"):(o.setAttribute("fill",Cd[e%Cd.length]),o.setAttribute("stroke",Qb),o.setAttribute("stroke-width",String(ev)),o.setAttribute("vector-effect","non-scaling-stroke"),o.setAttribute("stroke-linejoin","round")),o}function sv(){const e=`os-iris-${++tv}`,t=document.createElementNS(sn,"svg");t.setAttribute("viewBox",`0 0 ${Cr} ${Cr}`),t.setAttribute("preserveAspectRatio","none"),t.setAttribute("aria-hidden","true"),t.style.width="100%",t.style.height="100%",t.style.display="block";const n=document.createElementNS(sn,"defs"),o=document.createElementNS(sn,"mask");o.setAttribute("id",e);const s=document.createElementNS(sn,"g"),i=document.createElementNS(sn,"g");i.setAttribute("mask",`url(#${e})`);const r=[];for(let l=0;l<Ar;l++){const c=Id(l,!0),d=Id(l,!1);s.appendChild(c),i.appendChild(d),r.push({el:c,index:l},{el:d,index:l})}o.appendChild(s),n.appendChild(o),t.appendChild(n),t.appendChild(i);const a=document.createElement("div");return a.appendChild(t),{element:a,play:l=>r.map(({el:c,index:d})=>{const u=nv(d),f=Ws(u.x*Ad),p=Ws(u.y*Ad);return c.animate([{transform:"translate( 0px, 0px )"},{transform:`translate( ${f}px, ${p}px )`}],{duration:l.duration,easing:l.easing,delay:l.delay,fill:"both"})})}}const Xn="none",iv=460,rv="cubic-bezier( 0.33, 0, 0.2, 1 )",xd=80,Ld=4e3,av=70,lv=600,Td=ie("desktop-mode/window-reveal-registry",()=>({registry:new Map,listeners:new Set})),$s=Td.state.registry,cv=Td.state.listeners,Nd=/^[a-z0-9_/-]+$/;function Dd(e){const t=/^\s*([a-zA-Z-]+)\s*\(/.exec(e);return t?t[1].toLowerCase():""}function dv(e){return typeof e!="number"||!Number.isFinite(e)?iv:Math.min(Ld,Math.max(xd,e))}const xr=0;function Rd(e){return typeof e!="number"||!Number.isFinite(e)||e<=0?xr:Math.min(Ld,Math.max(xd,e))}function rn(e){return typeof e!="number"||!Number.isFinite(e)?av:Math.min(lv,Math.max(0,e))}function Od(e){return typeof e.render=="function"?[]:Array.isArray(e.layers)&&e.layers.length>0?e.layers:typeof e.from=="string"&&typeof e.to=="string"?[{from:e.from,to:e.to}]:[]}function Md(e,t){const n=[],o=typeof e.from=="string"&&e.from.trim()!=="",s=typeof e.to=="string"&&e.to.trim()!=="";if(o||n.push(`${t}.from (missing — the clip-path covering the window)`),s||n.push(`${t}.to (missing — the clip-path uncovering the window)`),o&&s){const i=Dd(e.from),r=Dd(e.to);i===""||r===""?n.push(`${t}.from|to (must be shape functions, e.g. \`inset( … )\` or \`polygon( … )\` — bare keywords like \`none\` cannot be animated)`):i!==r&&n.push(`${t}.from|to (must use the same shape function to interpolate — got \`${i}()\` and \`${r}()\`)`)}return n}function uv(e){if(typeof KeyframeEffect!="function")return!0;try{return new KeyframeEffect(null,null,{easing:e}),!0}catch{return!1}}function Fe(e){const t=[];if(!e||typeof e!="object")t.push("def (not an object)");else{typeof e.id!="string"||e.id.trim()===""?t.push("id (missing)"):Nd.test(e.id.trim().toLowerCase())?e.id.trim().toLowerCase()===Xn&&t.push('id ("none" is reserved)'):t.push(`id (must match ${Nd} — lowercase alphanum, hyphens, underscores, slashes for vendor/sub-id)`),(typeof e.label!="string"||e.label.trim()==="")&&t.push("label (missing)");const o=e.render!==void 0,s=Array.isArray(e.layers),i=e.from!==void 0||e.to!==void 0;o&&typeof e.render!="function"?t.push("render (not a function)"):o&&(s||i)?t.push("render|layers|from|to (supply exactly one of: a from/to pair, a layers array, or a render function)"):o||(s&&i?t.push("layers|from|to (supply EITHER a single from/to pair OR a layers array, not both)"):s?(e.layers.length===0&&t.push("layers (empty — supply at least one matched pair)"),e.layers.forEach((r,a)=>{if(!r||typeof r!="object"){t.push(`layers[ ${a} ] (not an object)`);return}t.push(...Md(r,`layers[ ${a} ]`))})):t.push(...Md(e,"").map(r=>r.replace(/^\./,"")))),e.easing!==void 0&&(typeof e.easing!="string"||e.easing.trim()===""?t.push("easing (not a non-empty string)"):uv(e.easing)||t.push("easing (not an easing the browser can parse — `Element.animate()` would throw at play time, with the covering surface already over the window)"))}Ne("WindowReveal",t,e);const n=e.id.trim().toLowerCase();$s.set(n,{...e,id:n}),$d()}function fv(e){$s.delete(e.toLowerCase())&&$d()}function Pd(){const e=Array.from($s.values()),t=V(b.WINDOW_REVEALS,e);return Array.isArray(t)?t:(typeof console<"u"&&console.warn("[openstation] `os.window-reveals` filter returned a non-array; falling back to registry list."),e)}function Wd(e){return Pd().find(t=>t.id===e)}function pv(e){return $s.has(e)}function $d(){const e=Array.from(cv);for(const t of e)try{t()}catch(n){typeof console<"u"&&console.error("[openstation] window-reveal registry listener threw:",n)}}Fe({id:"sweep",label:S("Sweep"),description:S("A straight edge travels across the window, uncovering the page behind it."),...Zb(),duration:420}),Fe({id:"iris",label:S("Iris"),description:S("The page opens out from the centre of the window, like a camera shutter."),...Hb(),duration:520}),Fe({id:"curtain",label:S("Curtain"),description:S("Two panels part from the middle of the window and slide off the sides."),...zb(),duration:480}),Fe({id:"blinds",label:S("Blinds"),description:S("Six horizontal slats retract at once, letting the page through between them."),...Gb(),duration:560}),Fe({id:"diagonal",label:S("Diagonal"),description:S("A slanted edge sweeps off the trailing corner of the window."),...Jb(),duration:460}),Fe({id:"rise",label:S("Rise"),description:S("The page rises into the window from the bottom edge upward."),...Xb(),duration:440}),Fe({id:"shutter",label:S("Shutter"),description:S("Two panels part from the middle of the window and slide off the top and bottom."),...jb(),duration:480}),Fe({id:"slats",label:S("Slats"),description:S("Eight vertical slats retract at once, letting the page through between them."),...Vb(),duration:560}),Fe({id:"diamond",label:S("Diamond"),description:S("The page opens out from the centre of the window through a growing rhombus."),...qb(),duration:520}),Fe({id:"mosaic",label:S("Mosaic"),description:S("The page arrives as a grid of tiles, each opening out from its own centre."),...Kb(),duration:600}),Fe({id:"obturator",label:S("Camera shutter"),description:S("Six wedges slide aside in unison, opening a hexagonal aperture from the centre like the iris of a camera lens."),render:sv,duration:720,edgeLag:0}),Fe({id:"radar",label:S("Radar"),description:S("A spoke sweeps a full turn around the centre of the window, uncovering the page behind it."),...Yb(),duration:760});const Ud="desktop-mode-os-settings",hv="custom-gradient",Fd="custom-image",Lr="galaxy",Bd="custom",Hd=[{id:"pulse",label:"Pulse",value:"#f252fc"},{id:"nebula",label:"Nebula",value:"#ec9bff"},{id:"sirius",label:"Sirius",value:"#9af2ff"},{id:"lagoon",label:"Lagoon",value:"#9f98ff"},{id:"wp-blue",label:"WordPress Blue",value:"#2271b1"},{id:"indigo",label:"Indigo",value:"#3858e9"},{id:"teal",label:"Teal",value:"#04a4cc"},{id:"emerald",label:"Emerald",value:"#059669"},{id:"amber",label:"Amber",value:"#d97706"},{id:"rose",label:"Rose",value:"#e11d48"}];function Tr(){const t=window.wp?.os?.config?.accentColors;if(!Array.isArray(t)||t.length===0)return Hd;const n=[];for(const o of t)o&&typeof o=="object"&&typeof o.id=="string"&&typeof o.label=="string"&&typeof o.value=="string"&&o.id!==""&&o.label!==""&&/^#[0-9a-f]{3,8}$/i.test(o.value)&&n.push({id:o.id,label:o.label,value:o.value});return n.length>0?n:Hd}function zd(){const t=window.wp?.os?.config?.defaultWallpaper;return typeof t=="string"&&t!==""?t:Lr}const Nr=[{id:"compact",label:"Compact",width:48,icon:18},{id:"default",label:"Default",width:56,icon:20},{id:"large",label:"Large",width:72,icon:26}],Dr=[{id:"sharp",label:"Sharp",value:0},{id:"default",label:"Default",value:8},{id:"round",label:"Round",value:16}],Us=[{id:"static",label:"Static"},{id:"dynamic",label:"Dynamic"},{id:"hidden",label:"Hidden"}],mv=[{id:"bottom",label:"Bottom"},{id:"left",label:"Left"},{id:"right",label:"Right"}],gv=[{id:"unified",label:"Unified"},{id:"classic",label:"Split"}],J={wallpaper:Lr,accent:"pulse",customAccent:"#f252fc",dockSize:"default",windowRadius:"round",adminBarMode:"hidden",desktopLayout:"unified",dockPlacement:"bottom",dockRailRenderer:"default",desktopTheme:"",appliedThemeRecommendations:[],unfocusEffect:"darken",windowReveal:"none",windowRevealDuration:0,windowLinkRenderer:"svg-splines",windowLinkVisibility:"always",windowLinksEnabled:!0,windowLinkRaiseOnFocus:!0,windowLinkHighlight:!0,customGradient:{from:"#2271b1",to:"#7c3aed",angle:135},customImage:null,wallpaperSettings:{},libraryHdOnly:!0,ai:{enabled:!1},heartbeatRate:60,nativePostsEnabled:!1,nativePostsHiddenColumns:[],nativePagesEnabled:!1,nativeUsersEnabled:!1,nativePluginsEnabled:!1,nativeCommentsEnabled:!1,showDesktopOnWallpaperClick:!1,mioEnabled:!1,mioStyle:{appearance:{},physics:{}},showPostStatusRibbons:!0,developerModeEnabled:!1,foldersSharingEnabled:!0,itemVisibility:{},dockOrder:[],dockPromotedPositions:{}},Gd={dockSize:["compact","default","large"],desktopLayout:["classic","unified"],dockPlacement:["bottom","left","right"],windowRadius:["sharp","default","round"],adminBarMode:["static","dynamic","hidden"]},jd=["dockRailRenderer","windowReveal","accent"],Vd={windowRevealDuration:{min:80,max:4e3}},wv=/^[a-z0-9_-]+$/;[...Object.keys(Gd),...jd,...Object.keys(Vd)];function qd(e){if(!e||typeof e!="object"||Array.isArray(e))return{};const t=e,n={},o={};for(const[s,i]of Object.entries(Gd)){const r=t[s];typeof r=="string"&&i.includes(r)&&(n[s]=r)}for(const s of jd){const i=t[s];typeof i=="string"&&wv.test(i)&&(n[s]=i)}for(const[s,i]of Object.entries(Vd)){const r=t[s];typeof r=="number"&&Number.isFinite(r)&&(o[s]=Math.min(i.max,Math.max(i.min,Math.round(r))))}return{...n,...o}}function yv(e){const t=qd(e);return typeof t.dockRailRenderer=="string"&&Ob(t.dockRailRenderer)===void 0&&delete t.dockRailRenderer,typeof t.windowReveal=="string"&&t.windowReveal!==Xn&&!pv(t.windowReveal)&&delete t.windowReveal,typeof t.accent=="string"&&!Tr().some(n=>n.id===t.accent)&&delete t.accent,t}const bv=/^[a-z0-9_-]+$/,Kd=128;function vv(e){return typeof e!="string"||e===""||e.length>2048?!1:e.startsWith("dashicons-")||e.startsWith("https://")||e.startsWith("http://")||e.startsWith("data:image/")}function Yd(e){if(!e||typeof e!="object")return null;const t=e,n=typeof t.slug=="string"?t.slug:"";if(!bv.test(n))return null;const o={};if(t.icons&&typeof t.icons=="object"){let l=0;for(const[c,d]of Object.entries(t.icons)){if(l>=Kd)break;c===""||!vv(d)||(o[c]=d,l+=1)}}const s={};if(t.tokens&&typeof t.tokens=="object")for(const[l,c]of Object.entries(t.tokens))typeof c=="string"&&(s[l]=c);const i=[];if(Array.isArray(t.fonts))for(const l of t.fonts)typeof l=="string"&&l!==""&&i.push(l);const r={};if(t.iconColors&&typeof t.iconColors=="object"){let l=0;for(const[c,d]of Object.entries(t.iconColors)){if(l>=Kd)break;c===""||typeof d!="string"||d===""||(r[c]=d,l+=1)}}const a=l=>typeof t[l]=="string"?t[l]:"";return{id:a("id")||n,slug:n,name:a("name")||n,version:a("version"),author:a("author"),description:a("description"),previewUrl:a("previewUrl"),cssUrl:a("cssUrl"),cssText:a("cssText"),tokens:s,fonts:i,icons:o,iconColors:r,recommendedOsSettings:qd(t.recommendedOsSettings),installedAt:typeof t.installedAt=="number"?t.installedAt:0,source:t.source==="code"?"code":"upload"}}function _v(){const t=window.openStationConfig?.serverDesktopThemes,n=[];if(Array.isArray(t))for(const o of t){const s=Yd(o);s&&n.push(s)}return{themes:n,activeId:null,activeIcons:null,activeIconColors:null}}const an=ie("desktop-mode/desktop-themes",_v);function Fs(){return an}function Ev(){return an.getState().themes.slice()}function Xd(e){if(typeof e!="string"||e==="")return null;const t=e.replace(/\//g,"-");return an.getState().themes.find(n=>n.slug===t||n.id===e)??null}function Rr(){return an.getState().activeId}function kv(e){const t=[];for(const n of e){const o=Yd(n);o&&t.push(o)}an.setState({themes:t})}function Sv(e){return an.subscribe(e)}function Bs(e){const t=Fs().state;if(t.activeIcons===null||!e)return null;const n=t.activeIcons[e];if(typeof n!="string"||n==="")return null;const o=V(b.DESKTOP_THEME_ICON,n,{slot:e,themeId:t.activeId??""});return typeof o=="string"&&o!==""?o:null}function Or(e){const t=Fs().state;if(t.activeIconColors===null||!e)return null;const n=t.activeIconColors[e];if(typeof n!="string"||n==="")return null;const o=V(b.DESKTOP_THEME_ICON_COLOR,n,{slot:e,themeId:t.activeId??""});return typeof o=="string"&&o!==""?Av(o):null}function Av(e){const t=e.trim();if(t===""||t.length>64||/[;{}<>"'\\]/.test(t))return null;let n=0;for(const o of t)if(o==="(")n+=1;else if(o===")"&&(n-=1,n<0))return null;return n===0?t:null}const Dt={WINDOW_CONTROL_MINIMIZE:"WINDOW_CONTROL_MINIMIZE",WINDOW_CONTROL_MAXIMIZE:"WINDOW_CONTROL_MAXIMIZE",WINDOW_CONTROL_FULLSCREEN:"WINDOW_CONTROL_FULLSCREEN",WINDOW_CONTROL_FULLSCREEN_EXIT:"WINDOW_CONTROL_FULLSCREEN_EXIT",WINDOW_CONTROL_CLOSE:"WINDOW_CONTROL_CLOSE",WINDOW_CONTROL_MENU:"WINDOW_CONTROL_MENU",WINDOW_CONTROL_RELOAD:"WINDOW_CONTROL_RELOAD",WINDOW_CONTROL_DETACH:"WINDOW_CONTROL_DETACH",OS_SETTINGS:"OS_SETTINGS",RECYCLE_BIN:"RECYCLE_BIN",BUG_REPORT:"BUG_REPORT",EXIT_OPENSTATION:"EXIT_OPENSTATION",PWA_INSTALL:"PWA_INSTALL",DEFAULT_APP_ICON:"DEFAULT_APP_ICON",FOLDER:"FOLDER",FILE_SHORTCUT:"FILE_SHORTCUT",FILE_POST:"FILE_POST",FILE_ATTACHMENT:"FILE_ATTACHMENT",FILE_UPLOAD:"FILE_UPLOAD",FILE_USER:"FILE_USER",FILE_TERM:"FILE_TERM",FILE_COMMENT:"FILE_COMMENT",FILE_BOOKMARK:"FILE_BOOKMARK",FILE_LINK:"FILE_LINK",FILE_EMBED:"FILE_EMBED",RECYCLE_RESTORE:"RECYCLE_RESTORE",RECYCLE_DELETE:"RECYCLE_DELETE"},Cv={"desktop-mode-os-settings":Dt.OS_SETTINGS,"desktop-mode-recycle-bin":Dt.RECYCLE_BIN,"desktop-mode-bug-report":Dt.BUG_REPORT,"os-exit":Dt.EXIT_OPENSTATION,"os-pwa-install":Dt.PWA_INSTALL};function Hs(e){if(typeof e!="string"||e==="")return"";const t=Cv[e];if(t)return t;const n=e.toLowerCase().replace(/[^a-z0-9_-]/g,"");return n===""?"":`APP:${n}`}function Iv(e){if(typeof e!="string"||e==="")return"";if(e==="folder")return Dt.FOLDER;const n=`FILE_${e.toUpperCase().replace(/[^A-Z0-9]+/g,"_")}`;return n in Dt?n:""}const Zd=new Map,xv=new Map;function Mr(e,t,n,o){let s=e.get(t);if(!s){if(!o)return;s=new Map,e.set(t,s)}let i=s.get(n);if(!i){if(!o)return;i=new Set,s.set(n,i)}return i}function Jd(e,t,n,o){const s={channel:n,windowId:t},i=Mr(e,t,n,!1);if(i)for(const a of Array.from(i))try{a(o,s)}catch(l){typeof console<"u"&&console.error(`[openstation] window-channel subscriber for "${n}" threw:`,l)}const r=Mr(e,t,"*",!1);if(r)for(const a of Array.from(r))try{a(o,s)}catch(l){typeof console<"u"&&console.error(`[openstation] window-channel wildcard subscriber for "${t}" threw:`,l)}}function Lv(e,t,n){const o=Mr(Zd,e,t,!0);o.add(n);let s=!1;return()=>{s||(s=!0,o.delete(n))}}function Tv(e,t,n){Jd(Zd,e,t,n)}function Nv(e,t,n){Jd(xv,e,t,n)}const Qd=new Set,Dv=new Set,eu=new Map;function Rv(e){if(!Qd.has(e)){Qd.add(e);const t=eu.get(e);if(t){eu.delete(e);for(const n of t)try{n.flush()}catch(o){typeof console<"u"&&console.error(`[openstation] flushing queued window-send for "${n.channel}" threw:`,o)}}}Dv.delete(e)&&(T(b.WINDOW_CONTENT_LOADED,{windowId:e}),typeof document<"u"&&document.dispatchEvent(new CustomEvent("os-window-content-loaded",{detail:{windowId:e}})))}const Ov="os.activity.";function Pr(e){return Ov+String(e).replace(/[^a-zA-Z0-9_.-]/g,".")}let Mv=0;const Ee={publish(e,t){T(Pr(e),t)},subscribe(e,t){const n=`os/activity-sub/${++Mv}`,o=Pr(e);K(o,n,i=>t(i));let s=!1;return()=>{s||(s=!0,mr(o,n))}},filter(e,t,...n){return V(Pr(e),t,...n)}},Pv=4e3,Wv=200,$v=1200;function X(e){const t=Ee.filter("os/toast-requested",{...e});if(!t||t.cancel===!0)return()=>{};let n=!1,o=null;return Os(()=>!n,()=>{o=Uv(t)}),()=>{n=!0,o&&o()}}function Uv(e){const t=zv(),n=document.createElement("os-toast");n.textContent=e.message,e.action&&(n.setAttribute("action",e.action.label),n.addEventListener("os-toast-action",()=>{e.action?.onClick(),l()})),e.dismissible&&(n.setAttribute("dismissible",""),n.addEventListener("os-toast-dismiss",()=>{e.onDismiss?.(),l()})),t.appendChild(n);let o=!1,s=null,i=e.duration??Pv,r=0;const a=()=>{s!==null&&(window.clearTimeout(s),s=null)},l=()=>{o||(o=!0,a(),Hv(n),n.setAttribute("state","out"),window.setTimeout(()=>{n.remove(),Bv()},Wv))},c=()=>{o||e.persistent||s!==null||(r=Date.now(),s=window.setTimeout(l,i))},d=()=>{s!==null&&(i=Math.max(0,i-(Date.now()-r)),a())};return requestAnimationFrame(()=>{n.setAttribute("state","in")}),n.addEventListener("os-toast-hold",u=>{if(u.detail?.held){d();return}i=Math.max(i,$v),c()}),Fv(n),c(),Ee.publish("os/toast-shown",{...e}),l}let zs=null,Zn=0;function tu(e){const t=e.target;t instanceof HTMLElement&&(t.closest("os-toast-container")||(zs=t))}function Fv(e){Zn===0&&document.addEventListener("focusin",tu,!0),Zn+=1;const t=e.ownerDocument,n=t.activeElement;n instanceof HTMLElement&&n!==t.body&&!n.closest("os-toast-container")&&(zs=n)}function Bv(){Zn=Math.max(0,Zn-1),Zn===0&&document.removeEventListener("focusin",tu,!0)}function Hv(e){const t=e.ownerDocument.activeElement;t!==e&&!e.contains(t)||zs?.isConnected===!0&&zs.focus()}function zv(){const e=document.querySelector("os-toast-container");if(e)return e;const t=document.createElement("os-toast-container");return document.body.appendChild(t),t}const nu="X-WP-Nonce";function ou(e,t){const n=Gv();if(!n)return t;const o=jv(e);if(!o||!Vv(o))return t;const s=t?.headers??(typeof Request<"u"&&e instanceof Request?e.headers:void 0),i=new Headers(s??{});return i.has(nu)?t:(i.set(nu,n),{...t??{},headers:i})}function Gv(){if(typeof window>"u")return;const t=window.openStationConfig?.restNonce;return typeof t=="string"&&t.length>0?t:void 0}function jv(e){try{const t=typeof window<"u"&&window.location?window.location.href:void 0;return typeof e=="string"?new URL(e,t):e instanceof URL?e:typeof Request<"u"&&e instanceof Request?new URL(e.url,t):null}catch{return null}}function Vv(e){return typeof window>"u"||!window.location||e.origin!==window.location.origin?!1:!!(e.pathname.includes("/wp-json/")||e.searchParams.has("rest_route"))}function Be(e,t,n={}){const o=window.wp?.os?.fetch;if(typeof o=="function")return o(e,t,n);const s=ou(e,t);return fetch(e,s)}const qv="http://localhost/";function tt(e,t){const n=typeof window<"u"&&window.location?window.location.href:qv,o=new URL(e,n),s=t.replace(/^\/+/,""),i=s.indexOf("?"),r=i===-1?s:s.slice(0,i),a=i===-1?"":s.slice(i+1);if(o.searchParams.has("rest_route")){const l=o.searchParams.get("rest_route")??"/",c=l.endsWith("/")?l:l+"/";o.searchParams.set("rest_route",c+r)}else{const l=o.pathname.endsWith("/")?o.pathname:o.pathname+"/";o.pathname=l+r}return a&&new URLSearchParams(a).forEach((c,d)=>{o.searchParams.append(d,c)}),o.toString()}const Kv="os-overview",Yv="os-system",Gs={mio:10,overview:20,system:30,exit:35},Xv=`data:image/svg+xml;base64,${btoa('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" fill="currentColor"><rect x="6" y="6" width="23" height="23" rx="4"/><rect x="35" y="6" width="23" height="23" rx="4"/><rect x="6" y="35" width="23" height="23" rx="4"/><rect x="35" y="35" width="23" height="23" rx="4"/></svg>')}`,Zv=`data:image/svg+xml;base64,${btoa('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" fill="none" stroke="currentColor" stroke-width="6" stroke-linecap="round"><path d="M10 22h44M10 42h44"/><circle cx="24" cy="22" r="7" fill="currentColor" stroke="none"/><circle cx="42" cy="42" r="7" fill="currentColor" stroke="none"/></svg>')}`,Jv="os-exit";function Qv(){return{id:Jv,title:S("Exit OpenStation"),order:Gs.exit,icon:"dashicons-exit",onOpen:()=>{e_()}}}async function e_(){const e=window.openStationAdminBar,t=e?.classicUrl||"/wp-admin/";if(!e?.ajaxUrl||!e?.nonce){Wr(t);return}const n=new URLSearchParams;n.set("action","save-openstation"),n.set("nonce",e.nonce),n.set("enabled","");let o=t;try{const s=await fetch(e.ajaxUrl,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:n.toString(),credentials:"same-origin"});if(s.ok){const i=await s.json();i?.success&&i.data?.redirect&&(o=i.data.redirect)}}catch{}Wr(o)}function Wr(e){try{(window.top??window).location.assign(e)}catch{window.location.assign(e)}}const su=800;function t_(e,t=su){window.setTimeout(()=>{if(e){Wr(e);return}try{(window.top??window).location.reload()}catch{window.location.reload()}},t)}const n_="desktop_mode_nonces",o_="desktop-mode/v1",s_=3e4,i_=3,ln=ie("desktop-mode/plugin-presence",()=>({confirmInFlight:!1,lastConfirmAt:null,exiting:!1,booted:!1,negativeConfirms:0}));function iu(){return window.wp?.os?.config??{}}function r_(){const e=iu().restUrl;return e?tt(e,o_):null}function a_(){ln.state.negativeConfirms=0}async function l_(){const e=ln.state;if(e.exiting||e.confirmInFlight||e.negativeConfirms>=i_)return;const t=r_();if(!t)return;const n=Date.now();if(!(e.lastConfirmAt!==null&&n-e.lastConfirmAt<s_)){e.lastConfirmAt=n,e.confirmInFlight=!0;try{const o=await Be(t,{credentials:"same-origin"},{silent:!0,source:"desktop-mode/plugin-presence"});if(o.status!==404){e.negativeConfirms+=1;return}if((await o.json())?.code!=="rest_no_route"){e.negativeConfirms+=1;return}c_()}catch{}finally{e.confirmInFlight=!1}}}function c_(){if(!ln.state.exiting){ln.state.exiting=!0,t_(iu().adminUrl||"");try{X({message:S("OpenStation is no longer active. Returning to the WordPress dashboard…"),duration:su})}catch{}}}function d_(){if(ln.state.booted)return;ln.state.booted=!0;const e=window.jQuery;e&&e(document).on("heartbeat-tick",(...t)=>{const n=t[1];if(n){if(n[n_]!==void 0){a_();return}l_()}})}const u_=0,$r=40,ru=250,f_=120,p_=250,Jn="os-window__loading",js="os-window__loading--visible",Vs=ie("desktop-mode/window-reveal-active",()=>({id:Xn,duration:xr}));function au(e){Vs.state.id=typeof e=="string"&&e!==""?e:Xn}function h_(){const e=Vs.state.id;return!e||e===Xn?null:Wd(e)??null}function lu(e){Vs.state.duration=Rd(e)}function m_(){return Vs.state.duration}function g_({osSettings:e}){const t=e.getOsSettingsSnapshot();au(t.windowReveal),lu(t.windowRevealDuration),e.subscribeOsSettings(n=>{au(n.windowReveal),lu(n.windowRevealDuration)})}const cn="os-window__reveal",Qn="os-window__reveal--edge",w_="os-window__reveal--custom",Rt="os-window__body--revealing",Ur="data-os-reveal",Fr="data-os-reveal-layer",_t=new WeakMap,cu=ie("desktop-mode/window-reveal-rendered",()=>({plays:new WeakMap})).state.plays;function du(){if(typeof window>"u"||typeof window.matchMedia!="function")return!1;try{return window.matchMedia("( prefers-reduced-motion: reduce )").matches}catch{return!1}}const y_="--os-window-reveal-duration",b_="--os-window-reveal-edge-thickness";function uu(e){const t=e.trim();if(t==="")return 0;const n=/^(-?\d*\.?\d+)\s*(ms|s)?$/i.exec(t);if(!n)return 0;const o=Number(n[1]);return Number.isFinite(o)?n[2]?.toLowerCase()==="s"?o*1e3:o:0}function v_(e){if(typeof window>"u"||typeof window.getComputedStyle!="function")return 0;try{return Rd(uu(window.getComputedStyle(e).getPropertyValue(y_)))}catch{return 0}}function __(e,t){if(typeof window>"u"||typeof window.getComputedStyle!="function")return"";try{return window.getComputedStyle(e).getPropertyValue(t).trim()}catch{return""}}function E_(e,t){const n=__(e,b_);if(n==="")return null;const o=/^(-?\d*\.?\d+)%$/.exec(n);if(o)return rn(t*Number(o[1])/100);const s=/^(-?\d*\.?\d+)$/.exec(n);if(s)return rn(t*Number(s[1]));const i=uu(n);return/^-?\d*\.?\d+\s*(ms|s)$/i.test(n)?rn(i):null}function fu(e){if(typeof window>"u"||typeof window.getComputedStyle!="function")return!1;try{const t=window.getComputedStyle(e),n=t.backgroundImage;if(n&&n!=="none")return!1;const o=/^rgba?\(([^)]+)\)$/.exec(t.backgroundColor.trim());if(!o)return!1;const s=o[1].split(/[,\s/]+/).filter(Boolean);return s.length>=4&&Number(s[3])===0}catch{return!1}}function k_(e,t){const n=dv(t.duration),o=m_(),s=o!==xr?o:v_(e)||n,i=E_(e,s);if(i!==null)return{duration:s,edgeLag:i};const r=rn(t.edgeLag);return s===n?{duration:n,edgeLag:r}:{duration:s,edgeLag:rn(r*s/n)}}function pu(e){return e.querySelector(":scope .os-window__body")}function S_(e){return e.querySelector(`:scope .${cn}:not( .${Qn} )`)}function A_(e){return e.querySelector(`:scope .${Qn}`)}function hu(e){return Array.from(e.querySelectorAll(`:scope .${cn}:not( .${Qn} )`))}function mu(e){return Array.from(e.querySelectorAll(`:scope .${Qn}`))}function Br(e){return Array.from(e.querySelectorAll(`:scope .${cn}`))}function gu(e,t,n,o){const s=document.createElement("div");s.className=o?`${cn} ${Qn}`:cn;const i=o?e.edgeColor:t.color??e.surfaceColor;return typeof i=="string"&&i!==""&&(s.style.background=i),s.setAttribute("aria-hidden","true"),s.setAttribute(Ur,e.id),s.setAttribute(Fr,String(n)),s.style.clipPath=t.from,s}function C_(){const e=h_();if(!e)return[];if(typeof e.render=="function"){let o;try{o=e.render()}catch(i){return typeof console<"u"&&console.error(`[openstation] window reveal "${e.id}" render threw:`,i),[]}if(!o?.element||typeof o.play!="function")return[];const s=o.element;return s.classList.add(cn),s.classList.add(w_),s.setAttribute("aria-hidden","true"),s.setAttribute(Ur,e.id),s.setAttribute(Fr,"0"),cu.set(s,o.play),[s]}const t=Od(e);if(t.length===0)return[];const n=[];return rn(e.edgeLag)>0&&t.forEach((o,s)=>n.push(gu(e,o,s,!0))),t.forEach((o,s)=>n.push(gu(e,o,s,!1))),n}function I_(e){const t=pu(e);if(t){t.classList.remove(Rt);for(const n of Br(t))_t.get(n)?.cancel(),_t.delete(n),n.remove();for(const n of C_())t.appendChild(n)}}function wu(e){const t=pu(e);if(!t)return;const n=S_(t);if(!n)return;let o;try{o=Wd(n.getAttribute(Ur)??"")}catch(I){typeof console<"u"&&console.error("[openstation] window-reveal lookup threw; uncovering without a reveal:",I)}if(!o){Br(t).forEach(I=>I.remove());return}const i=!!t.querySelector(`:scope .${Jn}`)?.classList.contains(js)?ru:0,{duration:r,edgeLag:a}=k_(t,o),l=o.easing??rv,c=cu.get(n);if(c){t.classList.add(Rt);const I=()=>{_t.delete(n),n.remove(),t.classList.remove(Rt)};if(du()||typeof n.animate!="function"){window.setTimeout(I,i);return}let W=[];try{W=c({duration:r,easing:l,delay:i})}catch(P){typeof console<"u"&&console.error(`[openstation] window reveal "${o.id}" play threw:`,P)}if(W.length===0){I();return}W[0].addEventListener("finish",I),W[0].addEventListener("cancel",()=>{_t.delete(n),t.classList.remove(Rt)}),_t.set(n,W[0]);return}const d=A_(t);d&&(a<=0||fu(d))&&mu(t).forEach(I=>I.remove()),fu(n)&&hu(t).forEach(I=>I.remove());const u=Br(t);if(u.length===0)return;t.classList.add(Rt);const f=()=>{for(const I of u)_t.delete(I),I.remove();t.classList.remove(Rt)};if(du()||typeof n.animate!="function"){window.setTimeout(f,i);return}const p=l,g=Od(o),m=(I,W)=>{const P=g[Number(I.getAttribute(Fr))];if(!P)return I.remove(),null;I.style.willChange="clip-path";let $;try{$=I.animate([{clipPath:P.from},{clipPath:P.to}],{duration:W,easing:p,delay:i,fill:"both"})}catch(k){return typeof console<"u"&&console.error(`[openstation] window reveal "${o.id}" failed to animate; uncovering:`,k),I.remove(),null}return _t.set(I,$),$},h=hu(t).map(I=>m(I,r)).filter(I=>I!==null),v=mu(t).map(I=>m(I,r+a)).filter(I=>I!==null),y=h[0]??null,x=v[0]??null;if(!y&&!x){f();return}(x??y)?.addEventListener("finish",f);const M=()=>{for(const I of u)_t.delete(I);t.classList.remove(Rt)};y?.addEventListener("cancel",M),x?.addEventListener("cancel",M)}const x_="os-window-tab-change";function yu(e){return Array.from(e.querySelectorAll(".os-window__tab"))}function bu(e){return e.replace(/[^a-zA-Z0-9_-]/g,"-")}function vu(e,t){return`${e.id||"os-window"}-tab-${bu(t)}`}function _u(e,t){return`${e.id||"os-window"}-panel-${bu(t)}`}function L_(e){const t=e.querySelector(".os-window__tab-plate");if(!t)return;const n=e.querySelector(".os-window__tab--active");if(!n){t.dataset.empty="",e.dataset.tabPlateEmpty="";return}delete t.dataset.empty,delete e.dataset.tabPlateEmpty,e.style.setProperty("--_tab-plate-x",`${n.offsetLeft}px`),e.style.setProperty("--_tab-plate-w",`${n.offsetWidth}px`),e.style.setProperty("--_tab-strip-w",`${e.clientWidth}px`),n.offsetWidth>0&&(t.dataset.placed="")}function T_(e){if(e){if(e.querySelector(":scope > .os-window__tab")){e.setAttribute("role","tablist");const t=e.dataset.tablistLabel;t&&e.setAttribute("aria-label",t);return}e.setAttribute("role","presentation"),e.removeAttribute("aria-label")}}function N_(e){const t=yu(e);if(t.length===0)return;const n=t.find(o=>o.classList.contains("os-window__tab--active"))??t[0];for(const o of t){const s=o===n?0:-1;o.tabIndex!==s&&(o.tabIndex=s)}}function Eu(e){const t=new Map;for(const n of yu(e))n.dataset.kind==="panel"&&n.dataset.panel&&t.set(n.dataset.panel,n);return t}function ku(e){const t=e.querySelector(".os-window__body");return t?Array.from(t.querySelectorAll("os-tabpanel[ for ]")).filter(n=>!n.parentElement?.closest("os-tabpanel, os-tabs")):[]}function D_(e,t){const n=e.querySelector(".os-window__tabs");if(!n)return;let o=!1;for(const[s,i]of Eu(n)){const r=s===t;o=o||r,i.classList.toggle("os-window__tab--active",r),i.setAttribute("aria-selected",r?"true":"false")}if(o){for(const s of ku(e)){const i=s.getAttribute("for")===t;s.toggleAttribute("hidden",!i),s.setAttribute("aria-hidden",i?"false":"true")}N_(n),L_(n),e.dispatchEvent(new CustomEvent(x_,{bubbles:!0,detail:{value:t}}))}}function R_(e,t,n){const o=e.querySelector(".os-window__tabs");if(!o)return;const s=Eu(o),i=Array.from(s.entries()).find(([,d])=>d.classList.contains("os-window__tab--active"))?.[0];let r=o.querySelector(".os-window__tab-plate");for(const d of t){let u=s.get(d.value);if(u)s.delete(d.value);else{const f=document.createElement("button");f.type="button",u=f,u.className="os-window__tab",u.dataset.kind="panel",u.dataset.panel=d.value,u.setAttribute("role","tab"),u.setAttribute("aria-selected","false"),u.tabIndex=-1}u.textContent!==d.label&&(u.textContent=d.label),u.id=vu(e,d.value),u.setAttribute("aria-controls",_u(e,d.value)),u.previousElementSibling!==r&&o.insertBefore(u,r?r.nextSibling:o.firstChild),r=u}for(const d of s.values())d.remove();T_(o);const a=o.querySelector(":scope > .os-window__tab")!==null;for(const d of ku(e)){const u=d.getAttribute("for");u&&(d.id=_u(e,u),a?d.setAttribute("aria-labelledby",vu(e,u)):d.removeAttribute("aria-labelledby"))}const l=d=>d!==void 0&&t.some(u=>u.value===d),c=[n,i,t[0]?.value].find(l);c!==void 0&&D_(e,c)}const eo="os-window__body--loading",Hr="os-window__body--loading-out",zr="data-os-loading-at",Su="data-os-loading-cycle";function qs(e){return e.getAttribute(Su)??"0"}function O_(e){e.setAttribute(zr,String(Date.now())),e.setAttribute(Su,String(Number(qs(e))+1))}function M_(e,t){const n=Number(e.getAttribute(zr)),o=Number.isFinite(n)&&n>0?Date.now()-n:0,s=f_-o;if(s<=0){t.classList.add(js);return}window.setTimeout(()=>{t.isConnected&&e.classList.contains(eo)&&t.classList.add(js)},s)}const P_=Symbol.for("desktop-mode/window-config");function W_(e){return e[P_]}function Gr(){const e=document.querySelectorAll(".os-window--fullscreen:not(.os-window--minimized)").length>0;document.body.classList.toggle("os-has-fullscreen-window",e)}function Au(){const e=document.createElement("div");e.className=Jn,e.setAttribute("role","status"),e.setAttribute("aria-live","polite");const t=document.createElement("os-spinner");return t.setAttribute("preset","classic"),t.setAttribute("size","clamp(96px, 14vw, 192px)"),t.setAttribute("label",S("Loading window content")),e.appendChild(t),e}function $_(e){let t=Au();const n={windowId:e.id,config:e};if(typeof e.loading?.render=="function")try{e.loading.render(t,n)}catch(o){typeof console<"u"&&console.error(`[openstation] loading.render threw for "${e.id}":`,o)}try{const o=V(b.WINDOW_LOADING_OVERLAY,t,n);o instanceof HTMLElement&&(t=o)}catch(o){typeof console<"u"&&console.error(`[openstation] WINDOW_LOADING_OVERLAY filter threw for "${e.id}":`,o)}return t&&!t.classList.contains(Jn)&&t.classList.add(Jn),t}function Cu(e){e.querySelector(":scope .os-window__loading")?.remove()}function Iu(e){const t=e.querySelector(":scope .os-window__body");if(!t||t.querySelector(":scope .os-window__loading"))return;const o=W_(e),s=o?$_(o):Au();t.appendChild(s),M_(t,s)}const xu=["adminmenumain","adminmenuback","os-dock","os-side-dock","os-widgets"],Ks="osHadFullscreenBeforeOverview";function Lu(e){(e.state==="fullscreen"||e.element.classList.contains("os-window--fullscreen"))&&(e.element.classList.remove("os-window--fullscreen"),e.element.dataset[Ks]="true",Gr()),e.state==="minimized"&&(e.element.style.removeProperty("content-visibility"),e.iframe&&(e.iframe.style.visibility=""))}function Tu(e){if(e.element.dataset[Ks]==="true"){if(e.state!=="fullscreen"&&e.state!=="minimized"){delete e.element.dataset[Ks],Gr();return}e.element.classList.add("os-window--fullscreen"),delete e.element.dataset[Ks],Gr()}}function jr(e,t=!0){t&&Tu(e),e.state==="minimized"&&(e.element.style.setProperty("content-visibility","hidden"),e.iframe&&(e.iframe.style.visibility="hidden"))}function Nu(e){const t=document.getElementById("wpbody-content");if(t)for(const n of Array.from(t.children))n.inert=e}function Du(e,t){for(const n of e._stack)for(const o of Array.from(n.element.children))o.inert=t}function U_(e){if(e._overviewActive)return;Ru(e);const t=e._stack.filter(c=>c.config.desktopId===e._activeDesktopId);e._overviewActive=!0,T(b.OVERVIEW_ENTERING,{});for(const c of xu){const d=document.getElementById(c);d&&(d.inert=!0)}Nu(!0),Du(e,!0),e._overviewSnapshot.clear();for(const c of t)e._overviewSnapshot.set(c.id,{transform:c.element.style.transform||"",transition:c.element.style.transition||""});for(const c of t)Lu(c);const n=e._desktop.getBoundingClientRect(),o=Array.from(document.querySelectorAll(".os-dock"));let s=0;for(const c of o){const d=c.getBoundingClientRect(),u=d.bottom>n.top&&d.top<n.bottom,f=d.height>d.width;u&&f&&(s+=d.width)}const i=new DOMRect(0,0,n.width+s,n.height);e._desktop.classList.add("os-area--overview"),document.getElementById("os-shell")?.classList.add("os-shell--overview"),e._overviewTopBar=Ou(e),e._desktop.appendChild(e._overviewTopBar);const a=br(t,i,cd);e._overviewLabels.clear();for(const c of a){const d=c.win.element;d.classList.add("os-window--overview");const u=c.x-d.offsetLeft,f=c.y-d.offsetTop;d.style.transform=`translate(${u}px, ${f}px) scale(${c.scale})`;const p=qr(c);d.insertAdjacentElement("afterend",p),e._overviewLabels.set(c.win.id,p)}const l=c=>{const d=c.target,u=d?.closest(".os-window--overview");return u?{id:u.id.replace(/^wp-window-/,""),element:u}:d===e._desktop?{id:"backdrop",element:e._desktop}:null};e._overviewPointerDownHandler=c=>{if(c.button!==0){e._overviewPressTarget=null;return}e._overviewPressTarget=l(c),e._overviewPressTarget&&(c.preventDefault(),c.stopPropagation())},e._overviewPointerUpHandler=c=>{if(c.button!==0)return;const d=e._overviewPressTarget;if(e._overviewPressTarget=null,!d)return;const u=d.element.getBoundingClientRect();if(!(c.clientX>=u.left&&c.clientX<=u.right&&c.clientY>=u.top&&c.clientY<=u.bottom))return;if(c.preventDefault(),c.stopPropagation(),d.id==="backdrop"){Ot(e);return}const p=e.getById(d.id);T(b.OVERVIEW_WINDOW_CLICK,{windowId:d.id}),Ot(e,p)},e._overviewKeyHandler=c=>{if(c.key==="Escape"){Ot(e);return}if(c.key==="Enter"){const u=c.target?.ownerDocument||document;if(u.activeElement&&u.activeElement.tagName==="BUTTON")return;if(c.preventDefault(),e._overviewAddTileFocused){Mu(e);return}Ot(e)}},e._desktop.addEventListener("pointerdown",e._overviewPointerDownHandler,!0),e._desktop.addEventListener("pointerup",e._overviewPointerUpHandler,!0),e._overviewClickBlocker=c=>{c.target?.closest(".os-overview-top-bar")||(c.stopPropagation(),c.preventDefault())},e._desktop.addEventListener("click",e._overviewClickBlocker,!0),document.addEventListener("keydown",e._overviewKeyHandler),e._lastOverviewHoverId=null,e._overviewMouseHandler=c=>{const u=c.target?.closest(".os-window--overview"),f=u?u.id.replace(/^wp-window-/,""):null;f!==e._lastOverviewHoverId&&(e._lastOverviewHoverId&&T(b.OVERVIEW_WINDOW_UNHOVER,{windowId:e._lastOverviewHoverId}),f&&T(b.OVERVIEW_WINDOW_HOVER,{windowId:f}),e._lastOverviewHoverId=f)},e._desktop.addEventListener("mouseover",e._overviewMouseHandler),e._overviewEnterTimeoutId=window.setTimeout(()=>{e._overviewEnterTimeoutId=null,e._overviewActive&&T(b.OVERVIEW_ENTERED,{})},300)}function Ru(e){e._overviewExitTimeoutId!==null&&(window.clearTimeout(e._overviewExitTimeoutId),e._overviewExitTimeoutId=null);const t=e._overviewExitFinalizer;e._overviewExitFinalizer=null,t?.()}function F_(e){e._overviewEnterTimeoutId!==null&&(window.clearTimeout(e._overviewEnterTimeoutId),e._overviewEnterTimeoutId=null),e._overviewExitTimeoutId!==null&&(window.clearTimeout(e._overviewExitTimeoutId),e._overviewExitTimeoutId=null),e._overviewExitFinalizer=null}function Ou(e){const t=document.createElement("div");t.className="os-overview-top-bar";const n=document.createElement("div");n.className="os-overview-top-bar__list",t.appendChild(n);for(const s of e._desktops)n.appendChild(B_(e,s));const o=document.createElement("button");return o.type="button",o.className="os-overview-top-bar__tile os-overview-top-bar__tile--add",e._overviewAddTileFocused&&o.classList.add("os-overview-top-bar__tile--cursor"),o.setAttribute("aria-label",S("Add new desktop")),o.innerHTML='<span class="os-overview-top-bar__tile-plus" aria-hidden="true">+</span>',o.addEventListener("click",s=>{s.preventDefault(),s.stopPropagation(),Mu(e)}),n.appendChild(o),t}function Mu(e){const t=Uu(e);e._overviewAddTileFocused=!1,Pu(e,t.id)}function B_(e,t){const n=document.createElement("div");n.className="os-overview-top-bar__tile-wrapper";const o=document.createElement("button");o.type="button",o.className="os-overview-top-bar__tile",o.dataset.desktopId=t.id,t.id===e._activeDesktopId&&!e._overviewAddTileFocused&&o.classList.add("os-overview-top-bar__tile--active"),o.setAttribute("aria-label",le(S("Switch to %s"),t.label));const s=document.createElement("span");s.className="os-overview-top-bar__tile-preview";const i=e._stack.filter(l=>l.config.desktopId===t.id).length;if(i>0){const l=document.createElement("span");l.className="os-overview-top-bar__tile-count",l.textContent=String(i),s.appendChild(l)}o.appendChild(s);const r=document.createElement("span");r.className="os-overview-top-bar__tile-label",r.textContent=t.label,o.appendChild(r),o.addEventListener("click",l=>{l.preventDefault(),l.stopPropagation(),Pu(e,t.id)});const a=document.createElement("button");return a.type="button",a.className="os-overview-top-bar__tile-close",a.setAttribute("aria-label",le(S("Close %s"),t.label)),a.innerHTML='<svg viewBox="0 0 12 12" width="10" height="10" aria-hidden="true"><path d="M2.5 2.5l7 7M9.5 2.5l-7 7" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"/></svg>',a.addEventListener("click",l=>{l.preventDefault(),l.stopPropagation(),Bu(e,t.id),Vr(e)}),n.appendChild(o),n.appendChild(a),n}function Vr(e){if(!e._overviewTopBar)return;const t=Ou(e);e._overviewTopBar.replaceWith(t),e._overviewTopBar=t}function Pu(e,t){Fu(e,t),Ot(e)}function qr(e){const t=document.createElement("div");t.className="os-overview-label",t.dataset.windowId=e.win.id;const n=e.win.element.offsetWidth*e.scale;t.style.left=`${e.x}px`,t.style.top=`${e.y-34}px`,t.style.width=`${n}px`;const o=e.win.config.icon||"dashicons-admin-generic",s=document.createElement("span");s.className=`os-overview-label__icon dashicons ${o}`,s.setAttribute("aria-hidden","true"),t.appendChild(s);const i=document.createElement("span");i.className="os-overview-label__title",i.textContent=e.win.config.title,t.appendChild(i);const r=e.win.getExternalTabCount();if(r>0){const a=document.createElement("span");a.className="os-overview-label__meta",a.textContent=le(nn("· %d open tab","· %d open tabs",r),r),t.appendChild(a)}return t}function Ot(e,t,n=!1){if(!e._overviewActive)return;e._overviewActive=!1,e._overviewAddTileFocused=!1,T(b.OVERVIEW_EXITING,{windowId:t?t.id:void 0,reason:t?"select":"cancel"}),e._desktop.classList.remove("os-area--overview"),document.getElementById("os-shell")?.classList.remove("os-shell--overview");for(const i of xu){const r=document.getElementById(i);r&&(r.inert=!1)}Nu(!1),Du(e,!1);for(const[i,r]of e._overviewSnapshot){const a=e.getById(i);a&&(a.element.style.transform=r.transform)}t&&(t.state==="minimized"&&(Tu(t),t.restore()),e.focus(t),n&&t.maximize());for(const i of e._stack)i.state==="minimized"&&i.element.classList.remove("os-window--overview");for(const i of e._overviewLabels.values())i.classList.add("os-overview-label--out");e._overviewTopBar&&e._overviewTopBar.classList.add("os-overview-top-bar--out");const s=280;e._overviewExitFinalizer=()=>{for(const i of e._stack)i.element.classList.remove("os-window--overview"),jr(i,i.config.desktopId===e._activeDesktopId);for(const i of e._overviewLabels.values())i.remove();e._overviewLabels.clear(),e._overviewSnapshot.clear(),e._overviewTopBar&&(e._overviewTopBar.remove(),e._overviewTopBar=null),e._overviewClickBlocker&&(e._desktop.removeEventListener("click",e._overviewClickBlocker,!0),e._overviewClickBlocker=null),T(b.OVERVIEW_EXITED,{windowId:t?t.id:void 0,reason:t?"select":"cancel"})},e._overviewExitTimeoutId=window.setTimeout(()=>Ru(e),s),e._overviewPointerDownHandler&&(e._desktop.removeEventListener("pointerdown",e._overviewPointerDownHandler,!0),e._overviewPointerDownHandler=null),e._overviewPointerUpHandler&&(e._desktop.removeEventListener("pointerup",e._overviewPointerUpHandler,!0),e._overviewPointerUpHandler=null),e._overviewPressTarget=null,e._overviewKeyHandler&&(document.removeEventListener("keydown",e._overviewKeyHandler),e._overviewKeyHandler=null),e._overviewMouseHandler&&(e._desktop.removeEventListener("mouseover",e._overviewMouseHandler),e._overviewMouseHandler=null),e._lastOverviewHoverId&&(T(b.OVERVIEW_WINDOW_UNHOVER,{windowId:e._lastOverviewHoverId}),e._lastOverviewHoverId=null)}function H_(e){return[...e._desktops]}function Wu(e){return e._desktops.find(n=>n.id===e._activeDesktopId)??e._desktops[0]}function z_(e){return Wu(e).id}function $u(e,t){const n=t.config.desktopId===e._activeDesktopId;t.element.style.display=n?"":"none",n&&!e._overviewActive&&jr(t)}function Kr(e){for(const t of e._stack)$u(e,t)}function Uu(e){e._desktopSeq++;const t={id:`desktop-${e._desktopSeq}`,label:le(S("Desktop %d"),e._desktopSeq)};return e._desktops.push(t),T(b.DESKTOP_CREATED,{desktopId:t.id}),t}function Fu(e,t,n){if(t===e._activeDesktopId||!e._desktops.some(s=>s.id===t))return;const o=e._activeDesktopId;if(e._activeDesktopId=t,e._overviewActive)Hu(e),Vr(e);else{Kr(e),n?.direction&&G_(e,n.direction);const s=[...e._stack].reverse().find(i=>i.config.desktopId===t&&i.state!=="minimized");s&&e.focus(s)}T(b.DESKTOP_SWITCHED,{from:o,to:t})}function G_(e,t){const n=e._desktop,o=t==="next"?"os-area--sliding-from-right":"os-area--sliding-from-left";n.classList.remove("os-area--sliding-from-right","os-area--sliding-from-left"),n.offsetWidth,n.classList.add(o);const s=i=>{i.animationName.startsWith("os-area-slide-from-")&&(n.classList.remove(o),n.removeEventListener("animationend",s))};n.addEventListener("animationend",s)}function Bu(e,t){if(e._desktops.length<=1)return;const n=e._desktops.findIndex(r=>r.id===t);if(n===-1)return;const o=n>0?n-1:1,s=e._desktops[o];for(const r of e._stack)r.config.desktopId===t&&(r.config.desktopId=s.id);e._desktops.splice(n,1),e._activeDesktopId===t&&(e._activeDesktopId=s.id),e._overviewActive?Hu(e):Kr(e),T(b.DESKTOP_CLOSED,{desktopId:t,migratedTo:s.id})}function Hu(e){for(const[i,r]of e._overviewSnapshot){const a=e.getById(i);a&&(a.element.style.transform=r.transform,a.element.style.transition=r.transition,a.element.classList.remove("os-window--overview"),jr(a,a.config.desktopId===e._activeDesktopId))}for(const i of e._overviewLabels.values())i.remove();e._overviewLabels.clear(),e._overviewSnapshot.clear(),Kr(e);const t=e._stack.filter(i=>i.config.desktopId===e._activeDesktopId);if(t.length===0)return;for(const i of t)e._overviewSnapshot.set(i.id,{transform:i.element.style.transform||"",transition:i.element.style.transition||""}),Lu(i);const n=e._desktop.getBoundingClientRect(),o=new DOMRect(0,0,n.width,n.height),s=br(t,o,cd);for(const i of s){const r=i.win.element;r.classList.add("os-window--overview");const a=i.x-r.offsetLeft,l=i.y-r.offsetTop;r.style.transform=`translate(${a}px, ${l}px) scale(${i.scale})`;const c=qr(i);r.insertAdjacentElement("afterend",c),e._overviewLabels.set(i.win.id,c)}}function j_(e,t,n){if(t.length===0)return;e._desktops=t.map(s=>({...s})),e._activeDesktopId=t.some(s=>s.id===n)?n:t[0].id;let o=0;for(const s of t){const i=s.id.match(/^desktop-(\d+)$/);if(i){const r=parseInt(i[1],10);Number.isFinite(r)&&r>o&&(o=r)}}e._desktopSeq=Math.max(e._desktopSeq,o)}function V_(e){const t=e._stack.filter(u=>u.config.desktopId===e._activeDesktopId);if(t.length===0)return;T(b.ARRANGE_CASCADE_STARTING,{windowCount:t.length});for(const u of t)u.state==="minimized"&&u.restore(),u.state==="fullscreen"&&u.toggleFullscreen(),u.state==="maximized"&&u.toggleMaximize();const n=e._desktop.getBoundingClientRect(),o=30,s=30,i=Math.min(Math.round(n.width*.7),1100),r=Math.min(Math.round(n.height*.75),750),a=Math.max(1,Math.floor((n.width-i-o)/s)),l=Math.max(1,Math.floor((n.height-r-o)/s)),c=Math.min(a,l);t.forEach((u,f)=>{const p=f%Math.max(1,c);u.element.style.left=`${o+p*s}px`,u.element.style.top=`${o+p*s}px`,u.element.style.width=`${i}px`,u.element.style.height=`${r}px`});const d=e.getFocused();d&&e.focus(d),document.dispatchEvent(new CustomEvent("os-window-changed",{detail:{reason:"cascade"}})),T(b.ARRANGE_CASCADE_APPLIED,{windowCount:t.length})}function q_(e){const t=e._stack.filter(f=>f.config.desktopId===e._activeDesktopId);if(t.length===0)return;for(const f of t)f.state==="minimized"&&f.restore(),f.state==="fullscreen"&&f.toggleFullscreen(),f.state==="maximized"&&f.toggleMaximize();const n=e._desktop.getBoundingClientRect(),o=Lb(t.length,n.width,n.height),s=V(b.ARRANGE_TILE_DIMENSIONS,o,{windowCount:t.length,areaWidth:n.width,areaHeight:n.height}),{cols:i,rows:r}=Ib(s,t.length)?{cols:Math.floor(s.cols),rows:Math.floor(s.rows)}:o;T(b.ARRANGE_TILE_STARTING,{windowCount:t.length,cols:i,rows:r});const a=16,l=12,c=Math.floor((n.width-a*2-l*(i-1))/i),d=Math.floor((n.height-a*2-l*(r-1))/r);t.forEach((f,p)=>{const g=p%i,m=Math.floor(p/i);f.element.style.left=`${a+g*(c+l)}px`,f.element.style.top=`${a+m*(d+l)}px`,f.element.style.width=`${c}px`,f.element.style.height=`${d}px`});const u=e.getFocused();u&&e.focus(u),document.dispatchEvent(new CustomEvent("os-window-changed",{detail:{reason:"tile"}})),T(b.ARRANGE_TILE_APPLIED,{windowCount:t.length,cols:i,rows:r})}const zu="desktop-mode-snap-to-grid";function K_(){try{return window.localStorage.getItem(zu)==="1"}catch{return!1}}function Y_(e,t){if(e._snapEnabled!==t){e._snapEnabled=t;try{window.localStorage.setItem(zu,t?"1":"0")}catch{}T(b.ARRANGE_SNAP_CHANGED,{enabled:t})}}function X_(e){if(!e._snapEnabled)return{enabled:!1,cellWidth:0,cellHeight:0};const t=e._desktop.getBoundingClientRect(),n=t.width>=t.height?12:8,o={cellWidth:Math.max(40,Math.round(t.width/n)),cellHeight:Math.max(40,Math.round(t.height/Math.round(n*.66)))},s=V(b.ARRANGE_SNAP_CELL_SIZE,o,{areaWidth:t.width,areaHeight:t.height}),{cellWidth:i,cellHeight:r}=xb(s)?s:o;return{enabled:!0,cellWidth:i,cellHeight:r}}function Z_(e,t,n){if(e._splitOverviewActive)return;e._splitOverviewActive=!0,e._splitOverviewAnchor=t,e._splitOverviewZone=n;const o=e._stack.filter(a=>a!==t&&a.state!=="minimized"&&a.config.desktopId===e._activeDesktopId);if(o.length===0){Gu(e);return}e._splitOverviewSnapshot.clear();for(const a of o)e._splitOverviewSnapshot.set(a.id,{transform:a.element.style.transform||"",transition:a.element.style.transition||""});e._desktop.classList.add("os-area--split-overview");const s=nE(e,n),i=br(o,s,0);e._splitOverviewLabels.clear();for(const a of i){const l=a.win.element;l.classList.add("os-window--overview");const c=a.x-l.offsetLeft,d=a.y-l.offsetTop;l.style.transform=`translate(${c}px, ${d}px) scale(${a.scale})`;const u=qr(a);l.insertAdjacentElement("afterend",u),e._splitOverviewLabels.set(a.win.id,u)}const r=a=>{const l=a.target,c=l?.closest(".os-window--overview");return c?{id:c.id.replace(/^wp-window-/,""),element:c}:l?{id:"dismiss",element:e._desktop}:null};e._splitOverviewPointerDown=a=>{if(a.button!==0){e._splitOverviewPressTarget=null;return}e._splitOverviewPressTarget=r(a),e._splitOverviewPressTarget&&(a.preventDefault(),a.stopPropagation())},e._splitOverviewPointerUp=a=>{if(a.button!==0)return;const l=e._splitOverviewPressTarget;if(e._splitOverviewPressTarget=null,!l)return;const c=l.element.getBoundingClientRect();if(!(a.clientX>=c.left&&a.clientX<=c.right&&a.clientY>=c.top&&a.clientY<=c.bottom))return;if(a.preventDefault(),a.stopPropagation(),l.id==="dismiss"){to(e);return}const u=e.getById(l.id);if(!u){to(e);return}J_(e,u)},e._splitOverviewKey=a=>{a.key==="Escape"&&to(e)},e._splitOverviewClickBlocker=a=>{a.stopPropagation(),a.preventDefault()},e._desktop.addEventListener("pointerdown",e._splitOverviewPointerDown,!0),e._desktop.addEventListener("pointerup",e._splitOverviewPointerUp,!0),e._desktop.addEventListener("click",e._splitOverviewClickBlocker,!0),document.addEventListener("keydown",e._splitOverviewKey)}function J_(e,t){const n=e._splitOverviewZone;if(!n){to(e);return}const o=n==="left"?"right":"left";t.element.style.transform="",t.element.classList.remove("os-window--overview"),t.applySnap(o),e._splitOverviewSnapshot.delete(t.id),e.focus(t),T(b.SNAP_SPLIT_FILLED,{windowId:t.id,zone:o}),to(e)}function to(e){if(!e._splitOverviewActive)return;e._splitOverviewActive=!1;for(const[n,o]of e._splitOverviewSnapshot){const s=e.getById(n);s&&(s.element.style.transform=o.transform)}for(const n of e._splitOverviewLabels.values())n.classList.add("os-overview-label--out");e._desktop.classList.remove("os-area--split-overview"),window.setTimeout(()=>{for(const n of e._stack)e._splitOverviewSnapshot.has(n.id)&&n.element.classList.remove("os-window--overview");for(const n of e._splitOverviewLabels.values())n.remove();Gu(e)},260),e._splitOverviewPointerDown&&(e._desktop.removeEventListener("pointerdown",e._splitOverviewPointerDown,!0),e._splitOverviewPointerDown=null),e._splitOverviewPointerUp&&(e._desktop.removeEventListener("pointerup",e._splitOverviewPointerUp,!0),e._splitOverviewPointerUp=null),e._splitOverviewClickBlocker&&(e._desktop.removeEventListener("click",e._splitOverviewClickBlocker,!0),e._splitOverviewClickBlocker=null),e._splitOverviewKey&&(document.removeEventListener("keydown",e._splitOverviewKey),e._splitOverviewKey=null),e._splitOverviewPressTarget=null}function Gu(e){e._splitOverviewSnapshot.clear(),e._splitOverviewLabels.clear(),e._splitOverviewAnchor=null,e._splitOverviewZone=null,e._splitOverviewActive=!1}const ju=30,Q_=260;function eE(e,t){return e<=t.left+ju?"left":e>=t.right-ju?"right":null}function tE(e,t){const n=e._desktop.getBoundingClientRect(),o=Math.floor(n.width/2),s=Math.floor(n.height);return{x:t==="left"?0:n.width-o,y:0,width:o,height:s}}function nE(e,t){const n=e._desktop.getBoundingClientRect(),o=Math.floor(n.width/2),s=Math.floor(n.height);return t==="left"?new DOMRect(o,0,o,s):new DOMRect(0,0,o,s)}function oE(e,t){if(e._snapPendingZone===t&&e._snapPreviewEl)return;if(e._snapPendingZone=t,!e._snapPreviewEl){const o=document.createElement("div");o.className="os-snap-preview",o.setAttribute("aria-hidden","true"),e._desktop.appendChild(o),e._snapPreviewEl=o,Promise.resolve().then(()=>{o.classList.add("os-snap-preview--visible")})}const n=tE(e,t);e._snapPreviewEl.style.left=`${n.x}px`,e._snapPreviewEl.style.top=`${n.y}px`,e._snapPreviewEl.style.width=`${n.width}px`,e._snapPreviewEl.style.height=`${n.height}px`,e._snapPreviewEl.dataset.zone=t}function Yr(e){if(!e._snapPreviewEl){e._snapPendingZone=null;return}const t=e._snapPreviewEl;e._snapPreviewEl=null,e._snapPendingZone=null,t.classList.remove("os-snap-preview--visible"),window.setTimeout(()=>{t.remove()},Q_)}function sE(e,t,n){if(e._splitOverviewActive)return;const o=e._desktop.getBoundingClientRect(),s=eE(n,o),i=e._snapPendingZone;s?(oE(e,s),i!==s&&T(b.SNAP_ZONE_PENDING,{windowId:t.id,zone:s})):i&&(Yr(e),T(b.SNAP_ZONE_CANCELED,{windowId:t.id}))}function iE(e,t){const n=e._snapPendingZone;return n?(Yr(e),t.state==="normal"&&(t._savedGeometry={x:t.element.offsetLeft,y:t.element.offsetTop,width:t.element.offsetWidth,height:t.element.offsetHeight}),t.applySnap(n),T(b.SNAP_ZONE_COMMITTED,{windowId:t.id,zone:n}),window.requestAnimationFrame(()=>{Z_(e,t,n)}),!0):!1}function rE(e){e._snapPendingZone&&Yr(e)}const Vu="desktop-mode-native-window-geometry",qu=64,nt=8192;function Ys(){try{const e=window.localStorage.getItem(Vu);if(!e)return{};const t=JSON.parse(e);return!t||typeof t!="object"?{}:t}catch{return{}}}function Ku(e){try{window.localStorage.setItem(Vu,JSON.stringify(e))}catch{}}function Xr(e){if(!e)return null;const n=Ys()[e];if(!n)return null;const o=Number(n.width),s=Number(n.height);if(!Number.isFinite(o)||!Number.isFinite(s)||o<=0||s<=0||o>nt||s>nt)return null;const i=n.state==="maximized"?"maximized":void 0,r=Number(n.x),a=Number(n.y),l=Number.isFinite(r)&&Number.isFinite(a)&&r>=0&&a>=0&&r<=nt&&a<=nt;return{width:Math.round(o),height:Math.round(s),...l?{x:Math.round(r),y:Math.round(a)}:{},...i?{state:i}:{}}}function Yu(e,t){if(!e)return;const n=Math.round(Number(t.width)),o=Math.round(Number(t.height));if(!Number.isFinite(n)||!Number.isFinite(o)||n<=0||o<=0||n>nt||o>nt)return;const s=Ys(),i=s[e],r=i&&i.state==="maximized"?"maximized":void 0,a=typeof i?.x=="number"?i.x:void 0,l=typeof i?.y=="number"?i.y:void 0;i&&i.width===n&&i.height===o&&i.state===r&&i.x===a&&i.y===l||(no(s,e,{width:n,height:o,...typeof a=="number"&&typeof l=="number"?{x:a,y:l}:{},...r?{state:r}:{}}),oo(s))}function Xu(e,t){if(!e)return;const n=Math.round(Number(t.x)),o=Math.round(Number(t.y));if(!Number.isFinite(n)||!Number.isFinite(o)||n<0||o<0||n>nt||o>nt)return;const s=Ys(),i=s[e];i&&(i.x===n&&i.y===o||(no(s,e,{...i,x:n,y:o}),oo(s)))}function Zu(e,t,n){if(!e)return;const o=Ys(),s=o[e];if(!s){if(t===null||!n)return;const i=Math.round(Number(n.width)),r=Math.round(Number(n.height));if(!Number.isFinite(i)||!Number.isFinite(r)||i<=0||r<=0||i>nt||r>nt)return;no(o,e,{width:i,height:r,state:t}),oo(o);return}if(t===null){if(!s.state)return;const{state:i,...r}=s;no(o,e,r),oo(o);return}s.state!==t&&(no(o,e,{...s,state:t}),oo(o))}function no(e,t,n){delete e[t],e[t]=n}function oo(e){const t=Object.keys(e);if(t.length>qu){const n={};for(const o of t.slice(-qu))n[o]=e[o];Ku(n);return}Ku(e)}function aE(e,t,n,o,s){const i=$r-n,r=o-$r,a=Math.max(i,Math.min(e,r)),l=u_,c=s-$r,d=Math.max(l,Math.min(t,c));return{x:a,y:d}}const Ju=100,Xs=30;class lE{constructor(t){this._stack=[],this._cascadeMinimized=new WeakSet,this._cascadeDepth=0,this.cascadeIndex=0,this._pendingRestoreState=new Map,this._desktops=[{id:"desktop-1",label:"Desktop 1"}],this._activeDesktopId="desktop-1",this._desktopSeq=1,this.onToggleStartupRequested=null,this.desktopResizeObserver=null,this._reflowRestoreTimer=null,this._snapEnabled=K_(),this._overviewActive=!1,this._overviewSnapshot=new Map,this._overviewLabels=new Map,this._overviewPointerDownHandler=null,this._overviewPointerUpHandler=null,this._overviewKeyHandler=null,this._overviewPressTarget=null,this._overviewClickBlocker=null,this._overviewTopBar=null,this._overviewMouseHandler=null,this._lastOverviewHoverId=null,this._overviewAddTileFocused=!1,this._overviewEnterTimeoutId=null,this._overviewExitTimeoutId=null,this._overviewExitFinalizer=null,this._snapPendingZone=null,this._snapPreviewEl=null,this._splitOverviewActive=!1,this._splitOverviewAnchor=null,this._splitOverviewZone=null,this._splitOverviewSnapshot=new Map,this._splitOverviewLabels=new Map,this._splitOverviewPointerDown=null,this._splitOverviewPointerUp=null,this._splitOverviewPressTarget=null,this._splitOverviewClickBlocker=null,this._splitOverviewKey=null,this._desktop=t,typeof ResizeObserver<"u"&&(this.desktopResizeObserver=new ResizeObserver(()=>this.reflowStatefulWindows()),this.desktopResizeObserver.observe(t)),this.installIframeFocusBridge()}installIframeFocusBridge(){window.addEventListener("blur",()=>{window.setTimeout(()=>{const t=this._desktop.ownerDocument?.activeElement??null;if(!t||t.tagName!=="IFRAME")return;const n=t.closest(".os-window");if(!n)return;const o=n.id.replace(/^wp-window-/,""),s=this.getById(o);s&&(this._overviewActive||this.getFocused()!==s&&this.focus(s))},0)})}reflowStatefulWindows(){if(!this._overviewActive){for(const t of this._stack){const n=t.element.parentElement;if(n){if(t.state==="maximized")t.element.classList.add("os-window--reflowing"),t.element.style.width=`${n.clientWidth}px`,t.element.style.height=`${n.clientHeight}px`;else if(t.state==="snapped-left"||t.state==="snapped-right"){t.element.classList.add("os-window--reflowing");const o=Math.floor(n.clientWidth/2),s=n.clientHeight,i=t.state==="snapped-left"?0:o;t.element.style.left=`${i}px`,t.element.style.top="0px",t.element.style.width=`${o}px`,t.element.style.height=`${s}px`}else if(t.state==="normal"){const o=parseInt(t.element.style.left,10)||0,s=parseInt(t.element.style.top,10)||0,i=t.element.offsetWidth||0,r=aE(o,s,i,n.clientWidth,n.clientHeight);(o!==r.x||s!==r.y)&&(t.element.classList.add("os-window--reflowing"),t.element.style.left=`${r.x}px`,t.element.style.top=`${r.y}px`)}}}this._reflowRestoreTimer!==null&&window.clearTimeout(this._reflowRestoreTimer),this._reflowRestoreTimer=window.setTimeout(()=>{this._reflowRestoreTimer=null;for(const t of this._stack)t.element.classList.remove("os-window--reflowing")},140)}}async open(t){if(!t||typeof t!="object")throw new TypeError("windowManager.open() requires a config object with at least { id, url, title }; received "+(t===null?"null":typeof t));if(typeof t.id!="string"||t.id==="")throw new TypeError("windowManager.open(): config.id must be a non-empty string.");if(typeof t.url!="string"||t.url==="")throw new TypeError('windowManager.open(): config.url must be a non-empty string. Pass an admin URL (e.g. "/wp-admin/edit.php") or a hash fragment (e.g. "#my-window") for native windows.');if(typeof t.title!="string")throw new TypeError("windowManager.open(): config.title must be a string.");const n=t.baseId||t.id,o=this.getByBaseIdOnActiveDesktop(n);if(o){const i=o.state==="minimized";this.focus(o),i&&o.restore();let r=!1;if(!o.config.native){const l=Ds(t.url);l===Ds(o.getCurrentUrl())||l===Ds(o.config.url||"")||l===Ds(o.config.parentUrl??o.config.url??"")||(r=o.navigateTo(t.url))}t.params&&(o.config.params={...t.params});const a={windowId:o.id,baseId:n,wasMinimized:i,navigated:r,params:o.config.params??{}};return document.dispatchEvent(new CustomEvent("os-window-reopened",{detail:a})),T(b.WINDOW_REOPENED,a),o}const s=this.getByBaseId(n)?this.nextInstanceId(n):t.id;return this.createWindow({...t,id:s,baseId:n})}async openNew(t){const n=t.baseId||t.id,o=t.id!==n&&!this.getById(t.id)?t.id:this.nextInstanceId(n),s=40+this.cascadeIndex%8*Xs,i=40+this.cascadeIndex%8*Xs;return this.createWindow({initialState:"normal",x:s,y:i,...t,id:o,baseId:n})}async createWindow(t){const n=this._pendingRestoreState.get(t.id);n&&(this._pendingRestoreState.delete(t.id),t={...t,...n});const o=this._desktop.getBoundingClientRect(),s=Math.min(Math.round(o.width*.8),1200),i=Math.min(Math.round(o.height*.8),800),r=40+this.cascadeIndex%8*Xs,a=40+this.cascadeIndex%8*Xs,l=t.baseId||t.id,c=t.minWidth??320,d=t.minHeight??200,u=typeof t.width=="number",f=typeof t.height=="number",p=typeof t.x=="number",g=typeof t.y=="number",m=typeof t.initialState=="string",h=!u||!f||!m||!p||!g?Xr(l):null,v=t.width??(h?Math.max(h.width,c):s),y=t.height??(h?Math.max(h.height,d):i),x=t.initialState??(h?.state==="maximized"?"maximized":void 0);let M,I;if(h&&typeof h.x=="number"&&typeof h.y=="number"){const z=Math.max(0,o.width-v-12),Z=Math.max(0,o.height-y-12);M=Math.max(12,Math.min(h.x,z)),I=Math.max(12,Math.min(h.y,Z))}const W=t.x??M??r,P=t.y??I??a,$=u||f||p||g||m,k=!!h,w={x:W,y:P,width:v,height:y,state:x};let E;try{E=V(b.WINDOW_GEOMETRY,w,{windowId:t.id,baseId:l,hasSavedGeometry:k,callerPinned:$,desktopRect:{width:o.width,height:o.height}})}catch(N){T(b.SHELL_ERROR,{scope:"window-geometry-filter",windowId:t.id,error:N}),typeof console<"u"&&console.error(`[openstation] WINDOW_GEOMETRY filter threw for "${t.id}":`,N),E=w}const _=(N,z)=>typeof N=="number"&&Number.isFinite(N)?N:z,O=E&&typeof E=="object"?E:w,H=Math.max(_(O.width,v),c),G=Math.max(_(O.height,y),d),j=_(O.x,W),L=_(O.y,P),F=O.state??x,D={icon:t.icon||"dashicons-admin-generic",...t,x:j,y:L,width:H,height:G,minWidth:c,minHeight:d,...F?{initialState:F}:{},baseId:l,desktopId:t.desktopId||this._activeDesktopId};this.cascadeIndex++;const[A]=await Promise.all([Ab(kb()),gr(wr())]),R=A.createWindow(D);R.onFocusRequest=N=>{this._cascadeDepth>0||this.focus(N)},R.onClose=N=>this.remove(N),R.onMinimize=N=>{this._cascadeDepth++;try{this.cascadeMinimize(N)}finally{this._cascadeDepth--}if(this._cascadeDepth>0)return;const z=this._stack.filter(Z=>Z.state!=="minimized");z.length>0&&this.focus(z[z.length-1])},R.onRestore=N=>{this._cascadeDepth++;try{this.cascadeRestore(N)}finally{this._cascadeDepth--}},R.onOpenAnother=N=>{const z=N.config.baseId||N.id;N.config.native&&window.wp?.os?.openNewWindow?.(z,{source:"open-another"})||this.openNew({id:z,baseId:z,url:N.config.url||"",title:N.config.title,icon:N.config.icon,submenu:N.config.submenu,multi:!0})},R.onOpenInNewWindow=N=>{const z=N.config.baseId||N.id;if(N.config.native&&window.wp?.os?.openNewWindow?.(z,{source:"open-in-new-window"}))return;const Z=N.getCurrentUrl();this.openNew({id:z,baseId:z,url:Z||N.config.url||"",title:N.config.title,icon:N.config.icon,submenu:N.config.submenu,multi:!0})},R.onToggleStartup=N=>{this.onToggleStartupRequested?.(N)},R.snapConfigProvider=()=>this.getSnapConfig(),R.onDragMove=(N,z)=>{sE(this,N,z)},R.onDragEnd=N=>this._snapPendingZone?iE(this,N):(rE(this),!1),this._stack.push(R),this._desktop.appendChild(R.element),$u(this,R),R.hydrateNative(),this.focus(R);const U={windowId:R.id,page:t.url,title:t.title,url:t.url};return document.dispatchEvent(new CustomEvent("os-window-opened",{detail:U})),T(b.WINDOW_OPENED,U),R}nextInstanceId(t){const n=new Set(this._stack.map(s=>s.id));if(!n.has(t))return t;let o=2;for(;n.has(`${t}-${o}`);)o++;return`${t}-${o}`}focus(t){const n=typeof t=="string"?this.getById(t):t;if(!n||typeof n.setZIndex!="function"){t&&typeof t!="string"&&console.warn("[openstation] windowManager.focus() expects a Window or a window id; received",t);return}const o=this.blockingChildOf(n)??n;o!==n&&(o.shake?.(),T(b.WINDOW_CHILD_BLOCKED,{windowId:n.id,childWindowId:o.id}),document.dispatchEvent(new CustomEvent("os-window-child-blocked",{detail:{windowId:n.id,childWindowId:o.id}})));const s=this._stack.length>0?this._stack[this._stack.length-1]:null,i=this._stack.find(l=>l!==o&&l.isFocused()&&l.isFullscreen());i&&V(b.WINDOW_AUTO_EXIT_FULLSCREEN,!0,{windowId:i.id,focusedTo:o.id})&&i.toggleFullscreen();const r=this._stack.indexOf(o);if(r>-1&&this._stack.splice(r,1),this._stack.push(o),this.enforceOwnershipOrder(),this._stack.forEach((l,c)=>{l.setZIndex(Ju+c),l.setFocused(c===this._stack.length-1)}),s&&s!==o&&s.id!==o.id){const l={windowId:s.id,focusedTo:o.id};document.dispatchEvent(new CustomEvent("os-window-blurred",{detail:l})),T(b.WINDOW_BLURRED,l)}const a={windowId:o.id};document.dispatchEvent(new CustomEvent("os-window-focused",{detail:a})),T(b.WINDOW_FOCUSED,a)}raise(t){const n=this.getById(t);if(!n||this._stack.length<2)return;const o=this._stack.indexOf(n);o===-1||o===this._stack.length-1||(this._stack.splice(o,1),this._stack.splice(this._stack.length-1,0,n),this.enforceOwnershipOrder(),this._stack.forEach((s,i)=>{s.setZIndex(Ju+i)}))}async openChild(t,n){const o=this.getById(t);if(!o)throw new Error(`windowManager.openChild(): no open window with id "${t}". Open the owner first, or use open() for a standalone window.`);const s=Xr(n.baseId||n.id),i=!!s&&typeof s.x=="number"&&typeof s.y=="number";let r={};if(n.x===void 0&&n.y===void 0&&!i){const a=o.getSnapshot(),l=n.width??Math.round(a.width*.8),c=n.height??Math.round(a.height*.8),d=this._desktop.getBoundingClientRect(),u=Math.max(0,d.width-l),f=Math.max(0,d.height-c);r={width:l,height:c,x:Math.min(u,Math.max(0,Math.round(a.x+(a.width-l)/2))),y:Math.min(f,Math.max(0,Math.round(a.y+(a.height-c)/2)))}}return this.open({...n,...r,desktopId:o.config.desktopId,parentWindowId:t})}ownerOf(t){const n=t.config.parentWindowId;return n?this.getById(n):void 0}childrenOf(t){const n=typeof t=="string"?t:t.id;return this._stack.filter(o=>o.config.parentWindowId===n)}blockingChildOf(t){let n=t,o;const s=new Set([t]);for(;;){const i=this.childrenOf(n).filter(r=>r.state!=="minimized"&&!s.has(r));if(i.length===0)return o;n=i[i.length-1],s.add(n),o=n}}enforceOwnershipOrder(){if(!this._stack.some(s=>s.config.parentWindowId))return;const t=[],n=new Set,o=(s,i)=>{if(!(n.has(s)||i.has(s))){if(i.add(s),s.state!=="minimized"){const r=this.ownerOf(s);r&&r!==s&&o(r,i)}n.has(s)||(n.add(s),t.push(s))}};for(const s of this._stack)o(s,new Set);this._stack.length=0,this._stack.push(...t)}cascadeMinimize(t){for(const n of this.childrenOf(t))n.state!=="minimized"&&(this._cascadeMinimized.add(n),n.minimize())}cascadeRestore(t){for(const n of this.childrenOf(t))this._cascadeMinimized.has(n)&&(this._cascadeMinimized.delete(n),n.restore())}remove(t){const n=this._stack.indexOf(t);n>-1&&this._stack.splice(n,1);const o=this.childrenOf(t).slice();if(o.length>0){this._cascadeDepth++;try{for(const r of o)this._cascadeMinimized.delete(r),r.close()}finally{this._cascadeDepth--}}for(let r=this._stack.length-1;this._cascadeDepth===0&&r>=0;r--){const a=this._stack[r];if(!(a.state==="minimized"||(a.config.desktopId||this._activeDesktopId)!==this._activeDesktopId)){this.focus(a);break}}const s={windowId:t.id,element:t.element};document.dispatchEvent(new CustomEvent("os-window-closing",{detail:s})),T(b.WINDOW_CLOSING,s);const i={windowId:t.id};document.dispatchEvent(new CustomEvent("os-window-closed",{detail:i})),T(b.WINDOW_CLOSED,i)}getById(t){return this._stack.find(n=>n.id===t)}getByBaseId(t){for(let n=this._stack.length-1;n>=0;n--){const o=this._stack[n];if((o.config.baseId||o.id)===t)return o}}getByBaseIdOnActiveDesktop(t){for(let n=this._stack.length-1;n>=0;n--){const o=this._stack[n];if((o.config.baseId||o.id)!==t)continue;if((o.config.desktopId||this._activeDesktopId)===this._activeDesktopId)return o}}getAllByBaseId(t){const n=o=>{if(o===t)return 1;const s=`${t}-`;if(o.startsWith(s)){const i=parseInt(o.slice(s.length),10);return Number.isFinite(i)?i:999}return 999};return this._stack.filter(o=>(o.config.baseId||o.id)===t).sort((o,s)=>n(o.id)-n(s.id))}getAllByBaseIdOnActiveDesktop(t){return this.getAllByBaseId(t).filter(n=>(n.config.desktopId||this._activeDesktopId)===this._activeDesktopId)}getAll(){return[...this._stack]}findByIframeSource(t){if(t)return this._stack.find(n=>n.iframe!==null&&n.iframe.contentWindow===t)}getFocused(){return this._stack.length>0?this._stack[this._stack.length-1]:void 0}isActive(t){const n=this.getById(t);if(!n||n.state==="minimized"||(n.config.desktopId||this._activeDesktopId)!==this._activeDesktopId)return!1;const s=this.getFocused();return!!s&&s.id===t}isActiveByBaseId(t){const n=this.getFocused();return!n||n.state==="minimized"||(n.config.desktopId||this._activeDesktopId)!==this._activeDesktopId?!1:(n.config.baseId||n.id)===t}getDesktops(){return H_(this)}getActiveDesktop(){return Wu(this)}getActiveDesktopId(){return z_(this)}createDesktop(){return Uu(this)}switchDesktop(t,n){Fu(this,t,n)}closeDesktop(t){Bu(this,t)}getPrimaryDesktopId(){const t=this.getDesktops(),n=t.length>0?t[0].id:"desktop-1",o=V(b.PRIMARY_DESKTOP_ID,n,t);return typeof o!="string"||o===""?n:t.some(i=>i.id===o)?o:n}closeAll(t){const n=new Set(t?.exceptIds??[]),o=this._stack.filter(l=>!n.has(l.id));T(b.WINDOWS_BEFORE_CLOSE_ALL,{candidates:o});const s=V(b.WINDOWS_CLOSE_ALL,o),i=Array.isArray(s)?s:o,r=o.filter(l=>!i.includes(l));let a=0;for(const l of i.slice())try{l.close(),a++}catch(c){typeof console<"u"&&console.error("[openstation] closeAll: window.close() threw for",l.id,c)}return T(b.WINDOWS_AFTER_CLOSE_ALL,{closed:a,skipped:r}),a}minimizeAll(){const t=[];for(const n of this._stack.slice())if((n.config.desktopId||this._activeDesktopId)===this._activeDesktopId&&n.state!=="minimized")try{n.minimize(),t.push(n)}catch(s){typeof console<"u"&&console.error("[openstation] minimizeAll: window.minimize() threw for",n.id,s)}return t}restoreFrom(t){if(!Array.isArray(t))return;const n=new Set(this._stack);for(const o of t)if(!(!n.has(o)||(o.config.desktopId||this._activeDesktopId)!==this._activeDesktopId)&&o.state==="minimized")try{o.restore()}catch(i){typeof console<"u"&&console.error("[openstation] restoreFrom: window.restore() threw for",o.id,i)}}toggleShowDesktop(){const t=this._stack.filter(o=>(o.config.desktopId||this._activeDesktopId)===this._activeDesktopId);if(t.length===0)return!1;if(t.every(o=>o.state==="minimized")){for(const o of t)try{o.restore()}catch{}return!1}return this.minimizeAll(),!0}cascade(){V_(this)}tile(){q_(this)}isSnapEnabled(){return this._snapEnabled}setSnapEnabled(t){Y_(this,t)}getSnapConfig(){return X_(this)}enterOverview(){U_(this)}exitOverview(t,n=!1){Ot(this,t,n)}destroy(){this._overviewActive&&Ot(this),F_(this)}getVisibleRects(){return this._stack.map(t=>{const n=t.getSnapshot();return{windowId:t.id,rect:{x:n.x,y:n.y,width:n.width,height:n.height},state:n.state,element:t.element}})}sanitizeParams(t){const n={};for(const[o,s]of Object.entries(t))(typeof s=="string"||typeof s=="boolean"||typeof s=="number"&&Number.isFinite(s))&&(n[o]=s);return Object.keys(n).length>0?n:void 0}snapshot(){const t=this.getFocused(),o=this._stack.filter(i=>!i.config.ephemeral&&!i.config.parentWindowId).map(i=>{const r=i.getSnapshot(),a=i.getExternalTabsSnapshot(),l=!!i.config.native,c=i.config.params,d=l&&c?this.sanitizeParams(c):null;return{id:i.id,baseId:i.config.baseId||i.id,desktopId:i.config.desktopId||this._activeDesktopId,...l?{native:!0}:{},...d?{params:d}:{},url:l?i.config.url||`#${i.id}`:i.getCurrentUrl(),title:i.config.title,icon:i.config.icon,state:r.state,x:r.x,y:r.y,width:r.width,height:r.height,...a.length>0?{externalTabs:a}:{}}}),s=t&&!t.config.ephemeral&&!t.config.parentWindowId?t.id:"";return{windows:o,desktops:this.getDesktops(),activeDesktop:this._activeDesktopId,focused:s,updated:Date.now()}}seedWindowRestoreState(t){this._pendingRestoreState=new Map(Object.entries(t))}seedDesktops(t,n){j_(this,t,n)}}function cE(e){const t=e.getActiveDesktopId(),n=Array.from(e._desktop.children);return e.getAll().filter(o=>(o.config.desktopId||t)===t).sort((o,s)=>n.indexOf(o.element)-n.indexOf(s.element))}function Qu(e,t){if(e._overviewActive)return;const n=cE(e);if(n.length<2)return;const o=e.getFocused(),r=((o?n.indexOf(o):-1)+(t==="next"?1:-1)+n.length)%n.length,a=n[r];a.state==="minimized"?a.restore():e.focus(a)}let ef=!1;function tf(e){let t=e.activeElement;for(;t&&t.shadowRoot&&t.shadowRoot.activeElement;)t=t.shadowRoot.activeElement;if(!t)return!1;if(t instanceof HTMLIFrameElement||t instanceof HTMLTextAreaElement)return!0;if(t instanceof HTMLInputElement)return new Set(["text","search","url","email","password","tel","number","date","datetime-local","month","week","time"]).has(t.type);if(t instanceof HTMLElement&&t.isContentEditable===!0)return!0;const n=t.getAttribute("contenteditable");return n!==null&&n!=="false"}function dE(e){if(ef)return;ef=!0,document.addEventListener("keydown",n=>{n.ctrlKey||n.metaKey||n.altKey||n.code==="Backquote"&&(tf(document)||(n.preventDefault(),Qu(e,n.shiftKey?"prev":"next")))},!0);const t=window.location.origin;window.addEventListener("message",n=>{if(n.origin!==t)return;const o=n.data;!o||o.type!=="os-window-switch"||Qu(e,o.direction==="prev"?"prev":"next")})}function nf(e,t){const n=e.getDesktops();if(n.length<2)return!1;const o=e.getActiveDesktopId(),s=n.findIndex(a=>a.id===o);if(s===-1)return!1;const r=(s+(t==="next"?1:-1)+n.length)%n.length;return r===s?!1:(e.switchDesktop(n[r].id,{direction:t}),!0)}function of(e,t){if(!e._overviewActive)return!1;const n=e.getDesktops(),o=n.length+1,s=n.length,i=e._overviewAddTileFocused?s:n.findIndex(l=>l.id===e.getActiveDesktopId());if(i===-1)return!1;const a=(i+(t==="next"?1:-1)+o)%o;return a===i?!1:a===s?(e._overviewAddTileFocused=!0,Vr(e),!0):(e._overviewAddTileFocused=!1,e.switchDesktop(n[a].id,{direction:t}),!0)}function uE(e){return e._overviewActive?e.exitOverview():e.enterOverview(),!0}function fE(e){return e._overviewActive||e.getAll().length===0?!1:(e.toggleShowDesktop(),!0)}function sf(e){return e._overviewActive?(e.exitOverview(),!0):!1}function pE(e){const t=e.getAll();return t.length===0?!1:t.every(n=>n.state==="minimized")}function hE(e){return pE(e)?(e.toggleShowDesktop(),!0):!1}let rf=!1;function mE(e){rf||(rf=!0,document.addEventListener("keydown",t=>{if(t.ctrlKey||t.metaKey||t.altKey||t.shiftKey||t.code!=="ArrowLeft"&&t.code!=="ArrowRight"&&t.code!=="ArrowUp"&&t.code!=="ArrowDown"||tf(document))return;let n=!1;switch(t.code){case"ArrowLeft":n=e._overviewActive?of(e,"prev"):nf(e,"prev");break;case"ArrowRight":n=e._overviewActive?of(e,"next"):nf(e,"next");break;case"ArrowUp":n=sf(e)||hE(e)||uE(e);break;case"ArrowDown":n=sf(e)||fE(e);break}n&&t.preventDefault()},!0))}const af=ru;let lf=!1;function cf(e){return e?document.getElementById(`wp-window-${e}`):null}function gE(){lf||(lf=!0,wE())}function wE(){K(b.WINDOW_CONTENT_LOADING,"desktop-mode/window-loading-enter",e=>{const t=cf(e?.windowId??"");if(!t)return;const n=t.querySelector(":scope .os-window__body");n&&(t.setAttribute("aria-busy","true"),n.classList.remove(Hr),n.classList.add(eo),O_(n),Iu(t),I_(t))}),K(b.WINDOW_CONTENT_LOADED,"desktop-mode/window-loading-exit",e=>{const t=cf(e?.windowId??"");if(!t)return;const n=t.querySelector(":scope .os-window__body");if(!n)return;t.removeAttribute("aria-busy");const o=!!n.querySelector(`:scope .${Jn}`)?.classList.contains(js);if(n.classList.remove(eo),n.removeAttribute(zr),!o){Cu(t),wu(t);return}n.classList.add(Hr);const s=qs(n);wu(t),window.setTimeout(()=>{qs(n)===s&&(n.classList.contains(eo)||Cu(t))},af),window.setTimeout(()=>{qs(n)===s&&(n.classList.contains(eo)||n.classList.remove(Hr))},af+p_)}),K(b.INIT,"desktop-mode/loading-overlay-init-sweep",()=>{queueMicrotask(()=>df())})}function df(){document.querySelectorAll(".os-window__body--loading").forEach(t=>{const n=t.closest(".os-window");n&&(t.querySelector(":scope .os-window__loading")?.remove(),Iu(n))})}const yE="os_person_view";function bE(e){return e.searchParams.has(yE)}const so=ie("desktop-mode/native-url-remap",()=>({remaps:[],deps:null}));function vE(e){so.state.deps=e}function Mt(e){if(!e||typeof e.id!="string"||e.id.trim()==="")return()=>{};if(typeof e.nativeWindowId!="string"||e.nativeWindowId==="")return()=>{};if(typeof e.matches!="function")return()=>{};const t=so.state.remaps,n=t.findIndex(o=>o.id===e.id);return n>=0&&t.splice(n,1),t.push(e),()=>_E(e.id)}function _E(e){const t=so.state.remaps,n=t.findIndex(o=>o.id===e);n>=0&&t.splice(n,1)}function Zr(e){const{deps:t,remaps:n}=so.state;if(!t||!e)return null;let o;try{o=new URL(e,t.adminUrl)}catch{return null}const s=t.getSnapshot();for(const i of n)if(i.matches(e,o)&&!(i.enabled&&!i.enabled(s)))return i.nativeWindowId;return null}function Ge(e){const{deps:t,remaps:n}=so.state;if(!t||!e)return!1;let o;try{o=new URL(e,t.adminUrl)}catch{return!1}const s=t.getSnapshot();for(const i of n){if(!i.matches(e,o)||i.enabled&&!i.enabled(s))continue;if(i.onMatch)try{i.onMatch(e,o)}catch(l){console.warn(`[openstation] URL remap onMatch hook threw for "${i.id}":`,l)}let r;if(i.params)try{r=i.params(e,o)??void 0}catch(l){console.warn(`[openstation] URL remap params hook threw for "${i.id}":`,l)}if(r?t.openById(i.nativeWindowId,{params:r}):t.openById(i.nativeWindowId))return!0}return!1}const Jr=ie("desktop-mode/destructive-admin-actions",()=>({entries:[]}));function EE(e){if(!e||typeof e.id!="string"||e.id.trim()==="")return()=>{};if(typeof e.matches!="function")return()=>{};const t=Jr.state.entries,n=t.findIndex(o=>o.id===e.id);return n>=0&&t.splice(n,1),t.push(e),()=>uf(e.id)}function uf(e){const t=Jr.state.entries,n=t.findIndex(o=>o.id===e);n>=0&&t.splice(n,1)}function kE(){return Jr.state.entries.slice()}const SE=32,AE=64,CE=/^[a-z0-9_/-]+$/,me=ie("desktop-mode/window-links",()=>({contentByWindow:new Map,focusSeq:new Map,seq:0,listeners:new Set,lastGroupsSignature:"",manager:null,started:!1}));function Pt(e){return`${e.type}:${e.id}`}function ff(e){return e.root?Pt(e.root):Pt(e)}function pf(e){const t=o=>typeof o=="number"&&Number.isFinite(o)||typeof o=="string"&&o.trim()!=="",n=o=>typeof o=="string"&&CE.test(o.trim().toLowerCase());return Nt(e,[{field:"type",valid:o=>n(o.type),message:"must match /^[a-z0-9_/-]+$/ — lowercase alphanum, hyphens, underscores, slashes for vendor/sub-type"},{field:"id",valid:o=>t(o.id),message:"must be a finite number or non-empty string"},{field:"root",valid:o=>o.root===void 0||!!o.root&&typeof o.root=="object"&&n(o.root.type)&&t(o.root.id),message:"when present, must be { type, id } with the same shapes as the ref itself"},{field:"related",valid:o=>o.related===void 0||Array.isArray(o.related)&&o.related.every(s=>!!s&&typeof s=="object"&&typeof s.id=="string"&&s.id.trim()!==""&&typeof s.group=="string"&&s.group.trim()!==""&&typeof s.label=="string"&&s.label.trim()!==""&&typeof s.url=="string"&&s.url.trim()!==""&&(s.groupLabel===void 0||typeof s.groupLabel=="string")&&(s.icon===void 0||typeof s.icon=="string")&&(s.count===void 0||typeof s.count=="number"&&Number.isFinite(s.count))),message:"when present, must be an array of { id, group, label, url, groupLabel?, icon?, count? } entries with non-empty strings"},{field:"links",valid:o=>o.links===void 0||Array.isArray(o.links)&&o.links.every(s=>!!s&&typeof s=="object"&&n(s.type)&&t(s.id)&&(s.rel===void 0||s.rel==="references"||s.rel==="child")),message:"when present, must be an array of { type, id, rel?: 'references'|'child' } entries"}])}function IE(e,t){const n={type:e.type.trim().toLowerCase(),id:e.id,source:t};if(e.root&&(n.root={type:e.root.type.trim().toLowerCase(),id:e.root.id}),Array.isArray(e.links)&&e.links.length>0&&(n.links=e.links.slice(0,SE).map(o=>{const s={type:o.type.trim().toLowerCase(),id:o.id};return o.rel==="child"&&(s.rel="child"),s})),typeof e.label=="string"&&e.label!==""&&(n.label=e.label),typeof e.previewUrl=="string"&&e.previewUrl!=="")try{new URL(e.previewUrl,window.location.origin).origin===window.location.origin&&(n.previewUrl=e.previewUrl)}catch{}return Array.isArray(e.related)&&e.related.length>0&&(n.related=e.related.slice(0,AE).map(o=>{const s={id:o.id,group:o.group,label:o.label,url:o.url};return typeof o.groupLabel=="string"&&o.groupLabel!==""&&(s.groupLabel=o.groupLabel),typeof o.icon=="string"&&o.icon!==""&&(s.icon=o.icon),typeof o.count=="number"&&(s.count=o.count),s})),n}function hf(e){return!e||!e.related?"":e.related.map(t=>`${t.id}\0${t.group}\0${t.label}\0${t.url}\0${t.groupLabel??""}\0${t.icon??""}\0${t.count??""}`).join("|")}function Qr(e){return e?[Pt(e),ff(e),...(e.links??[]).map(t=>Pt(t)+(t.rel==="child"?"!child":""))].join("|"):""}function Zs(e,t,n={}){const o=n.source??"api";if(typeof e!="string"||e===""){Ne("WindowContentRef",["windowId (must be a non-empty string)"],t);return}let s=null;if(t!=null){const a=pf(t);if(a.length>0){o==="api"&&Ne("WindowContentRef",a,t),fd("WindowContentRef",a,t);return}s=IE(t,o)}if(s=V(b.WINDOW_LINKS_CONTENT,s,{windowId:e,source:o}),s!==null&&(!s||pf(s).length>0)){fd("WindowContentRef",["filter (os.window-links.content returned an invalid ref)"],s);return}const i=me.state.contentByWindow.get(e)??null;if(s===null&&i===null||s!==null&&i!==null&&Qr(s)===Qr(i)&&s.label===i.label&&s.previewUrl===i.previewUrl&&hf(s)===hf(i))return;s===null?me.state.contentByWindow.delete(e):me.state.contentByWindow.set(e,s);const r={windowId:e,content:s,previous:i,source:o};document.dispatchEvent(new CustomEvent("os-window-content-changed",{detail:r})),T(b.WINDOW_CONTENT_CHANGED,r),NE(),LE()}function lt(e){return me.state.contentByWindow.get(e)}function Js(){const e=new Map;for(const[s,i]of me.state.contentByWindow){const r=ff(i);let a=e.get(r);a||(a={key:r,root:i.root?{...i.root}:{type:i.type,id:i.id},rootWindowIds:[],children:[]},e.set(r,a)),i.root?a.children.push({windowId:s,content:i}):a.rootWindowIds.push(s)}const t=me.state.focusSeq;for(const s of e.values())s.rootWindowIds.sort((i,r)=>(t.get(r)??0)-(t.get(i)??0));const n=Array.from(e.values()),o=V(b.WINDOW_LINK_GROUPS,n);return Array.isArray(o)?o:(typeof console<"u"&&console.warn("[openstation] `os.window-links.groups` filter returned a non-array; falling back to computed groups."),n)}function mf(e){return Js().find(t=>t.rootWindowIds.includes(e)||t.children.some(n=>n.windowId===e))}function gf(e){const t=new Set,n=mf(e);if(n)for(const o of[...n.rootWindowIds,...n.children.map(s=>s.windowId)])t.add(o);for(const o of io())o.fromWindowId===e?t.add(o.toWindowId):o.toWindowId===e&&t.add(o.fromWindowId);return t.delete(e),Array.from(t)}function xE(e){const t=new Set;for(const n of io())n.fromWindowId===e?t.add(n.toWindowId):n.toWindowId===e&&t.add(n.fromWindowId);return t.delete(e),Array.from(t)}function io(){const e=me.state.focusSeq,t=new Map;for(const[a,l]of me.state.contentByWindow){const c=Pt(l),d=t.get(c);(!d||(e.get(a)??0)>(e.get(d)??0))&&t.set(c,a)}const n=new Map,o=(a,l)=>`${a}→${l}`;for(const[a,l]of me.state.contentByWindow){if(l.root){const c=t.get(Pt(l.root));c&&c!==a&&n.set(o(a,c),{fromWindowId:a,toWindowId:c,kind:"child-root",bidirectional:!1})}for(const c of l.links??[]){const d=t.get(Pt(c));if(!d||d===a)continue;if(c.rel==="child"){const f=o(d,a),p=n.get(f);(!p||p.kind!=="child-root")&&n.set(f,{fromWindowId:d,toWindowId:a,kind:"child-root",bidirectional:!1});continue}const u=o(a,d);n.has(u)||n.set(u,{fromWindowId:a,toWindowId:d,kind:"reference",bidirectional:!1})}}const s=[],i=new Set;for(const[a,l]of n){if(i.has(a))continue;const c=o(l.toWindowId,l.fromWindowId),d=n.get(c);if(d&&l.kind==="reference"){if(d.kind==="reference"){i.add(c),s.push({...l,bidirectional:!0});continue}continue}s.push(l)}const r=V(b.WINDOW_LINK_EDGES,s);return Array.isArray(r)?r:(typeof console<"u"&&console.warn("[openstation] `os.window-links.edges` filter returned a non-array; falling back to derived edges."),s)}function wf(e){return me.state.listeners.add(e),()=>{me.state.listeners.delete(e)}}function LE(){for(const e of Array.from(me.state.listeners))try{e()}catch(t){typeof console<"u"&&console.error("[openstation] window-links listener threw:",t)}}function TE(){return Array.from(me.state.contentByWindow).map(([e,t])=>`${e}=${Qr(t)}`).sort().join(";")}function NE(){const e=TE();if(e===me.state.lastGroupsSignature)return;me.state.lastGroupsSignature=e;const n={groups:Js()};document.dispatchEvent(new CustomEvent("os-window-link-groups-changed",{detail:n})),T(b.WINDOW_LINK_GROUPS_CHANGED,n)}const DE={get:lt,set:(e,t)=>Zs(e,t,{source:"api"}),groups:Js,edges:io,groupOf:mf,related:gf,subscribe:wf};function RE({manager:e}){me.state.manager=e,!me.state.started&&(me.state.started=!0,K(b.WINDOW_OPENED,"desktop-mode/window-links-seed",t=>{if(!t?.windowId)return;const o=me.state.manager?.getById(t.windowId)?.config?.content;o&&Zs(t.windowId,o,{source:"config"})}),K(b.WINDOW_CLOSED,"desktop-mode/window-links-clear",t=>{t?.windowId&&(me.state.focusSeq.delete(t.windowId),Zs(t.windowId,null,{source:"config"}))}),K(b.WINDOW_FOCUSED,"desktop-mode/window-links-recency",t=>{t?.windowId&&(me.state.seq+=1,me.state.focusSeq.set(t.windowId,me.state.seq))}),window.addEventListener("message",t=>{if(t.origin!==window.location.origin)return;const n=t.data;if(!n||n.type!=="os-content-identity")return;const o=me.state.manager?.findByIframeSource?.(t.source);o&&Zs(o.id,n.identity??null,{source:"bridge"})}))}const OE=ie("desktop-mode/admin-link-deps",()=>({deps:null}));function ME(e){OE.state.deps=e}const yf=ie("desktop-mode/wallpaper-registry",()=>({seed:[],listeners:new Set})),dn=yf.state.seed,PE=yf.state.listeners;function un(e){Ne("Wallpaper",Nt(e,Ef),e);const t=dn.findIndex(n=>n.id===e.id);t>=0?dn[t]=e:dn.push(e),vf()}function bf(e){const t=dn.findIndex(n=>n.id===e);t>=0&&(dn.splice(t,1),vf())}function vf(){const e=Array.from(PE);for(const t of e)try{t()}catch(n){typeof console<"u"&&console.error("[openstation] wallpaper registry listener threw:",n)}}function _f(){const e=dn.slice(),t=V(b.WALLPAPERS,e);return Array.isArray(t)?t.filter(WE):(typeof console<"u"&&console.warn("[openstation] `os.wallpapers` filter returned a non-array; falling back to seed list."),e)}function ea(e){return _f().find(t=>t.id===e)}const Ef=[{field:"id",message:"missing or not a non-empty string",valid:e=>typeof e.id=="string"&&e.id!==""},{field:"label",message:"missing or not a non-empty string",valid:e=>typeof e.label=="string"&&e.label!==""},{field:"preview",message:"missing or not a non-empty string",valid:e=>typeof e.preview=="string"&&e.preview!==""},{field:"type",message:'must be "css" or "canvas"',valid:e=>e.type==="css"||e.type==="canvas"},{field:"value/resolveValue/mount",message:"css types need `value` or `resolveValue`; canvas types need `mount`",valid:e=>e.type==="css"?typeof e.value=="string"||typeof e.resolveValue=="function":e.type==="canvas"?typeof e.mount=="function":!0}];function WE(e){return Nt(e,Ef).length===0}const kf=ie("desktop-mode/wallpaper-settings",()=>({values:{}}));function $E(e){return{...kf.state.values[e]??{}}}function UE(e){const t=kf.state.values;for(const n of Object.keys(t))delete t[n];for(const[n,o]of Object.entries(e))t[n]={...o}}function Sf(e){return typeof e=="string"&&/^#[0-9a-f]{3,8}$/i.test(e)}const Af=["radius","bodyColor","bodyAlpha","hueStart","hueSpan","hueDrift","hueLoop","hueAngle","hueSpin","saturation","lightness","iridescence","outlineWidth","glow","glowBlur","eyeColor","eyeScale"],Cf=["shapePreset","shapeLobes","shapeAmount","shapeAngle","shapeShuffle","idleWobble","idleWobbleSpeed"];function ta(){return{appearance:{},physics:{}}}function FE(e){return typeof e=="boolean"||typeof e=="string"||typeof e=="number"&&Number.isFinite(e)}function Qs(e,t){const n={};if(!e||typeof e!="object"||Array.isArray(e))return n;const o=e;for(const s of t){const i=o[s];i!==void 0&&FE(i)&&Object.assign(n,{[s]:i})}return n}function If(e){if(!e||typeof e!="object"||Array.isArray(e))return ta();const t=e;return{appearance:Qs(t.appearance,Af),physics:Qs(t.physics,Cf)}}function BE(e){return{appearance:Qs(e,Af),physics:Qs(e,Cf)}}function HE(){const e=zE();if(e){const t=xf(e);return oa(t),YE(t),t}try{const t=window.localStorage.getItem(Ud);if(t)return xf(JSON.parse(t))}catch{}return ek()}function zE(){const t=window.openStationConfig?.osSettings;return!t||typeof t!="object"||Array.isArray(t)?null:t}function xf(e){const t=Tr();return{wallpaper:typeof e.wallpaper=="string"&&e.wallpaper!==""?e.wallpaper:zd(),accent:e.accent===Bd||t.some(n=>n.id===e.accent)?e.accent:J.accent,customAccent:typeof e.customAccent=="string"&&/^#[0-9a-fA-F]{6}$/.test(e.customAccent)?e.customAccent:J.customAccent,dockSize:Nr.some(n=>n.id===e.dockSize)?e.dockSize:J.dockSize,windowRadius:Dr.some(n=>n.id===e.windowRadius)?e.windowRadius:J.windowRadius,adminBarMode:Us.some(n=>n.id===e.adminBarMode)?e.adminBarMode:J.adminBarMode,desktopLayout:gv.some(n=>n.id===e.desktopLayout)?e.desktopLayout:J.desktopLayout,dockPlacement:mv.some(n=>n.id===e.dockPlacement)?e.dockPlacement:J.dockPlacement,dockRailRenderer:typeof e.dockRailRenderer=="string"&&/^[a-z0-9_-]+$/.test(e.dockRailRenderer)?e.dockRailRenderer:J.dockRailRenderer,desktopTheme:typeof e.desktopTheme=="string"&&/^[a-z0-9_-]*$/.test(e.desktopTheme)?e.desktopTheme:J.desktopTheme,appliedThemeRecommendations:Array.isArray(e.appliedThemeRecommendations)?Array.from(new Set(e.appliedThemeRecommendations.filter(n=>typeof n=="string"&&/^[a-z0-9_-]+$/.test(n)))).slice(-64):J.appliedThemeRecommendations.slice(),unfocusEffect:typeof e.unfocusEffect=="string"&&/^[a-z0-9_/-]+$/.test(e.unfocusEffect)?e.unfocusEffect:J.unfocusEffect,windowReveal:typeof e.windowReveal=="string"&&/^[a-z0-9_/-]+$/.test(e.windowReveal)?e.windowReveal:J.windowReveal,windowRevealDuration:typeof e.windowRevealDuration=="number"&&Number.isFinite(e.windowRevealDuration)&&e.windowRevealDuration>0?Math.min(4e3,Math.max(80,Math.round(e.windowRevealDuration))):J.windowRevealDuration,windowLinkRenderer:typeof e.windowLinkRenderer=="string"&&/^[a-z0-9_/-]+$/.test(e.windowLinkRenderer)?e.windowLinkRenderer:J.windowLinkRenderer,windowLinkVisibility:e.windowLinkVisibility==="focus"||e.windowLinkVisibility==="always"||e.windowLinkVisibility==="off"?e.windowLinkVisibility:J.windowLinkVisibility,windowLinksEnabled:typeof e.windowLinksEnabled=="boolean"?e.windowLinksEnabled:J.windowLinksEnabled,windowLinkRaiseOnFocus:typeof e.windowLinkRaiseOnFocus=="boolean"?e.windowLinkRaiseOnFocus:J.windowLinkRaiseOnFocus,windowLinkHighlight:typeof e.windowLinkHighlight=="boolean"?e.windowLinkHighlight:J.windowLinkHighlight,customGradient:nk(e.customGradient),customImage:ok(e.customImage),wallpaperSettings:GE(e.wallpaperSettings),libraryHdOnly:typeof e.libraryHdOnly=="boolean"?e.libraryHdOnly:J.libraryHdOnly,ai:tk(e.ai),heartbeatRate:e.heartbeatRate===15||e.heartbeatRate===30||e.heartbeatRate===45||e.heartbeatRate===60?e.heartbeatRate:J.heartbeatRate,nativePostsEnabled:typeof e.nativePostsEnabled=="boolean"?e.nativePostsEnabled:J.nativePostsEnabled,nativePostsHiddenColumns:Array.isArray(e.nativePostsHiddenColumns)?e.nativePostsHiddenColumns.filter(n=>typeof n=="string"&&n!=="").slice(0,32):J.nativePostsHiddenColumns.slice(),nativePagesEnabled:typeof e.nativePagesEnabled=="boolean"?e.nativePagesEnabled:J.nativePagesEnabled,nativeUsersEnabled:typeof e.nativeUsersEnabled=="boolean"?e.nativeUsersEnabled:J.nativeUsersEnabled,nativePluginsEnabled:typeof e.nativePluginsEnabled=="boolean"?e.nativePluginsEnabled:J.nativePluginsEnabled,nativeCommentsEnabled:typeof e.nativeCommentsEnabled=="boolean"?e.nativeCommentsEnabled:J.nativeCommentsEnabled,showDesktopOnWallpaperClick:typeof e.showDesktopOnWallpaperClick=="boolean"?e.showDesktopOnWallpaperClick:J.showDesktopOnWallpaperClick,mioEnabled:typeof e.mioEnabled=="boolean"?e.mioEnabled:J.mioEnabled,mioStyle:If(e.mioStyle),showPostStatusRibbons:typeof e.showPostStatusRibbons=="boolean"?e.showPostStatusRibbons:J.showPostStatusRibbons,developerModeEnabled:typeof e.developerModeEnabled=="boolean"?e.developerModeEnabled:J.developerModeEnabled,foldersSharingEnabled:typeof e.foldersSharingEnabled=="boolean"?e.foldersSharingEnabled:J.foldersSharingEnabled,itemVisibility:jE(e.itemVisibility),dockOrder:VE(e.dockOrder),dockPromotedPositions:qE(e.dockPromotedPositions)}}function GE(e){if(!e||typeof e!="object"||Array.isArray(e))return{};const t={};let n=0;for(const[o,s]of Object.entries(e)){if(n>=64)break;if(typeof o!="string"||o===""||!/^[a-z0-9_/-]+$/.test(o)||!s||typeof s!="object"||Array.isArray(s))continue;const i={};let r=0;for(const[a,l]of Object.entries(s)){if(r>=32)break;if(!(typeof a!="string"||a===""||!/^[a-zA-Z0-9_-]+$/.test(a))){if(typeof l=="boolean")i[a]=l;else if(typeof l=="number"&&Number.isFinite(l))i[a]=l;else if(typeof l=="string")i[a]=l.slice(0,256);else continue;r++}}r!==0&&(t[o]=i,n++)}return t}function jE(e){if(!e||typeof e!="object"||Array.isArray(e))return{};const t=["both","dock","desktop","hidden"],n={};let o=0;for(const[s,i]of Object.entries(e)){if(o>=256)break;if(typeof s!="string"||s===""||typeof i!="string")continue;const r=i;t.includes(r)&&(n[s]=r,o++)}return n}function VE(e){if(!Array.isArray(e))return[];const t=[],n=new Set;for(const o of e)if(!(typeof o!="string"||o===""||n.has(o))&&(n.add(o),t.push(o),t.length>=256))break;return t}function qE(e){if(!e||typeof e!="object"||Array.isArray(e))return{};const t={};let n=0;const o=1e5;for(const[s,i]of Object.entries(e)){if(n>=256)break;if(typeof s!="string"||s===""||!i||typeof i!="object"||Array.isArray(i))continue;const r=i;typeof r.x!="number"||typeof r.y!="number"||!Number.isFinite(r.x)||!Number.isFinite(r.y)||Math.abs(r.x)>o||Math.abs(r.y)>o||(t[s]={x:r.x,y:r.y},n++)}return t}let ei=null;const KE=250;let Wt=null;function YE(e){Wt=na(e)}function na(e){return{...e,customGradient:{...e.customGradient},customImage:e.customImage?{...e.customImage}:null,wallpaperSettings:Object.fromEntries(Object.entries(e.wallpaperSettings).map(([t,n])=>[t,{...n}])),ai:{...e.ai},mioStyle:{appearance:{...e.mioStyle.appearance},physics:{...e.mioStyle.physics}},appliedThemeRecommendations:e.appliedThemeRecommendations.slice(),nativePostsHiddenColumns:e.nativePostsHiddenColumns.slice(),itemVisibility:{...e.itemVisibility},dockOrder:e.dockOrder.slice(),dockPromotedPositions:Object.fromEntries(Object.entries(e.dockPromotedPositions).map(([t,n])=>[t,{...n}]))}}function XE(e,t={}){oa(e),ZE(e,t.windowId)}function oa(e){try{window.localStorage.setItem(Ud,JSON.stringify(e))}catch{}}function ZE(e,t){ei!==null&&clearTimeout(ei),t&&(sa=t),$t("pending"),ei=setTimeout(()=>{ei=null;const n=sa;sa=null,QE(e,n)},KE)}let sa=null;function JE(e){if(!Wt)return{...e};const t=Wt,n={};let o=!1;for(const s of Object.keys(e))JSON.stringify(e[s])!==JSON.stringify(t[s])&&(Object.assign(n,{[s]:e[s]}),o=!0);return o?n:null}function QE(e,t){const n=window.openStationConfig,o=n?.osSettingsUrl,s=n?.restNonce;if(!o||!s){$t("saved");return}const i=JE(e);if(!i){$t("saved");return}$t("saving");const r=t||"desktop-mode-os-settings";Be(o,{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":s},body:JSON.stringify({settings:i})},{windowId:r}).then(a=>{if(!a.ok)throw new Error(`${a.status} ${a.statusText}`);Wt=na(e),$t("saved")}).catch(a=>{Wt?(oa(Wt),$t("failed",a instanceof Error?a.message:String(a),na(Wt))):$t("failed",a instanceof Error?a.message:String(a))})}function $t(e,t,n){const o={phase:e};t&&(o.error=t),n&&(o.rolledBackTo=n),document.dispatchEvent(new CustomEvent("os-settings-save-lifecycle",{detail:o}))}function ek(){return{...J,customGradient:{...J.customGradient},customImage:null,wallpaperSettings:{...J.wallpaperSettings},ai:{...J.ai},appliedThemeRecommendations:[...J.appliedThemeRecommendations],itemVisibility:{...J.itemVisibility},dockOrder:[...J.dockOrder],dockPromotedPositions:{...J.dockPromotedPositions}}}function tk(e){if(!e||typeof e!="object")return{...J.ai};const{enabled:t}=e;return{enabled:typeof t=="boolean"?t:J.ai.enabled}}function nk(e){if(!e||typeof e!="object")return{...J.customGradient};const{from:t,to:n,angle:o}=e;return{from:Sf(t)?t:J.customGradient.from,to:Sf(n)?n:J.customGradient.to,angle:typeof o=="number"&&Number.isFinite(o)&&o>=0&&o<=360?o:J.customGradient.angle}}function ok(e){if(!e||typeof e!="object")return null;const{id:t,url:n}=e;return typeof t!="number"||!Number.isFinite(t)||t<=0||typeof n!="string"||!/^https?:\/\//i.test(n)?null:{id:t,url:n}}function fn(e){if(!e)return 214;let t=5381;for(let n=0;n<e.length;n++)t=Math.imul(t,33)+e.charCodeAt(n);return(t%360+360)%360}function sk(e){return typeof e!="string"||e===""||e.length>4096||!/^(https?:\/\/|data:image\/)/i.test(e)?!1:!/['"()\\<>\s]/.test(e)}function ro(e,t,n){if(!sk(t))return!1;const o=`url("${t}") center / contain no-repeat`;return e.style.backgroundImage="none",e.style.backgroundColor=n,e.style.setProperty("-webkit-mask",o),e.style.setProperty("mask",o),!0}const ia="data-os-constellation";function ik(){return document.body.hasAttribute(ia)}const ti="os-item-menu-opening",rk=180,ak=220,Lf=32;function Tf(e){const{tile:t}=e;let n=null,o=null,s=null,i=!1,r=null;const a=()=>{o!==null&&(window.clearTimeout(o),o=null)},l=()=>{s!==null&&(window.clearTimeout(s),s=null)},c=()=>{a(),l(),t.removeAttribute("data-peek-active"),n&&(n.remove(),n=null),r?.clear(),r=null,e.suppressTooltip(!1)},d=m=>{m.pointerType==="mouse"&&(ik()&&(t.dataset.menuSlug||t.dataset.constellationId)||lk(e)&&(i=!0,l(),!n&&(o=window.setTimeout(()=>{o=null,i&&p()},rk))))},u=m=>{n&&m.relatedTarget instanceof Node&&n.contains(m.relatedTarget)||(i=!1,a(),f())},f=()=>{l(),s=window.setTimeout(()=>{s=null,!i&&c()},ak)},p=()=>{e.suppressTooltip(!0),t.setAttribute("data-peek-active",""),r=new Map,n=ck(e,()=>c(),r),document.body.appendChild(n),gk(n),wk(n,t,e.getOrientation()),requestAnimationFrame(()=>{n?.classList.add("os-dock-peek--open")}),n.addEventListener("pointerenter",()=>{i=!0,l()}),n.addEventListener("pointerleave",m=>{m.relatedTarget instanceof Node&&t.contains(m.relatedTarget)||(i=!1,f())})},g=()=>c();return t.addEventListener("pointerenter",d),t.addEventListener("pointerleave",u),document.addEventListener(ti,g),()=>{t.removeEventListener("pointerenter",d),t.removeEventListener("pointerleave",u),document.removeEventListener(ti,g),c()}}function lk(e){return e.getInstances().length>=1}function ck(e,t,n){const o=document.createElement("div");o.className="os-dock-peek",o.setAttribute("role","menu"),o.setAttribute("aria-label",le(S("%s — open windows"),e.item.title));const s=document.createElement("div");s.className="os-dock-peek__cards",o.appendChild(s);const i=e.getInstances();let r=0;for(const a of i){const l=dk(a,e,r++,t,n);s.appendChild(l)}if(e.enableGhost!==!1){const a=fk(e,r,t);s.appendChild(a)}return o}function Nf(e,t){e.state==="minimized"&&(e.restore(),t&&delete t.dataset.state)}function dk(e,t,n,o,s){const i=document.createElement("button");i.type="button",i.setAttribute("role","menuitem"),i.className="os-dock-peek__card os-dock-peek__card--instance",i.style.setProperty("--peek-card-index",String(n)),i.style.setProperty("--peek-card-delay",`${n*Lf}ms`);const r=e.config.title||t.item.title;i.style.setProperty("--peek-card-hue",`${fn(e.id||r)}`),i.style.setProperty("--peek-card-vt-name",`os-peek-card-${e.id}`);const a=document.createElement("span");a.className="os-dock-peek__card-titlebar";const l=document.createElement("span");l.className="os-dock-peek__card-dots",l.setAttribute("aria-hidden","true");for(let y=0;y<3;y++)l.appendChild(document.createElement("i"));a.appendChild(l);const c=document.createElement("span");c.className="os-dock-peek__card-icon",c.setAttribute("aria-hidden","true");const d=e.config.icon||t.item.icon;d.startsWith("dashicons-")?c.classList.add("dashicons",od(d)):c.classList.add("dashicons","dashicons-admin-generic"),a.appendChild(c);const u=document.createElement("span");u.className="os-dock-peek__card-label",u.textContent=r,a.appendChild(u),i.appendChild(a);const f=document.createElement("span");f.className="os-dock-peek__card-body",f.setAttribute("aria-hidden","true");for(let y=0;y<3;y++){const x=document.createElement("span");x.className="os-dock-peek__card-line",f.appendChild(x)}const p={window:e,item:t.item},g=V(b.DOCK_PEEK_CARD_CONTENT,f,p);g!==f&&g.classList.add("os-dock-peek__card-body--custom"),i.appendChild(g),e.state==="minimized"&&(i.dataset.state="minimized");const m=()=>{s.delete(e.id),delete i.dataset.preview},h=y=>{if(m(),y.wasMinimized)e.minimize(),i.dataset.state="minimized";else if(y.previouslyFocusedId){const x=t.windowManager.getById(y.previouslyFocusedId);x&&t.windowManager.focus(x)}};return i.addEventListener("click",()=>{m(),uk(t,e,i,o)}),i.addEventListener("pointerenter",()=>{if(s.has(e.id))return;const y=e.state==="minimized",x=t.windowManager.getFocused(),M=x&&x!==e?x.id:null;(y||M!==null)&&(s.set(e.id,{wasMinimized:y,previouslyFocusedId:M}),i.dataset.preview=""),y?Nf(e,i):x&&x!==e&&t.windowManager.focus(e)}),i.addEventListener("pointerleave",()=>{const y=s.get(e.id);y&&h(y)}),V(b.DOCK_PEEK_CARD_ELEMENT,i,p)}function uk(e,t,n,o){const s=document,i=`os-peek-card-${t.id}`,r=()=>{o(),Nf(t,n),e.windowManager.focus(t)};if(typeof s.startViewTransition!="function"){r();return}const a=t.element;n.style.setProperty("view-transition-name",i),a.style.setProperty("view-transition-name",i);const l=s.startViewTransition(r),c=()=>{n.style.removeProperty("view-transition-name"),a.style.removeProperty("view-transition-name")},d=l;d.finished&&typeof d.finished.then=="function"?d.finished.then(c,c):Promise.resolve().then(c)}function fk(e,t,n){const o=document.createElement("button");o.type="button",o.setAttribute("role","menuitem"),o.className="os-dock-peek__card os-dock-peek__card--ghost",o.style.setProperty("--peek-card-index",String(t)),o.style.setProperty("--peek-card-delay",`${t*Lf}ms`);const s=document.createElement("span");s.className="os-dock-peek__card-plus",s.setAttribute("aria-hidden","true"),s.textContent="+",o.appendChild(s);const i=document.createElement("span");return i.className="os-dock-peek__card-label",i.textContent=le(S("New %s"),e.item.title),o.appendChild(i),o.addEventListener("click",()=>{pk(e,n)}),o}function pk(e,t){const n=document,o=()=>{t(),e.openNew()};if(typeof n.startViewTransition=="function"){n.startViewTransition(o);return}o()}const hk=12,mk=["--wp-admin-theme-color","--os-titlebar-bg","--os-titlebar-bg-focused","--os-titlebar-color","--os-titlebar-color-focused"];function gk(e){const t=document.querySelector(".os-shell");if(!t)return;const n=window.getComputedStyle(t);for(const o of mk){const s=n.getPropertyValue(o).trim();s&&e.style.setProperty(o,s)}}function wk(e,t,n){const o=t.getBoundingClientRect();e.dataset.orientation=n,n==="bottom"?(e.style.left=`${o.left+o.width/2}px`,e.style.top=`${o.top-12}px`):n==="right"?(e.style.top=`${o.top}px`,e.style.left=`${o.left-12}px`):(e.style.top=`${o.top}px`,e.style.left=`${o.right+12}px`),requestAnimationFrame(()=>yk(e))}function yk(e,t){const n=e.getBoundingClientRect(),o=window.innerHeight,s=window.innerWidth,i=hk;let r=0,a=0;n.top<i?r=i-n.top:n.bottom>o-i&&(r=o-i-n.bottom),n.left<i?a=i-n.left:n.right>s-i&&(a=s-i-n.right),!(a===0&&r===0)&&(e.style.setProperty("--peek-clamp-x",`${a}px`),e.style.setProperty("--peek-clamp-y",`${r}px`),e.classList.add("os-dock-peek--clamped"))}function pn(e){try{const t=new URL(e,window.location.origin);return t.origin===window.location.origin?!1:(window.open(t.toString(),"_blank","noopener,noreferrer"),!0)}catch{return!1}}const ra=new Map;function bk(e){let t,n;try{const s=new URL(e,document.baseURI);t=s.origin,n=s.pathname}catch{return null}if(!n)return null;const o=document.querySelectorAll("script[src]");for(const s of Array.from(o))try{const i=new URL(s.src,document.baseURI);if(i.origin===t&&i.pathname===n)return s}catch{}return null}function ke(e,t){const n=ra.get(e);if(n)return n;const o=new Promise((s,i)=>{const r=`script[data-os-vendor="${vk(e)}"]`,a=document.querySelector(r);if(a){if(a.dataset.loaded==="1"){s();return}a.addEventListener("load",()=>s(),{once:!0}),a.addEventListener("error",()=>i(new Error(`Failed to load ${e}`)),{once:!0});return}const l=bk(e);if(l){l.dataset.osVendor=e,l.dataset.loaded="1",s();return}t?.translations&&ni(t.translations);for(const d of t?.l10n??[])ni(d);for(const d of t?.before??[])ni(d);const c=document.createElement("script");c.src=e,c.async=!0,c.dataset.osVendor=e,c.addEventListener("load",()=>{c.dataset.loaded="1";for(const d of t?.after??[])ni(d);s()},{once:!0}),c.addEventListener("error",()=>{ra.delete(e),c.remove(),i(new Error(`Failed to load ${e}`))},{once:!0}),document.head.appendChild(c)});return ra.set(e,o),o}function ni(e){if(!e)return;const t=document.createElement("script");t.textContent=e,t.dataset.osVendorInline="1",document.head.appendChild(t)}function vk(e){return typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(e):e.replace(/["\\]/g,"\\$&")}let Df=0;function Rf(){return window.openStationItemVisibilityMenu??null}function _k(){return window.openStationConfig?.itemVisibilityMenuBundleUrl??""}function Of(e){const t=Rf();if(t){t.openItemVisibilityMenu(e);return}const n=_k();if(!n)return;const o=++Df;ke(n).then(()=>{o===Df&&Rf()?.openItemVisibilityMenu(e)}).catch(s=>{typeof console<"u"&&console.warn("[openstation] item-visibility-menu bundle failed to load; menu suppressed:",s)})}const $e=class $e{constructor(t,n,o,s,i="left"){this.itemElements=new Map,this.systemItems=[],this.systemItemElements=new Map,this.systemSeparator=null,this.badgeOverrides=new Map,this.artOverrides=new Map,this.attentionTimers=new Map,this.peekTeardowns=new Map,this.boundRefresh=()=>{},this.container=t,this.windowManager=n,this.items=o,this.adminUrl=s,this.orientation=i,this.rail=i==="bottom"?"taskbar":"dock",this.hooksNamespace=`desktop-mode/dock/${++$e.instanceCounter}`,this.container.classList.add("os-dock--no-transition"),this.container.setAttribute("data-os-dock-placement",i),this.container.offsetWidth,this.container.classList.remove("os-dock--no-transition");const r=document.createElement("div");r.className="os-dock__scroll";const a=document.createElement("div");a.className="os-dock__pinned",t.appendChild(r),t.appendChild(a),this.itemHost=r,this.systemHost=a,this.tooltip=document.createElement("div"),this.tooltip.className="os-dock__tooltip",this.tooltip.setAttribute("role","tooltip"),i==="bottom"?this.tooltip.classList.add("os-dock__tooltip--above"):i==="right"?this.tooltip.classList.add("os-dock__tooltip--before"):this.tooltip.classList.add("os-dock__tooltip--after"),document.body.appendChild(this.tooltip),this.render(),this.bindWindowEvents()}buildHookContextBase(){return{rail:this.rail,orientation:this.orientation,dockId:this.container.id,container:this.container}}setOrientation(t){this.orientation!==t&&(this.orientation=t,this.container.setAttribute("data-os-dock-placement",t),this.tooltip.classList.remove("os-dock__tooltip--above","os-dock__tooltip--before","os-dock__tooltip--after"),t==="bottom"?this.tooltip.classList.add("os-dock__tooltip--above"):t==="right"?this.tooltip.classList.add("os-dock__tooltip--before"):this.tooltip.classList.add("os-dock__tooltip--after"))}replaceItems(t){for(const i of this.itemElements.keys()){const r=this.peekTeardowns.get(i);r&&(r(),this.peekTeardowns.delete(i))}for(const i of this.itemElements.values())i.remove();this.itemHost.querySelectorAll(".os-dock__separator--group").forEach(i=>i.remove()),this.itemElements.clear(),this.items=t;const n=this.buildHookContextBase();T(b.DOCK_BEFORE_RENDER,{...n,items:t,tileElements:this.itemElements});let o=!1,s=0;for(const i of t){if(!o&&i.isCore===!1){if(s>0){const c=document.createElement("div");c.className="os-dock__separator os-dock__separator--group",c.setAttribute("aria-hidden","true"),this.itemHost.appendChild(c)}o=!0}const r=this.createItemButton(i);this.itemElements.set(i.id,r),this.itemHost.appendChild(r),s++;const a=this.badgeOverrides.get(i.id);if(a!==void 0){const c=r.querySelector(".os-dock__item-primary");Mf(c??r,a)}const l=this.artOverrides.get(i.id);l&&this._paintArt(r,i.id,l),T(b.DOCK_TILE_RENDERED,{...n,item:i,isSystem:!1,el:r})}this.updateActiveStates(),T(b.DOCK_AFTER_RENDER,{...n,items:t,tileElements:this.itemElements})}hasItems(){return this.itemElements.size>0||this.systemItemElements.size>0}removeSystemItem(t){const n=this.systemItemElements.get(t);n&&(n.remove(),this.systemItemElements.delete(t),this.systemItems=this.systemItems.filter(o=>o.id!==t),this.badgeOverrides.delete(t),this.artOverrides.delete(t),this.systemSeparator&&!this.systemHost.querySelector(".os-dock__item")&&(this.systemSeparator.remove(),this.systemSeparator=null),T(b.DOCK_ITEM_REMOVED,{id:t,placement:this.rail}))}setBadge(t,n){const o=this._resolveTileElement(t);if(!o)return;const s=Math.max(0,Math.floor(Number(n)||0));s===0?this.badgeOverrides.delete(t):this.badgeOverrides.set(t,s);const i=o.querySelector(".os-dock__item-primary");Mf(i??o,s),Ee.publish("os/badge-changed",{itemId:t,count:s,rail:this.rail})}clearBadge(t){this.setBadge(t,0)}setArt(t,n){if(!n){if(!this.artOverrides.delete(t))return;const s=this._resolveTileElement(t),i=this._declaredIcon(t);s&&i&&this._paintArt(s,t,i),Ee.publish("os/art-changed",{itemId:t,icon:"",rail:this.rail});return}this.artOverrides.set(t,n);const o=this._resolveTileElement(t);o&&(this._paintArt(o,t,n),Ee.publish("os/art-changed",{itemId:t,icon:n,rail:this.rail}))}_declaredIcon(t){const n=this.items.find(s=>s.id===t);if(n)return n.icon;const o=this.systemItems.find(s=>s.id===t);return o?o.icon:""}_paintArt(t,n,o){const s=t.querySelector(".os-dock__item-primary")??t,i=this.resolveIcon(o,this._declaredTitle(n),void 0,Hs(n)),r=s.querySelector(".os-dock__item-mask, .os-dock__item-svg, .dashicons, img");r?r.replaceWith(i):s.prepend(i)}_declaredTitle(t){const n=this.items.find(s=>s.id===t);if(n)return n.title;const o=this.systemItems.find(s=>s.id===t);return o?o.title:""}setAttention(t,n,o={}){const s=this._resolveTileElement(t);if(!s)return;const i=this.attentionTimers.get(t);if(i!==void 0&&(window.clearTimeout(i),this.attentionTimers.delete(t)),s.classList.remove("os-dock__item--attention-pulse","os-dock__item--attention-shake","os-dock__item--attention-bounce","os-dock__item--intensity-subtle","os-dock__item--intensity-normal","os-dock__item--intensity-strong"),n===null)return;s.classList.add(`os-dock__item--attention-${n}`);const r=o.intensity??"normal";s.classList.add(`os-dock__item--intensity-${r}`);const a=o.durationMs??4e3;if(a>0){const l=window.setTimeout(()=>{this.attentionTimers.delete(t),this.setAttention(t,null)},a);this.attentionTimers.set(t,l)}}_resolveTileElement(t){return this.itemElements.get(t)??this.systemItemElements.get(t)??null}_systemSlotFor(t,n){const o=t.order??0;for(const s of Array.from(n.children))if(s instanceof HTMLElement&&s.dataset.systemOrder!==void 0&&Number(s.dataset.systemOrder)>o)return s;return null}appendSystemItem(t){this.systemItems.push(t);const n=this.systemHost;this.systemSeparator||(this.systemSeparator=document.createElement("div"),this.systemSeparator.className="os-dock__separator",this.systemSeparator.setAttribute("aria-hidden","true"),this.systemHost.appendChild(this.systemSeparator));const o=this.createSystemItemButton(t);this.systemItemElements.set(t.id,o);const s=this.artOverrides.get(t.id);s&&this._paintArt(o,t.id,s),o.dataset.systemOrder=String(t.order??0),n.insertBefore(o,this._systemSlotFor(t,n)),this.updateActiveStates(),T(b.DOCK_TILE_RENDERED,{...this.buildHookContextBase(),item:t,isSystem:!0,el:o})}render(){if($e.activeDragReset){const o=$e.activeDragReset;$e.activeDragReset=null,o()}for(const o of this.peekTeardowns.values())o();this.peekTeardowns.clear(),this.itemHost.innerHTML="";const t=this.buildHookContextBase();T(b.DOCK_BEFORE_RENDER,{...t,items:this.items,tileElements:this.itemElements});let n=!1;for(const o of this.items){if(!n&&o.isCore===!1){if(this.itemHost.childElementCount>0){const i=document.createElement("div");i.className="os-dock__separator os-dock__separator--group",i.setAttribute("aria-hidden","true"),this.itemHost.appendChild(i)}n=!0}const s=this.createItemButton(o);this.itemElements.set(o.id,s),this.itemHost.appendChild(s),T(b.DOCK_TILE_RENDERED,{...t,item:o,isSystem:!1,el:s})}T(b.DOCK_AFTER_RENDER,{...t,items:this.items,tileElements:this.itemElements})}createSystemItemButton(t){const n={...this.buildHookContextBase(),item:t,isSystem:!0},o=document.createElement("div"),s=["os-dock__item","os-dock__item--system"],i=V(b.DOCK_TILE_CLASS,s,n);o.className=i.join(" "),o.dataset.systemId=t.id,t.submenu&&t.submenu.length>0&&(o.dataset.constellationId=t.id);const r=document.createElement("button");r.className="os-dock__item-primary",r.setAttribute("type","button"),r.setAttribute("aria-label",t.title),r.appendChild(this.resolveIcon(t.icon,t.title,void 0,Hs(t.id))),r.addEventListener("click",()=>t.onOpen()),o.appendChild(r),this.bindTooltipFiltered(o,t.title,n);const a=Tf({tile:o,item:{id:t.id,title:t.title,icon:t.icon,url:""},getInstances:()=>this.windowManager.getAllByBaseIdOnActiveDesktop(t.id),enableGhost:!!t.multi,windowManager:this.windowManager,getOrientation:()=>this.orientation,openNew:()=>{(t.onOpenNew??t.onOpen)()},suppressTooltip:l=>{l&&this.tooltip.classList.remove("os-dock__tooltip--visible")}});return this.peekTeardowns.set(`system:${t.id}`,a),V(b.DOCK_TILE_ELEMENT,o,n)}createItemButton(t){const n={...this.buildHookContextBase(),item:t,isSystem:!1},o=document.createElement("div"),s=["os-dock__item"];t.multi&&s.push("os-dock__item--multi");const i=V(b.DOCK_TILE_CLASS,s,n);o.className=i.join(" "),o.dataset.menuSlug=t.id;const r=document.createElement("button");r.className="os-dock__item-primary",r.setAttribute("type","button"),r.setAttribute("aria-label",t.title);const a=this.resolveIcon(t.icon,t.title,t.url,Hs(t.id));if(r.appendChild(a),t.badge>0){const d=t.badge>99?"99+":String(t.badge),u=document.createElement("span");u.className="os-dock__badge",u.textContent=d,u.setAttribute("aria-label",le(nn("%d update","%d updates",t.badge),t.badge)),r.appendChild(u)}r.addEventListener("click",()=>{this.openPage(t)}),o.addEventListener("contextmenu",d=>{d.preventDefault(),Of({x:d.clientX,y:d.clientY,id:t.id,title:t.title,surface:"dock",pluginFile:t.pluginFile??null,pluginName:t.pluginName??null})}),o.appendChild(r),this.bindTooltipFiltered(o,t.title,n);const l=this.resolveItemBaseId(t),c=Tf({tile:o,item:{id:t.id,title:t.title,icon:t.icon,url:t.url},getInstances:()=>this.windowManager.getAllByBaseIdOnActiveDesktop(l),enableGhost:!0,windowManager:this.windowManager,getOrientation:()=>this.orientation,openNew:()=>this.openNewInstance(t),suppressTooltip:d=>{d&&this.tooltip.classList.remove("os-dock__tooltip--visible")}});return this.peekTeardowns.set(t.id,c),this.attachDragReorder(o,t.id),V(b.DOCK_TILE_ELEMENT,o,n)}attachDragReorder(t,n){let i=!1,r=0,a=0,l=[],c=null,d=-1,u=null,f=!1;const p=()=>{i=!1,t.classList.remove("os-dock__item--dragging"),t.style.transform="",t.style.transition="",document.removeEventListener("pointermove",y),document.removeEventListener("pointerup",W),document.removeEventListener("pointercancel",P),document.removeEventListener("keydown",$,!0),window.removeEventListener("blur",k),document.removeEventListener("visibilitychange",w),d=-1,u=null},g=E=>!!E&&E instanceof HTMLElement&&E.classList.contains("os-dock__item")&&!E.classList.contains("os-dock__item--system")&&!!E.dataset.menuSlug,m=E=>{for(const _ of Array.from(this.itemHost.children))_ instanceof HTMLElement&&_!==t&&g(_)&&E(_)},h=()=>{const E=[];for(const _ of Array.from(this.itemHost.children))g(_)&&E.push(_.dataset.menuSlug);return E},v=E=>{m(_=>{const O=E.get(_);if(!O)return;const H=_.getBoundingClientRect(),G=O.left-H.left,j=O.top-H.top;if(Math.abs(G)<.5&&Math.abs(j)<.5)return;_.style.transition="none",_.style.transform=`translate(${G}px, ${j}px)`,_.offsetHeight,_.style.transition="transform 200ms cubic-bezier(0.2, 0.7, 0.3, 1)",_.style.transform="";const L=()=>{_.style.transition="",_.style.transform="",_.removeEventListener("transitionend",L)};_.addEventListener("transitionend",L)})},y=E=>{if(d!==-1&&E.pointerId!==d)return;if(!i){const A=E.clientX-r,R=E.clientY-a;if(A*A+R*R<5*5)return;i=!0,l=h(),c=t.nextSibling,u=t.getBoundingClientRect(),t.classList.add("os-dock__item--dragging"),this.tooltip.classList.remove("os-dock__tooltip--visible")}if(!u)return;const _=E.clientX-r,O=E.clientY-a;t.style.transform=`translate(${_}px, ${O}px)`;const G=document.elementFromPoint(E.clientX,E.clientY)?.closest(".os-dock__item");if(!G||G===t||!g(G))return;const j=G.getBoundingClientRect();let L;this.orientation==="bottom"?L=E.clientX<j.left+j.width/2:L=E.clientY<j.top+j.height/2;const F=new Map;m(A=>{F.set(A,A.getBoundingClientRect())});let D=!1;if(L?G!==t.nextSibling&&(this.itemHost.insertBefore(t,G),D=!0):G.nextSibling!==t&&(this.itemHost.insertBefore(t,G.nextSibling),D=!0),D){t.style.transform="";const A=t.getBoundingClientRect();r=A.left+A.width/2,a=A.top+A.height/2,t.style.transform=`translate(${E.clientX-r}px, ${E.clientY-a}px)`,v(F)}},x=()=>{t.classList.remove("os-dock__item--dragging"),t.style.transform="",t.style.transition="",document.removeEventListener("pointermove",y),document.removeEventListener("pointerup",W),document.removeEventListener("pointercancel",P),document.removeEventListener("keydown",$,!0),window.removeEventListener("blur",k),document.removeEventListener("visibilitychange",w),d=-1,u=null,i=!1,$e.activeDragReset===p&&($e.activeDragReset=null)},M=()=>{t.style.transition="transform 200ms cubic-bezier(0.2, 0.7, 0.3, 1)",t.style.transform="";const E=()=>{t.style.transition="",t.removeEventListener("transitionend",E)};t.addEventListener("transitionend",E)},I=E=>{const _=window.wp?.os;if(!_?.getOsSettings||!_?.updateOsSettings)return;const O=_.getOsSettings().dockOrder,H=new Set(E),G=[];let j=!1;for(const L of O){if(H.has(L)){j||(G.push(...E),j=!0);continue}G.push(L)}j||G.push(...E),_.updateOsSettings({dockOrder:G})},W=E=>{if(d!==-1&&E.pointerId!==d)return;if(!i){x();return}f=!0;const _=h();M(),x(),_.length===l.length&&_.every((H,G)=>H===l[G])||I(_),setTimeout(()=>{f=!1},200)},P=E=>{if(!(E&&d!==-1&&E.pointerId!==d)){if(i&&c!==void 0){const _=new Map;m(O=>{_.set(O,O.getBoundingClientRect())}),this.itemHost.insertBefore(t,c),v(_)}M(),x()}},$=E=>{E.key==="Escape"&&P()},k=()=>P(),w=()=>{document.visibilityState!=="visible"&&P()};t.addEventListener("pointerdown",E=>{if(E.button===0){if($e.activeDragReset){const _=$e.activeDragReset;$e.activeDragReset=null,_()}(i||d!==-1)&&p(),r=E.clientX,a=E.clientY,d=E.pointerId,i=!1,$e.activeDragReset=p,document.addEventListener("pointermove",y),document.addEventListener("pointerup",W),document.addEventListener("pointercancel",P),document.addEventListener("keydown",$,!0),window.addEventListener("blur",k),document.addEventListener("visibilitychange",w)}}),t.addEventListener("click",E=>{f&&(E.preventDefault(),E.stopImmediatePropagation())},!0)}resolveIcon(t,n,o,s){let i=!1,r=null;if(s){const a=Bs(s);a!==null&&(t=a,i=!0),r=Or(s)}if(r!==null&&!t.startsWith("dashicons-")){const a=this._makeMaskSpan();if(ro(a,t,r))return a}if(t.startsWith("dashicons-")&&(i||t!=="dashicons-admin-generic")){const a=document.createElement("span");return a.className=`dashicons ${t}`,a.setAttribute("aria-hidden","true"),r!==null&&(a.style.color=r),a}if(t.startsWith("data:image/svg+xml;base64,")){const a=t.slice(26);if(/^[A-Za-z0-9+/=]+$/.test(a))return this._makeSvgIcon(t)}if(t.startsWith("url("))return this._makeSvgIcon(t);if(t.startsWith("http://")||t.startsWith("https://")){const a=document.createElement("img");return a.className="os-dock__item-img",a.src=t,a.alt="",a.setAttribute("aria-hidden","true"),a}if(o&&!i){const a=this._extractNativeMenuIcon(o);if(a)return a}if(t==="dashicons-admin-generic"){const a=document.createElement("span");return a.className="dashicons dashicons-admin-generic",a.setAttribute("aria-hidden","true"),a}return this.createLetterBadge(n)}_makeMaskSpan(){const t=document.createElement("span");return t.className="os-dock__item-mask",t.setAttribute("aria-hidden","true"),t.style.width="var( --os-dock-icon-size, 20px )",t.style.height="var( --os-dock-icon-size, 20px )",t.style.display="block",t.style.flexShrink="0",t}_makeSvgIcon(t){const n=/^url\(\s*(['"]?)(.+?)\1\s*\)$/.exec(t),o=n?n[2]:t,s=this._makeMaskSpan();if(ro(s,o,"currentColor"))return s;const i=document.createElement("span");return i.className="os-dock__item-svg",i.style.backgroundImage=t.startsWith("url(")?t:`url("${t}")`,i.style.backgroundSize="contain",i.style.backgroundRepeat="no-repeat",i.style.backgroundPosition="center",i.setAttribute("aria-hidden","true"),i}_extractNativeMenuIcon(t){const n=document.getElementById("adminmenu");if(!n)return null;let o;try{const f=new URL(t,window.location.href);o=(f.pathname.split("/").pop()||"")+f.search}catch{return null}if(!o)return null;const s=n.querySelectorAll("li.menu-top > a");let i=null;for(const f of Array.from(s))if(f.href.endsWith(o)){i=f.closest("li.menu-top");break}if(!i)return null;const r=i.querySelector(".wp-menu-image");if(!r)return null;const a=r.querySelector("img");if(a&&a.src){const f=document.createElement("img");return f.className="os-dock__item-img",f.src=a.src,f.alt="",f.setAttribute("aria-hidden","true"),f}const l=r.className.match(/\bdashicons-[\w-]+\b/);if(l&&l[0]!=="dashicons-before"){const f=document.createElement("span");return f.className=`dashicons ${l[0]}`,f.setAttribute("aria-hidden","true"),f}const d=window.getComputedStyle(r,"::before").backgroundImage;if(d&&d!=="none"&&!d.includes('url("")'))return this._makeSvgIcon(d);const u=window.getComputedStyle(r).backgroundImage;return u&&u!=="none"&&!u.includes('url("")')?this._makeSvgIcon(u):null}createLetterBadge(t){const n=document.createElement("span");n.className="os-dock__item-letter",n.setAttribute("aria-hidden","true");const o=t.trim(),s=o?Array.from(o)[0]:"?";n.textContent=s.toUpperCase();const i=fn(o);return n.style.background=`linear-gradient(135deg, hsl(${i} 62% 55%), hsl(${(i+24)%360} 58% 42%))`,n}bindTooltipFiltered(t,n,o){const s=V(b.DOCK_TILE_TOOLTIP,n,o);t.dataset.dockTooltip=s,s!==""&&(t.addEventListener("pointerenter",()=>{this.positionTooltip(t,s),this.tooltip.classList.add("os-dock__tooltip--visible")}),t.addEventListener("pointerleave",()=>{this.tooltip.classList.remove("os-dock__tooltip--visible")}))}positionTooltip(t,n){const o=t.getBoundingClientRect();this.tooltip.textContent=n,this.orientation==="bottom"?(this.tooltip.style.left=`${o.left+o.width/2}px`,this.tooltip.style.top=`${o.top-14}px`):this.orientation==="right"?(this.tooltip.style.top=`${o.top+o.height/2-14}px`,this.tooltip.style.left=`${o.left}px`):(this.tooltip.style.top=`${o.top+o.height/2-14}px`,this.tooltip.style.left=`${o.right+8}px`)}openPage(t){if(t.id.startsWith("dock:")){const o=t.id.slice(5),i=window.openStationConfig?.desktopIcons?.find(r=>r.id===o);if(i?.window){window.wp?.os?.openWindow?.(i.window);return}if(i?.url){if(pn(i.url))return;const r=this.deriveWindowId(i.url);this.windowManager.open({id:r,baseId:r,url:i.url,parentUrl:i.url,title:i.title,icon:i.icon.startsWith("dashicons-")?i.icon:"dashicons-admin-generic",submenu:[],multi:!1});return}return}if(pn(t.url)||Ge(t.url))return;const n=this.deriveWindowId(t.url);this.windowManager.open({id:n,baseId:n,url:t.url,parentUrl:t.url,title:t.title,icon:t.icon.startsWith("dashicons-")?t.icon:"dashicons-admin-generic",submenu:t.submenu,selfLabel:t.selfLabel,multi:!!t.multi})}openNewInstance(t){if(pn(t.url))return;const n=window.wp?.os?.openNewWindow;if(t.windowId&&!t.url&&n?.(t.windowId,{source:"dock-peek"}))return;const o=Zr(t.url);if(o&&n?.(o,{source:"dock-peek"}))return;const s=this.deriveWindowId(t.url);this.windowManager.openNew({id:s,baseId:s,url:t.url,parentUrl:t.url,title:t.title,icon:t.icon.startsWith("dashicons-")?t.icon:"dashicons-admin-generic",submenu:t.submenu,selfLabel:t.selfLabel,multi:!0})}deriveWindowId(t){return ae(t,this.adminUrl)}resolveItemBaseId(t){if(t.windowId)return t.windowId;if(t.id.startsWith("dock:")){const o=t.id.slice(5),i=window.openStationConfig?.desktopIcons?.find(r=>r.id===o);if(i?.window)return i.window;if(i?.url)return Zr(i.url)??this.deriveWindowId(i.url)}return Zr(t.url)??this.deriveWindowId(t.url)}bindWindowEvents(){const t=()=>this.updateActiveStates();this.boundRefresh=t,document.addEventListener("os-window-opened",t),document.addEventListener("os-window-closed",t),document.addEventListener("os-window-focused",t),window.wp?.hooks?.addAction?.("os.os.switched",this.hooksNamespace,t),window.wp?.hooks?.addAction?.("os.os.closed",this.hooksNamespace,t),window.wp?.hooks?.addAction?.(b.WINDOW_MINIMIZED,this.hooksNamespace,t),window.wp?.hooks?.addAction?.(b.WINDOW_RESTORED,this.hooksNamespace,t),window.wp?.hooks?.addAction?.(b.DOCK_REFRESH_ACTIVE,this.hooksNamespace,t)}destroy(){document.removeEventListener("os-window-opened",this.boundRefresh),document.removeEventListener("os-window-closed",this.boundRefresh),document.removeEventListener("os-window-focused",this.boundRefresh),window.wp?.hooks?.removeAction?.("os.os.switched",this.hooksNamespace),window.wp?.hooks?.removeAction?.("os.os.closed",this.hooksNamespace),window.wp?.hooks?.removeAction?.(b.WINDOW_MINIMIZED,this.hooksNamespace),window.wp?.hooks?.removeAction?.(b.DOCK_REFRESH_ACTIVE,this.hooksNamespace),window.wp?.hooks?.removeAction?.(b.WINDOW_RESTORED,this.hooksNamespace);for(const t of this.attentionTimers.values())window.clearTimeout(t);this.attentionTimers.clear();for(const t of this.peekTeardowns.values())t();for(this.peekTeardowns.clear(),this.tooltip.remove();this.container.firstChild;)this.container.removeChild(this.container.firstChild);this.itemElements.clear(),this.systemItemElements.clear(),this.systemItems=[],this.systemSeparator=null,this.container.removeAttribute("data-os-dock-placement")}updateActiveStates(){const t=this.windowManager.getFocused(),n=this.windowManager.getActiveDesktopId(),o=i=>(i.config.desktopId||n)===n,s=i=>i.state==="minimized";for(const i of this.items){const r=this.itemElements.get(i.id);if(!r)continue;const a=this.resolveItemBaseId(i);let l=this.windowManager.getAllByBaseId(a).filter(o);if(l.length===0&&i.url){const f=this.deriveWindowId(i.url);l=this.windowManager.getAll().filter(p=>{const g=p.config.baseId||p.id;if(g===a||g===f||g===i.id||p.config.parentUrl&&this.deriveWindowId(p.config.parentUrl)===f)return!0;if(p.config.url){const m=this.deriveWindowId(p.config.url);return m===a||m===f}return!1}).filter(o)}const c=l.length>0,d=c&&l.every(s),u=!!t&&o(t)&&!s(t)&&l.some(f=>f.id===t.id||(t.config.baseId||t.id)===a);r.classList.toggle("os-dock__item--active",c),r.classList.toggle("os-dock__item--focused",u),r.classList.toggle("os-dock__item--all-minimized",d),r.classList.toggle("os-dock__item--stacked",c&&l.length>1)}for(const i of this.systemItems){const r=this.systemItemElements.get(i.id);if(!r)continue;const a=this.windowManager.getById(i.id),l=i.isOpen?i.isOpen():!!a,c=!!a&&s(a),d=!!t&&t.id===i.id&&!s(t);r.classList.toggle("os-dock__item--active",l),r.classList.toggle("os-dock__item--focused",d),r.classList.toggle("os-dock__item--all-minimized",c)}this.updateShowDesktopBodyClass()}updateShowDesktopBodyClass(){const t=this.windowManager.getActiveDesktopId(),n=this.windowManager.getAll().filter(s=>(s.config.desktopId||t)===t),o=n.length>0&&n.every(s=>s.state==="minimized");document.body.classList.toggle("os-show-desktop-active",o)}};$e.instanceCounter=0,$e.activeDragReset=null;let oi=$e;function Mf(e,t){const n=e.querySelector(":scope > .os-dock__badge");if(t<=0){n?.remove();return}const o=t>99?"99+":String(t);if(n){n.textContent!==o&&(n.textContent=o),n.setAttribute("aria-label",le(nn("%d notification","%d notifications",t),t));return}const s=document.createElement("span");s.className="os-dock__badge",s.textContent=o,s.setAttribute("aria-label",le(nn("%d notification","%d notifications",t),t)),e.appendChild(s)}const Pf=Symbol.for("desktop-mode/default-dock-rail-renderer/dock"),aa={id:"default",label:"Icon strip",description:"The shipped baseline — icon tiles with badges, tooltips, multi-instance chips, and attention animations.",icon:"dashicons-menu-alt",apiVersion:1,mount(e){const t=new oi(e.container,e.windowManager,e.items,e.adminUrl,e.orientation);return{[Pf]:t,replaceItems:o=>t.replaceItems(o),appendSystemItem:o=>t.appendSystemItem(o),removeSystemItem:o=>t.removeSystemItem(o),setBadge:(o,s)=>t.setBadge(o,s),setAttention:(o,s,i)=>t.setAttention(o,s,i),setOrientation:o=>t.setOrientation(o),destroy:()=>t.destroy()}}};function la(e){if(!e)return null;const n=e[Pf];return n instanceof oi?n:null}function Ek(){ud(aa)}const Wf="os-desktop-theme-css",kk="os-desktop-theme-inline-css",ca="data-os-desktop-theme-css",$f="os-desktop-theme-changed";function Uf(){return document.getElementById("os-shell")}function Ff(){const e=[];for(const t of[Wf,kk]){const n=document.getElementById(t);n&&e.push(n)}return document.querySelectorAll(`[${ca}]`).forEach(t=>{e.includes(t)||e.push(t)}),e}function Bf(){for(const e of Ff())e.remove()}function Sk(e){const t=Uf();return!t||t.getAttribute("data-os-desktop-theme")!==e?!1:Ff().length>0}function Hf(e){const t=document.body;if(!t)return;const n=[];t.classList.forEach(o=>{o.startsWith("os-desktop-theme-")&&n.push(o)});for(const o of n)(e===null||o!==`os-desktop-theme-${e}`)&&t.classList.remove(o);e!==null&&t.classList.add(`os-desktop-theme-${e}`)}function da(e){const t=Fs(),n=t.state.activeId,o=typeof e=="string"?e.trim():"",s=o===""?null:Xd(o),i=s?s.slug:null;if(i===n)return;const r=Uf();if(!s)r?.removeAttribute("data-os-desktop-theme"),Hf(null),Bf(),t.setState({activeId:null,activeIcons:null,activeIconColors:null});else{if(!Sk(s.slug)){if(Bf(),s.cssUrl!==""){const l=document.createElement("link");l.id=Wf,l.rel="stylesheet",l.href=s.cssUrl,l.setAttribute(ca,s.slug),document.head.appendChild(l)}else if(s.cssText!==""){const l=document.createElement("style");l.setAttribute(ca,s.slug),l.textContent=s.cssText,document.head.appendChild(l)}}r?.setAttribute("data-os-desktop-theme",s.slug),Hf(s.slug),t.setState({activeId:s.slug,activeIcons:s.icons,activeIconColors:s.iconColors})}const a={themeId:i,previous:n};T(b.DESKTOP_THEME_CHANGED,a),typeof document<"u"&&document.dispatchEvent(new CustomEvent($f,{detail:a}))}function Y(e,...t){return{__wpdHtml:!0,strings:e,values:t}}function Ak(e){return!!e&&e.__wpdHtml===!0}const Ck="$$wpd$$",De=/\$\$wpd\$\$(\d+)\$\$/g;function Ik(e){let t=e[0];for(let n=1;n<e.length;n++)t+=`${Ck}${n-1}$$`+e[n];return t}const zf=new WeakMap;function Gf(e){const t=zf.get(e);if(t)return t;const n=document.createElement("template");n.innerHTML=Ik(e);const o=[],s=(a,l)=>{if(a.nodeType===Node.ELEMENT_NODE){const u=a;for(const f of Array.from(u.attributes)){const p=f.name,g=f.value,m=p[0];if(De.test(g))if(De.lastIndex=0,m==="@"){const h=De.exec(g);De.lastIndex=0,o.push({path:l,kind:"event",name:p.slice(1),valueIndex:h?Number(h[1]):0}),u.removeAttribute(p)}else if(m==="."){const h=De.exec(g);De.lastIndex=0,o.push({path:l,kind:"prop",name:p.slice(1),valueIndex:h?Number(h[1]):0}),u.removeAttribute(p)}else if(m==="?"){const h=De.exec(g);De.lastIndex=0,o.push({path:l,kind:"bool",name:p.slice(1),valueIndex:h?Number(h[1]):0}),u.removeAttribute(p)}else{const h=[],v=[];let y=0,x;for(De.lastIndex=0;(x=De.exec(g))!==null;)h.push(g.slice(y,x.index)),v.push(Number(x[1])),y=x.index+x[0].length;h.push(g.slice(y)),o.push({path:l,kind:"attr",name:p,template:h,valueIndices:v}),u.setAttribute(p,"")}}}const c=Array.from(a.childNodes);let d=0;for(let u=0;u<c.length;u++){const f=c[u],p=u+d;if(f.nodeType===Node.TEXT_NODE){const g=f.textContent||"";if(!De.test(g)){De.lastIndex=0;continue}De.lastIndex=0;const m=f.parentNode;let h=0,v;const y=[],x=[];for(De.lastIndex=0;(v=De.exec(g))!==null;){v.index>h&&y.push(document.createTextNode(g.slice(h,v.index)));const M=document.createTextNode("");y.push(M),x.push({path:[...l,p+y.length-1],kind:"node",valueIndex:Number(v[1])}),h=v.index+v[0].length}h<g.length&&y.push(document.createTextNode(g.slice(h)));for(const M of y)m.insertBefore(M,f);m.removeChild(f),d+=y.length-1,o.push(...x)}else s(f,[...l,p])}};s(n.content,[]);const r={template:n,buildParts:a=>{const l=[];for(const c of o){let d=a;for(const u of c.path)d=d.childNodes[u];c.kind==="node"?l.push({kind:"node",valueIndex:c.valueIndex,child:{anchor:d,state:null}}):c.kind==="attr"?l.push({kind:"attr",element:d,name:c.name,template:c.template,valueIndices:c.valueIndices}):c.kind==="event"?l.push({kind:"event",valueIndex:c.valueIndex,element:d,name:c.name}):c.kind==="prop"?l.push({kind:"prop",valueIndex:c.valueIndex,element:d,name:c.name}):c.kind==="bool"&&l.push({kind:"bool",valueIndex:c.valueIndex,element:d,name:c.name})}return l}};return zf.set(e,r),r}const jf=new WeakMap;function xk(e,t){for(const n of e.nodes)if(n.parentNode!==t)return!1;return!0}function Lk(e,t){const n=jf.get(t);if(n&&n.strings===e.strings&&xk(n,t)){si(n.parts,e.values);return}const o=Gf(e.strings),s=o.template.content.cloneNode(!0),i=o.buildParts(s),r=Array.from(s.childNodes);for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(s),si(i,e.values),jf.set(t,{strings:e.strings,parts:i,nodes:r})}function si(e,t){for(const n of e)if(n.kind==="node")ua(n.child,t[n.valueIndex]);else if(n.kind==="attr"){let o=n.template[0];for(let s=0;s<n.valueIndices.length;s++)o+=Vf(t[n.valueIndices[s]]),o+=n.template[s+1];o!==n.last&&(n.last=o,o===""?n.element.removeAttribute(n.name):n.element.setAttribute(n.name,o))}else if(n.kind==="event"){const o=t[n.valueIndex];o!==n.current&&(n.current&&n.element.removeEventListener(n.name,n.current),o&&n.element.addEventListener(n.name,o),n.current=o)}else if(n.kind==="prop"){const o=t[n.valueIndex];o!==n.last&&(n.last=o,n.element[n.name]=o)}else if(n.kind==="bool"){const o=!!t[n.valueIndex];o!==n.last&&(n.last=o,o?n.element.setAttribute(n.name,""):n.element.removeAttribute(n.name))}}function ua(e,t){if(t==null||t===!1){e.state&&(Ut(e.state),e.state=null);return}if(Array.isArray(t)){Rk(e,t);return}if(Ak(t)){Dk(e,t);return}if(t instanceof Node){Tk(e,t);return}Nk(e,Vf(t))}function Tk(e,t){const n=e.state;n?.shape==="node"&&n.node===t||(n&&Ut(n),ii(e,[t]),e.state={shape:"node",node:t})}function Nk(e,t){const n=e.state;if(n?.shape==="text"){n.text!==t&&(n.node.textContent=t,n.text=t);return}n&&Ut(n);const o=document.createTextNode(t);ii(e,[o]),e.state={shape:"text",node:o,text:t}}function Dk(e,t){const n=e.state;if(n?.shape==="template"&&n.strings===t.strings){si(n.parts,t.values);return}n&&Ut(n);const o=Gf(t.strings),s=o.template.content.cloneNode(!0),i=o.buildParts(s),r=Array.from(s.childNodes);ii(e,[s]),si(i,t.values),e.state={shape:"template",strings:t.strings,parts:i,nodes:r}}function Rk(e,t){const n=e.state;if(n?.shape==="array"&&n.entries.length===t.length){for(let s=0;s<t.length;s++)ua(n.entries[s],t[s]);return}n&&Ut(n);const o=[];for(const s of t){const i=document.createTextNode("");ii(e,[i]);const r={anchor:i,state:null};ua(r,s),o.push(r)}e.state={shape:"array",entries:o}}function ii(e,t){const n=e.anchor.parentNode;if(n)for(const o of t)n.insertBefore(o,e.anchor)}function Ut(e){if(e.shape==="text"){e.node.remove();return}if(e.shape==="template"){for(const t of e.parts)t.kind==="node"&&t.child.state&&(Ut(t.child.state),t.child.state=null);for(const t of e.nodes)t.parentNode&&t.parentNode.removeChild(t);return}if(e.shape==="node"){e.node.parentNode&&e.node.parentNode.removeChild(e.node);return}for(const t of e.entries)t.state&&Ut(t.state),t.anchor.remove()}function Vf(e){return e==null||e===!1?"":String(e)}const Lt=class Lt extends HTMLElement{constructor(){super(),this._renderScheduled=!1,this._propValues={},this.constructor.shadow?(this.attachShadow({mode:"open"}),this._renderRoot=this.shadowRoot):this._renderRoot=this,this._installPropAccessors()}static get observedAttributes(){return this.props.map(qf)}connectedCallback(){this._adoptStyles(),this.requestUpdate()}attributeChangedCallback(t,n,o){if(n===o)return;const s=Ok(t);this._propValues[s]=o,this.requestUpdate()}get classNames(){return Array.from(this.classList)}set classNames(t){if(t==null){this.removeAttribute("class");return}const o=(Array.isArray(t)?t:String(t).split(/\s+/)).map(s=>String(s).trim()).filter(s=>s!=="");this.className=o.join(" ")}requestUpdate(){this._scheduleRender()}emit(t,n){return this.dispatchEvent(new CustomEvent(t,{detail:n,bubbles:!0,composed:!0}))}_installPropAccessors(){const t=this.constructor;for(const n of t.props){if(Object.getOwnPropertyDescriptor(this,n))continue;const o=qf(n);Object.defineProperty(this,n,{get:()=>n in this._propValues?this._propValues[n]:this.getAttribute(o),set:s=>{let i;s==null||s===!1?i=null:s===!0?i="":i=String(s),this._propValues[n]=i,i===null?this.removeAttribute(o):this.setAttribute(o,i),this.requestUpdate()},enumerable:!0,configurable:!0})}}_scheduleRender(){this._renderScheduled||!this.isConnected||(this._renderScheduled=!0,queueMicrotask(()=>{this._renderScheduled=!1,this.isConnected&&Lk(this.render(),this._renderRoot)}))}_adoptStyles(){const t=this.constructor;if(t.styles.length!==0)if(t.shadow&&this.shadowRoot){const n=t.styles.map(o=>o.sheet).filter(o=>o!==null);if(this.shadowRoot.adoptedStyleSheets=n,n.length!==t.styles.length){for(const o of t.styles)if(!o.sheet){const s=document.createElement("style");s.textContent=o.cssText,this.shadowRoot.appendChild(s)}}}else this._adoptLightStyles(t)}_adoptLightStyles(t){if(!Lt._lightStylesAdopted.has(t)){Lt._lightStylesAdopted.add(t);for(const n of t.styles){const o=document.createElement("style");o.dataset.osUi=this.tagName.toLowerCase(),o.textContent=n.cssText,document.head.appendChild(o)}}}};Lt.props=[],Lt.styles=[],Lt.shadow=!0,Lt._lightStylesAdopted=new WeakSet;let Se=Lt;function Ie(e,t){customElements.get(e)||customElements.define(e,t)}function qf(e){return e.replace(/[A-Z]/g,t=>"-"+t.toLowerCase())}function Ok(e){return e.replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}const Mk=(()=>{try{return typeof new CSSStyleSheet().replaceSync=="function"}catch{return!1}})();function ce(e,...t){let n=e[0];for(let o=1;o<e.length;o++){const s=t[o-1];if(typeof s=="string"||typeof s=="number")n+=String(s);else if(s&&s.__wpdCss)n+=s.cssText;else throw new TypeError("[os-ui] css`` interpolations must be strings, numbers, or other css`` results. Got: "+typeof s);n+=e[o]}if(Mk){const o=new CSSStyleSheet;return o.replaceSync(n),{__wpdCss:!0,sheet:o,cssText:n}}return{__wpdCss:!0,sheet:null,cssText:n}}function Pk(e){const t=[],n=[];let o=null,s=e.parentElement;for(;s&&!(s===document.body||s===document.documentElement);){const r=s.id||"";if(r.startsWith("wp-window-")){o=r.slice(10);break}if(s.tagName.toLowerCase()==="os-tabpanel"){const a=s.getAttribute("for");a&&n.unshift(a)}s=s.parentElement}o&&t.push(fa(o));for(const r of n)t.push("tab-"+fa(r));const i=e.getAttribute("label");return i&&t.push(fa(i)),t.length===0?"os-unnamed":"os-"+t.filter(r=>r!=="").join("-")}function fa(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function Kf(e){if(e.id)return e.id;const t=Pk(e);return e.id=t,t}const ri=new Map;function Yf(e){if(!e||typeof e.id!="string"||e.id===""){typeof console<"u"&&console.warn("[openstation] Ignored invalid module registration:",e);return}if(typeof e.url!="string"||e.url===""){typeof console<"u"&&console.warn(`[openstation] Module "${e.id}" has no url; ignored.`);return}ri.set(e.id,e)}function Wk(){return Array.from(ri.keys())}async function pa(e){if(!e||e.length===0)return;const t=e.filter(n=>!ri.has(n));if(t.length>0)throw new Error(`[openstation] Unknown module(s) in needs: ${t.map(n=>`"${n}"`).join(", ")}. Known modules: ${Wk().join(", ")||"(none)"}.`);await Promise.all(e.map(n=>{const o=ri.get(n);return!o||o.isReady&&o.isReady()?Promise.resolve():ke(o.url)}))}const hn=ie("desktop-mode/wallpaper-lazy",()=>({pending:new Map,inflight:new Map}));function $k(e){hn.state.pending.set(e.id,e)}function ai(e){hn.state.pending.delete(e)}function Uk(e){return(window.openStationWallpapers||{})[e]??null}function Xf(e){const t=hn.state.inflight.get(e);if(t)return t;const n=hn.state.pending.get(e);if(!n)return Promise.resolve(null);const o=(async()=>{try{await ke(n.scriptUrl,{translations:n.scriptTranslations,l10n:n.scriptL10n,before:n.scriptBefore,after:n.scriptAfter})}catch(i){return T(b.SHELL_ERROR,{scope:"wallpaper-script-load",id:n.id,error:i}),null}let s=Uk(n.id);if(s&&!s.description&&n.description&&(s={...s,description:n.description}),!s)return T(b.SHELL_ERROR,{scope:"wallpaper-missing-def",id:n.id,error:new Error(`[openstation] No wallpaper def on window.openStationWallpapers["${n.id}"]. Script loaded but didn't publish a def — check the plugin's enqueue + global assignment.`)}),null;try{un(s)}catch(i){return T(b.SHELL_ERROR,{scope:"wallpaper-register",id:n.id,error:i}),null}return ai(n.id),s})().finally(()=>{hn.state.inflight.delete(e)});return hn.state.inflight.set(e,o),o}function Fk(e){return{id:e.id,label:e.label,type:"canvas",preview:e.preview!==""?e.preview:e.value,description:e.description||void 0,mount:async(t,n)=>{const o=await Xf(e.id);return!o||o.type!=="canvas"?()=>{}:(o.needs&&o.needs.length>0&&await pa(o.needs),o.mount(t,n))}}}const ct=ce`:host{--_holo-fill:var( --os-ui-holo-fill,${"linear-gradient( 124deg, #afa2e8 0%, #f5a8ea 46%, #8ee9f7 100% )"} );--_holo-ink:var( --os-ui-holo-ink,#0c0b0f );--_holo-sheen:var( --os-ui-holo-sheen,linear-gradient( 124deg,rgba( 159,214,255,0.1 ) 0%,rgba( 236,155,255,0.12 ) 34%,rgba( 242,82,252,0.1 ) 58%,rgba( 147,240,198,0.09 ) 100% ) );--_holo-edge:var( --os-ui-holo-edge,linear-gradient( 124deg,rgba( 154,242,255,0.7 ) 0%,rgba( 236,155,255,0.85 ) 38%,rgba( 242,82,252,0.7 ) 62%,rgba( 159,152,255,0.6 ) 100% ) );--_holo-edge-quiet:var( --os-ui-holo-edge-quiet,linear-gradient( 124deg,rgba( 154,242,255,0.22 ) 0%,rgba( 236,155,255,0.28 ) 38%,rgba( 242,82,252,0.22 ) 62%,rgba( 159,152,255,0.2 ) 100% ) );--_holo-glow:var( --os-ui-holo-glow,0 0 0 1px rgba( 242,82,252,0.28 ),0 2px 10px rgba( 242,82,252,0.22 ) );--_holo-glow-strong:var( --os-ui-holo-glow-strong,0 0 0 1px rgba( 242,82,252,0.42 ),0 4px 18px rgba( 242,82,252,0.38 ),0 1px 3px rgba( 12,11,15,0.6 ) );--_holo-track:var( --os-ui-holo-track,rgba( 255,251,255,0.16 ) );--_holo-track-edge:var( --os-ui-holo-track-edge,#8c8f94 );--_holo-ring-color:var( --os-ui-accent-dim,#2271b1 );--_holo-focus:var( --os-ui-focus-ring,0 0 0 2px rgba( 12,11,15,0.9 ),0 0 0 4px #f252fc,0 0 12px 2px rgba( 242,82,252,0.45 ) );--_holo-focus-field:var( --os-ui-focus-ring-field,0 0 0 1px #f252fc,0 0 0 4px rgba( 242,82,252,0.18 ) );--_holo-t:var( --os-ui-holo-transition,220ms );--_holo-t-fast:var( --os-ui-motion-fast,140ms );--_holo-t-slow:var( --os-ui-motion-slow,340ms );--_holo-t-ambient:var( --os-ui-motion-ambient,12s );--_holo-spring:var( --os-ui-ease-spring,cubic-bezier( 0.32,1.5,0.55,1 ) );--_holo-ease:var( --os-ui-ease-out,cubic-bezier( 0.22,0.9,0.28,1 ) );--_holo-loop:var( --os-ui-ease-loop,cubic-bezier( 0.45,0,0.55,1 ) )}`,Bk=ce` .os-holo-fill{background-color:transparent;background-image:var( --_holo-fill );background-size:220% 220%;background-position:22% 28%;background-repeat:no-repeat;color:var( --_holo-ink );transition:background-position var( --_holo-t ) ease,box-shadow var( --_holo-t ) ease,filter var( --_holo-t ) ease}.os-holo-fill:hover{background-position:74% 66%}.os-holo-fill:active{background-position:88% 82%;filter:brightness( 0.94 )}@media ( prefers-reduced-motion:reduce ){.os-holo-fill{transition-duration:1ms}.os-holo-fill:hover,.os-holo-fill:active{background-position:22% 28%}}`,ha=ce` .os-holo-sheen{position:relative;isolation:isolate}.os-holo-sheen::before{content:'';position:absolute;inset:0;z-index:-1;border-radius:inherit;background-image:var( --_holo-sheen );background-size:200% 200%;background-position:20% 30%;opacity:0;pointer-events:none;transition:opacity var( --_holo-t ) ease,background-position var( --_holo-t ) ease}.os-holo-sheen:hover::before,.os-holo-sheen:focus-visible::before{opacity:1;background-position:76% 68%}@media ( prefers-reduced-motion:reduce ){.os-holo-sheen::before{transition-duration:1ms}.os-holo-sheen:hover::before,.os-holo-sheen:focus-visible::before{background-position:20% 30%}}`,Zf=ce` .os-holo-edge{position:relative}.os-holo-edge::after{content:'';position:absolute;inset:0;border-radius:inherit;padding:1px;background-image:var( --_holo-edge-quiet );opacity:0;pointer-events:none;-webkit-mask:linear-gradient( #000 0 0 ) content-box,linear-gradient( #000 0 0 );-webkit-mask-composite:xor;mask:linear-gradient( #000 0 0 ) content-box,linear-gradient( #000 0 0 );mask-composite:exclude;transition:opacity var( --_holo-t ) ease}.os-holo-edge:hover::after,.os-holo-edge:focus-visible::after{background-image:var( --_holo-edge );opacity:1}.os-holo-edge.is-lit::after{background-image:var( --_holo-edge );opacity:1}@media ( prefers-reduced-motion:reduce ){.os-holo-edge::after{transition-duration:1ms}}`,Jf=ce` .os-holo-glint{position:absolute;inset:0;border-radius:inherit;overflow:hidden;pointer-events:none}.os-holo-glint::before{content:'';position:absolute;top:-60%;bottom:-60%;width:45%;inset-inline-start:-60%;background:linear-gradient( 90deg,transparent 0%,rgba( 255,251,255,0.14 ) 45%,rgba( 255,251,255,0.22 ) 50%,rgba( 255,251,255,0.14 ) 55%,transparent 100% );transform:rotate( 18deg ) translateX( 0 );opacity:0}:hover>.os-holo-glint::before,:focus-visible>.os-holo-glint::before,:host(:hover )>.os-holo-glint::before,:host(:focus-visible )>.os-holo-glint::before{animation:os-holo-glint var( --_holo-t-slow ) var( --_holo-ease )}@keyframes os-holo-glint{0%{opacity:0;transform:rotate( 18deg ) translateX( 0 )}15%{opacity:1}85%{opacity:1}100%{opacity:0;transform:rotate( 18deg ) translateX( 240vw )}}@media ( prefers-reduced-motion:reduce ){:hover>.os-holo-glint::before,:focus-visible>.os-holo-glint::before,:host(:hover )>.os-holo-glint::before,:host(:focus-visible )>.os-holo-glint::before{animation:none}}`,Qf=ce` .os-holo-ring{position:absolute;inset:0;border-radius:inherit;box-shadow:0 0 0 0 var( --_holo-ring-color );opacity:0;pointer-events:none}:active:not(:disabled )>.os-holo-ring,:host(:active:not( [ disabled ] ) )>.os-holo-ring{animation:os-holo-ring var( --_holo-t-slow ) var( --_holo-ease )}@keyframes os-holo-ring{0%{opacity:0.45;box-shadow:0 0 0 0 var( --_holo-ring-color )}100%{opacity:0;box-shadow:0 0 0 10px transparent}}@media ( prefers-reduced-motion:reduce ){:active:not(:disabled )>.os-holo-ring,:host(:active:not( [ disabled ] ) )>.os-holo-ring{animation:none}}`,ep=ce` .os-holo-shimmer{background-image:var( --_holo-fill );background-size:300% 300%;background-repeat:no-repeat;animation:os-holo-shimmer 2.4s var( --_holo-loop ) infinite}@keyframes os-holo-shimmer{0%{background-position:0% 50%}100%{background-position:100% 50%}}@media ( prefers-reduced-motion:reduce ){.os-holo-shimmer{animation:none;background-position:30% 50%}}`,Hk=ce` .os-holo-enter{animation:os-holo-enter var( --_holo-t ) var( --_holo-spring )}@keyframes os-holo-enter{from{opacity:0;transform:scale( 0.96 )}}@media ( prefers-reduced-motion:reduce ){.os-holo-enter{animation:none}}`,ma=ce` input:where(:not( [ type='checkbox' ] ):not( [ type='radio' ] ) ),select,textarea{transition:background-color var( --_holo-t ) ease,border-color var( --_holo-t ) ease,box-shadow var( --_holo-t ) ease}input:where(:not( [ type='checkbox' ] ):not( [ type='radio' ] ) ):hover:not(:disabled ),select:hover:not(:disabled ),textarea:hover:not(:disabled ){border-color:var( --os-ui-border-strong,#8c8f94 )}input:where(:not( [ type='checkbox' ] ):not( [ type='radio' ] ) ):focus,input:where(:not( [ type='checkbox' ] ):not( [ type='radio' ] ) ):focus-visible,select:focus,select:focus-visible,textarea:focus,textarea:focus-visible{outline:none;border-color:var( --os-ui-accent,#2271b1 );box-shadow:var( --_holo-focus-field )}input::placeholder,textarea::placeholder{color:var( --os-ui-fg-faint,#8c8f94 );opacity:1}input::selection,textarea::selection{background:var( --os-ui-selection-bg,rgba( 159,152,255,0.6 ) );color:var( --os-ui-selection-fg,#fffbff )}@media ( prefers-reduced-motion:reduce ){input:where(:not( [ type='checkbox' ] ):not( [ type='radio' ] ) ),select,textarea{transition-duration:1ms}}`,zk=ce` input[ type='checkbox' ],input[ type='radio' ]{appearance:none;-webkit-appearance:none;position:relative;flex:0 0 auto;box-sizing:border-box;width:16px;height:16px;margin:0;padding:0;border:1px solid var( --_holo-track-edge );border-radius:4px;background-color:var( --_holo-track );background-image:none;background-repeat:no-repeat;cursor:inherit;transition:background-color var( --_holo-t ) ease,border-color var( --_holo-t ) ease,box-shadow var( --_holo-t ) ease}input[ type='radio' ]{border-radius:50%}input[ type='checkbox' ]:hover:not(:disabled ),input[ type='radio' ]:hover:not(:disabled ){border-color:var( --os-ui-accent,#2271b1 )}input[ type='checkbox' ]:focus-visible,input[ type='radio' ]:focus-visible{outline:none;box-shadow:var( --_holo-focus )}input[ type='checkbox' ]:checked,input[ type='checkbox' ]:indeterminate,input[ type='radio' ]:checked{border-color:transparent;background-color:var( --os-ui-accent,#2271b1 )}input[ type='checkbox' ]:checked:focus-visible,input[ type='radio' ]:checked:focus-visible{box-shadow:var( --_holo-focus )}input[ type='checkbox' ]:checked::after{content:'';position:absolute;inset-inline-start:50%;top:46%;width:3.5px;height:7.5px;border:solid var( --os-ui-fg-on-accent,#fff );border-width:0 2px 2px 0;transform:translate( -50%,-50% ) rotate( 45deg );animation:os-holo-tick 180ms cubic-bezier( 0.3,1.4,0.6,1 )}input[ type='checkbox' ]:indeterminate::after{content:'';position:absolute;inset-inline-start:50%;top:50%;width:8px;height:2px;border:0;border-radius:1px;background:var( --os-ui-fg-on-accent,#fff );transform:translate( -50%,-50% )}input[ type='radio' ]:checked::after{content:'';position:absolute;inset-inline-start:50%;top:50%;width:6px;height:6px;border-radius:50%;background:var( --os-ui-fg-on-accent,#fff );transform:translate( -50%,-50% );animation:os-holo-tick 180ms cubic-bezier( 0.3,1.4,0.6,1 )}input[ type='checkbox' ]:disabled,input[ type='radio' ]:disabled{cursor:not-allowed}@keyframes os-holo-tick{from{opacity:0;transform:translate( -50%,-50% ) rotate( 45deg ) scale( 0.4 )}}@media ( prefers-reduced-motion:reduce ){input[ type='checkbox' ]:checked::after,input[ type='radio' ]:checked::after{animation:none}}`,tp=ce` @keyframes os-holo-drift{0%{background-position:16% 26%}50%{background-position:84% 74%}100%{background-position:16% 26%}}.os-holo-alive{animation:os-holo-drift var( --_holo-t-ambient ) var( --_holo-loop ) infinite}@media ( prefers-reduced-motion:reduce ){.os-holo-alive{animation:none}}`;ce` ${ct} ${Bk} ${ha} ${Zf} ${Jf} ${Qf} ${ep} ${Hk} ${ma} ${zk} ${tp} `;const Gk=ce` ${ct}:host{display:none;position:fixed;inset:0;align-items:center;justify-content:center;background:var( --os-ui-scrim,rgba( 0,0,0,0.45 ) );background-image:var( --os-ui-scrim-image,none );background-repeat:var( --os-ui-scrim-image-repeat,repeat );background-size:var( --os-ui-scrim-image-size,auto );background-position:var( --os-ui-scrim-image-position,center );backdrop-filter:blur( 2px );z-index:10000;--os-ui-fg:var( --os-ui-modal-text,#f0f0f1 );--os-ui-fg-muted:var( --os-ui-modal-text-muted,#a7aaad );--os-ui-border:var( --os-ui-modal-border,rgba( 255,255,255,0.25 ) );--os-window-bg:var( --os-ui-modal-field-bg,#2c3338 );--os-ui-button-bg-hover:var( --os-ui-modal-button-bg-hover,rgba( 255,255,255,0.08 ) );--os-ui-surface:var( --os-ui-modal-surface,#2c3338 );--os-ui-surface-elevated:var( --os-ui-modal-surface-elevated,#3c434a );--os-ui-border-strong:var( --os-ui-modal-border-strong,rgba( 255,255,255,0.35 ) );--os-ui-hover:var( --os-ui-modal-hover,rgba( 255,255,255,0.08 ) )}:host( [ open ] ){display:flex;animation:os-modal-scrim var( --_holo-t ) var( --_holo-ease )}:host( [ open ] ) .dialog{animation:os-modal-dialog var( --_holo-t ) var( --_holo-spring )}@keyframes os-modal-scrim{from{opacity:0}}@keyframes os-modal-dialog{from{opacity:0;transform:scale( 0.96 ) translateY( 8px )}}@media ( prefers-reduced-motion:reduce ){:host( [ open ] ),:host( [ open ] ) .dialog{animation:none}}.dialog{max-width:92vw;max-height:90vh;background-color:var( --os-ui-modal-bg,#1d2327 );background-image:var( --os-ui-dialog-bg-image,none );background-repeat:var( --os-ui-dialog-bg-image-repeat,repeat );background-size:var( --os-ui-dialog-bg-image-size,auto );background-position:var( --os-ui-dialog-bg-image-position,center );color:var( --os-ui-modal-fg,var( --os-fg,#fff ) );border:1px solid var( --os-ui-border,rgba( 255,255,255,0.08 ) );border-radius:10px;box-shadow:0 20px 50px rgba( 0,0,0,0.6 );display:flex;flex-direction:column;overflow:hidden}:host( [ size='sm' ] ) .dialog{width:min( 360px,92vw )}:host(:not( [ size ] ) ) .dialog,:host( [ size='md' ] ) .dialog{width:min( 540px,92vw )}:host( [ size='lg' ] ) .dialog{width:min( 760px,94vw )}.header{display:flex;align-items:center;gap:10px;padding:16px 20px 12px;border-bottom:1px solid var( --os-ui-border,rgba( 255,255,255,0.06 ) )}.title{margin:0;flex:1;font-size:15px;font-weight:600}.header-actions{display:flex;gap:6px}.header-actions::slotted( * ){margin-inline-start:6px}.close{background:transparent;border:0;color:inherit;font-size:18px;line-height:1;padding:4px 8px;border-radius:4px;cursor:pointer;opacity:0.7}.close:hover{opacity:1;background:var( --os-ui-hover,rgba( 255,255,255,0.08 ) )}.body{padding:16px 20px;overflow:auto;flex:1 1 auto;font-size:13px;line-height:1.5}.footer{padding:12px 20px 16px;border-top:1px solid var( --os-ui-border,rgba( 255,255,255,0.06 ) )}.footer slot{display:flex;justify-content:flex-end;gap:10px;flex-wrap:wrap}:host( [ mandatory ] ) .close{display:none}`,np='a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])',fs=class fs extends Se{constructor(){super(...arguments),this._prevFocus=null,this._onKey=t=>{if(t.key==="Escape"&&!this.hasAttribute("mandatory")){t.preventDefault(),this._cancel();return}if(t.key==="Tab"){const n=this._focusables();if(n.length===0)return;const o=n[0],s=n[n.length-1],i=this.ownerDocument,r=i?i.activeElement:null,a=t.composedPath()[0]||r;t.shiftKey&&a===o?(t.preventDefault(),s.focus()):!t.shiftKey&&a===s&&(t.preventDefault(),o.focus())}},this._onBackdrop=t=>{if(this.hasAttribute("mandatory"))return;const n=t.composedPath();(n.length>0?n[0]:t.target)===this&&this._cancel()}}connectedCallback(){super.connectedCallback(),this.setAttribute("role","dialog"),this.setAttribute("aria-modal","true"),this.addEventListener("keydown",this._onKey),this.addEventListener("click",this._onBackdrop)}disconnectedCallback(){this.removeEventListener("keydown",this._onKey),this.removeEventListener("click",this._onBackdrop)}attributeChangedCallback(t,n,o){if(super.attributeChangedCallback?.(t,n,o),t==="open"){if(o!==null){const s=this.ownerDocument;this._prevFocus=s?s.activeElement:null,queueMicrotask(()=>this._focusFirst())}else if(this._prevFocus){try{this._prevFocus.focus()}catch{}this._prevFocus=null}}}showModal(){this.setAttribute("open","")}hideModal(){this.removeAttribute("open")}_focusables(){const t=this.shadowRoot;if(!t)return[];const n=Array.from(this.querySelectorAll(np)),o=Array.from(t.querySelectorAll(np));return[...n,...o].filter(s=>s.offsetParent!==null||s.tagName==="BUTTON")}_focusFirst(){const t=this._focusables();t.length>0?t[0].focus():this.shadowRoot?.querySelector(".dialog")?.focus?.()}_cancel(){const t=new CustomEvent("os-modal-cancel",{bubbles:!0,cancelable:!0,composed:!0});this.dispatchEvent(t)&&this.hideModal()}render(){const t=this.getAttribute("title")??"",n=this.hasAttribute("mandatory");return Y` |
| 2 |
<div part="dialog" class="dialog" tabindex="-1"> |
| 3 |
${t?Y` |
| 4 |
<div class="header"> |
| 5 |
<h2 class="title">${t}</h2> |
| 6 |
<div class="header-actions"> |
| 7 |
<slot name="header-actions"></slot> |
| 8 |
${n?Y``:Y`<button |
| 9 |
type="button" |
| 10 |
class="close" |
| 11 |
aria-label="Close" |
| 12 |
@click=${()=>this._cancel()} |
| 13 |
>×</button>`} |
| 14 |
</div> |
| 15 |
</div> |
| 16 |
`:Y``} |
| 17 |
<div class="body"> |
| 18 |
<slot></slot> |
| 19 |
</div> |
| 20 |
<div class="footer"> |
| 21 |
<slot name="footer"></slot> |
| 22 |
</div> |
| 23 |
</div> |
| 24 |
`}};fs.props=["open","title","size","mandatory"],fs.styles=[Gk],fs.help=void 0;let ga=fs;Ie("os-modal",ga);const jk=ce` ${ct} ${ha} ${Zf} ${Jf} ${Qf} ${tp}:host{display:inline-flex}:host( [ fill-cell ] ){display:flex;width:100%}button{appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:var( --os-ui-button-padding,6px 12px );border-radius:var( --os-ui-button-border-radius,6px );font:inherit;font-weight:500;cursor:pointer;transition:background-color var( --_holo-t ) ease,color var( --_holo-t ) ease,border-color var( --_holo-t ) ease,box-shadow var( --_holo-t ) ease,transform 80ms ease;background:var( --os-ui-button-bg,transparent );background-image:var( --os-ui-button-bg-image,none );background-repeat:var( --os-ui-button-bg-image-repeat,repeat );background-size:var( --os-ui-button-bg-image-size,auto );background-position:var( --os-ui-button-bg-image-position,center );color:var( --os-ui-button-fg,var( --os-ui-fg,#1d2327 ) );border:var( --os-ui-button-border,1px solid var( --os-ui-border,#c3c4c7 ) )}:host( [ fill-cell ] ) button{width:100%;min-height:var( --os-ui-button-min-height,44px )}button:disabled{opacity:0.5;cursor:not-allowed}button:active:not(:disabled ){transform:translateY( 1px )}button:hover:not(:disabled ){background-color:var( --os-ui-button-bg-hover,var( --os-ui-hover,rgba( 0,0,0,0.04 ) ) )}button:focus-visible{outline:none;box-shadow:var( --_holo-focus )}button:disabled::before,button:disabled::after,button:disabled .os-holo-glint{opacity:0 !important}:host( [ variant='primary' ] ) button{background-color:var( --os-ui-button-bg,var( --wp-admin-theme-color,#2271b1 ) );color:var( --os-ui-button-fg,var( --os-ui-fg-on-accent,#fff ) );border:var( --os-ui-button-border,1px solid transparent )}:host( [ variant='primary' ] ) button:hover:not(:disabled ){filter:brightness( 1.06 );background-color:var( --os-ui-button-bg,var( --wp-admin-theme-color,#2271b1 ) );box-shadow:var( --_holo-glow )}:host( [ variant='holo' ] ) button{background-color:transparent;background-image:var( --_holo-fill );background-size:220% 220%;background-position:22% 28%;background-repeat:no-repeat;color:var( --os-ui-button-fg,var( --_holo-ink ) );border:var( --os-ui-button-border,1px solid transparent );box-shadow:var( --_holo-glow );font-weight:600;transition:background-position var( --_holo-t ) ease,box-shadow var( --_holo-t ) ease,filter var( --_holo-t ) ease,transform 80ms ease}:host( [ variant='holo' ] ) button:hover:not(:disabled ){background-color:transparent;background-position:74% 66%;box-shadow:var( --_holo-glow-strong )}:host( [ variant='holo' ] ) button:active:not(:disabled ){background-position:88% 82%;filter:brightness( 0.94 )}:host( [ variant='holo' ] ) button::before{display:none}@media ( prefers-reduced-motion:reduce ){:host( [ variant='holo' ] ) button:hover:not(:disabled ),:host( [ variant='holo' ] ) button:active:not(:disabled ){background-position:22% 28%}}:host( [ variant='secondary' ] ) button{background-color:var( --os-ui-button-bg,var( --os-ui-hover,rgba( 0,0,0,0.06 ) ) );color:var( --os-ui-button-fg,var( --os-ui-fg,#1d2327 ) );border:var( --os-ui-button-border,1px solid transparent )}:host( [ variant='secondary' ] ) button:hover:not(:disabled ){background-color:var( --os-ui-button-bg-hover,var( --os-ui-hover,rgba( 0,0,0,0.1 ) ) )}:host( [ variant='danger' ] ) button{background-color:var( --os-ui-button-bg,transparent );color:var( --os-ui-button-fg,var( --os-ui-danger,#d63638 ) );border:var( --os-ui-button-border,1px solid currentColor )}:host( [ variant='danger' ] ) button:hover:not(:disabled ){background-color:var( --os-ui-danger,#d63638 );color:var( --os-ui-fg-on-accent,#fff )}:host( [ variant='danger' ] ) button::after{display:none}:host( [ variant='link' ] ) button{background-color:transparent;background-image:none;color:var( --os-ui-button-fg,var( --wp-admin-theme-color,#2271b1 ) );border:0;padding:0;text-decoration:underline}:host( [ variant='link' ] ) button::before,:host( [ variant='link' ] ) button::after,:host( [ variant='link' ] ) .os-holo-glint,:host( [ variant='link' ] ) .os-holo-ring{display:none}:host( [ variant='link' ] ) button:active:not(:disabled ){transform:none}:host( [ busy ] ) button{pointer-events:none;opacity:0.75}:host( [ variant='holo' ][ busy ] ) button{animation:os-holo-drift 12s ease-in-out infinite}@media ( prefers-reduced-motion:reduce ){:host( [ variant='holo' ][ busy ] ) button{animation:none}}.os-button__spinner{box-sizing:border-box;display:inline-block;width:12px;height:12px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:os-button-spin 0.6s linear infinite;flex-shrink:0}@keyframes os-button-spin{to{transform:rotate( 360deg )}}`,ps=class ps extends Se{render(){const t=this.disabled!==null,n=this.busy!==null,o=this.type||"button";return Y` |
| 25 |
<button |
| 26 |
part="button" |
| 27 |
class="os-holo-edge os-holo-sheen" |
| 28 |
type=${o} |
| 29 |
?disabled=${t||n} |
| 30 |
aria-busy=${n?"true":"false"} |
| 31 |
> |
| 32 |
${n?Y`<span class="os-button__spinner" aria-hidden="true"></span>`:""} |
| 33 |
<slot></slot> |
| 34 |
<!-- |
| 35 |
The two motion layers. Elements rather than |
| 36 |
pseudo-elements because the sheen and the hairline |
| 37 |
have already taken this button's ::before and |
| 38 |
::after — see the pseudo-element budget note in |
| 39 |
src/ui/holo.ts. Both are inert and aria-hidden. |
| 40 |
--> |
| 41 |
<span class="os-holo-glint" aria-hidden="true"></span> |
| 42 |
<span class="os-holo-ring" aria-hidden="true"></span> |
| 43 |
</button> |
| 44 |
`}};ps.props=["variant","disabled","type","busy","fill-cell"],ps.styles=[jk],ps.help=void 0;let wa=ps;Ie("os-button",wa);function op(e){const{from:t,to:n,angle:o}=e.customGradient;return`linear-gradient(${o}deg, ${t}, ${n})`}const Vk=()=>S("Mix your own two-colour gradient and set the angle — your desk, your palette.");function qk(e){un({id:hv,label:S("Custom gradient"),type:"css",preview:op(e.state),description:Vk(),resolveValue:()=>op(e.state)})}function Kk(e){if(!e.customImage){bf(Fd);return}const n=`url("${encodeURI(e.customImage.url)}") center/cover no-repeat, #1d2327`;un({id:Fd,label:S("Custom image"),type:"css",value:n,preview:n,description:S("Any image from your media library or an upload, sized to cover the whole desk.")})}let li=null;function Yk(e){return window.openStationRenderOsSettingsPanel?Promise.resolve(window.openStationRenderOsSettingsPanel):li||(li=new Promise((t,n)=>{const o=document.querySelector('script[data-os-settings-panel="1"]'),s=()=>{const r=window.openStationRenderOsSettingsPanel;if(!r){n(new Error("[openstation] os-settings-panel bundle loaded but did not register openStationRenderOsSettingsPanel"));return}t(r)};if(o){window.openStationRenderOsSettingsPanel?s():(o.addEventListener("load",s),o.addEventListener("error",()=>n(new Error("failed to load os-settings-panel bundle"))));return}const i=document.createElement("script");i.src=e,i.async=!0,i.dataset.osSettingsPanel="1",i.addEventListener("load",s),i.addEventListener("error",()=>n(new Error("failed to load os-settings-panel bundle"))),document.head.appendChild(i)}),li)}class Xk{constructor(t,n){this.activeEditorTeardown=null,this.tabRegistryUnsubscribe=null,this.activeTabId=null,this.tabChangeAbort=null,this.osSettingsListeners=new Set,this._lastRenderedBody=null,this.config=t,this.layer=n,this.state=HE(),document.addEventListener("os-settings-save-lifecycle",o=>{const s=o.detail;!s||s.phase!=="failed"||!s.rolledBackTo||(this.state=s.rolledBackTo,this.apply(),this._lastRenderedBody?.isConnected&&this.renderPanel(this._lastRenderedBody))}),qk(this),Kk(this.state)}getOsSettingsSnapshot(){return{wallpaper:this.state.wallpaper,accent:this.state.accent,dockSize:this.state.dockSize,windowRadius:this.state.windowRadius,adminBarMode:this.state.adminBarMode,desktopLayout:this.state.desktopLayout,dockPlacement:this.state.dockPlacement,dockRailRenderer:this.state.dockRailRenderer,desktopTheme:this.state.desktopTheme,appliedThemeRecommendations:this.state.appliedThemeRecommendations.slice(),unfocusEffect:this.state.unfocusEffect,windowReveal:this.state.windowReveal,windowRevealDuration:this.state.windowRevealDuration,windowLinkRenderer:this.state.windowLinkRenderer,windowLinkVisibility:this.state.windowLinkVisibility,windowLinksEnabled:this.state.windowLinksEnabled,windowLinkRaiseOnFocus:this.state.windowLinkRaiseOnFocus,windowLinkHighlight:this.state.windowLinkHighlight,ai:{...this.state.ai},nativePostsEnabled:this.state.nativePostsEnabled,nativePostsHiddenColumns:this.state.nativePostsHiddenColumns.slice(),nativePagesEnabled:this.state.nativePagesEnabled,nativeUsersEnabled:this.state.nativeUsersEnabled,nativePluginsEnabled:this.state.nativePluginsEnabled,nativeCommentsEnabled:this.state.nativeCommentsEnabled,developerModeEnabled:this.state.developerModeEnabled,foldersSharingEnabled:this.state.foldersSharingEnabled,showPostStatusRibbons:this.state.showPostStatusRibbons,itemVisibility:{...this.state.itemVisibility},dockOrder:this.state.dockOrder.slice(),dockPromotedPositions:Object.fromEntries(Object.entries(this.state.dockPromotedPositions).map(([t,n])=>[t,{...n}]))}}subscribeOsSettings(t){return this.osSettingsListeners.add(t),()=>{this.osSettingsListeners.delete(t)}}apply(){const t=document.getElementById("os-shell");if(!t)return;UE(this.state.wallpaperSettings);const n=ea(this.state.wallpaper)||ea(zd())||ea(Lr)||_f()[0];n&&this.layer.apply(n);const o=Tr(),s=o.find(f=>f.id===this.state.accent)??o[0],i=this.state.accent===Bd?this.state.customAccent:s.value,r=Nr.find(f=>f.id===this.state.dockSize)??Nr[1],a=Dr.find(f=>f.id===this.state.windowRadius)??Dr[1],l=document.body;l.style.setProperty("--wp-admin-theme-color",i),l.style.setProperty("--os-ui-accent",i);const d=i.toLowerCase()==="#f252fc"?null:`color-mix( in srgb, ${i} 88%, #000 )`;d===null?l.style.removeProperty("--os-ui-accent-dim"):l.style.setProperty("--os-ui-accent-dim",d),t.style.setProperty("--os-ui-accent",i),d===null?t.style.removeProperty("--os-ui-accent-dim"):t.style.setProperty("--os-ui-accent-dim",d),l.style.setProperty("--os-dock-width",`${r.width}px`),l.style.setProperty("--os-dock-icon-size",`${r.icon}px`),l.style.setProperty("--os-window-radius",`${a.value}px`),t.style.setProperty("--os-window-radius",`${a.value}px`);const u=Us.find(f=>f.id===this.state.adminBarMode)??Us[0];for(const f of Us)document.body.classList.toggle(`os-admin-bar-${f.id}`,f.id===u.id);t.setAttribute("data-os-layout",this.state.desktopLayout),Wb(this.state.dockRailRenderer),da(this.state.desktopTheme)}save(t={}){if(XE(this.state,t),this.osSettingsListeners.size>0){const n=this.getOsSettingsSnapshot(),o=Array.from(this.osSettingsListeners);for(const s of o)try{s(n)}catch(i){typeof console<"u"&&console.error("[openstation] os-settings listener threw:",i)}}}focusTab(t){this.activeTabId=t;const n=this._lastRenderedBody;if(!n?.isConnected)return;const o=n.querySelector("os-tabs");o&&(o.value=t)}renderPanel(t){this._lastRenderedBody=t;const n=window.openStationRenderOsSettingsPanel;if(n){n(this,t);return}Yk(this.config.osSettingsPanelBundleUrl??"").then(o=>{t.isConnected&&o(this,t)}).catch(o=>{typeof console<"u"&&console.error("[openstation] OpenStation Preferences panel failed to load:",o)})}}const Zk={userId:null,requestedAt:0,tabRequested:!1};let ci=null;function Jk(){if(ci)return ci;const t=window.wp?.os?.createSharedStore;return typeof t!="function"?null:(ci=t("desktop-mode/user-edit/target",()=>({...Zk})),ci)}function Qk(e){const t=Jk();if(t){t.state.userId=e,t.state.requestedAt=Date.now(),t.state.tabRequested=!0,t.notify();return}const n=window;n._wpdUserEditTarget={userId:e,requestedAt:Date.now(),tabRequested:!0}}let di=null;function e0(){if(di)return di;const e=window.wp?.os?.createSharedStore;return typeof e!="function"?null:(di=e("desktop-mode/comments/post-filter",()=>({postId:0})),di)}function sp(e){const t=e0();t&&(t.state.postId=e,t.notify())}function t0(){sp(0)}function ip(e,t){return{id:e,pluginUrl:t,prefersReducedMotion:n0(),visible:!document.hidden,settings:$E(e)}}function n0(){return typeof window.matchMedia!="function"?!1:window.matchMedia("( prefers-reduced-motion: reduce )").matches}class rp{constructor(t,n){this.generation=0,this.active=null,this.suspendReasons=new Map,this.freezeOverlay=null,this.frozenCanvas=null,this.boundVisibilityChange=()=>{this.emitEffectiveVisibility()},this.element=t,this.pluginUrl=n,document.addEventListener("visibilitychange",this.boundVisibilityChange)}apply(t){const n=++this.generation;if(this.teardownActive(),t.type==="css"){this.applyCss(t);return}this.applyCanvas(t,n)}suspend(t){const n=this.isSuspended();this.suspendReasons.set(t,(this.suspendReasons.get(t)??0)+1),!n&&(this.installFreezeOverlay(),this.emitSuspendAction(),this.emitEffectiveVisibility())}resume(t){const n=this.suspendReasons.get(t);if(n!==void 0){if(n>1){this.suspendReasons.set(t,n-1);return}this.suspendReasons.delete(t),!this.isSuspended()&&(this.removeFreezeOverlay(),this.emitSuspendAction(),this.emitEffectiveVisibility())}}isSuspended(){return this.suspendReasons.size>0}teardownActive(){if(this.removeFreezeOverlay(),!this.active)return;const{id:t,teardown:n}=this.active;this.active=null,T(b.WALLPAPER_UNMOUNTING,{id:t});try{n()}catch(o){T(b.SHELL_ERROR,{scope:"wallpaper-teardown",id:t,error:o}),typeof console<"u"&&console.error(`[openstation] Wallpaper "${t}" teardown threw:`,o)}this.element.innerHTML=""}dispose(){this.teardownActive(),document.removeEventListener("visibilitychange",this.boundVisibilityChange)}applyCss(t){const n=t.resolveValue?t.resolveValue(ip(t.id,this.pluginUrl)):t.value;typeof n=="string"&&(this.element.style.setProperty("--os-bg",n),document.getElementById("os-shell")?.style.setProperty("--os-bg",n))}applyCanvas(t,n){const o=ip(t.id,this.pluginUrl);T(b.WALLPAPER_MOUNTING,{id:t.id,container:this.element,ctx:o});const s=t.needs&&t.needs.length>0?pa(t.needs):Promise.resolve(),i=r=>{if(n!==this.generation){try{r()}catch{}return}this.active={id:t.id,teardown:r},T(b.WALLPAPER_MOUNTED,{id:t.id,container:this.element,ctx:o}),this.isEffectivelyHidden()&&this.emitEffectiveVisibility()};s.then(()=>{if(n!==this.generation)return;let r;try{r=t.mount(this.element,o)}catch(a){this.handleMountFailure(t.id,a);return}if(o0(r)){r.then(i,a=>{n===this.generation&&this.handleMountFailure(t.id,a)});return}i(r)},r=>{n===this.generation&&this.handleMountFailure(t.id,r)})}isEffectivelyHidden(){return document.hidden||this.isSuspended()}emitEffectiveVisibility(){this.active&&T(b.WALLPAPER_VISIBILITY,{id:this.active.id,state:this.isEffectivelyHidden()?"hidden":"visible"})}emitSuspendAction(){T(b.WALLPAPER_SUSPEND,{id:this.active?.id??null,suspended:this.isSuspended(),reasons:Array.from(this.suspendReasons.keys())})}installFreezeOverlay(){if(this.freezeOverlay||!this.active)return;const t=this.element.querySelector("canvas");if(!(!t||t.width===0||t.height===0))try{const n=document.createElement("canvas");n.width=t.width,n.height=t.height;const o=n.getContext("2d");if(!o)return;o.drawImage(t,0,0),n.className="os-wallpaper-freeze",n.style.position="absolute",n.style.inset="0",n.style.width="100%",n.style.height="100%",n.style.pointerEvents="none",n.setAttribute("aria-hidden","true"),this.element.appendChild(n),t.style.visibility="hidden",this.freezeOverlay=n,this.frozenCanvas=t}catch{}}removeFreezeOverlay(){this.freezeOverlay?.remove(),this.freezeOverlay=null,this.frozenCanvas&&(this.frozenCanvas.style.visibility="",this.frozenCanvas=null)}handleMountFailure(t,n){this.element.innerHTML="",T(b.WALLPAPER_MOUNT_FAILED,{id:t,error:n}),T(b.SHELL_ERROR,{scope:"wallpaper-mount",id:t,error:n}),typeof console<"u"&&console.error(`[openstation] Wallpaper "${t}" failed to mount:`,n)}}function o0(e){return!!e&&typeof e=="object"&&typeof e.then=="function"}const ap=ie("desktop-mode/games-registry",()=>({seed:[],listeners:new Set})),mn=ap.state.seed,ya=ap.state.listeners;function ba(e){Ne("Game",Nt(e,up),e);const t=mn.findIndex(n=>n.id===e.id);t>=0?mn[t]=e:mn.push(e),cp()}function lp(e){const t=mn.findIndex(n=>n.id===e);t>=0&&(mn.splice(t,1),cp())}function s0(e){return ya.add(e),()=>{ya.delete(e)}}function cp(){const e=Array.from(ya);for(const t of e)try{t()}catch(n){typeof console<"u"&&console.error("[openstation] games registry listener threw:",n)}}function dp(){const e=mn.slice(),t=V(b.GAMES,e);return Array.isArray(t)?t.filter(i0):(typeof console<"u"&&console.warn("[openstation] `os.games` filter returned a non-array; falling back to seed list."),e)}function ui(e){return dp().find(t=>t.id===e)}const up=[{field:"id",message:"missing or not a non-empty string",valid:e=>typeof e.id=="string"&&e.id!==""},{field:"title",message:"missing or not a non-empty string",valid:e=>typeof e.title=="string"&&e.title!==""},{field:"scoreColumns",message:"must be an array",valid:e=>Array.isArray(e.scoreColumns)},{field:"render/scriptUrl",message:"needs a `render` callback or a `scriptUrl` to lazily load one",valid:e=>typeof e.render=="function"||typeof e.scriptUrl=="string"&&e.scriptUrl!==""}];function i0(e){return Nt(e,up).length===0}const r0="desktop-mode/games";function a0(){const t=window.wp?.os?.config;return{restUrl:t?.restUrl||"/wp-json/",restNonce:t?.restNonce||""}}async function ao(e,t={},n={}){const{restUrl:o,restNonce:s}=a0(),i=new Headers(t.headers??{});i.set("X-WP-Nonce",s),t.body&&!i.has("Content-Type")&&i.set("Content-Type","application/json");const r=await Be(tt(o,e),{...t,headers:i,credentials:"same-origin"},{source:r0,windowId:n.windowId,silent:n.silent}),a=await r.json().catch(()=>null);if(!r.ok){const l=a?.message||`Games request failed (${r.status})`,c=new Error(l);throw c.status=r.status,c}return a}function l0(e,t,n={}){return ao(`desktop-mode/v1/games/${e}/scores`,{method:"POST",body:JSON.stringify({score:t.score,meta:t.meta??{}})},n)}function c0(){return ao("desktop-mode/v1/games/playtime")}function d0(e,t,n={}){return ao(`desktop-mode/v1/games/${e}/playtime`,{method:"POST",body:JSON.stringify({seconds:t})},n)}function u0(e){return ao(`desktop-mode/v1/games/challenges/${e}/accept`,{method:"POST"})}function f0(e,t,n={}){return ao(`desktop-mode/v1/games/challenges/${e}/complete`,{method:"POST",body:JSON.stringify({score:t.score,meta:t.meta??{}})},n)}const p0=6e4;function h0(e,t={}){let n=Date.now(),o=0,s=!1;const i=()=>{if(n===null)return;const l=Date.now();o+=Math.max(0,l-n),n=l},r=()=>{i();const l=Math.floor(o/1e3);l<1||(o-=l*1e3,d0(e,l,{windowId:t.windowId,silent:!0}).catch(()=>{o+=l*1e3}))},a=setInterval(r,p0);return{pause:()=>{i(),n=null},resume:()=>{s||n!==null||(n=Date.now())},stop:()=>{s||(s=!0,clearInterval(a),i(),n=null,r())}}}const gn=ie("desktop-mode/games-challenges",()=>({rows:new Map,version:0,listeners:new Set}));function m0(){return gn.state}function va(e){const t=gn.state;let n=!1;for(const o of e){if(!o||typeof o.id!="number")continue;const s=t.rows.get(o.id);(!s||s.updatedAtMs!==o.updatedAtMs)&&(t.rows.set(o.id,o),n=!0),o.updatedAtMs>t.version&&(t.version=o.updatedAtMs)}n&&w0()}function g0(e){return gn.state.listeners.add(e),()=>{gn.state.listeners.delete(e)}}function w0(){for(const e of Array.from(gn.state.listeners))try{e()}catch(t){typeof console<"u"&&console.error("[openstation] challenges store listener threw:",t)}}function y0(){return Array.from(gn.state.rows.values()).sort((e,t)=>t.updatedAtMs-e.updatedAtMs)}function fp(){return window.wp?.os??{}}const b0=760,v0=560,_0=480,E0=380;async function k0(e){if(typeof e.render=="function")return e;const t=fp().loadVendorScript;if(!e.scriptUrl||typeof t!="function")throw new Error(`[openstation] Game "${e.id}" has no render callback and no loadable script.`);await t(e.scriptUrl,{translations:e.scriptTranslations,l10n:e.scriptL10n,before:e.scriptBefore,after:e.scriptAfter});const o=window.openStationGames?.[e.id];if(!o||typeof o.render!="function")throw new Error(`[openstation] No game def on window.openStationGames["${e.id}"]. Script loaded but didn't publish a def — check the plugin's global assignment.`);const s={...e,render:o.render,window:o.window??e.window};return ba(s),s}async function pp(e,t={}){const n=fp();let o=ui(e);if(!o)throw new Error(`[openstation] Unknown game "${e}".`);o=await k0(o);const s=o.render;if(typeof s!="function")throw new Error(`[openstation] Game "${e}" did not provide a render callback.`);if(typeof n.registerWindow!="function")throw new Error("[openstation] wp.os.registerWindow is missing — the shell must boot before launching games.");const i=`os-game-${e}`,r=`game:${i}`,a=n.windowManager,l=a?.getByBaseId?.(i)??a?.getById(i);if(l){const m=l.config?.desktopId;m&&a?.switchDesktop&&m!==a?.getActiveDesktopId?.()&&a.switchDesktop(m),n.registerWindow({id:i,title:o.title,icon:o.icon,render:()=>{}});return}n.wallpaper?.suspend(r);let c=!1;const d=()=>{c||(c=!0,n.wallpaper?.resume(r))};let u=null;const f=()=>{u?.stop(),u=null};n.onWindow?.(i,{closed:()=>{f(),d()},minimized:()=>u?.pause(),restored:()=>u?.resume()});const p=(m,h)=>{n.activity?.publish("os/game-score-recorded",{game:e,score:m.score,meta:m.meta??{},windowId:i,challengeId:h})},g=m=>{if(t.challenge){const h=t.challenge.id;return f0(h,m,{windowId:i}).then(({challenge:v})=>{va([v]),p(m,h)})}return l0(e,m,{windowId:i}).then(()=>p(m))};try{await n.registerWindow({id:i,title:o.title,icon:o.icon,width:o.window?.width??b0,height:o.window?.height??v0,minWidth:o.window?.minWidth??_0,minHeight:o.window?.minHeight??E0,render:m=>{const h={windowId:i,container:m,config:o.config??{},challenge:t.challenge,submitScore:g,close:()=>{n.windowManager?.getById(i)?.close()}};u=h0(e,{windowId:i});const v=s(h);return()=>{try{v?.()}finally{f(),d()}}}})}catch(m){throw f(),d(),m}}const hp={register:ba,unregister:lp,list:dp,get:ui,subscribe:s0,launch:pp,getPlaytime:()=>c0().then(e=>e.playtime)};function S0(e){const{osSettings:t}=e,n=new Set,o=r=>r.type!=="css"||r.value===""?null:{id:r.id,label:r.label,type:"css",value:r.value,preview:r.preview!==""?r.preview:r.value,description:r.description||void 0},s=async r=>{if(n.has(r.id))return;const a=o(r);if(a){un(a),n.add(r.id),t.apply();return}if(!r.scriptUrl)return;$k(r);const l=r.preview!==""||r.value!=="";if(l){try{un(Fk(r))}catch(c){T(b.SHELL_ERROR,{scope:"wallpaper-register",id:r.id,error:c}),ai(r.id);return}n.add(r.id)}if(!l||t.state.wallpaper===r.id){const c=await Xf(r.id);if(!l){if(!c){ai(r.id);return}n.add(r.id)}}t.apply()},i=r=>{n.has(r)&&(bf(r),ai(r),n.delete(r),t.apply())};return async r=>{const a=new Set;for(const l of r)a.add(l.id);for(const l of Array.from(n))a.has(l)||i(l);for(const l of r)n.has(l.id)||await s(l)}}function A0(e){return{id:e.id,title:e.title,icon:e.icon,description:e.description||void 0,scoreColumns:Array.isArray(e.scoreColumns)?e.scoreColumns:[],config:e.config??{},scriptUrl:e.scriptUrl,scriptTranslations:e.scriptTranslations,scriptL10n:e.scriptL10n,scriptBefore:e.scriptBefore,scriptAfter:e.scriptAfter}}function C0(){const e=new Set,t=o=>{try{const s=ui(o.id),i=A0(o);ba(s&&typeof s.render=="function"?{...i,render:s.render,window:s.window}:i)}catch(s){typeof console<"u"&&console.error(`[openstation] Server game "${o.id}" failed to register:`,s);return}e.add(o.id)},n=o=>{e.has(o)&&(lp(o),e.delete(o))};return async o=>{const s=new Set;for(const i of o)i&&typeof i.id=="string"&&i.id!==""&&s.add(i.id);for(const i of Array.from(e))s.has(i)||n(i);for(const i of o)s.has(i.id)&&t(i)}}function I0(e={}){const t=e.deactivate??(()=>da(""));return function(o){kv(Array.isArray(o)?o:[]);const{activeId:s,themes:i}=Fs().getState();s!==null&&(i.some(r=>r.slug===s)||t())}}const fi=new Map,_a=new Map;let mp=!1;const xe={contribute(e,t){return fi.set(e,t),()=>{fi.get(e)===t&&fi.delete(e)}},subscribe(e,t){let n=_a.get(e);return n||(n=new Set,_a.set(e,n)),n.add(t),()=>{n.delete(t)}}};function x0(){if(mp)return;mp=!0;const e=window.jQuery;if(!e){console.warn("[desktop-mode/heartbeat] jQuery missing — Heartbeat bus disabled.");return}e(document).on("heartbeat-send",(...t)=>{const n=t[1];if(n)for(const[o,s]of fi)try{n[o]=s()}catch(i){console.error(`[desktop-mode/heartbeat] supplier for "${o}" threw:`,i)}}),e(document).on("heartbeat-tick",(...t)=>{const n=t[1];if(n)for(const[o,s]of _a){const i=n[o];if(i!==void 0)for(const r of s)try{r(i)}catch(a){console.error(`[desktop-mode/heartbeat] subscriber for "${o}" threw:`,a)}}})}let pi=null,hi={installHintDismissed:!1,notificationsEnabled:!1};const Ea=new Set;function gp(e){if(!e){pi=null;return}pi=e,hi={...e.state},yp()}function lo(){return{...hi}}function ka(e){if(hi={...hi,...e},yp(),!pi)return lo();const t=JSON.stringify(e),n=L0();return fetch(pi.stateUrl,{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json",...n?{"X-WP-Nonce":n}:{}},body:t}).catch(o=>{typeof console<"u"&&console.warn("[openstation] pwa-state write failed:",o)}),lo()}function wp(e){return Ea.add(e),()=>{Ea.delete(e)}}function yp(){const e=lo();for(const t of Array.from(Ea))try{t(e)}catch(n){typeof console<"u"&&console.error("[openstation] pwa-state listener threw:",n)}}function L0(){return window.openStationConfig?.restNonce??""}const T0=Object.freeze(Object.defineProperty({__proto__:null,getPwaState:lo,initPwaState:gp,subscribePwaState:wp,updatePwaState:ka},Symbol.toStringTag,{value:"Module"}));function Sa(e){const t=Ee.filter("os/notification-requested",{...e});if(!t||t.cancel===!0||!t.title)return()=>{};let n=!1,o=null,s=null;const i=()=>{n||(n=!0,o&&o(),s&&s())},r=()=>{s=X({message:t.body?t.title+" — "+t.body:t.title}),Ee.publish("os/notification-shown",{...t,fallback:"toast"})};if(typeof window>"u"||typeof Notification>"u")return r(),i;const a=Notification.permission;return a==="granted"?(o=bp(t),o||r(),i):a==="denied"?(r(),i):(Notification.requestPermission().then(l=>{if(!n){if(l==="granted"){ka({notificationsEnabled:!0}),o=bp(t),o||r();return}r()}}),i)}function bp(e){let t=null;try{t=new Notification(e.title,{body:e.body,icon:e.icon,tag:e.tag,requireInteraction:e.requireInteraction})}catch(n){return typeof console<"u"&&console.warn("[openstation] Notification ctor threw:",n),null}if(e.onClick){const n=e.onClick;t.onclick=()=>{try{n(t)}catch(o){typeof console<"u"&&console.error("[openstation] notification onClick threw:",o)}}}return Ee.publish("os/notification-shown",{...e,fallback:null}),()=>{t&&t.close()}}async function N0(){if(typeof Notification>"u")return"unsupported";if(Notification.permission!=="default")return Notification.permission;const e=await Notification.requestPermission();return e==="granted"&&ka({notificationsEnabled:!0}),e}function D0(){return typeof Notification>"u"?"unsupported":Notification.permission}function R0(e){return ui(e)?.title||e}const vp=new Set,_p=new Set;async function O0(e){const{challenge:t}=await u0(e.id);va([t]),await pp(e.game,{challenge:{id:e.id,scoreToBeat:e.scoreToBeat,scoreMeta:e.scoreMeta,challengerName:e.challengerName}})}function M0(e){const t=le(S("%1$s challenged you to %2$s — beat %3$s!"),e.challengerName,R0(e.game),String(e.scoreToBeat));Sa({title:S("Game challenge"),body:t,tag:`os-game-challenge-${e.id}`}),X({message:t,persistent:!0,dismissible:!0,action:{label:S("Accept & Play"),onClick:()=>{O0(e).catch(n=>{X({message:n instanceof Error?n.message:S("Could not accept the challenge.")})})}}})}function P0(e){let t;e.result==="beaten"?t=S("%1$s beat your score: %2$s vs your %3$s."):t=S("%1$s did not beat your score: %2$s vs your %3$s.");const n=le(t,e.recipientName,String(e.resultScore??0),String(e.scoreToBeat));Sa({title:S("Challenge finished"),body:n,tag:`os-game-challenge-${e.id}`}),X({message:n})}function W0(e){const{currentUserId:t}=e;if(!t)return;xe.contribute("openstation_games_subscribe",()=>({challengesVersion:m0().version})),xe.subscribe("openstation_games",o=>{Array.isArray(o?.challenges)&&va(o.challenges)});const n=()=>{for(const o of y0())o.state==="pending"&&o.recipientId===t&&!vp.has(o.id)&&(vp.add(o.id),M0(o)),o.state==="completed"&&o.challengerId===t&&!_p.has(o.id)&&(_p.add(o.id),P0(o))};g0(n),n()}const Ep=/^[a-z0-9_/-]+$/,kp=ie("desktop-mode/commands-registry",()=>({registry:new Map,listeners:new Set})),Ft=kp.state.registry,$0=kp.state.listeners;function mi(e){const t=[],n=typeof e?.slug=="string"?e.slug.trim().toLowerCase():"";!e||typeof e!="object"?t.push("def (not an object)"):(typeof e.slug!="string"||e.slug.trim()===""?t.push("slug (missing)"):Ep.test(n)||t.push(`slug (must match ${Ep} — lowercase alphanum, hyphens, underscores, slashes for vendor/sub-id)`),(typeof e.label!="string"||e.label.trim()==="")&&t.push("label (missing)"),typeof e.run!="function"&&t.push("run (must be a function)")),Ne("Command",t,e),Ft.set(n,{...e,slug:n}),Aa()}function Sp(e){Ft.delete(e.toLowerCase())&&Aa()}function gi(e){if(!e)return 0;let t=0;for(const[n,o]of Array.from(Ft.entries()))o.owner===e&&(Ft.delete(n),t++);return t>0&&Aa(),t}function Ap(){return Array.from(Ft.values())}function U0(){const e=[];for(const t of Ft.values())t.aiCallable===!0&&e.push({slug:t.slug,label:t.label,description:t.description??"",hint:t.hint??""});return e}function F0(e){return Ft.get(e.toLowerCase())??null}function Aa(){const e=Array.from($0);for(const t of e)try{t()}catch(n){typeof console<"u"&&console.error("[openstation] command-registry listener threw:",n)}}function B0(){const e=new Set,t=new Set;let n=new Map;const o=async r=>{if(!r.scriptUrl||t.has(r.scriptUrl)){e.add(r.handle);return}try{await ke(r.scriptUrl,{translations:r.scriptTranslations,l10n:r.scriptL10n,before:r.scriptBefore,after:r.scriptAfter})}catch(a){T(b.SHELL_ERROR,{scope:"command-script-load",handle:r.handle,url:r.scriptUrl,error:a});return}t.add(r.scriptUrl),e.add(r.handle)},s=r=>{const a=new Map;if(!r)return a;for(const l of r){if(!l.scriptHandle||!l.slug)continue;let c=a.get(l.scriptHandle);c||(c=new Set,a.set(l.scriptHandle,c)),c.add(l.slug)}return a},i=r=>{const a=new Set;for(const c of Ap())c.owner===r&&a.add(c.slug);const l=n.get(r);if(l)for(const c of l)a.add(c);return a};return async(r,a)=>{const l=new Set;for(const c of r)c.handle&&l.add(c.handle);for(const c of Array.from(e))if(!l.has(c)){for(const d of i(c))Sp(d);e.delete(c)}for(const c of r)!c.handle||e.has(c.handle)||await o(c);n=s(a)}}const Cp=ie("desktop-mode/settings-tab-registry",()=>({registry:new Map,listeners:new Set})),co=Cp.state.registry,H0=Cp.state.listeners;function Ip(e){if(!e||typeof e.id!="string"||e.id.trim()===""||typeof e.label!="string"||e.label.trim()===""||typeof e.render!="function")return;const t=e.id.trim().toLowerCase();if(!/^[a-z0-9_\-]+$/.test(t)){typeof console<"u"&&console.warn("[openstation] registerSettingsTab: id must be [a-z0-9_-]+, got",e.id);return}co.set(t,{...e,id:t}),Ca()}function xp(e){co.delete(e.toLowerCase())&&Ca()}function z0(e){if(!e)return 0;let t=0;for(const[n,o]of Array.from(co.entries()))o.owner===e&&(co.delete(n),t++);return t>0&&Ca(),t}function Lp(){return Array.from(co.values()).sort((e,t)=>(e.order??100)-(t.order??100))}function Ca(){const e=Array.from(H0);for(const t of e)try{t()}catch(n){typeof console<"u"&&console.error("[openstation] settings-tab-registry listener threw:",n)}}function G0(){const e=new Set,t=new Set;let n=new Map;const o=async r=>{if(!r.scriptUrl||t.has(r.scriptUrl)){e.add(r.handle);return}try{await ke(r.scriptUrl,{translations:r.scriptTranslations,l10n:r.scriptL10n,before:r.scriptBefore,after:r.scriptAfter})}catch(a){T(b.SHELL_ERROR,{scope:"settings-tab-script-load",handle:r.handle,url:r.scriptUrl,error:a});return}t.add(r.scriptUrl),e.add(r.handle)},s=r=>{const a=new Map;if(!r)return a;for(const l of r){if(!l.scriptHandle||!l.id)continue;let c=a.get(l.scriptHandle);c||(c=new Set,a.set(l.scriptHandle,c)),c.add(l.id)}return a},i=r=>{z0(r);const a=n.get(r);if(a){const l=new Set(Lp().map(c=>c.id));for(const c of a)l.has(c)&&xp(c)}};return async(r,a)=>{const l=new Set;for(const c of r)c.handle&&l.add(c.handle);for(const c of Array.from(e))l.has(c)||(i(c),e.delete(c));for(const c of r)!c.handle||e.has(c.handle)||await o(c);n=s(a)}}const Tp=ie("desktop-mode/title-bar-buttons-registry",()=>({registry:new Map,listeners:new Set})),uo=Tp.state.registry,j0=Tp.state.listeners,Np=/^[a-z0-9_/-]+$/;function wi(e){const t=[];!e||typeof e!="object"?t.push("def (not an object)"):(typeof e.id!="string"||e.id.trim()===""?t.push("id (missing)"):Np.test(e.id.trim().toLowerCase())||t.push(`id (must match ${Np} — lowercase alphanum, hyphens, underscores, slashes for vendor/sub-id)`),(typeof e.label!="string"||e.label.trim()==="")&&t.push("label (missing)"),(typeof e.icon!="string"||e.icon.trim()==="")&&t.push("icon (missing)"),typeof e.match!="function"&&t.push("match (must be a function)"),typeof e.onClick!="function"&&typeof e.render!="function"&&t.push("onClick|render (at least one must be a function)")),Ne("TitleBarButton",t,e);const n=e.id.trim().toLowerCase();uo.set(n,{...e,id:n}),yi()}function V0(e){uo.delete(e.toLowerCase())&&yi()}function q0(e){if(!e)return 0;let t=0;for(const[n,o]of Array.from(uo.entries()))o.owner===e&&(uo.delete(n),t++);return t>0&&yi(),t}function K0(){return Array.from(uo.values()).sort((e,t)=>(e.order??100)-(t.order??100))}function yi(){const e=Array.from(j0);for(const t of e)try{t()}catch(n){typeof console<"u"&&console.error("[openstation] title-bar-button registry listener threw:",n)}}typeof document<"u"&&document.addEventListener("os-settings-save-lifecycle",e=>{const t=e.detail;t&&t.phase==="saved"&&yi()});function Y0(){const e=new Set,t=new Set,n=async o=>{if(!o.scriptUrl||t.has(o.scriptUrl)){e.add(o.handle);return}try{await ke(o.scriptUrl,{translations:o.scriptTranslations,l10n:o.scriptL10n,before:o.scriptBefore,after:o.scriptAfter})}catch(s){T(b.SHELL_ERROR,{scope:"titlebar-button-script-load",handle:o.handle,url:o.scriptUrl,error:s});return}t.add(o.scriptUrl),e.add(o.handle)};return async o=>{const s=new Set;for(const i of o)i.handle&&s.add(i.handle);for(const i of Array.from(e))s.has(i)||(q0(i),e.delete(i));for(const i of o)!i.handle||e.has(i.handle)||await n(i)}}const Dp=ie("desktop-mode/window-actions-registry",()=>({registry:new Map,listeners:new Set})),fo=Dp.state.registry,X0=Dp.state.listeners,Rp=/^[a-z0-9_/-]+$/;function Ia(){for(const e of Array.from(X0))try{e()}catch{}}function Z0(e){const t=[];!e||typeof e!="object"?t.push("def (not an object)"):(typeof e.id!="string"||e.id.trim()===""?t.push("id (missing)"):Rp.test(e.id.trim().toLowerCase())||t.push(`id (must match ${Rp} — lowercase alphanum, hyphens, underscores, slashes for vendor/sub-id)`),typeof e.label!="string"&&typeof e.label!="function"?t.push("label (must be a string or a function)"):typeof e.label=="string"&&e.label.trim()===""&&t.push("label (empty)"),typeof e.onSelect!="function"&&t.push("onSelect (must be a function)"),e.isVisible!==void 0&&typeof e.isVisible!="function"&&t.push("isVisible (must be a function when set)")),Ne("WindowAction",t,e);const n=e.id.trim().toLowerCase();fo.set(n,{...e,id:n}),Ia()}function J0(e){fo.delete(String(e||"").toLowerCase())&&Ia()}function Q0(e){if(!e)return 0;let t=0;for(const[n,o]of Array.from(fo.entries()))o.owner===e&&(fo.delete(n),t++);return t>0&&Ia(),t}function eS(){return Array.from(fo.values()).sort((e,t)=>(e.order??100)-(t.order??100))}function tS(){const e=new Set,t=new Set,n=async o=>{if(!o.scriptUrl||t.has(o.scriptUrl)){e.add(o.handle);return}try{await ke(o.scriptUrl,{translations:o.scriptTranslations,l10n:o.scriptL10n,before:o.scriptBefore,after:o.scriptAfter})}catch(s){T(b.SHELL_ERROR,{scope:"window-action-script-load",handle:o.handle,url:o.scriptUrl,error:s});return}t.add(o.scriptUrl),e.add(o.handle)};return async o=>{const s=new Set;for(const i of o)i.handle&&s.add(i.handle);for(const i of Array.from(e))s.has(i)||(Q0(i),e.delete(i));for(const i of o)!i.handle||e.has(i.handle)||await n(i)}}const wn="none",xa="svg-splines",Op=ie("desktop-mode/window-link-renderer-registry",()=>({registry:new Map,listeners:new Set})),po=Op.state.registry,La=Op.state.listeners,Mp=/^[a-z0-9_/-]+$/;function Pp(e){const t=[];!e||typeof e!="object"?t.push("def (not an object)"):(typeof e.id!="string"||e.id.trim()===""?t.push("id (missing)"):Mp.test(e.id.trim().toLowerCase())?e.id.trim().toLowerCase()===wn&&t.push('id ("none" is reserved)'):t.push(`id (must match ${Mp} — lowercase alphanum, hyphens, underscores, slashes for vendor/sub-id)`),(typeof e.label!="string"||e.label.trim()==="")&&t.push("label (missing)"),typeof e.mount!="function"&&t.push("mount (not a function)")),Ne("WindowLinkRenderer",t,e);const n=e.id.trim().toLowerCase();po.set(n,{...e,id:n}),Na()}function nS(e){po.delete(e.toLowerCase())&&Na()}function oS(e){if(!e)return 0;let t=0;for(const[n,o]of Array.from(po.entries()))o.owner===e&&(po.delete(n),t++);return t>0&&Na(),t}function Wp(){const e=Array.from(po.values()),t=V(b.WINDOW_LINK_RENDERERS,e);return Array.isArray(t)?t:(typeof console<"u"&&console.warn("[openstation] `os.window-links.renderers` filter returned a non-array; falling back to registry list."),e)}function Ta(e){return Wp().find(t=>t.id===e)}function sS(e){return La.add(e),()=>{La.delete(e)}}function Na(){const e=Array.from(La);for(const t of e)try{t()}catch(n){typeof console<"u"&&console.error("[openstation] window-link-renderer registry listener threw:",n)}}const iS=16;function rS(e,t){const n=t.map(i=>({start:Math.max(e.start,i.start),end:Math.min(e.end,i.end)})).filter(i=>i.end>i.start).sort((i,r)=>i.start-r.start),o=[];let s=e.start;for(const i of n)i.start>s&&o.push({start:s,end:i.start}),s=Math.max(s,i.end);return s<e.end&&o.push({start:s,end:e.end}),o}function aS(e,t){const n=e.x+e.width/2,o=e.y+e.height/2,s=t.x-n,i=t.y-o;if(s===0&&i===0)return{x:n,y:o,side:"right"};const r=s!==0?e.width/2/Math.abs(s):1/0,a=i!==0?e.height/2/Math.abs(i):1/0,l=Math.min(r,a),c=n+s*l,d=o+i*l;let u;return r<=a?u=s>0?"right":"left":u=i>0?"bottom":"top",{x:c,y:d,side:u}}function $p(e,t,n,o){for(const s of n)if(!(s.windowId===o||s.zIndex<=t)&&e.x>=s.rect.x&&e.x<=s.rect.x+s.rect.width&&e.y>=s.rect.y&&e.y<=s.rect.y+s.rect.height)return!1;return!0}function lS(e,t,n,o,s){const i=n.filter(c=>c.windowId!==o&&c.zIndex>t),r=[{side:"top",base:{start:e.x,end:e.x+e.width},at:e.y,horizontal:!0},{side:"bottom",base:{start:e.x,end:e.x+e.width},at:e.y+e.height,horizontal:!0},{side:"left",base:{start:e.y,end:e.y+e.height},at:e.x,horizontal:!1},{side:"right",base:{start:e.y,end:e.y+e.height},at:e.x+e.width,horizontal:!1}];let a=null,l=1/0;for(const{side:c,base:d,at:u,horizontal:f}of r){const p=[];for(const{rect:g}of i)(f?g.y<=u&&u<=g.y+g.height:g.x<=u&&u<=g.x+g.width)&&p.push(f?{start:g.x,end:g.x+g.width}:{start:g.y,end:g.y+g.height});for(const g of rS(d,p)){if(g.end-g.start<iS)continue;const m=(g.start+g.end)/2,h=f?m:u,v=f?u:m,y=Math.hypot(s.x-h,s.y-v);y<l&&(l=y,a={x:h,y:v,side:c})}}return a}function cS(e,t){const n=Math.max(t.x-(e.x+e.width),e.x-(t.x+t.width)),o=Math.max(t.y-(e.y+e.height),e.y-(t.y+t.height));if(n<0&&o<0)return null;const s=Math.max(e.x,t.x),i=Math.min(e.x+e.width,t.x+t.width),r=Math.max(e.y,t.y),a=Math.min(e.y+e.height,t.y+t.height);let l,c;i>=s?l=c=(s+i)/2:t.x>e.x?(l=e.x+e.width,c=t.x):(l=e.x,c=t.x+t.width);let d,u;a>=r?d=u=(r+a)/2:t.y>e.y?(d=e.y+e.height,u=t.y):(d=e.y,u=t.y+t.height);const f=n>=o,p=(g,m,h)=>f?m<=g.x?"left":"right":h<=g.y?"top":"bottom";return{from:{x:l,y:d,side:p(e,l,d)},to:{x:c,y:u,side:p(t,c,u)}}}function Up(e,t){const n=Math.min(160,Math.max(24,.4*t));switch(e.side){case"left":return{x:e.x-n,y:e.y};case"right":return{x:e.x+n,y:e.y};case"top":return{x:e.x,y:e.y-n};default:return{x:e.x,y:e.y+n}}}function dS(e){return{x:e.x+e.width/2,y:e.y+e.height/2}}const yn="http://www.w3.org/2000/svg";let uS=0;function Fp(e,t,n,o,s){const i=aS(e,s);return t===null||$p(i,t,o,n)?i:lS(e,t,o,n,s)??i}function fS(e,t){const n=document.createElementNS(yn,"defs"),o=(a,l,c)=>{const d=`${t}-${a}`,u=document.createElementNS(yn,"marker");u.setAttribute("id",d),u.setAttribute("viewBox","0 0 10 10"),u.setAttribute("refX","5"),u.setAttribute("refY","5"),u.setAttribute("markerWidth",c),u.setAttribute("markerHeight",c),u.setAttribute("markerUnits","strokeWidth");const f=document.createElementNS(yn,"circle");return f.setAttribute("cx","5"),f.setAttribute("cy","5"),f.setAttribute("r","4"),f.classList.add(l),u.appendChild(f),n.appendChild(u),d},s="os-window-link__endpoint",i=`${s}--active`,r={dot:{normal:o("dot",s,"7"),active:o("dot-active",i,"7")},port:{normal:o("port",s,"4.5"),active:o("port-active",i,"4.5")}};return e.appendChild(n),r}Pp({id:"svg-splines",label:S("Splines"),description:S("Curved connectors between related windows, ending in circular dots — the larger dot sits on the window the content belongs to; windows that reference each other get large dots on both ends."),mount:e=>{const t=++uS,n=(a,l)=>{const c=document.createElementNS(yn,"svg");return c.classList.add("os-window-links__svg"),a.appendChild(c),{svg:c,markers:fS(c,`os-window-link-${t}${l}`)}},o={base:n(e.container,""),elevated:n(e.elevatedContainer,"-elevated")},s=new Map,i=a=>{for(const{svg:c}of[o.base,o.elevated])c.setAttribute("width",String(a.container.width)),c.setAttribute("height",String(a.container.height)),c.setAttribute("viewBox",`0 0 ${a.container.width} ${a.container.height}`);const l=new Set;for(const c of a.edges){if(!c.from||!c.to)continue;const d=`${c.fromWindowId}→${c.toWindowId}:${c.kind}`;l.add(d);const u=c.elevated?"elevated":"base";let f=s.get(d);if(f&&f.surface!==u&&(f.group.remove(),s.delete(d),f=void 0),!f){const P=document.createElementNS(yn,"g");P.classList.add("os-window-link");const $=document.createElementNS(yn,"path");$.classList.add("os-window-link__path"),P.appendChild($),o[u].svg.appendChild(P),f={group:P,path:$,surface:u},s.set(d,f)}const p=a.obstacles??[],g=cS(c.from,c.to),m=(P,$,k)=>$===null||$p(P,$,p,k);let h=null;g&&m(g.from,c.fromZIndex,c.fromWindowId)&&(h=g.from),h||(h=Fp(c.from,c.fromZIndex,c.fromWindowId,p,g?{x:g.to.x,y:g.to.y}:dS(c.to)));let v=null;g&&m(g.to,c.toZIndex,c.toWindowId)&&(v=g.to),v||(v=Fp(c.to,c.toZIndex,c.toWindowId,p,{x:h.x,y:h.y}));const y=Math.hypot(v.x-h.x,v.y-h.y),x=Up(h,y),M=Up(v,y);f.path.setAttribute("d",`M ${h.x} ${h.y} C ${x.x} ${x.y}, ${M.x} ${M.y}, ${v.x} ${v.y}`);const I=o[f.surface].markers,W=c.focused?"active":"normal";f.path.setAttribute("marker-end",`url(#${I.dot[W]})`),f.path.setAttribute("marker-start",`url(#${c.bidirectional?I.dot[W]:I.port[W]})`),f.group.classList.toggle("os-window-link--active",c.focused)}for(const[c,d]of Array.from(s))l.has(c)||(d.group.remove(),s.delete(c))},r=e.onFrame(i);return i(e.getFrame()),()=>{r(),s.clear(),o.base.svg.remove(),o.elevated.svg.remove()}}});const Bp="os-window-links",Hp="os-window--linked",zp="os-window-links--visible";let Gp=!1;function pS({manager:e,osSettings:t}){if(Gp)return;Gp=!0;let n=t.getOsSettingsSnapshot(),o=null,s=null,i=null,r=null,a=0;const l=new Set;let c=!1;const d=new Set;let u=!1;const f=_=>{const O=_.element;return!O||!O.isConnected||_.state==="minimized"||O.offsetParent===null?null:{x:O.offsetLeft,y:O.offsetTop,width:O.offsetWidth,height:O.offsetHeight}},p=_=>_.state==="snapped-left"||_.state==="snapped-right"?null:f(_),g=()=>{const _=[];for(const L of Js()){if(L.rootWindowIds.length===0||L.children.length===0)continue;const F=[],D=(A,R,U)=>{const N=e.getById(A);!N||!U||F.push({windowId:A,role:R,content:U,rect:p(N),focused:N.isFocused(),state:N.state})};for(const A of L.rootWindowIds)D(A,"root",lt(A));for(const A of L.children)D(A.windowId,"child",A.content);F.length>0&&_.push({key:L.key,root:L.root,members:F})}const O=L=>{const F=Number.parseInt(L.element?.style.zIndex||"",10);return Number.isFinite(F)?F:null},H=e.getFocused()?.id??null,G=[];for(const L of io()){const F=e.getById(L.fromWindowId),D=e.getById(L.toWindowId);if(!F||!D)continue;const A=F.isFocused()||D.isFocused();G.push({fromWindowId:L.fromWindowId,toWindowId:L.toWindowId,kind:L.kind,bidirectional:L.bidirectional,focused:A,from:p(F),to:p(D),fromZIndex:O(F),toZIndex:O(D),elevated:H!==null&&(L.fromWindowId===H||L.toWindowId===H)})}const j=[];for(const L of e.getAll()){const F=f(L);F&&j.push({windowId:L.id,rect:F,zIndex:O(L)??0})}return{groups:_,edges:G,obstacles:j,container:{width:o?.offsetWidth??0,height:o?.offsetHeight??0}}},m=()=>{c||l.size===0||(c=!0,requestAnimationFrame(()=>{if(c=!1,!i)return;const _=g();for(const O of Array.from(l))try{O(_)}catch(H){typeof console<"u"&&console.error("[openstation] window-link frame subscriber threw:",H)}}))},h=()=>{if(o&&o.isConnected&&s?.isConnected)return o;const _=document.getElementById("os-area");if(!_)return null;o=document.createElement("div"),o.id=Bp,o.className="os-window-links",o.setAttribute("aria-hidden","true"),s=document.createElement("div"),s.id=`${Bp}-elevated`,s.className="os-window-links os-window-links--elevated",s.setAttribute("aria-hidden","true");const O=document.getElementById("os-widgets");return O&&O.parentElement===_?(O.insertAdjacentElement("afterend",s),O.insertAdjacentElement("afterend",o)):_.prepend(o,s),o},v=()=>io().length>0,y=()=>{let _=n.windowLinkRenderer||xa;return _=V(b.WINDOW_LINK_RENDERER,_),_===wn?wn:Ta(_)?_:Ta(xa)?xa:wn},x=()=>{if(a++,l.clear(),c=!1,r){try{r()}catch(_){T(b.SHELL_ERROR,{scope:"window-link-renderer-teardown",error:_})}r=null}i=null,o?.replaceChildren(),s?.replaceChildren()},M=_=>{const O=Ta(_),H=h();if(!O||!H||!s)return;i=_;const G=++a,j={container:H,elevatedContainer:s,getFrame:g,onFrame:L=>(l.add(L),()=>{l.delete(L)})};try{const L=O.mount(j);L instanceof Promise?L.then(F=>{if(G!==a){typeof F=="function"&&F();return}typeof F=="function"&&(r=F)}).catch(F=>{T(b.SHELL_ERROR,{scope:"window-link-renderer-mount",error:F}),G===a&&(i=null)}):typeof L=="function"&&(r=L)}catch(L){T(b.SHELL_ERROR,{scope:"window-link-renderer-mount",error:L}),i=null}m()},I=()=>{const _=e.getFocused();return _?new Set(gf(_.id)):new Set},W=()=>n.windowLinksEnabled!==!1,P=()=>{if(!o)return;const _=!u&&W()&&(n.windowLinkVisibility==="always"||n.windowLinkVisibility==="focus"&&I().size>0);o.classList.toggle(zp,_),s?.classList.toggle(zp,_)},$=()=>{if(!W()||n.windowLinkRaiseOnFocus===!1||n.windowLinkVisibility==="off")return;const _=e.getFocused();if(_)for(const O of xE(_.id)){const H=e.getById(O);H&&H.state!=="minimized"&&e.raise(O)}},k=()=>{if(!s)return;const _=e.getFocused(),O=I();if(!_||O.size===0||!W()||n.windowLinkVisibility==="off"){s.style.zIndex="";return}let H=-1/0;for(const G of[_.id,...O]){const j=e.getById(G),L=j?.element;if(!L||j.state==="minimized")continue;const F=Number.parseInt(L.style.zIndex||"",10);Number.isFinite(F)&&(H=Math.max(H,F))}s.style.zIndex=Number.isFinite(H)?String(H):""},w=()=>{const _=W()&&n.windowLinkHighlight!==!1&&n.windowLinkVisibility!=="off"?I():new Set;for(const O of d)_.has(O)||e.getById(O)?.element?.classList.remove(Hp);for(const O of _)e.getById(O)?.element?.classList.add(Hp);d.clear();for(const O of _)d.add(O)},E=()=>{const _=W()&&n.windowLinkVisibility!=="off"&&v()?y():wn;_===wn?i&&x():_!==i&&(x(),M(_)),P(),w(),k(),m()};K(b.WINDOW_BOUNDS_CHANGED,"desktop-mode/window-links-frame",()=>m());for(const _ of[b.WINDOW_MOVED,b.WINDOW_RESIZED,b.WINDOW_MINIMIZED,b.WINDOW_RESTORED,b.WINDOW_MAXIMIZED,b.WINDOW_UNMAXIMIZED,b.WINDOW_FULLSCREEN_ENTERED,b.WINDOW_FULLSCREEN_EXITED,b.SNAP_ZONE_COMMITTED,b.SNAP_SPLIT_FILLED,b.DESKTOP_SWITCHED,b.SHELL_RESIZED])K(_,"desktop-mode/window-links-frame",()=>m());K(b.WINDOW_FOCUSED,"desktop-mode/window-links-focus",()=>{$(),P(),w(),k(),m()}),K(b.WINDOW_BLURRED,"desktop-mode/window-links-blur",()=>{P(),w(),k(),m()}),K(b.OVERVIEW_ENTERING,"desktop-mode/window-links-overview",()=>{u=!0,P()}),K(b.OVERVIEW_EXITED,"desktop-mode/window-links-overview",()=>{u=!1,P(),m()}),wf(E),sS(E),t.subscribeOsSettings(_=>{const O=_.windowLinkRenderer!==n.windowLinkRenderer,H=O||_.windowLinkVisibility!==n.windowLinkVisibility||_.windowLinksEnabled!==n.windowLinksEnabled||_.windowLinkRaiseOnFocus!==n.windowLinkRaiseOnFocus||_.windowLinkHighlight!==n.windowLinkHighlight;n=_,H&&(O&&i&&x(),E())}),E()}function jp(e){return e==="comments"?0:e.startsWith("terms/")?1:e==="media"?2:e==="links"?3:4}function hS({items:e,onPick:t}){const n=document.createElement("os-menu");n.classList.add("os-window__menu-panel"),n.classList.add("os-window__related-panel");const o=new Map;for(const r of e){const a=o.get(r.group);a?a.push(r):o.set(r.group,[r])}const s=Array.from(o.entries()).sort((r,a)=>jp(r[0])-jp(a[0])),i=[];for(const[,r]of s){const a=r.find(l=>typeof l.groupLabel=="string"&&l.groupLabel!=="")?.groupLabel;if(a){const l=document.createElement("div");l.className="os-window__related-group",l.setAttribute("role","presentation"),l.textContent=a,n.appendChild(l)}for(const l of r){const c=document.createElement("os-menu-item");c.setAttribute("role","menuitem"),c.setAttribute("value",l.id),c.tabIndex=-1,l.icon&&c.setAttribute("icon",l.icon),c.classList.add("os-window__related-item"),c.textContent=typeof l.count=="number"?`${l.label} (${l.count})`:l.label,c.addEventListener("os-menu-item-click",d=>{d.stopPropagation(),t(l)}),i.push(c),n.appendChild(c)}}return n.addEventListener("keydown",r=>{const a=r,l=i.indexOf(n.ownerDocument.activeElement);if(a.key==="ArrowDown"||a.key==="ArrowUp"){a.preventDefault(),a.stopPropagation();const c=a.key==="ArrowDown";let d=i[c?0:i.length-1];l!==-1&&(d=i[(l+(c?1:-1)+i.length)%i.length]),d?.focus()}else if(a.key==="Home"||a.key==="End")a.preventDefault(),a.stopPropagation(),i[a.key==="Home"?0:i.length-1]?.focus();else if(a.key==="Enter"||a.key===" "){const c=i[l];c&&(a.preventDefault(),a.stopPropagation(),c.dispatchEvent(new CustomEvent("os-menu-item-click",{bubbles:!0})))}}),n}function Vp(e){if(!e||typeof e!="object")return!1;const t=e,n=o=>typeof o=="string"&&o.trim()!=="";return n(t.id)&&n(t.group)&&n(t.label)&&(n(t.url)||n(t.windowId))&&(t.url===void 0||typeof t.url=="string")&&(t.windowId===void 0||typeof t.windowId=="string")&&(t.params===void 0||!!t.params&&typeof t.params=="object")&&(t.groupLabel===void 0||typeof t.groupLabel=="string")&&(t.icon===void 0||typeof t.icon=="string")&&(t.count===void 0||typeof t.count=="number"&&Number.isFinite(t.count))}function qp(e){const t=lt(e)??null,n=t&&Array.isArray(t.related)?t.related.map(s=>({...s})):[],o=V(b.RELATED_ENTITIES_ITEMS,n,{windowId:e,content:t});return Array.isArray(o)?o.filter(Vp):(typeof console<"u"&&console.warn("[openstation] `os.related-entities.items` filter returned a non-array; falling back to the identity list."),n.filter(Vp))}function Da(e){e?.querySelectorAll(".os-window__related-panel").forEach(t=>{t._wpdRelatedClose?t._wpdRelatedClose():t.remove()})}function mS(e){const t=n=>{n.stopImmediatePropagation()};e.addEventListener("dblclick",t,!0),setTimeout(()=>{e.removeEventListener("dblclick",t,!0)},500)}function gS(e,t,n){const o=e.closest(".os-window__titlebar");if(!o)return;const s=qp(t.id);if(s.length===0)return;let i=null;const r=()=>{i&&(document.removeEventListener("pointerdown",i,!0),i=null),o.removeEventListener("keydown",a),l.remove(),e.setAttribute("aria-expanded","false")},a=c=>{c.key==="Escape"&&(c.stopPropagation(),r(),e.focus())},l=hS({items:s,onPick:c=>{r(),mS(o),n(c)}});l._wpdRelatedClose=r,o.appendChild(l),o.addEventListener("keydown",a),e.setAttribute("aria-expanded","true"),i=c=>{const d=c.target;!d||l.contains(d)||e.contains(d)||r()},setTimeout(()=>{i&&document.addEventListener("pointerdown",i,!0)},0),l.querySelector('[role="menuitem"]')?.focus()}function wS({manager:e,openUrl:t}){wi({id:"desktop-mode/related-entities",label:S("Related"),icon:"dashicons-networking",placement:"right",order:60,match:n=>qp(n.id).length>0,render:(n,o)=>{Da(o.element),n.setAttribute("aria-haspopup","menu"),n.setAttribute("aria-expanded","false"),n.addEventListener("click",s=>{if(s.stopPropagation(),o.element?.querySelector(".os-window__related-panel")){Da(o.element);return}gS(n,o,t)})}}),K(b.WINDOW_CONTENT_CHANGED,"desktop-mode/related-entities",n=>{if(!n?.windowId)return;const o=e.getById(n.windowId);o&&(Da(o.element),o.renderCustomTitleBarButtons?.())})}const Ra="os-broadcast",Kp="os-broadcast",Yp=window.location.origin;let Oa=null;function yS(e){Oa=e}function Ma(e,t){const n=String(V("os.broadcast.topic",e,{payload:t})??e),o=V("os.broadcast.payload",t,{topic:n}),s={topic:n,payload:o};if(document.dispatchEvent(new CustomEvent(Ra,{detail:s})),T(b.BROADCAST,s),Ee.publish(n,o),!Oa)return;const i={type:Kp,topic:n,payload:o};for(const r of Oa._stack){const a=r.iframe?.contentWindow;if(a)try{a.postMessage(i,Yp)}catch{}}}function bn(e,t){const n=o=>{const s=o.detail;if(s&&!(e!=="*"&&s.topic!==e))try{t(s.payload,{topic:s.topic})}catch(i){T(b.SHELL_ERROR,{scope:"broadcast-subscriber",topic:s.topic,error:i})}};return document.addEventListener(Ra,n),()=>document.removeEventListener(Ra,n)}function bS(){window.addEventListener("message",e=>{if(e.origin!==Yp)return;const t=e.data;!t||t.type!==Kp||t._fromParent||typeof t.topic=="string"&&Ma(t.topic,t.payload)})}const vS=new Set(["saved","no-editor","not-dirty","error"]);let Xp=0;function Zp(e){if(!(typeof e!="string"||e===""))try{return new URL(e,window.location.origin).origin===window.location.origin?e:void 0}catch{return}}function _S(e,{timeoutMs:t=1e4}={}){const n=e.iframe?.contentWindow;if(!n)return Promise.resolve({status:"no-editor"});Xp+=1;const o=`os-editor-preview-${Date.now()}-${Xp}`;return new Promise(s=>{let i=null,r=!1;const a=c=>{r||(r=!0,window.removeEventListener("message",l),i!==null&&window.clearTimeout(i),s(c))},l=c=>{if(c.origin!==window.location.origin)return;const d=c?.data;if(!d||typeof d!="object"||d.type!=="os-editor-autosave-response"||d.requestId!==o)return;const u=typeof d.status=="string"&&vS.has(d.status)?d.status:"error",f=Zp(d.previewUrl);a(f?{status:u,previewUrl:f}:{status:u})};window.addEventListener("message",l),i=window.setTimeout(()=>a({status:"timeout"}),t);try{n.postMessage({type:"os-editor-autosave-request",requestId:o},window.location.origin)}catch{a({status:"no-editor"})}})}const Oe=ie("desktop-mode/editor-preview",()=>({pairings:new Map,busyEditors:new Set})),ES=400,Jp=1500;function ho(e){return e?`${e.type}:${e.id}`:""}function kS(e){for(const t of Oe.state.pairings.values())if(t.previewWindowId===e)return t}function SS(){return typeof window.matchMedia=="function"&&window.matchMedia("(max-width: 767px)").matches}function AS(e){const t=e.getCurrentUrl?.()??"";if(!t)return!1;try{return new URL(t,window.location.origin).pathname.endsWith("/post-new.php")}catch{return!1}}function bi(e,t,n,o){Oe.state.pairings.delete(t.editorWindowId),t.reloadTimer!==null&&(window.clearTimeout(t.reloadTimer),t.reloadTimer=null);try{t.unsubscribe()}catch{}if(eh(e,t),o!=="none"){const i=e.getById(t.previewWindowId);i&&(o==="destroy"?i.destroy?.():i.close?.())}const s={editorWindowId:t.editorWindowId,previewWindowId:t.previewWindowId,reason:n};document.dispatchEvent(new CustomEvent("os-editor-preview-closed",{detail:s})),T(b.EDITOR_PREVIEW_CLOSED,s),e.getById(t.editorWindowId)?.renderCustomTitleBarButtons?.()}function Pa(e,t,n){t.reloadTimer!==null&&window.clearTimeout(t.reloadTimer),t.reloadTimer=window.setTimeout(()=>{t.reloadTimer=null;const o=e.getById(t.previewWindowId);if(!o)return;const s=n||lt(t.editorWindowId)?.previewUrl,i=s&&s!==t.openUrl?s:void 0;typeof o.swapReload=="function"?(i&&(t.openUrl=i),o.swapReload(i)):i&&o.navigateTo?(t.openUrl=i,o.navigateTo(i)):o.reload?.()},ES)}function CS(e,t,n){const o=`os.${n.type}.changed`,s=String(n.id);t.unsubscribe=bn(o,i=>{const r=i?.ids;!Array.isArray(r)||!r.some(a=>String(a)===s)||Pa(e,t)})}let Qp=0;function eh(e,t){if(!t.watchId)return;const n=e.getById(t.editorWindowId);try{n?.iframe?.contentWindow?.postMessage({type:"os-editor-live-unwatch",watchId:t.watchId},window.location.origin)}catch{}t.watchId=""}function th(e,t,n){eh(e,t);const o=V(b.EDITOR_PREVIEW_LIVE,{enabled:!0,debounceMs:Jp},{editorWindowId:t.editorWindowId,content:n});if(!o||o.enabled===!1)return;const s=e.getById(t.editorWindowId)?.iframe?.contentWindow;if(!s)return;Qp+=1;const i=`${t.previewWindowId}-watch-${Qp}`;try{s.postMessage({type:"os-editor-live-watch",watchId:i,debounceMs:typeof o.debounceMs=="number"?o.debounceMs:Jp},window.location.origin),t.watchId=i}catch{}}let IS=_S;async function xS(e,t){const n=Oe.state.pairings.get(t.id);if(n){bi(e,n,"toggled","close");return}if(Oe.state.busyEditors.has(t.id)||!e.getById(t.id))return;const o=lt(t.id);if(!o?.previewUrl){X({message:S("No preview is available for this content.")});return}Oe.state.busyEditors.add(t.id),t.renderCustomTitleBarButtons?.();const s=SS();s||t.applySnap?.("left");const i=IS(t);i.then(f=>{f.status==="error"&&X({message:S("Couldn't save your latest changes — the preview shows the last saved version.")})}).finally(()=>{Oe.state.busyEditors.delete(t.id),e.getById(t.id)?.renderCustomTitleBarButtons?.()});const r=`editor-preview-${String(o.type).replace(/\//g,"-")}-${o.id}`;let a=S("Preview");o.label&&(a=le(S("Preview: %s"),o.label));let l={id:r,baseId:r,url:o.previewUrl,title:a,icon:"dashicons-visibility",ephemeral:!0,...s?{}:{initialState:"snapped-right"}};const c=V(b.EDITOR_PREVIEW_WINDOW_CONFIG,l,{editorWindowId:t.id,content:o});if(c&&typeof c=="object"&&typeof c.id=="string"&&c.id!==""&&typeof c.url=="string"&&c.url!==""?l=c:typeof console<"u"&&console.warn("[openstation] `os.editor-preview.window-config` filter returned an invalid config; using the default."),await e.open(l),!e.getById(t.id)||ho(lt(t.id))!==ho(o)){e.getById(l.id)?.destroy?.();return}const d={editorWindowId:t.id,previewWindowId:l.id,postKey:ho(o),openUrl:l.url,unsubscribe:()=>{},reloadTimer:null,watchId:""};CS(e,d,o),th(e,d,o),Oe.state.pairings.set(t.id,d);const u={editorWindowId:t.id,previewWindowId:l.id,content:o};document.dispatchEvent(new CustomEvent("os-editor-preview-opened",{detail:u})),T(b.EDITOR_PREVIEW_OPENED,u),i.then(f=>{Oe.state.pairings.get(t.id)===d&&f.status==="saved"&&Pa(e,d,f.previewUrl)})}function LS({manager:e}){wi({id:"desktop-mode/editor-preview",label:S("Preview"),icon:"dashicons-visibility",placement:"right",order:55,match:t=>!t.config.native&&(!!lt(t.id)?.previewUrl||AS(t)),render:(t,n)=>{if(!lt(n.id)?.previewUrl){const i=S("Save the post to enable its preview");t.setAttribute("aria-disabled","true"),t.setAttribute("aria-label",i),t.setAttribute("title",i),t.classList.add("os-window__btn--disabled"),t.addEventListener("click",r=>{r.stopPropagation(),X({message:S("The preview opens once the post has been saved.")})});return}const o=Oe.state.pairings.has(n.id),s=Oe.state.busyEditors.has(n.id);t.setAttribute("aria-pressed",String(o)),s&&(t.setAttribute("aria-busy","true"),t.classList.add("os-window__btn--busy")),t.addEventListener("click",i=>{i.stopPropagation(),xS(e,n)})}}),K(b.WINDOW_CONTENT_CHANGED,"desktop-mode/editor-preview",t=>{if(!t?.windowId)return;const n=Oe.state.pairings.get(t.windowId);n&&ho(t.content)!==n.postKey&&bi(e,n,"content-changed","close"),e.getById(t.windowId)?.renderCustomTitleBarButtons?.()}),K(b.WINDOW_CLOSED,"desktop-mode/editor-preview",t=>{if(!t?.windowId)return;const n=Oe.state.pairings.get(t.windowId);if(n){bi(e,n,"editor-closed","destroy");return}const o=kS(t.windowId);o&&bi(e,o,"preview-closed","none")}),K(b.IFRAME_READY,"desktop-mode/editor-preview",t=>{if(!t?.windowId)return;const n=Oe.state.pairings.get(t.windowId);if(n){const o=lt(t.windowId);o&&ho(o)===n.postKey&&th(e,n,o)}e.getById(t.windowId)?.renderCustomTitleBarButtons?.()}),window.addEventListener("message",t=>{if(t.origin!==window.location.origin)return;const n=t?.data;if(!(!n||typeof n!="object"||n.type!=="os-editor-live-saved"||typeof n.watchId!="string")){for(const o of Oe.state.pairings.values())if(o.watchId&&o.watchId===n.watchId){Pa(e,o,Zp(n.previewUrl));return}}})}const nh="none",oh=ie("desktop-mode/unfocus-effect-registry",()=>({registry:new Map,listeners:new Set})),mo=oh.state.registry,Wa=oh.state.listeners,sh=/^[a-z0-9_/-]+$/;function vi(e){const t=[];!e||typeof e!="object"?t.push("def (not an object)"):(typeof e.id!="string"||e.id.trim()===""?t.push("id (missing)"):sh.test(e.id.trim().toLowerCase())?e.id.trim().toLowerCase()===nh&&t.push('id ("none" is reserved)'):t.push(`id (must match ${sh} — lowercase alphanum, hyphens, underscores, slashes for vendor/sub-id)`),(typeof e.label!="string"||e.label.trim()==="")&&t.push("label (missing)"),typeof e.className!="string"&&typeof e.apply!="function"&&t.push("className|apply (at least one must be provided — a CSS class to toggle or an apply callback)")),Ne("UnfocusEffect",t,e);const n=e.id.trim().toLowerCase();mo.set(n,{...e,id:n}),Ua()}function TS(e){mo.delete(e.toLowerCase())&&Ua()}function NS(e){if(!e)return 0;let t=0;for(const[n,o]of Array.from(mo.entries()))o.owner===e&&(mo.delete(n),t++);return t>0&&Ua(),t}function $a(){const e=Array.from(mo.values()),t=V(b.UNFOCUS_EFFECTS,e);return Array.isArray(t)?t:(typeof console<"u"&&console.warn("[openstation] `os.unfocus-effects` filter returned a non-array; falling back to registry list."),e)}function ih(e){return $a().find(t=>t.id===e)}function DS(e){return Wa.add(e),()=>{Wa.delete(e)}}function Ua(){const e=Array.from(Wa);for(const t of e)try{t()}catch(n){typeof console<"u"&&console.error("[openstation] unfocus-effect registry listener threw:",n)}}vi({id:"darken",label:S("Darken"),description:S("Dim unfocused windows so the focused one stands out."),className:"os-window--fx-darken"}),vi({id:"frost",label:S("Frost"),description:S("Throw unfocused windows out of focus — a soft, frosted-glass blur, as if you were looking at them through an iced-over pane."),className:"os-window--fx-frost"}),vi({id:"grayscale",label:S("Grayscale"),description:S("Drain the colour from unfocused windows so the focused one is the only thing still in colour — your eye snaps right to it."),className:"os-window--fx-grayscale"});function RS(){const e=new Set,t=new Set,n=async o=>{if(!o.scriptUrl||t.has(o.scriptUrl)){e.add(o.handle);return}try{await ke(o.scriptUrl,{translations:o.scriptTranslations,l10n:o.scriptL10n,before:o.scriptBefore,after:o.scriptAfter})}catch(s){T(b.SHELL_ERROR,{scope:"unfocus-effect-script-load",handle:o.handle,url:o.scriptUrl,error:s});return}t.add(o.scriptUrl),e.add(o.handle)};return async o=>{const s=new Set;for(const i of o)i.handle&&s.add(i.handle);for(const i of Array.from(e))s.has(i)||(NS(i),e.delete(i));for(const i of o)!i.handle||e.has(i.handle)||await n(i)}}function OS(){const e=new Set,t=new Set,n=async o=>{if(!o.scriptUrl||t.has(o.scriptUrl)){e.add(o.handle);return}try{await ke(o.scriptUrl,{translations:o.scriptTranslations,l10n:o.scriptL10n,before:o.scriptBefore,after:o.scriptAfter})}catch(s){T(b.SHELL_ERROR,{scope:"window-link-renderer-script-load",handle:o.handle,url:o.scriptUrl,error:s});return}t.add(o.scriptUrl),e.add(o.handle)};return async o=>{const s=new Set;for(const i of o)i.handle&&s.add(i.handle);for(const i of Array.from(e))s.has(i)||(oS(i),e.delete(i));for(const i of o)!i.handle||e.has(i.handle)||await n(i)}}const Fa="data-desktop-unfocus-effect",Ba="data-desktop-unfocus-effect-class";let rh=!1;function MS(e){return e.querySelector("canvas")!==null}function PS({manager:e,osSettings:t}){if(rh)return;rh=!0;let n=t.getOsSettingsSnapshot().unfocusEffect;const o=(r,a)=>{const l=r.getAttribute(Ba);l&&(r.classList.remove(l),r.removeAttribute(Ba));const c=r.getAttribute(Fa);c&&ih(c)?.clear?.(r);for(const d of a)d.className&&r.classList.remove(d.className);r.removeAttribute(Fa)},s=(r,a)=>{a.className&&(r.classList.add(a.className),r.setAttribute(Ba,a.className)),r.setAttribute(Fa,a.id),a.apply?.(r)},i=()=>{const r=n===nh?void 0:ih(n),a=$a();for(const l of e.getAll()){const c=l.element;c&&(o(c,a),!(!r||l.isFocused()||l.state==="minimized")&&(MS(c)||s(c,r)))}};for(const r of["os-window-opened","os-window-reopened","os-window-closed","os-window-focused","os-window-blurred"])document.addEventListener(r,()=>i());t.subscribeOsSettings(r=>{n=r.unfocusEffect,i()}),DS(()=>i()),i()}function WS(){const e=new Set,t=new Set,n=async o=>{if(!o.scriptUrl||t.has(o.scriptUrl)){e.add(o.handle);return}try{await ke(o.scriptUrl,{translations:o.scriptTranslations,l10n:o.scriptL10n,before:o.scriptBefore,after:o.scriptAfter})}catch(s){T(b.SHELL_ERROR,{scope:"dock-rail-renderer-script-load",handle:o.handle,url:o.scriptUrl,error:s});return}t.add(o.scriptUrl),e.add(o.handle)};return async o=>{const s=new Set;for(const i of o)i.handle&&s.add(i.handle);for(const i of Array.from(e))s.has(i)||(Rb(i),e.delete(i));for(const i of o)!i.handle||e.has(i.handle)||await n(i)}}function ah(e){return e.startsWith("dashicons-")?e:"dashicons-admin-generic"}function $S(e,t){if(t.url&&pn(t.url)||t.url&&Ge(t.url))return;const n=ae(t.url,e.adminUrl);e.windowManager.open({id:n,baseId:n,url:t.url,parentUrl:t.url,title:t.title,icon:ah(t.icon),submenu:t.submenu,selfLabel:t.selfLabel,multi:!!t.multi})}function US(e,t,n){pn(n.url)||Ge(n.url)||e.windowManager.open({id:ae(n.url,e.adminUrl),baseId:ae(t.url,e.adminUrl),url:n.url,parentUrl:t.url,title:t.title,icon:ah(t.icon),submenu:t.submenu,selfLabel:t.selfLabel,multi:!!t.multi})}const FS=130,BS=240,HS=160,_i=14,lh=18,Et=12,zS=160,GS="os-constellation-open",Ei=e=>e.dataset.menuSlug??e.dataset.constellationId??"",Ha=e=>{const t=e.closest(".os-dock")?.getAttribute("data-os-dock-placement");return t==="left"?"right":t==="right"?"left":"top"},jS={top:"ArrowUp",right:"ArrowRight",left:"ArrowLeft"};function VS(){return typeof window.matchMedia=="function"&&window.matchMedia("( prefers-reduced-motion: reduce )").matches}function qS(e){let t=null,n=null,o="",s=null,i=null;const r=()=>{s!==null&&(window.clearTimeout(s),s=null)},a=()=>{i!==null&&(window.clearTimeout(i),i=null)},l=x=>{if(!(x instanceof Element))return null;const M=x.closest(".os-dock__item");return!M||!Ei(M)||!M.closest(".os-dock")?null:M},c=new Set,d=()=>{document.body.classList.toggle(GS,t!==null||c.size>0)},u=(x,M={})=>{if(!t)return;const I=n,W=t;t=null,n=null,o="",I?.removeAttribute("data-constellation-open"),x==="cut"||VS()?W.remove():(W.classList.remove("os-constellation--open"),W.classList.add("os-constellation--closing"),c.add(W),window.setTimeout(()=>{W.remove(),c.delete(W),d()},HS)),d(),M.restoreFocus&&I&&I.querySelector(".os-dock__item-primary")?.focus(),T(b.CONSTELLATION_CLOSED,{menuSlug:I?Ei(I):"",handoff:M.handoff===!0})},f=(x=!1,M=!1)=>{r(),a(),u(M?"cut":"exit",{restoreFocus:x})},p=(x,M=!1)=>{r(),a();const I=Ei(x);if(t&&o===I){M&&vn(t,0);return}const W=KS(e,x);if(!W){f();return}const P=t!==null;u("exit",{handoff:P});const $=YS(e,W);t=ZS(e,W,$,x,f);for(const k of za(t))k.tabIndex=-1;n=x,o=I,t.dataset.osCnSide=Ha(x),document.body.appendChild(t),d(),x.setAttribute("data-constellation-open",""),sA(t),iA(t,x),requestAnimationFrame(()=>{t?.classList.add("os-constellation--open"),M&&t&&vn(t,0)}),T(b.CONSTELLATION_OPENED,{menuSlug:I,item:W,instances:$,handoff:P})},g=x=>{if(x.pointerType&&x.pointerType!=="mouse")return;if(t&&x.target instanceof Node&&t.contains(x.target)){a();return}const M=l(x.target);M&&(a(),!(t&&o===Ei(M))&&(r(),s=window.setTimeout(()=>{s=null,p(M)},t?0:FS)))},m=x=>{const M=x.relatedTarget;M instanceof Node&&(t&&t.contains(M)||n&&n.contains(M)||l(M))||(r(),a(),i=window.setTimeout(()=>{i=null,f()},BS))},h=x=>{if(t&&x.target instanceof Node&&t.contains(x.target)){const I=za(t),W=I.indexOf(x.target);x.key==="Escape"?(x.preventDefault(),f(!0)):x.key==="ArrowDown"?(x.preventDefault(),vn(t,W+1)):x.key==="ArrowUp"?(x.preventDefault(),W<=0?f(!0):vn(t,W-1)):x.key==="Home"?(x.preventDefault(),vn(t,0)):x.key==="End"?(x.preventDefault(),vn(t,I.length-1)):x.key==="Tab"&&f(!0);return}const M=l(x.target);M&&(x.key===jS[Ha(M)]?(x.preventDefault(),p(M,!0)):x.key==="Escape"&&f())},v=()=>f(!1,!0),y=x=>{!t||!(x.target instanceof Element)||t.contains(x.target)||x.target.closest(".os-dock__item")&&f()};return document.body.setAttribute(ia,""),document.addEventListener("pointerover",g),document.addEventListener("pointerout",m),document.addEventListener("click",y),document.addEventListener("keydown",h),window.addEventListener("resize",v),window.addEventListener("blur",v),document.addEventListener("os-layout-changed",v),document.addEventListener(ti,v),document.addEventListener("scroll",v,!0),()=>{f(!1,!0);for(const x of c)x.remove();c.clear(),d(),document.body.removeAttribute(ia),document.removeEventListener(ti,v),document.removeEventListener("pointerover",g),document.removeEventListener("pointerout",m),document.removeEventListener("click",y),document.removeEventListener("keydown",h),window.removeEventListener("resize",v),window.removeEventListener("blur",v),document.removeEventListener("os-layout-changed",v),document.removeEventListener("scroll",v,!0)}}function KS(e,t){const n=t.dataset.menuSlug;if(n){const i=e.getMenuItems().find(a=>a.id===n);if(!i)return null;const r=i.selfLabel?[{title:i.selfLabel,url:i.url},...i.submenu]:i.submenu;return{id:i.id,title:i.title,icon:i.icon,submenu:r,menuItem:i}}const o=t.dataset.constellationId;if(!o)return null;const s=e.getSystemItem?.(o);return s?.submenu?.length?{id:s.id,title:s.title,icon:s.icon,submenu:s.submenu,menuItem:null}:null}function YS(e,t){const n=new Set;if(t.menuItem){const o=XS(e,t.menuItem);for(const i of e.windowManager.getAllByBaseIdOnActiveDesktop(o))n.add(i);const s=ae(t.menuItem.url,e.adminUrl);if(s){const i=e.windowManager.getActiveDesktopId();for(const r of e.windowManager.getAll())(r.config.desktopId||i)===i&&r.config.parentUrl&&ae(r.config.parentUrl,e.adminUrl)===s&&n.add(r)}return Array.from(n)}for(const o of t.submenu)if(o.windowId)for(const s of e.windowManager.getAllByBaseIdOnActiveDesktop(o.windowId))n.add(s);return Array.from(n)}function XS(e,t){return t.windowId?t.windowId:ae(t.url,e.adminUrl)}function ZS(e,t,n,o,s){const i=document.createElement("div");i.className="os-constellation",i.setAttribute("role","menu"),i.setAttribute("aria-label",le(S("%s menu"),t.title)),i.style.setProperty("--os-cn-hue",String(fn(t.title)));const r=document.createElement("div");r.className="os-constellation__surface",i.appendChild(r),r.appendChild(JS(e,t,s));let a=0;const l=()=>a++;n.length>0&&r.appendChild(QS(e,t,n,s,l)),t.submenu.length>0&&r.appendChild(eA(e,t,s,l)),r.addEventListener("pointermove",f=>{const p=r.getBoundingClientRect();!p.width||!p.height||(r.style.setProperty("--os-cn-x",`${(f.clientX-p.left)/p.width*100}%`),r.style.setProperty("--os-cn-y",`${(f.clientY-p.top)/p.height*100}%`))});const c=document.createElement("span");c.className="os-constellation__sheen",c.setAttribute("aria-hidden","true"),i.appendChild(c);const d=document.createElement("span");d.className="os-constellation__beam",d.setAttribute("aria-hidden","true"),i.appendChild(d);const u={item:t,instances:n,tile:o};return V(b.CONSTELLATION_PANEL,i,u)}function JS(e,t,n){const o=document.createElement("button");o.type="button",o.className="os-constellation__head os-constellation__row",o.setAttribute("role","menuitem");const s=document.createElement("span");s.className="os-constellation__head-icon",s.setAttribute("aria-hidden","true"),s.appendChild(nA(t.icon)),o.appendChild(s);const i=document.createElement("span");i.className="os-constellation__head-text";const r=document.createElement("span");return r.className="os-constellation__head-title",r.textContent=t.title,i.appendChild(r),o.appendChild(i),o.addEventListener("click",()=>{if(n(),t.menuItem){$S(e,t.menuItem);return}ch(e,t,t.submenu[0])}),o}function ch(e,t,n){if(n){if(n.onSelect){n.onSelect();return}if(t.menuItem){US(e,t.menuItem,n);return}n.url&&window.open(n.url,"_blank","noopener,noreferrer")}}function QS(e,t,n,o,s){const i=document.createElement("div");i.className="os-constellation__group os-constellation__group--live",i.setAttribute("role","group"),i.setAttribute("aria-label",S("Open windows")),i.appendChild(dh(le(nn("%d open window","%d open windows",n.length),n.length)));for(const r of n){const a=document.createElement("button");a.type="button",a.className="os-constellation__row os-constellation__row--live",a.setAttribute("role","menuitem"),a.style.setProperty("--os-cn-row",String(s())),r.state==="minimized"&&(a.dataset.state="minimized");const l=document.createElement("span");l.className="os-constellation__pip",l.setAttribute("aria-hidden","true"),a.appendChild(l);const c=document.createElement("span");c.className="os-constellation__row-label",c.textContent=r.config.title||t.title,a.appendChild(c);const d=document.createElement("span");d.className="os-constellation__row-meta",d.textContent=r.state==="minimized"?S("Minimized"):S("Open"),a.appendChild(d),a.addEventListener("click",()=>{o(),r.state==="minimized"&&r.restore(),e.windowManager.focus(r)}),i.appendChild(a)}return i}function eA(e,t,n,o){const s=document.createElement("div");s.className="os-constellation__group",s.setAttribute("role","group"),s.setAttribute("aria-label",t.title),s.appendChild(dh(S("Open")));for(const i of t.submenu)s.appendChild(tA(e,t,i,n,o()));return s}function tA(e,t,n,o,s){const i=document.createElement("button");i.type="button",i.className="os-constellation__row os-constellation__row--sub",i.setAttribute("role","menuitem"),i.style.setProperty("--os-cn-row",String(s)),i.style.setProperty("--os-cn-row-hue",String(fn(n.title)));const r=document.createElement("span");r.className="os-constellation__orbit",r.setAttribute("aria-hidden","true"),i.appendChild(r);const a=document.createElement("span");return a.className="os-constellation__row-label",a.textContent=n.title,i.appendChild(a),i.addEventListener("click",()=>{o(),ch(e,t,n)}),i}function dh(e){const t=document.createElement("span");return t.className="os-constellation__legend",t.textContent=e,t}function nA(e){if(!e.startsWith("dashicons-")){const n=document.createElement("span");if(n.className="os-constellation__head-art",ro(n,e,"currentColor"))return n}const t=document.createElement("span");return t.className="dashicons",t.classList.add(e.startsWith("dashicons-")?od(e):"dashicons-admin-generic"),t}function za(e){return Array.from(e.querySelectorAll(".os-constellation__row"))}function vn(e,t){const n=za(e);if(n.length===0)return;const o=Math.max(0,Math.min(n.length-1,t));n[o].focus()}const oA=["--wp-admin-theme-color","--os-titlebar-bg-focused","--os-titlebar-color-focused"];function sA(e){const t=document.querySelector(".os-shell");if(!t)return;const n=window.getComputedStyle(t);for(const o of oA){const s=n.getPropertyValue(o).trim();s&&e.style.setProperty(o,s)}}function iA(e,t){const n=t.getBoundingClientRect(),o=Ha(t),s=o==="top"?n.top-_i-Et:window.innerHeight-Et*2;if(e.style.setProperty("--os-cn-max-h",`${Math.max(zS,s)}px`),o!=="top"){e.style.left=o==="right"?`${n.right+_i}px`:`${n.left-_i}px`;const i=e.offsetHeight,r=window.innerHeight,a=Math.max(Et,Math.min(n.top,r-Et-i));e.style.top=`${a}px`;const l=Math.max(lh,Math.min(n.top+n.height/2-a,i-lh));e.style.setProperty("--os-cn-beam-y",`${l}px`);return}e.style.left=`${n.left+n.width/2}px`,e.style.top=`${n.top-_i}px`,requestAnimationFrame(()=>{const i=e.getBoundingClientRect(),r=window.innerWidth;let a=0;i.left<Et?a=Et-i.left:i.right>r-Et&&(a=r-Et-i.right),a!==0&&(e.style.setProperty("--os-cn-shift",`${a}px`),e.style.setProperty("--os-cn-beam-x",`${-a}px`))})}const uh=ie("desktop-mode/window-themes-registry",()=>({registry:new Map,listeners:new Set})),go=uh.state.registry,rA=uh.state.listeners,fh=/^[a-z0-9_/-]+$/;function ph(e){const t=[];if(!e||typeof e!="object")t.push("def (not an object)");else{if(typeof e.id!="string"||e.id.trim()===""?t.push("id (missing)"):fh.test(e.id.trim().toLowerCase())||t.push(`id (must match ${fh} — lowercase alphanum, hyphens, underscores, slashes for vendor/sub-id)`),!e.tokens||typeof e.tokens!="object")t.push("tokens (must be an object of CSS custom-property → value)");else for(const o of Object.keys(e.tokens))if(!o.startsWith("--")){t.push(`tokens.${o} (CSS custom-property keys must start with "--")`);break}typeof e.match!="function"&&t.push("match (must be a function)")}Ne("WindowTheme",t,e);const n=e.id.trim().toLowerCase();go.set(n,{...e,id:n}),Ga()}function hh(e){go.delete(e.toLowerCase())&&Ga()}function aA(e){if(!e)return 0;let t=0;for(const[n,o]of Array.from(go.entries()))o.owner===e&&(go.delete(n),t++);return t>0&&Ga(),t}function mh(){return Array.from(go.values()).sort((e,t)=>(e.priority??100)-(t.priority??100))}function Ga(){const e=Array.from(rA);for(const t of e)try{t()}catch(n){typeof console<"u"&&console.error("[openstation] window-theme registry listener threw:",n)}}function lA(){const e=new Set,t=new Set;let n=new Map;const o=new Set,s=async l=>{if(!l.scriptUrl||t.has(l.scriptUrl)){e.add(l.handle);return}try{await ke(l.scriptUrl,{translations:l.scriptTranslations,l10n:l.scriptL10n,before:l.scriptBefore,after:l.scriptAfter})}catch(c){T(b.SHELL_ERROR,{scope:"window-theme-script-load",handle:l.handle,url:l.scriptUrl,error:c});return}t.add(l.scriptUrl),e.add(l.handle)},i=l=>{const c=new Map;if(!l)return c;for(const d of l){if(!d.scriptHandle||!d.id)continue;let u=c.get(d.scriptHandle);u||(u=new Set,c.set(d.scriptHandle,u)),u.add(d.id)}return c},r=l=>{const c=new Set;for(const u of mh())u.owner===l&&c.add(u.id);const d=n.get(l);if(d)for(const u of d)c.add(u);return c},a=l=>{if(l){for(const c of l)if(!(!c.id||!c.tokens))try{ph({id:c.id,label:c.label,tokens:c.tokens,priority:c.priority,match:()=>!0,owner:c.scriptHandle||void 0}),o.add(c.id)}catch(d){T(b.SHELL_ERROR,{scope:"window-theme-shell-register",id:c.id,error:d})}}};return async(l,c)=>{const d=new Set;for(const u of l)u.handle&&d.add(u.handle);for(const u of Array.from(e)){if(d.has(u))continue;const f=r(u);for(const p of f)hh(p),o.delete(p);aA(u),e.delete(u)}a(c);for(const u of l)!u.handle||e.has(u.handle)||await s(u);n=i(c)}}const gh=ie("desktop-mode/window-controls-registry",()=>({registry:new Map,listeners:new Set})),wo=gh.state.registry,cA=gh.state.listeners,wh=/^[a-z0-9_/-]+$/;function yo(e){const t=[];!e||typeof e!="object"?t.push("def (not an object)"):(typeof e.id!="string"||e.id.trim()===""?t.push("id (missing)"):wh.test(e.id.trim().toLowerCase())||t.push(`id (must match ${wh} — lowercase alphanum, hyphens, underscores, slashes for vendor/sub-id)`),(typeof e.label!="string"||e.label.trim()==="")&&t.push("label (missing)"),typeof e.onClick!="function"&&typeof e.render!="function"&&t.push("onClick|render (at least one must be a function)"),typeof e.render!="function"&&(typeof e.icon!="string"||e.icon.trim()==="")&&t.push("icon (required when render is omitted)"),typeof e.match!="function"&&t.push("match (must be a function)"),e.placement!==void 0&&e.placement!=="left"&&e.placement!=="right"&&e.placement!=="controls"&&t.push('placement (must be "left", "right", or "controls")')),Ne("WindowControl",t,e);const n=e.id.trim().toLowerCase();wo.set(n,{...e,id:n}),ja()}function yh(e){wo.delete(e.toLowerCase())&&ja()}function dA(e){if(!e)return 0;let t=0;for(const[n,o]of Array.from(wo.entries()))o.owner===e&&(wo.delete(n),t++);return t>0&&ja(),t}function bh(){return Array.from(wo.values()).sort((e,t)=>{const n=e.order??100,o=t.order??100;return n!==o?n-o:e.id.localeCompare(t.id)})}function ja(){const e=Array.from(cA);for(const t of e)try{t()}catch(n){typeof console<"u"&&console.error("[openstation] window-control registry listener threw:",n)}}function uA(){yo({id:"core/minimize",label:S("Minimize"),icon:"minimize",placement:"controls",order:10,core:!0,match:()=>!0,onClick:e=>{e.minimize()}}),yo({id:"core/maximize",label:S("Maximize"),icon:"maximize",placement:"controls",order:20,core:!0,match:()=>!0,onClick:e=>{e.toggleMaximize()}}),yo({id:"core/focus-tab",label:S("Enter fullscreen"),icon:"fullscreen",placement:"controls",order:30,core:!0,match:()=>!0,onClick:e=>{e.toggleFullscreen()}}),yo({id:"core/close",label:S("Close"),icon:"close",placement:"controls",order:50,core:!0,match:()=>!0,onClick:e=>{e.close()}})}function fA(){const e=new Set,t=new Set;let n=new Map;const o=async r=>{if(!r.scriptUrl||t.has(r.scriptUrl)){e.add(r.handle);return}try{await ke(r.scriptUrl,{translations:r.scriptTranslations,l10n:r.scriptL10n,before:r.scriptBefore,after:r.scriptAfter})}catch(a){T(b.SHELL_ERROR,{scope:"window-control-script-load",handle:r.handle,url:r.scriptUrl,error:a});return}t.add(r.scriptUrl),e.add(r.handle)},s=r=>{const a=new Map;if(!r)return a;for(const l of r){if(!l.scriptHandle||!l.id)continue;let c=a.get(l.scriptHandle);c||(c=new Set,a.set(l.scriptHandle,c)),c.add(l.id)}return a},i=r=>{const a=new Set;for(const c of bh())c.owner===r&&a.add(c.id);const l=n.get(r);if(l)for(const c of l)a.add(c);return a};return async(r,a)=>{const l=new Set;for(const c of r)c.handle&&l.add(c.handle);for(const c of Array.from(e))if(!l.has(c)){for(const d of i(c))yh(d);dA(c),e.delete(c)}for(const c of r)!c.handle||e.has(c.handle)||await o(c);n=s(a)}}const vh=ie("desktop-mode/window-slots-registry",()=>({registry:new Map,listeners:new Set})),bo=vh.state.registry,pA=vh.state.listeners,_h=/^[a-z0-9_/-]+$/,Eh=new Set(["before-titlebar","before-icon","icon","title","after-title","before-controls","controls","after-controls","after-titlebar"]);function kh(e){const t=[];!e||typeof e!="object"?t.push("def (not an object)"):(typeof e.id!="string"||e.id.trim()===""?t.push("id (missing)"):_h.test(e.id.trim().toLowerCase())||t.push(`id (must match ${_h} — lowercase alphanum, hyphens, underscores, slashes for vendor/sub-id)`),typeof e.slot!="string"||e.slot.trim()===""?t.push("slot (missing)"):Eh.has(e.slot)||t.push(`slot (must be one of ${Array.from(Eh).join(", ")})`),typeof e.match!="function"&&t.push("match (must be a function)"),typeof e.render!="function"&&t.push("render (must be a function)")),Ne("WindowSlot",t,e);const n=e.id.trim().toLowerCase();bo.set(n,{...e,id:n}),qa()}function Va(e){bo.delete(e.toLowerCase())&&qa()}function hA(e){if(!e)return 0;let t=0;for(const[n,o]of Array.from(bo.entries()))o.owner===e&&(bo.delete(n),t++);return t>0&&qa(),t}function Sh(){return Array.from(bo.values()).sort((e,t)=>{const n=e.order??100,o=t.order??100;return n!==o?n-o:e.id.localeCompare(t.id)})}function qa(){const e=Array.from(pA);for(const t of e)try{t()}catch(n){typeof console<"u"&&console.error("[openstation] window-slot registry listener threw:",n)}}function mA(){const e=new Set,t=new Set;let n=new Map;const o=async r=>{if(!r.scriptUrl||t.has(r.scriptUrl)){e.add(r.handle);return}try{await ke(r.scriptUrl,{translations:r.scriptTranslations,l10n:r.scriptL10n,before:r.scriptBefore,after:r.scriptAfter})}catch(a){T(b.SHELL_ERROR,{scope:"window-slot-script-load",handle:r.handle,url:r.scriptUrl,error:a});return}t.add(r.scriptUrl),e.add(r.handle)},s=r=>{const a=new Map;if(!r)return a;for(const l of r){if(!l.scriptHandle||!l.id)continue;let c=a.get(l.scriptHandle);c||(c=new Set,a.set(l.scriptHandle,c)),c.add(l.id)}return a},i=r=>{const a=new Set;for(const c of Sh())c.owner===r&&a.add(c.id);const l=n.get(r);if(l)for(const c of l)a.add(c);return a};return async(r,a)=>{const l=new Set;for(const c of r)c.handle&&l.add(c.handle);for(const c of Array.from(e))if(!l.has(c)){for(const d of i(c))Va(d);hA(c),e.delete(c)}for(const c of r)!c.handle||e.has(c.handle)||await o(c);n=s(a)}}const gA="desktop-mode-notice-dismissed";function wA(){const t=window.wp?.os?.config?.currentUserId;return typeof t=="number"&&t>0?String(t):"anon"}function Ah(){return`${gA}:${wA()}`}function Ka(){try{const e=window.localStorage.getItem(Ah());if(!e)return{};const t=JSON.parse(e);if(t&&typeof t=="object"&&!Array.isArray(t))return t}catch{}return{}}function Ch(e){try{window.localStorage.setItem(Ah(),JSON.stringify(e))}catch{}}function Ya(e){return e?Ka()[e]===!0:!1}function ki(e){if(!e)return;const t=Ka();t[e]=!0,Ch(t)}function Ih(e){if(!e)return;const t=Ka();t[e]&&(delete t[e],Ch(t))}const yA=ce`:host{display:flex;align-items:flex-start;gap:10px;width:100%;box-sizing:border-box;padding:10px 14px;font:var( --os-ui-notice-font,13px/1.5 var( --os-font,system-ui ) );color:var( --os-ui-notice-color,var( --os-ui-fg,#1d2327 ) );background:var( --os-ui-notice-bg,var( --os-ui-hover,rgba( 0,0,0,0.04 ) ) );border-block-end:1px solid var( --os-ui-notice-border,var( --os-ui-border,rgba( 0,0,0,0.08 ) ) );border-inline-start:4px solid var( --os-ui-notice-accent,var( --os-ui-border,#646970 ) )}:host( [ hidden ] ){display:none}.os-notice__icon{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;color:var( --os-ui-notice-accent,var( --os-ui-accent,#646970 ) )}.os-notice__icon[ hidden ]{display:none}.os-notice__label{flex:1;min-width:0;word-wrap:break-word}::slotted( a ){color:var( --os-ui-notice-link,var( --wp-admin-theme-color,#2271b1 ) );border-radius:2px}::slotted( a:hover ),::slotted( a:focus-visible ){color:var( --os-ui-notice-link-hover,var( --os-ui-accent-strong,#135e96 ) )}::slotted( a:focus-visible ){outline:2px solid var( --os-ui-notice-link-hover,var( --os-ui-accent-strong,#135e96 ) );outline-offset:2px}::slotted( p:first-child ){margin-block-start:0}::slotted( p:last-child ){margin-block-end:0}.os-notice__close{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;background:transparent;color:inherit;opacity:0.6;cursor:pointer;border-radius:4px;transition:opacity 0.12s ease,background-color 0.12s ease}.os-notice__close:hover{opacity:1;background:var( --os-ui-hover,rgba( 0,0,0,0.06 ) )}.os-notice__close:focus-visible{opacity:1;outline:2px solid var( --wp-admin-theme-color,#2271b1 );outline-offset:1px}.os-notice__close[ hidden ]{display:none}.os-notice__close svg{width:14px;height:14px}:host( [ tone='info' ] ){--os-ui-notice-accent:var( --os-ui-notice-info,var( --os-ui-info-fg,#0969da ) );--os-ui-notice-bg:var( --os-ui-notice-info-bg,rgba( 9,105,218,0.08 ) );--os-ui-notice-border:var( --os-ui-notice-info-border,rgba( 9,105,218,0.16 ) )}:host( [ tone='success' ] ){--os-ui-notice-accent:var( --os-ui-notice-success,var( --os-ui-success-fg,#1a7f37 ) );--os-ui-notice-bg:var( --os-ui-notice-success-bg,rgba( 26,127,55,0.08 ) );--os-ui-notice-border:var( --os-ui-notice-success-border,rgba( 26,127,55,0.16 ) )}:host( [ tone='warning' ] ){--os-ui-notice-accent:var( --os-ui-notice-warning,var( --os-ui-warning-fg,#9a6700 ) );--os-ui-notice-bg:var( --os-ui-notice-warning-bg,rgba( 154,103,0,0.08 ) );--os-ui-notice-border:var( --os-ui-notice-warning-border,rgba( 154,103,0,0.16 ) )}:host( [ tone='error' ] ),:host( [ tone='danger' ] ){--os-ui-notice-accent:var( --os-ui-notice-error,var( --os-ui-danger,#cf222e ) );--os-ui-notice-bg:var( --os-ui-notice-error-bg,rgba( 207,34,46,0.08 ) );--os-ui-notice-border:var( --os-ui-notice-error-border,rgba( 207,34,46,0.16 ) )}:host( [ tone='neutral' ] ){--os-ui-notice-accent:var( --os-ui-notice-neutral,var( --os-ui-fg-muted,#57606a ) );--os-ui-notice-bg:var( --os-ui-notice-neutral-bg,rgba( 87,96,106,0.08 ) );--os-ui-notice-border:var( --os-ui-notice-neutral-border,rgba( 87,96,106,0.16 ) )}`,hs=class hs extends Se{connectedCallback(){super.connectedCallback(),this.hasAttribute("role")||this.setAttribute("role","status"),this.hasAttribute("tone")||this.setAttribute("tone","info");const t=this.getAttribute("notice-id");t&&Ya(t)&&(this.hidden=!0)}dismiss(){this.hidden=!0;const t=this.getAttribute("notice-id");t&&ki(t),this.emit("os-notice-dismiss",{noticeId:t??void 0})}undismiss(){const t=this.getAttribute("notice-id");t&&Ih(t),this.hidden=!1}render(){const t=this.getAttribute("icon"),n=!this.hasAttribute("not-dismissible");return Y` |
| 45 |
<span |
| 46 |
class="os-notice__icon dashicons ${t??""}" |
| 47 |
?hidden=${!t} |
| 48 |
aria-hidden="true" |
| 49 |
></span> |
| 50 |
<span class="os-notice__label"><slot></slot></span> |
| 51 |
<button |
| 52 |
type="button" |
| 53 |
class="os-notice__close" |
| 54 |
?hidden=${!n} |
| 55 |
aria-label=${S("Dismiss notice")} |
| 56 |
@click=${o=>this._onDismiss(o)} |
| 57 |
> |
| 58 |
<svg viewBox="0 0 14 14" aria-hidden="true"> |
| 59 |
<path |
| 60 |
d="M3 3 L11 11 M11 3 L3 11" |
| 61 |
stroke="currentColor" |
| 62 |
stroke-width="1.6" |
| 63 |
stroke-linecap="round" |
| 64 |
fill="none" |
| 65 |
></path> |
| 66 |
</svg> |
| 67 |
</button> |
| 68 |
`}_onDismiss(t){t.preventDefault(),t.stopPropagation(),this.dismiss()}};hs.props=["tone","notDismissible","icon","noticeId"],hs.styles=[yA],hs.help=void 0;let Xa=hs;Ie("os-notice",Xa);const vo=ie("desktop-mode/window-notices",()=>({entries:new Map})),bA=/^[a-z0-9_/-]+$/;function xh(e){return`os-notice/${e.toLowerCase()}`}function vA(e){const t=document.createElement("os-notice");return t.setAttribute("tone",e.tone??"info"),t.setAttribute("notice-id",e.id),e.dismissible===!1&&t.setAttribute("not-dismissible",""),e.icon&&t.setAttribute("icon",e.icon),t.innerHTML=e.message,t}function Lh(e){if(!e||typeof e!="object")return()=>{};const t=String(e.id??"").trim().toLowerCase();if(!t||!bA.test(t))return()=>{};if(typeof e.message!="string"||e.message==="")return()=>{};const n={...e,id:t};vo.state.entries.set(t,n);const o=xh(t);return kh({id:o,slot:"after-titlebar",order:n.order??100,replace:!1,owner:n.owner,match:s=>{const i=vo.state.entries.get(t);if(!i)return!1;if(typeof i.match!="function")return!0;try{return i.match(s)===!0}catch{return!1}},render:s=>{const i=vo.state.entries.get(t);i&&s.appendChild(vA(i))}}),()=>Za(t)}function Za(e){const t=String(e??"").trim().toLowerCase();t&&vo.state.entries.delete(t)&&Va(xh(t))}function Th(){return Array.from(vo.state.entries.values()).sort((e,t)=>{const n=e.order??100,o=t.order??100;return n!==o?n-o:e.id.localeCompare(t.id)})}function _A(e){const t=String(e??"").trim().toLowerCase();t&&ki(t)}function EA(e){const t=String(e??"").trim().toLowerCase();t&&Ih(t)}function kA(e){if(!e)return;const t=new Set;if(typeof e.window=="string"&&e.window!==""&&t.add(e.window),Array.isArray(e.windows))for(const o of e.windows)typeof o=="string"&&o!==""&&t.add(o);const n=typeof e.urlContains=="string"&&e.urlContains!==""?e.urlContains.toLowerCase():null;if(!(t.size===0&&n===null))return o=>!(t.size>0&&!t.has(o.id)||n!==null&&!(typeof o.config.url=="string"?o.config.url.toLowerCase():"").includes(n))}function Nh(e){const t=new Set;for(const n of e)!n||typeof n.id!="string"||!n.id||(t.add(n.id.toLowerCase()),Lh({id:n.id,message:n.message,tone:n.tone,dismissible:n.dismissible!==!1,icon:n.icon,match:kA(n.match),order:typeof n.order=="number"?n.order:void 0,owner:"__server__"}));for(const n of Th())n.owner==="__server__"&&(t.has(n.id)||Za(n.id))}const Dh=ie("desktop-mode/window-chrome-registry",()=>({registry:new Map,listeners:new Set})),_o=Dh.state.registry,SA=Dh.state.listeners,Rh=/^[a-z0-9_/-]+$/;function AA(e){const t=[];!e||typeof e!="object"?t.push("def (not an object)"):(typeof e.id!="string"||e.id.trim()===""?t.push("id (missing)"):Rh.test(e.id.trim().toLowerCase())||t.push(`id (must match ${Rh} — lowercase alphanum, hyphens, underscores, slashes for vendor/sub-id)`),typeof e.match!="function"&&t.push("match (must be a function)"),typeof e.render!="function"&&t.push("render (must be a function)")),Ne("WindowChrome",t,e);const n=e.id.trim().toLowerCase();_o.set(n,{...e,id:n}),Ja()}function Oh(e){_o.delete(e.toLowerCase())&&Ja()}function CA(e){if(!e)return 0;let t=0;for(const[n,o]of Array.from(_o.entries()))o.owner===e&&(_o.delete(n),t++);return t>0&&Ja(),t}function Mh(){return Array.from(_o.values()).sort((e,t)=>e.id.localeCompare(t.id))}function Ja(){const e=Array.from(SA);for(const t of e)try{t()}catch(n){typeof console<"u"&&console.error("[openstation] window-chrome registry listener threw:",n)}}function IA(){const e=new Set,t=new Set;let n=new Map;const o=async r=>{if(!r.scriptUrl||t.has(r.scriptUrl)){e.add(r.handle);return}try{await ke(r.scriptUrl,{translations:r.scriptTranslations,l10n:r.scriptL10n,before:r.scriptBefore,after:r.scriptAfter})}catch(a){T(b.SHELL_ERROR,{scope:"window-chrome-script-load",handle:r.handle,url:r.scriptUrl,error:a});return}t.add(r.scriptUrl),e.add(r.handle)},s=r=>{const a=new Map;if(!r)return a;for(const l of r){if(!l.scriptHandle||!l.id)continue;let c=a.get(l.scriptHandle);c||(c=new Set,a.set(l.scriptHandle,c)),c.add(l.id)}return a},i=r=>{const a=new Set;for(const c of Mh())c.owner===r&&a.add(c.id);const l=n.get(r);if(l)for(const c of l)a.add(c);return a};return async(r,a)=>{const l=new Set;for(const c of r)c.handle&&l.add(c.handle);for(const c of Array.from(e))if(!l.has(c)){for(const d of i(c))Oh(d);CA(c),e.delete(c)}for(const c of r)!c.handle||e.has(c.handle)||await o(c);n=s(a)}}const Qa=window.location.origin;let xA=0;const _n=new Map,En=new Map,Eo=new Map;function LA(e,t){return Eo.set(e,t),()=>{Eo.get(e)===t&&Eo.delete(e)}}function TA(){return`os-conn-${++xA}`}function NA(e){const t=(l,c)=>{try{l.contentWindow?.postMessage(c,Qa)}catch(d){typeof console<"u"&&console.error("[openstation] connection: postMessage failed",d)}},n=(l,c={})=>{const d=TA(),u=Array.isArray(c.topics)?[...c.topics]:[],f=new Map,p=[];let g=!1,m=!1;const h=()=>{const P=Eo.get(l);return P||(e.getById(l)?.iframe??null)},v=()=>{if(h())return!1;const P=e.getById(l);return!!P&&P.config?.native===!0},y=[],x=()=>{const P=h();if(P)for(;p.length;){const $=p.shift();t(P,{type:"os-bridge-publish",connectionId:d,topic:$.topic,payload:$.payload})}},M={id:d,target:l,isOpen:()=>g,subscribe(P,$){const k=$;if(v()){const E=Lv(l,P,(_,O)=>{T(b.CONNECTION_MESSAGE,{connectionId:d,topic:O.channel,direction:"in"});try{k(_,{topic:O.channel})}catch(H){typeof console<"u"&&console.error("[openstation] connection subscriber threw:",H)}});return y.push(E),E}let w=f.get(P);return w||(w=new Set,f.set(P,w)),w.add(k),()=>{w?.delete(k)}},send(P,$){if(m)return;if(T(b.CONNECTION_MESSAGE,{connectionId:d,topic:P,direction:"out"}),v()){Nv(l,P,$);return}if(!g){p.push({topic:P,payload:$});return}const k=h();k&&t(k,{type:"os-bridge-publish",connectionId:d,topic:P,payload:$})},disconnect(){M._destroy("disconnect")},_targetWindow:h,_handleIframeMessage(P){if(!P||typeof P!="object")return;const $=P;if($.type==="os-bridge-handshake-ack"){if(g)return;g=!0,T(b.CONNECTION_OPENED,{connectionId:d,targetWindowId:l,topics:u,connection:M});try{c.onOpen?.()}catch(k){typeof console<"u"&&console.error("[openstation] connection.onOpen threw:",k)}x();return}if($.type==="os-bridge-publish"){const k=P,w=typeof k.topic=="string"?k.topic:"";if(!w)return;T(b.CONNECTION_MESSAGE,{connectionId:d,topic:w,direction:"in"});const E=f.get(w);if(E)for(const O of Array.from(E))try{O(k.payload,{topic:w})}catch(H){typeof console<"u"&&console.error("[openstation] connection subscriber threw:",H)}const _=f.get("*");if(_)for(const O of Array.from(_))try{O(k.payload,{topic:w})}catch(H){typeof console<"u"&&console.error("[openstation] connection wildcard subscriber threw:",H)}return}$.type==="os-bridge-disconnect"&&M._destroy("disconnect")},_destroy(P){if(m)return;m=!0;const $=g;g=!1,_n.delete(d);const k=En.get(l);k&&(k.delete(d),k.size===0&&En.delete(l));for(const w of y.splice(0))try{w()}catch{}if($){const w=h();w&&t(w,{type:"os-bridge-disconnect",connectionId:d})}T(b.CONNECTION_CLOSED,{connectionId:d,reason:P});try{c.onClose?.(P)}catch(w){typeof console<"u"&&console.error("[openstation] connection.onClose threw:",w)}}};_n.set(d,M);let I=En.get(l);if(I||(I=new Set,En.set(l,I)),I.add(d),v())return Promise.resolve().then(()=>{if(!(m||g)){g=!0,T(b.CONNECTION_OPENED,{connectionId:d,targetWindowId:l,topics:u});try{c.onOpen?.()}catch(P){typeof console<"u"&&console.error("[openstation] connection.onOpen threw:",P)}}}),M;const W=h();return W&&t(W,{type:"os-bridge-handshake",connectionId:d,targetWindowId:l,topics:u}),M},o=(l,c)=>{if(!l||typeof l!="object")return;const d=l;if(typeof d.type!="string"||!d.type.startsWith("os-bridge-"))return;if(d.type==="os-bridge-connection-request"&&typeof d.requestId=="string"&&typeof c=="string"&&c!==""){s(c,d.requestId,Array.isArray(d.topics)?d.topics:[]);return}if(typeof d.connectionId!="string")return;_n.get(d.connectionId)?._handleIframeMessage(l)},s=(l,c,d)=>{const f=Eo.get(l)??e.getById(l)?.iframe??null;if(!f)return;const p=V(b.IFRAME_CONNECTION_REQUEST,!0,{windowId:l,requestId:c,topics:d.slice()});if(p===!1){try{f.contentWindow?.postMessage({type:"os-bridge-connection-ack",requestId:c,accepted:!1,reason:"rejected"},Qa)}catch{}return}const g=p&&typeof p=="object"&&Array.isArray(p.topics)?p.topics:d,m=n(l,{topics:g});try{f.contentWindow?.postMessage({type:"os-bridge-connection-ack",requestId:c,accepted:!0,connectionId:m.id},Qa)}catch{}};return{connect:n,getConnection:l=>_n.get(l)??null,routeIncomingFromIframe:o,onIframeReady:l=>{const c=En.get(l);if(c)for(const d of Array.from(c)){const u=_n.get(d);if(!u||u.isOpen())continue;const f=u._targetWindow();f&&t(f,{type:"os-bridge-handshake",connectionId:u.id,targetWindowId:u.target,topics:[]})}},onWindowClosed:l=>{const c=En.get(l);if(c)for(const d of Array.from(c))_n.get(d)?._destroy("window-closed")}}}const DA={};function RA(...e){(typeof{url:hr&&hr.tagName.toUpperCase()==="SCRIPT"&&hr.src||new URL("desktop.min.js",document.baseURI).href}<"u"&&DA?"production":void 0)!=="production"&&console.log(...e)}const OA="iframe:";function el(e){return OA+e}function Ph(e){return e.icon&&typeof e.icon=="string"&&e.icon.startsWith("dashicons-")?e.icon:e.kind==="navigate"?"dashicons-external":"dashicons-arrow-right-alt"}function MA(e,t){const n=t.toLowerCase().replace(/[^a-z0-9_-]+/g,"-");return`win-${e.toLowerCase().replace(/[^a-z0-9_-]+/g,"-")}-${n}`}class PA{constructor(t){this.subscribedWindowId=null,this.manager=t.manager,this.adminUrl=t.adminUrl}install(){document.addEventListener("os-window-focused",n=>{const o=n.detail;o&&typeof o.windowId=="string"&&this.onFocused(o.windowId)}),document.addEventListener("os-window-closed",n=>{const o=n.detail;o&&typeof o.windowId=="string"&&(gi(el(o.windowId)),this.subscribedWindowId===o.windowId&&(this.subscribedWindowId=null))}),document.addEventListener("os-window-changed",n=>{const o=n.detail;!o||typeof o.windowId!="string"||o.reason==="state"&&o.state==="minimized"&&this.subscribedWindowId===o.windowId&&(this.subscribedWindowId=null)}),window.addEventListener("message",n=>{if(n.origin!==window.location.origin)return;const o=n.data;if(!o||typeof o.type!="string")return;if(o.type==="os-bridge-ready"){const i=this.manager.findByIframeSource(n.source);i&&i.id===this.subscribedWindowId&&this.sendSubscribe(i.id);return}if(o.type!=="os-commands-list"||!Array.isArray(o.commands))return;const s=this.manager.findByIframeSource(n.source);s&&s.id===this.subscribedWindowId&&this.applyList(s.id,o.commands)});const t=this.manager.getFocused();t&&this.onFocused(t.id)}onFocused(t){if(this.subscribedWindowId!==t){if(this.subscribedWindowId){const n=this.manager.getById(this.subscribedWindowId);if(n&&n.iframe&&n.iframe.contentWindow)try{n.iframe.contentWindow.postMessage({type:"os-commands-unsubscribe"},window.location.origin)}catch{}gi(el(this.subscribedWindowId))}this.subscribedWindowId=t,this.sendSubscribe(t)}}sendSubscribe(t){const n=this.manager.getById(t);if(n&&n.iframe&&n.iframe.contentWindow)try{n.iframe.contentWindow.postMessage({type:"os-commands-subscribe"},window.location.origin)}catch(o){RA("[os-cmd:parent] sendSubscribe: postMessage threw",o)}}applyList(t,n){const o=el(t);gi(o);for(const s of n){if(!s||!s.name||!s.label)continue;const i=MA(t,s.name),r=typeof s.iconSvg=="string"&&s.iconSvg!==""?id(s.iconSvg):"",a={slug:i,label:s.label,icon:Ph(s),iconSvg:r!==""?r:void 0,owner:o,eager:!0,run:s.kind==="navigate"&&s.url?this.runNavigate(s.url,s.label,Ph(s)):this.runProxy(t,s.name)};try{mi(a)}catch(l){console.error("[openstation] iframe-bridge: dropping bad command",a,l)}}}runNavigate(t,n,o){return(s,i)=>{if(i.close(),Ge(t))return;const r=ae(t,this.adminUrl);this.manager.open({id:r,baseId:r,url:t,title:n,icon:o})}}runProxy(t,n){return(o,s)=>{s.close();const i=this.manager.getById(t);if(!(!i||!i.iframe||!i.iframe.contentWindow)){try{i.iframe.contentWindow.postMessage({type:"os-commands-invoke",name:n},window.location.origin)}catch{}this.manager.focus(i)}}}}const Wh="global",WA=/(?:document\.location\.href|window\.location\.href|location\.href)\s*=\s*['"]([^'"$]+?)['"]/,$A=/(?:document\.location|window\.location|location)\s*=\s*['"]([^'"$]+?)['"]/,UA=/location\.(?:assign|replace)\s*\(\s*['"]([^'"$]+?)['"]\s*\)/,FA=/(?:document\.location|window\.location|location)\s*(?:\.href\s*)?=|location\.(?:assign|replace)\s*\(/,BA=/getSiteEditorPage\s*\(|site-editor\.php/,HA=/^(wp_template_part|wp_template|wp_navigation|wp_block)-(.+)$/;function zA(e){const t=window.__openStationMenuCommands;if(!Array.isArray(t))return null;for(const n of t)if(n&&typeof n=="object"&&n.name===e&&typeof n.url=="string"&&n.url!=="")return{label:typeof n.label=="string"?n.label:"",url:n.url};return null}class GA{constructor(t){this.mounted=!1,this.host=null,this.root=null,this.kindCache=Object.create(null),this.callbackCache=Object.create(null),this.lastFingerprint="",this.manager=t.manager,this.adminUrl=t.adminUrl}install(){this.tryMount(0)}tryMount(t){if(this.mounted)return;const n=window.wp;if(!n||!n.data||!n.element||typeof n.data.subscribe!="function"){t<40&&window.setTimeout(()=>this.tryMount(t+1),150);return}this.mount()}mount(){const t=window.wp,n=t.element,o=t.data,s=n.createElement,i=n.useEffect,r=n.useRef,a=n.useMemo,l=o.useSelect;if(typeof s!="function"||typeof i!="function"||typeof r!="function"||typeof a!="function"||typeof l!="function"||typeof n.createRoot!="function")return;this.mounted=!0;const c=document.createElement("div");c.setAttribute("aria-hidden","true"),c.style.cssText="position:absolute;width:0;height:0;overflow:hidden;pointer-events:none;left:-9999px;top:-9999px;",(document.body||document.documentElement).appendChild(c),this.host=c;const d={perLoader:{},statics:[],loadersList:[]},u=m=>{if(!Array.isArray(m)||m.length===0)return"";const h=new Array(m.length);for(let v=0;v<m.length;v++){const y=m[v];h[v]=y&&y.name?y.name:""}return h.join("|")},f=()=>{let m=[];for(const h of d.loadersList){const v=d.perLoader[h];Array.isArray(v)&&(m=m.concat(v))}Array.isArray(d.statics)&&(m=m.concat(d.statics)),this.callbackCache=Object.create(null);for(const h of m)h&&h.name&&typeof h.callback=="function"&&(this.callbackCache[h.name]=h.callback);this.publish(m)},p=m=>{const h=m.loader;let v=null;try{v=h.hook({search:""})}catch{}const y=v&&Array.isArray(v.commands)?v.commands:[],x=a(()=>u(y),[y]);return i(()=>{d.perLoader[h.name]=y,f()},[x]),i(()=>()=>{delete d.perLoader[h.name],f()},[]),null},g=()=>{const m=l(I=>{const W=I("core/commands");return!W||typeof W.getCommandLoaders!="function"?[]:[...W.getCommandLoaders(!1)||[],...W.getCommandLoaders(!0)||[]]},[]),h=l(I=>{const W=I("core/commands");return!W||typeof W.getCommands!="function"?[]:[...W.getCommands(!1)||[],...W.getCommands(!0)||[]]},[]),v=a(()=>Array.isArray(m)?m.map(I=>I&&I.name||""):[],[m]),y=v.join("|");i(()=>{d.loadersList=v,f()},[y]);const x=a(()=>u(Array.isArray(h)?h:[]),[h]);if(i(()=>{d.statics=Array.isArray(h)?h:[],f()},[x]),!Array.isArray(m)||m.length===0)return null;const M=[];for(const I of m)!I||typeof I.hook!="function"||M.push(s(p,{key:I.name,loader:I}));return s(n.Fragment||"div",null,M)};try{this.root=n.createRoot(c),this.root.render(s(g))}catch{this.mounted=!1,this.root=null,this.host&&this.host.parentNode&&this.host.parentNode.removeChild(this.host),this.host=null}}publish(t){const n=Object.create(null),o=[];for(const i of t)!i||!i.name||!i.label||i.disabled||n[i.name]||(n[i.name]=!0,o.push(this.classify(i)));let s="";for(const i of o)s+=`${i.name}|${i.kind}|${i.url||""} |
| 69 |
`;if(s!==this.lastFingerprint){this.lastFingerprint=s,gi(Wh);for(const i of o){if(i.kind==="skip")continue;const r=`global-${i.name.toLowerCase().replace(/[^a-z0-9_-]+/g,"-")}`,a=this.iconFor(i),l={slug:r,label:i.label,icon:a,iconSvg:i.iconSvg&&i.iconSvg!==""?id(i.iconSvg):void 0,owner:Wh,run:i.kind==="navigate"&&i.url?this.runNavigate(i.url,i.windowTitle||i.label,a):this.runInvoke(i.name,i.label,a)};try{mi(l)}catch(c){console.error("[openstation] shell-harvester: dropping bad command",l,c)}}}}classify(t){const n={name:String(t.name),label:String(t.label),icon:typeof t.icon=="string"?t.icon:void 0,iconSvg:void 0,kind:"action",url:void 0,callback:typeof t.callback=="function"?t.callback:void 0},o=this.kindCache[n.name];if(o)return n.kind=o.kind,n.url=o.url,n.iconSvg=o.iconSvg,n;t.icon&&typeof t.icon!="string"&&(n.iconSvg=this.renderIcon(t.icon));const s=zA(n.name);if(s){try{n.url=new URL(s.url,this.adminUrl).toString(),n.kind="navigate",s.label!==""&&(n.windowTitle=s.label)}catch{n.kind="skip"}return this.kindCache[n.name]={kind:n.kind,url:n.url,iconSvg:n.iconSvg},n}if(typeof t.callback=="function"){let i="";try{i=Function.prototype.toString.call(t.callback)}catch{i=""}const r=i.match(WA)||i.match($A)||i.match(UA);if(r&&r[1])try{n.url=new URL(r[1],window.location.href).toString(),n.kind="navigate"}catch{n.kind="action"}else if(FA.test(i)){const l=BA.test(i)?n.name.match(HA):null;if(l){const c=l[1],d=l[2],u=`/${c}/${d}`;try{const f=new URL("site-editor.php",this.adminUrl);f.searchParams.set("p",u),f.searchParams.set("canvas","edit"),n.url=f.toString(),n.kind="navigate"}catch{n.kind="skip"}}else n.kind="skip"}}return this.kindCache[n.name]={kind:n.kind,url:n.url,iconSvg:n.iconSvg},n}renderIcon(t){const n=window.wp;if(!n||!n.element||typeof n.element.renderToString!="function")return"";try{const o=n.element.renderToString(t);if(typeof o=="string"&&o.toLowerCase().startsWith("<svg"))return o}catch{}return""}iconFor(t){return t.icon&&t.icon.startsWith("dashicons-")?t.icon:t.kind==="navigate"?"dashicons-external":"dashicons-arrow-right-alt"}runNavigate(t,n,o){return(s,i)=>{if(i.close(),Ge(t))return;const r=ae(t,this.adminUrl);this.manager.open({id:r,baseId:r,url:t,title:n,icon:o})}}runInvoke(t,n,o){return(s,i)=>{const r=this.callbackCache[t];if(typeof r!="function"){i.close();return}const a=this.runWithNavCapture(r);if(a){i.close();const l=ae(a,this.adminUrl);this.manager.open({id:l,baseId:l,url:a,title:n,icon:o})}}}runWithNavCapture(t){let n=null;const o=l=>{n===null&&typeof l=="string"&&l!==""&&(n=l)},s=window.location,i=new Proxy(s,{get(l,c){const d=l[c];return c==="assign"||c==="replace"?u=>o(u):typeof d=="function"?d.bind(l):d},set(l,c,d){return c==="href"&&o(d),!0}}),r=[],a=l=>{try{Object.defineProperty(l,"location",{configurable:!0,get:()=>i,set:c=>o(c)}),r.push({obj:l,key:"location"})}catch{}};a(document),a(window);try{t({close:()=>{}})}catch{}finally{for(const l of r)try{delete l.obj[l.key]}catch{}}return n}}const kn=[];function tl(e){Ne("Widget",Nt(e,Uh),e);const t=kn.findIndex(n=>n.id===e.id);t>=0?kn[t]=e:kn.push(e)}function jA(e){const t=kn.findIndex(n=>n.id===e);t>=0&&kn.splice(t,1)}function $h(){const e=kn.slice(),t=V(b.WIDGETS,e);return Array.isArray(t)?t.filter(VA):(typeof console<"u"&&console.warn("[openstation] `os.widgets` filter returned a non-array; falling back to seed list."),e)}function ko(e){return $h().find(t=>t.id===e)}const Uh=[{field:"id",message:"missing or not a non-empty string",valid:e=>typeof e.id=="string"&&e.id!==""},{field:"label",message:"missing or not a non-empty string",valid:e=>typeof e.label=="string"&&e.label!==""},{field:"description",message:"not a string",valid:e=>typeof e.description=="string"},{field:"icon",message:"missing or not a non-empty string",valid:e=>typeof e.icon=="string"&&e.icon!==""},{field:"mount",message:"not a function",valid:e=>typeof e.mount=="function"}];function VA(e){return Nt(e,Uh).length===0}let ot=null;function qA(e){if(ot)return;const t=document.createElement("div");t.className="os-widget-picker",t.setAttribute("role","menu"),t.setAttribute("aria-label",S("Add widget"));const n=document.createElement("div");n.className="os-widget-picker__title",n.textContent=S("Add widget"),t.appendChild(n);const o=document.createElement("div");o.className="os-widget-picker__list",t.appendChild(o),Bh(o,e),document.body.appendChild(t),KA(t,e.anchor);const s=a=>{const l=a.target;l&&(t.contains(l)||e.anchor.contains(l)||Fh())};window.setTimeout(()=>{document.addEventListener("pointerdown",s,!0)},0);const i=a=>{a.key==="Escape"&&Fh()};document.addEventListener("keydown",i),ot={panel:t,options:e,onOutsidePointerDown:s,onKeyDown:i},o.querySelector("button:not([disabled])")?.focus()}function So(){if(!ot)return;const e=ot.panel.querySelector(".os-widget-picker__list");e&&Bh(e,ot.options)}function Fh(){ot&&(document.removeEventListener("pointerdown",ot.onOutsidePointerDown,!0),document.removeEventListener("keydown",ot.onKeyDown),ot.panel.remove(),ot=null)}function Bh(e,t){e.innerHTML="";const n=new Set(t.enabledIds()),o=t.registry();if(o.length===0){const s=document.createElement("div");s.className="os-widget-picker__empty",s.textContent=S("No widgets available. Activate a plugin that registers one, or see the docs for the registerWidget API."),e.appendChild(s);return}for(const s of o){const i=document.createElement("button");i.type="button",i.className="os-widget-picker__entry";const r=n.has(s.id);r&&(i.classList.add("os-widget-picker__entry--added"),i.disabled=!0,i.setAttribute("aria-disabled","true")),i.setAttribute("role","menuitem");let a;r?a=le(S("%s (already added)"),s.label):a=le(S("Add %s"),s.label),i.setAttribute("aria-label",a);const l=document.createElement("span");l.className=`os-widget-picker__entry-icon dashicons ${s.icon}`,l.setAttribute("aria-hidden","true"),i.appendChild(l);const c=document.createElement("span");c.className="os-widget-picker__entry-text";const d=document.createElement("span");if(d.className="os-widget-picker__entry-label",d.textContent=s.label,c.appendChild(d),s.description){const u=document.createElement("span");u.className="os-widget-picker__entry-description",u.textContent=s.description,c.appendChild(u)}if(i.appendChild(c),r){const u=document.createElement("span");u.className="os-widget-picker__entry-status",u.textContent=S("Added"),i.appendChild(u)}r||i.addEventListener("click",u=>{u.preventDefault(),u.stopPropagation(),t.onAdd(s.id)}),e.appendChild(i)}}function KA(e,t){const n=t.getBoundingClientRect();e.style.position="fixed",e.style.left="0px",e.style.top="0px",e.style.visibility="hidden";const o=e.getBoundingClientRect(),s=o.width||320,i=o.height||200,r=6;let a=n.right-s,l=n.top-i-r;a<8&&(a=8),l<8&&(l=n.bottom+r),e.style.left=`${Math.round(a)}px`,e.style.top=`${Math.round(l)}px`,e.style.visibility=""}const Si="os-widgets__card--floating",YA="os-widgets__card--movable",XA="os-widgets__card--resizable",Hh="os-widgets__card--dragging",zh="os-widgets__card--resizing",ZA=160,Gh=80,JA=280,QA=180,Ai=20,jh=5,eC=jh*jh,tC='input, textarea, select, button, a, [contenteditable="true"]';function nC(e,t,n){const o=document.createElement("div");o.className="os-widgets__card",o.dataset.widgetId=e.id;const s=e.movable===!0,i=e.resizable===!0;s&&o.classList.add(YA),i&&o.classList.add(XA),s?o.appendChild(oC(e,n.onRemove,n.onRedock)):o.appendChild(iC(e,n.onRemove));const r=document.createElement("div");r.className="os-widgets__card-body",o.appendChild(r),t.geometry?(nl(o,uC(t.geometry,t.floatingParent)),o.classList.add(Si)):i&&typeof t.dockedHeight=="number"&&(o.style.height=`${dC(t.dockedHeight,e)}px`);const a=()=>o.classList.contains(Si),l=[];if(i)for(const d of lC()){const u=document.createElement("div");u.className=`os-widgets__resize os-widgets__resize--${d}`,u.setAttribute("aria-hidden","true"),u.dataset.dir=d,o.appendChild(u),l.push(aC(o,u,d,e,t,n,a))}let c=null;if(s){const d=o.querySelector(".os-widgets__chrome");d&&(c=rC(o,d,e,t,n))}return{card:o,body:r,dispose:()=>{for(const d of l)try{d()}catch{}if(c)try{c()}catch{}o.remove()}}}function oC(e,t,n){const o=document.createElement("header");o.className="os-widgets__chrome";const s=document.createElement("span");s.className="os-widgets__grip",s.setAttribute("aria-hidden","true"),o.appendChild(s);const i=document.createElement("span");i.className="os-widgets__title",i.textContent=e.label,o.appendChild(i),o.appendChild(sC(e,n));const r=Vh(e,t);return o.appendChild(r),o}function sC(e,t){const n=document.createElement("button");return n.type="button",n.className="os-widgets__card-redock",n.setAttribute("aria-label",le(S("Dock %s back to widget column"),e.label)),n.innerHTML='<svg viewBox="0 0 12 12" width="10" height="10" aria-hidden="true"><path d="M2 6h6M5.5 3.5L8 6l-2.5 2.5M10 2.5v7" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg>',n.addEventListener("click",o=>{o.preventDefault(),o.stopPropagation(),t()}),n.dataset.noDrag="true",n}function iC(e,t){const n=Vh(e,t);return n.classList.add("os-widgets__card-close--corner"),n}function Vh(e,t){const n=document.createElement("button");return n.type="button",n.className="os-widgets__card-close",n.setAttribute("aria-label",le(S("Remove %s"),e.label)),n.innerHTML='<svg viewBox="0 0 12 12" width="10" height="10" aria-hidden="true"><path d="M2.5 2.5l7 7M9.5 2.5l-7 7" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"/></svg>',n.addEventListener("click",o=>{o.preventDefault(),o.stopPropagation(),t()}),n}function rC(e,t,n,o,s){let i=null,r=0,a=0,l=0,c=0,d=!1;const u=m=>{if(m.button!==0)return;const h=m.target;h&&h.closest(tC)||(m.preventDefault(),i=m.pointerId,r=m.clientX,a=m.clientY,d=!1,l=parseFloat(e.style.left)||0,c=parseFloat(e.style.top)||0,t.setPointerCapture(i))},f=()=>{if(!e.classList.contains(Si)){const m=o.floatingParent.getBoundingClientRect(),h=e.getBoundingClientRect(),v={x:h.left-m.left,y:h.top-m.top,width:h.width||n.defaultWidth||JA,height:h.height||n.defaultHeight||QA};nl(e,v),e.classList.add(Si),s.onLiberate(v),l=parseFloat(e.style.left)||0,c=parseFloat(e.style.top)||0}e.classList.add(Hh)},p=m=>{if(i===null||m.pointerId!==i)return;const h=m.clientX-r,v=m.clientY-a;if(!d){if(h*h+v*v<eC)return;d=!0,f()}const y=Kh(l+h,c+v,e.offsetWidth,e.offsetHeight,o.floatingParent);e.style.left=`${y.x}px`,e.style.top=`${y.y}px`},g=m=>{if(!(i===null||m.pointerId!==i)){try{t.releasePointerCapture(i)}catch{}i=null,d&&(d=!1,e.classList.remove(Hh),s.onGeometryChanged(qh(e)))}};return t.addEventListener("pointerdown",u),t.addEventListener("pointermove",p),t.addEventListener("pointerup",g),t.addEventListener("pointercancel",g),()=>{t.removeEventListener("pointerdown",u),t.removeEventListener("pointermove",p),t.removeEventListener("pointerup",g),t.removeEventListener("pointercancel",g)}}function aC(e,t,n,o,s,i,r){let a=null,l=0,c=0,d=0,u=0,f=0,p=0;const g=v=>{if(v.button!==0||!r()&&!cC(n))return;v.preventDefault(),v.stopPropagation(),a=v.pointerId,l=v.clientX,c=v.clientY;const y=e.getBoundingClientRect(),x=s.floatingParent.getBoundingClientRect();d=y.left-x.left,u=y.top-x.top,f=y.width,p=y.height,t.setPointerCapture(a),e.classList.add(zh)},m=v=>{if(a===null||v.pointerId!==a)return;const y=v.clientX-l,x=v.clientY-c,M=fC(n,y,x,d,u,f,p,o,s.floatingParent,r());r()&&(e.style.left=`${M.x}px`,e.style.top=`${M.y}px`,e.style.width=`${M.width}px`),e.style.height=`${M.height}px`},h=v=>{if(!(a===null||v.pointerId!==a)){try{t.releasePointerCapture(a)}catch{}a=null,e.classList.remove(zh),r()?i.onGeometryChanged(qh(e)):i.onDockedHeightChanged(e.offsetHeight)}};return t.addEventListener("pointerdown",g),t.addEventListener("pointermove",m),t.addEventListener("pointerup",h),t.addEventListener("pointercancel",h),()=>{t.removeEventListener("pointerdown",g),t.removeEventListener("pointermove",m),t.removeEventListener("pointerup",h),t.removeEventListener("pointercancel",h)}}function lC(){return["n","e","s","w","ne","nw","se","sw"]}function cC(e){return e==="s"}function nl(e,t){e.style.left=`${t.x}px`,e.style.top=`${t.y}px`,e.style.width=`${t.width}px`,e.style.height=`${t.height}px`}function qh(e){return{x:parseFloat(e.style.left)||0,y:parseFloat(e.style.top)||0,width:e.offsetWidth,height:e.offsetHeight}}function dC(e,t){return Ao(e,t.minHeight??Gh,t.maxHeight??1/0)}function uC(e,t){if(!t.clientWidth||!t.clientHeight)return e;const n=Kh(e.x,e.y,e.width,e.height,t);return{...e,x:n.x,y:n.y}}function Kh(e,t,n,o,s){const i=s.clientWidth||s.getBoundingClientRect().width,r=s.clientHeight||s.getBoundingClientRect().height,a=Math.max(0,i-n-Ai),l=Math.max(0,r-o-Ai);return{x:Math.min(Math.max(Ai,e),a),y:Math.min(Math.max(Ai,t),l)}}function fC(e,t,n,o,s,i,r,a,l,c){const d=a.minWidth??ZA,u=a.minHeight??Gh,f=a.maxWidth??1/0,p=a.maxHeight??1/0,g=l.clientWidth||l.getBoundingClientRect().width,m=l.clientHeight||l.getBoundingClientRect().height;let h=o,v=s,y=i,x=r;if((e==="e"||e==="ne"||e==="se")&&(y=Ao(i+t,d,Math.min(f,g-o))),e==="w"||e==="nw"||e==="sw"){const M=Ao(i-t,d,Math.min(f,o+i));h=o+(i-M),y=M}if((e==="s"||e==="se"||e==="sw")&&(x=Ao(r+n,u,Math.min(p,m-s))),e==="n"||e==="ne"||e==="nw"){const M=Ao(r-n,u,Math.min(p,s+r));v=s+(r-M),x=M}return c||(y=i,h=o),{x:h,y:v,width:y,height:x}}function Ao(e,t,n){return n<t?t:Math.min(Math.max(e,t),n)}const Yh="desktop-mode-widgets",Xh="desktop-mode-widgets-geometry",Zh="desktop-mode-widgets-docked-heights";function Jh(){try{return window.localStorage.getItem(Yh)}catch{return null}}function pC(){const e=Jh();if(e===null)return[];try{const t=JSON.parse(e);return Array.isArray(t)?t.filter(n=>typeof n=="string"):[]}catch{return[]}}function ol(e){try{window.localStorage.setItem(Yh,JSON.stringify(e))}catch{}}function hC(){try{const e=window.localStorage.getItem(Xh);if(!e)return{};const t=JSON.parse(e);if(!t||typeof t!="object")return{};const n={};for(const[o,s]of Object.entries(t)){const i=gC(s);i&&(n[o]=i)}return n}catch{return{}}}function sl(e){try{window.localStorage.setItem(Xh,JSON.stringify(e))}catch{}}function mC(){try{const e=window.localStorage.getItem(Zh);if(!e)return{};const t=JSON.parse(e);if(!t||typeof t!="object")return{};const n={};for(const[o,s]of Object.entries(t))typeof s=="number"&&Number.isFinite(s)&&s>0&&(n[o]=s);return n}catch{return{}}}function Qh(e){try{window.localStorage.setItem(Zh,JSON.stringify(e))}catch{}}function gC(e){if(!e||typeof e!="object")return null;const{x:t,y:n,width:o,height:s}=e;return typeof t!="number"||!Number.isFinite(t)||typeof n!="number"||!Number.isFinite(n)||typeof o!="number"||!Number.isFinite(o)||o<=0||typeof s!="number"||!Number.isFinite(s)||s<=0?null:{x:t,y:n,width:o,height:s}}function wC(e){const t=`os.widget.${e}.`,n=o=>{try{return localStorage.getItem(t+o)}catch{return null}};return{get(o){const s=n(o);if(s===null)return null;try{return JSON.parse(s)}catch{return null}},set(o,s){try{localStorage.setItem(t+o,JSON.stringify(s))}catch{}},remove(o){try{localStorage.removeItem(t+o)}catch{}},clear(){try{for(let o=localStorage.length-1;o>=0;o--){const s=localStorage.key(o);s&&s.startsWith(t)&&localStorage.removeItem(s)}}catch{}}}}const yC=["clock"];class bC{constructor(t,n,o){this.mounted=new Map,this.generation=0,this.root=t,this.pluginUrl=n,this.enabledIds=pC(),this.geometry=hC(),this.dockedHeights=mC(),this.floatingHost=o??t.parentElement??t,this.listEl=document.createElement("div"),this.listEl.className="os-widgets__list",this.root.appendChild(this.listEl),this.addTile=this.buildAddTile(),this.root.appendChild(this.addTile),this.paintEmptyState()}hydrate(){Jh()===null&&(this.enabledIds=yC.filter(t=>!!ko(t)),ol(this.enabledIds));for(const t of this.enabledIds)this.mounted.has(t)||this.mountById(t);this.paintEmptyState()}add(t){this.enabledIds.includes(t)||ko(t)&&(this.enabledIds.push(t),ol(this.enabledIds),this.mountById(t),this.paintEmptyState(),T(b.WIDGET_ADDED,{id:t}),So())}remove(t){const n=this.enabledIds.length;this.enabledIds=this.enabledIds.filter(o=>o!==t),this.enabledIds.length!==n&&(ol(this.enabledIds),this.geometry[t]&&(delete this.geometry[t],sl(this.geometry)),this.dockedHeights[t]!==void 0&&(delete this.dockedHeights[t],Qh(this.dockedHeights)),this.unmountById(t),this.paintEmptyState(),T(b.WIDGET_REMOVED,{id:t}),So())}getEnabledIds(){return[...this.enabledIds]}mountIfEnabled(t){ko(t)&&this.enabledIds.includes(t)&&(this.mounted.has(t)||(this.mountById(t),this.paintEmptyState()))}unmount(t){this.mounted.has(t)&&(this.unmountById(t),this.paintEmptyState())}ensureMounted(t){return ko(t)?(this.enabledIds.includes(t)||this.add(t),!0):!1}disposeAll(){for(const t of Array.from(this.mounted.keys()))this.unmountById(t)}mountById(t){const n=ko(t);if(!n)return;const o=++this.generation,s=n.movable===!0?this.geometry[t]:void 0,i=nC(n,{floatingParent:this.floatingHost,geometry:s,dockedHeight:this.dockedHeights[t]},{onRemove:()=>this.remove(t),onGeometryChanged:u=>this.persistGeometry(t,u),onDockedHeightChanged:u=>this.persistDockedHeight(t,u),onLiberate:u=>this.liberate(t,u),onRedock:()=>this.redock(t)}),r=!!s,a={id:t,frame:i,generation:o,teardown:null,floating:r};this.mounted.set(t,a),this.placeCard(i.card,r);const l={id:t,pluginUrl:this.pluginUrl,storage:wC(t)};T(b.WIDGET_MOUNTING,{id:t,container:i.body,ctx:l});const c=u=>{const f=this.mounted.get(t);if(!f||f.generation!==o){try{u()}catch{}return}f.teardown=u,T(b.WIDGET_MOUNTED,{id:t,container:i.body,ctx:l})};let d;try{d=n.mount(i.body,l)}catch(u){this.handleMountFailure(t,u);return}if(vC(d)){d.then(c,u=>{this.mounted.get(t)?.generation===o&&this.handleMountFailure(t,u)});return}c(d)}unmountById(t){const n=this.mounted.get(t);if(n){T(b.WIDGET_UNMOUNTING,{id:t});try{n.teardown?.()}catch(o){T(b.SHELL_ERROR,{scope:"widget-teardown",id:t,error:o}),typeof console<"u"&&console.error(`[openstation] Widget "${t}" teardown threw:`,o)}this.generation++,n.frame.dispose(),this.mounted.delete(t)}}handleMountFailure(t,n){const o=this.mounted.get(t);o&&(o.frame.dispose(),this.mounted.delete(t)),T(b.WIDGET_MOUNT_FAILED,{id:t,error:n}),T(b.SHELL_ERROR,{scope:"widget-mount",id:t,error:n}),typeof console<"u"&&console.error(`[openstation] Widget "${t}" failed to mount:`,n)}buildAddTile(){const t=document.createElement("button");t.type="button",t.className="os-widgets__add",t.setAttribute("aria-label",S("Add widget"));const n=document.createElement("span");n.className="os-widgets__add-plus",n.setAttribute("aria-hidden","true"),n.textContent="+";const o=document.createElement("span");return o.className="os-widgets__add-label",o.textContent=S("Add widget"),t.appendChild(n),t.appendChild(o),t.addEventListener("click",s=>{s.preventDefault(),s.stopPropagation(),qA({anchor:t,registry:()=>$h(),enabledIds:()=>[...this.enabledIds],onAdd:i=>this.add(i)})}),t}placeCard(t,n){n?this.floatingHost.appendChild(t):this.listEl.appendChild(t)}liberate(t,n){const o=this.mounted.get(t);!o||o.floating||(o.floating=!0,this.floatingHost.appendChild(o.frame.card),nl(o.frame.card,n),this.persistGeometry(t,n),this.paintEmptyState())}redock(t){const n=this.mounted.get(t);if(!n||!n.floating)return;n.floating=!1,this.geometry[t]&&(delete this.geometry[t],sl(this.geometry));const o=n.frame.card;o.classList.remove("os-widgets__card--floating"),o.style.left="",o.style.top="",o.style.width="";const s=this.dockedHeights[t];o.style.height=s!==void 0?`${s}px`:"",this.listEl.appendChild(o),this.paintEmptyState()}persistGeometry(t,n){this.geometry[t]=n,sl(this.geometry)}persistDockedHeight(t,n){!Number.isFinite(n)||n<=0||(this.dockedHeights[t]=n,Qh(this.dockedHeights))}paintEmptyState(){let t=0;for(const n of this.mounted.values())n.floating||t++;this.root.classList.toggle("os-widgets--has-widgets",t>0)}}function vC(e){return!!e&&(typeof e=="object"||typeof e=="function")&&typeof e.then=="function"}const _C=280,EC=220,kC=520,SC=400;function AC(e,t){const o=e.closest('[id^="wp-window-"]')?.id.slice(10);return o||t}function CC(e,t,n){return o=>{const s=AC(o,n),i=document.createElement("iframe");i.style.width="100%",i.style.height="100%",i.style.border="0",i.setAttribute("src",e.url),typeof e.sandbox=="string"&&e.sandbox!==""&&i.setAttribute("sandbox",e.sandbox),o.style.padding="0",o.appendChild(i);const r=LA(s,i);t.push(r);let a;try{a=new URL(e.url,window.location.origin).origin}catch{a=window.location.origin}let l=null;const c=new Promise(f=>{l=f}),d=()=>{if(e.bridge)try{const f=i.contentDocument;if(f&&!f.querySelector("script[data-os-iframe-bridge]")){const p=window.openStationConfig?.iframeBridgeUrl;if(p){const g=f.createElement("script");g.src=p,g.setAttribute("data-os-iframe-bridge","1"),f.head?.appendChild(g)}}}catch{}Rv(s),l?.()};i.addEventListener("load",d);const u=f=>{if(!i.contentWindow||f.source!==i.contentWindow||f.origin!==a&&f.origin!==window.location.origin)return;const p=f.data;p&&typeof p=="object"&&typeof p.type=="string"&&p.type.startsWith("os-bridge-")&&window.__openStationConnectionBridge?.routeIncomingFromIframe(p,s),p&&typeof p=="object"&&p.type==="os-window-publish"&&typeof p.channel=="string"&&p.channel!==""&&Tv(s,p.channel,p.payload);try{e.onMessage?.(f.data)}catch(g){typeof console<"u"&&console.error("[openstation] iframeContent.onMessage threw:",g)}};return window.addEventListener("message",u),t.push(()=>{window.removeEventListener("message",u),i.removeEventListener("load",d)}),c}}function IC(e){return async t=>{const n=t.render;let o=n;const s=[];t.iframeContent&&(n&&typeof console<"u"&&console.warn("[openstation] registerWindow: both `render` and `iframeContent` provided — ignoring `render` and using the iframe shorthand. Drop one."),o=CC(t.iframeContent,s,t.id));const i=t.onClose,r=t.iframeContent?()=>{for(const l of s)try{l()}catch{}i?.()}:i;return await e.open({id:t.id,baseId:t.baseId||t.id,native:!0,url:t.url||`#${t.id}`,title:t.title,icon:t.icon,x:t.x??0,y:t.y??0,width:t.width??kC,height:t.height??SC,minWidth:t.minWidth??_C,minHeight:t.minHeight??EC,render:o,onClose:r,onResize:t.onResize,autofocus:t.autofocus,initialState:t.initialState,ownerHandle:t.ownerHandle,multi:t.multi,desktopId:t.desktopId})}}let xC=0;function LC(e,t,n={}){const o=`desktop-mode/on-window/${e}/${++xC}`,s=n.persistent===!0,i=[["opened",b.WINDOW_OPENED],["reopened",b.WINDOW_REOPENED],["focused",b.WINDOW_FOCUSED],["blurred",b.WINDOW_BLURRED],["closing",b.WINDOW_CLOSING],["closed",b.WINDOW_CLOSED],["minimized",b.WINDOW_MINIMIZED],["restored",b.WINDOW_RESTORED],["maximized",b.WINDOW_MAXIMIZED],["unmaximized",b.WINDOW_UNMAXIMIZED],["fullscreenEntered",b.WINDOW_FULLSCREEN_ENTERED],["fullscreenExited",b.WINDOW_FULLSCREEN_EXITED],["resized",b.WINDOW_RESIZED],["bodyResized",b.WINDOW_BODY_RESIZED],["boundsChanged",b.WINDOW_BOUNDS_CHANGED]],r=[];let a=!1;const l=()=>{if(!a){a=!0;for(const c of r)mr(c,o)}};for(const[c,d]of i){const u=t[c];u&&(r.push(d),K(d,o,f=>{const p=f;if(p.windowId!==e)return;const{windowId:g,...m}=p;u(m),c==="closed"&&!s&&l()}))}return l}function TC(){const e=window;return{...e.wpDesktopNativeWindows||{},...e.openStationNativeWindows||{}}}function NC(e,t){const n=t.tabs;if(!Array.isArray(n)||n.length<2)return;const o=e.closest(".os-window");o&&R_(o,n.map(s=>({value:s.value,label:s.label})),n.find(s=>s.isMain)?.value)}function DC(e){const{manager:t,appendSystemTile:n,removeSystemTile:o}=e,s=new Set,i=new Set,r=new Set,a=new Map,l=new Set,c=new Map,d=k=>{const w=Xr(k.id);return w?{width:Math.max(w.width,k.minWidth),height:Math.max(w.height,k.minHeight)}:{width:k.width,height:k.height}},u=k=>{if(i.has(k.templateId))return;if(document.getElementById(k.templateId)){i.add(k.templateId);return}if(!k.templateHtml)return;const w=document.createElement("template");w.id=k.templateId,w.innerHTML=k.templateHtml,document.body.appendChild(w),i.add(k.templateId)},f=k=>{const w=k.styleUrl;if(!w||l.has(w))return;const E=w.replace(/\\/g,"\\\\").replace(/"/g,'\\"');if(!document.head.querySelector(`link[rel="stylesheet"][href="${E}"]`)){const O=document.createElement("link");O.rel="stylesheet",O.href=w,k.styleHandle&&(O.dataset.osStyleHandle=k.styleHandle),document.head.appendChild(O)}if(Array.isArray(k.styleInline))for(const O of k.styleInline){if(typeof O!="string"||O==="")continue;const H=document.createElement("style");k.styleHandle&&(H.dataset.osStyleHandle=k.styleHandle),H.textContent=O,document.head.appendChild(H)}l.add(w)},p=(k,w)=>{const E=w.scriptUrl;if(r.has(E))return Promise.resolve();const _=a.get(E);if(_)return _;const O=ke(E,{translations:w.scriptTranslations,l10n:w.scriptL10n,before:w.scriptBefore,after:w.scriptAfter}).catch(H=>{T(b.SHELL_ERROR,{scope:"native-window-script-load",id:k,error:H})}).then(()=>{r.add(E),a.delete(E)});return a.set(E,O),O},g=async k=>{for(const w of k.companionScripts??[])w.scriptUrl&&await p(k.id,w);k.scriptUrl&&await p(k.id,k)},m=async k=>{k.preloadScript&&await g(k)},h=k=>async(w,E)=>{w.appendChild(em(k.templateId)),NC(w,k),await g(k);const _=TC()[k.id];return _?.(w,E)},v=(k,w)=>{const E=h(k),_=d(k);t.open({id:k.id,baseId:k.id,native:!0,url:`#${k.id}`,title:k.title,icon:k.icon,width:_.width,height:_.height,minWidth:k.minWidth,minHeight:k.minHeight,render:E,autofocus:k.autofocus,ownerHandle:k.ownerHandle||k.scriptHandle,...w?{params:w}:{}})},y=(k,w)=>{const E=h(k),_=d(k);t.openNew({id:k.id,baseId:k.id,native:!0,url:`#${k.id}`,title:k.title,icon:k.icon,width:_.width,height:_.height,minWidth:k.minWidth,minHeight:k.minHeight,initialState:"normal",render:E,autofocus:k.autofocus,ownerHandle:k.ownerHandle||k.scriptHandle,...w?{params:w}:{}})},x=async k=>{if(!s.has(k.id)){if(k.placement==="none"){u(k),f(k),await m(k),s.add(k.id);return}u(k),f(k),await m(k),n({id:k.id,title:k.title,icon:k.icon,order:k.dockOrder,placeable:k.placeable===!0,isOpen:()=>!!t.getById(k.id),onOpen:()=>v(k)}),T(b.DOCK_ITEM_APPENDED,{id:k.id}),s.add(k.id)}},M=k=>{s.has(k)&&(o(k),s.delete(k),c.delete(k))},I=async k=>{const w=new Set;for(const E of k)w.add(E.id),c.set(E.id,E);for(const E of Array.from(s))w.has(E)||M(E);for(const E of k)s.has(E.id)||await x(E)},W=(k,w={})=>{const E=c.get(k);return E?(Ee.publish("os/open-requested",{windowId:k,source:w.source??"api"}),v(E,w.params),!0):!1},P=(k,w={})=>{const E=c.get(k);return E?(Ee.publish("os/open-requested",{windowId:k,source:w.source??"api"}),y(E,w.params),!0):!1};return K(b.WINDOW_RESIZE_END,"desktop-mode-native-window-geometry",k=>{const w=k,E=w?.windowId,_=w?.width,O=w?.height;if(!E||typeof _!="number"||typeof O!="number")return;const H=t.getById(E);if(!H||H.state!=="normal")return;const G=H.config.baseId||H.id;Yu(G,{width:_,height:O}),H.element&&Xu(G,{x:H.element.offsetLeft,y:H.element.offsetTop})}),K(b.WINDOW_DRAG_END,"desktop-mode-native-window-geometry",k=>{const w=k?.windowId;if(!w)return;const E=t.getById(w);if(!E||E.state!=="normal"||!E.element)return;const _=E.config.baseId||E.id;Yu(_,{width:E.element.offsetWidth,height:E.element.offsetHeight}),Xu(_,{x:E.element.offsetLeft,y:E.element.offsetTop})}),K(b.WINDOW_MAXIMIZED,"desktop-mode-native-window-geometry",k=>{const w=k?.windowId;if(!w)return;const E=t.getById(w);if(!E)return;const _=E.config.baseId||E.id,O=c.get(_),H=O?{width:O.width,height:O.height}:{width:E.config.width,height:E.config.height};Zu(_,"maximized",H)}),K(b.WINDOW_UNMAXIMIZED,"desktop-mode-native-window-geometry",k=>{const w=k?.windowId;if(!w)return;const E=t.getById(w);if(!E)return;const _=E.config.baseId||E.id;Zu(_,null)}),{sync:I,openById:W,openNewById:P,loadScriptById:async k=>{const w=c.get(k);return w?(await g(w),!0):!1}}}function em(e){let t=null;if(typeof e=="string"){const n=document.getElementById(e);n instanceof HTMLTemplateElement&&(t=n)}else t=e;if(!t)throw new Error(`[openstation] cloneTemplate: no <template> found for ${typeof e=="string"?`#${e}`:"<reference>"}`);return t.content.cloneNode(!0)}function tm(e){const t=window.wp?.os,n=window.openStationConfig,o=t?.config?.adminUrl??n?.adminUrl;if(!o)return null;const s=t?.getMenuItems?.()??n?.dockItems??[],i=ae(e,o);return s.find(r=>ae(r.url,o)===i||(r.submenu??[]).some(a=>ae(a.url,o)===i))??null}const nm="data:image/svg+xml;base64,",Ci=new Map;function RC(e){const t=Ci.get(e);if(t!==void 0)return t;let n=!1;try{n=atob(e.slice(nm.length)).includes("currentColor")}catch{}return Ci.size>=256&&Ci.clear(),Ci.set(e,n),n}function Co(e,t){const n=t.className??"",o=t.title??"";let s=null;if(t.slot){const l=Bs(t.slot);l!==null&&(e=l),s=Or(t.slot)}if(typeof e=="string"&&e.startsWith("dashicons-")){const l=document.createElement("span");return l.className=`dashicons ${e} ${n}`.trim(),l.setAttribute("aria-hidden","true"),s!==null&&(l.style.color=s),l}if(s!==null&&typeof e=="string"){const l=document.createElement("span");if(l.className=n,l.setAttribute("aria-hidden","true"),l.style.display="inline-block",ro(l,e,s))return l}if(typeof e=="string"&&e.startsWith("data:image/svg+xml;base64,")){const l=e.slice(nm.length);if(/^[A-Za-z0-9+/=]+$/.test(l)){const c=document.createElement("span");return c.className=n,c.setAttribute("aria-hidden","true"),c.style.display="inline-block",RC(e)&&ro(c,e,"currentColor")||(c.style.backgroundImage=`url("${e}")`,c.style.backgroundRepeat="no-repeat",c.style.backgroundPosition="center",c.style.backgroundSize="contain"),c}}if(typeof e=="string"&&/^data:image\/(png|jpeg|jpg|gif|webp|x-icon|vnd\.microsoft\.icon);base64,/i.test(e)){const l=e.indexOf(","),c=l>=0?e.slice(l+1):"";if(/^[A-Za-z0-9+/=]+$/.test(c))return om(e,n)}if(typeof e=="string"&&(e.startsWith("http://")||e.startsWith("https://")))return om(e,n);const i=document.createElement("span");i.className=`${n} os-icon-letter`.trim(),i.setAttribute("aria-hidden","true");const r=OC(o);i.textContent=r;const a=fn(o);return i.style.backgroundColor=`hsl( ${a}, 60%, 45% )`,i.style.color="#fff",i.style.display="inline-flex",i.style.alignItems="center",i.style.justifyContent="center",i.style.fontWeight="600",i.style.borderRadius="4px",i}function om(e,t){const n=document.createElement("img");return n.className=t,n.src=e,n.alt="",n.setAttribute("aria-hidden","true"),n.draggable=!1,n}function OC(e){const t=(e??"").trim();if(t==="")return"?";const n=t.split(/\s+/);if(n.length>=2)return(n[0][0]+n[1][0]).toUpperCase();const o=n[0];return o.length>=2?o.slice(0,2).toUpperCase():o.toUpperCase()}const sm="os-icon__badge",Io=new Map,xo=new Map;function MC(e){return Math.max(0,Math.floor(Number(e)||0))}function im(e,t){if(!e)return;const n=cm(e);if(!n)return;const o=MC(t),s=Io.get(e)??0;o!==s&&(o===0?Io.delete(e):Io.set(e,o),dm(n,o),Ee.publish("os/badge-changed",{itemId:e,count:o,rail:"icon"}),T(b.ICON_BADGE_CHANGED,{iconId:e,count:o,previousCount:s}))}function PC(e){im(e,0)}function WC(e){return Io.get(e)??0}function $C(e,t){if(e){if(!t){xo.delete(e);return}xo.get(e)!==t&&(xo.set(e,t),FC(e,t),Ee.publish("os/art-changed",{itemId:e,icon:t,rail:"icon"}))}}function rm(e){return xo.get(e)??""}function UC(e){return typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(e):e.replace(/["\\]/g,"\\$&")}function FC(e,t){const o=cm(e)?.querySelector(".os-icon__image");if(o){const s=Co(t,{className:"os-icon__image",title:""});o.replaceWith(s)}document.querySelectorAll(`os-tile[data-file-ref="${UC(e)}"]`).forEach(s=>s.setAttribute("icon",t))}const BC={setBadge:im,clearBadge:PC,getBadge:WC,setArt:$C,getArt:rm};function HC(e){return!e||e.length===0?"":`${Rr()??""}::`+e.map(n=>`${n.id}|${n.title}|${n.icon}|${n.window??""}|${n.url??""}|${n.position??0}|${n.pinned?1:0}`).join(";")}let am="";function lm(e,t,n){const o=HC(t);if(o===am&&e.querySelector(":scope > .os-icons"))return;am=o;const s=e.querySelector(":scope > .os-icons");if(s&&s.remove(),!t||t.length===0)return;const i=document.createElement("div");i.className="os-icons",i.setAttribute("role","list"),i.setAttribute("aria-label",S("Desktop icons"));const r=[...t].sort((l,c)=>{const d=l.pinned?0:1,u=c.pinned?0:1;return d-u}),a=new Map;for(const l of r){const c=GC(l,n),d=Io.get(l.id)??0;d>0&&dm(c,d);const u=xo.get(l.id);if(u){const f=c.querySelector(".os-icon__image");f&&f.replaceWith(Co(u,{className:"os-icon__image",title:""}))}i.appendChild(c),a.set(l.id,c)}e.appendChild(i),T(b.DESKTOP_ICONS_RENDERED,{ids:(t??[]).map(l=>l.id),container:i,tiles:a})}function cm(e){if(!e)return null;const t=document.querySelector(".os-icons");return t?t.querySelector(`[data-icon-id="${zC(e)}"]`):null}function dm(e,t){const n=e.querySelector(`:scope > .${sm}`);if(t<=0){n?.remove();return}const o=t>99?"99+":String(t),s=le(nn("%d notification","%d notifications",t),t);if(n){n.textContent!==o&&(n.textContent=o),n.setAttribute("aria-label",s);return}const i=document.createElement("span");i.className=sm,i.textContent=o,i.setAttribute("aria-label",s),e.appendChild(i)}function zC(e){const t=window.CSS;return t?.escape?t.escape(e):e}function GC(e,t){const n=document.createElement("button");n.type="button",n.className=e.pinned?"os-icon os-icon--pinned":"os-icon",n.dataset.iconId=e.id,e.pinned&&(n.dataset.pinned="1"),n.setAttribute("role","listitem"),n.setAttribute("aria-label",e.title);const o=Co(e.icon,{title:e.title,className:"os-icon__image",slot:Hs(e.id)});n.appendChild(o);const s=document.createElement("span");return s.className="os-icon__label",s.textContent=e.title,n.appendChild(s),n.addEventListener("click",i=>{i.stopPropagation(),T(b.DESKTOP_ICON_CLICKED,{id:e.id,target:e.window?"window":"url"}),jC(e,t)}),n.addEventListener("contextmenu",i=>{e.pinned||(i.preventDefault(),i.stopPropagation(),Of({x:i.clientX,y:i.clientY,id:e.id,title:e.title,surface:"desktop"}))}),n}function jC(e,t){if(e.window)return t.openWindow(e.window),void 0;if(e.url){if(pn(e.url))return;try{const n=new URL(e.url,window.location.origin),o=t.deriveWindowId(n.toString()),s=tm(n.toString());t.manager.open({id:o,baseId:o,url:n.toString(),parentUrl:s?.url??n.toString(),title:e.title,icon:e.icon,submenu:s?.submenu,selfLabel:s?.selfLabel,multi:!!s?.multi})}catch{}}}function VC(e){return`desktop:${e}`}function qC(e){return`dock:${e}`}function Sn(e,t,n){const o=n[e];return o||t}function um(e){return e==="dock"||e==="both"}function fm(e){return e==="desktop"||e==="both"}function KC(e,t,n,o,s){const i=n.itemVisibility,r=n.dockOrder,a=[];for(const l of e){const c=Sn(l.id,"dock",i);um(c)&&a.push(l)}for(const l of t){const c=Sn(l.id,"desktop",i),d=c!=="hidden"&&!!l.window&&!!s?.has(l.window);!um(c)&&!d||l.window&&o&&o.has(l.window)||a.push({id:qC(l.id),title:l.title,icon:l.icon,url:l.url||"",windowId:l.window||void 0,badge:0,submenu:[],isCore:!1})}return XC(a,r)}function YC(e,t,n){const o=[];for(const i of e){const r=Sn(i.id,"desktop",n);fm(r)&&o.push(i)}let s=0;for(const i of t){const r=Sn(i.id,"dock",n);fm(r)&&o.push({id:VC(i.id),title:i.title,icon:i.icon,window:"",url:i.url||"",position:2e3+s++})}return o}function XC(e,t){if(t.length===0||e.length<=1)return e;const n=new Map;for(const i of e)n.set(i.id,i);const o=[],s=new Set;for(const i of t){const r=n.get(i);r&&(o.push(r),s.add(i))}for(const i of e)s.has(i.id)||o.push(i);return o}const pm="os-side-dock";function ZC(e,t,n,o,s="bottom"){let i=t,r=s,a=n,l=o??[],c=null,d=null,u=null,f=null,p=null;const g=new Map,m=new Set,h=A=>c,v=()=>{const A=document.getElementById(pm);if(A)return A;const R=document.createElement("nav");return R.id=pm,R.className="os-dock",R.setAttribute("role","toolbar"),R.setAttribute("aria-label","Core admin navigation"),e.shellBody.insertBefore(R,e.shellBody.firstChild),R},y=()=>{p&&p.parentNode&&p.parentNode.removeChild(p),p=null},x=()=>e.getSettings?.()??{itemVisibility:{},dockOrder:[]},M=A=>{const R=x().itemVisibility;let U=R[A];for(const N of l)if(N.window===A&&R[N.id]){U=R[N.id];break}return!U||U==="dock"||U==="both"?!0:U!=="hidden"&&I().has(A)},I=()=>{const A=e.windowManager.getActiveDesktopId(),R=new Set;for(const U of e.windowManager.getAll())(U.config.desktopId||A)===A&&R.add(U.config.baseId||U.id);return R},W=()=>{for(const[A,R]of g){const U=M(A),N=m.has(A);U&&!N?(h(R.affinity)?.appendSystemItem(R.item),m.add(A)):!U&&N&&(h(R.affinity)?.removeSystemItem(A),m.delete(A))}},P=()=>{const A=I(),R=x().itemVisibility,U=l.filter(z=>!!z.window&&A.has(z.window)&&(R[z.id]??"desktop")==="desktop").map(z=>z.id),N=Array.from(g.keys()).filter(z=>A.has(z)&&R[z]==="desktop");return[...U,...N].sort().join(",")};let $=P();for(const A of["os-window-opened","os-window-closed"])document.addEventListener(A,()=>{const R=P();R!==$&&($=R,F.refresh())});const k=()=>{const A=new Set;for(const R of g.values())A.add(R.item.id);return KC(a,l,x(),A,I())},w=()=>{const A=k(),R=[],U=[];for(const N of A)N.isCore?R.push(N):U.push(N);return{core:R,plugin:U}},E=()=>{const{core:A,plugin:R}=w();return[...A,...R]},_=()=>{const A=x();e.renderIcons(YC(l,a,A.itemVisibility))},O=()=>{if(c){try{c.destroy()}catch(A){T(b.SHELL_ERROR,{scope:"dock-rail-renderer/destroy",error:A})}c=null,u=null}if(d){try{d.destroy()}catch(A){T(b.SHELL_ERROR,{scope:"dock-rail-renderer/destroy",error:A})}d=null,f=null}},H=A=>{const R=_r();if(!R)return T(b.SHELL_ERROR,{scope:"dock-rail-renderer",message:"No dock rail renderer is registered."}),null;try{return R.mount(A)}catch(U){if(T(b.SHELL_ERROR,{scope:"dock-rail-renderer/mount",rendererId:R.id,error:U}),R===aa)return null;try{return aa.mount(A)}catch{return null}}},G=(A,R,U)=>({container:A,items:R,fullMenu:a.slice(),fullSystemTiles:Array.from(g.values()).filter(N=>M(N.item.id)).map(N=>N.item),orientation:U,windowManager:e.windowManager,adminUrl:e.adminUrl,openItem:N=>{const z=ae(N.url,e.adminUrl);e.windowManager.open({id:z,baseId:z,url:N.url,parentUrl:N.url,title:N.title,icon:N.icon.startsWith("dashicons-")?N.icon:"dashicons-admin-generic",submenu:N.submenu,selfLabel:N.selfLabel,multi:!!N.multi})},openSubmenuPick:(N,z)=>{e.windowManager.open({id:ae(z.url,e.adminUrl),baseId:ae(N.url,e.adminUrl),url:z.url,parentUrl:N.url,title:N.title,icon:N.icon.startsWith("dashicons-")?N.icon:"dashicons-admin-generic",submenu:N.submenu,selfLabel:N.selfLabel,multi:!!N.multi})},openSystemItem:N=>N.onOpen()}),j=()=>i==="classic"?"bottom":r,L=()=>{O();const{core:A,plugin:R}=w();i==="classic"?(p=v(),d=H(G(p,A,"left")),f=la(d),c=H(G(e.bottomDockEl,R,"bottom")),u=la(c)):(y(),c=H(G(e.bottomDockEl,E(),j())),u=la(c)),m.clear();for(const[U,N]of g)M(U)&&(h(N.affinity)?.appendSystemItem(N.item),m.add(U))},F={getLayout:()=>i,getPrimary:()=>u,getSide:()=>f,setLayout:A=>{A!==i&&(i=A,e.shellRoot.setAttribute("data-os-layout",A),L(),_(),document.dispatchEvent(new CustomEvent("os-layout-changed",{detail:{layout:A,placement:j(),primary:u,side:f}})))},getDockPlacement:()=>r,setDockPlacement:A=>{if(A===r)return;const R=j();r=A,j()!==R&&(L(),_(),document.dispatchEvent(new CustomEvent("os-layout-changed",{detail:{layout:i,placement:j(),primary:u,side:f}})))},applyDockItems:A=>{a=A;const{core:R,plugin:U}=w();i==="classic"?(d?.replaceItems(R),c?.replaceItems(U)):c?.replaceItems([...R,...U]),_()},applyDesktopIcons:A=>{l=A??[],W(),_()},appendSystemTile:(A,R="plugin")=>{g.set(A.id,{item:A,affinity:R}),M(A.id)&&(h()?.appendSystemItem(A),m.add(A.id))},removeSystemTile:A=>{const R=g.get(A);R&&(g.delete(A),m.delete(A),h(R.affinity)?.removeSystemItem(A))},listSystemTiles:()=>Array.from(g.values()).map(A=>({id:A.item.id,title:A.item.title,icon:A.item.icon,affinity:A.affinity,placeable:A.item.placeable===!0})),getSystemTile:A=>g.get(A)?.item??null,getMenuItems:()=>a.slice(),refresh:()=>{const{core:A,plugin:R}=w();i==="classic"?(d?.replaceItems(A),c?.replaceItems(R)):c?.replaceItems([...A,...R]),W(),_()},destroy:()=>{O(),y()}};e.shellRoot.setAttribute("data-os-layout",i),L(),_();let D=_r()?.id??null;return Pb(()=>{const A=_r()?.id??null;A!==D&&(D=A,L(),_(),document.dispatchEvent(new CustomEvent("os-layout-changed",{detail:{layout:i,primary:u,side:f}})))}),F}function JC(e){return window.openStationCreateAiAssistant?Promise.resolve(window.openStationCreateAiAssistant):new Promise((t,n)=>{const o=document.querySelector('script[data-os-ai="1"]'),s=()=>{const r=window.openStationCreateAiAssistant;if(!r){n(new Error("[openstation] ai-assistant bundle loaded but did not register openStationCreateAiAssistant"));return}t(r)};if(o){window.openStationCreateAiAssistant?s():(o.addEventListener("load",s),o.addEventListener("error",()=>n(new Error("failed to load ai-assistant bundle"))));return}const i=document.createElement("script");i.src=e,i.async=!0,i.dataset.osAi="1",i.addEventListener("load",s),i.addEventListener("error",()=>n(new Error("failed to load ai-assistant bundle"))),document.head.appendChild(i)})}class QC{constructor(t,n){this._real=null,this._loadPromise=null,this._pendingAsk=null,this._intendOpen=!1,this.ask=(...o)=>this._ensure().then(s=>s.ask(...o)),this._config=t,this._scriptUrl=n}_ensure(){return this._loadPromise?this._loadPromise:(this._loadPromise=JC(this._scriptUrl).then(t=>{const n=t(this._config);return this._pendingAsk&&n.attachAsk(this._pendingAsk),this._real=n,n}),this._loadPromise)}open(){this._intendOpen=!0,this._ensure().then(t=>t.open())}close(){this._intendOpen=!1,this._real&&this._real.close()}toggle(){this.isOpen?this.close():this.open()}get isOpen(){return this._real?this._real.isOpen:this._intendOpen}attachAsk(t){this._pendingAsk=t,this._real&&this._real.attachAsk(t)}}const hm=e=>!e||typeof e!="object"?!1:e.name==="AbortError",eI=e=>{if(!e)return[];const t=U0();if(e===!0||e==="aiCallable")return t;if(Array.isArray(e)){const n=new Set(e.map(o=>o.toLowerCase()));return t.filter(o=>n.has(o.slug))}return typeof e=="function"?t.filter(n=>{try{return e(n.slug)===!0}catch{return!1}}):[]},tI=e=>e?typeof e=="string"?{text:e,mode:"append"}:typeof e=="object"&&typeof e.text=="string"&&e.text!==""?{text:e.text,mode:e.mode==="replace"?"replace":"append"}:null:null;function nI(e,t){const n=e??"";return n!==""?n:typeof t=="string"&&t!==""?t:t&&typeof t=="object"&&"message"in t&&typeof t.message=="string"?t.message:""}function oI(e){return e===void 0?{value:null}:typeof e=="object"&&e!==null?e:{value:e}}function sI(e){const t=async(s,i)=>{const r=e.config(),a=r.aiSearchUrl??"",l=r.restNonce??"";if(!a||!l)throw new Error("[openstation] wp.os.ai.ask: aiSearchUrl / restNonce missing from config. AI Copilot may not be enabled.");try{return await Be(a,{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json","X-WP-Nonce":l},body:JSON.stringify(s),signal:i},{source:"desktop-mode/ai-ask"})}catch(c){throw hm(c)?c:new Error(`[openstation] wp.os.ai.ask: network error — ${String(c?.message??c)}`)}},n=async(s,i)=>{const r=s.tool?.slug??"",a=s.tool?.args??"",l=F0(r);if(!l)return{ok:!1,response:{answer_type:"tool_call",message:`Command /${r} was not registered on this page.`,entity:null,admin_links:null,toolCall:{slug:r,args:a,result:{error:"command_not_found"}},request_id:s.request_id}};const c=i.commandContext??e.fallbackContext();let d;try{d=await Promise.resolve(l.run(a,c))}catch(u){d={error:String(u?.message??u)}}return{ok:!0,slug:r,args:a,result:d}},o=async(s,i,r,a,l,c)=>{const d={query:s,follow_up:{tool:{slug:i,args:r},result:oI(a)}};l&&(d.system_prompt_text=l.text,d.system_prompt_mode=l.mode);let u;try{u=await t(d,c)}catch(g){if(hm(g))throw g;return null}if(!u.ok)return null;const f=await u.json().catch(()=>({}));return(typeof f.message=="string"?f.message.trim():"")!==""?f.message??null:null};return async function(i,r={}){const a=(i??"").trim();if(a===""){if(r.tools!==void 0||r.systemPrompt!==void 0||r.followUp===!0||r.resumeTool!==void 0||r.commandContext!==void 0)throw new Error("[openstation] wp.os.ai.ask: empty query passed with non-default options — likely a caller bug. Provide a query or call without options.");return{answer_type:"chat",message:"",entity:null,admin_links:null}}const l=eI(r.tools),c=tI(r.systemPrompt),d={query:a};r.resumeTool&&(d.resume_tool=r.resumeTool),typeof r.startOffset=="number"&&(d.start_offset=r.startOffset),l.length>0&&(d.command_tools=l),c&&(d.system_prompt_text=c.text,d.system_prompt_mode=c.mode);const u=await t(d,r.signal);if(!u.ok){const y=await u.json().catch(()=>({message:u.statusText}));throw new Error(`[openstation] wp.os.ai.ask: HTTP ${u.status} — ${y.message??u.statusText}`)}const f=await u.json();if(f.answer_type!=="tool_call"||!f.tool)return{answer_type:f.answer_type,message:f.message??"",entity:f.entity??null,admin_links:f.admin_links??null,request_id:f.request_id,continue:f.continue??null};const p=await n(f,r);if(!p.ok)return p.response;const{slug:g,args:m,result:h}=p;let v=nI(f.message,h);if(r.followUp===!0){const y=await o(a,g,m,h,c,r.signal);y!==null&&(v=y)}return{answer_type:"tool_call",message:v,entity:null,admin_links:null,toolCall:{slug:g,args:m,result:h},request_id:f.request_id}}}const mm="[os-bin badge]";function st(...e){try{window.localStorage?.getItem("openStationBinDebug")&&console.info(mm,...e)}catch{}}function Ii(...e){console.warn(mm,...e)}const Lo="desktop-mode-recycle-bin",iI="openstation_recycle_bin_seen_ts";function rI(){return window.wp?.os}const ue=ie("desktop-mode/recycle-bin/icon-state",()=>({current:0,emptyArt:"",fullArt:"",seenTs:0,started:!1,countUrl:""}));function To(e){const t=Math.max(0,Math.floor(e)),n=ue.state.current;ue.state.current=t,st("setRecycleBinCount",{prev:n,next:t}),il(t)}function gm(e){To(ue.state.current+e)}function aI(){return ue.state.current}function il(e){const t=e>0?ue.state.fullArt:ue.state.emptyArt;if(st("paintIconState",{count:e,full:e>0,hasArt:!!t}),!t)return;const n=rI();n?.dock?.setArt?.(Lo,t),n?.taskbar?.setArt?.(Lo,t),n?.icons?.setArt?.(Lo,t)}function lI(e,t=""){const n=Number(e)||0,o=window.openStationConfig,s=o?.recycleBinCount,i=o?.recycleBinCountUrl;ue.state.emptyArt=String(o?.recycleBinIconEmpty??""),ue.state.fullArt=String(o?.recycleBinIconFull??"");const r=o?.openStationBinDebug;st("startRecycleBinIconState entry",{initial:n,countUrl:t,alreadyStarted:ue.state.started,cfgCount:s,cfgUrl:i,cfgDebug:r,readyState:document.readyState});const a=Number(s);if((typeof s=="number"||typeof s=="string")&&Number.isFinite(a)||Ii("openStationConfig.recycleBinCount is missing — PHP filter `openstation_shell_config` did not deliver. Check your PHP error log for `[os-bin debug]` lines.",{cfg:o}),ue.state.started){To(n);return}ue.state.started=!0,ue.state.countUrl=t,ue.state.seenTs=Date.now(),To(n),cI(),dI(),uI(),fI(),pI()}function cI(){K(b.DOCK_ITEM_APPENDED,"desktop-mode/recycle-bin/icon-state",e=>{e?.id===Lo&&il(ue.state.current)})}function dI(){K(b.DESKTOP_ICONS_RENDERED,"desktop-mode/recycle-bin/icon-state",e=>{e?.ids?.includes(Lo)&&il(ue.state.current)})}function uI(){const e=s=>{const i=s;if(!i)return;const r=Array.isArray(i.ids)?i.ids.length:0;switch(i.action){case"trashed":gm(+r);break;case"untrashed":case"deleted":gm(-r);break}},n=window.openStationConfig?.recycleBinPostTypes??["post","page","attachment"],o=["comment","placement","shortcut","folder"];for(const s of[...n,...o])bn(`os.${s}.changed`,e)}function fI(){const e=window.location.origin;window.addEventListener("message",t=>{if(t.origin!==e)return;const n=t.data;if(!n||n.type!=="os-recycle-bin-changed")return;const o=typeof n.ts=="number"?n.ts:Date.now();if(o<=ue.state.seenTs){st("postMessage skipped (ts <= seenTs)",{ts:o,seenTs:ue.state.seenTs});return}st("postMessage triggers refetch",{ts:o,prevSeenTs:ue.state.seenTs}),ue.state.seenTs=o,hI()})}function pI(){const e=window.jQuery;if(!e){Ii("wireHeartbeatProbe: window.jQuery not available — heartbeat path disabled");return}st("wireHeartbeatProbe: jQuery + heartbeat hooks attached"),e(document).on("heartbeat-send",(...t)=>{const n=t[1];n&&(n[iI]=ue.state.seenTs)}),e(document).on("heartbeat-tick",(...t)=>{const o=t[1]?.openstation_recycle_bin;st("heartbeat-tick",{hasBlock:!!o,block:o}),o&&(typeof o.ts=="number"&&o.ts>ue.state.seenTs&&(ue.state.seenTs=o.ts),typeof o.count=="number"&&To(o.count))})}async function hI(){if(!ue.state.countUrl){st("refetchCount: no countUrl, skip");return}st("refetchCount: hitting",ue.state.countUrl);try{const e=await fetch(ue.state.countUrl,{credentials:"same-origin",headers:{Accept:"application/json"}});if(!e.ok){Ii("refetchCount: non-OK",e.status,e.statusText);return}const t=await e.json();st("refetchCount: response",t),typeof t.count=="number"&&To(t.count)}catch(e){Ii("refetchCount: fetch failed",e)}}const mI="desktop-mode-os-settings",gI="desktop-mode-recycle-bin";function wI(e){const t=vI();t&&t.addFilter("os.dock.peek-card-content","desktop-mode/built-in-peek-renderers",(n,o)=>{const s=o,i=s.window.id;return i===mI?yI():i===gI?bI(s,e.getRecycleBinCount):n})}function yI(e){const t=document.createElement("span");t.className="os-dock-peek__card-body os-dock-peek__card-body--os-settings",t.setAttribute("aria-hidden","true");const n=document.createElement("span");n.className="os-dock-peek__os-hero dashicons dashicons-admin-generic",t.appendChild(n);const o=document.createElement("span");o.className="os-dock-peek__os-subtitle",o.textContent=S("System Preferences"),t.appendChild(o);const s=document.createElement("span");s.className="os-dock-peek__os-tabs";for(const i of["dashicons-art","dashicons-admin-customizer","dashicons-editor-help"]){const r=document.createElement("span");r.className=`os-dock-peek__os-tab dashicons ${i}`,s.appendChild(r)}return t.appendChild(s),t}function bI(e,t){const n=document.createElement("span");n.className="os-dock-peek__card-body os-dock-peek__card-body--recycle-bin",n.setAttribute("aria-hidden","true");const o=Math.max(0,Math.floor(t()||0));n.dataset.empty=o===0?"true":"false";const s=document.createElement("span");s.className="os-dock-peek__bin-stage";const i=document.createElement("span");i.className="os-dock-peek__bin-stack";for(let l=0;l<3;l++){const c=document.createElement("span");c.className="os-dock-peek__bin-slip",i.appendChild(c)}s.appendChild(i);const r=document.createElement("span");r.className="os-dock-peek__bin-icon dashicons dashicons-trash",s.appendChild(r),n.appendChild(s);const a=document.createElement("span");return a.className="os-dock-peek__bin-label",o===0?a.textContent=S("Trash — empty"):o===1?a.textContent=S("1 item"):o>99?a.textContent="99+ items":a.textContent=`${o} items`,n.appendChild(a),n}function vI(){return window.wp?.hooks??null}const No="desktop-mode-bug-report",_I="WordPress",EI="openstation",wm=6e3;function kI(e){e.classList.add("desktop-mode-bug-report"),e.replaceChildren();const t=document.createElement("form");t.className="os-bug-report__form",t.setAttribute("novalidate","");const n=document.createElement("p");n.className="os-bug-report__intro",n.textContent=S("Found a bug or have a feature idea? Fill this in and we will open a pre-filled GitHub issue for you to review and submit."),t.appendChild(n),t.appendChild(SI()),t.appendChild(AI("title",S("Title"),{placeholder:S("A short summary"),required:!0})),t.appendChild(ym("description",S("What happened? What did you expect?"),{placeholder:S("Describe the issue or the feature you have in mind."),rows:5,required:!0})),t.appendChild(ym("steps",S("Steps to reproduce (bug only)"),{placeholder:S("One step per line"),rows:4}));const o=CI();t.appendChild(o);const s=document.createElement("div");s.className="os-bug-report__actions";const i=document.createElement("button");i.type="submit",i.className="os-bug-report__submit",i.textContent=S("Open issue on GitHub"),s.appendChild(i);const r=document.createElement("span");r.className="os-bug-report__hint",r.textContent=S("You will review and submit on GitHub."),s.appendChild(r),t.appendChild(s),t.addEventListener("submit",a=>{a.preventDefault();const l=xI(t);if(!l.title.trim()||!l.description.trim()){II(t,S("Title and description are both required."));return}const c=LI(l);window.open(c,"_blank","noopener")}),e.appendChild(t)}function SI(){const e=document.createElement("div");e.className="os-bug-report__field os-bug-report__field--type";const t=document.createElement("span");t.className="os-bug-report__label",t.textContent=S("Type"),e.appendChild(t);const n=document.createElement("div");n.className="os-bug-report__radio-group",n.setAttribute("role","radiogroup");const o=[{value:"bug",label:S("Bug"),checked:!0},{value:"feature",label:S("Feature request")},{value:"question",label:S("Question")}];for(const s of o){const i=document.createElement("label");i.className="os-bug-report__radio";const r=document.createElement("input");r.type="radio",r.name="type",r.value=s.value,s.checked&&(r.checked=!0),i.appendChild(r);const a=document.createElement("span");a.textContent=s.label,i.appendChild(a),n.appendChild(i)}return e.appendChild(n),e}function AI(e,t,n={}){const o=document.createElement("div");o.className="os-bug-report__field";const s=document.createElement("label");s.className="os-bug-report__label",s.textContent=t,o.appendChild(s);const i=document.createElement("input");return i.type="text",i.name=e,i.className="os-bug-report__input",n.placeholder&&(i.placeholder=n.placeholder),n.required&&i.setAttribute("aria-required","true"),s.appendChild(i),o}function ym(e,t,n={}){const o=document.createElement("div");o.className="os-bug-report__field";const s=document.createElement("label");s.className="os-bug-report__label",s.textContent=t,o.appendChild(s);const i=document.createElement("textarea");return i.name=e,i.className="os-bug-report__textarea",i.rows=n.rows??4,n.placeholder&&(i.placeholder=n.placeholder),n.required&&i.setAttribute("aria-required","true"),s.appendChild(i),o}function CI(){const e=document.createElement("details");e.className="os-bug-report__metadata";const t=document.createElement("summary");t.textContent=S("Environment included with the report"),e.appendChild(t);const n=document.createElement("pre");return n.className="os-bug-report__metadata-body",n.textContent=vm(bm()),e.appendChild(n),e}function II(e,t){let n=e.querySelector(".os-bug-report__error");n||(n=document.createElement("div"),n.className="os-bug-report__error",n.setAttribute("role","alert"),e.prepend(n)),n.textContent=t}function xI(e){const t=new FormData(e);return{type:t.get("type")??"bug",title:t.get("title")??"",description:t.get("description")??"",steps:t.get("steps")??""}}function LI(e){const t=TI(e.type),n=NI(e),o=new URLSearchParams;return o.set("title",e.title.trim()),o.set("body",n),t.length&&o.set("labels",t.join(",")),`https://github.com/${_I}/${EI}/issues/new?${o.toString()}`}function TI(e){switch(e){case"bug":return["bug"];case"feature":return["enhancement"];case"question":return["question"];default:return[]}}function NI(e){const t=[];t.push(e.description.trim()),e.type==="bug"&&e.steps.trim()&&(t.push(""),t.push("## Steps to reproduce"),t.push(""),t.push(e.steps.trim())),t.push(""),t.push("<details><summary>Environment</summary>"),t.push(""),t.push("```"),t.push(vm(bm())),t.push("```"),t.push(""),t.push("</details>");let n=t.join(` |
| 70 |
`);return n.length>wm&&(n=n.slice(0,wm)+` |
| 71 |
|
| 72 |
…(truncated to fit GitHub URL length limit)`),n}function bm(){const e=window.wp?.os?.config;return{pluginVersion:e?.pluginVersion??"unknown",wordpressVersion:e?.wordpressVersion??"unknown",userAgent:navigator.userAgent,viewport:`${window.innerWidth}x${window.innerHeight}`,platform:navigator.platform||"unknown",currentUrl:window.location.href}}function vm(e){return[`Plugin version: ${e.pluginVersion}`,`WordPress version: ${e.wordpressVersion}`,`User agent: ${e.userAgent}`,`Viewport: ${e.viewport}`,`Platform: ${e.platform}`,`Current URL: ${e.currentUrl}`].join(` |
| 73 |
`)}let xi=null,_m=!1,Em=!1,km=!1,Bt="pending";function DI(){if(Em)return;Em=!0;const e=!!navigator.serviceWorker.controller;navigator.serviceWorker.addEventListener("controllerchange",()=>{e&&(km||OI()||(MI(),km=!0,setTimeout(()=>window.location.reload(),0)))})}const Sm="os-sw-reload-ts",RI=3e4;function OI(){try{const e=sessionStorage.getItem(Sm),t=e?Number.parseInt(e,10):0;return!Number.isFinite(t)||t<=0?!1:Date.now()-t<RI}catch{return!1}}function MI(){try{sessionStorage.setItem(Sm,String(Date.now()))}catch{}}async function PI(e,t={}){if(typeof navigator>"u"||!("serviceWorker"in navigator)||!e?.swUrl||!window.isSecureContext)return Bt="unsupported",null;if(xi||_m)return xi;if(!t.forceReplace){const o=(await navigator.serviceWorker.getRegistrations().catch(()=>[])).find(s=>{const i=s.active?.scriptURL??s.installing?.scriptURL??"";return i!==""&&i!==e.swUrl});if(o)return Bt="foreign-sw",typeof console<"u"&&console.warn("[openstation] another service worker is already registered ("+o.scope+"); skipping openstation SW. Set openstation_pwa_force_replace_sw=true to override."),null}try{return xi=await navigator.serviceWorker.register(e.swUrl,{scope:"/",updateViaCache:"none"}),Bt="registered",DI(),xi}catch(n){return _m=!0,Bt="failed",typeof console<"u"&&console.warn("[openstation] SW registration failed:",n),null}}function WI(){return Bt}const $I="os-pwa-install";function Am(){return typeof window>"u"?!1:window.matchMedia?.("(display-mode: standalone)").matches?!0:window.navigator.standalone===!0}async function Cm(){if(Am())return!0;const e=window.navigator;if(typeof e.getInstalledRelatedApps!="function")return!1;try{const t=await e.getInstalledRelatedApps();return Array.isArray(t)&&t.length>0}catch{return!1}}let kt=null;function UI(e,t){if(typeof window>"u")return;window.removeEventListener("beforeinstallprompt",n),window.addEventListener("beforeinstallprompt",n),window.removeEventListener("appinstalled",o),window.addEventListener("appinstalled",o);function n(s){s.preventDefault(),kt=s}function o(){kt=null,t({message:le(S("Installed %s as an app."),e)})}}function FI(e,t){return{id:$I,title:S("Install web app"),icon:"dashicons-download",onOpen:()=>{BI(e,t)}}}async function BI(e,t){if(kt){const n=kt;kt=null;try{await n.prompt(),(await n.userChoice).outcome==="dismissed"&&t({message:S("Install cancelled.")})}catch(o){typeof console<"u"&&console.warn("[openstation] install prompt failed:",o)}return}if(await Cm()){t({message:le(S("%s is already installed. Open it from your apps menu or home screen."),e)});return}if(WI()==="foreign-sw"){t({message:S("Install isn't available — another plugin's service worker is active on this site. A site admin can opt in by setting the openstation_pwa_force_replace_sw filter to true.")});return}t({message:S("Install isn't available right now. Keep using the page; if it still doesn't appear, the app may already be installed in this browser.")})}async function HI(){if(!kt)return"unavailable";const e=kt;kt=null;try{return await e.prompt(),(await e.userChoice).outcome}catch{return"unavailable"}}function zI(){Promise.resolve().then(()=>T0).then(e=>{e.updatePwaState({installHintDismissed:!1})})}function GI(e,t){e.pwa&&(gp(e.pwa),UI(e.pwa.appName||"WordPress",t),PI(e.pwa,{forceReplace:!!e.pwa.forceReplaceSw}))}const An={START:"os-cross-frame-drag-start",END:"os-cross-frame-drag-end"};function jI(e){return!!e&&typeof e=="object"&&e.type==="os-drag-start"&&!!e.payload&&typeof e.payload=="object"}function VI(e){return!!e&&typeof e=="object"&&e.type==="os-drag-end"}function qI(e){return!!e&&typeof e=="object"&&e.type==="os-drag-payload-request"}function KI(e){const t=e;return t.kind!==void 0&&t.kind!==null?e:typeof t.id=="number"&&typeof t.url=="string"&&typeof t.mime=="string"?{kind:"attachment",id:t.id,url:t.url,title:typeof t.title=="string"?t.title:"",alt:typeof t.alt=="string"?t.alt:"",mime:t.mime,thumbnailUrl:typeof t.thumbnailUrl=="string"?t.thumbnailUrl:void 0,sizes:t.sizes&&typeof t.sizes=="object"?t.sizes:void 0}:e}class YI{constructor(){this._payload=null,this._onMessage=t=>{if(t.origin!==this._origin)return;const n=t.data;if(jI(n)){this._startDrag(n.payload);return}if(VI(n)){this._endDrag();return}if(qI(n)&&this._payload&&t.source)try{t.source.postMessage({type:"os-drag-payload",payload:this._payload},this._origin)}catch{}},this._origin=window.location.origin,window.addEventListener("message",this._onMessage)}getPayload(){return this._payload}isDragging(){return this._payload!==null}start(t){this._payload!==t&&this._startDrag(t)}end(){this._endDrag()}_startDrag(t){const n=KI(t);this._payload=n,document.dispatchEvent(new CustomEvent(An.START,{detail:{payload:n}}))}_endDrag(){if(this._payload===null)return;const t=this._payload;this._payload=null,document.dispatchEvent(new CustomEvent(An.END,{detail:{payload:t}}))}}class XI{constructor(){this._targets=new Map,this._byElement=new Map}register(t){const n=this._targets.get(t.id);return n&&this._byElement.delete(n.element),this._targets.set(t.id,t),this._byElement.set(t.element,t),()=>{this._targets.get(t.id)===t&&(this._targets.delete(t.id),this._byElement.delete(t.element))}}list(){return Array.from(this._targets.values())}clear(){this._targets.clear(),this._byElement.clear()}hitTest(t){let n=t;for(;n;){if(n instanceof HTMLElement){const o=this._byElement.get(n);if(o)return o;if(n.classList.contains("os-window"))return null}n=n.parentElement}return null}hitTestPoint(t,n){const o=document.elementFromPoint(t,n);return{target:this.hitTest(o),element:o,accepted:!1}}}const ZI="os-drag-ghost",Im="os-drag-ghost--accept",xm="os-drag-ghost--reject",JI="os-drag-hint",Lm="os-drag-hint--accept",Tm="os-drag-hint--reject",Nm="os-drag-hint--neutral",QI=16,ex=18;function tx(e,t,n){const o=ax(e),s=e.ghost?.offsetX??lx(e.source),i=e.ghost?.offsetY??cx(e.source);o.classList.add(ZI),o.setAttribute("aria-hidden","true"),o.style.position="fixed",o.style.left="0",o.style.top="0",o.style.margin="0",o.style.pointerEvents="none",o.style.zIndex="2147483647",o.style.willChange="transform",document.body.appendChild(o);const r=ox(e),a=r?nx():null;a&&document.body.appendChild(a);const l={get element(){return o},moveTo(c,d){o.style.transform=`translate3d(${c-s}px, ${d-i}px, 0)`,a&&(a.style.transform=`translate3d(${c+QI}px, ${d+ex}px, 0)`)},setMode(c,d){o.classList.remove(Im,xm),c==="accept"?o.classList.add(Im):c==="reject"&&o.classList.add(xm),a&&r&&(a.classList.remove(Lm,Tm,Nm),c==="accept"?(a.classList.add(Lm),a.textContent=d?.acceptLabel??r.accept):c==="reject"?(a.classList.add(Tm),a.textContent=r.reject):(a.classList.add(Nm),a.textContent=r.neutral),a.hidden=!a.textContent)},withHidden(c){const d=o.style.visibility,u=a?.style.visibility??"";o.style.visibility="hidden",a&&(a.style.visibility="hidden");try{return c()}finally{o.style.visibility=d,a&&(a.style.visibility=u)}},dispose(){o.isConnected&&o.remove(),a?.isConnected&&a.remove()}};return l.moveTo(t,n),l.setMode("neutral"),l}function nx(){const e=document.createElement("div");return e.className=JI,e.setAttribute("aria-hidden","true"),e.setAttribute("role","presentation"),e.style.position="fixed",e.style.left="0",e.style.top="0",e.style.margin="0",e.style.pointerEvents="none",e.style.zIndex="2147483647",e.style.willChange="transform",e}function ox(e){const t=e.ghost?.hint;return t?.hidden?null:{accept:t?.accept??sx(e),reject:t?.reject??ix(),neutral:t?.neutral??rx(e)}}function sx(e){return e.type==="shortcut"?S("Drop here to create shortcut","desktop-mode"):e.type==="desktop-file"?S("Drop here to move","desktop-mode"):S("Drop here","desktop-mode")}function ix(e){return S("Can’t drop here","desktop-mode")}function rx(e){return e.type==="shortcut"?S("Drop on the desktop or a folder","desktop-mode"):e.type==="desktop-file"?S("Drop in a folder","desktop-mode"):""}function ax(e){if(e.ghost?.element)return e.ghost.element;const t=e.source.cloneNode(!0);t.removeAttribute("id");const n=e.source.getBoundingClientRect();return t.style.width=`${n.width}px`,t.style.height=`${n.height}px`,t}function lx(e){return e.offsetWidth/2}function cx(e){return e.offsetHeight/2}let Dm=!1;function dx(e){Dm||(Dm=!0,document.addEventListener("keydown",t=>{t.key==="Escape"&&e("escape")}),window.addEventListener("blur",()=>{e("blur")}),document.addEventListener("visibilitychange",()=>{document.hidden&&e("visibility")}))}const Rm=4,we={START:"os.drag.start",MOVE:"os.drag.move",ENTER:"os.drag.enter",LEAVE:"os.drag.leave",REJECTED:"os.drag.rejected",COMMIT:"os.drag.commit",CANCEL:"os.drag.cancel",END:"os.drag.end"},Li="os-file-tile--dragging",Om="os-file-tile--drop-target",Mm="data-os-trash-drop-active",Pm="data-files-drop-active",Wm="data-os-dragging",$m="data-os-drag-type",rl="data-os-drag-mode";class ux{constructor(){this._registry=new XI,this._active=null,this._docListenersAttached=!1,this._lastLiftedEndAt=0,this._onPointerMove=t=>{const n=this._active;if(!n||n._pointerId!==t.pointerId)return;const o=t.clientX-n._origin.clientX,s=t.clientY-n._origin.clientY;if(!n._lifted){if(Math.abs(o)<Rm&&Math.abs(s)<Rm)return;this._lift(n,t)}n._ghost&&(n._ghost.moveTo(t.clientX,t.clientY),this._updateHover(n,t.clientX,t.clientY),dt(we.MOVE,{payload:n.payload,clientX:t.clientX,clientY:t.clientY}))},this._onPointerUp=t=>{const n=this._active;if(!n||n._pointerId!==t.pointerId)return;if(!n._lifted){n._finished=!0,this._active=null;try{n._callbacks.onClickOnly?.()}catch(s){console.error("[openstation] drag onClickOnly threw:",s)}return}const o=this._hitTestNow(n,t.clientX,t.clientY);if(o&&o.accepted&&o.target){this._commit(n,o.target,t.clientX,t.clientY);return}this._cancel(n,o&&o.target?"rejected":"no-target")},this._onPointerCancel=t=>{const n=this._active;!n||n._pointerId!==t.pointerId||this._cancel(n,"pointercancel")}}start(t){if(this._active||t.origin.button!==0)return null;const n={payload:t.payload,isFinished:()=>n._finished,cancel:o=>this._cancel(n,o??"caller"),_origin:t.origin,_pointerId:t.origin.pointerId,_lifted:!1,_finished:!1,_callbacks:{onClickOnly:t.onClickOnly,onCancel:t.onCancel,onCommit:t.onCommit},_ghost:null,_currentTarget:null,_currentAccepted:!1};return this._active=n,this._ensureDocListeners(),dx(o=>{this._active&&this._cancel(this._active,o)}),n}registerDropTarget(t){return this._registry.register(t)}isDragging(){return this._active!==null&&this._active._lifted}recentlyEndedDrag(t=500){return this._lastLiftedEndAt===0?!1:Date.now()-this._lastLiftedEndAt<t}getActive(){return this._active}debug(){return{findOrphans:()=>Um(),listTargets:()=>this._registry.list()}}_ensureDocListeners(){this._docListenersAttached||(this._docListenersAttached=!0,document.addEventListener("pointermove",this._onPointerMove,!0),document.addEventListener("pointerup",this._onPointerUp,!0),document.addEventListener("pointercancel",this._onPointerCancel,!0))}_lift(t,n){t._lifted=!0,t.payload.source.classList.add(Li),t._ghost=tx(t.payload,n.clientX,n.clientY),typeof document<"u"&&document.body&&(document.body.setAttribute(Wm,""),document.body.setAttribute($m,String(t.payload.type)),document.body.setAttribute(rl,"neutral")),dt(we.START,{payload:t.payload})}_hitTestNow(t,n,o){const s=()=>{const i=document.elementFromPoint(n,o),r=this._registry.hitTest(i);if(!r)return{target:null,accepted:!1};let a=!1;try{a=r.accept(t.payload)}catch(l){console.error("[openstation] drop target accept() threw:",r.id,l)}return{target:r,accepted:a}};return t._ghost?t._ghost.withHidden(s):s()}_updateHover(t,n,o){const s=this._hitTestNow(t,n,o),i=t._currentTarget;if(s.target===i&&s.accepted===t._currentAccepted)return;i&&al(i,t),t._currentTarget=s.target,t._currentAccepted=s.accepted;let r;s.target?s.accepted?(fx(s.target,t),t._ghost?.setMode("accept",{acceptLabel:s.target.acceptLabel}),r="accept"):(t._ghost?.setMode("reject"),dt(we.REJECTED,{payload:t.payload,targetId:s.target.id}),r="reject"):(t._ghost?.setMode("reject"),r="reject"),typeof document<"u"&&document.body&&document.body.setAttribute(rl,r)}_commit(t,n,o,s){t._finished=!0,this._lastLiftedEndAt=Date.now(),al(n,t),this._cleanupDom(t);const i=this._active;this._active=null;try{n.onDrop(t,{clientX:o,clientY:s})}catch(r){console.error("[openstation] drop target onDrop threw:",n.id,r)}try{t._callbacks.onCommit?.(n)}catch(r){console.error("[openstation] drag onCommit threw:",r)}dt(we.COMMIT,{payload:t.payload,targetId:n.id}),dt(we.END,{payload:t.payload,reason:"commit"}),this._active===i&&(this._active=null)}_cancel(t,n){if(!t._finished){t._finished=!0,t._lifted&&(this._lastLiftedEndAt=Date.now()),t._currentTarget&&al(t._currentTarget,t),this._cleanupDom(t),this._active=null;try{t._callbacks.onCancel?.(n)}catch(o){console.error("[openstation] drag onCancel threw:",o)}dt(we.CANCEL,{payload:t.payload,reason:n}),dt(we.END,{payload:t.payload,reason:n})}}_cleanupDom(t){try{t.payload.source.classList.remove(Li)}catch{}t._ghost?.dispose(),t._ghost=null,t._currentTarget=null,t._currentAccepted=!1,typeof document<"u"&&document.body&&(document.body.removeAttribute(Wm),document.body.removeAttribute($m),document.body.removeAttribute(rl)),px()}}function dt(e,t){typeof document>"u"||document.dispatchEvent(new CustomEvent(e,{detail:t}))}function fx(e,t){try{e.onEnter?.(t)}catch(n){console.error("[openstation] drop target onEnter threw:",e.id,n)}dt(we.ENTER,{payload:t.payload,targetId:e.id})}function al(e,t){try{e.onLeave?.(t)}catch(n){console.error("[openstation] drop target onLeave threw:",e.id,n)}dt(we.LEAVE,{payload:t.payload,targetId:e.id})}function Um(){if(typeof document>"u")return[];const e=[];for(const t of[`.${Li}`,`.${Om}`,`[${Mm}]`,`[${Pm}]`])document.querySelectorAll(t).forEach(n=>e.push(n));return e}function px(){for(const e of Um())e.classList.remove(Li,Om),e.removeAttribute(Mm),e.removeAttribute(Pm)}const hx=".os-window",Fm="wp-window-";function Bm(e,t){const n=document.elementFromPoint(e,t);if(!n)return null;const o=n.closest(hx);return o instanceof HTMLElement?o:null}function mx(e){if(!e.id.startsWith(Fm))return null;const t=e.id.slice(Fm.length);return t.length>0?t:null}const gx="desktop-mode-iframe-drop-",Ti="iframe.os-window__iframe",ll="data-os-iframe-drop-active";let cl=!1,Hm=null;const je=new Map,Ht=new Map;let ut=null,zt=null;function wx(){document.querySelectorAll(Ti).forEach(t=>{je.has(t)||(je.set(t,t.style.pointerEvents),t.style.pointerEvents="none")})}function yx(){je.forEach((e,t)=>{t.style.pointerEvents=e}),je.clear()}function zm(e,t){const n=Bm(e,t);if(!n)return null;const o=n.querySelector(Ti);return o instanceof HTMLIFrameElement?o:null}const Gm=e=>{if(!ut)return;e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect="copy");const t=zm(e.clientX,e.clientY);t!==zt&&(zt&&Gt(zt,{type:"os-drag-leave"}),zt=t,t&&Gt(t,{type:"os-drag-over",payload:ut}))},jm=e=>{if(!ut)return;e.preventDefault(),e.stopPropagation(),typeof e.stopImmediatePropagation=="function"&&e.stopImmediatePropagation();const t=zm(e.clientX,e.clientY),n=ut;if(dl(),!t)return;const o=t.getBoundingClientRect();Gt(t,{type:"os-drop",payload:n,position:{x:e.clientX-o.left,y:e.clientY-o.top}})},Vm=()=>{dl()};function bx(e){if(ut){ut=e;return}ut=e,wx(),document.addEventListener("dragover",Gm,!0),document.addEventListener("drop",jm,!0),document.addEventListener("dragend",Vm,!0)}function dl(){ut&&(ut=null,zt&&(Gt(zt,{type:"os-drag-leave"}),zt=null),document.removeEventListener("dragover",Gm,!0),document.removeEventListener("drop",jm,!0),document.removeEventListener("dragend",Vm,!0),yx())}function Ni(e){if(!e||typeof e!="object")return;const t=e;return t.type!=="shortcut"&&t.type!=="desktop-file"?void 0:t.data?.bridgePayload}function Gt(e,t){const n=e.contentWindow;if(n)try{n.postMessage(t,window.location.origin)}catch{}}function vx(e,t,n,o){return e.registerDropTarget({id:`${gx}${o}`,element:n,accept:s=>!!Ni(s),onEnter:s=>{const i=Ni(s.payload);i&&(n.setAttribute(ll,""),Gt(t,{type:"os-drag-over",payload:i}))},onLeave:()=>{n.removeAttribute(ll),Gt(t,{type:"os-drag-leave"})},onDrop:(s,i)=>{n.removeAttribute(ll);const r=Ni(s.payload);if(!r)return;const a=t.getBoundingClientRect();Gt(t,{type:"os-drop",payload:r,position:{x:i.clientX-a.left,y:i.clientY-a.top}})}})}function qm(e){let t=e.parentElement;for(;t;){if(t.id.startsWith("wp-window-"))return t.id.slice(10);t=t.parentElement}return`unknown-${Math.random().toString(36).slice(2,10)}`}function _x(e){const t=Hm;if(!t)return;const n=document.querySelectorAll(Ti),o=!!Ni(e);console.info("[openstation] drag-start: suppressing %d iframe(s); bridgeable=%s",n.length,o,e),n.forEach(s=>{if(je.has(s)||(je.set(s,s.style.pointerEvents),s.style.pointerEvents="none"),!o||Ht.has(s))return;const i=s.parentElement;if(!i)return;const r=qm(s),a=vx(t,s,i,r);Ht.set(s,a)})}function Ex(){je.forEach((e,t)=>{t.style.pointerEvents=e}),je.clear(),Ht.forEach(e=>{try{e()}catch{}}),Ht.clear()}function kx(e){cl||(cl=!0,Hm=e,document.addEventListener(we.START,t=>{const n=t.detail;_x(n?.payload)}),document.addEventListener(we.END,()=>{Ex()}),document.addEventListener(An.START,t=>{const n=t.detail;n?.payload&&bx(n.payload)}),document.addEventListener(An.END,()=>{dl()}),K(b.WINDOW_CLOSED,"desktop-mode/drag/iframe-drop-targets-window-close",()=>{for(const[t]of Array.from(je))t.isConnected||je.delete(t);for(const[t,n]of Array.from(Ht))if(!t.isConnected){try{n()}catch{}Ht.delete(t)}}),window.__openStationIframeDropDebug=()=>({installed:cl,iframesInDom:document.querySelectorAll(Ti).length,suppressedCount:je.size,registeredCount:Ht.size,suppressedIframeIds:Array.from(je.keys()).map(qm)}))}const Sx=250,Ax=1e3,Cx="os-drag-hover";let Km=!1,ul=null,fl=null,Do=null,Ro=null,pl=null;function Ym(){Do!==null&&(clearTimeout(Do),Do=null)}function Xm(){Ro!==null&&(clearTimeout(Ro),Ro=null)}function Oo(){Ym(),Xm(),fl=null}function Zm(){Xm(),Ro=setTimeout(()=>{Ro=null,Oo()},Ax)}function Ix(e,t){const n=ul?.getById(e);if(!(!n||n.isFocused()||!V(b.WINDOW_FOCUS_ON_DRAG_HOVER,!0,{windowId:e,payloadType:t})))try{ul?.focus(n)}catch(s){console.error("[openstation] focus-on-drag-hover focus() threw:",e,s)}}function Jm(e,t){e!==fl&&(Ym(),fl=e,e!==null&&(Do=setTimeout(()=>{Do=null,Ix(e,t)},Sx)))}function Qm(e,t,n){const o=Bm(e,t);Jm(o?mx(o):null,n)}const xx=e=>{const t=e.detail;typeof t?.clientX!="number"||typeof t?.clientY!="number"||Qm(t.clientX,t.clientY,t.payload?.type??"")},Lx=()=>{Oo()};function Tx(e){const t=e.dataTransfer?.types;if(!t)return!1;const n=t;return typeof n.includes=="function"?n.includes("Files"):typeof n.contains=="function"&&n.contains("Files")}const Nx=e=>{Zm();const t=pl??(Tx(e)?"os-file":"external");Qm(e.clientX,e.clientY,t)},eg=()=>{Oo()},Dx=e=>{e.relatedTarget===null&&Oo()};function Rx(e){if(!e)return null;const t=document.querySelectorAll("iframe");for(const n of Array.from(t))if(n.contentWindow===e)return n.closest("[data-window-id]")?.getAttribute("data-window-id")||null;return null}const Ox=e=>{if(e.origin!==window.location.origin)return;const t=e.data;if(!t||t.type!==Cx)return;const n=Rx(e.source);n&&(Zm(),Jm(n,typeof t.payloadType=="string"?t.payloadType:"external"))},Mx=e=>{const t=e.detail;t?.payload&&(pl=t.payload.kind??"")},Px=()=>{pl=null,Oo()};function Wx(e){Km||(Km=!0,ul=e,document.addEventListener(we.MOVE,xx),document.addEventListener(we.END,Lx),document.addEventListener(An.START,Mx),document.addEventListener(An.END,Px),document.addEventListener("dragover",Nx,!0),document.addEventListener("drop",eg,!0),document.addEventListener("dragend",eg,!0),document.addEventListener("dragleave",Dx,!0),window.addEventListener("message",Ox))}function tg(){const e=window.wp?.os;if(!e)return[];const t=e.windowManager,n=e.config;if(!t||!n)return[];const o=[],s=(r,a)=>({id:r.id,label:r.title,description:a,icon:r.icon,open:()=>t.open({id:r.id,baseId:r.id,url:r.url,title:r.title,icon:r.icon})});for(const r of n.dockItems??[])o.push(s(r,"Admin menu"));const i=V("os.open-command.items",o);return Array.isArray(i)?i:o}const $x={slug:"open",label:"Open",description:"Open an admin page or registered window.",hint:"[window]",icon:"dashicons-external",suggest(e){const t=e.trim().toLowerCase(),n=tg();return(t===""?n:n.filter(s=>s.label.toLowerCase().includes(t)||s.id.toLowerCase().includes(t))).slice(0,12).map(s=>({value:s.label,label:s.label,description:s.description,icon:s.icon??"dashicons-external"}))},run(e,t){const n=e.trim();if(!n)return"Type the name of a window to open, for example `/open Posts`.";const o=tg(),s=n.toLowerCase(),i=o.find(r=>r.label.toLowerCase()===s||r.id.toLowerCase()===s)??o.find(r=>r.label.toLowerCase().includes(s)||r.id.toLowerCase().includes(s));if(!i)return`No window matching **${n}** — try \`/open\` alone to see available options.`;i.open(),t.close()}};function Ux(){mi($x)}const Le=[],Fx=new Set;function ng(e){if(!e||typeof e.id!="string"||e.id==="")return()=>{};if(typeof e.open!="function"||typeof e.close!="function"||typeof e.isOpen!="function")return()=>{};const t=Le.findIndex(n=>n.id===e.id);return t>=0?Le[t]=e:Le.push(e),hl(),()=>{const n=Le.findIndex(o=>o.id===e.id);n>=0&&(Le.splice(n,1),hl())}}function Bx(e){const t=Le.findIndex(n=>n.id===e);t>=0&&(Le.splice(t,1),hl())}function Hx(){return Le.slice()}function hl(){for(const e of Array.from(Fx))try{e()}catch(t){typeof console<"u"&&console.error("[openstation] palette-registry listener threw:",t)}}function og(){if(Le.length===0)return;const e=Le.findIndex(n=>{try{return n.isOpen()}catch{return!1}});if(e===-1){try{Le[0].open()}catch{}return}try{Le[e].close()}catch{}const t=e+1;if(t<Le.length)try{Le[t].open()}catch{}}function ml(e){const t=Le.find(n=>n.id===e);if(t){for(const n of Le)if(n.id!==e)try{n.isOpen()&&n.close()}catch{}try{t.open()}catch{}}}let sg=!1;function zx(){if(sg)return;sg=!0,document.addEventListener("keydown",t=>{!(t.metaKey||t.ctrlKey)||t.key!=="k"||t.shiftKey||t.altKey||(t.preventDefault(),t.stopImmediatePropagation(),og())},!0);const e=window.location.origin;window.addEventListener("message",t=>{if(t.origin!==e)return;const n=t.data;n&&n.type==="os-palette-cycle"&&og()})}const Ye=ie("os/presence",()=>({byUser:new Map,serverTimeMs:0})),Gx=5*60*1e3;let ig=Date.now(),rg=!1;function Di(){ig=Date.now()}function jx(e){if(!e||!e.snapshot)return;const t=Ye.state.byUser,n=new Map(t),o=[];for(const[s,i]of Object.entries(e.snapshot)){const r=Number(s);if(!Number.isFinite(r)||r<=0)continue;const l={status:i?.status??"offline",lastSeenMs:Number(i?.lastSeenMs??0)||0,lastActiveMs:Number(i?.lastActiveMs??0)||0},c=t.get(r);n.set(r,l),(!c||c.status!==l.status)&&o.push({userId:r,oldStatus:c?c.status:null,newStatus:l.status,entry:l})}Ye.state.byUser=n,typeof e.serverTimeMs=="number"&&(Ye.state.serverTimeMs=e.serverTimeMs),Ye.notify();for(const s of o){const i={userId:s.userId,oldStatus:s.oldStatus,newStatus:s.newStatus,lastSeenMs:s.entry.lastSeenMs,lastActiveMs:s.entry.lastActiveMs};document.dispatchEvent(new CustomEvent("os-presence-changed",{detail:i})),Ee.publish("os/presence-changed",i)}Ee.publish("os/presence-snapshot-applied",{applied:Object.keys(e.snapshot).length,transitions:o.length})}function Vx(){rg||(rg=!0,document.addEventListener("pointerdown",Di,{capture:!0,passive:!0}),document.addEventListener("keydown",Di,{capture:!0,passive:!0}),document.addEventListener("visibilitychange",()=>{document.hidden||Di()}),xe.contribute("openstation_presence_active",()=>!0),xe.contribute("openstation_user_active",()=>Date.now()-ig<Gx),xe.subscribe("openstation_presence",e=>{jx(e)}))}function qx(e){const t=Ye.state.byUser.get(e);return t?t.status:"offline"}function Kx(){return new Map(Ye.state.byUser)}function Yx(e){return Ye.state.byUser.get(e)??null}function Xx(e){return Ye.subscribe(t=>e(t))}function Zx(){Di()}function Jx(e){if(!Array.isArray(e)||e.length===0)return;const t=Ye.state.byUser,n=new Map(t),o=[];for(const s of e){const i=Number(s.userId);if(!Number.isFinite(i)||i<=0)continue;const r=t.get(i),a={status:s.status,lastSeenMs:typeof s.lastSeenMs=="number"?s.lastSeenMs:r?.lastSeenMs??0,lastActiveMs:typeof s.lastActiveMs=="number"?s.lastActiveMs:r?.lastActiveMs??0};n.set(i,a),(!r||r.status!==a.status)&&o.push({userId:i,oldStatus:r?r.status:null,newStatus:a.status,entry:a})}if(!(o.length===0&&n.size===t.size)){Ye.state.byUser=n,Ye.notify();for(const s of o){const i={userId:s.userId,oldStatus:s.oldStatus,newStatus:s.newStatus,lastSeenMs:s.entry.lastSeenMs,lastActiveMs:s.entry.lastActiveMs};document.dispatchEvent(new CustomEvent("os-presence-changed",{detail:i})),Ee.publish("os/presence-changed",i)}Ee.publish("os/presence-snapshot-applied",{applied:e.length,transitions:o.length})}}const Qx=Object.freeze({getStatus:qx,getAll:Kx,getEntry:Yx,subscribe:Xx,markActive:Zx,applyBatch:Jx});function ag(e){const t=new Set;let n=null;const o=new Set;e.onChange&&o.add(e.onChange);const s=()=>e.order().filter(a=>t.has(a)),i=()=>{const a=s();for(const l of o)try{l(a)}catch(c){console.error("[openstation] selection listener threw:",c)}},r=a=>{const l=t.size,c=Array.from(t);a(),!(t.size===l&&c.every(d=>t.has(d)))&&i()};return{keys:s,has:a=>t.has(a),size:()=>t.size,anchor:()=>n,set(a){r(()=>{t.clear();for(const l of a)t.add(l)}),n=a.length>0?a[a.length-1]:null},add(a){r(()=>{t.add(a)}),n=a},remove(a){r(()=>{t.delete(a)}),n===a&&(n=null)},toggle(a){r(()=>{t.has(a)?t.delete(a):t.add(a)}),n=a},selectRange(a,l=!1){const c=e.order(),d=c.indexOf(a),u=n===null?-1:c.indexOf(n);if(d<0)return;if(u<0){r(()=>{l||t.clear(),t.add(a)}),n=a;return}const f=Math.min(u,d),p=Math.max(u,d);r(()=>{l||t.clear();for(let g=f;g<=p;g+=1)t.add(c[g])})},selectAll(){const a=e.order();r(()=>{for(const l of a)t.add(l)}),n===null&&a.length>0&&(n=a[0])},clear(){r(()=>{t.clear()}),n=null},prune(){const a=new Set(e.order());let l=!1;return r(()=>{for(const c of Array.from(t))a.has(c)||(t.delete(c),l=!0)}),n!==null&&!a.has(n)&&(n=null),l},subscribe(a){return o.add(a),()=>{o.delete(a)}}}}const eL=".os-file-tile",tL="os-file-tile--selected",nL="os-selection-marquee",lg=4,cg=36,dg=12,ug="data-os-marquee";function oL(e){if(e.scrollHeight<=e.clientHeight)return!1;const t=e.ownerDocument?.defaultView?.getComputedStyle(e)?.overflowY;return t==="auto"||t==="scroll"||t==="overlay"}function sL(e){const t=e.ownerDocument;if(!t)return()=>{};const n=o=>{o.preventDefault()};t.addEventListener("selectstart",n,!0),t.body?.setAttribute(ug,"");try{t.defaultView?.getSelection()?.removeAllRanges()}catch{}return()=>{t.removeEventListener("selectstart",n,!0),t.body?.removeAttribute(ug)}}const iL=".os-window, .os-widgets__list, .os-widgets__card, .os-widgets__add, .os-pinned-note",rL="os-area--overview";function aL(e,t){const n=t.itemSelector??eL,o=t.background??e,s=t.marquee!==!1,i=t.marqueeExclude??iL,r=()=>Array.from(e.querySelectorAll(n)).filter(D=>t.keyOf(D)!==null),a=()=>{const D=[],A=new Map;r().forEach((U,N)=>{const z=U.parentElement??e;let Z=A.get(z);Z||(Z=[],A.set(z,Z),D.push(z)),Z.push({key:t.keyOf(U),top:parseFloat(U.style.top)||0,left:parseFloat(U.style.left)||0,index:N})});const R=[];for(const U of D){const N=A.get(U)??[];N.sort((z,Z)=>z.top!==Z.top?z.top-Z.top:z.left!==Z.left?z.left-Z.left:z.index-Z.index);for(const z of N)R.push(z.key)}return R},l=t.order??a,c=ag({order:l,onChange:D=>{p(),t.onChange?.(D),u(D)}}),d={},u=D=>{typeof document>"u"||(Cn={surface:t.surface??"",scope:t.scope??"",keys:D.slice(),count:D.length},wl=d,document.dispatchEvent(new CustomEvent("os-selection-changed",{detail:Cn})))},f=D=>r().find(A=>t.keyOf(A)===D)??null,p=()=>{for(const D of r()){const A=t.keyOf(D),R=c.has(A);R!==D.hasAttribute("selected")&&(R?D.setAttribute("selected",""):D.removeAttribute("selected")),D.classList.toggle(tL,R),D.hasAttribute("selectable")||D.setAttribute("selectable","");const U=R?"true":"false";D.getAttribute("aria-selected")!==U&&D.setAttribute("aria-selected",U)}};e.setAttribute("role","listbox"),e.setAttribute("aria-multiselectable","true"),t.ariaLabel&&e.setAttribute("aria-label",t.ariaLabel);let g=null;const m=D=>{if(!(D.target instanceof Element))return;const A=D.target.closest(n);if(A&&e.contains(A)){const R=t.keyOf(A);if(R===null)return;if(g=R,D.stopPropagation(),D.shiftKey){c.selectRange(R,D.ctrlKey||D.metaKey);return}if(D.ctrlKey||D.metaKey){c.toggle(R);return}c.set([R]);return}if(M){M=!1;return}c.clear()};o.addEventListener("click",m);let h=null,v=null,y=null,x=[],M=!1,I=0,W=null,P=null;const $=D=>{if(typeof o.setPointerCapture=="function")try{o.setPointerCapture(D),P=D}catch{}},k=()=>{if(P===null||typeof o.releasePointerCapture!="function"){P=null;return}try{o.hasPointerCapture?.(P)&&o.releasePointerCapture(P)}catch{}P=null},w=(D,A)=>{const R=o.getBoundingClientRect();return{x:D-R.left+o.scrollLeft,y:A-R.top+o.scrollTop}},E=()=>{h?.remove(),h=null,v=null,y=null,W?.(),W=null,k(),I&&(cancelAnimationFrame(I),I=0),document.removeEventListener("pointermove",H),document.removeEventListener("pointerup",G),document.removeEventListener("pointercancel",j),o.removeEventListener("lostpointercapture",j),o.removeEventListener("scroll",_),window.removeEventListener("blur",j)};function _(){if(!v||!y)return;const D=w(y.x,y.y),A=D.x-v.x,R=D.y-v.y;if(!h&&Math.abs(A)<lg&&Math.abs(R)<lg)return;h||(h=document.createElement("div"),h.className=nL,h.setAttribute("aria-hidden","true"),getComputedStyle(o).position==="static"&&(o.style.position="relative"),o.appendChild(h),M=!0,W=sL(o),O());const U=Math.min(v.x,D.x),N=Math.min(v.y,D.y),z=Math.abs(A),Z=Math.abs(R);h.style.left=`${U}px`,h.style.top=`${N}px`,h.style.width=`${z}px`,h.style.height=`${Z}px`;const se=o.getBoundingClientRect(),oe=se.left-o.scrollLeft,_e=se.top-o.scrollTop,pe={left:U+oe,top:N+_e,right:U+z+oe,bottom:N+Z+_e},ye=[];for(const he of r()){const Ae=he.getBoundingClientRect();Ae.left<pe.right&&Ae.right>pe.left&&Ae.top<pe.bottom&&Ae.bottom>pe.top&&ye.push(t.keyOf(he))}c.set(Array.from(new Set([...x,...ye])))}function O(){if(I||typeof requestAnimationFrame!="function")return;const D=()=>{if(I=0,!h||!y)return;const A=o.getBoundingClientRect();if(oL(o)){let U=0;if(y.y<A.top+cg?U=-dg:y.y>A.bottom-cg&&(U=dg),U!==0){const N=o.scrollTop;o.scrollTop+=U,o.scrollTop!==N&&_()}}I=requestAnimationFrame(D)};I=requestAnimationFrame(D)}const H=D=>{v&&(y={x:D.clientX,y:D.clientY},_())},G=()=>{h&&(gl=Date.now()),E()},j=()=>{E()},L=D=>{if(!s||D.button!==0||!(D.target instanceof Element)||o.classList.contains(rL)||D.target.closest(n))return;const A=D.target.closest(i);A&&A!==o&&o.contains(A)||(v=w(D.clientX,D.clientY),y={x:D.clientX,y:D.clientY},typeof D.pointerId=="number"&&$(D.pointerId),x=D.ctrlKey||D.metaKey||D.shiftKey?c.keys():[],x.length===0&&c.clear(),document.addEventListener("pointermove",H),document.addEventListener("pointerup",G),document.addEventListener("pointercancel",j),o.addEventListener("lostpointercapture",j),window.addEventListener("blur",j),o.addEventListener("scroll",_,{passive:!0}))};o.addEventListener("pointerdown",L);const F=D=>{if(D.key==="a"&&(D.ctrlKey||D.metaKey)){D.preventDefault(),c.selectAll();return}if(D.key==="Escape"){if(h||v){E();return}c.size()>0&&c.clear();return}const A=D.key==="ArrowRight"||D.key==="ArrowDown",R=D.key==="ArrowLeft"||D.key==="ArrowUp";if(!A&&!R)return;const U=A?1:-1,N=l();if(N.length===0)return;const z=g??c.anchor(),Z=z===null?-1:N.indexOf(z),se=Math.min(N.length-1,Math.max(0,Z<0?0:Z+U));D.preventDefault();const oe=N[se];g=oe,D.shiftKey?c.selectRange(oe):c.set([oe]),f(oe)?.focus()};return e.addEventListener("keydown",F),p(),{model:c,keys:()=>c.keys(),elementFor:f,refresh(){c.prune(),p()},destroy(){E(),o.removeEventListener("click",m),o.removeEventListener("pointerdown",L),e.removeEventListener("keydown",F),wl===d&&(Cn=null,wl=null)}}}let gl=0;function lL(){return gl>0&&Date.now()-gl<500}let Cn=null,wl=null;function cL(){return Cn?{...Cn,keys:Cn.keys.slice()}:null}function yl(e){return typeof e.sort=="number"?e.sort:100}function dL(e,t){return le(S("%1$s (%2$d items)","desktop-mode"),e,t)}function fg(e,t){if(e.length===0)return[];const n=e.map(a=>{const l=t(a);return Array.isArray(l)?l:[]});if(e.length===1)return n[0];const o=e.length,s=[],i=a=>a.multiId??a.id;for(const a of n[0]){const l=i(a),c=[];let d=!1;for(const p of n){const g=p.find(m=>i(m)===l);if(!g||g.multi!==!0){d=!0;break}c.push(g)}if(d||s.some(p=>p.id===l))continue;const u=c[0],f=u.bulkLabel?u.bulkLabel(o):dL(u.label,o);s.push({id:l,label:f,icon:u.icon,disabled:c.some(p=>p.disabled===!0),danger:c.some(p=>p.danger===!0),sort:Math.min(...c.map(yl)),multi:!0,onClick:async p=>{const g=new Map,m=[];c.forEach((h,v)=>{const y=h.bulk;if(typeof y!="function"){m.push(h);return}const x=g.get(y);x?x.push(e[v]):g.set(y,[e[v]])});for(const[h,v]of g)try{await h(v)}catch(y){console.error(`[openstation] selection action '${l}' failed for a batch:`,y)}for(const h of m)try{await h.onClick(p)}catch(v){console.error(`[openstation] selection action '${l}' failed for one item:`,v)}}})}s.sort((a,l)=>{const c=yl(a),d=yl(l);return c!==d?c-d:a.label.localeCompare(l.label)});const r=V("os.selection.actions",s,{items:e,count:o});return Array.isArray(r)?r:s}function pg(e,t){const n=s=>{if(!(s.target instanceof Node&&e.contains(s.target))){if(s.target instanceof Node)for(const i of t.siblingSelectors??[]){const r=Array.from(document.querySelectorAll(i));for(const a of r)if(a.contains(s.target))return}t.excludeOutsideTarget&&s.target instanceof Node&&t.excludeOutsideTarget.contains(s.target)||t.close()}},o=s=>{s.key==="Escape"&&t.close()};return document.addEventListener("mousedown",n,{capture:!0}),document.addEventListener("keydown",o),()=>{document.removeEventListener("mousedown",n,{capture:!0}),document.removeEventListener("keydown",o)}}const bl=8;function hg(e,t){e.style.visibility="hidden";const n=()=>{e.isConnected&&(t(e.getBoundingClientRect()),e.style.visibility="")};typeof requestAnimationFrame=="function"?requestAnimationFrame(n):n()}function vl(e){hg(e,t=>{t.right>window.innerWidth&&(e.style.left=`${Math.max(0,window.innerWidth-t.width-bl)}px`),t.bottom>window.innerHeight&&(e.style.top=`${Math.max(0,window.innerHeight-t.height-bl)}px`)})}function mg(e,t){const n=t.getBoundingClientRect();e.style.position="fixed",e.style.left=`${n.right}px`,e.style.top=`${n.top}px`,hg(e,o=>{o.right>window.innerWidth&&(e.style.left=`${Math.max(0,n.left-o.width)}px`),o.bottom>window.innerHeight&&(e.style.top=`${Math.max(0,window.innerHeight-o.height-bl)}px`)})}const uL="os-wallpaper-menu";let In=null,_l=null,gg=0;function El(){if(!In)return;const e=In.dataset.menuScope??"selection",t=_l;In.dispatchEvent(new CustomEvent("tile-menu-closed")),In.remove(),In=null,_l=null,t?.(),T(`os.${e}.menu.closed`,{})}function fL(e,t){El();const n=++gg;Os(()=>n===gg,()=>pL(e,t))}function pL(e,{actions:t,dataset:n,className:o,scope:s="selection",onOpened:i,onClosed:r}){if(t.length===0)return;const a=document.createElement("os-context-menu");a.setAttribute("open",""),a.classList.add(uL),o&&a.classList.add(o),a.dataset.menuScope=s;for(const[u,f]of Object.entries(n??{}))a.dataset[u]=f;a.style.left=`${e.x}px`,a.style.top=`${e.y}px`;const l=new Map;for(const u of t){l.set(u.id,u);const f=document.createElement("os-context-menu-option");f.dataset.menuItemId=u.id,f.setAttribute("value",u.id),u.danger&&f.setAttribute("danger",""),u.disabled&&f.setAttribute("disabled",""),u.icon&&f.setAttribute("icon",hL(u.icon)),f.textContent=u.label,a.appendChild(f)}a.addEventListener("os-context-menu-pick",u=>{const f=u.detail,p=l.get(f.id);p&&(El(),Promise.resolve(p.onClick(new MouseEvent("click"))).catch(g=>{console.error(`[openstation] menu action '${p.id}' threw:`,g)}))}),document.body.appendChild(a),In=a,_l=r??null,vl(a);const c=pg(a,{close:()=>El()});a.addEventListener("tile-menu-closed",c);const d=t.map(u=>u.id);i?.(d),T(`os.${s}.menu.opened`,{items:d,count:t.length})}function hL(e){return e.replace(/[^a-zA-Z0-9_-]/g,"")}const mL={active:cL,resolveCommonActions:fg,createModel:ag};let Mo=null;function gL(){xe.contribute("openstation_content_changes_seen_ts",()=>Mo===null?0:Mo),xe.subscribe("openstation_content_changes",e=>{if(!e||typeof e.ts!="number")return;const t=Mo===null,n=Mo??0;let o=Math.max(n,e.ts);if(!t&&Array.isArray(e.entries))for(const s of e.entries)!s||typeof s.ts!="number"||s.ts<=n||typeof s.type!="string"||s.type===""||(Ma(`os.${s.type}.changed`,{source:"heartbeat",action:typeof s.action=="string"&&s.action!==""?s.action:"updated",ids:Array.isArray(s.ids)?s.ids.map(Number).filter(i=>i>0):[]}),s.ts>o&&(o=s.ts));Mo=o})}const wL="desktop_mode_nonces",kl=new Map;let wg=!1;function Sl(e,t){if(typeof e!="string"||e==="")return()=>{};let n=kl.get(e);return n||(n=new Set,kl.set(e,n)),n.add(t),()=>{n.delete(t)}}function yL(){wg||(wg=!0,xe.subscribe(wL,e=>{if(!(!e||typeof e!="object"))for(const[t,n]of Object.entries(e)){if(typeof n!="string"||n==="")continue;const o=kl.get(t);if(o)for(const s of o)try{s(n)}catch(i){console.error(`[desktop-mode/nonce-refresh] updater for "${t}" threw:`,i)}}}),bL())}function bL(){Sl("wp_rest",vL),Sl("desktop-mode-plugins",e=>{yg("desktop-mode-plugins","ajaxNonce",e)}),Sl("updates",e=>{yg("desktop-mode-plugins","updatesNonce",e)})}function vL(e){const t=_L();t&&typeof t.restNonce=="string"&&(t.restNonce=e);const n=bg();if(n)for(const o of Object.values(n))o&&typeof o=="object"&&typeof o.restNonce=="string"&&(o.restNonce=e)}function yg(e,t,n){const s=bg()?.[e];s&&typeof s=="object"&&(s[t]=n)}function _L(){if(!(typeof window>"u"))return window.openStationConfig}function bg(){if(!(typeof window>"u"))return window.openStationWindowConfig}const EL="desktop_mode_auth",kL=5e3,vg=1e3,SL=1e4;let _g=!1,Ri=!1,Al=!1,Oi=0,Eg=0,Po=0,xn=null,kg=0,Sg=null,Ag=null,Cg=()=>{try{window.location.reload()}catch{}};function Cl(){try{const e=window.wp?.heartbeat;e&&typeof e.connectNow=="function"&&e.connectNow()}catch{}}function Il(e=vg){const t=Date.now();if(t<Po){xn===null&&(xn=window.setTimeout(()=>{xn=null,Po=Date.now()+vg,Cl()},Po-t));return}Po=t+e,Cl()}function AL(){Ri=!0,!Al&&(Al=!0,T(b.AUTH_LOST),document.dispatchEvent(new CustomEvent("os-auth-lost")))}function CL(){for(const e of IL())try{e.contentWindow?.location.reload()}catch{}}function IL(){let e;try{e=document.querySelectorAll("iframe")}catch{return[]}return Array.from(e).filter(t=>t.id!=="wp-auth-check-frame"&&!t.closest("#wp-auth-check-wrap"))}function xl(){const e=Date.now();e-kg<SL||(kg=e,Ri=!1,Al=!1,xn!==null&&(window.clearTimeout(xn),xn=null),Po=0,Il(),CL(),T(b.AUTH_RESTORED),document.dispatchEvent(new CustomEvent("os-auth-restored")))}function xL(e){const t=e&&typeof e=="object"?Number(e.uid):NaN;if(!(!Number.isFinite(t)||t<=0)){if(Oi<=0){Oi=t;return}t!==Oi&&Cg()}}function LL(e,t){if(e!==401&&e!==403)return;let n;try{n=new URL(String(t||""),window.location.href)}catch{return}if(n.origin!==window.location.origin||n.pathname.indexOf("/wp-admin/admin-ajax.php")!==-1&&/(?:^|&|\?)action=heartbeat(?:&|$)/.test(n.search)||n.pathname.indexOf("/wp-login.php")!==-1)return;const o=Date.now();o<Eg||(Eg=o+kL,Cl())}function TL(){const e=document.getElementById("wp-auth-check-wrap");if(!e||typeof MutationObserver>"u")return;let t=!e.classList.contains("hidden");Ag=new MutationObserver(()=>{const n=!e.classList.contains("hidden");t&&!n&&Il(),t=n}),Ag.observe(e,{attributes:!0,attributeFilter:["class"]})}function NL(e={}){_g||(_g=!0,Oi=Number(e.currentUserId)>0?Number(e.currentUserId):0,e.reloadShell&&(Cg=e.reloadShell),xe.subscribe("wp-auth-check",t=>{if(t===!1){AL();return}t===!0&&Ri&&xl()}),xe.subscribe("nonces_expired",()=>{if(Ri){xl();return}Il()}),xe.subscribe(EL,xL),Sg=t=>{if(t.origin!==window.location.origin)return;const n=t.data;!n||typeof n!="object"||n.type==="os-reauth-detected"&&xl()},window.addEventListener("message",Sg),TL())}const Ln=12;function Ll(e,t){const n=ae(e,t.adminUrl);return(t.dockItems||[]).find(o=>ae(o.url,t.adminUrl)===n||(o.submenu||[]).some(s=>ae(s.url,t.adminUrl)===n))}function Tl(e,t){const n=Math.max(200,t.width-Ln*2),o=Math.max(200,t.height-Ln*2),s=Math.min(e.width,n),i=Math.min(e.height,o),r=Math.max(0,t.width-s-Ln),a=Math.max(0,t.height-i-Ln),l=Math.max(Ln,Math.min(e.x,r)),c=Math.max(Ln,Math.min(e.y,a));return{x:l,y:c,width:s,height:i}}const Ig=window.location.origin;function DL(e,t){document.addEventListener("click",n=>{if(n.defaultPrevented||n.button!==0||n.metaKey||n.ctrlKey||n.shiftKey||n.altKey)return;const o=n.target,s=o&&o.closest?o.closest("a[href]"):null;if(!s)return;const i=s,r=i.getAttribute("target");if(r&&r!==""&&r!=="_self"||i.hasAttribute("download"))return;const a=i.getAttribute("href");if(!a||a.charAt(0)==="#"||/^(mailto:|tel:|javascript:|data:)/i.test(a))return;let l;try{l=new URL(a,window.location.href)}catch(m){typeof console<"u"&&console.warn("[openstation] Couldn’t parse href; letting the browser handle the click:",a,m);return}if(l.origin!==Ig)return;let c;try{c=new URL(t.adminUrl).pathname}catch(m){typeof console<"u"&&console.error("[openstation] config.adminUrl is not a valid URL; falling back to /wp-admin/:",t.adminUrl,m),c="/wp-admin/"}if(!l.pathname.startsWith(c)||/\/(admin-post|admin-ajax)\.php$/.test(l.pathname)||l.searchParams.has("action")&&l.searchParams.get("action")==="logout"||l.searchParams.has("desktop_mode_classic")||(n.preventDefault(),n.stopPropagation(),Ge(l.href)))return;const d=ae(l.href,t.adminUrl),u=Ll(l.href,t),f=(i.textContent||"").trim()||u?.title||"",p=!!i.closest("#wp-admin-bar-new-content"),g={id:d,baseId:d,multi:!!u?.multi||p,url:l.href,parentUrl:u?.url??l.href,title:u?.title||f,icon:u?.icon||"dashicons-admin-generic",submenu:u?.submenu,selfLabel:u?.selfLabel};if(p){e.openNew(g);return}e.open(g)},!0)}function RL(e){if(!e||typeof e!="object")return null;const t=e;return typeof t.total!="number"||!Number.isFinite(t.total)?null:{total:Math.max(0,Math.floor(t.total)),formatted:typeof t.formatted=="string"&&t.formatted!==""?t.formatted:String(t.total),text:typeof t.text=="string"?t.text:"",url:typeof t.url=="string"?t.url:""}}function OL(e){if(!e.url)return null;const t=document.createElement("li");t.id="wp-admin-bar-updates";const n=document.createElement("a");n.className="ab-item",n.href=e.url;const o=document.createElement("span");o.className="ab-icon",o.setAttribute("aria-hidden","true");const s=document.createElement("span");s.className="ab-label",s.setAttribute("aria-hidden","true");const i=document.createElement("span");return i.className="screen-reader-text updates-available-text",n.append(o,s,i),t.appendChild(n),t}function ML(e){const t=RL(e);if(!t)return;let n=document.getElementById("wp-admin-bar-updates");if(t.total<=0){n&&(n.style.display="none");return}if(!n){const i=document.getElementById("wp-admin-bar-root-default");if(!i||(n=OL(t),!n))return;const r=document.getElementById("wp-admin-bar-comments");r&&r.parentNode===i?i.insertBefore(n,r):i.appendChild(n)}n.style.display="";const o=n.querySelector(".ab-label");o&&(o.textContent=t.formatted);const s=n.querySelector(".updates-available-text");s&&(s.textContent=t.text)}const PL="os-registry-changed";function WL(e,t){const n=new Set;if(Array.isArray(e))for(const r of e)r&&typeof r.id=="string"&&n.add(r.id);const o=new Set;for(const r of t)r&&typeof r.id=="string"&&o.add(r.id);const s=[];for(const r of o)n.has(r)||s.push(r);const i=[];for(const r of n)o.has(r)||i.push(r);return{added:s,removed:i}}function Nl(e,t,n){const{added:o,removed:s}=WL(t,n);if(o.length===0&&s.length===0||typeof document>"u")return;const i={registry:e,added:o,removed:s};document.dispatchEvent(new CustomEvent(PL,{detail:i}))}function $L(e){const{applyDockItems:t,config:n,syncNativeWindows:o,syncServerWidgets:s,syncServerWallpapers:i,syncServerCommands:r,syncServerSettingsTabs:a,syncServerTitleBarButtons:l,syncServerWindowActions:c,syncServerUnfocusEffects:d,syncServerWindowLinkRenderers:u,syncServerDockRailRenderers:f,syncServerGames:p,syncServerDesktopThemes:g,renderIcons:m,syncShortcuts:h}=e;return function(y){const x=y.dockItems,M=y.nativeWindows,I=y.serverWidgets,W=y.serverWallpapers,P=y.serverCommandScripts,$=y.serverCommands,k=y.serverSettingsTabScripts,w=y.serverSettingsTabs,E=y.serverDockRailRendererScripts,_=y.serverTitleBarButtonScripts,O=y.serverWindowActionScripts,H=y.serverUnfocusEffectScripts,G=y.serverWindowLinkRendererScripts,j=y.serverWindowNotices,L=y.serverGames,F=y.serverDesktopThemes,D=y.desktopIcons;if(!Array.isArray(x)||x.length===0)return;const A=n.dockItems;if(t(x),n.dockItems=x,Nl("dock-items",A,x),h?.(),Array.isArray(M)){const R=n.nativeWindows;o(M),n.nativeWindows=M,Nl("native-windows",R,M)}if(Array.isArray(I)&&(s(I),n.serverWidgets=I),Array.isArray(W)&&(i(W),n.serverWallpapers=W),Array.isArray(L)&&(p(L),n.serverGames=L),Array.isArray(F)&&(g?.(F),n.serverDesktopThemes=F),Array.isArray(P)&&(r(P,Array.isArray($)?$:void 0),n.serverCommandScripts=P,Array.isArray($)&&(n.serverCommands=$)),Array.isArray(k)&&(a(k,Array.isArray(w)?w:void 0),n.serverSettingsTabScripts=k,Array.isArray(w)&&(n.serverSettingsTabs=w)),Array.isArray(_)&&(l(_),n.serverTitleBarButtonScripts=_),Array.isArray(O)&&(c(O),n.serverWindowActionScripts=O),Array.isArray(H)&&(d(H),n.serverUnfocusEffectScripts=H),Array.isArray(G)&&(u(G),n.serverWindowLinkRendererScripts=G),Array.isArray(E)&&(f(E),n.serverDockRailRendererScripts=E),Array.isArray(j)&&(Nh(j),n.serverWindowNotices=j),Array.isArray(D)){const R=n.desktopIcons;m(D),n.desktopIcons=D,Nl("desktop-icons",R,D)}ML(y.updateCounts)}}const UL=8e3,FL=600;function BL(e){const{layoutDispatcher:t,desktopArea:n,config:o,syncNativeWindows:s,syncServerWidgets:i,syncServerWallpapers:r,syncServerCommands:a,syncServerSettingsTabs:l,syncServerTitleBarButtons:c,syncServerWindowActions:d,syncServerUnfocusEffects:u,syncServerWindowLinkRenderers:f,syncServerDockRailRenderers:p,syncServerGames:g,syncServerDesktopThemes:m,renderIcons:h,syncShortcuts:v}=e,y=$L({applyDockItems:E=>t?.applyDockItems(E),config:o,syncNativeWindows:s,syncServerWidgets:i,syncServerWallpapers:r,syncServerCommands:a,syncServerSettingsTabs:l,syncServerTitleBarButtons:c,syncServerWindowActions:d,syncServerUnfocusEffects:u,syncServerWindowLinkRenderers:f,syncServerDockRailRenderers:p,syncServerGames:g,syncServerDesktopThemes:m,renderIcons:h,syncShortcuts:v});let x=typeof o.menuSig=="string"?o.menuSig:"",M=!1,I=null,W=!1,P=!1;const $=()=>{if(!o.adminUrl)return Promise.resolve();const E=(()=>{try{const _=new URL("admin.php",o.adminUrl);return _.searchParams.set("openstation_chromeless","1"),_.searchParams.set("openstation_menu_refresh","1"),_.toString()}catch{return null}})();return E?new Promise(_=>{const O=document.createElement("iframe");O.setAttribute("aria-hidden","true"),O.tabIndex=-1,O.style.cssText="position:absolute;top:-9999px;left:-9999px;width:1px;height:1px;border:0;opacity:0;pointer-events:none;",O.src=E;let H=!1;const G=()=>{H||(H=!0,window.clearTimeout(L),window.removeEventListener("message",j),O.parentNode&&O.parentNode.removeChild(O),_())},j=F=>{if(F.source!==O.contentWindow)return;const D=F.data;!D||D.type!=="os-plugins-changed"||G()},L=window.setTimeout(()=>{T(b.SHELL_ERROR,{scope:"menu-refresh",error:new Error("menu refresh probe timed out")}),G()},UL);window.addEventListener("message",j),document.body.appendChild(O)}):Promise.resolve()},k=()=>{if(W){P=!0;return}W=!0,$().finally(()=>{W=!1,P&&(P=!1,k())})},w=()=>{I!==null&&window.clearTimeout(I),I=window.setTimeout(()=>{I=null,k()},FL)};return window.addEventListener("message",E=>{if(E.origin!==Ig)return;const _=E.data;if(_){if(_.type==="os-plugins-changed"){_.payload&&(y(_.payload),typeof _.payload.menuSig=="string"&&(x=_.payload.menuSig));return}if(_.type==="os-updates-changed"){w();return}if(_.type==="os-menu-signature"){const O=_.sig;typeof O=="string"&&O!==""&&O!==x&&!M&&(M=!0,$().finally(()=>{M=!1}))}}}),$}function HL(e){if(!e)return!1;if(Array.isArray(e.windows)&&e.windows.length>0)return!0;if(typeof e.updated!="number"||e.updated<=0||!Array.isArray(e.desktops)||e.desktops.length===0)return!1;if(e.desktops.length>1)return!0;const t=e.desktops[0];return t?.id&&t.id!=="desktop-1"?!0:!!e.activeDesktop&&e.activeDesktop!=="desktop-1"}function zL(e,t,n=5e3){const o=e.getById(t);return o?Promise.resolve(o):new Promise(s=>{const i=l=>{window.clearTimeout(a),document.removeEventListener("os-window-opened",r),s(l)},r=l=>{l.detail?.windowId===t&&i(e.getById(t)??null)},a=window.setTimeout(()=>i(null),n);document.addEventListener("os-window-opened",r)})}async function GL(e,t,n,o){const s=n.getBoundingClientRect();Array.isArray(t.session.desktops)&&t.session.desktops.length>0&&e.seedDesktops(t.session.desktops,t.session.activeDesktop||t.session.desktops[0].id);const i={};for(const r of t.session.windows){if(!r.native)continue;const a=Tl(r,s);i[r.id]={desktopId:r.desktopId,initialState:r.state,x:a.x,y:a.y,width:a.width,height:a.height,...r.params?{params:r.params}:{}}}Object.keys(i).length>0&&e.seedWindowRestoreState(i);for(const r of t.session.windows){if(r.native){if(!o?.(r.id))continue;await zL(e,r.id);continue}const a=Tl(r,s),l=Ll(r.url,t),c=await e.openNew({id:r.id,baseId:r.baseId||r.id,desktopId:r.desktopId,multi:!!l?.multi,url:r.url,parentUrl:l?.url??r.url,title:r.title,icon:r.icon||"dashicons-admin-generic",x:a.x,y:a.y,width:a.width,height:a.height,initialState:r.state,submenu:l?.submenu,selfLabel:l?.selfLabel});if(Array.isArray(r.externalTabs))for(const d of r.externalTabs)d&&typeof d.url=="string"&&d.url!==""&&c.addExternalTab(d.url,typeof d.label=="string"&&d.label!==""?d.label:d.url)}if(t.session.focused){const r=e.getById(t.session.focused);r&&e.focus(r)}}async function jL(e,t){if(Ge(t.currentPage))return;const n=ae(t.currentPage,t.adminUrl),o=Ll(t.currentPage,t);await e.open({id:n,baseId:n,multi:!!o?.multi,url:t.currentPage,parentUrl:o?.url??t.currentPage,title:t.currentTitle,icon:t.currentIcon,submenu:o?.submenu,selfLabel:o?.selfLabel})}function VL(e){return!(e.fromPortal&&!e.fromPortalIntent&&(e.hasSession||!e.defaultEnabled||e.isNativeDefault))}function Dl(e,t,n,o){const s=ou(t,n),i=window.fetch(t,s);if(i.then(a=>{if(a.status===401||a.status===403){let l;typeof t=="string"?l=t:t instanceof URL?l=t.href:l=t.url,LL(a.status,l)}},()=>{}),o?.silent)return i;let r=o?.window;return!r&&o?.windowId&&(r=e.getById(o.windowId)??null),r||(r=e.getFocused()),r&&typeof r.trackActivity=="function"&&r.trackActivity(i.then(a=>{if(!a.ok)throw new Error(qL(a));return a})).catch(()=>{}),i}function qL(e){const t=e.statusText?`${e.status} ${e.statusText}`:String(e.status);return le(S("Request failed (HTTP %s)."),t)}const KL=500,YL=1500;function XL(e,t){let n=null,o=!1,s=!1,i=0;const r=async()=>{if(o){s=!0;return}o=!0,i=Date.now();const c=e.snapshot();try{await Dl(e,t.sessionUrl,{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json","X-WP-Nonce":t.restNonce},body:JSON.stringify({session:c}),keepalive:!0},{silent:!0})}catch(d){T(b.SHELL_ERROR,{scope:"session-save",error:d})}finally{o=!1,s&&(s=!1,l())}},a=()=>{n!==null&&(clearTimeout(n),n=null),s=!1;const c=e.snapshot(),d=new Blob([JSON.stringify({session:c})],{type:"application/json"}),u=t.sessionUrl+(t.sessionUrl.includes("?")?"&":"?")+"_wpnonce="+encodeURIComponent(t.restNonce);navigator.sendBeacon&&navigator.sendBeacon(u,d)||r()},l=()=>{n!==null&&clearTimeout(n);let c=KL;if(i!==0){const d=Date.now()-i;c=Math.max(c,YL-d)}n=window.setTimeout(()=>{n=null,r()},c)};return window.addEventListener("pagehide",a),document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&a()}),l}const ZL=120;function JL(e){document.addEventListener("os-window-opened",e),document.addEventListener("os-window-closed",e),document.addEventListener("os-window-focused",e),document.addEventListener("os-window-changed",e),K(b.DESKTOP_CREATED,"desktop-mode/session-save",e),K(b.DESKTOP_CLOSED,"desktop-mode/session-save",e),K(b.DESKTOP_SWITCHED,"desktop-mode/session-save",e)}function QL(){const e=document.getElementById("os-shell");let t=null;const n=()=>{t=null;const o=e?e.getBoundingClientRect():null;T(b.SHELL_RESIZED,{width:o?Math.round(o.width):window.innerWidth,height:o?Math.round(o.height):window.innerHeight})};window.addEventListener("resize",()=>{t!==null&&window.clearTimeout(t),t=window.setTimeout(n,ZL)}),document.addEventListener("visibilitychange",()=>{T(b.SHELL_VISIBILITY,{state:document.hidden?"hidden":"visible"})})}function eT(e,t,n){const o={rail:n.rail??"dock",orientation:n.orientation,dockId:n.dockId,container:n.container??document.body,item:t,isSystem:n.isSystem};return V(b.DOCK_TILE_CLASS,e,o)}function tT(e,t,n){const o={rail:n.rail??"dock",orientation:n.orientation,dockId:n.dockId,container:n.container??document.body,item:t,isSystem:n.isSystem};return V(b.DOCK_TILE_ELEMENT,e,o)}function nT(e,t,n){const o={rail:n.rail??"dock",orientation:n.orientation,dockId:n.dockId,container:n.container??document.body,item:t,isSystem:n.isSystem};return V(b.DOCK_TILE_TOOLTIP,e,o)}function oT(e,t,n){const o={rail:n.rail??"dock",orientation:n.orientation,dockId:n.dockId,container:n.container??document.body,item:t,isSystem:n.isSystem};T(b.DOCK_TILE_RENDERED,{...o,el:e})}const sT=[".os-dock","#os-dock","#os-side-dock",".os-dock__tooltip",".os-dock-submenu"].join(","),Rl=new Set;function iT(e){if(!e||typeof e.closest!="function")return!1;const t=e;if(t.closest(sT))return!0;for(const n of Rl)if(t.closest(n))return!0;return!1}function rT(e){return typeof e!="string"||e.trim()===""?()=>{}:(Rl.add(e),()=>{Rl.delete(e)})}const ft=new Map,aT=window.location.origin;function xg(e){let t=ft.get(e);return t||(t={headers:new Map,observers:new Set,observeCount:0,loadHandler:null,loadHandlerTarget:null},ft.set(e,t)),lT(e,t),t}function lT(e,t){const n=Ol(e);if(!n||t.loadHandlerTarget===n&&t.loadHandler||(t.loadHandlerTarget&&t.loadHandler&&typeof t.loadHandlerTarget.removeEventListener=="function"&&t.loadHandlerTarget.removeEventListener("load",t.loadHandler),typeof n.addEventListener!="function"))return;const o=()=>{queueMicrotask(()=>Tn(e))};n.addEventListener("load",o),t.loadHandler=o,t.loadHandlerTarget=n}function cT(e){e.loadHandlerTarget&&e.loadHandler&&typeof e.loadHandlerTarget.removeEventListener=="function"&&e.loadHandlerTarget.removeEventListener("load",e.loadHandler),e.loadHandler=null,e.loadHandlerTarget=null}function Ol(e){const t=window.wp?.os?.windowManager;if(t&&typeof t.getById=="function"){const o=t.getById(e);if(o?.iframe)return o.iframe;if(o?.element){const s=o.element.querySelector("iframe");if(s)return s}}return document.getElementById(`wp-window-${e}`)?.querySelector("iframe")??null}function dT(e){const t={};for(const[n,o]of e.headers){const s=[];for(const i of o){let r;try{r=typeof i.value=="function"?i.value():i.value}catch{continue}typeof r=="string"&&r!==""&&s.push(r)}s.length>0&&(t[n]=s.join(", "))}return t}function Tn(e){const t=Ol(e);if(!t||!t.contentWindow)return;const n=ft.get(e),o=n?dT(n):{},s=!!n&&n.observeCount>0;try{t.contentWindow.postMessage({type:"os-instrument-set",headers:o,observe:s},aT)}catch{}}K(b.IFRAME_READY,"desktop-mode/devtools/replay",e=>{const t=e;t&&typeof t.windowId=="string"&&ft.has(t.windowId)&&Tn(t.windowId)}),K(b.IFRAME_NETWORK_COMPLETED,"desktop-mode/devtools/dispatch",e=>{const t=e;if(!t||typeof t.windowId!="string")return;const n=ft.get(t.windowId);if(n)for(const o of n.observers)try{o(t)}catch{}});const St=new Map,uT=1e3;function Lg(e,t,n){const o=St.get(e);if(!o||o.inflight)return;o.inflight=!0;const s=new URL(t+"desktop-mode/v1/debug",window.location.origin);s.searchParams.set("sessionId",e),s.searchParams.set("since",String(o.cursor));for(const r of o.channels.keys())s.searchParams.append("channels[]",r);const i=s.toString();fetch(i,{credentials:"same-origin",headers:{"X-WP-Nonce":n}}).then(r=>r.ok?r.json():{events:[],cursor:o.cursor}).then(r=>{if(o.inflight=!1,!!St.has(e)){typeof r.cursor=="number"&&(o.cursor=r.cursor);for(const a of r.events||[]){const l=o.channels.get(a.channel);if(l)for(const c of l)try{c(a)}catch{}}}}).catch(()=>{o.inflight=!1}).finally(()=>{const r=St.get(e);r&&r.channels.size>0&&(r.timer=setTimeout(()=>Lg(e,t,n),uT))})}function fT(){const e=window.openStationConfig;return!e||!e.restUrl||!e.restNonce?null:{restUrl:e.restUrl,restNonce:e.restNonce}}function pT(e,t){const n=St.get(e);if(!n)return;const o=n.channels.get(t.channel);if(o)for(const s of o)try{s(t)}catch{}}let hT=0;const Tg={addRequestHeader(e,t,n){if(typeof e!="string"||e==="")return()=>{};if(typeof t!="string"||t==="")return()=>{};const o=xg(e),s={value:n};let i=o.headers.get(t);return i||(i=[],o.headers.set(t,i)),i.push(s),Tn(e),()=>{const r=ft.get(e);if(!r)return;const a=r.headers.get(t);if(!a)return;const l=a.indexOf(s);l>=0&&a.splice(l,1),a.length===0&&r.headers.delete(t),Tn(e),Ng(e)}},onRequest(e,t,n){if(typeof e!="string"||e==="")return()=>{};if(typeof t!="function")return()=>{};const o=xg(e);o.observers.add(t);const s=!!n?.observe;return s&&(o.observeCount++,Tn(e)),()=>{const i=ft.get(e);i&&(i.observers.delete(t),s&&(i.observeCount=Math.max(0,i.observeCount-1),Tn(e)),Ng(e))}},reloadWithDebugSession(e,t,n){if(typeof e!="string"||e===""||typeof t!="string"||t==="")return null;const o=Ol(e);if(!o)return null;const s=n?.headerName||"X-WP-Debug-Session",i=n?.queryArg||"wp_debug_session",r=Tg.addRequestHeader(e,s,t);try{const a=o.getAttribute("src")||o.src||"",l=new URL(a,window.location.origin);l.searchParams.set(i,t),o.src=l.toString()}catch{}return{dispose:()=>{r()}}},debug:{startSession(){const e=window.crypto;return e&&typeof e.randomUUID=="function"?e.randomUUID():"wpdbg-"+Date.now().toString(36)+"-"+Math.random().toString(36).slice(2,10)},publish(e,t,n){pT(e,{id:++hT,t:Date.now(),channel:t,payload:n})},subscribe(e,t,n){let o=St.get(e);const s=!o;o||(o={channels:new Map,cursor:0,timer:null,inflight:!1},St.set(e,o));let i=o.channels.get(t);if(i||(i=new Set,o.channels.set(t,i)),i.add(n),s){const r=fT();r&&Lg(e,r.restUrl,r.restNonce)}return()=>{const r=St.get(e);if(!r)return;const a=r.channels.get(t);a&&(a.delete(n),a.size===0&&r.channels.delete(t)),r.channels.size===0&&(r.timer&&clearTimeout(r.timer),St.delete(e))}}}};function Ng(e){const t=ft.get(e);t&&t.headers.size===0&&t.observers.size===0&&(cT(t),ft.delete(e))}async function Nn(e){return await gr(wr()),new Promise(t=>{const n=document.createElement("os-confirm-dialog");n.setAttribute("open",""),e.title&&n.setAttribute("title",e.title),n.setAttribute("message",e.message),e.confirmLabel&&n.setAttribute("confirm-label",e.confirmLabel),e.cancelLabel&&n.setAttribute("cancel-label",e.cancelLabel),e.danger&&n.setAttribute("danger",""),e.hideCancel&&n.setAttribute("hide-cancel",""),e.dismissable&&n.setAttribute("dismissable","");const o=s=>{n.remove(),t(s)};n.addEventListener("os-confirm",()=>o(!0)),n.addEventListener("os-cancel",()=>o(!1)),document.body.appendChild(n)})}function mT(e){const t=[];for(const l of e.getVisibleRects()){if(l.state==="minimized"||l.element.offsetParent===null)continue;const c=l.element.getBoundingClientRect();t.push({id:`window:${l.windowId}`,kind:"window",rect:Dg(c),face:"top",element:l.element})}const n=document.getElementById("os-shell");if(n){const l=n.getBoundingClientRect();t.push({id:"shell:floor",kind:"shell",rect:{x:l.left,y:l.bottom-1,width:l.width,height:1},face:"top",element:n})}const o=document.querySelectorAll(".os-dock");let s=0;for(const l of Array.from(o)){const c=l.getBoundingClientRect();if(c.width<=0||c.height<=0)continue;const d=l.getAttribute("data-os-dock-placement")??"bottom",u=s===0?"dock:edge":`dock:edge:${s}`;s++,d==="bottom"?t.push({id:u,kind:"dock",rect:{x:c.left,y:c.top,width:c.width,height:1},face:"top",element:l}):d==="right"?t.push({id:u,kind:"dock",rect:{x:c.left,y:c.top,width:1,height:c.height},face:"left",element:l}):t.push({id:u,kind:"dock",rect:{x:c.right-1,y:c.top,width:1,height:c.height},face:"right",element:l})}const i=document.querySelectorAll(".os-widgets__card");let r=0;i.forEach(l=>{const c=l.getBoundingClientRect();if(c.width===0&&c.height===0)return;const d=l.dataset.widgetId??String(r++);t.push({id:`widget:${d}`,kind:"widget",rect:Dg(c),face:"top",element:l})});const a=V(b.WALLPAPER_SURFACES,t);return Array.isArray(a)?a:t}function Dg(e){return{x:e.left,y:e.top,width:e.width,height:e.height}}const gT="__openstationKeyedListKey",wT="__openstationKeyedListData";function yT(e){const t=e.__openstationKeyedList;if(t)return t;const n={byKey:new Map};return e.__openstationKeyedList=n,n}function bT(e,t,n){const o=yT(e),s=o.byKey,i=new Map,r=[],a=new Set;for(const l of t){const c=String(n.keyOf(l));a.has(c)&&console.warn("[desktop-mode/keyed-list] duplicate key — only the last item with this key will render:",c),a.add(c);const d=s.get(c);if(d){const f=d.data;n.updateItem?.(d.el,l,f),d.data=l,i.set(c,d),r.push(d.el);continue}const u=n.buildItem(l);u[gT]=c,u[wT]=l,i.set(c,{el:u,data:l}),r.push(u)}for(const[l,c]of s)i.has(l)||c.el.remove();for(let l=0;l<r.length;l++){const c=r[l],d=e.children[l];d!==c&&e.insertBefore(c,d??null)}o.byKey=i}function vT(e){const t=e.__openstationKeyedList;if(t){for(const n of t.byKey.values())n.el.remove();t.byKey.clear(),delete e.__openstationKeyedList}}function _T(e){const{root:t,fetchPage:n,getId:o,renderItem:s,rootMargin:i="200px",initialCursor:r=null,onLoadingChange:a=()=>{},onError:l=$=>{typeof console<"u"&&console.error("[openstation] createInfiniteList:",$)}}=e;let c=e.sentinel??null;c||(c=document.createElement("div"),c.dataset.osInfiniteListSentinel="",c.style.height="1px",t.appendChild(c));const d=new Set;let u=r,f=!0,p=!1,g=null,m=0,h=!1,v=null;const y=$=>{if(p!==$){p=$;try{a($)}catch(k){l(k)}}},x=()=>{v&&(v.disconnect(),v=null)},M=()=>{v||!c||h||(v=new IntersectionObserver($=>{for(const k of $)k.isIntersecting&&I()},{rootMargin:i}),v.observe(c))},I=async()=>{if(h||p||!f)return;y(!0),g=new AbortController;const $=g;try{const k=await n(u,$.signal);if(h||$!==g)return;let w=0;const E=document.createDocumentFragment();for(const _ of k.items??[]){const O=String(o(_));if(d.has(O))continue;d.add(O);const H=s(_,m+w);E.appendChild(H),w++}w>0&&(c&&c.parentNode===t?t.insertBefore(E,c):t.appendChild(E),m+=w),u=k.nextCursor??null,u||(f=!1,x())}catch(k){if(k?.name==="AbortError")return;l(k)}finally{$===g&&(y(!1),g=null)}},W=()=>{if(h)return;g?.abort(),g=null,d.clear(),u=r,f=!0,m=0;const $=c&&c.parentNode===t;for(;t.firstChild;)t.removeChild(t.firstChild);$&&c&&t.appendChild(c),y(!1),M(),I()},P=()=>{h||(h=!0,x(),g?.abort(),g=null,!e.sentinel&&c&&c.parentNode===t&&t.removeChild(c),c=null,y(!1))};return M(),I(),{reset:W,loadMore:I,hasMore:()=>f,isLoading:()=>p,destroy:P}}const ET=520,kT=720,ST=500;function AT(e,t={}){if(typeof e!="string"||e==="")return Promise.reject(new Error("[openstation] startOAuth requires a non-empty service slug."));const n=IT(),o=xT();return Be(tt(n,"desktop-mode/v1/oauth/start"),{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":o??""},body:JSON.stringify({service:e})},{source:"desktop-mode/oauth-start"}).then(async s=>{if(!s.ok){const i=await s.text().catch(()=>"");throw new Error(`[openstation] OAuth start failed (${s.status}): ${i}`)}return await s.json()}).then(s=>CT(s,e,t))}function CT(e,t,n){return new Promise((o,s)=>{const i=n.width??ET,r=n.height??kT,a=Math.max(0,Math.floor((window.screen.width-i)/2)),l=Math.max(0,Math.floor((window.screen.height-r)/2)),c=[`width=${i}`,`height=${r}`,`left=${a}`,`top=${l}`,"menubar=no","toolbar=no","location=yes","status=no","resizable=yes","scrollbars=yes"].join(","),d=window.open(e.authorize_url,`os-oauth-${t}`,c);if(!d){s(new Error("[openstation] OAuth popup blocked. Tell users to allow popups for this site."));return}const u=window.location.origin;let f=null,p=!1;const g=()=>{p||(p=!0,window.removeEventListener("message",m),f!==null&&(window.clearInterval(f),f=null))},m=h=>{if(h.origin!==u)return;const v=h.data;if(!v||v.type!=="os-oauth-callback")return;const y=v.payload;if(g(),y&&y.ok)o(y);else{const x=y?.reason??"unknown",M=y?.message??"OAuth flow failed",I=new Error(`[openstation] startOAuth(${t}) failed: ${x} — ${M}`);I.cause=y,s(I)}};window.addEventListener("message",m),f=window.setInterval(()=>{d.closed&&(g(),s(new Error(`[openstation] startOAuth(${t}) cancelled — popup closed before completing.`)))},ST)})}function Rg(){return window.openStationConfig??{}}function IT(){const e=Rg().restRoot;return typeof e=="string"&&e!==""?e:`${window.location.origin}/wp-json/`}function xT(){const e=Rg().restNonce;return typeof e=="string"&&e!==""?e:null}const LT="",TT="system-default",NT={accent:"pulse",desktopLayout:"unified",dockPlacement:"bottom"};function DT(e,t,n={}){const o=t===LT,s=o?null:Xd(t);if(!o&&!s)return{};const i=o?TT:s.slug,r=e.appliedThemeRecommendations.includes(i);if(r&&!n.force)return{};const a=yv(o?NT:s.recommendedOsSettings),l=Object.keys(a);if(l.length===0)return{};const c=e,d={};for(const u of l){const f=a[u];typeof f!="string"&&typeof f!="number"||!(u in e)||typeof c[u]!=typeof f||(c[u]=f,d[u]=f)}return Object.keys(d).length===0?{}:(r||(e.appliedThemeRecommendations=[...e.appliedThemeRecommendations,i].slice(-64)),d)}const Mi=["os-section","os-button","os-swatch","os-swatch-grid","os-segmented","os-segment","os-select","os-option","os-multiselect","os-color-field","os-range-field","os-text-field","os-number-field","os-checkbox","os-checkbox-label","os-switch","os-toast","os-toast-container","os-tabs","os-tab","os-tabpanel","os-window-button","os-menu","os-menu-item","os-context-menu","os-context-menu-option","os-confirm-dialog","os-modal","os-user-search","os-role-picker","os-flyout","os-tab-chip","os-stack","os-cluster","os-icon","os-body","os-panel","os-row","os-grid","os-display","os-empty-state","os-key","os-code","os-badge","os-ribbon","os-tile","os-log","os-steps","os-step","os-table","os-spinner","os-relative-time","os-avatar","os-textarea","os-chip","os-tag-input","os-form","os-save-status","os-category-picker","os-crumb-chain","os-card","os-rating-summary","os-notice","os-progress-bar","os-field-row","os-repeater","os-token-field"],Og=new Set(Mi);let Pi=null;function Ml(){return!!window.openStationComponents}function RT(){return window.openStationConfig?.componentsBundleUrl??""}function OT(e){return new Promise((t,n)=>{const o=()=>{if(Ml()){t();return}n(new Error("[openstation] component kit loaded but did not set `window.openStationComponents`."))},s=document.querySelector('script[data-os-components="1"]');if(s){Ml()?o():(s.addEventListener("load",o),s.addEventListener("error",()=>n(new Error("failed to load component kit"))));return}const i=document.createElement("script");i.src=e,i.async=!0,i.dataset.osComponents="1",i.addEventListener("load",o),i.addEventListener("error",()=>n(new Error("failed to load component kit"))),document.head.appendChild(i)})}function MT(e){const t=e.filter(n=>!Og.has(n));t.length===0||typeof console>"u"||console.error(`[openstation] wp.os.loadComponents(): not a component — ${t.map(n=>`<${n}>`).join(", ")}. The kit registers ${Mi.length} tags; see docs/components-reference.md for the list. The others in this call still loaded.`)}async function PT(e){if(e){if(MT(e),e.filter(o=>Og.has(o)&&!customElements.get(o)).length===0)return}else if(Ml())return;const t=RT();t&&(Pi||(Pi=OT(t).catch(n=>{throw Pi=null,n})),await Pi)}const WT=new Set(["windowManager","dock","sideDock","taskbar","desktopLayout","dockPlacement","icons","files","confirm","saveSession","hooks","HOOKS","isActive","registerWallpaper","registerWidget","widgetLayer","widgets","registerSystemTile","registerWindow","openWindow","openNewWindow","cloneTemplate","onWindow","createInfiniteList","startOAuth","repaintLoadingOverlays","loadVendorScript","getWallpaperSurfaces","wallpaper","games","registerModule","loadModules","whenReady","ready","isReady","setDefaultWindow","refreshMenu","config","ai","dragBridge","dragManager","registerCommand","unregisterCommand","listCommands","registerDestructiveAdminAction","unregisterDestructiveAdminAction","listDestructiveAdminActions","registerSettingsTab","unregisterSettingsTab","listSettingsTabs","registerDockRailRenderer","unregisterDockRailRenderer","listDockRailRenderers","openOsSettings","getOsSettings","subscribeOsSettings","updateOsSettings","deriveWindowId","listSystemTiles","getSystemTile","getMenuItems","renderIcon","applyTileClasses","applyTileElement","applyTileTooltip","dispatchTileRendered","isDockElement","registerDockSelector","registerTitleBarButton","unregisterTitleBarButton","listTitleBarButtons","registerWindowAction","unregisterWindowAction","listWindowActions","registerUnfocusEffect","unregisterUnfocusEffect","listUnfocusEffects","registerWindowReveal","unregisterWindowReveal","listWindowReveals","relations","registerWindowLinkRenderer","unregisterWindowLinkRenderer","listWindowLinkRenderers","registerWindowTheme","unregisterWindowTheme","listWindowThemes","applyWindowTheme","desktopThemes","registerWindowControl","unregisterWindowControl","listWindowControls","applyWindowControls","registerWindowSlot","unregisterWindowSlot","listWindowSlots","applyWindowSlot","registerWindowNotice","unregisterWindowNotice","listWindowNotices","dismissWindowNotice","undismissWindowNotice","registerWindowChrome","unregisterWindowChrome","listWindowChromes","applyWindowChrome","connect","getConnection","broadcast","subscribe","registerPalette","unregisterPalette","listPalettes","openPalette","devtools","createSharedStore","presence","selection","activity","heartbeat","showToast","renderKeyedList","clearKeyedList","registerNamespace","notify","pwa","getWindowConfig","getWindowParams","debug","registerNativeUrlRemap","fetch"]);function $T(e){const{manager:t,dock:n,layoutDispatcher:o,osSettings:s,iconsApi:i,filesApi:r,saveSession:a,widgetLayer:l,registerWindow:c,openWindowById:d,openNewWindowById:u,loadWindowScriptById:f,placeSystemTile:p,setDefaultWindow:g,refreshMenu:m,openOsSettings:h,aiAssistant:v,dragBridge:y,dragManager:x,connect:M,getConnection:I,wallpaperSuspend:W,mio:P,config:$}=e,k={windowManager:t,dock:n,sideDock:o?.getSide()??null,desktopLayout:s.getOsSettingsSnapshot().desktopLayout,dockPlacement:o?.getDockPlacement()??s.getOsSettingsSnapshot().dockPlacement,icons:i,files:r,confirm:Nn,saveSession:a,hooks:yb(),HOOKS:b,isActive:()=>!!document.getElementById("os-shell"),registerWallpaper:w=>{un(w),s.apply()},registerWidget:w=>{tl(w)},widgetLayer:l,widgets:{redock:w=>{l?.redock(w)}},loadVendorScript:ke,getWallpaperSurfaces:()=>mT(t),wallpaper:W,mio:P,games:hp,registerWindow:c,openWindow:d,openNewWindow:u,loadWindowScript:f,loadComponents:PT,fetch:(w,E,_)=>Dl(t,w,E,_),repaintLoadingOverlays:df,cloneTemplate:em,onWindow:LC,createInfiniteList:_T,startOAuth:AT,registerSystemTile:w=>{p(w),T(b.DOCK_ITEM_APPENDED,{id:w.id})},registerModule:Yf,loadModules:pa,whenReady:td,ready:td,isReady:vb,setDefaultWindow:g,refreshMenu:m,config:$,ai:v,dragBridge:y,dragManager:x,registerCommand:mi,unregisterCommand:Sp,listCommands:Ap,registerDestructiveAdminAction:EE,unregisterDestructiveAdminAction:uf,listDestructiveAdminActions:kE,registerSettingsTab:Ip,unregisterSettingsTab:xp,listSettingsTabs:Lp,registerDockRailRenderer:ud,unregisterDockRailRenderer:Db,listDockRailRenderers:Mb,openOsSettings:h,getOsSettings:()=>s.getOsSettingsSnapshot(),subscribeOsSettings:w=>s.subscribeOsSettings(w),updateOsSettings:(w,E={})=>{if(typeof w.wallpaper=="string"&&(s.state.wallpaper=w.wallpaper),typeof w.accent=="string"&&(s.state.accent=w.accent),typeof w.dockSize=="string"&&(s.state.dockSize=w.dockSize),typeof w.windowRadius=="string"&&(s.state.windowRadius=w.windowRadius),typeof w.adminBarMode=="string"&&(s.state.adminBarMode=w.adminBarMode),typeof w.desktopLayout=="string"&&(s.state.desktopLayout=w.desktopLayout),typeof w.dockPlacement=="string"&&(s.state.dockPlacement=w.dockPlacement),typeof w.desktopTheme=="string"&&(s.state.desktopTheme=w.desktopTheme),typeof w.unfocusEffect=="string"&&(s.state.unfocusEffect=w.unfocusEffect),typeof w.windowReveal=="string"&&(s.state.windowReveal=w.windowReveal),typeof w.windowRevealDuration=="number"&&(s.state.windowRevealDuration=w.windowRevealDuration),typeof w.dockRailRenderer=="string"&&(s.state.dockRailRenderer=w.dockRailRenderer),typeof w.windowLinkRenderer=="string"&&(s.state.windowLinkRenderer=w.windowLinkRenderer),(w.windowLinkVisibility==="focus"||w.windowLinkVisibility==="always"||w.windowLinkVisibility==="off")&&(s.state.windowLinkVisibility=w.windowLinkVisibility),typeof w.windowLinksEnabled=="boolean"&&(s.state.windowLinksEnabled=w.windowLinksEnabled),typeof w.windowLinkRaiseOnFocus=="boolean"&&(s.state.windowLinkRaiseOnFocus=w.windowLinkRaiseOnFocus),typeof w.windowLinkHighlight=="boolean"&&(s.state.windowLinkHighlight=w.windowLinkHighlight),w.ai&&typeof w.ai=="object"&&(s.state.ai={...s.state.ai,...w.ai}),typeof w.nativePostsEnabled=="boolean"&&(s.state.nativePostsEnabled=w.nativePostsEnabled),typeof w.nativePagesEnabled=="boolean"&&(s.state.nativePagesEnabled=w.nativePagesEnabled),typeof w.nativeUsersEnabled=="boolean"&&(s.state.nativeUsersEnabled=w.nativeUsersEnabled),typeof w.nativePluginsEnabled=="boolean"&&(s.state.nativePluginsEnabled=w.nativePluginsEnabled),typeof w.nativeCommentsEnabled=="boolean"&&(s.state.nativeCommentsEnabled=w.nativeCommentsEnabled),typeof w.foldersSharingEnabled=="boolean"&&(s.state.foldersSharingEnabled=w.foldersSharingEnabled),typeof w.showPostStatusRibbons=="boolean"&&(s.state.showPostStatusRibbons=w.showPostStatusRibbons),typeof w.developerModeEnabled=="boolean"&&(s.state.developerModeEnabled=w.developerModeEnabled),Array.isArray(w.nativePostsHiddenColumns)&&(s.state.nativePostsHiddenColumns=w.nativePostsHiddenColumns.filter(_=>typeof _=="string"&&_!=="").slice(0,32)),w.itemVisibility&&typeof w.itemVisibility=="object"){const _=["both","dock","desktop","hidden"],O={};for(const[H,G]of Object.entries(w.itemVisibility))typeof H!="string"||H===""||typeof G!="string"||!_.includes(G)||(O[H]=G);s.state.itemVisibility=O}if(Array.isArray(w.dockOrder)&&(s.state.dockOrder=w.dockOrder.filter(_=>typeof _=="string"&&_!=="").slice(0,256)),w.dockPromotedPositions&&typeof w.dockPromotedPositions=="object"){const O={};for(const[H,G]of Object.entries(w.dockPromotedPositions)){if(typeof H!="string"||H===""||!G||typeof G!="object")continue;const j=G;if(!(typeof j.x!="number"||typeof j.y!="number"||!Number.isFinite(j.x)||!Number.isFinite(j.y)||Math.abs(j.x)>1e5||Math.abs(j.y)>1e5)&&(O[H]={x:j.x,y:j.y},Object.keys(O).length>=256))break}s.state.dockPromotedPositions=O}s.save(E),(typeof w.wallpaper=="string"||typeof w.accent=="string"||typeof w.dockSize=="string"||typeof w.windowRadius=="string"||typeof w.adminBarMode=="string"||typeof w.desktopLayout=="string"||typeof w.dockPlacement=="string"||typeof w.dockRailRenderer=="string"||typeof w.desktopTheme=="string")&&s.apply(),(w.itemVisibility||w.dockOrder)&&o?.refresh()},deriveWindowId:(w,E)=>ae(w,E??$.adminUrl),listSystemTiles:()=>o?.listSystemTiles()??[],getSystemTile:w=>o?.getSystemTile(w)??null,getMenuItems:()=>o?.getMenuItems()??[],renderIcon:Co,applyTileClasses:eT,applyTileElement:tT,applyTileTooltip:nT,dispatchTileRendered:oT,isDockElement:iT,registerDockSelector:rT,registerTitleBarButton:wi,unregisterTitleBarButton:V0,listTitleBarButtons:K0,registerWindowAction:Z0,unregisterWindowAction:J0,listWindowActions:eS,registerUnfocusEffect:vi,unregisterUnfocusEffect:TS,listUnfocusEffects:$a,registerWindowReveal:Fe,unregisterWindowReveal:fv,listWindowReveals:Pd,relations:DE,registerWindowLinkRenderer:Pp,unregisterWindowLinkRenderer:nS,listWindowLinkRenderers:Wp,registerWindowTheme:ph,unregisterWindowTheme:hh,listWindowThemes:mh,desktopThemes:{list:Ev,getActive:Rr,setActive:da,subscribe:Sv,resolveIcon:Bs,resolveIconColor:Or,applyRecommendedOsSettings:w=>{const E=w??Rr()??"";if(E==="")return{};const _=DT(s.state,E,{force:!0});return Object.keys(_).length>0&&(s.save(),s.apply()),_}},applyWindowTheme:(w,E)=>{const _=t.getById(w);_&&_.setAppearanceTheme(E)},registerWindowControl:yo,unregisterWindowControl:yh,listWindowControls:bh,applyWindowControls:(w,E)=>{const _=t.getById(w);_&&_.setAppearanceControls(E)},registerWindowSlot:kh,unregisterWindowSlot:Va,listWindowSlots:Sh,applyWindowSlot:(w,E,_)=>{const O=t.getById(w);O&&O.setAppearanceSlot(E,_)},registerWindowNotice:Lh,unregisterWindowNotice:Za,listWindowNotices:Th,dismissWindowNotice:_A,undismissWindowNotice:EA,registerWindowChrome:AA,unregisterWindowChrome:Oh,listWindowChromes:Mh,applyWindowChrome:(w,E)=>{const _=t.getById(w);_&&_.setAppearanceChrome(E)},connect:M,getConnection:I,broadcast:Ma,subscribe:bn,registerPalette:ng,unregisterPalette:Bx,listPalettes:Hx,openPalette:ml,devtools:Tg,createSharedStore:ie,presence:Qx,selection:mL,activity:Ee,heartbeat:xe,showToast:X,notify:Sa,pwa:{promptInstall:HI,undismissInstallHint:zI,getState:lo,subscribe:wp,requestNotificationPermission:N0,getNotificationPermission:D0},renderKeyedList:bT,clearKeyedList:vT,registerNamespace:(w,E)=>{if(typeof w!="string"||w===""){console.warn("[openstation] registerNamespace: name must be a non-empty string");return}if(!E||typeof E!="object"){console.warn(`[openstation] registerNamespace("${w}"): api must be an object`);return}if(WT.has(w)){console.warn(`[openstation] registerNamespace("${w}"): name is reserved by the shell — pick a plugin-specific key`);return}k[w]=E},getWindowConfig:w=>{const E=window.openStationWindowConfig;if(!E||typeof E!="object")return;const _=E[w];return _===void 0?void 0:_},getWindowParams:w=>{const E=t.getById(w);if(E)return{...E.config.params??{}}},registerNativeUrlRemap:Mt,debug:{window:w=>{const E=($.nativeWindows??[]).find(L=>L.id===w);if(!E)return null;const _=E.scriptUrl||"";let O="unknown",H=!1;_&&(document.querySelector(`script[data-os-vendor="${_.replace(/"/g,'\\"')}"]`)?(O="lazy",H=!0):Array.from(document.querySelectorAll("script[src]")).find(D=>D.src===_)&&(O="eager",H=!0));const G=window.openStationWindowConfig,j=!!(G&&typeof G=="object"&&Object.prototype.hasOwnProperty.call(G,w));return{id:w,scriptHandle:E.scriptHandle||"",scriptUrl:_,loadPath:O,tagInDom:H,configPresent:j,extras:{hasTranslations:!!E.scriptTranslations,l10nCount:(E.scriptL10n??[]).length,beforeCount:(E.scriptBefore??[]).length,afterCount:(E.scriptAfter??[]).length}}}}};return k}function UT(e){if(window.wp||(window.wp={}),!window.wp.os){window.wp.os=e;return}Object.assign(window.wp.os,e)}const Pl=ie("desktop-mode/layout",()=>({layout:"classic"}));function Mg(e){Pl.state.layout!==e&&(Pl.state.layout=e,Pl.notify())}class Pg{constructor(t){this.shape=t}title(){return this.shape.title}icon(){return this.shape.icon}previewUrl(){return this.shape.previewUrl}ref(){return this.shape.ref}exists(){return this.shape.exists}}class FT extends Pg{constructor(t,n){super(t),this.typeSlug=n}type(){return this.typeSlug}}const Wo=new Map,Wl=new Set;function Ve(e){if(!e.type)throw new Error("[openstation] registerType: `type` is required.");if(!e.label)throw new Error("[openstation] registerType: `label` is required.");Wo.set(e.type,{type:e.type,label:e.label,sort:typeof e.sort=="number"?e.sort:100,DesktopFile:e.DesktopFile}),T("os.files.type-registered",e.type,e),$g()}function BT(e){Wo.delete(e)&&(T("os.files.type-unregistered",e),$g())}function HT(e){const t=Wo.get(e);return t||null}function Wg(){const e=Array.from(Wo.values()).slice(),t=V("os.files.types",e),n=Array.isArray(t)?t:e;return n.sort((o,s)=>o.sort!==s.sort?o.sort-s.sort:o.label.localeCompare(s.label)),n}function At(e){const t=Wo.get(e.type);return t?.DesktopFile?new t.DesktopFile(e):new FT(e,e.type)}function zT(e){return Wl.add(e),()=>Wl.delete(e)}function $g(){for(const e of Wl)try{e()}catch(t){console.error("[openstation] files registry subscriber threw:",t)}}const Wi=new Map,$l=new Set;let Ul={};function Ug(e){Ul={...e},zl()}function Fl(){return{...Ul}}function He(e){if(!e.id)throw new Error("[openstation] registerOpener: `id` is required.");if(!e.label)throw new Error("[openstation] registerOpener: `label` is required.");if(!Array.isArray(e.types)||e.types.length===0)throw new Error("[openstation] registerOpener: `types` must be a non-empty array.");if(!e.handler||typeof e.handler!="object")throw new Error("[openstation] registerOpener: `handler` is required.");Wi.set(e.id,{id:e.id,label:e.label,types:e.types.slice(),isDefault:!!e.isDefault,sort:typeof e.sort=="number"?e.sort:100,appliesTo:typeof e.appliesTo=="function"?e.appliesTo:void 0,handler:e.handler}),T("os.files.opener-registered",e.id,e),zl()}function GT(e){Wi.delete(e)&&(T("os.files.opener-unregistered",e),zl())}function jT(e){return Wi.get(e)??null}function Fg(){const e=Array.from(Wi.values()).slice(),t=V("os.files.openers",e),n=Array.isArray(t)?t:e;return n.sort((o,s)=>{const i=typeof o.sort=="number"?o.sort:100,r=typeof s.sort=="number"?s.sort:100;return i!==r?i-r:o.label.localeCompare(s.label)}),n}function Bl(e,t){return Fg().filter(n=>n.types.includes(e)).filter(n=>n.appliesTo?t!==void 0&&n.appliesTo(t):!0)}function Hl(e,t){const n=Bl(e,t);if(n.length===0)return null;const o=Ul[e];let s=null;return o&&(s=n.find(r=>r.id===o)??null),s||(s=n.find(r=>r.isDefault)??null),s||(s=n[0]),V("os.files.resolve-opener",s,e)??null}function VT(e){return $l.add(e),()=>$l.delete(e)}function zl(){for(const e of $l)try{e()}catch(t){console.error("[openstation] openers subscriber threw:",t)}}let $o=null;function qT(e){$o=e}async function Uo(e,t){if(!$o)return console.warn("[openstation] wp.os.files.open() called before the shell installed open deps. The file will not open."),!1;const n=Hl(e.type(),e);if(!n)return T("os.files.open-failed",{reason:"no-opener",type:e.type(),ref:e.ref()}),!1;T("os.files.opening",{file:e,openerId:n.id});try{const o=n.handler;if(o.kind==="url"){const s=await o.url(e);if(!s)return!1;const i=o.windowId?o.windowId(e):$o.deriveWindowId(s),r=o.title?o.title(e):e.title(),a=e.icon(),l=$o.openUrl({id:i,url:s,title:r,icon:a});return T("os.files.opened",{file:e,openerId:n.id,kind:"url"}),l}if(o.kind==="window"){const s=o.config?o.config(e):void 0,i=$o.openNativeWindow(o.windowId,s);return T("os.files.opened",{file:e,openerId:n.id,kind:"window"}),i}return await o.open(e,t),T("os.files.opened",{file:e,openerId:n.id,kind:"js"}),!0}catch(o){return T("os.files.open-failed",{reason:"handler-threw",type:e.type(),ref:e.ref(),openerId:n.id,error:o}),console.error("[openstation] file opener threw:",o),!1}}const KT="dashicons-portfolio";function YT(){Ve({type:"shortcut",label:"Plugin shortcut",sort:1}),Ve({type:"folder",label:"Folder",sort:5}),Ve({type:"post",label:"Post",sort:10}),Ve({type:"attachment",label:"Media",sort:20}),Ve({type:"upload",label:"Uploaded file",sort:25}),Ve({type:"user",label:"User",sort:30}),Ve({type:"term",label:"Taxonomy term",sort:40}),Ve({type:"comment",label:"Comment",sort:50}),Ve({type:"bookmark",label:"Bookmark",sort:60}),Ve({type:"link",label:"Web link",sort:70}),Ve({type:"embed",label:"Embedded web window",sort:80})}const qe=ie("desktop-mode/agents-chat",()=>({activeAgent:null,transcripts:{},conversationIds:{},conversationsRev:0}));function Bg(e){qe.state.activeAgent=e,qe.state.transcripts[e.id]||(qe.state.transcripts[e.id]=[]),qe.state.conversationIds||(qe.state.conversationIds={},qe.state.conversationsRev=0),qe.notify()}const Hg="desktop-mode/v1/agents/conversations";async function zg(e,t,n={}){const o=await Be(tt(e.restRoot,t),{...n,headers:{"Content-Type":"application/json","X-WP-Nonce":e.restNonce,...n.headers??{}}},{source:"desktop-mode/agents",silent:!0}),s=await o.json().catch(()=>null);if(!o.ok){const i=s&&typeof s=="object"&&typeof s.message=="string"?s.message:`HTTP ${o.status}`;throw new Error(i)}return s}function XT(e){return e.filter(t=>!t.pending)}async function ZT(e,t){const n=qe.state,o=XT(n.transcripts[e.id]??[]);if(o.length!==0){n.conversationIds||(n.conversationIds={});try{const s=n.conversationIds[e.id];if(s)await zg(t,`${Hg}/${s}`,{method:"PUT",body:JSON.stringify({messages:o})});else{const i=await zg(t,Hg,{method:"POST",body:JSON.stringify({agentId:e.id,messages:o})});n.conversationIds[e.id]=i.id}n.conversationsRev=(n.conversationsRev??0)+1,qe.notify()}catch(s){console.warn("[desktop-mode/agents] conversation save failed:",s)}}}const Gg={post:"post",page:"page",attachment:"media",media:"media",user:"user",comment:"comment"};function jg(e){const t=Number.parseInt(String(e??""),10);return Number.isFinite(t)&&t>0?t:0}function Vg(e){if(e.type==="shortcut"){const t=e.data;let n=Gg[String(t.kind??"")];n==="post"&&t.bridgePayload?.postType==="page"&&(n="page");const o=jg(t.ref);return!n||!o?null:{kind:n,id:o,title:String(t.title??"")||`#${o}`}}if(e.type==="desktop-file"){const n=e.data.placement?.file;if(!n)return null;const o=Gg[String(n.type??"")],s=jg(n.ref);return!o||!s?null:{kind:o,id:s,title:String(n.title??"")||`#${s}`}}return null}function JT(e,t,n){return!t||n&&t.kind==="user"&&t.id===n||e==null?!1:e.length===0?!0:e.includes(t.kind)}function QT(e){return le(S('The user dropped the %1$s "%2$s" (id %3$s) onto you. Handle it according to your instructions, using your tools as needed.',"desktop-mode"),e.kind,e.title,String(e.id))}function eN(e){return{kind:e.kind,id:e.id,title:e.title}}function qg(e,t="agents"){Bg(e);const n=window.wp?.os?.openWindow;typeof n=="function"&&n("desktop-mode-agent-run",{source:t})}async function tN(e,t,n,o,s){Bg(e);const i=qe.state.transcripts[e.id],r=i.filter(l=>!l.pending&&l.role!=="error").map(l=>({role:l.role,text:l.text}));i.push({role:"user",text:t,at:Date.now(),attachment:s});const a={role:"agent",text:S("Working…","desktop-mode"),at:Date.now(),pending:!0};i.push(a),qe.notify();try{const l=await Be(tt(n.restRoot,`desktop-mode/v1/agents/${e.id}/invoke`),{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":n.restNonce},body:JSON.stringify({message:t,source:o,history:r})},{source:"desktop-mode/agents"}),c=await l.json().catch(()=>null);if(!l.ok){const u=c&&typeof c=="object"&&typeof c.message=="string"?c.message:`HTTP ${l.status}`;throw new Error(u)}const d=c;a.text=d.text||S("The agent finished without a text answer.","desktop-mode"),a.toolCalls=d.toolCalls,Array.isArray(d.callToActions)&&d.callToActions.length>0&&(a.callToActions=d.callToActions)}catch(l){a.role="error",a.text=l instanceof Error?l.message:String(l)}a.pending=!1,qe.notify(),ZT(e,n)}function nN(e,t,n){return qg(e,"agents-drop"),tN(e,QT(t),n,"drag",eN(t))}let Gl=null;function Kg(e){Gl=e}function Fo(){if(!Gl)throw new Error("[openstation] files REST client called before installRestDeps().");return Gl}function oN(){return Fo()}class jl extends Error{constructor(t){super(`Row was changed by ${t.actor.name||"another session"} (parent="${t.current.parentName}")`),this.name="FilesConflictError",this.status=409,this.detail=t}}async function fe(e,t){const{baseUrl:n,nonce:o}=Fo(),s=tt(n,e),i=new Headers(t.headers??{});i.set("X-WP-Nonce",o),t.body&&!i.has("Content-Type")&&i.set("Content-Type","application/json");const r=await Be(s,{...t,headers:i,credentials:"same-origin"},{source:"desktop-mode/files"}),a=await r.text();let l=null,c=null;if(a)try{l=JSON.parse(a)}catch(d){l=null,c=d}if(!r.ok){if(r.status===409){const u=l?.data?.data??l?.data;if(u&&typeof u=="object")throw new jl(u)}const d=l;throw new Error(`[openstation] files REST ${r.status}: ${d?.code??""} ${d?.message??""}`.trim())}if(l===null){if(c&&a){const d=a.slice(0,120).replace(/\s+/g," ");throw new Error(`[openstation] files REST ${r.status} returned non-JSON body — ${c.message}. First 120 chars: ${d}`)}throw new Error(`[openstation] files REST ${r.status}: empty or unparseable body.`)}return l}function Te(e=0){return fe(`/placements?folder=${encodeURIComponent(String(e))}`,{method:"GET"})}function Dn(e){return fe("/placements",{method:"POST",body:JSON.stringify(e)})}function Rn(e,t,n){const o={};return typeof n=="number"&&n>0&&(o["If-Match"]=String(n)),fe(`/placements/${e}`,{method:"PATCH",body:JSON.stringify(t),headers:o})}function Vl(e){return fe(`/placements/${e}`,{method:"DELETE"})}async function $i(e,t){const{baseUrl:n,nonce:o}=Fo(),i=`${n.replace(/\/files\/?$/,"")}/recycle-bin/restore`,r=await Be(i,{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":o},credentials:"same-origin",body:JSON.stringify({items:[{id:e,type:t}]})},{source:"desktop-mode/files"});if(!r.ok)throw new Error(`[openstation] restore ${r.status}`);return await r.json()}function ql(){return fe("/folders",{method:"GET"})}function Kl(e){return fe("/folders",{method:"POST",body:JSON.stringify(e)})}function Yg(e,t,n){const o={};return typeof n=="number"&&n>0&&(o["If-Match"]=String(n)),fe(`/folders/${e}`,{method:"PATCH",body:JSON.stringify(t),headers:o})}function Yl(e){return fe(`/folders/${e}`,{method:"DELETE"})}function Xg(e){return fe("/associations",{method:"PUT",body:JSON.stringify({associations:e})})}function Zg(e){return fe(`/folders/${e}/shares`,{method:"GET"})}function Jg(e,t){return fe(`/folders/${e}/shares`,{method:"POST",body:JSON.stringify(t)})}function Qg(e,t,n){return fe(`/folders/${e}/shares/${t}`,{method:"PATCH",body:JSON.stringify({capability:n})})}function ew(e,t){return fe(`/folders/${e}/shares/${t}`,{method:"DELETE"})}function tw(e,t){return fe(`/folders/${e}/shares/${t}/accept`,{method:"POST"})}function nw(e,t){return fe(`/folders/${e}/shares/${t}/deny`,{method:"POST"})}function ow(e){return fe(`/folders/${e}/leave`,{method:"POST"})}function sN(){return fe("/folder-sharing-tables/purge",{method:"POST"})}function sw(e){return fe(`/uploads/${e}/shares`,{method:"GET"})}function iw(e,t){return fe(`/uploads/${e}/shares`,{method:"POST",body:JSON.stringify({userId:t})})}function rw(e,t){return fe(`/uploads/${e}/shares/${t}`,{method:"DELETE"})}function aw(e,t){return fe(`/uploads/${e}/shares/${t}/accept`,{method:"POST"})}function lw(e,t){return fe(`/uploads/${e}/shares/${t}/deny`,{method:"POST"})}function cw(e){return fe(`/uploads/${e}/leave`,{method:"POST"})}function iN(e,t){return fe(`/uploads/${e}`,{method:"PATCH",body:JSON.stringify({name:t})})}function dw(e,t){return fe("/uploads/paths",{method:"POST",body:JSON.stringify({parentId:e,relativePath:t})})}function jt(e){const{baseUrl:t,nonce:n}=Fo(),o=tt(t,`/uploads/${e}/download`);return`${o}${o.includes("?")?"&":"?"}_wpnonce=${encodeURIComponent(n)}`}function uw(e){const{baseUrl:t,nonce:n}=Fo(),o=tt(t,`/folders/${e}/download`);return`${o}${o.includes("?")?"&":"?"}_wpnonce=${encodeURIComponent(n)}`}const rN=Object.freeze(Object.defineProperty({__proto__:null,FilesConflictError:jl,acceptFileShare:aw,acceptShare:tw,createFolder:Kl,createPlacement:Dn,deleteFolder:Yl,deletePlacement:Vl,denyFileShare:lw,denyShare:nw,ensureUploadPath:dw,getFilesRestDeps:oN,getFolderZipUrl:uw,getUploadDownloadUrl:jt,installRestDeps:Kg,inviteFileShare:iw,inviteShare:Jg,leaveFileShare:cw,leaveShare:ow,listFileShares:sw,listFolders:ql,listPlacements:Te,listShares:Zg,purgeFolderSharingTables:sN,renameUpload:iN,restoreTrashedItem:$i,revokeFileShare:rw,revokeShare:ew,saveAssociations:Xg,updateFolder:Yg,updatePlacement:Rn,updateShareCapability:Qg},Symbol.toStringTag,{value:"Module"})),aN="desktop-mode/files";function Xe(){return ie(aN,()=>({placementsByFolder:new Map,folders:new Map,hydratedFolders:new Set}))}function On(e){typeof document>"u"||document.dispatchEvent(new CustomEvent("os-files-changed",{detail:{source:"local",...e}}))}function pt(e,t){const n=Xe(),o=new Map(n.state.placementsByFolder);o.set(e,t.slice());const s=new Set(n.state.hydratedFolders);s.add(e),n.state={...n.state,placementsByFolder:o,hydratedFolders:s},n.notify(),On({kind:"placements-set",folderId:e})}function Ui(e,t="local"){if(!e||typeof e.id!="number"){console.warn("[openstation] upsertPlacement called with a non-placement value; ignoring.",e);return}const n=Xe(),o=new Map(n.state.placementsByFolder);for(const[a,l]of o)if(l.findIndex(d=>d&&d.id===e.id)>=0&&a!==e.parentId){const d=l.filter(Boolean),u=d.findIndex(f=>f.id===e.id);u>=0&&d.splice(u,1),o.set(a,d)}const i=(o.get(e.parentId)?.slice()??[]).filter(Boolean),r=i.findIndex(a=>a.id===e.id);r>=0?i[r]=e:i.push(e),o.set(e.parentId,i),n.state={...n.state,placementsByFolder:o},n.notify(),On({kind:"placement-upserted",placementId:e.id,folderId:e.parentId,source:t})}function Bo(e,t="local"){const n=Xe(),o=new Map(n.state.placementsByFolder);let s;for(const[i,r]of o)if(r.findIndex(l=>l&&l.id===e)>=0){const l=r.filter(Boolean).filter(c=>c.id!==e);o.set(i,l),s=i}s!==void 0&&(n.state={...n.state,placementsByFolder:o},n.notify(),On({kind:"placement-removed",placementId:e,folderId:s,source:t}))}function Fi(e){const t=Xe(),n=new Map;for(const o of e)n.set(o.id,o);t.state={...t.state,folders:n},t.notify(),On({kind:"folders-set"})}function Xl(e,t="local"){const n=Xe(),o=new Map(n.state.folders);o.set(e.id,e),n.state={...n.state,folders:o},n.notify(),On({kind:"folder-upserted",folderRowId:e.id,source:t})}function Zl(e,t="local"){const n=Xe(),o=new Map(n.state.folders);o.delete(e);const s=new Map(n.state.placementsByFolder);s.delete(e),n.state={...n.state,folders:o,placementsByFolder:s},n.notify(),On({kind:"folder-removed",folderRowId:e,source:t})}function Jl(e){return Xe().subscribe(e)}function Ct(){return Xe().getState()}function fw(e){const t=Ct(),n=t.placementsByFolder.get(e.parentId)?.find(o=>o&&o.id===e.id);if(n)return n;for(const o of t.placementsByFolder.values()){const s=o.find(i=>i&&i.id===e.id);if(s)return s}return e}const Q={getState:Ct,subscribe:Jl,setFolderPlacements:pt,upsertPlacement:Ui,upsertFolder:Xl,removePlacement:Bo,removeFolder:Zl,currentPlacement:fw},lN=ce`:host{display:inline-block}`,cN=ce`:host{position:absolute;width:var( --os-ui-ribbon-size,90px );height:var( --os-ui-ribbon-size,90px );overflow:hidden;pointer-events:none;z-index:var( --os-ui-ribbon-z,2 )}:host( [ hidden ] ){display:none}.banner{position:absolute;display:block;width:var( --os-ui-ribbon-banner-width,140px );padding:var( --os-ui-ribbon-padding,4px 0 );text-align:center;font:var( --os-ui-ribbon-font,700 10px/1.4 var( --os-font,system-ui ) );letter-spacing:var( --os-ui-ribbon-tracking,0.06em );text-transform:uppercase;color:var( --os-ui-ribbon-fg,var( --os-ui-fg-on-accent,#fff ) );background:var( --os-ui-ribbon-bg,var( --wp-admin-theme-color,#2271b1 ) );background-size:260% 260%;background-position:30% 40%;box-shadow:var( --os-ui-ribbon-shadow,0 2px 4px rgba( 0,0,0,0.2 ) )}:host(:not( [ placement ] ) ),:host( [ placement='top-end' ] ){inset-block-start:0;inset-inline-end:0}:host(:not( [ placement ] ) ) .banner,:host( [ placement='top-end' ] ) .banner{inset-block-start:var( --os-ui-ribbon-banner-offset,20px );inset-inline-end:var( --os-ui-ribbon-banner-pull,-36px );transform:rotate( 45deg )}:host( [ placement='top-start' ] ){inset-block-start:0;inset-inline-start:0}:host( [ placement='top-start' ] ) .banner{inset-block-start:var( --os-ui-ribbon-banner-offset,20px );inset-inline-start:var( --os-ui-ribbon-banner-pull,-36px );transform:rotate( -45deg )}:host( [ placement='bottom-end' ] ){inset-block-end:0;inset-inline-end:0}:host( [ placement='bottom-end' ] ) .banner{inset-block-end:var( --os-ui-ribbon-banner-offset,20px );inset-inline-end:var( --os-ui-ribbon-banner-pull,-36px );transform:rotate( -45deg )}:host( [ placement='bottom-start' ] ){inset-block-end:0;inset-inline-start:0}:host( [ placement='bottom-start' ] ) .banner{inset-block-end:var( --os-ui-ribbon-banner-offset,20px );inset-inline-start:var( --os-ui-ribbon-banner-pull,-36px );transform:rotate( 45deg )}:host-context( [ dir='rtl' ] ):host(:not( [ placement ] ) ) .banner,:host-context( [ dir='rtl' ] ):host( [ placement='top-end' ] ) .banner{transform:rotate( -45deg )}:host-context( [ dir='rtl' ] ):host( [ placement='top-start' ] ) .banner{transform:rotate( 45deg )}:host-context( [ dir='rtl' ] ):host( [ placement='bottom-end' ] ) .banner{transform:rotate( 45deg )}:host-context( [ dir='rtl' ] ):host( [ placement='bottom-start' ] ) .banner{transform:rotate( -45deg )}:host( [ tone='success' ] ) .banner{background:var( --os-ui-ribbon-success,var( --os-ui-success-fg,#1a7f37 ) )}:host( [ tone='warning' ] ) .banner{background:var( --os-ui-ribbon-warning,var( --os-ui-warning-bg,#9a6700 ) )}:host( [ tone='danger' ] ) .banner{background:var( --os-ui-ribbon-danger,var( --os-ui-danger,#cf222e ) )}:host( [ tone='info' ] ) .banner{background:var( --os-ui-ribbon-info,var( --os-ui-info-bg,#0969da ) )}:host( [ tone='neutral' ] ) .banner{background:var( --os-ui-ribbon-neutral,var( --os-ui-surface,#57606a ) )}`,ms=class ms extends Se{render(){return Y`<span class="banner" part="banner"><slot></slot></span>`}};ms.props=["placement","tone"],ms.styles=[cN],ms.help=void 0;let Ql=ms;Ie("os-ribbon",Ql);const re="os-file-tile",pw={draft:"Draft",pending:"Pending",private:"Private",future:"Scheduled"};function dN(){const e=window.wp?.os?.getOsSettings;if(typeof e!="function")return!0;try{return e()?.showPostStatusRibbons!==!1}catch{return!0}}function uN(){return window.wp?.os?.dragManager??null}const fN=["type","ref","label","icon","thumbnail","kind","status","selected","selectable","missing","access-gated","drag-kind","drag-title","drag-icon"],jn=class jn extends Se{constructor(){super(...arguments),this._pointerdownHandler=null,this._keydownHandler=null,this._onSettingsSave=t=>{t.detail?.phase==="saved"&&this._paint()}}connectedCallback(){super.connectedCallback(),this._keydownHandler||(this._keydownHandler=t=>{(t.key==="Enter"||t.key===" ")&&(t.preventDefault(),this.click())},this.addEventListener("keydown",this._keydownHandler)),document.addEventListener("os-settings-save-lifecycle",this._onSettingsSave),this._paint()}disconnectedCallback(){this._pointerdownHandler&&(this.removeEventListener("pointerdown",this._pointerdownHandler),this._pointerdownHandler=null),this._keydownHandler&&(this.removeEventListener("keydown",this._keydownHandler),this._keydownHandler=null),document.removeEventListener("os-settings-save-lifecycle",this._onSettingsSave)}requestUpdate(){this.isConnected&&this._paint()}attributeChangedCallback(t,n,o){if(n!==o){if(t==="selected"||t==="selectable"||t==="aria-selected"){this._paintSelection();return}super.attributeChangedCallback(t,n,o)}}_paintSelection(){const t=this.hasAttribute("selected"),n=this.hasAttribute("selectable");if(this.classList.toggle(`${re}--selected`,t),this.setAttribute("role",n?"option":"listitem"),n){const o=t?"true":"false";this.getAttribute("aria-selected")!==o&&this.setAttribute("aria-selected",o)}else this.removeAttribute("aria-selected")}render(){return Y``}_paint(){const t=this.getAttribute("type")??"",n=this.getAttribute("ref")??"",o=this.getAttribute("label")??"",s=this.getAttribute("icon")??"",i=this.getAttribute("thumbnail")??"",r=this.getAttribute("kind")??"entry",a=this.getAttribute("status")??"",l=this.hasAttribute("selected"),c=this.hasAttribute("selectable"),d=this.hasAttribute("missing"),u=this.hasAttribute("access-gated"),f=[re,`${re}--folder`,`${re}--missing`,`${re}--access-gated`,`${re}--selected`];for(const v of f)this.classList.remove(v);this.classList.add(re),r==="folder"&&this.classList.add(`${re}--folder`),d&&this.classList.add(`${re}--missing`),u&&this.classList.add(`${re}--access-gated`),l&&this.classList.add(`${re}--selected`),this.dataset.fileType=t,this.dataset.fileRef=n,r&&(this.dataset.role=r),this.setAttribute("role",c?"option":"listitem"),c?this.setAttribute("aria-selected",l?"true":"false"):this.removeAttribute("aria-selected"),this.setAttribute("aria-label",o),this.hasAttribute("tabindex")||this.setAttribute("tabindex","0");const p="You don’t have permission to open this — ask the folder owner for access.";u?(this.title=p,this.setAttribute("aria-disabled","true")):(this.removeAttribute("aria-disabled"),this.title===p&&this.removeAttribute("title"));const g=[`${re}__visual`,`${re}__label`,`${re}__lock`];for(const v of g)this.querySelectorAll(`:scope > .${v}`).forEach(y=>y.remove());this.querySelectorAll(":scope > os-ribbon").forEach(v=>v.remove());const m=document.createElement("span");if(m.className=`${re}__visual`,i){const v=document.createElement("img");v.src=i,v.alt="",v.loading="lazy",v.decoding="async",v.className=`${re}__preview`,v.draggable=!1,m.appendChild(v)}else if(s){const v=Co(s,{title:o,className:`${re}__icon`});m.appendChild(v)}this.appendChild(m);const h=document.createElement("span");if(h.className=`${re}__label`,h.textContent=o,this.appendChild(h),u){const v=document.createElement("span");v.className=`${re}__lock dashicons dashicons-lock`,v.setAttribute("aria-hidden","true"),this.appendChild(v)}if(a&&a!=="publish"&&pw[a]&&dN()){const v=document.createElement("os-ribbon");v.setAttribute("placement","top-end"),v.setAttribute("tone",pN(a)),v.textContent=pw[a],this.appendChild(v)}Eb(this),T("os.tile.rendered",{tile:this}),this._wireDragOut()}_wireDragOut(){this._pointerdownHandler&&(this.removeEventListener("pointerdown",this._pointerdownHandler),this._pointerdownHandler=null);const t=this.getAttribute("drag-kind");if(!t)return;const n=o=>{if(o.button!==0)return;const s=uN();if(!s)return;const i=this.getAttribute("ref")??"",r=this.getAttribute("drag-title")??this.getAttribute("label")??void 0,a=this.getAttribute("drag-icon")??this.getAttribute("icon")??void 0,l=this.getBoundingClientRect();s.start({payload:{type:"shortcut",source:this,data:{kind:t,ref:i,title:r,icon:a},ghost:{offsetX:o.clientX-l.left,offsetY:o.clientY-l.top}},origin:o})};this._pointerdownHandler=n,this.addEventListener("pointerdown",n)}};jn.shadow=!1,jn.props=fN,jn.styles=[lN],jn.help=void 0;let ec=jn;function pN(e){switch(e){case"draft":return"warning";case"pending":return"info";case"private":return"danger";case"future":return"primary";default:return"primary"}}Ie("os-tile",ec);function hN(e){const t=document.createElement("os-tile");if(t.setAttribute("type",e.type),t.setAttribute("ref",e.ref),t.setAttribute("label",e.label),e.icon&&t.setAttribute("icon",e.icon),e.thumbnail&&t.setAttribute("thumbnail",e.thumbnail),e.role&&t.setAttribute("kind",e.role),e.status&&t.setAttribute("status",e.status),e.missing&&t.setAttribute("missing",""),e.accessGated&&t.setAttribute("access-gated",""),e.dataset)for(const[o,s]of Object.entries(e.dataset))s!=null&&(t.dataset[o]=String(s));if(Array.isArray(e.extraClasses))for(const o of e.extraClasses)o&&t.classList.add(o);const n=V("os.tile.class",t.className,e);return n&&n!==t.className&&(t.className=n),typeof e.x=="number"&&typeof e.y=="number"&&(t.style.position="absolute",t.style.left=`${e.x}px`,t.style.top=`${e.y}px`),t}function mN(e,t){const n=document.createElement("div");n.className="os-drag-stack";const o=e.getBoundingClientRect();n.style.width=`${o.width}px`,n.style.height=`${o.height}px`;const s=e.cloneNode(!0);s.removeAttribute("id"),s.removeAttribute("selected"),s.removeAttribute("aria-selected"),s.classList.remove(`${re}--selected`),s.style.left="0px",s.style.top="0px",s.style.position="relative",n.appendChild(s);const i=document.createElement("span");return i.className="os-drag-stack__count",i.textContent=String(t),n.appendChild(i),n}function hw(e){const t=e.meta&&typeof e.meta.name=="string"?e.meta.name.trim():"";return t!==""?t:At(e.file).title()}function gN(e,t){const n=At(e.file),o=n.previewUrl(),s=hw(e),i=e.meta&&typeof e.meta.iconUrl=="string"?e.meta.iconUrl.trim():"";return{type:e.file.type,ref:e.file.ref,label:s,thumbnail:o||void 0,icon:o?void 0:rm(e.file.ref)||i||Bs(Iv(e.file.type))||n.icon(),x:e.x,y:e.y,dataset:{placementId:e.id,folderId:t},meta:e.meta,missing:!e.file.exists,accessGated:!!e.accessGated,ariaLabel:s}}function wN(e,t){const n=hN(gN(e,t)),o=V("os.files.tile-class",re,e);o&&o!==re&&(n.className=o);const s=V("os.files.tile-element",null,e);return s instanceof Element&&n.appendChild(s),n.addEventListener("dblclick",i=>{i.preventDefault(),i.stopPropagation();const r=fw(e),a=At(r.file);if(r.accessGated){X({message:`You don’t have permission to open "${r.file.title||a.title()}". Ask the folder owner if you need access to this item.`,duration:6e3});return}Uo(a,{placement:{id:r.id,x:r.x,y:r.y,meta:r.meta}})}),T("os.files.tile-rendered",{tile:n,placement:e}),n}function ht(e,t,n){e.style.left=`${t}px`,e.style.top=`${n}px`}const Ho=new Map;function Bi(e,t){const n=Ho.get(e);return n?n.push(t):Ho.set(e,[t]),()=>{const o=Ho.get(e);if(!o)return;const s=o.indexOf(t);s!==-1&&o.splice(s,1),o.length===0&&Ho.delete(e)}}function tc(e,t){const n=Ho.get(e);if(n)return n.find(o=>o.appliesTo(t))}function yN(e,t){return tc(e,t)?.acceptLabel}function bN(e,t){const n=tc(e.type,t);return n?n.accept(e.data,t):!1}function vN(e,t,n){const o=tc(e.payload.type,n);return o?(o.onDrop(e,t,n),!0):!1}function _N(e,t,n){const o=t.slice().sort((s,i)=>{const r=typeof s.sort=="number"?s.sort:100,a=typeof i.sort=="number"?i.sort:100;return r!==a?r-a:s.label.localeCompare(i.label)});o.length!==0&&fL(e,{actions:o,scope:"files.tile",dataset:{placementId:String(n.placementIds[0]??""),placementIds:n.placementIds.join(",")},onOpened:s=>{T("os.files.tile-menu.opened",{placementId:n.placementIds[0],placementIds:n.placementIds.slice(),items:s})},onClosed:()=>{T("os.files.tile-menu.closed",{})}})}function nc(e){const t=e.value;return typeof t=="string"?t:e.getAttribute("value")??e.shadowRoot?.querySelector("input")?.value??""}function Vt(e,t){e.disabled=t,t?e.setAttribute("disabled",""):e.removeAttribute("disabled")}function Hi(e){const t=()=>{const n=e.shadowRoot?.querySelector("input");return n?(n.focus(),n.select(),!0):!1};t()||queueMicrotask(()=>void t())}const Me="os-create-folder-dialog";let zo=null;function oc(){zo&&(zo.dispatchEvent(new CustomEvent("create-folder-dialog-closed")),zo.remove(),zo=null,T("os.files.create-folder.closed",{}))}function sc(e){if(oc(),V("os.files.create-folder.dialog",null,e)===!1)return;const n=(e.initialName??"Untitled folder").trim(),o=document.createElement("div");o.className=`${Me}__overlay`,o.setAttribute("role","presentation");const s=document.createElement("div");s.className=Me,s.setAttribute("role","dialog"),s.setAttribute("aria-modal","true"),s.setAttribute("aria-labelledby",`${Me}-title`);const i=document.createElement("h2");i.id=`${Me}-title`,i.className=`${Me}__title`,i.textContent=e.title??"New folder",s.appendChild(i);const r=document.createElement("os-text-field");r.className=`${Me}__field`,r.id=`${Me}-input`,r.setAttribute("label",e.label??"Folder name"),r.setAttribute("value",n),r.setAttribute("autocomplete","off"),r.setAttribute("spellcheck","false"),s.appendChild(r);const a=document.createElement("p");a.className=`${Me}__error`,a.hidden=!0,a.setAttribute("role","alert"),s.appendChild(a);const l=document.createElement("div");l.className=`${Me}__actions`;const c=document.createElement("os-button");c.className=`${Me}__btn ${Me}__btn--secondary`,c.setAttribute("variant","ghost"),c.textContent="Cancel";const d=document.createElement("os-button");d.className=`${Me}__btn ${Me}__btn--primary`,d.setAttribute("variant","primary"),d.textContent=e.submitLabel??"Create",l.appendChild(c),l.appendChild(d),s.appendChild(l),o.appendChild(s),document.body.appendChild(o),zo=o,Hi(r),T("os.files.create-folder.opened",{});const u=h=>{Vt(r,h),Vt(c,h),Vt(d,h),s.classList.toggle(`${Me}--busy`,h)},f=h=>{a.textContent=h,a.hidden=!1},p=()=>{oc(),e.onCancel?.()},g=async()=>{const h=nc(r).trim();if(!h){f("Please enter a name."),Hi(r);return}a.hidden=!0,u(!0);try{await e.onSubmit(h),oc()}catch(v){u(!1),f(v instanceof Error?v.message:"Could not create the folder."),Hi(r)}};c.addEventListener("click",()=>p()),d.addEventListener("click",()=>void g()),o.addEventListener("click",h=>{h.target===o&&p()});const m=h=>{h.key==="Escape"?(h.preventDefault(),p()):h.key==="Enter"&&!h.isComposing&&(h.preventDefault(),g())};s.addEventListener("keydown",m),o.addEventListener("create-folder-dialog-closed",()=>{s.removeEventListener("keydown",m)})}function zi(e){const t=e.meta;if(!t||typeof t!="object")return null;const n=t.__synthFromDockItem;return typeof n=="string"&&n!==""?n:null}function EN(e){return e.id<=0||zi(e)!==null}function mw(e){if(e.length===0)return;const t=window.wp?.os;if(!t?.getOsSettings||!t?.updateOsSettings)return;const n={...t.getOsSettings().itemVisibility??{}};for(const o of e)n[o]="dock";t.updateOsSettings({itemVisibility:n})}function Mn(e,t,n){window.wp?.os?.broadcast?.(`os.${e}.changed`,{source:"desktop-files",action:t,ids:n})}function Gi(e){const t=window.wp?.os;if(!t?.showToast)return;const o=(e instanceof Error?e.message:String(e)).replace(/^\[openstation\][^:]*:\s*/,"").replace(/^openstation_files_[a-z_]+\s*/,"");t.showToast({message:o||"Could not move this item to the recycle bin.",duration:5e3})}function ic(e,t){const n=window.wp?.os;n?.showToast&&n.showToast({message:e,duration:6e3,action:{label:"Undo",onClick:t}})}async function gw(e){const t=e.id,n=e.parentId,o=e.file?.title??"Item",s=e.file?.type==="shortcut"?"shortcut":"placement";Q.removePlacement(t);try{await Vl(t),Mn(s,"trashed",[t]),ic(`"${o}" moved to Trash`,async()=>{try{await $i(t,"placement");const i=await Te(n);Q.setFolderPlacements(n,i.placements),Mn(s,"untrashed",[t])}catch(i){console.error("[openstation] restore failed:",i)}})}catch(i){console.error("[openstation] deletePlacement failed:",i),Gi(i),Te(n).then(r=>{Q.setFolderPlacements(n,r.placements)})}}async function ww(e){const t=parseInt(e.file.ref,10);if(!t)return;const n=e.id,o=e.parentId,s=e.file?.title??"Folder";Q.removePlacement(n),Q.removeFolder(t);try{await Yl(t),Mn("folder","trashed",[t]),ic(`"${s}" moved to Trash`,async()=>{try{await $i(t,"folder");const i=await Te(o);Q.setFolderPlacements(o,i.placements),Mn("folder","untrashed",[t])}catch(i){console.error("[openstation] restore folder failed:",i)}})}catch(i){console.error("[openstation] deleteFolder failed:",i),Gi(i),Te(o).then(r=>{Q.setFolderPlacements(o,r.placements)})}}async function yw(e){if(e.length===0)return;if(e.length===1)return kN(e[0]);const t=new Set;for(const l of e)if(t.add(l.parentId),Q.removePlacement(l.id),l.file?.type==="folder"){const c=parseInt(l.file.ref,10);c&&Q.removeFolder(c)}const n=async()=>{for(const l of t)try{const c=await Te(l);Q.setFolderPlacements(l,c.placements)}catch(c){console.error("[openstation] files: re-hydrate failed:",c)}},o=await Promise.allSettled(e.map(async l=>{if(l.file?.type==="folder"){const c=parseInt(l.file.ref,10);if(!c)throw new Error("folder placement without a folder id");return await Yl(c),{id:c,kind:"folder",restoreId:c,restoreKind:"folder"}}return await Vl(l.id),{id:l.id,kind:l.file?.type==="shortcut"?"shortcut":"placement",restoreId:l.id,restoreKind:"placement"}})),s=[];let i=0;for(const l of o)l.status==="fulfilled"?s.push(l.value):(i+=1,console.error("[openstation] trash (bulk) failed for one item:",l.reason));if(i>0&&n(),s.length===0){Gi(o.find(l=>l.status==="rejected")?.reason);return}for(const l of["placement","shortcut","folder"]){const c=s.filter(d=>d.kind===l).map(d=>d.id);c.length>0&&Mn(l,"trashed",c)}const r=s.length===1?"item":"items",a=i>0?`${s.length} ${r} moved to Trash · ${i} could not be moved`:`${s.length} ${r} moved to Trash`;ic(a,async()=>{const l=await Promise.allSettled(s.map(u=>$i(u.restoreId,u.restoreKind)));await n();const c=s.filter((u,f)=>l[f].status==="fulfilled"),d=s.length-c.length;for(const u of l)u.status==="rejected"&&console.error("[openstation] restore (bulk) failed for one item:",u.reason);for(const u of["placement","shortcut","folder"]){const f=c.filter(p=>p.kind===u).map(p=>p.id);f.length>0&&Mn(u,"untrashed",f)}d>0&&Gi(new Error(`${d} of ${s.length} items could not be restored.`))})}function kN(e){return e.file?.type==="folder"?ww(e):gw(e)}const SN=5,bw=e=>yw(e);async function AN(e){if(!(e.length>SN&&!await Nn({title:`Open ${e.length} items?`,message:`This opens ${e.length} windows at once.`,confirmLabel:"Open all"})))for(const t of e)await Uo(At(t.file))}function CN(e){const t=parseInt(e.file.ref,10);t&&sc({title:"Rename folder",label:"New name",submitLabel:"Rename",initialName:e.file.title,onSubmit:async n=>{const o=n.trim();if(!o||o===e.file.title)return;const s=e.file.title,i={...e,file:{...e.file,title:o}};Q.upsertPlacement(i);try{const r=Q.getState().folders.get(t)?.updatedAtMs??0,a=await Yg(t,{name:o},r);Q.upsertFolder(a);const l=await Te(e.parentId);Q.setFolderPlacements(e.parentId,l.placements)}catch(r){console.error("[openstation] rename folder failed:",r),Q.upsertPlacement({...e,file:{...e.file,title:s}})}}})}function IN(e){const t=parseInt(e.file.ref,10);if(!t)return;const n=window.wp?.os?.myWordpress,s=(typeof e.file.postType=="string"?e.file.postType:"post")==="page"?"pages":"posts";n?.openDetail({entityId:s,postId:t,postTitle:e.file.title||`#${t}`})}function xN(e){const t=[{id:"open",label:"Open",icon:"dashicons-external",sort:10,multi:!0,bulkLabel:i=>`Open ${i} items`,bulk:i=>AN(i),onClick:()=>{Uo(At(e.file))}}];if(e.file.type==="post"&&t.push({id:"navigate-into",label:"Navigate into",icon:"dashicons-category",sort:20,onClick:()=>IN(e)}),e.file.type==="folder")t.push({id:"rename-folder",label:"Rename…",icon:"dashicons-edit",sort:30,onClick:()=>CN(e)}),e.canTrash!==!1&&t.push({id:"delete-folder",multiId:"trash",label:"Move folder to Trash",icon:"dashicons-trash",sort:90,danger:!0,multi:!0,bulkLabel:i=>`Move ${i} items to Trash`,bulk:bw,onClick:()=>ww(e)});else{const i=zi(e),r=e.file.type==="shortcut";if(i||r){const a=i??e.file.ref;t.push({id:"hide-from-desktop",label:"Hide from desktop",icon:"dashicons-hidden",sort:90,multi:!0,bulkLabel:l=>`Hide ${l} items from desktop`,bulk:l=>{mw(l.map(c=>zi(c)??c.file.ref).filter(c=>!!c))},onClick:()=>mw([a])})}else e.canTrash!==!1&&t.push({id:"remove",multiId:"trash",label:"Move to Trash",icon:"dashicons-trash",sort:90,danger:!0,multi:!0,bulkLabel:a=>`Move ${a} items to Trash`,bulk:bw,onClick:()=>gw(e)})}const o=V("os.files.tile-menu",t,e);return Array.isArray(o)?o:t}const ze=16,LN=88,TN=104,NN=20,DN=16,It=LN+NN,Pn=TN+DN;function Go(e,t){const n=Math.max(0,Math.round((e-ze)/It)),o=Math.max(0,Math.round((t-ze)/Pn));return Wn(n,o)}function Wn(e,t){return{col:e,row:t,x:ze+e*It,y:ze+t*Pn}}function xt(e,t,n,o){const s=Go(e,t);if(!n.has(ve(s.col,s.row)))return s;const i=o?Math.max(1,Math.floor((o.clientHeight-ze)/Pn)):999;for(let r=0;r<999;r++)for(let a=0;a<i;a++)if(!n.has(ve(r,a)))return Wn(r,a);return s}function rc(e,t){const n=t?Math.max(1,Math.floor((t.clientWidth-ze)/It)):4,o=Math.max(1,n);for(let s=0;s<999;s++)for(let i=0;i<o;i++)if(!e.has(ve(i,s)))return Wn(i,s);return Wn(0,0)}function vw(e,t){const n=new Set;for(const o of e){const s=Go(o.x,o.y);n.add(ve(s.col,s.row))}return n}function ve(e,t){return`${e},${t}`}function RN(e){const t=String(e),{placementsByFolder:n}=Xe().state;for(const o of n.values())for(const s of o)if(s.file?.type==="folder"&&s.file.ref===t)return s.file}function ON(e,t){const n=RN(e);if(n)return At(n);const o=Xe().state.folders.get(e);return At({type:"folder",ref:String(e),title:o?.name||t||"Folder",icon:KT,previewUrl:"",exists:!0})}function _w(e){return e instanceof jl}function MN(e){const t=e.detail.actor.name||"Someone else",n=e.detail.current.parentName||"another folder";return e.detail.reason==="trashed"?"This item is in the recycle bin.":e.detail.reason==="forbidden"?"You no longer have access.":e.detail.reason==="gone"?"This item was deleted.":`${t} moved this to "${n}".`}function Ew(e){const t=MN(e),n=e.detail.current.parentId;let o;n>0&&(o={label:"View folder",onClick:()=>{Uo(ON(n,e.detail.current.parentName))}}),X({message:t,action:o,duration:7e3})}const jo=new Map;function kw(e,t){return jo.set(e,t),()=>{jo.get(e)===t&&jo.delete(e)}}function PN(e,t){const n=jo.get(e.type);return n?n.accept(e.data,t):!1}function WN(e,t,n){const o=jo.get(e.payload.type);return o?(o.onDrop(e,t,n),!0):!1}function $n(e){const t=e.placements;return Array.isArray(t)&&t.length>0?t:e.placement?[e.placement]:[]}function ji(e){const t=e.items;return Array.isArray(t)&&t.length>0?t:e.ref?[e]:[]}function $N(e){const t=e.file;if(!t)return;const n=parseInt(String(t.ref??""),10);if(!Number.isFinite(n)||n<=0)return;const o=String(t.title??"");if(t.type==="attachment"){const s=String(t.sourceUrl??t.previewUrl??"");return{kind:"attachment",id:n,url:s,title:o,alt:String(t.alt??""),mime:String(t.mime??""),thumbnailUrl:t.previewUrl?String(t.previewUrl):void 0}}if(t.type==="post")return{kind:"post",id:n,postType:String(t.postType??"post"),url:String(t.link??""),title:o};if(t.type==="user")return{kind:"user",id:n,url:String(t.link??""),title:o}}function Vo(){return window.wp?.os?.dragManager??null}const UN="os-files-layer";function FN(e){if(e!==0)return null;const t=window.openStationConfig,n=t?.filesBootPlacements;return!t||!Array.isArray(n)?null:(delete t.filesBootPlacements,n)}function Sw(e,t=0){const n=document.createElement("div");n.className=UN,n.setAttribute("role","list"),n.dataset.folderId=String(t),e.appendChild(n);let o="";const s=L=>{const F=Q.getState().placementsByFolder.get(t)??[],D=new Map;for(const A of F)A&&D.set(String(A.id),A);return L.map(A=>D.get(A)).filter(A=>!!A)},i=new Set,r=new Set,a=aL(n,{itemSelector:`.${re}`,background:e,surface:"files",scope:String(t),keyOf:L=>L.dataset.placementId??null,onChange:L=>{const F=s(L),D=F.length===1?F[0]:null;for(const A of i)try{A(D)}catch(R){console.error("[openstation] files: selection listener threw:",R)}for(const A of r)try{A(F)}catch(R){console.error("[openstation] files: selection listener threw:",R)}}}),l=()=>s(a.keys()),c=L=>{const F=new Map,D=new Set;let A=0;for(const U of L){if(!Pe(U))continue;const N=Wn(0,A);F.set(U.id,{x:N.x,y:N.y}),D.add(ve(N.col,N.row)),A+=1}const R=new Map;for(const U of L){if(F.has(U.id))continue;const N=Go(U.x,U.y),z=ve(N.col,N.row);if(!D.has(z)){D.add(z);continue}const Z=xt(U.x,U.y,D,e);D.add(ve(Z.col,Z.row)),R.set(U.id,{x:Z.x,y:Z.y})}return{pinnedSlots:F,displaced:R}},d=(L,F,D,A)=>{const R=D.get(F.id),U=A.get(F.id);R?ht(L,R.x,R.y):U?ht(L,U.x,U.y):ht(L,F.x,F.y)},u=(L,F,D)=>{const A=wN(L,t),R=F.get(L.id);if(R){if(ht(A,R.x,R.y),A.classList.add(`${re}--pinned`),Lw(A,L,a,l),Aw(L)){const N=Vo();N&&h.set(L.id,xw(N,A,L))}return A}const U=D.get(L.id);if(U&&ht(A,U.x,U.y),VN(A,L,t,a,l),Lw(A,L,a,l),L.file.type==="folder"){const N=parseInt(L.file.ref,10);if(N>0){const z=Vo();if(z){const Z=jN(z,A,N);m.set(L.id,Z)}}}else if(Aw(L)){const N=Vo();N&&h.set(L.id,xw(N,A,L))}return A},f=L=>{const F=new Map;for(const U of n.querySelectorAll("[data-placement-id]")){const N=U.dataset.placementId??"",z=parseInt(N,10);if(N===""||Number.isNaN(z)&&N!=="-0")return!1;F.set(z,U)}const D=new Set;for(const U of L)D.add(U.id);for(const U of L){const N=F.get(U.id);if(!N)continue;if(N.dataset.fileType!==U.file.type||N.dataset.fileRef!==U.file.ref||N.classList.contains(`${re}--pinned`)!==Pe(U))return!1}for(const[U,N]of F){if(D.has(U))continue;const z=m.get(U);if(z){try{z()}catch{}m.delete(U)}const Z=h.get(U);if(Z){try{Z()}catch{}h.delete(U)}N.remove()}const{pinnedSlots:A,displaced:R}=c(L);for(const U of L){const N=F.get(U.id);if(N){d(N,U,A,R),Iw(N,U);continue}n.appendChild(u(U,A,R))}return a.refresh(),T("os.files.grid-rendered",{folderId:t,count:L.length}),!0},p=L=>{const D=(L.placementsByFolder.get(t)??[]).slice().sort((N,z)=>{const Z=Pe(N)?0:1,se=Pe(z)?0:1;return Z-se}),A=BN(D);if(A===o||(o=A,GN(D,n,e))||f(D))return;n.replaceChildren();for(const[,N]of m)try{N()}catch{}m.clear();for(const[,N]of h)try{N()}catch{}h.clear();const{pinnedSlots:R,displaced:U}=c(D);for(const N of D)n.appendChild(u(N,R,U));a.refresh(),T("os.files.grid-rendered",{folderId:t,count:D.length})},g=[],m=new Map,h=new Map;let v=null,y=null;const x=L=>{if(v||L.payload.type!=="desktop-file")return;const F=document.createElement("div");F.className="os-files-drop-preview",F.setAttribute("aria-hidden","true"),n.appendChild(F),v=F;const D=L.payload.ghost,A=D?.offsetX??0,R=D?.offsetY??0,N=L.payload.data?.placement?.id,z=(oe,_e)=>{const pe=n.getBoundingClientRect(),ye=Math.max(0,oe-pe.left-A),he=Math.max(0,_e-pe.top-R),Ae=Q.getState().placementsByFolder.get(t)??[],Is=qo(Ae,N),Ue=xt(ye,he,Is,e);F.style.transform=`translate3d(${Ue.x}px, ${Ue.y}px, 0)`},Z=L.payload.source.getBoundingClientRect();z(Z.left+A,Z.top+R);const se=oe=>{z(oe.clientX,oe.clientY)};document.addEventListener("pointermove",se),y=se},M=()=>{y&&(document.removeEventListener("pointermove",y),y=null),v&&(v.remove(),v=null)},I={id:`os-files-canvas-${t}`,element:e,accept:L=>{if(L.type!=="desktop-file"&&L.type!=="shortcut")return PN(L,{folderId:t,host:e});if(t>0&&L.type==="desktop-file"){const F=L.data;for(const D of $n(F)){if(D.file?.type!=="folder")continue;const A=parseInt(D.file.ref,10);if(!Number.isNaN(A)&&Cw(A,t))return!1}}return!0},onEnter:L=>{e.setAttribute("data-files-drop-active",""),(L.payload.type==="desktop-file"||L.payload.type==="shortcut")&&x(L)},onLeave:()=>{e.removeAttribute("data-files-drop-active"),M()},onDrop:(L,F)=>{if(e.removeAttribute("data-files-drop-active"),M(),L.payload.type!=="desktop-file"&&L.payload.type!=="shortcut"){WN(L,F,{folderId:t,host:e});return}const D=n.getBoundingClientRect(),A=L.payload.ghost,R=A?.offsetX??0,U=A?.offsetY??0,N=Math.max(0,F.clientX-D.left-R),z=Math.max(0,F.clientY-D.top-U),Z=Q.getState().placementsByFolder.get(t)??[];if(L.payload.type==="desktop-file"){const se=L.payload.data,oe=$n(se),_e=new Set(oe.map(he=>he.id)),pe=qo(Z,_e),ye=xt(N,z,pe,e);pe.add(ve(ye.col,ye.row));for(const he of oe){let Ae=ye;if(he.id!==se.placement.id){const Ue=he.x-se.placement.x,ab=he.y-se.placement.y;Ae=xt(Math.max(0,ye.x+Ue),Math.max(0,ye.y+ab),pe,e),pe.add(ve(Ae.col,Ae.row))}const Is={...he,x:Ae.x,y:Ae.y,parentId:t};if(Q.upsertPlacement(Is),T("os.files.tile-manually-placed",{folderId:t,placementId:he.id}),Vi(he)){const Ue=zi(he);Ue&&zN(Ue,Ae.x,Ae.y);continue}Rn(he.id,{x:Ae.x,y:Ae.y,parentId:t},he.updatedAtMs).then(Ue=>{Q.upsertPlacement(Ue,"remote")}).catch(Ue=>{_w(Ue)?Ew(Ue):console.error("[openstation] files: drag persist failed",Ue),Q.upsertPlacement(he)})}return}if(L.payload.type==="shortcut"){const se=L.payload.data,oe=qo(Z);for(const _e of ji(se)){const pe=rc(oe,e);oe.add(ve(pe.col,pe.row)),Dn({parentId:t,type:_e.kind,ref:_e.ref,x:pe.x,y:pe.y}).then(ye=>{Q.upsertPlacement(ye),T("os.files.shortcut-dropped",{folderId:t,placement:ye})}).catch(ye=>{console.error("[openstation] shortcut drop failed:",ye)})}}}},W=Vo();if(W&&g.push(W.registerDropTarget(I)),!Q.getState().hydratedFolders.has(t)){const L=FN(t);L&&Q.setFolderPlacements(t,L)}p(Q.getState()),queueMicrotask(()=>O());const P=Q.subscribe(L=>{p(L),O()});let $=()=>{};const k=new Promise(L=>{$=L});Q.getState().hydratedFolders.has(t)?queueMicrotask($):Te(t).then(L=>{Q.setFolderPlacements(t,L.placements)}).catch(L=>{console.error("[openstation] files: failed to hydrate folder",t,L)}).finally(()=>{$()});const w=()=>{const L=e.clientWidth>0?e.clientWidth:4*It;return Math.max(1,Math.floor((L-ze)/It))},E=(L,F)=>{const D=L.slice();switch(F){case"name-asc":D.sort((A,R)=>A.file.title.localeCompare(R.file.title));break;case"name-desc":D.sort((A,R)=>R.file.title.localeCompare(A.file.title));break;case"date-asc":D.sort((A,R)=>A.updatedAtMs-R.updatedAtMs);break;case"date-desc":D.sort((A,R)=>R.updatedAtMs-A.updatedAtMs);break}return D},_=L=>{const F=Q.getState().placementsByFolder.get(t);if(!F||F.length===0)return;const D=F.filter(se=>Pe(se)),A=F.filter(se=>!Pe(se)),R=E(A,L),U=w(),N=new Set;for(let se=0;se<D.length;se+=1)N.add(ve(0,se));let z=0;const Z=()=>{for(;;){const se=Math.floor(z/U),oe=z%U;if(z+=1,!N.has(ve(oe,se)))return{col:oe,row:se}}};R.forEach((se,oe)=>{const _e=Z(),pe=ze+_e.col*It,ye=ze+_e.row*Pn,he={...se,x:pe,y:ye,sortOrder:oe};Q.upsertPlacement(he),!Vi(se)&&Rn(se.id,{x:pe,y:ye,sortOrder:oe}).catch(Ae=>{console.error("[openstation] files: sort persist failed",Ae)})})},O=()=>{const L=Q.getState().placementsByFolder.get(t);if(!L||L.length===0)return;const F=e.clientWidth>0?e.clientWidth:1/0,D=e.clientHeight>0?e.clientHeight:1/0;if(!L.some(oe=>oe.x+It>F||oe.y+Pn>D))return;const R=w(),U=L.filter(oe=>Pe(oe)),N=L.filter(oe=>!Pe(oe)),z=new Set;for(let oe=0;oe<U.length;oe+=1)z.add(ve(0,oe));let Z=0;const se=()=>{for(;;){const oe=Math.floor(Z/R),_e=Z%R;if(Z+=1,!z.has(ve(_e,oe)))return{col:_e,row:oe}}};for(const oe of N){const _e=se(),pe=ze+_e.col*It,ye=ze+_e.row*Pn,he=n.querySelector(`[data-placement-id="${oe.id}"]`);he&&ht(he,pe,ye)}};let H=e.clientWidth,G=e.clientHeight,j=null;return typeof ResizeObserver<"u"&&(j=new ResizeObserver(()=>{const L=e.clientWidth,F=e.clientHeight;L===H&&F===G||(H=L,G=F,O())}),j.observe(e)),{host:e,folderId:t,onSelectionChange(L){return i.add(L),()=>{i.delete(L)}},onSelectionChanged(L){return r.add(L),()=>{r.delete(L)}},getSelection:l,selectAll:()=>a.model.selectAll(),clearSelection:()=>a.model.clear(),sort:_,reflow:O,hydrated:k,dispose(){P(),j?.disconnect(),j=null;for(const L of g)try{L()}catch{}g.length=0;for(const L of m.values())try{L()}catch{}m.clear();for(const L of h.values())try{L()}catch{}h.clear(),a.destroy(),i.clear(),r.clear(),n.remove()}}}function BN(e){if(e.length===0)return"0";const t=[];for(const n of e)t.push(`${n.id}:${n.parentId}:${n.x}:${n.y}:${n.sortOrder}:${n.updatedAtMs}:${n.file.type}:${n.file.ref}:${n.file.title}:${n.file.icon}:${Pe(n)?1:0}`);return t.join("|")}function Pe(e){return!!e.file.pinned}function Vi(e){return EN(e)}const HN="desktop-mode-recycle-bin";function Aw(e){return!(e.file?.type==="folder"||e.file?.ref===HN)}function qo(e,t){const n=typeof t=="number"?new Set([t]):t??null,o=e.slice().sort((r,a)=>{const l=Pe(r)?0:1,c=Pe(a)?0:1;return l-c}),s=new Set;let i=0;for(const r of o)if(!n?.has(r.id))if(Pe(r))s.add(ve(0,i)),i+=1;else{const a=Go(r.x,r.y);s.add(ve(a.col,a.row))}return s}function Cw(e,t){if(t<=0||e<=0)return!1;if(e===t)return!0;const n=new Map,o=Q.getState();for(const a of o.placementsByFolder.values())for(const l of a){if(l.file?.type!=="folder")continue;const c=parseInt(l.file.ref,10);Number.isNaN(c)||c<=0||n.has(c)||n.set(c,l.parentId)}const s=new Set;let i=t,r=256;for(;i>0&&r-- >0;){if(i===e||s.has(i))return!0;s.add(i);const a=n.get(i);if(a===void 0)return!1;i=a}return!1}function zN(e,t,n){const o=window.wp?.os;if(!o?.getOsSettings||!o?.updateOsSettings)return;const s=o.getOsSettings().dockPromotedPositions??{};o.updateOsSettings({dockPromotedPositions:{...s,[e]:{x:t,y:n}}})}function GN(e,t,n){const o=Array.from(t.querySelectorAll("[data-placement-id]"));if(o.length!==e.length)return!1;const s=new Map;for(const c of o){const d=c.dataset.placementId??"",u=parseInt(d,10);if(d===""||Number.isNaN(u)&&d!=="-0")return!1;s.set(u,c)}for(const c of e){const d=s.get(c.id);if(!d||d.dataset.fileType!==c.file.type||d.dataset.fileRef!==c.file.ref||d.classList.contains(`${re}--pinned`)!==Pe(c))return!1}const i=new Map,r=new Set;let a=0;for(const c of e){if(!Pe(c))continue;const d=Wn(0,a);i.set(c.id,{x:d.x,y:d.y}),r.add(ve(d.col,d.row)),a+=1}const l=new Map;for(const c of e){if(i.has(c.id))continue;const d=Go(c.x,c.y),u=ve(d.col,d.row);if(!r.has(u)){r.add(u);continue}const f=xt(c.x,c.y,r,n);r.add(ve(f.col,f.row)),l.set(c.id,{x:f.x,y:f.y})}for(const c of e){const d=s.get(c.id);if(!d)continue;const u=i.get(c.id),f=l.get(c.id);u?ht(d,u.x,u.y):f?ht(d,f.x,f.y):ht(d,c.x,c.y),Iw(d,c)}return!0}function Iw(e,t){const n=hw(t);e.getAttribute("label")!==n&&e.setAttribute("label",n)}function xw(e,t,n){const o={placement:n};let s=null;return e.registerDropTarget({id:`os-files-tile-${n.id}-reject`,element:t,get acceptLabel(){return s?yN(s,o):void 0},accept:i=>(s=i.type,bN(i,o)),onEnter:()=>{t.classList.add(`${re}--drop-target`)},onLeave:()=>{t.classList.remove(`${re}--drop-target`)},onDrop:(i,r)=>{t.classList.remove(`${re}--drop-target`),vN(i,r,o)}})}function jN(e,t,n,o){const s={id:`os-files-folder-${n}-tile-${t.dataset.placementId??"?"}`,element:t,accept:i=>{if(i.type!=="desktop-file"&&i.type!=="shortcut")return!1;if(i.type==="desktop-file"){const r=i.data;for(const a of $n(r)){if(a.file.type==="folder"&&parseInt(a.file.ref,10)===n||a.parentId===n||Vi(a))return!1;if(a.file.type==="folder"){const l=parseInt(a.file.ref,10);if(!Number.isNaN(l)&&Cw(l,n))return!1}}}return!0},onEnter:()=>{t.classList.add(`${re}--drop-target`)},onLeave:()=>{t.classList.remove(`${re}--drop-target`)},onDrop:i=>{if(t.classList.remove(`${re}--drop-target`),i.payload.type==="desktop-file"){const r=i.payload.data,a=Q.getState().placementsByFolder.get(n)??[],l=qo(a);for(const c of $n(r)){const d=rc(l);l.add(ve(d.col,d.row)),Q.upsertPlacement({...c,x:d.x,y:d.y,parentId:n}),Rn(c.id,{x:d.x,y:d.y,parentId:n},c.updatedAtMs).then(u=>{Q.upsertPlacement(u,"remote")}).catch(u=>{_w(u)?Ew(u):console.error("[openstation] files: move-into-folder persist failed",u),Q.upsertPlacement(c)})}return}if(i.payload.type==="shortcut"){const r=i.payload.data,a=Q.getState().placementsByFolder.get(n)??[],l=qo(a);for(const c of ji(r)){const d=rc(l);l.add(ve(d.col,d.row)),Dn({parentId:n,type:c.kind,ref:c.ref,x:d.x,y:d.y}).then(u=>{Q.upsertPlacement(u),T("os.files.shortcut-dropped",{folderId:n,placement:u})}).catch(u=>{console.error("[openstation] shortcut drop into folder failed:",u)})}}}};return e.registerDropTarget(s)}function VN(e,t,n,o,s){e.addEventListener("pointerdown",i=>{if(i.button!==0||i.shiftKey||i.ctrlKey||i.metaKey)return;const r=Vo();if(!r)return;const l=Q.getState().placementsByFolder.get(n)?.find(f=>f.id===t.id)??t;parseFloat(e.style.left)||l.x,parseFloat(e.style.top)||l.y;const c=o.model.has(String(l.id)),d=c?s():[],u=d.length>1&&d.some(f=>f.id===l.id)?d:[l];if(!c){const f=()=>{document.removeEventListener("os.drag.start",f),o.model.set([String(l.id)])};document.addEventListener("os.drag.start",f);const p=()=>{document.removeEventListener("os.drag.start",f),document.removeEventListener("pointerup",p)};document.addEventListener("pointerup",p)}if(u.length>1){const f=[],p=()=>{for(const m of f)m.classList.remove(`${re}--dragging`);f.length=0,document.removeEventListener("os.drag.start",g),document.removeEventListener("os.drag.end",p),document.removeEventListener("pointerup",p)},g=()=>{for(const m of u){const h=e.parentElement?.querySelector(`[data-placement-id="${m.id}"]`);h&&h!==e&&(h.classList.add(`${re}--dragging`),f.push(h))}};document.addEventListener("os.drag.start",g),document.addEventListener("os.drag.end",p),document.addEventListener("pointerup",p)}r.start({payload:{type:"desktop-file",source:e,data:{placement:l,...u.length>1?{placements:u}:{},sourceFolderId:n,bridgePayload:$N(l)},ghost:{offsetX:i.clientX-e.getBoundingClientRect().left,offsetY:i.clientY-e.getBoundingClientRect().top,element:u.length>1?mN(e,u.length):void 0,hint:u.length>1?{accept:`Move ${u.length} items here`,reject:`Can’t drop ${u.length} items here`,neutral:`Moving ${u.length} items`}:void 0}},origin:i})})}function Lw(e,t,n,o){e.addEventListener("contextmenu",s=>{s.preventDefault(),s.stopPropagation();const i=Q.currentPlacement(t);n.model.has(String(i.id))||n.model.set([String(i.id)]);const r=o(),a=r.length>0?r:[i],l=fg(a,xN);_N({x:s.clientX,y:s.clientY},l,{placementIds:a.map(c=>c.id)})})}function qt(e){if(!Number.isFinite(e)||e<=0)return"0 B";const t=["B","KB","MB","GB","TB"];let n=e,o=0;for(;n>=1024&&o<t.length-1;)n/=1024,o++;const s=n>=100||o===0?0:1;return`${n.toFixed(s)} ${t[o]}`}const Un="os-folder-status-bar";function qN(e,t,n={}){const o=document.createElement("div");o.className=Un,o.setAttribute("role","status"),o.dataset.folderId=String(t),e.appendChild(o);const s=()=>{const a=Ct().placementsByFolder.get(t)??[],l=a.filter(p=>p.file.type==="folder").length,c=a.length-l;let d=0;for(const p of a)if(p.file.type==="upload"){const g=Number(p.file.sizeBytes??0);Number.isFinite(g)&&g>0&&(d+=g)}const u={folderId:t,selectedCount:n.selection?.count()??0,totals:{files:c,folders:l,total:a.length,bytes:d}},f=KN(u);YN(o,f)};s();const i=Jl(()=>s()),r=n.selection?.subscribe(()=>s());return{dispose(){i(),r?.(),o.remove()}}}function KN(e){const{folders:t,files:n,bytes:o}=e.totals,s=[{id:"count",label:Nw(n,"file","files")+(t>0?`, ${Nw(t,"folder","folders")}`:"")+(o>0?` (${qt(o)})`:""),align:"start",sort:10}];e.selectedCount>0&&s.push({id:"selection",label:`${e.selectedCount} selected`,align:"end",sort:10});const i=V("os.files.folder-window.status-bar",s,e);return Array.isArray(i)?i:s}function YN(e,t){const n=(i,r)=>{const a=typeof i.sort=="number"?i.sort:100,l=typeof r.sort=="number"?r.sort:100;return a!==l?a-l:i.label.localeCompare(r.label)},o=t.filter(i=>(i.align??"start")==="start").sort(n),s=t.filter(i=>i.align==="end").sort(n);e.replaceChildren(),e.appendChild(Tw("start",o)),e.appendChild(Tw("end",s))}function Tw(e,t){const n=document.createElement("div");n.className=`${Un}__cluster ${Un}__cluster--${e}`;for(const o of t)n.appendChild(XN(o));return n}function XN(e){const t=typeof e.onClick=="function",n=document.createElement(t?"button":"span");if(n.className=`${Un}__segment`,n.dataset.segmentId=e.id,t&&(n.type="button",n.addEventListener("click",s=>e.onClick(s))),e.icon){const s=document.createElement("span");s.className=`${Un}__icon dashicons ${e.icon.replace(/[^a-zA-Z0-9_-]/g,"")}`,s.setAttribute("aria-hidden","true"),n.appendChild(s)}const o=document.createElement("span");return o.className=`${Un}__label`,o.textContent=e.label,n.appendChild(o),n}function Nw(e,t,n){return`${e} ${e===1?t:n}`}const qi="os-icon-canvas-menu";let Ko=null,Ki=null,ac=null,Yo=null,Xo=null;function ZN(e,t){t.openOnBackgroundClick;const n=i=>{JN(i.target)||Dw(i.target)||(i.preventDefault(),s(i.clientX,i.clientY))};let o=0;const s=(i,r)=>{if(ac===e&&Ko){Kt();return}const a=QN(t),l=V("os.icon-canvas.menu",a,t.scope),c=Array.isArray(l)?l:a,d=++o;Os(()=>d===o,()=>eD(c,{x:i,y:r},e))};return e.addEventListener("contextmenu",n),{dispose:()=>{e.removeEventListener("contextmenu",n),Kt()}}}function JN(e){return e instanceof Element?e.closest(".os-file-tile")!==null:!1}function Dw(e){return e instanceof Element?e.closest(`.${qi}`)!==null:!1}function QN(e){const n=[{id:"sort-by",label:S("Sort by","desktop-mode"),icon:"dashicons-sort",sort:10,children:[{id:"sort-name-asc",label:S("Name (A → Z)","desktop-mode"),sort:10,onClick:()=>e.onSort("name-asc")},{id:"sort-name-desc",label:S("Name (Z → A)","desktop-mode"),sort:20,onClick:()=>e.onSort("name-desc")},{id:"sort-date-desc",label:S("Newest first","desktop-mode"),sort:30,onClick:()=>e.onSort("date-desc")},{id:"sort-date-asc",label:S("Oldest first","desktop-mode"),sort:40,onClick:()=>e.onSort("date-asc")}]}];return Array.isArray(e.extraItems)&&n.push(...e.extraItems),n}function Rw(e){return e.slice().sort((t,n)=>{const o=typeof t.sort=="number"?t.sort:100,s=typeof n.sort=="number"?n.sort:100;return o!==s?o-s:t.label.localeCompare(n.label)})}function eD(e,t,n){if(Kt(),e.length===0)return;ac=n;const o=Rw(e),s=document.createElement("os-context-menu");s.setAttribute("open",""),s.classList.add(qi),s.style.left=`${t.x}px`,s.style.top=`${t.y}px`;const i=new Map;for(const r of o){i.set(r.id,r);const a=Ow(s,r);Yi(r)&&a.addEventListener("mouseenter",()=>{Mw(r,a)})}s.addEventListener("os-context-menu-pick",r=>{const a=r.detail,l=i.get(a.id);if(l){if(Yi(l)){r.stopPropagation();const c=s.querySelector(`[data-menu-item-id="${l.id}"]`);c&&Mw(l,c);return}Kt(),l.onClick?.()}}),document.body.appendChild(s),Ko=s,vl(s),queueMicrotask(()=>{Yo=r=>{Dw(r.target)||Kt()},Xo=r=>{r.key==="Escape"&&Kt()},document.addEventListener("mousedown",Yo),document.addEventListener("keydown",Xo)})}function Ow(e,t){const n=document.createElement("os-context-menu-option");return n.dataset.menuItemId=t.id,n.setAttribute("value",t.id),t.heading&&n.setAttribute("heading",""),t.disabled&&n.setAttribute("disabled",""),t.icon&&n.setAttribute("icon",tD(t.icon)),Yi(t)&&n.setAttribute("has-children",""),n.textContent=t.label,e.appendChild(n),n}function Mw(e,t){if(Pw(),!Yi(e))return;const n=document.createElement("os-context-menu");n.setAttribute("open",""),n.classList.add(qi,`${qi}--flyout`);const o=new Map;for(const s of Rw(e.children??[]))o.set(s.id,s),Ow(n,s);n.addEventListener("os-context-menu-pick",s=>{const i=s.detail,r=o.get(i.id);r&&(s.stopPropagation(),Kt(),r.onClick?.())}),document.body.appendChild(n),Ki=n,mg(n,t)}function Yi(e){return Array.isArray(e.children)&&e.children.length>0}function Pw(){Ki&&(Ki.remove(),Ki=null)}function Kt(){Pw(),Ko&&(Ko.remove(),Ko=null),ac=null,Yo&&(document.removeEventListener("mousedown",Yo),Yo=null),Xo&&(document.removeEventListener("keydown",Xo),Xo=null)}function tD(e){return e.replace(/[^a-zA-Z0-9_-]/g,"")}const Yt="os-breadcrumbs";function nD(e,t,n={}){if(e.replaceChildren(),e.classList.add(Yt),n.onBack){const s=document.createElement("button");s.type="button",s.className=`${Yt}__back`,s.setAttribute("aria-label",S("Back","desktop-mode")),s.title=S("Back","desktop-mode");const i=document.createElement("span");i.className="dashicons dashicons-arrow-left-alt2",i.setAttribute("aria-hidden","true"),s.appendChild(i),n.backDisabled&&(s.disabled=!0);const r=n.onBack;s.addEventListener("click",()=>{s.disabled||r()}),e.appendChild(s)}const o=document.createElement("nav");o.className=`${Yt}__crumbs`,o.setAttribute("aria-label",S("Breadcrumb","desktop-mode")),t.forEach((s,i)=>{if(i>0){const l=document.createElement("span");l.className=`${Yt}__sep`,l.setAttribute("aria-hidden","true"),l.textContent="›",o.appendChild(l)}if(!s.onClick){const l=document.createElement("span");l.className=`${Yt}__crumb ${Yt}__crumb--current`,l.setAttribute("aria-current","page"),l.textContent=s.label,o.appendChild(l);return}const r=document.createElement("button");r.type="button",r.className=`${Yt}__crumb`,r.textContent=s.label;const a=s.onClick;r.addEventListener("click",()=>{a()}),o.appendChild(r)}),e.appendChild(o)}function Xi(e){const t=document.createElement("a");t.href=e,t.setAttribute("download",""),t.style.display="none",document.body.appendChild(t),t.click(),t.remove()}async function Zo(e,t={}){const n=await Be(e,{credentials:"same-origin",headers:{Accept:"application/json","X-WP-Nonce":oD(),...t.headers??{}},...t});if(!n.ok)throw new Error(`${n.status} ${n.statusText}`);return await n.json()}function oD(){return window.wp?.os?.config?.restNonce??""}function sD(){const e=window.wp?.os?.config;return e?.restUrl?e.restUrl.endsWith("/")?e.restUrl:e.restUrl+"/":`${window.location.origin}/wp-json/`}function Jo(e){return tt(sD(),e)}function iD(e,t){const n=V("os.files.preview",null,e);if(n instanceof HTMLElement){t.replaceChildren(n);return}if(e.accessGated){t.replaceChildren(rD(e));return}t.replaceChildren(wD()),aD(e).then(o=>{t.replaceChildren(o)}).catch(o=>{t.replaceChildren(yD(o))})}function rD(e){const t=document.createElement("div");t.className="os-files__access-gated";const n=document.createElement("div");n.className="os-files__access-gated-ring";const o=document.createElement("span");o.className="dashicons dashicons-lock os-files__access-gated-glyph",o.setAttribute("aria-hidden","true"),n.appendChild(o),t.appendChild(n);const s=document.createElement("h2");s.className="os-files__access-gated-title",s.textContent="No permission to view",t.appendChild(s);const i=document.createElement("p");i.className="os-files__access-gated-sub";const r=e.file.title||e.file.type;i.textContent=`You don’t have access to "${r}". The folder owner shared this folder with you, but your role doesn’t include permission to open this item.`,t.appendChild(i);const a=document.createElement("p");return a.className="os-files__access-gated-hint",a.textContent="Ask the owner to grant access on the underlying item, or to remove it from the shared folder.",t.appendChild(a),t}async function aD(e){const t=e.file;switch(t.type){case"post":return lD(t.ref,t);case"folder":return hD(t);case"shortcut":return mD(t);case"attachment":return fD(t.ref,t);case"upload":return pD(t);case"user":return cD(t.ref,t);case"term":return dD(t);case"comment":return uD(t.ref,t);case"bookmark":return gD(t);default:return Ze(t)}}async function lD(e,t){const n=parseInt(e,10);if(!n)return Ze(t);let o=null;for(const u of["wp/v2/posts","wp/v2/pages"])try{o=await Zo(Jo(`${u}/${n}?_fields=id,title,content,date,link,status`));break}catch{}if(!o)return Ze(t);const s=it(),i=document.createElement("h2");i.className="os-my-wordpress__article-title",i.textContent=Zi(o.title.rendered)||t.title||`#${n}`,s.appendChild(i);const r=document.createElement("p");r.className="os-my-wordpress__article-meta";const a=[];if(a.push(Ww(o.date)),o.status&&o.status!=="publish"&&a.push(o.status),r.textContent=a.join(" · "),s.appendChild(r),o.content?.rendered){const u=document.createElement("div");u.className="os-my-wordpress__article-content",u.innerHTML=o.content.rendered,s.appendChild(u)}const l=document.createElement("footer");l.className="os-my-wordpress__article-footer";const c=window.wp?.os?.myWordpress;if(c){const u=document.createElement("os-button");u.setAttribute("variant","secondary"),u.textContent=S("Explore details","desktop-mode"),u.title=S("See author, comments, categories, tags, attached media, and revisions for this entry.","desktop-mode"),u.addEventListener("click",()=>{const f=typeof t.postType=="string"?t.postType:"post";c.openDetail({entityId:f==="page"?"pages":"posts",postId:n,postTitle:Zi(o.title.rendered)||`#${n}`})}),l.appendChild(u)}const d=document.createElement("os-button");return d.setAttribute("variant","primary"),d.textContent=S("Open in editor","desktop-mode"),d.addEventListener("click",()=>{const u=window.wp?.os?.config?.adminUrl;if(!u)return;const f=`${u}post.php?post=${n}&action=edit`,p=window.wp?.os?.windowManager,m=(typeof t.postType=="string"?t.postType:"post")==="page"?"pages":"posts";p?.open({id:`${m}-edit-${n}`,url:f,title:Zi(o.title.rendered),icon:t.icon})}),l.appendChild(d),s.appendChild(l),s}async function cD(e,t){const n=parseInt(e,10);if(!n)return Ze(t);let o=null;try{o=await Zo(Jo(`desktop-mode/v1/user-stats/${n}`))}catch{return Ze(t)}const s=it("os-my-wordpress__user"),i=document.createElement("header");if(i.className="os-my-wordpress__user-header",o.profile.avatarUrl){const c=document.createElement("img");c.className="os-my-wordpress__user-avatar",c.src=o.profile.avatarUrl,c.alt="",i.appendChild(c)}const r=document.createElement("div");r.className="os-my-wordpress__user-headline";const a=document.createElement("h2");if(a.className="os-my-wordpress__article-title",a.textContent=o.profile.name||t.title||`#${n}`,r.appendChild(a),o.profile.roleLabels&&o.profile.roleLabels.length>0){const c=document.createElement("div");c.className="os-my-wordpress__user-roles";for(const d of o.profile.roleLabels){const u=document.createElement("span");u.className="os-my-wordpress__user-role",u.textContent=d,c.appendChild(u)}r.appendChild(c)}if(i.appendChild(r),s.appendChild(i),o.profile.description){const c=document.createElement("div");c.className="os-my-wordpress__user-bio",c.textContent=o.profile.description,s.appendChild(c)}const l=document.createElement("div");return l.className="os-my-wordpress__user-stats",l.appendChild(Fn(o.counts.posts.total.toLocaleString(),S("Posts","desktop-mode"))),l.appendChild(Fn(o.counts.pages.total.toLocaleString(),S("Pages","desktop-mode"))),l.appendChild(Fn(o.counts.commentsReceived.toLocaleString(),S("Comments received","desktop-mode"))),s.appendChild(l),s}async function dD(e){const t=parseInt(e.ref,10),n=typeof e.taxonomy=="string"&&e.taxonomy?e.taxonomy:"category";if(!t)return Ze(e);let o=null;try{o=await Zo(Jo(`desktop-mode/v1/term-stats/${n}/${t}`))}catch{return Ze(e)}const s=it(),i=document.createElement("h2");i.className="os-my-wordpress__article-title",i.textContent=o.profile.name||e.title||`#${t}`,s.appendChild(i);const r=document.createElement("p");if(r.className="os-my-wordpress__article-meta",r.textContent=o.profile.taxonomyLabel||o.profile.taxonomy,s.appendChild(r),o.profile.description){const l=document.createElement("div");l.className="os-my-wordpress__article-content",l.innerHTML=o.profile.description,s.appendChild(l)}const a=document.createElement("div");return a.className="os-my-wordpress__user-stats",a.appendChild(Fn(o.counts.posts.total.toLocaleString(),S("Posts","desktop-mode"))),a.appendChild(Fn(o.counts.commentsReceived.toLocaleString(),S("Comments","desktop-mode"))),a.appendChild(Fn(o.counts.distinctAuthors.toLocaleString(),S("Authors","desktop-mode"))),s.appendChild(a),s}async function uD(e,t){const n=parseInt(e,10);if(!n)return Ze(t);let o=null;try{o=await Zo(Jo(`desktop-mode/v1/comment-stats/${n}`))}catch{return Ze(t)}const s=it(),i=document.createElement("header");if(i.className="os-my-wordpress__user-header",o.author.avatarUrl){const d=document.createElement("img");d.className="os-my-wordpress__user-avatar",d.src=o.author.avatarUrl,d.alt="",i.appendChild(d)}const r=document.createElement("div");r.className="os-my-wordpress__user-headline";const a=document.createElement("h2");a.className="os-my-wordpress__article-title",a.textContent=o.author.name,r.appendChild(a);const l=document.createElement("p");l.className="os-my-wordpress__article-meta",l.textContent=`${Ww(o.comment.date)} · ${o.comment.status}`,r.appendChild(l),i.appendChild(r),s.appendChild(i);const c=document.createElement("div");if(c.className="os-my-wordpress__article-content",c.innerHTML=o.comment.rendered,s.appendChild(c),o.post){const d=document.createElement("div");d.className="os-my-wordpress__comment-post";const u=document.createElement("a");u.className="os-my-wordpress__comment-post-title",u.href=o.post.link,u.target="_blank",u.rel="noopener noreferrer",u.textContent=o.post.title,d.appendChild(u),s.appendChild(d)}return s}async function fD(e,t){const n=parseInt(e,10);if(!n)return Ze(t);let o=null;try{o=await Zo(Jo(`wp/v2/media/${n}?_fields=id,title,source_url,mime_type,alt_text,media_details`))}catch{return Ze(t)}const s=it(),i=document.createElement("h2");i.className="os-my-wordpress__article-title",i.textContent=Zi(o.title.rendered)||t.title||`#${n}`,s.appendChild(i);const r=document.createElement("p");if(r.className="os-my-wordpress__article-meta",r.textContent=o.mime_type,s.appendChild(r),o.mime_type.startsWith("image/")){const a=document.createElement("img");a.className="os-my-wordpress__article-hero";const l=o.media_details?.sizes;a.src=l?.large?.source_url??l?.medium?.source_url??o.source_url,a.alt=o.alt_text??"",s.appendChild(a)}else{const a=document.createElement("p"),l=document.createElement("a");l.href=o.source_url,l.textContent=o.source_url,l.target="_blank",l.rel="noopener noreferrer",a.appendChild(l),s.appendChild(a)}return s}function pD(e){const t=it(),n=document.createElement("h2");n.className="os-my-wordpress__article-title",n.textContent=e.title||S("Uploaded file","desktop-mode"),t.appendChild(n);const o=typeof e.mime=="string"?e.mime:"",s=typeof e.sizeBytes=="number"?e.sizeBytes:0,i=typeof e.kind=="string"?e.kind:"file",r=document.createElement("p");r.className="os-my-wordpress__article-meta",r.textContent=[o,s>0?qt(s):""].filter(Boolean).join(" · "),t.appendChild(r);const a=parseInt(e.ref,10),l=()=>{const c=document.createElement("p");return c.className="os-my-wordpress__article-meta os-files__no-preview",c.textContent=S("No preview available for this file type.","desktop-mode"),c};if(a>0&&i==="image"){const c=document.createElement("img");c.className="os-my-wordpress__article-hero",c.src=jt(a),c.alt=e.title||"",c.addEventListener("error",()=>{c.replaceWith(l())}),t.appendChild(c)}else if(a>0&&i==="video"){const c=document.createElement("video");c.className="os-my-wordpress__article-hero",c.controls=!0,c.preload="metadata",c.src=jt(a),c.addEventListener("error",()=>{c.replaceWith(l())}),t.appendChild(c)}else if(a>0&&i==="audio"){const c=document.createElement("audio");c.controls=!0,c.preload="metadata",c.src=jt(a),c.style.width="100%",c.addEventListener("error",()=>{c.replaceWith(l())}),t.appendChild(c)}else t.appendChild(l());if(a>0){const c=document.createElement("footer");c.className="os-my-wordpress__article-footer";const d=document.createElement("os-button");d.setAttribute("variant","primary"),d.textContent=S("Download","desktop-mode"),d.addEventListener("click",()=>{Xi(jt(a))}),c.appendChild(d),t.appendChild(c)}return t}function hD(e){const t=it(),n=document.createElement("h2");n.className="os-my-wordpress__article-title",n.textContent=e.title||S("(folder)","desktop-mode"),t.appendChild(n);const o=document.createElement("p");return o.className="os-my-wordpress__article-meta",o.textContent=S("Double-click to open.","desktop-mode"),t.appendChild(o),t}function mD(e){const t=it(),n=document.createElement("h2");n.className="os-my-wordpress__article-title",n.textContent=e.title||S("Shortcut","desktop-mode"),t.appendChild(n);const o=document.createElement("p");return o.className="os-my-wordpress__article-meta",o.textContent=S("Plugin shortcut. Double-click to open.","desktop-mode"),t.appendChild(o),t}function gD(e){const t=it(),n=document.createElement("h2");n.className="os-my-wordpress__article-title",n.textContent=e.title||S("Bookmark","desktop-mode"),t.appendChild(n);const o=typeof e.url=="string"?e.url:"";if(o){const s=document.createElement("a");s.href=o,s.textContent=o,s.target="_blank",s.rel="noopener noreferrer",t.appendChild(s)}return t}function Ze(e){const t=it(),n=document.createElement("h2");n.className="os-my-wordpress__article-title",n.textContent=e.title||e.type,t.appendChild(n);const o=document.createElement("p");if(o.className="os-my-wordpress__article-meta",o.textContent=le(S("Type: %s","desktop-mode"),e.type),t.appendChild(o),!e.exists){const s=document.createElement("p");s.className="os-my-wordpress__article-meta",s.textContent=S("The underlying entity is no longer available.","desktop-mode"),t.appendChild(s)}return t}function it(e=""){const t=document.createElement("article");return t.className="os-my-wordpress__article"+(e?" "+e:""),t}function Fn(e,t){const n=document.createElement("div");n.className="os-my-wordpress__user-stat";const o=document.createElement("span");o.className="os-my-wordpress__user-stat-value",o.textContent=e,n.appendChild(o);const s=document.createElement("span");return s.className="os-my-wordpress__user-stat-label",s.textContent=t,n.appendChild(s),n}function wD(){const e=document.createElement("div");e.className="os-my-wordpress__preview-loading";const t=document.createElement("os-spinner");return e.appendChild(t),e}function yD(e){const t=document.createElement("div");return t.className="os-my-wordpress__error",t.textContent=e instanceof Error?e.message:S("Unknown error.","desktop-mode"),t}function Zi(e){const t=document.createElement("div");return t.innerHTML=e,(t.textContent??"").trim()}function Ww(e){if(!e)return"";try{return new Date(e).toLocaleString()}catch{return e}}function $w(){const e=document.createElement("div");return e.className="os-my-wordpress__preview-empty",e.textContent=S("Select an item to preview it here.","desktop-mode"),e}function bD(e){const t=document.createElement("div");t.className="os-my-wordpress__preview-empty";const n=document.createElement("strong");n.textContent=le(S("%d items selected","desktop-mode"),e.length),t.appendChild(n);const o=new Map;for(const i of e){const r=i.file?.type||"item";o.set(r,(o.get(r)??0)+1)}const s=Array.from(o.entries()).sort((i,r)=>r[1]-i[1]||i[0].localeCompare(r[0])).map(([i,r])=>`${r} × ${i}`).join(" · ");if(s){const i=document.createElement("div");i.className="os-files-preview__selection-breakdown",i.textContent=s,t.appendChild(i)}return t}const Ji="desktop-mode-embed-",vD=800,_D=600,lc=360,cc=240,Qi=16,dc=new Map;function ED(e,t){const n=e.ref();if(!n)return;const o=window.wp?.os?.windowManager;if(!o)return;const s=t?.placement,i=s?.meta??null,r=s?`${Ji}${s.id}`:`${Ji}anon-${CD(n)}`,a=i?.name?.trim()??"",l=a!==""?a:e.title(),c={id:r,baseId:r,url:n,title:l,icon:e.icon(),minWidth:lc,minHeight:cc},d=i?.window,u=document.getElementById("os-area"),f=u?.clientWidth??window.innerWidth,p=u?.clientHeight??window.innerHeight;if(d&&Number.isFinite(d.width)&&Number.isFinite(d.height)){const{x:g,y:m,width:h,height:v}=AD(d,f,p);c.x=g,c.y=m,c.width=h,c.height=v}else c.width=Math.min(vD,Math.max(lc,f-Qi*2)),c.height=Math.min(_D,Math.max(cc,p-Qi*2));s&&d&&dc.set(r,{...d}),o.open(c)}let Uw=!1;function kD(){if(Uw)return;Uw=!0;const e=t=>{const o=t?.windowId;if(!o||!o.startsWith(Ji))return;const s=o.slice(Ji.length),i=parseInt(s,10);if(!i)return;const l=window.wp?.os?.windowManager?.getById?.(o)?.element;if(!l)return;const c={x:l.offsetLeft,y:l.offsetTop,width:l.offsetWidth,height:l.offsetHeight},d=dc.get(o);d&&d.x===c.x&&d.y===c.y&&d.width===c.width&&d.height===c.height||(dc.set(o,c),SD(i,c))};K(b.WINDOW_DRAG_END,"os-embed-persist",e),K(b.WINDOW_RESIZE_END,"os-embed-persist",e)}async function SD(e,t){try{const i={...(await Te(0)).placements.find(r=>r.id===e)?.meta??{},window:t};await Rn(e,{meta:i})}catch(n){console.warn("[openstation] embed window persist failed:",n)}}function AD(e,t,n){const o=Math.max(lc,Math.min(e.width,t-Qi)),s=Math.max(cc,Math.min(e.height,n-Qi)),i=Math.max(0,Math.min(e.x,Math.max(0,t-o))),r=Math.max(0,Math.min(e.y,Math.max(0,n-s)));return{x:i,y:r,width:o,height:s}}function CD(e){let t=0;for(let n=0;n<e.length;n++)t=(Math.imul(t,31)+e.charCodeAt(n))%2147483647;return Math.abs(t).toString(36)}function Qo(){const t=window.wp?.os?.config?.adminUrl??"/wp-admin/";return t.endsWith("/")?t:`${t}/`}function Fw(e){const t=typeof e.shape.url=="string"?e.shape.url:"";if(!t)return"";try{const n=new URL(t,window.location.href);if(n.protocol!=="http:"&&n.protocol!=="https:")return""}catch{return""}return t}function ID(){He({id:"wp-post-editor",label:"Block Editor",types:["post"],isDefault:!0,sort:10,handler:{kind:"url",url:e=>`${Qo()}post.php?post=${encodeURIComponent(e.ref())}&action=edit`}}),He({id:"wp-media-editor",label:"Media editor",types:["attachment"],isDefault:!0,sort:10,handler:{kind:"url",url:e=>`${Qo()}post.php?post=${encodeURIComponent(e.ref())}&action=edit`}}),He({id:"agent-chat",label:S("Agent chat","desktop-mode"),types:["user"],isDefault:!0,sort:5,appliesTo:e=>e.shape.isAgent===!0,handler:{kind:"js",open:e=>{const t=e.shape;qg({id:Number.parseInt(t.ref,10),name:t.title,description:t.agentDescription??"",avatarUrl:t.previewUrl??""},"agents-open")}}}),He({id:"wp-user-profile",label:"User profile",types:["user"],isDefault:!0,sort:10,handler:{kind:"url",url:e=>`${Qo()}user-edit.php?user_id=${encodeURIComponent(e.ref())}`}}),He({id:"wp-term-editor",label:"Term editor",types:["term"],isDefault:!0,sort:10,handler:{kind:"url",url:e=>{const[t,n]=e.ref().split(":");return`${Qo()}term.php?taxonomy=${encodeURIComponent(t??"")}&tag_ID=${encodeURIComponent(n??"")}`}}}),He({id:"wp-comment-editor",label:"Comment editor",types:["comment"],isDefault:!0,sort:10,handler:{kind:"url",url:e=>`${Qo()}comment.php?action=editcomment&c=${encodeURIComponent(e.ref())}`}}),He({id:"desktop-mode-upload-download",label:"Download",types:["upload"],isDefault:!0,sort:10,handler:{kind:"js",open:e=>{const t=parseInt(e.ref(),10);t&&Xi(jt(t))}}}),He({id:"desktop-mode-folder-window",label:"Open folder",types:["folder"],isDefault:!0,sort:10,handler:{kind:"js",open:e=>{const t=parseInt(e.ref(),10);if(!t)return;const n=window.wp?.os?.windowManager;if(!n)return;const o=`os-folder-${t}`,s=Q.getState().folders.get(t),i=Number(window.openStationConfig?.currentUserId??0),r=!!s&&s.ownerId>0&&s.ownerId!==i,a=e.title(),l=r?`${a} · Shared`:a;n.open({id:o,baseId:o,url:`#folder-${t}`,title:l,icon:e.icon(),native:!0,render:c=>{c.replaceChildren(),c.classList.add("desktop-mode-folder-window");const d=[{folderId:t,title:e.title()}];let u=null;const f=document.createElement("header");c.appendChild(f);const p=document.createElement("div");p.style.cssText="flex:1 1 auto;min-height:0;display:flex;flex-direction:column;",c.appendChild(p);const g=()=>{const h=d.map((v,y)=>y===d.length-1?{label:v.title}:{label:v.title,onClick:()=>{d.length=y+1,m()}});nD(f,h,{onBack:()=>{d.length<=1||(d.pop(),m())},backDisabled:d.length<=1})},m=()=>{u?.(),u=null,p.replaceChildren();const h=document.createElement("div");h.className="os-folder-window__split",p.appendChild(h);const v=document.createElement("div");v.className="os-folder-window__layer",h.appendChild(v);const y=document.createElement("div");y.className="os-folder-window__preview",y.appendChild($w()),h.appendChild(y);const x=d[d.length-1],M=Sw(v,x.folderId),I=M.onSelectionChanged(k=>{if(k.length===0){y.replaceChildren($w());return}if(k.length>1){y.replaceChildren(bD(k));return}iD(k[0],y)}),W=k=>{if(!(k.target instanceof Element))return;const w=k.target.closest(".os-file-tile");if(!w||w.dataset.fileType!=="folder")return;const E=parseInt(w.dataset.fileRef??"",10);if(!E)return;k.preventDefault(),k.stopPropagation();const _=w.querySelector(".os-file-tile__label")?.textContent??`#${E}`;d.push({folderId:E,title:_}),m()};v.addEventListener("dblclick",W,!0);const P=ZN(v,{scope:`os-folder:${x.folderId}`,onSort:k=>M.sort(k),extraItems:[{id:"new-folder",label:"New folder",icon:"dashicons-portfolio",sort:5,onClick:()=>{sc({onSubmit:async k=>{const w=await Kl({name:k}),E=Q.getState().placementsByFolder.get(x.folderId)??[],_=vw(E),O=xt(ze,ze,_,v),H=await Dn({type:"folder",ref:String(w.id),parentId:x.folderId,x:O.x,y:O.y});Q.upsertFolder(w),Q.upsertPlacement(H)}})}}]}),$=qN(p,x.folderId,{selection:{count:()=>M.getSelection().length,subscribe:k=>M.onSelectionChanged(()=>k())}});u=()=>{I(),P.dispose(),$.dispose(),v.removeEventListener("dblclick",W,!0),M.dispose()},g()};m()},width:720,height:480,minWidth:360,minHeight:240})}}}),He({id:"desktop-mode-shortcut-opener",label:"Open shortcut",types:["shortcut"],isDefault:!0,sort:10,handler:{kind:"js",open:e=>{const t=e.shape,n=window.wp?.os;if(n){if(t.shortcutSystemTile&&n.getSystemTile){n.getSystemTile(t.shortcutSystemTile)?.onOpen();return}if(t.shortcutWindow&&n.openWindow){n.openWindow(t.shortcutWindow);return}if(t.shortcutUrl&&n.windowManager)try{const o=new URL(t.shortcutUrl,window.location.origin);if(o.origin!==window.location.origin){window.open(o.toString(),"_blank","noopener,noreferrer");return}if(Ge(o.toString()))return;const s=n.config?.adminUrl,i=s?ae(o.toString(),s):`desktop-icon-${e.ref()}`,r=tm(o.toString());n.windowManager.open({id:i,baseId:i,url:o.toString(),parentUrl:r?.url??o.toString(),title:e.title(),icon:e.icon(),submenu:r?.submenu,selfLabel:r?.selfLabel,multi:!!r?.multi})}catch{}}}}}),He({id:"browser-navigate",label:"Open in browser",types:["bookmark"],isDefault:!0,sort:10,handler:{kind:"js",open:e=>{const t=Fw(e);t&&window.open(t,"_blank","noopener,noreferrer")}}}),He({id:"desktop-mode-link-opener",label:"Open in browser",types:["link"],isDefault:!0,sort:10,handler:{kind:"js",open:e=>{const t=Fw(e);t&&window.open(t,"_blank","noopener,noreferrer")}}}),He({id:"desktop-mode-embed-opener",label:"Open as window",types:["embed"],isDefault:!0,sort:10,handler:{kind:"js",open:(e,t)=>{ED(e,t)}}})}const xD="os-file-associations";function LD(){Ip({id:xD,label:"File Associations",order:50,render(e){TD(e)}})}function TD(e){e.replaceChildren();const t=Wg();if(t.length===0){const i=document.createElement("p");i.className="os-file-associations__empty",i.textContent="No file types are registered.",e.appendChild(i);return}const n=document.createElement("p");n.className="os-file-associations__intro",n.textContent="Pick which app opens each kind of file when you double-click it on the desktop.",e.appendChild(n);const o=Fl(),s=document.createElement("div");s.className="os-file-associations__list",s.setAttribute("role","list");for(const i of t)s.appendChild(ND(i.type,i.label,o));e.appendChild(s)}function ND(e,t,n){const o=document.createElement("div");o.className="os-file-associations__row",o.setAttribute("role","listitem"),o.dataset.fileType=e;const s=document.createElement("label");s.className="os-file-associations__label",s.textContent=t,o.appendChild(s);const i=Bl(e);if(i.length===0){const c=document.createElement("span");return c.className="os-file-associations__none",c.textContent="No app available",o.appendChild(c),o}const r=Hl(e),a=n[e]??r?.id??"",l=document.createElement("os-select");l.setAttribute("value",a),l.setAttribute("aria-label",`Default app for ${t}`),l.className="os-file-associations__select",s.htmlFor=`assoc-${e}`,l.id=`assoc-${e}`;for(const c of i){const d=document.createElement("os-option");d.setAttribute("value",c.id),d.textContent=c.isDefault?`${c.label} (default)`:c.label,l.appendChild(d)}return l.addEventListener("os-pick",c=>{const d=c.detail?.value;if(!d)return;const u={...Fl(),[e]:d};Ug(u),Xg(u).catch(f=>{console.error("[openstation] saveAssociations failed:",f)})}),o.appendChild(l),o}function DD(){const e=window.openStationConfig,t=e?.filesBootFolders;return!e||!Array.isArray(t)?!1:(delete e.filesBootFolders,Fi(t),!0)}let uc=null;function Je(){return uc||(uc=ie("desktop-files/shares",()=>({byFolder:new Map,pending:[],sharesVersion:0,deniedFolders:new Set,deniedFiles:new Set}))),uc}function RD(e,t){const n=Je();n.state.byFolder.set(e,t),n.notify()}function OD(e){if(!e||typeof e.folderId!="number")return;const t=Je(),o=(t.state.byFolder.get(e.folderId)??[]).filter(s=>s.id!==e.id);o.push(e),t.state.byFolder.set(e.folderId,o),t.notify()}function MD(e,t){const n=Je(),o=n.state.byFolder.get(e)??[];n.state.byFolder.set(e,o.filter(s=>s.id!==t)),n.notify()}function PD(e,t){return e.id===t.id&&e.folderId===t.folderId&&e.capability===t.capability&&e.invitedAtMs===t.invitedAtMs&&e.folderName===t.folderName&&e.fileName===t.fileName&&e.ownerName===t.ownerName}function Bw(e){const t=Je(),n=new Map(t.state.pending.map(s=>[s.id,s]));let o=!1;for(const s of e){const i=s.targetType==="file"&&typeof s.folderId!="number"?{...s,folderId:0}:s;if(i.targetType==="file"){if(typeof i.fileId=="number"&&t.state.deniedFiles.has(i.fileId))continue}else if(t.state.deniedFolders.has(i.folderId))continue;const r=n.get(i.id);if(r){if(PD(r,i))continue;t.state.pending=t.state.pending.map(a=>a.id===i.id?i:a)}else t.state.pending.push(i);i.invitedAtMs>t.state.sharesVersion&&(t.state.sharesVersion=i.invitedAtMs),o=!0}o&&t.notify()}function er(e,t={}){const n=Je();n.state.pending=n.state.pending.filter(o=>o.id!==e),t.denied&&typeof t.folderId=="number"&&n.state.deniedFolders.add(t.folderId),t.denied&&typeof t.fileId=="number"&&n.state.deniedFiles.add(t.fileId),n.notify()}const WD=ce`:host{display:block;position:relative;font-size:13px}.input{width:100%;padding:8px 10px;background:var( --os-ui-input-bg,var( --os-ui-hover,rgba( 255,255,255,0.06 ) ) );color:inherit;border:1px solid var( --os-ui-border,rgba( 255,255,255,0.12 ) );border-radius:6px;font:inherit;box-sizing:border-box}.input:focus{outline:none;border-color:var( --os-ui-accent,#2271b1 );box-shadow:var( --os-ui-focus-ring-field,0 0 0 1px #2271b1,0 0 0 4px rgba( 34,113,177,0.18 ) )}.dropdown{background:var( --os-bg,#1d2327 );color:var( --os-fg,#fff );border:1px solid var( --os-ui-border,rgba( 255,255,255,0.18 ) );border-radius:6px;overflow:auto;z-index:11000;box-shadow:0 12px 32px rgba( 0,0,0,0.5 )}.empty.error{color:var( --os-ui-danger-hover,#ff8080 )}.item{display:flex;align-items:center;gap:10px;padding:8px 10px;cursor:pointer;border:0;background:transparent;color:inherit;width:100%;text-align:start;font:inherit}.item:hover,.item:focus{background:var( --os-ui-hover,rgba( 255,255,255,0.06 ) );outline:none}.avatar{width:24px;height:24px;border-radius:50%;flex:0 0 auto;background:var( --os-ui-hover,rgba( 255,255,255,0.1 ) )}.name{font-weight:500}.slug{opacity:0.6;font-size:12px}.empty{padding:12px;color:var( --os-ui-fg-muted,rgba( 255,255,255,0.5 ) );font-size:12px}`,gs=class gs extends Se{constructor(){super(...arguments),this._timer=null,this._abort=null,this._results=[],this._query="",this._open=!1,this._phase="idle",this._error="",this._dropdownStyle="",this._onScrollOrResize=()=>{},this._onInput=t=>{const n=t.target.value;this._query=n,this._scheduleSearch(n)},this._onFocus=()=>{if(this._results.length===0&&this._phase==="idle"){this._scheduleSearch(this._query);return}this._open=!0,this._positionDropdown(),this.requestUpdate()},this._onBlur=()=>{setTimeout(()=>{this._open=!1,this.requestUpdate()},150)},this._pick=t=>{this.emit("os-user-pick",{user:t}),this._results=[],this._open=!1,this._phase="idle",this._query="";const n=this.shadowRoot?.querySelector(".input");n&&(n.value=""),this.requestUpdate()}}connectedCallback(){super.connectedCallback(),this._onScrollOrResize=()=>{this._open&&(this._positionDropdown(),this.requestUpdate())},window.addEventListener("resize",this._onScrollOrResize),window.addEventListener("scroll",this._onScrollOrResize,!0)}disconnectedCallback(){this._timer&&clearTimeout(this._timer),this._abort&&this._abort.abort(),window.removeEventListener("resize",this._onScrollOrResize),window.removeEventListener("scroll",this._onScrollOrResize,!0)}_endpoint(){const t=this.getAttribute("endpoint");return t||window.openStationConfig?.filesUsersSearchUrl||""}_scheduleSearch(t){this._timer&&clearTimeout(this._timer),this._phase="loading",this._open=!0,this._positionDropdown(),this.requestUpdate(),this._timer=setTimeout(()=>this._runSearch(t),200)}async _runSearch(t){const n=this._endpoint();if(!n){this._phase="error",this._error="Search endpoint is not configured.",this._results=[],this._open=!0,this.requestUpdate();return}this._abort&&this._abort.abort();const o=new AbortController;this._abort=o;const s=this.getAttribute("exclude")||"",i=n+"?q="+encodeURIComponent(t)+"&exclude="+encodeURIComponent(s);try{const r={signal:o.signal,credentials:"same-origin"},a=await Be(i,r,{source:"desktop-mode/files-user-search",silent:!0});if(!a.ok)throw new Error(`HTTP ${a.status}`);const l=await a.json();this._results=l&&Array.isArray(l.users)?l.users:[],this._phase="ready",this._error="",this._open=!0}catch(r){if(r.name==="AbortError")return;this._results=[],this._phase="error",this._error=r.message||"Search failed.",this._open=!0}this._positionDropdown(),this.requestUpdate()}_positionDropdown(){const t=this.shadowRoot?.querySelector(".input");if(!t)return;const n=t.getBoundingClientRect(),o=n.bottom+4,s=n.left,i=n.width,a=window.innerHeight-n.bottom,l=n.top,c=Math.max(120,Math.min(280,Math.max(a,l)-16));a<200&&l>a?this._dropdownStyle=["position:fixed",`left:${s}px`,`top:${n.top-4-c}px`,`width:${i}px`,`max-height:${c}px`].join(";"):this._dropdownStyle=["position:fixed",`left:${s}px`,`top:${o}px`,`width:${i}px`,`max-height:${c}px`].join(";")}_dropdownContent(){if(this._phase==="loading")return Y`<div class="empty">Searching…</div>`;if(this._phase==="error")return Y`<div class="empty error">${this._error}</div>`;if(this._results.length===0){const t=this._query?"No matches.":"No users available.";return Y`<div class="empty">${t}</div>`}return this._results.map(t=>Y` |
| 74 |
<button |
| 75 |
type="button" |
| 76 |
class="item" |
| 77 |
role="option" |
| 78 |
@mousedown=${n=>n.preventDefault()} |
| 79 |
@click=${()=>this._pick(t)} |
| 80 |
> |
| 81 |
<img class="avatar" src=${t.avatarUrl} alt="" /> |
| 82 |
<div> |
| 83 |
<div class="name">${t.name}</div> |
| 84 |
<div class="slug">${t.slug}</div> |
| 85 |
</div> |
| 86 |
</button> |
| 87 |
`)}render(){const t=this.getAttribute("placeholder")||"Search users…";return Y` |
| 88 |
<input |
| 89 |
class="input" |
| 90 |
type="search" |
| 91 |
placeholder=${t} |
| 92 |
autocomplete="off" |
| 93 |
@input=${this._onInput} |
| 94 |
@focus=${this._onFocus} |
| 95 |
@blur=${this._onBlur} |
| 96 |
.value=${this._query} |
| 97 |
/> |
| 98 |
${this._open?Y` |
| 99 |
<div class="dropdown" role="listbox" style=${this._dropdownStyle}> |
| 100 |
${this._dropdownContent()} |
| 101 |
</div> |
| 102 |
`:Y``} |
| 103 |
`}};gs.props=["placeholder","exclude","endpoint"],gs.styles=[WD],gs.help=void 0;let fc=gs;Ie("os-user-search",fc);const $D=ce`:host{display:flex;flex-wrap:wrap;gap:6px;font-size:13px}.chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;background:var( --os-ui-hover,rgba( 255,255,255,0.06 ) );color:inherit;border:1px solid var( --os-ui-border,rgba( 255,255,255,0.12 ) );cursor:pointer;font:inherit}.chip:hover{background:var( --os-ui-hover,rgba( 255,255,255,0.12 ) )}.chip[ aria-pressed='true' ]{background:var( --wp-admin-theme-color,#2271b1 );border-color:var( --wp-admin-theme-color,#2271b1 );color:var( --os-ui-fg-on-accent,#fff )}.empty{color:var( --os-ui-fg-muted,rgba( 255,255,255,0.5 ) );font-size:12px}`,ws=class ws extends Se{constructor(){super(...arguments),this._onToggle=t=>{const n=!this._selectedSet().has(t);this.emit("os-role-toggle",{slug:t,selected:n})}}_selectedSet(){const t=this.getAttribute("selected")||"";return new Set(t.split(",").map(n=>n.trim()).filter(n=>n!==""))}_roles(){const t=this.getAttribute("roles");if(t)try{const n=JSON.parse(t);if(Array.isArray(n))return n}catch{}return window.openStationConfig?.shareEligibleRoles||[]}render(){const t=this._roles();if(t.length===0)return Y`<span class="empty">No eligible roles.</span>`;const n=this._selectedSet();return Y` |
| 104 |
${t.map(o=>{const s=n.has(o.slug);return Y` |
| 105 |
<button |
| 106 |
type="button" |
| 107 |
class="chip" |
| 108 |
aria-pressed=${s?"true":"false"} |
| 109 |
@click=${()=>this._onToggle(o.slug)} |
| 110 |
>${o.name}</button> |
| 111 |
`})} |
| 112 |
`}};ws.props=["selected","roles"],ws.styles=[$D],ws.help=void 0;let pc=ws;Ie("os-role-picker",pc);const UD=ce` ${ct}:host{display:inline-flex;position:relative;padding:3px;background:var( --os-ui-segmented-bg,var( --os-ui-hover,rgba( 0,0,0,0.05 ) ) );border-radius:8px;gap:2px}.os-segmented__thumb{position:absolute;top:3px;bottom:3px;left:0;width:var( --_thumb-w,0px );border-radius:6px;background-color:var( --os-ui-segmented-selected-bg,var( --os-ui-accent,#2271b1 ) );background-image:var( --os-ui-segmented-selected-image,none );background-size:220% 220%;background-position:22% 28%;background-repeat:no-repeat;transform:translateX( var( --_thumb-x,0px ) );pointer-events:none;opacity:0}:host( [ data-thumb ] ) .os-segmented__thumb{opacity:1}:host( [ data-thumb-ready ] ) .os-segmented__thumb{transition:transform var( --_holo-t-slow ) var( --_holo-spring ),width var( --_holo-t-slow ) var( --_holo-ease ),opacity var( --_holo-t-fast ) linear}@media ( prefers-reduced-motion:reduce ){:host( [ data-thumb-ready ] ) .os-segmented__thumb{transition-duration:1ms}}`,FD=ce` ${ct} ${ha}:host{flex:1 1 auto;min-width:0}button{appearance:none;display:block;width:100%;padding:6px 13px;background:transparent;border:0;font:inherit;font-size:13px;color:var( --os-ui-fg-muted,#646970 );cursor:pointer;border-radius:6px;transition:background-color var( --_holo-t ) ease,color var( --_holo-t ) ease,box-shadow var( --_holo-t ) ease,background-position var( --_holo-t ) ease;white-space:nowrap}button:hover{color:var( --os-ui-fg,#1d2327 )}button:focus-visible{outline:none;box-shadow:var( --_holo-focus )}:host( [ aria-checked='true' ] ) button{color:var( --os-ui-segmented-selected-fg,var( --os-ui-fg-on-accent,#fff ) );transition-duration:var( --_holo-t-fast )}:host( [ aria-checked='true' ] ) button::before{display:none}`,ys=class ys extends Se{render(){return this.setAttribute("role","radio"),Y` |
| 113 |
<button |
| 114 |
type="button" |
| 115 |
class="os-holo-sheen" |
| 116 |
@click=${()=>this._onPick()} |
| 117 |
> |
| 118 |
<slot></slot> |
| 119 |
</button> |
| 120 |
`}_onPick(){this.emit("os-segment-pick",{value:this.value})}};ys.props=["value"],ys.styles=[FD],ys.help=void 0;let hc=ys;Ie("os-segment",hc);const bs=class bs extends Se{constructor(){super(...arguments),this._resizeObserver=null}connectedCallback(){super.connectedCallback(),this.addEventListener("os-segment-pick",t=>{const n=t.detail;t.stopPropagation(),this.value=n.value,this.emit("os-pick",{value:n.value})}),typeof ResizeObserver<"u"&&(this._resizeObserver=new ResizeObserver(()=>this._placeThumb()),this._resizeObserver.observe(this))}disconnectedCallback(){this._resizeObserver?.disconnect(),this._resizeObserver=null}_placeThumb(){if(!this.shadowRoot?.querySelector(".os-segmented__thumb"))return;const n=this.value,o=Array.from(this.querySelectorAll(":scope > os-segment")).find(c=>c.getAttribute("value")===n);if(!o||this.offsetWidth===0){this.removeAttribute("data-thumb");return}const s=this.getBoundingClientRect(),i=s.width/this.offsetWidth,r=Math.abs(i-1)<.02?1:i;if(!(r>0))return;const a=o.getBoundingClientRect(),l=c=>`${Math.round(c*100)/100}px`;this.style.setProperty("--_thumb-x",l((a.left-s.left)/r)),this.style.setProperty("--_thumb-w",l(a.width/r)),this.setAttribute("data-thumb",""),this.hasAttribute("data-thumb-ready")||requestAnimationFrame(()=>this.setAttribute("data-thumb-ready",""))}set items(t){const n=this.querySelectorAll(":scope > os-segment");for(const i of Array.from(n))i.remove();for(const i of t){const r=document.createElement("os-segment");r.setAttribute("value",i.value),r.textContent=i.label,this.appendChild(r)}const o=this.value;!(o!==null&&t.some(i=>i.value===o))&&t.length>0?this.value=t[0].value:this.requestUpdate()}render(){const t=this.label||"";t&&this.setAttribute("aria-label",t),this.setAttribute("role","radiogroup");const n=this.value;return queueMicrotask(()=>{const o=this.querySelectorAll("os-segment");for(const s of Array.from(o)){const i=s.getAttribute("value");s.setAttribute("aria-checked",i===n?"true":"false")}this._placeThumb()}),Y`<span class="os-segmented__thumb" aria-hidden="true"></span |
| 121 |
><slot></slot>`}};bs.props=["value","label"],bs.styles=[UD],bs.help={title:"Segmented",summary:"iOS-style segmented radio group. Pill-shaped bar of equal-width <os-segment> children where exactly one is active.",status:"stable",props:[{name:"value",type:"string",description:"Currently selected segment value. Mirrored onto child aria-checked."},{name:"label",type:"string",description:"aria-label for the radiogroup."}],slots:[{name:"(default)",description:'<os-segment value="…"> children.'}],events:[{name:"os-pick",description:"Fires when the selected segment changes.",detail:"{ value: string }"}],cssProps:[{name:"--os-window-bg",description:"Pill background."},{name:"--os-ui-fg",description:"Active label colour."},{name:"--os-ui-fg-muted",description:"Inactive label colour."}],example:Y` |
| 122 |
<os-segmented value="md" label="Dock size"> |
| 123 |
<os-segment value="sm">Small</os-segment> |
| 124 |
<os-segment value="md">Medium</os-segment> |
| 125 |
<os-segment value="lg">Large</os-segment> |
| 126 |
</os-segmented> |
| 127 |
`};let mc=bs;Ie("os-segmented",mc);const BD=ce`:host{position:fixed;top:calc( var( --wp-admin--admin-bar--height,32px ) + 16px );inset-inline-end:16px;display:flex;flex-direction:column;gap:8px;z-index:calc( var( --os-z-fullscreen,99999 ) + 10 );pointer-events:none}`,HD=ce` ${ct}:host{display:flex;align-items:center;gap:12px;min-width:280px;max-width:420px;padding:10px 14px;background-color:var( --os-ui-toast-bg,var( --os-ui-modal-bg,#1d2327 ) );background-image:var( --os-ui-toast-bg-image,none );background-repeat:var( --os-ui-toast-bg-image-repeat,repeat );background-size:var( --os-ui-toast-bg-image-size,auto );background-position:var( --os-ui-toast-bg-image-position,center );color:var( --os-ui-fg-on-accent,#fff );border-radius:10px;border:1px solid var( --os-ui-border,rgba( 255,255,255,0.12 ) );box-shadow:0 10px 30px rgba( 0,0,0,0.4 ),0 2px 6px rgba( 0,0,0,0.18 ),inset 0 0 0 1px rgba( 255,255,255,0.04 );font-size:13px;line-height:1.4;opacity:0;transform:translateY( -10px ) scale( 0.97 );transition:opacity var( --_holo-t-fast ) linear,transform var( --_holo-t ) var( --_holo-spring );pointer-events:auto}:host( [ state='in' ] ){opacity:1;transform:translateY( 0 ) scale( 1 )}:host( [ state='out' ] ){opacity:0;transform:translateX( 16px ) scale( 0.97 );transition:opacity var( --_holo-t-fast ) linear,transform var( --_holo-t ) var( --_holo-ease )}.os-toast__label{flex:1}button[ hidden ]{display:none}button{flex-shrink:0;padding:4px 10px;border:none;border-radius:4px;background:var( --os-ui-hover,rgba( 255,255,255,0.12 ) );color:var( --os-ui-fg-on-accent,#fff );font:inherit;font-size:12px;font-weight:500;cursor:pointer;transition:background-color 0.12s ease}button:hover{background:var( --os-ui-scrim,rgba( 255,255,255,0.22 ) )}button:focus-visible{outline:2px solid var( --os-ui-border,rgba( 255,255,255,0.6 ) );outline-offset:2px}.os-toast__close{display:inline-flex;align-items:center;justify-content:center;padding:4px;border-radius:6px;background:transparent;color:var( --os-ui-fg-muted,rgba( 255,255,255,0.7 ) )}.os-toast__close:hover{background:var( --os-ui-hover,rgba( 255,255,255,0.14 ) );color:var( --os-ui-fg-on-accent,#fff )}@media ( prefers-reduced-motion:reduce ){:host{transition-duration:0.01ms}}`,ur=class ur extends Se{connectedCallback(){super.connectedCallback(),this.setAttribute("aria-live","polite")}render(){return Y`<slot></slot>`}};ur.styles=[BD],ur.help=void 0;let gc=ur;Ie("os-toast-container",gc);const vs=class vs extends Se{constructor(){super(...arguments),this._hovered=!1,this._focused=!1,this._onEnter=()=>{this._hovered=!0,this._syncHold()},this._onLeave=()=>{this._hovered=!1,this._syncHold()},this._onFocusIn=()=>{this._focused=!0,this._syncHold()},this._onFocusOut=t=>{const n=t.relatedTarget;n instanceof Node&&this._containsDeep(n)||(this._focused=!1,this._syncHold())}}connectedCallback(){super.connectedCallback(),this.hasAttribute("role")||this.setAttribute("role","status"),this.addEventListener("mouseenter",this._onEnter),this.addEventListener("mouseleave",this._onLeave),this.addEventListener("focusin",this._onFocusIn),this.addEventListener("focusout",this._onFocusOut)}disconnectedCallback(){this.removeEventListener("mouseenter",this._onEnter),this.removeEventListener("mouseleave",this._onLeave),this.removeEventListener("focusin",this._onFocusIn),this.removeEventListener("focusout",this._onFocusOut)}_containsDeep(t){let n=t;for(;n;){if(n===this)return!0;const o=n.parentNode;n=o instanceof ShadowRoot?o.host:o}return!1}_syncHold(){const t=this._hovered||this._focused;t!==this.hasAttribute("held")&&(t?this.setAttribute("held",""):this.removeAttribute("held"),this.emit("os-toast-hold",{held:t}))}render(){const t=this.action||"",n=this.hasAttribute("dismissible");return Y` |
| 128 |
<span class="os-toast__label"><slot></slot></span> |
| 129 |
<button |
| 130 |
type="button" |
| 131 |
?hidden=${!t} |
| 132 |
@click=${o=>this._onAction(o)} |
| 133 |
> |
| 134 |
${t} |
| 135 |
</button> |
| 136 |
<button |
| 137 |
type="button" |
| 138 |
class="os-toast__close" |
| 139 |
aria-label=${S("Dismiss")} |
| 140 |
?hidden=${!n} |
| 141 |
@click=${o=>this._onDismiss(o)} |
| 142 |
> |
| 143 |
<svg viewBox="0 0 14 14" width="12" height="12" aria-hidden="true" focusable="false"> |
| 144 |
<path |
| 145 |
d="M3 3 L11 11 M11 3 L3 11" |
| 146 |
stroke="currentColor" |
| 147 |
stroke-width="1.7" |
| 148 |
stroke-linecap="round" |
| 149 |
fill="none" |
| 150 |
></path> |
| 151 |
</svg> |
| 152 |
</button> |
| 153 |
`}_onAction(t){t.preventDefault(),t.stopPropagation(),this.emit("os-toast-action",{})}_onDismiss(t){t.preventDefault(),t.stopPropagation(),this.emit("os-toast-dismiss",{})}};vs.props=["action","state","dismissible"],vs.styles=[HD],vs.help={title:"Toast",summary:'Single transient notification. Message is slotted; fade-in / fade-out is CSS-driven by flipping the state attribute between "in" and "out". Usually created via the showToast() helper rather than authored by hand.',status:"stable",props:[{name:"action",type:"string",description:"Optional action button label. When set, a button renders on the right and emits os-toast-action on click."},{name:"state",type:"'in' | 'out'",description:'Drives the CSS fade transition. Set to "in" when rendered, flip to "out" before removal.'},{name:"dismissible",type:"boolean",description:"When set, a close (×) button renders on the right and emits os-toast-dismiss on click. Use for persistent toasts the user must be able to close."},{name:"held",type:"boolean (reflected, read-only)",description:"Set by the component while the pointer is over the toast or focus is inside it. showToast() pauses the auto-dismiss timer for as long as it is present. Do not set it by hand — pass `persistent` for a toast that should never expire."}],slots:[{name:"(default)",description:"Message text."}],events:[{name:"os-toast-action",description:"Fires when the action button is clicked.",detail:"{}"},{name:"os-toast-dismiss",description:"Fires when the close (×) button is clicked.",detail:"{}"},{name:"os-toast-hold",description:"Fires when the toast starts or stops being attended to — pointer over it, or focus inside it. showToast() pauses the auto-dismiss timer while held is true.",detail:"{ held: boolean }"}],example:Y` |
| 154 |
<os-toast state="in" action="Undo">Post moved to trash.</os-toast> |
| 155 |
`};let wc=vs;Ie("os-toast",wc);function Hw(e,t){const n=document.createElement("os-segmented");n.setAttribute("value",e),n.setAttribute("label","Capability"),n.style.setProperty("--os-ui-segmented-bg","rgba(255,255,255,0.06)"),n.style.setProperty("--os-window-bg","var(--wp-admin-theme-color, #2271b1)"),n.style.setProperty("--os-ui-fg","#fff"),n.style.setProperty("--os-ui-fg-muted","rgba(255,255,255,0.65)");const o=document.createElement("os-segment");o.setAttribute("value","read"),o.textContent="Read",n.appendChild(o);const s=document.createElement("os-segment");return s.setAttribute("value","write"),s.textContent="Read + Write",n.appendChild(s),n.addEventListener("os-pick",i=>{const r=i.detail;t(r.value)}),n}function yc(e,t,n={}){const o=document.createElement("os-button");o.setAttribute("variant","ghost"),o.setAttribute("aria-label",n.danger?"Remove":"Dismiss"),o.textContent=e;const s=n.danger?"#ff8080":"rgba(255,255,255,0.75)",i=n.danger?"1px solid rgba(255,128,128,0.45)":"1px solid rgba(255,255,255,0.18)";return o.style.setProperty("--os-ui-button-fg",s),o.style.setProperty("--os-ui-button-border",i),o.style.setProperty("--os-ui-button-padding","6px 12px"),o.style.setProperty("--os-ui-button-border-radius","7px"),o.style.setProperty("--os-ui-button-min-height","34px"),o.style.minWidth="34px",o.style.fontSize="18px",o.style.lineHeight="1",o.addEventListener("click",t),o}async function bc(e){const t=document.createElement("os-modal");t.setAttribute("open",""),t.setAttribute("size","lg"),t.setAttribute("title",`Share "${e.folderName}"`),document.body.appendChild(t);let n=[],o=[];const s=()=>{t.innerHTML="";const l=document.createElement("div");l.style.cssText="opacity:0.7;margin-bottom:14px;font-size:12px;",l.textContent=e.ownerName?`Owner: ${e.ownerName} — cannot be changed`:"Owner cannot be changed",t.appendChild(l);const c=document.createElement("div");c.style.cssText="display:flex;flex-direction:column;gap:6px;margin-bottom:14px;";const d=document.createElement("div");d.textContent="Add people",d.style.cssText="font-weight:600;",c.appendChild(d);const u=document.createElement("os-user-search"),f=n.filter(I=>I.principalType==="user").map(I=>I.principalRef).concat(o.filter(I=>I.kind==="user").map(I=>I.ref));u.setAttribute("exclude",f.join(",")),u.setAttribute("placeholder","Search users…"),u.addEventListener("os-user-pick",I=>{const W=I.detail;o.push({kind:"user",ref:String(W.user.id),label:W.user.name,cap:"read"}),s()}),c.appendChild(u),t.appendChild(c);const p=document.createElement("div");p.style.cssText="display:flex;flex-direction:column;gap:6px;margin-bottom:14px;";const g=document.createElement("div");g.textContent="Add roles",g.style.cssText="font-weight:600;",p.appendChild(g);const m=document.createElement("os-role-picker"),h=n.filter(I=>I.principalType==="role").map(I=>I.principalRef),v=o.filter(I=>I.kind==="role").map(I=>I.ref);if(m.setAttribute("selected",[...h,...v].join(",")),m.addEventListener("os-role-toggle",I=>{const W=I.detail,P=n.find($=>$.principalType==="role"&&$.principalRef===W.slug);if(P){W.selected||r(P);return}if(W.selected){const $=(window.openStationConfig?.shareEligibleRoles??[]).find(k=>k.slug===W.slug);o.push({kind:"role",ref:W.slug,label:$?$.name:W.slug,cap:"read"})}else o=o.filter($=>!($.kind==="role"&&$.ref===W.slug));s()}),p.appendChild(m),t.appendChild(p),o.length>0){const I=document.createElement("div");I.style.cssText="border:1px dashed rgba(255,255,255,0.18);border-radius:8px;padding:10px;margin-bottom:14px;";const W=document.createElement("div");W.textContent="New invites (not sent yet)",W.style.cssText="font-weight:600;margin-bottom:6px;font-size:12px;",I.appendChild(W);for(const $ of o){const k=document.createElement("div");k.style.cssText="display:flex;align-items:center;gap:8px;padding:4px 0;font-size:13px;";const w=document.createElement("span");w.textContent=$.kind==="role"?`Role: ${$.label}`:$.label,w.style.flex="1",k.appendChild(w);const E=Hw($.cap,O=>{$.cap=O});k.appendChild(E);const _=yc("×",()=>{o=o.filter(O=>!(O.kind===$.kind&&O.ref===$.ref)),s()});k.appendChild(_),I.appendChild(k)}const P=document.createElement("os-button");P.setAttribute("variant","primary"),P.textContent=`Send ${o.length} invite${o.length===1?"":"s"}`,P.style.marginTop="8px",P.addEventListener("click",async()=>{if(o.length===0)return;P.setAttribute("busy",""),P.setAttribute("disabled","");const $=o.slice();let k=0,w=null;for(const E of $)try{await Jg(e.folderId,{principalType:E.kind,principalRef:E.ref,capability:E.cap}),k++}catch(_){w=_;break}k>0&&(o=o.slice(k));try{await i()}catch{}X(w?{message:`Could not send invites: ${w.message}`}:{message:k===1?"Invite sent.":`${k} invites sent.`}),P.removeAttribute("busy"),P.removeAttribute("disabled"),s()}),I.appendChild(P),t.appendChild(I)}const y=document.createElement("div");if(y.textContent="Who has access",y.style.cssText="font-weight:600;margin:8px 0 6px;",t.appendChild(y),n.length===0){const I=document.createElement("div");I.textContent="Only you can see this folder.",I.style.cssText="opacity:0.6;font-size:12px;",t.appendChild(I)}else for(const I of n){const W=document.createElement("div");W.style.cssText="display:flex;align-items:center;gap:10px;padding:6px 0;border-bottom:1px solid rgba(255,255,255,0.04);";const P=document.createElement("div");if(P.style.flex="1",P.textContent=I.principalType==="role"?`Role: ${I.displayName}`:I.displayName,I.state==="pending"){const E=document.createElement("span");E.textContent=" · pending",E.style.cssText="opacity:0.6;font-size:12px;",P.appendChild(E)}else if(I.state==="denied"){const E=document.createElement("span");E.textContent=" · denied",E.style.cssText="color:#d63638;font-size:12px;",P.appendChild(E)}W.appendChild(P);const $=I.capability==="write"?"write":"read",k=Hw($,E=>{a(I,E)});W.appendChild(k);const w=yc("×",()=>{r(I)},{danger:!0});W.appendChild(w),t.appendChild(W)}const x=document.createElement("div");x.setAttribute("slot","footer"),x.style.display="flex",x.style.justifyContent="flex-end",x.style.gap="10px",x.style.flexWrap="wrap";const M=document.createElement("os-button");M.setAttribute("variant","secondary"),M.textContent="Done",M.addEventListener("click",()=>t.remove()),x.appendChild(M),t.appendChild(x)},i=async()=>{try{n=(await Zg(e.folderId)).shares,RD(e.folderId,n)}catch(l){X({message:`Could not load shares: ${l.message}`})}s()},r=async l=>{try{await ew(e.folderId,l.id),MD(e.folderId,l.id),await i(),X({message:"Access revoked."})}catch(c){X({message:`Could not revoke: ${c.message}`})}},a=async(l,c)=>{try{const d=await Qg(e.folderId,l.id,c);OD(d),await i()}catch(d){X({message:`Could not update capability: ${d.message}`})}};t.addEventListener("os-modal-cancel",()=>t.remove()),s(),await i()}async function zD(e){const t=document.createElement("os-modal");t.setAttribute("open",""),t.setAttribute("size","md"),t.setAttribute("title",`Share "${e.fileName}"`),document.body.appendChild(t);let n=[];const o=async()=>{try{n=(await sw(e.fileId)).shares}catch(i){X({message:`Could not load shares: ${i.message}`})}s()},s=()=>{t.innerHTML="";const i=document.createElement("div");i.style.cssText="opacity:0.7;margin-bottom:14px;font-size:12px;",i.textContent="People you share with can view and download this file. Only you can move, rename, or delete it.",t.appendChild(i);const r=document.createElement("div");r.textContent="Add people",r.style.cssText="font-weight:600;margin-bottom:6px;",t.appendChild(r);const a=document.createElement("os-user-search");a.setAttribute("exclude",n.map(u=>u.principalRef).join(",")),a.setAttribute("placeholder","Search users…"),a.addEventListener("os-user-pick",u=>{const f=u.detail;(async()=>{try{await iw(e.fileId,f.user.id),X({message:`Invite sent to ${f.user.name}.`})}catch(p){X({message:`Could not invite: ${p.message}`})}await o()})()}),t.appendChild(a);const l=document.createElement("div");if(l.textContent="Who has access",l.style.cssText="font-weight:600;margin:14px 0 6px;",t.appendChild(l),n.length===0){const u=document.createElement("div");u.textContent="Only you can see this file.",u.style.cssText="opacity:0.6;font-size:12px;",t.appendChild(u)}else for(const u of n){const f=document.createElement("div");f.style.cssText="display:flex;align-items:center;gap:10px;padding:6px 0;border-bottom:1px solid rgba(255,255,255,0.04);";const p=document.createElement("div");p.style.flex="1";const g=u.displayName;if(p.textContent=g||`User #${u.principalRef}`,u.state==="pending"){const v=document.createElement("span");v.textContent=" · pending",v.style.cssText="opacity:0.6;font-size:12px;",p.appendChild(v)}else if(u.state==="denied"){const v=document.createElement("span");v.textContent=" · denied",v.style.cssText="color:#d63638;font-size:12px;",p.appendChild(v)}f.appendChild(p);const m=document.createElement("span");m.textContent="Read + download",m.style.cssText="opacity:0.6;font-size:12px;",f.appendChild(m);const h=yc("×",()=>{(async()=>{try{await rw(e.fileId,u.id),X({message:"Access revoked."})}catch(v){X({message:`Could not revoke: ${v.message}`})}await o()})()},{danger:!0});f.appendChild(h),t.appendChild(f)}const c=document.createElement("div");c.setAttribute("slot","footer"),c.style.cssText="display:flex;justify-content:flex-end;gap:10px;flex-wrap:wrap;";const d=document.createElement("os-button");d.setAttribute("variant","secondary"),d.textContent="Done",d.addEventListener("click",()=>t.remove()),c.appendChild(d),t.appendChild(c)};t.addEventListener("os-modal-cancel",()=>t.remove()),s(),await o()}function zw(e){return new Promise(t=>{const n=document.createElement("os-modal");n.setAttribute("open",""),n.setAttribute("title",e.fileName?`${e.ownerName??"Someone"} shared "${e.fileName}" with you`:"File shared with you");const o=document.createElement("div");o.innerHTML=` |
| 156 |
<p style="margin: 0 0 12px;">Accept the invite to add this file to your desktop.</p> |
| 157 |
<p style="margin: 0; opacity: 0.75;">Access level: <strong>Read + download</strong></p> |
| 158 |
`,n.appendChild(o);const s=document.createElement("div");s.setAttribute("slot","footer"),s.style.cssText="display:flex;justify-content:flex-end;gap:10px;flex-wrap:wrap;";const i=document.createElement("os-button");i.setAttribute("variant","secondary"),i.textContent="Decide later",i.addEventListener("click",()=>{n.remove(),t("dismissed")});const r=document.createElement("os-button");r.setAttribute("variant","danger"),r.textContent="Deny",r.addEventListener("click",async()=>{r.setAttribute("busy",""),r.setAttribute("disabled","");try{await lw(e.fileId,e.id),Je().state.deniedFiles.add(e.fileId),Je().notify(),n.remove(),t("denied")}catch(l){X({message:`Could not deny: ${l.message}`}),r.removeAttribute("busy"),r.removeAttribute("disabled")}});const a=document.createElement("os-button");a.setAttribute("variant","primary"),a.textContent="Accept",a.addEventListener("click",async()=>{a.setAttribute("busy",""),a.setAttribute("disabled","");try{await aw(e.fileId,e.id);try{const l=await Te(0);pt(0,l.placements)}catch{}n.remove(),t("accepted")}catch(l){X({message:`Could not accept: ${l.message}`}),a.removeAttribute("busy"),a.removeAttribute("disabled")}}),s.appendChild(i),s.appendChild(r),s.appendChild(a),n.appendChild(s),n.addEventListener("os-modal-cancel",()=>{n.remove(),t("dismissed")}),document.body.appendChild(n)})}function Gw(e){return new Promise(t=>{const n=document.createElement("os-modal");n.setAttribute("open",""),n.setAttribute("title",e.folderName?`${e.ownerName??"Someone"} shared "${e.folderName}" with you`:"Folder shared with you");const o=document.createElement("div"),s=e.capability==="write"?"Read + Write":"Read";o.innerHTML=` |
| 159 |
<p style="margin: 0 0 12px;">Accept the invite to add this folder to your desktop.</p> |
| 160 |
<p style="margin: 0; opacity: 0.75;">Access level: <strong>${s}</strong></p> |
| 161 |
`,n.appendChild(o);const i=document.createElement("div");i.setAttribute("slot","footer"),i.style.display="flex",i.style.justifyContent="flex-end",i.style.gap="10px",i.style.flexWrap="wrap";const r=document.createElement("os-button");r.setAttribute("variant","secondary"),r.textContent="Decide later",r.addEventListener("click",()=>{n.remove(),t("dismissed")});const a=document.createElement("os-button");a.setAttribute("variant","danger"),a.textContent="Deny",a.addEventListener("click",async()=>{a.setAttribute("busy",""),a.setAttribute("disabled","");try{await nw(e.folderId,e.id),Je().state.deniedFolders.add(e.folderId),Je().notify(),n.remove(),t("denied")}catch(c){X({message:`Could not deny: ${c.message}`}),a.removeAttribute("busy"),a.removeAttribute("disabled")}});const l=document.createElement("os-button");l.setAttribute("variant","primary"),l.textContent="Accept",l.addEventListener("click",async()=>{l.setAttribute("busy",""),l.setAttribute("disabled","");try{await tw(e.folderId,e.id);try{const c=await Te(0);pt(0,c.placements)}catch{}n.remove(),t("accepted")}catch(c){X({message:`Could not accept: ${c.message}`}),l.removeAttribute("busy"),l.removeAttribute("disabled")}}),i.appendChild(r),i.appendChild(a),i.appendChild(l),n.appendChild(i),n.addEventListener("os-modal-cancel",()=>{n.remove(),t("dismissed")}),document.body.appendChild(n)})}const GD=Object.freeze(Object.defineProperty({__proto__:null,openFileShareModal:zD,openPendingFileInviteModal:zw,openPendingInviteModal:Gw,openShareSettingsModal:bc},Symbol.toStringTag,{value:"Module"}));function jw(){return Number(window.openStationConfig?.currentUserId??0)}function jD(e){window.wp?.os?.windowManager?.getById?.(e)?.close?.()}function vc(){const e=window.wp?.os?.getOsSettings?.();return e?e.foldersSharingEnabled!==!1:!0}function Vw(e){const t=Ct().folders.get(e);return t?Number(t.ownerId):0}function qw(e){if(typeof e!="string")return null;const t=/^os-folder-(\d+)$/.exec(e);return t?Number(t[1]):null}function VD(e){if(e.file.type!=="folder")return null;const t=Number(e.file.ref);return!Number.isFinite(t)||t<=0?null:t}function qD(e){return Number(e.file.ownerId??0)}function KD(){Vn("os.files.tile-menu","desktop-mode/folder-share",(e,t)=>{if(!vc())return e;const n=VD(t);if(n===null)return e;const o=Vw(n)||qD(t),s=jw();if(o===s){const r=!!t.file.shareSummary?.shared?"Manage sharing…":"Share folder…";e.push({id:"desktop-mode/folder-share",label:r,icon:"dashicons-share",sort:30,onClick:()=>{bc({folderId:n,folderName:t.file.title||`Folder ${n}`})}})}else o>0&&e.push({id:"desktop-mode/folder-leave",label:"Leave shared folder",icon:"dashicons-exit",sort:80,danger:!0,onClick:async()=>{if(await Nn({title:"Leave this folder?",message:"The folder will be removed from your desktop. The original and its contents are not deleted; the owner keeps them.",confirmLabel:"Leave",danger:!0}))try{await ow(n),Bo(t.id);try{const a=await Te(0);pt(0,a.placements)}catch{}const r=`os-folder-${n}`;jD(r),X({message:"You left the shared folder."})}catch(r){X({message:`Could not leave: ${r.message}`})}}});return e}),wi({id:"desktop-mode/folder-share",label:"Share folder",icon:"dashicons-share",placement:"right",order:50,match:e=>{if(!vc())return!1;const t=e.config.baseId??e.id,n=qw(t);return n===null?!1:Vw(n)===jw()},onClick:e=>{if(!vc())return;const t=e.config.baseId??e.id,n=qw(t);n!==null&&bc({folderId:n,folderName:e.config.title||`Folder ${n}`})}}),K("os.files.tile-rendered","desktop-mode/folder-share",e=>{const{tile:t,placement:n}=e;if(n.file.type!=="folder"||!n.file.shareSummary?.shared||t.querySelector(".os-file-tile__share-badge"))return;const s=document.createElement("span");s.className="os-file-tile__share-badge dashicons dashicons-share",s.setAttribute("aria-label","Shared folder"),s.title="Shared folder",s.style.cssText=["position:absolute","top:6px","inset-inline-end:6px","background:rgba(0,0,0,0.55)","color:#fff","border-radius:50%","width:18px","height:18px","font-size:12px","line-height:18px","text-align:center","pointer-events:none"].join(";"),t.appendChild(s)})}const Kw=new Set;function YD(){const e=window.wp?.os?.getOsSettings?.();return e?e.foldersSharingEnabled!==!1:!0}function XD(){const e=Je(),t=n=>{if(YD()){for(const o of n.pending)if(!Kw.has(o.id)){if(Kw.add(o.id),o.targetType==="file"&&typeof o.fileId=="number"){const s=o.fileId;zw({id:o.id,fileId:s,fileName:o.fileName,ownerName:o.ownerName}).then(i=>{i==="accepted"?er(o.id):i==="denied"&&er(o.id,{denied:!0,fileId:s})});continue}Gw({id:o.id,folderId:o.folderId,folderName:o.folderName,ownerName:o.ownerName,capability:o.capability}).then(s=>{s==="accepted"?er(o.id):s==="denied"&&er(o.id,{denied:!0,folderId:o.folderId})})}}};e.subscribe(t),t(e.state)}function ZD(){return Number(window.openStationConfig?.currentUserId??0)}function Yw(){return window.openStationConfig?.desktopStorage??{}}function JD(){const e=window.wp?.os?.getOsSettings?.();return e?e.foldersSharingEnabled!==!1:!0}function QD(e){if(e.file.type!=="upload")return null;const t=Number(e.file.ref);return Number.isFinite(t)&&t>0?t:null}function eR(){Vn("os.files.tile-menu","desktop-mode/uploads",(e,t)=>{if(t.file.type==="folder"&&Yw().zipAvailable){const i=Number(t.file.ref);return Number.isFinite(i)&&i>0&&e.push({id:"desktop-mode/folder-zip-download",label:"Download as .zip",icon:"dashicons-download",sort:45,onClick:()=>{Xi(uw(i))}}),e}const n=QD(t);if(n===null)return e;e.push({id:"desktop-mode/upload-download",label:"Download",icon:"dashicons-download",sort:40,onClick:()=>{Xi(jt(n))}});const o=Number(t.file.ownerId??0),s=ZD();return o===s&&JD()?e.push({id:"desktop-mode/upload-share",label:"Share file…",icon:"dashicons-share",sort:30,onClick:()=>{Promise.resolve().then(()=>GD).then(i=>{i.openFileShareModal({fileId:n,fileName:t.file.title||`File ${n}`})})}}):o>0&&o!==s&&t.parentId===0&&e.push({id:"desktop-mode/upload-leave",label:"Leave shared file",icon:"dashicons-exit",sort:80,danger:!0,onClick:async()=>{if(await Nn({title:"Leave this shared file?",message:"The file will be removed from your desktop. The owner keeps the original.",confirmLabel:"Leave",danger:!0}))try{await cw(n),Bo(t.id);try{const r=await Te(0);pt(0,r.placements)}catch{}X({message:"You left the shared file."})}catch(r){X({message:`Could not leave: ${r.message}`})}}}),e}),Vn("os.wallpaper-context-menu","desktop-mode/uploads",e=>(Yw().canUpload&&(e.push({id:"desktop-mode/upload-files",label:"Upload files…",icon:"dashicons-upload",sort:15,onClick:()=>Xw(!1)}),e.push({id:"desktop-mode/upload-folder",label:"Upload folder…",icon:"dashicons-portfolio",sort:16,onClick:()=>Xw(!0)})),e))}function Xw(e){const t=document.createElement("input");t.type="file",e?t.setAttribute("webkitdirectory",""):t.multiple=!0,t.style.display="none",document.body.appendChild(t),t.addEventListener("change",()=>{const n=t.files?Array.from(t.files):[];t.remove(),n.length!==0&&tR(n,e)}),t.click()}async function tR(e,t){const n=window.openStationConfig,o=n?.dropConfig??{enabled:!1,allowedMimes:[],maxSize:0},s=await Promise.resolve().then(()=>D1),{accepted:i,rejected:r}=s.partitionByPolicy(e,o);if(r.length>0&&X({message:r.length===1?r[0].message:`${r.length} files can't be uploaded.`}),i.length===0)return;const a=i.map(({file:c,mime:d})=>({file:c,mime:d,fields:s.defaultFields(c,d),relativePath:t?c.webkitRelativePath??"":""}));await(await Promise.resolve().then(()=>ib)).openUploadDialog({entries:a,context:{surface:"folder",folderId:0,x:0,y:0},mediaUrl:n?.mediaUrl??"",restNonce:n?.restNonce??"",filesUrl:n?.filesUrl,storage:n?.desktopStorage,forceDesktop:t,preferDesktop:!0,mediaMaxBytes:o.maxSize})}YT(),ID(),kD(),LD(),DD(),KD(),eR();const _c=window.openStationConfig?.serverPendingShares;Array.isArray(_c)&&_c.length>0&&Bw(_c),XD();const We={DesktopFile:Pg,registerType:Ve,unregisterType:BT,getType:HT,getTypes:Wg,resolve:At,subscribe:zT,registerOpener:He,unregisterOpener:GT,getOpener:jT,getOpeners:Fg,getOpenersForType:Bl,resolveOpener:Hl,subscribeOpeners:VT,getUserAssociations:Fl,open:Uo,registerTilePayloadHandler:Bi,rest:rN,store:{get:Xe,getState:Ct,subscribe:Jl,setFolderPlacements:pt,upsertPlacement:Ui,removePlacement:Bo,setFolders:Fi,upsertFolder:Xl,removeFolder:Zl}},Zw="__synthFromDockItem";function nR(e){let t=0;for(let n=0;n<e.length;n++)t=(t*31+e.charCodeAt(n))%2147483647;return-(t+1)}function Jw(e,t){const{id:n,title:o,icon:s}=e.kind==="dock-item"?e.item:e.tile,i=t[n];return{id:nR(n),parentId:0,x:i?i.x:0,y:i?i.y:0,sortOrder:9999,updatedAtMs:Date.now(),meta:{[Zw]:n},file:{type:"shortcut",ref:e.kind==="dock-item"?`dock-promoted:${n}`:n,title:o,icon:s,previewUrl:"",exists:!0,...e.kind==="dock-item"?{shortcutUrl:e.item.url}:{shortcutSystemTile:n}}}}function oR(){const e=window.wp?.os;return e?.getMenuItems?e.getMenuItems().map(o=>({id:o.id,title:o.title,icon:o.icon,url:o.url,badge:o.badge??0,submenu:o.submenu??[],isCore:o.isCore})):window.openStationConfig?.dockItems??[]}function sR(){const e=window.wp?.os;return typeof e?.listSystemTiles!="function"?[]:e.listSystemTiles().filter(t=>t.placeable)}function iR(){return window.openStationConfig?.desktopIcons??[]}let Ec=!1;const kc=new Map;function rR(e){const t=window.wp?.os;if(!t?.getOsSettings||!t?.updateOsSettings)return;const o={...t.getOsSettings().dockPromotedPositions??{}};let s=!1;for(const i of e)i in o&&(delete o[i],s=!0);s&&t.updateOsSettings({dockPromotedPositions:o})}function es(e,t={}){if(!Ec){Ec=!0;try{const n=oR(),o=iR(),i=We.store.getState().placementsByFolder.get(0)??[],r=new Map;for(const u of i){const f=(u.meta??null)&&typeof u.meta=="object"?u.meta[Zw]:null;typeof f=="string"&&r.set(f,u)}const a=new Map,l=new Set(o.map(u=>u.id));for(const u of i){const f=u?.file?.ref;typeof f=="string"&&l.has(f)&&a.set(f,u)}const c=new Set;for(const u of n){const f=Sn(u.id,"dock",e);(f==="desktop"||f==="both")&&(c.add(u.id),r.has(u.id)||We.store.upsertPlacement(Jw({kind:"dock-item",item:u},t)))}for(const u of sR()){const f=Sn(u.id,"dock",e);(f==="desktop"||f==="both")&&(c.add(u.id),r.has(u.id)||We.store.upsertPlacement(Jw({kind:"system-tile",tile:u},t)))}const d=[];for(const[u,f]of r)c.has(u)||(We.store.removePlacement(f.id),t[u]&&d.push(u));d.length>0&&rR(d);for(const u of o){const f=e[u.id],p=a.get(u.id);if(f==="dock"||f==="hidden"){p&&(kc.set(u.id,p),We.store.removePlacement(p.id));continue}if(!p){const g=kc.get(u.id);g&&(We.store.upsertPlacement(g),kc.delete(u.id))}}}finally{Ec=!1}}}function aR(e,t=()=>({})){queueMicrotask(()=>es(e(),t()));const n=We.store.subscribe(()=>{es(e(),t())}),o="desktop-mode/shortcuts-sync";return K(b.DOCK_ITEM_APPENDED,o,()=>{es(e(),t())}),()=>{n(),mr(b.DOCK_ITEM_APPENDED,o)}}const lR=ce`:host{display:inline-flex;position:relative;width:var( --os-ui-avatar-size,32px );height:var( --os-ui-avatar-size,32px );flex:0 0 auto;vertical-align:middle;line-height:0;perspective:calc( var( --os-ui-avatar-size,32px ) * 8 );--os-ui-avatar-tilt-x:0deg;--os-ui-avatar-tilt-y:0deg;--os-ui-avatar-hover:0;--os-ui-avatar-glare-x:50%;--os-ui-avatar-glare-y:50%}:host( [ hidden ] ){display:none}.os-avatar__tile{position:relative;width:100%;height:100%;border-radius:50%;overflow:hidden;background:var( --os-window-bg,#f0f0f1 );color:var( --os-ui-fg-on-accent,#fff );display:flex;align-items:center;justify-content:center;font-weight:700;font-size:calc( var( --os-ui-avatar-size,32px ) * 0.48 );line-height:1;letter-spacing:0;font-feature-settings:'tnum' 1;user-select:none;transform-style:preserve-3d;transform:rotateX( var( --os-ui-avatar-tilt-x ) ) rotateY( var( --os-ui-avatar-tilt-y ) ) scale( calc( 1 + var( --os-ui-avatar-hover ) * 0.07 ) );transition:transform 220ms cubic-bezier( 0.2,0.8,0.2,1 ),box-shadow 220ms cubic-bezier( 0.2,0.8,0.2,1 );box-shadow:inset 0 0 0 1px rgba( 255,255,255,calc( 0.18 + 0.22 * var( --os-ui-avatar-hover ) ) ),inset 0 0 0 calc( 1px + var( --os-ui-avatar-hover ) * 1px ) rgba( 0,0,0,calc( 0.08 + 0.04 * var( --os-ui-avatar-hover ) ) ),0 calc( 1px + var( --os-ui-avatar-hover ) * 8px ) calc( 6px + var( --os-ui-avatar-hover ) * 18px ) rgba( 0,0,0,calc( 0.08 + 0.18 * var( --os-ui-avatar-hover ) ) )}.os-avatar__tile::after{content:'';position:absolute;inset:0;border-radius:50%;background:radial-gradient( circle at var( --os-ui-avatar-glare-x ) var( --os-ui-avatar-glare-y ),var( --os-ui-scrim,rgba( 255,255,255,0.55 ) ) 0%,var( --os-ui-hover,rgba( 255,255,255,0 ) ) 55% );opacity:var( --os-ui-avatar-hover );mix-blend-mode:overlay;pointer-events:none;transition:opacity 220ms cubic-bezier( 0.2,0.8,0.2,1 )}.os-avatar__tile::before{content:'';position:absolute;inset:calc( var( --os-ui-avatar-hover ) * -3px );border-radius:50%;background:radial-gradient( circle at var( --os-ui-avatar-glare-x ) var( --os-ui-avatar-glare-y ),color-mix( in srgb,var( --os-ui-avatar-halo,rgb( 99,102,241 ) ) calc( 35% * var( --os-ui-avatar-hover ) ),transparent ) 0%,transparent 70% );filter:blur( 4px );pointer-events:none;z-index:-1;transition:inset 220ms cubic-bezier( 0.2,0.8,0.2,1 ),background 220ms}.os-avatar__tile img{width:calc( 100% + 2px );height:calc( 100% + 2px );margin:-1px;object-fit:cover;display:block;transform:translateZ( 1px )}.os-avatar__dot{position:absolute;bottom:0;inset-inline-end:0;width:calc( var( --os-ui-avatar-size,32px ) * 0.32 );height:calc( var( --os-ui-avatar-size,32px ) * 0.32 );min-width:8px;min-height:8px;border-radius:50%;box-sizing:border-box;border:2px solid var( --os-ui-avatar-dot-ring,var( --os-window-bg,#fff ) );background:var( --os-ui-avatar-dot-color,transparent );z-index:2}.os-avatar__dot--online{background:var( --os-ui-success-fg,#00a32a )}.os-avatar__dot--online::after{content:'';position:absolute;inset:-2px;border-radius:50%;border:1px solid var( --os-ui-success-fg,#00a32a );animation:os-avatar-presence 6s var( --os-ui-ease-out,cubic-bezier( 0.22,0.9,0.28,1 ) ) infinite;pointer-events:none}@keyframes os-avatar-presence{0%{opacity:0.6;transform:scale( 1 )}20%{opacity:0;transform:scale( 2.2 )}100%{opacity:0;transform:scale( 2.2 )}}.os-avatar__dot--inactive{background:var( --os-ui-warning-fg,#dba617 )}.os-avatar__dot--offline{background:var( --os-ui-fg-muted,#8c8f94 )}@media ( prefers-reduced-motion:reduce ){.os-avatar__dot--online::after{animation:none;opacity:0.6}.os-avatar__tile{transform:none;transition:box-shadow 200ms}.os-avatar__tile::after,.os-avatar__tile::before{display:none}}`,Qw={xs:20,sm:24,md:40,lg:64,xl:96},ey=new Set(["online","inactive","offline"]),_s=class _s extends Se{constructor(){super(...arguments),this._presenceHandler=null,this._imgFailed=!1,this._onPointerMove=null,this._onPointerEnter=null,this._onPointerLeave=null,this._tiltRaf=0,this._pendingTiltX="0deg",this._pendingTiltY="0deg",this._pendingGlareX="50%",this._pendingGlareY="50%"}connectedCallback(){super.connectedCallback(),this._maybeAttachPresenceListener(),this._attachHoverEffect()}disconnectedCallback(){this._presenceHandler&&(document.removeEventListener("os-presence-changed",this._presenceHandler),this._presenceHandler=null),this._detachHoverEffect()}attributeChangedCallback(t,n,o){super.attributeChangedCallback(t,n,o),t==="src"&&(this._imgFailed=!1),(t==="user-id"||t==="presence")&&this._maybeAttachPresenceListener()}render(){const t=this._attr("src"),n=this._attr("name")||"",o=this._attr("alt"),s=o!==null?o:n,i=this._attr("size"),r=this._resolveSize(i),a=this._presenceForRender(),l=this._attr("clickable")!==null;this.style.setProperty("--os-ui-avatar-size",`${r}px`);const c=t&&!this._imgFailed?"":this._initialsBg(n),d=t&&!this._imgFailed?Y`<img |
| 162 |
src=${t} |
| 163 |
alt=${s} |
| 164 |
@error=${()=>this._onImgError()} |
| 165 |
loading="lazy" |
| 166 |
/>`:this._initials(n),u=a?Y`<span |
| 167 |
class=${`os-avatar__dot os-avatar__dot--${a}`} |
| 168 |
aria-label=${this._presenceLabel(a)} |
| 169 |
></span>`:Y``;return l?Y` |
| 170 |
<button |
| 171 |
type="button" |
| 172 |
class="os-avatar__tile" |
| 173 |
aria-label=${s||"User"} |
| 174 |
style=${c?`background:${c};`:""} |
| 175 |
@click=${f=>this._onClick(f)} |
| 176 |
>${d}</button> |
| 177 |
${u} |
| 178 |
`:Y` |
| 179 |
<div |
| 180 |
class="os-avatar__tile" |
| 181 |
role="img" |
| 182 |
aria-label=${s||"User"} |
| 183 |
style=${c?`background:${c};`:""} |
| 184 |
>${d}</div> |
| 185 |
${u} |
| 186 |
`}_attr(t){return this.getAttribute(t)}_resolveSize(t){if(!t)return 32;if(t in Qw)return Qw[t];const n=Number(t);return Number.isFinite(n)&&n>0?n:32}_initials(t){const n=t.trim();return n?Array.from(n)[0]?.toUpperCase()??"?":"?"}_initialsBg(t){const n=fn(t);return`linear-gradient(135deg, hsl(${n} 62% 55%), hsl(${(n+24)%360} 58% 42%))`}_presenceForRender(){const t=this._attr("presence");return t&&ey.has(t)?t:null}_presenceLabel(t){switch(t){case"online":return"Online";case"inactive":return"Inactive";case"offline":return"Offline"}}_onImgError(){this._imgFailed=!0,this.requestUpdate()}_onClick(t){const n=this._attr("user-id"),o={userId:n!==null&&Number(n)||null,originalEvent:t};this.emit("os-avatar-click",o)}_attachHoverEffect(){typeof window<"u"&&window.matchMedia?.("(prefers-reduced-motion: reduce)").matches||(this._onPointerEnter=()=>{this.style.setProperty("--os-ui-avatar-hover","1")},this._onPointerLeave=()=>{this.style.setProperty("--os-ui-avatar-hover","0"),this._pendingTiltX="0deg",this._pendingTiltY="0deg",this._pendingGlareX="50%",this._pendingGlareY="50%",this._flushTilt()},this._onPointerMove=n=>{const o=this.getBoundingClientRect();if(o.width===0||o.height===0)return;const s=(n.clientX-o.left)/o.width-.5,i=(n.clientY-o.top)/o.height-.5,r=14;this._pendingTiltY=`${(s*r).toFixed(2)}deg`,this._pendingTiltX=`${(-i*r).toFixed(2)}deg`;const a=Math.max(0,Math.min(100,(s+.5)*100)),l=Math.max(0,Math.min(100,(i+.5)*100));this._pendingGlareX=`${a.toFixed(1)}%`,this._pendingGlareY=`${l.toFixed(1)}%`,this._tiltRaf||(this._tiltRaf=requestAnimationFrame(()=>this._flushTilt()))},this.addEventListener("pointerenter",this._onPointerEnter),this.addEventListener("pointerleave",this._onPointerLeave),this.addEventListener("pointermove",this._onPointerMove))}_flushTilt(){this._tiltRaf=0,this.style.setProperty("--os-ui-avatar-tilt-x",this._pendingTiltX),this.style.setProperty("--os-ui-avatar-tilt-y",this._pendingTiltY),this.style.setProperty("--os-ui-avatar-glare-x",this._pendingGlareX),this.style.setProperty("--os-ui-avatar-glare-y",this._pendingGlareY)}_detachHoverEffect(){this._onPointerMove&&(this.removeEventListener("pointermove",this._onPointerMove),this._onPointerMove=null),this._onPointerEnter&&(this.removeEventListener("pointerenter",this._onPointerEnter),this._onPointerEnter=null),this._onPointerLeave&&(this.removeEventListener("pointerleave",this._onPointerLeave),this._onPointerLeave=null),this._tiltRaf&&(cancelAnimationFrame(this._tiltRaf),this._tiltRaf=0)}_maybeAttachPresenceListener(){const t=this._attr("user-id"),n=this._attr("presence"),o=!!t&&!n;o&&!this._presenceHandler?(this._presenceHandler=s=>{const i=s.detail;i&&String(i.userId)===String(t)&&i.newStatus&&ey.has(i.newStatus)&&this.setAttribute("presence",i.newStatus)},document.addEventListener("os-presence-changed",this._presenceHandler)):!o&&this._presenceHandler&&(document.removeEventListener("os-presence-changed",this._presenceHandler),this._presenceHandler=null)}};_s.props=["src","alt","name","size","presence","userId","clickable"],_s.styles=[lR],_s.help=void 0;let Sc=_s;Ie("os-avatar",Sc);const cR=ce`:host{display:inline-flex;align-items:center;gap:6px;font-size:var( --os-ui-save-status-font-size,11px );line-height:1;color:var( --os-ui-save-status-fg,currentColor );vertical-align:middle;min-width:0;opacity:1;pointer-events:auto}.os-save-status__indicator{display:inline-flex;align-items:center;justify-content:center;width:var( --os-ui-save-status-size,12px );height:var( --os-ui-save-status-size,12px );border-radius:50%;flex-shrink:0;box-sizing:border-box;background:var( --os-ui-save-status-bg,transparent );border:2px solid var( --os-ui-save-status-idle-color,color-mix( in srgb,var( --wp-admin-theme-color,#2271b1 ) 55%,transparent ) );color:var( --wp-admin-theme-color,#2271b1 );transition:background-color 0.2s ease,border-color 0.2s ease,box-shadow 0.2s ease}:host( [ phase='pending' ] ) .os-save-status__indicator,:host( [ phase='saving' ] ) .os-save-status__indicator{background:var( --os-ui-save-status-bg,var( --wp-admin-theme-color,#2271b1 ) );border-color:transparent;color:var( --wp-admin-theme-color,#2271b1 );animation:os-save-status-pulse 1.2s ease-in-out infinite}:host( [ animation='modem' ][ phase='pending' ] ) .os-save-status__indicator,:host( [ animation='modem' ][ phase='saving' ] ) .os-save-status__indicator{background:var( --os-ui-save-status-bg,var( --wp-admin-theme-color,#2271b1 ) );border-color:transparent;color:var( --wp-admin-theme-color,#2271b1 );animation:os-save-status-modem-stutter 1.8s ease-in-out infinite,os-save-status-modem-glow 2.4s ease-in-out infinite}@keyframes os-save-status-modem-stutter{0%,4%{opacity:1}5%,30%{opacity:0.22}31%,36%{opacity:1}37%,39%{opacity:0.22}40%,44%{opacity:1}45%,67%{opacity:0.22}68%,76%{opacity:1}77%,100%{opacity:0.22}}@keyframes os-save-status-modem-glow{0%,12%{box-shadow:0 0 0 0 transparent}13%,22%{box-shadow:0 0 4px 0 currentColor}23%,50%{box-shadow:0 0 0 0 transparent}51%,58%{box-shadow:0 0 4px 0 currentColor}59%,84%{box-shadow:0 0 0 0 transparent}85%,94%{box-shadow:0 0 5px 0 currentColor}95%,100%{box-shadow:0 0 0 0 transparent}}@media ( prefers-reduced-motion:reduce ){:host( [ phase='pending' ] ) .os-save-status__indicator,:host( [ phase='saving' ] ) .os-save-status__indicator,:host( [ animation='modem' ][ phase='pending' ] ) .os-save-status__indicator,:host( [ animation='modem' ][ phase='saving' ] ) .os-save-status__indicator{animation:none;opacity:0.85}}:host( [ phase='saved' ] ) .os-save-status__indicator{background:var( --os-ui-save-status-saved-bg,var( --os-ui-success-fg,#1d6f42 ) );border-color:transparent;color:var( --os-ui-save-status-saved-bg,var( --os-ui-success-fg,#1d6f42 ) )}:host( [ phase='failed' ] ) .os-save-status__indicator{background:var( --os-ui-save-status-failed-bg,var( --os-ui-danger,#d63638 ) );border-color:transparent;color:var( --os-ui-save-status-failed-bg,var( --os-ui-danger,#d63638 ) );animation:os-save-status-pulse 0.8s ease-in-out 2}:host( [ variant='ring' ] ) .os-save-status__indicator{background:transparent}:host( [ variant='ring' ][ phase='pending' ] ) .os-save-status__indicator,:host( [ variant='ring' ][ phase='saving' ] ) .os-save-status__indicator{background:transparent;border-color:var( --os-ui-save-status-ring-color,var( --os-ui-save-status-bg,var( --wp-admin-theme-color,#2271b1 ) ) );animation:os-save-status-ring-pulse 1.6s var( --os-ui-ease-loop,ease-in-out ) infinite}:host( [ variant='ring' ][ phase='failed' ] ) .os-save-status__indicator{background:transparent;border-color:var( --os-ui-save-status-failed-bg,var( --os-ui-danger,#d63638 ) );animation:os-save-status-ring-alert 0.62s var( --os-ui-ease-out,ease-out ) 1}:host( [ variant='ring' ][ phase='failed' ] ) .os-save-status__glyph{color:var( --os-ui-save-status-failed-bg,var( --os-ui-danger,#d63638 ) )}:host( [ variant='ring' ][ phase='saved' ] ) .os-save-status__indicator{background:var( --os-ui-save-status-saved-bg,var( --wp-admin-theme-color,#2271b1 ) );border-color:transparent;animation:os-save-status-ring-land 0.42s var( --os-ui-ease-out,ease-out ) 1}:host( [ variant='ring' ][ phase='saved' ] ) .os-save-status__glyph,:host( [ variant='ring' ][ phase='failed' ] ) .os-save-status__glyph{animation:os-save-status-glyph-in 0.24s var( --os-ui-ease-out,ease-out ) 0.08s 1 backwards}@keyframes os-save-status-ring-pulse{0%,100%{opacity:0.45;scale:0.9}50%{opacity:1;scale:1}}@keyframes os-save-status-ring-land{0%{scale:0.82}55%{scale:1.06}100%{scale:1}}@keyframes os-save-status-ring-alert{0%{scale:0.9}25%{scale:1.08}50%{scale:0.98}75%{scale:1.04}100%{scale:1}}@keyframes os-save-status-glyph-in{0%{opacity:0;scale:0.4}100%{opacity:1;scale:1}}@media ( prefers-reduced-motion:reduce ){:host( [ variant='ring' ] ) .os-save-status__indicator,:host( [ variant='ring' ] ) .os-save-status__glyph{animation:none;opacity:1;scale:1}}@keyframes os-save-status-pulse{0%,100%{opacity:0.55;transform:scale( 0.9 )}50%{opacity:1;transform:scale( 1 )}}:host( [ mode='pill' ] ) .os-save-status{display:inline-flex;align-items:center;gap:6px;padding:2px 10px;border-radius:999px;background:var( --os-ui-save-status-pill-bg,transparent );font-weight:500;white-space:nowrap}:host( [ mode='pill' ][ phase='saving' ] ) .os-save-status,:host( [ mode='pill' ][ phase='pending' ] ) .os-save-status{background:var( --os-ui-save-status-pill-bg,var( --os-ui-hover,rgba( 0,0,0,0.04 ) ) );color:var( --os-ui-save-status-pill-fg,var( --os-ui-fg-muted,#50575e ) )}:host( [ mode='pill' ][ phase='saved' ] ) .os-save-status{background:var( --os-ui-save-status-pill-bg,rgba( 30,132,73,0.12 ) );color:var( --os-ui-save-status-pill-fg,var( --os-ui-success-fg,#1d6f42 ) )}:host( [ mode='pill' ][ phase='failed' ] ) .os-save-status{background:var( --os-ui-save-status-pill-bg,rgba( 214,54,56,0.12 ) );color:var( --os-ui-save-status-pill-fg,var( --os-ui-danger-hover,#a02622 ) )}.os-save-status__label{min-width:0;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host( [ phase='saved' ] ) .os-save-status__glyph,:host( [ phase='failed' ] ) .os-save-status__glyph{display:inline-block;color:var( --os-ui-fg-on-accent,#fff );width:calc( var( --os-ui-save-status-size,12px ) * 0.66 );height:calc( var( --os-ui-save-status-size,12px ) * 0.66 )}.os-save-status__glyph{display:none}.os-save-status__glyph svg{display:block;width:100%;height:100%}`,ty="os-settings-save-lifecycle",dR=2200,uR=6e3,Es=class Es extends Se{constructor(){super(...arguments),this._autoTimer=null,this._docListener=null}connectedCallback(){super.connectedCallback(),this.auto!==null&&this._installAutoListener()}disconnectedCallback(){this._removeAutoListener(),this._autoTimer!==null&&(window.clearTimeout(this._autoTimer),this._autoTimer=null)}attributeChangedCallback(t,n,o){if(super.attributeChangedCallback(t,n,o),(t==="auto"||t==="event")&&(this._removeAutoListener(),this.auto!==null&&this._installAutoListener()),t==="phase"){this._scheduleAutoClear();const s={phase:this.phase??"idle",error:this.error??void 0};this.emit("os-save-status-change",s)}}render(){const t=this.phase??"idle",n=this.mode??"dot",s=(this.error??"")||this._labelForPhase(t);return s?this.setAttribute("title",s):this.removeAttribute("title"),this.setAttribute("aria-live",t==="failed"?"assertive":"polite"),this.setAttribute("role",t==="failed"?"alert":"status"),Y` |
| 187 |
<span class="os-save-status"> |
| 188 |
<span class="os-save-status__indicator" aria-hidden="true"> |
| 189 |
<span class="os-save-status__glyph">${this._renderGlyph(t)}</span> |
| 190 |
</span> |
| 191 |
${n==="pill"?Y`<span class="os-save-status__label" |
| 192 |
>${this._labelForPhase(t)}</span |
| 193 |
>`:Y``} |
| 194 |
</span> |
| 195 |
`}_renderGlyph(t){return t==="saved"?fR():t==="failed"?pR():""}_labelForPhase(t){switch(t){case"pending":case"saving":return this["saving-label"]??"Saving…";case"saved":return this["saved-label"]??"Saved";case"failed":return(this.error??"")||"Couldn’t save";default:return this["idle-label"]??""}}_installAutoListener(){const t=this.event||ty;this._docListener=n=>{const o=n.detail;!o||typeof o.phase!="string"||(this.phase=o.phase,o.error?this.error=o.error:o.phase!=="failed"&&this.error&&this.removeAttribute("error"))},document.addEventListener(t,this._docListener)}_removeAutoListener(){if(!this._docListener)return;const t=this.event||ty;document.removeEventListener(t,this._docListener),this._docListener=null}_scheduleAutoClear(){this._autoTimer!==null&&(window.clearTimeout(this._autoTimer),this._autoTimer=null);const t=this.phase??"idle",n=this._autoClearMsFor(t);n<=0||(this._autoTimer=window.setTimeout(()=>{this._autoTimer=null,this.phase="idle"},n))}_autoClearMsFor(t){if(t==="saved"){const n=this["auto-clear-saved-ms"];return parseInt(n||"",10)||dR}if(t==="failed"){const n=this["auto-clear-failed-ms"];return parseInt(n||"",10)||uR}return 0}};Es.props=["phase","mode","variant","animation","auto","event","error","saving-label","saved-label","idle-label","auto-clear-saved-ms","auto-clear-failed-ms"],Es.styles=[cR],Es.help=void 0;let Ac=Es;Ie("os-save-status",Ac);function fR(){return Y` |
| 196 |
<svg |
| 197 |
viewBox="0 0 12 12" |
| 198 |
aria-hidden="true" |
| 199 |
focusable="false" |
| 200 |
fill="none" |
| 201 |
stroke="currentColor" |
| 202 |
stroke-width="2" |
| 203 |
stroke-linecap="round" |
| 204 |
stroke-linejoin="round" |
| 205 |
> |
| 206 |
<path d="M2.5 6 L5 8.5 L9.5 4" /> |
| 207 |
</svg> |
| 208 |
`}function pR(){return Y` |
| 209 |
<svg |
| 210 |
viewBox="0 0 12 12" |
| 211 |
aria-hidden="true" |
| 212 |
focusable="false" |
| 213 |
fill="currentColor" |
| 214 |
> |
| 215 |
<path |
| 216 |
d="M5 2 H7 V7 H5 z M5 8.5 H7 V10.5 H5 z" |
| 217 |
/> |
| 218 |
</svg> |
| 219 |
`}const hR=ce` ${ct} ${ma}:host{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var( --os-ui-fg,#1d2327 );min-width:0}:host( [ hidden ] ){display:none}.os-textarea__label{font-size:12px;color:var( --os-ui-fg-muted,#646970 )}textarea{appearance:none;-webkit-appearance:none;display:block;width:100%;min-width:0;box-sizing:border-box;padding:8px 10px;background:var( --os-window-bg,#fff );border:1px solid var( --os-ui-border,#dcdcde );border-radius:6px;font:inherit;font-size:13px;line-height:1.45;color:var( --os-ui-fg,#1d2327 );resize:vertical}textarea:disabled{opacity:0.55;cursor:not-allowed;background:var( --os-ui-hover,rgba( 0,0,0,0.03 ) )}textarea[ aria-invalid='true' ],textarea[ aria-invalid='true' ]:hover:not(:disabled ){border-color:var( --os-ui-danger,#d63638 )}textarea[ aria-invalid='true' ]:focus,textarea[ aria-invalid='true' ]:focus-visible{border-color:var( --os-ui-danger,#d63638 );box-shadow:0 0 0 1px var( --os-ui-danger,#d63638 ),0 0 0 4px rgba( 214,54,56,0.18 )}:host( [ auto-grow ] ) textarea{resize:none;overflow:hidden}`,ks=class ks extends Se{constructor(){super(...arguments),this._textareaEl=null}connectedCallback(){super.connectedCallback(),Kf(this)}render(){const t=this._attr("label")||"",n=this._attr("value")??"",o=this._attr("placeholder")||"",s=this._boolAttr("disabled"),i=this._boolAttr("readonly"),r=this._attr("aria-label")||t,a=this._attr("name")||"",l=Number(this._attr("rows"))||3,c=this._attr("maxlength"),d=this._attr("minlength"),u=this._boolAttr("invalid"),p=`${this.id||"os-unnamed"}__field`;return Y` |
| 220 |
${t?Y`<label class="os-textarea__label" for=${p}>${t}</label>`:Y``} |
| 221 |
<textarea |
| 222 |
id=${p} |
| 223 |
part="textarea" |
| 224 |
.value=${n} |
| 225 |
placeholder=${o} |
| 226 |
?disabled=${s} |
| 227 |
?readonly=${i} |
| 228 |
rows=${l} |
| 229 |
maxlength=${c??""} |
| 230 |
minlength=${d??""} |
| 231 |
name=${a} |
| 232 |
aria-invalid=${u?"true":"false"} |
| 233 |
aria-label=${r||""} |
| 234 |
@input=${g=>this._onInput(g)} |
| 235 |
@change=${g=>this._onChange(g)} |
| 236 |
@keydown=${g=>this._onKeyDown(g)} |
| 237 |
></textarea> |
| 238 |
`}_attr(t){return this.getAttribute(t)}_boolAttr(t){return this.getAttribute(t)!==null}_onInput(t){const n=t.target;this._textareaEl=n,this.setAttribute("value",n.value),this.emit("os-input-change",{value:n.value}),this._boolAttr("auto-grow")&&this._autosize(n)}_onChange(t){const n=t.target;this.emit("os-input-commit",{value:n.value})}_onKeyDown(t){if(this._boolAttr("submit-on-enter")&&t.key==="Enter"&&!t.shiftKey&&!t.altKey&&!t.metaKey&&!t.ctrlKey){t.preventDefault();const n=t.target;this.emit("os-submit",{value:n.value})}}_autosize(t){const n=Number(this._attr("max-rows"))||8,o=window.getComputedStyle(t),s=parseFloat(o.fontSize)||13,i=o.lineHeight,r=i==="normal"?s*1.45:parseFloat(i)||s*1.45,a=parseFloat(o.paddingTop)||0,l=parseFloat(o.paddingBottom)||0,c=r*n+a+l;t.style.height="auto";const d=Math.min(t.scrollHeight,c);t.style.height=`${d}px`}refreshAutosize(){this._textareaEl&&this._boolAttr("auto-grow")&&this._autosize(this._textareaEl)}focusInput(){(this.shadowRoot??this).querySelector("textarea")?.focus()}clear(){this.setAttribute("value","");const n=(this.shadowRoot??this).querySelector("textarea");n&&(n.value="",this._boolAttr("auto-grow")&&this._autosize(n))}};ks.props=["label","value","placeholder","disabled","readonly","ariaLabel","name","rows","maxlength","minlength","invalid","autoGrow","maxRows","submitOnEnter"],ks.styles=[hR],ks.help=void 0;let Cc=ks;Ie("os-textarea",Cc);const mR=ce`:host{display:inline-flex}button{display:flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;border:none;border-radius:var( --os-ui-btn-radius,5px );background-color:var( --os-ui-btn-bg,transparent );background-image:var( --os-ui-btn-bg-image,none );background-repeat:var( --os-ui-btn-bg-image-repeat,no-repeat );background-size:var( --os-ui-btn-bg-image-size,auto );background-position:var( --os-ui-btn-bg-image-position,center );color:var( --os-ui-btn-color,currentColor );cursor:pointer;transition:background-color 0.15s ease,color 0.15s ease,transform 80ms ease}button:active{transform:scale( 0.9 )}@media ( prefers-reduced-motion:reduce ){button:active{transform:none}}button:hover{color:var( --os-ui-btn-color-hover,currentColor );background-color:var( --os-ui-btn-bg-hover,var( --os-ui-hover,rgba( 0,0,0,0.06 ) ) )}button:focus-visible{color:var( --os-ui-btn-color-hover,currentColor );background-color:var( --os-ui-btn-bg-hover,var( --os-ui-hover,rgba( 0,0,0,0.06 ) ) );outline:2px solid var( --os-ui-btn-outline,currentColor );outline-offset:1px}:host( [ active ] ) button{color:var( --os-ui-btn-color-hover,currentColor );background-color:var( --os-ui-btn-bg-active,var( --os-ui-hover,rgba( 0,0,0,0.08 ) ) )}:host( [ danger ] ) button:hover{color:var( --os-ui-fg-on-accent,#fff );background-color:var( --os-ui-btn-danger-hover,var( --os-ui-danger,#d63638 ) )}svg{display:block;pointer-events:none;flex-shrink:0}svg:empty{display:none}.themed-icon{display:block;width:14px;height:14px;flex-shrink:0;pointer-events:none;background-color:var( --os-ui-btn-icon-color,currentColor )}::slotted( span ){line-height:1}::slotted( svg ){display:block}`,gR={minimize:'<path d="M3 6h6" stroke="currentColor" stroke-width="1.25" stroke-linecap="round"/>',maximize:'<rect x="3" y="3" width="6" height="6" rx="1" stroke="currentColor" stroke-width="1.25" fill="none"/>',fullscreen:'<path d="M4.5 2H2v2.5M10 4.5V2H7.5M4.5 10H2V7.5M10 7.5V10H7.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/>',"fullscreen-exit":'<path d="M2 4.5H4.5V2M7.5 2V4.5H10M2 7.5H4.5V10M7.5 10V7.5H10" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/>',detach:'<path d="M5 2H2.5v7.5H10V7M6.5 2H10v3.5M10 2L5.5 6.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/>',reload:'<g transform="translate(0.6 0.6) scale(0.021)" fill="currentColor"><path d="m504.554 233.704-76.447 91.467c-6.329 7.572-15.417 11.479-24.571 11.479a31.872 31.872 0 0 1-20.504-7.447l-91.467-76.447c-13.561-11.334-15.366-31.515-4.032-45.075s31.515-15.366 45.075-4.032l37.506 31.347c-10.274-74.891-74.668-132.774-152.337-132.774C132.984 102.223 64 171.207 64 256s68.984 153.777 153.777 153.777c17.673 0 32 14.327 32 32s-14.327 32-32 32c-58.17 0-112.859-22.653-153.991-63.785C22.653 368.859 0 314.17 0 256s22.653-112.859 63.786-153.992c41.132-41.132 95.821-63.785 153.991-63.785s112.859 22.653 153.992 63.785c32.517 32.516 53.471 73.508 60.829 117.991l22.849-27.339c11.334-13.56 31.515-15.364 45.075-4.032 13.56 11.335 15.365 31.516 4.032 45.076z"/></g>',close:'<path d="M3.25 3.25l5.5 5.5M3.25 8.75l5.5-5.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="round"/>',menu:'<circle cx="3" cy="6" r="1.2" fill="currentColor"/><circle cx="6" cy="6" r="1.2" fill="currentColor"/><circle cx="9" cy="6" r="1.2" fill="currentColor"/>'};function wR(e){const t=(e??"").trim();return t===""||t.length>4096||!/^(https?:\/\/|data:image\/)/i.test(t)||/['"()\\<>\s]/.test(t)?"":t}const Ss=class Ss extends Se{constructor(){super(...arguments),this._activateWired=!1}static get observedAttributes(){return[...super.observedAttributes,"aria-label"]}render(){const t=wR(this["icon-src"]||this.getAttribute("icon-src")||""),n=t?"":this.icon||"",o=gR[n]||"",s=this.getAttribute("aria-label")||"";return t?Y` |
| 239 |
<button type="button" aria-label="${s}"> |
| 240 |
<span |
| 241 |
class="themed-icon" |
| 242 |
aria-hidden="true" |
| 243 |
style="-webkit-mask: url('${t}') center / contain no-repeat; mask: url('${t}') center / contain no-repeat;" |
| 244 |
></span> |
| 245 |
<slot></slot> |
| 246 |
</button> |
| 247 |
`:Y` |
| 248 |
<button type="button" aria-label="${s}"> |
| 249 |
<svg |
| 250 |
width="14" |
| 251 |
height="14" |
| 252 |
viewBox="0 0 12 12" |
| 253 |
aria-hidden="true" |
| 254 |
focusable="false" |
| 255 |
></svg> |
| 256 |
<slot></slot> |
| 257 |
</button> |
| 258 |
<span data-svg-buffer style="display:none">${o}</span> |
| 259 |
`}connectedCallback(){super.connectedCallback(),queueMicrotask(()=>this._paintSvg()),queueMicrotask(()=>this._wireActivateEvent())}attributeChangedCallback(t,n,o){super.attributeChangedCallback(t,n,o),queueMicrotask(()=>this._paintSvg())}_paintSvg(){const t=this.shadowRoot;if(!t)return;const n=t.querySelector("svg"),o=t.querySelector("[data-svg-buffer]");if(n&&o){const s=o.textContent||"";n.innerHTML!==s&&(n.innerHTML=s)}}_wireActivateEvent(){if(this._activateWired)return;const t=this.shadowRoot;if(!t)return;const n=t.querySelector("button");n&&(this._activateWired=!0,n.addEventListener("click",()=>{this.dispatchEvent(new CustomEvent("os-button-activate",{bubbles:!0,composed:!0,cancelable:!0}))}))}};Ss.props=["icon","icon-src","active","danger"],Ss.styles=[mR],Ss.help=void 0;let Ic=Ss;Ie("os-window-button",Ic);const Xt=["butter","blush","sky","mint","lilac","peach"];function yR(e){return Xt.includes(e)?e:Xt[0]}function xc(e){return e.toLowerCase().replace(/[^a-z0-9_-]/g,"")||Xt[0]}function ny(e){const t=Xt.indexOf(yR(e));return Xt[(t+1)%Xt.length]}const oy="cubic-bezier(0.2, 0.7, 0.2, 1)",sy="cubic-bezier(0.5, 0, 0.9, 0.4)",bR="cubic-bezier(0.2, 0.7, 0.3, 1.15)";function Bn(){return typeof window.matchMedia=="function"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches}function rt(e,t,n){return typeof e.animate!="function"?Promise.resolve():e.animate(t,n).finished.then(()=>{}).catch(()=>{})}async function vR(e){const t=e.restRotation??0;if(Bn()){iy(e.rippleHost,400);return}const n=e.tempo??1,o=e.fallDistance??30;await rt(e.pin,[{opacity:0,transform:`translate(8px, ${-o}px) rotate(${t-16}deg) scale(1.9)`},{opacity:1,offset:.35},{opacity:1,transform:`translate(0, 0) rotate(${t}deg) scale(0.92)`}],{duration:170*n,easing:sy,fill:"forwards"}),iy(e.rippleHost,420*n);const s=rt(e.paper,[{transform:"scale(1) translateY(0) skewX(0)"},{transform:"scale(0.982) translateY(2px) skewX(0)",offset:.08},{transform:"scale(1.01) translateY(0) skewX(0.6deg)",offset:.32},{transform:"scale(0.996) translateY(0) skewX(-0.4deg)",offset:.55},{transform:"scale(1) translateY(0) skewX(0)"}],{duration:370*n,easing:"linear"}),i=rt(e.pin,[{transform:`rotate(${t}deg) scale(0.92)`},{transform:`rotate(${t+1.5}deg) scale(1.07)`,offset:.25},{transform:`rotate(${t-1}deg) scale(0.98)`,offset:.5},{transform:`rotate(${t}deg) scale(1)`}],{duration:370*n,easing:oy,fill:"forwards"});await Promise.all([s,i])}function iy(e,t){const n=document.createElement("span");n.className="os-pinned-note__ripple",n.setAttribute("aria-hidden","true"),e.appendChild(n),rt(n,[{boxShadow:"0 0 0 0 rgba(0, 0, 0, 0.28)",opacity:.35},{boxShadow:"0 0 0 26px rgba(0, 0, 0, 0)",opacity:0}],{duration:t,easing:"ease-out"}).then(()=>n.remove()),window.setTimeout(()=>n.remove(),t+100)}function _R(e){if(Bn())return{onPointerMove:()=>{},setBias:()=>{},stop:()=>{}};const t=14;let n=0,o=0,s=0,i=0,r=null,a=0,l=0,c=0,d=0,u=!0;const f=p=>{if(!u)return;const g=Math.min(.05,d?(p-d)/1e3:.016);d=p,p-a>80&&(l*=.85),s=Math.max(-14,Math.min(14,-l*.055))+i,o+=(-120*(n-s)-t*o)*g,n+=o*g,e.style.transform=`rotate(${n.toFixed(2)}deg)`,c=window.requestAnimationFrame(f)};return c=window.requestAnimationFrame(f),{onPointerMove(p){const g=performance.now();if(r!==null&&g>a){const m=(p-r)/(g-a)*16.7;l=l*.7+m*.3}r=p,a=g},setBias(p){i=p},stop(){u=!1,window.cancelAnimationFrame(c),e.style.transform=""}}}async function ER(e){if(Bn()){await rt(e.flyback,[{opacity:1},{opacity:0}],{duration:120,easing:"linear",fill:"forwards"});return}const t=e.swing?rt(e.swing,[{transform:"rotate(0deg)"},{transform:"rotate(9deg)",offset:.35},{transform:"rotate(-4deg)",offset:.7},{transform:"rotate(0deg)"}],{duration:330,easing:"linear",fill:"forwards"}):Promise.resolve(),n=rt(e.flyback,[{left:`${e.flyback.offsetLeft}px`,top:`${e.flyback.offsetTop}px`},{left:`${e.homeX}px`,top:`${e.homeY}px`}],{duration:330,easing:bR,fill:"forwards"});await Promise.all([n,t])}async function kR(e){if(Bn()){await rt(e.clone,[{opacity:1},{opacity:0}],{duration:150,easing:"linear",fill:"forwards"});return}e.pin&&rt(e.pin,[{transform:"translate(0, 0) rotate(0deg)",opacity:1},{transform:"translate(2px, -16px) rotate(-30deg)",opacity:0}],{duration:200,easing:oy,fill:"forwards"});const t=e.clone.getBoundingClientRect(),n=e.binX-(t.left+t.width/2),o=e.binY-(t.top+t.height/2),s="polygon(4% 8%, 38% 2%, 68% 7%, 96% 3%, 98% 42%, 92% 71%, 97% 94%, 60% 98%, 30% 93%, 3% 97%, 6% 62%, 2% 34%)",i="polygon(10% 14%, 42% 6%, 64% 12%, 90% 8%, 94% 38%, 86% 66%, 92% 88%, 58% 94%, 34% 86%, 10% 92%, 14% 58%, 8% 36%)";await rt(e.paper,[{transform:"translate(0, 0) scale(0.88) rotate(0deg)",borderRadius:"2px",opacity:1},{transform:`translate(${n*.3}px, ${o*.3}px) scale(0.6) rotate(12deg)`,clipPath:s,offset:.3},{transform:`translate(${n*.6}px, ${o*.6}px) scale(0.34) rotate(24deg)`,clipPath:i,offset:.6,opacity:1},{transform:`translate(${n}px, ${o}px) scale(0.12) rotate(38deg)`,borderRadius:"50%",clipPath:i,opacity:0}],{duration:400,easing:sy,delay:60,fill:"forwards"})}function SR(e){let t=2166136261;for(let o=0;o<e.length;o++)t^=e.charCodeAt(o),t=Math.imul(t,16777619)>>>0;return t>>>1||1}function ry(e){let t=2166136261;const n=`os-note-${e}`;for(let i=0;i<n.length;i++)t^=n.charCodeAt(i),t=Math.imul(t,16777619)>>>0;const o=t>>>3,s=t>>>5;return{rotation:(t%45-22)/10,pinOffsetX:o%21-10,pinRotation:s%17-8}}const AR=.57,CR=.525,IR=56,xR=52;function LR(e){return`${e.replace(/\/$/,"")}/assets/images/pushpin.svg`}function TR(e){const t=document.createElement("img");return t.src=LR(e),t.alt="",t.width=IR,t.height=xR,t.draggable=!1,t.className="os-pinned-note__pin-img",t}let Lc=null;function NR(e){Lc=e}function DR(){if(!Lc)throw new Error("[openstation] notes REST client called before installNotesRestDeps().");return Lc}function RR(e){const t=window.openStationConfig;return typeof t?.restNonce=="string"&&t.restNonce?t.restNonce:e}class ay extends Error{constructor(t){super("Note was changed by another session."),this.status=409,this.name="NotesConflictError",this.current=t}}function OR(e){return e instanceof ay}async function Hn(e,t){const{baseUrl:n,nonce:o}=DR(),s=e?tt(n,e):n,i=new Headers(t.headers??{});i.set("X-WP-Nonce",RR(o)),t.body&&!i.has("Content-Type")&&i.set("Content-Type","application/json");const r=await Be(s,{...t,headers:i,credentials:"same-origin"},{source:"desktop-mode/notes"}),a=await r.text();let l=null;if(a)try{l=JSON.parse(a)}catch{l=null}if(!r.ok){if(r.status===409){const d=l?.data?.current;throw new ay(d??null)}const c=l;throw new Error(`[openstation] notes REST ${r.status}: ${c?.code??""} ${c?.message??""}`.trim())}if(l===null)throw new Error(`[openstation] notes REST ${r.status}: empty or unparseable body.`);return l}function ly(){return Hn("",{method:"GET"})}function MR(e){return Hn("",{method:"POST",body:JSON.stringify(e)})}function PR(e,t){return Hn(`/${e}`,{method:"PATCH",body:JSON.stringify(t)})}function WR(e){return Hn(`/${e}`,{method:"DELETE"})}function cy(e){return Hn(`/${e}/restore`,{method:"POST"})}function $R(e){return Hn(`/${e}/convert`,{method:"POST"})}const UR="openstation_notes_subscribe",FR="openstation_notes";let dy=!1,Tc=null;function BR(e){Tc=e,!dy&&(dy=!0,xe.contribute(UR,()=>Tc?.getHeartbeatSubscription()),xe.subscribe(FR,t=>{Tc?.applyHeartbeatPayload(t)}))}const HR="wpd_note",zR="note-draft",zn="note",GR="os-note-created";function tr(e,t){if(t.length===0)return;window.wp?.os?.broadcast?.(`os.${HR}.changed`,{source:"desktop-mode/notes",action:e,ids:t})}function uy(){const e=window.wp?.os;return e&&typeof e.showToast=="function"?e:null}async function jR(e,t){t.onEvict(e.id);try{await WR(e.id),tr("trashed",[e.id]),uy()?.showToast?.({message:S("Note moved to Trash","desktop-mode"),duration:6e3,action:{label:S("Undo","desktop-mode"),onClick:()=>{cy(e.id).then(n=>{tr("untrashed",[e.id]),t.onRestore(n)}).catch(n=>{console.error("[openstation] notes: restore failed:",n)})}}})}catch(n){console.error("[openstation] notes: trash failed:",n),t.onRestore(e),uy()?.showToast?.({message:S("Could not move the note to the Trash.","desktop-mode"),duration:5e3})}}function nr(){return window.wp?.os??null}function VR(e){const t=nr();if(!t?.windowManager?.open||!t.deriveWindowId)return window.location.href=e,null;const n=t.deriveWindowId(e);return t.windowManager.open({id:n,baseId:n,url:e,title:S("Edit draft","desktop-mode"),icon:"dashicons-admin-post"}),n}async function qR(e,t){t.onEvict(e.id);try{const n=await $R(e.id);tr("trashed",[e.id]);const o=VR(n.editUrl);nr()?.showToast?.({message:S("Note converted to a draft post","desktop-mode"),duration:6e3,action:{label:S("Undo","desktop-mode"),onClick:()=>{o&&nr()?.windowManager?.getById?.(o)?.close?.(),cy(e.id).then(s=>{tr("untrashed",[e.id]),t.onRestore(s)}).catch(s=>{console.error("[openstation] notes: convert undo failed:",s)})}}})}catch(n){console.error("[openstation] notes: convert failed:",n),t.onRestore(e),nr()?.showToast?.({message:S("Could not convert the note to a post.","desktop-mode"),duration:5e3})}}const KR=208,YR=1e3,XR=800,ZR=10,JR=1;function QR(){return window.wp?.os?.dragManager??null}function or(e){return e.seed||Math.abs(e.id)||1}const eO='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20" fill="currentColor" aria-hidden="true" focusable="false"><path d="m7.3 9.7 1.4 1.4c.2-.2.3-.3.4-.5 0 0 0-.1.1-.1.3-.5.4-1.1.3-1.6L12 7 9 4 7.2 6.5c-.6-.1-1.1 0-1.6.3 0 0-.1 0-.1.1-.3.1-.4.2-.6.4l1.4 1.4L4 11v1h1l2.3-2.3zM4 20h9v-1.5H4V20zm0-5.5V16h16v-1.5H4z" /></svg>',tO='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20" fill="currentColor" aria-hidden="true" focusable="false"><path d="M20 5h-5.7c0-1.3-1-2.3-2.3-2.3S9.7 3.7 9.7 5H4v2h1.5v.3l1.4 12c.1.9.9 1.6 1.8 1.6h6.6c.9 0 1.7-.7 1.8-1.6l1.4-12V7H20V5zM8.4 19l-1.3-12h9.8l-1.3 12H8.4z" /></svg>';class nO{constructor(t){this.root=null,this.liveRegion=null,this.controllers=new Map,this.zCounter=1,this.highWaterMs=0,this.tempIdCounter=0,this.host=t.host,this.pluginUrl=t.pluginUrl,this.canCreatePosts=t.canCreatePosts??!1,this.onError=t.onError}async boot(){try{const{notes:t}=await ly();t.forEach(n=>{this.bumpHighWater(n.updatedAtMs),this.upsertNote(n,{animate:"none"})}),BR(this)}catch(t){t instanceof Error&&console.debug("[openstation] Pinned notes unavailable:",t.message)}}upsertNote(t,n={animate:"none"}){this.ensureRoot(),this.zCounter=Math.max(this.zCounter,t.z);const o=this.controllers.get(t.id);if(o)return o.replace(t),o;const s=new oO({layer:this,note:t});return this.controllers.set(t.id,s),this.root?.appendChild(s.element),n.animate!=="none"&&s.playInsertion(n.animate==="thunk"?1:.7),s}removeNote(t){const n=this.controllers.get(t);n&&(this.controllers.delete(t),n.dispose(),n.element.remove())}rekeyNote(t,n){this.controllers.delete(t),this.controllers.set(n.note.id,n)}has(t){return this.controllers.has(t)}get(t){return this.controllers.get(t)}nextTempId(){return this.tempIdCounter-=1,this.tempIdCounter}bringToFront(t){this.zCounter+=1,t.setZ(this.zCounter)}bumpHighWater(t){Number.isFinite(t)&&t>this.highWaterMs&&(this.highWaterMs=t)}hostSize(){return{width:Math.max(1,this.host.clientWidth),height:Math.max(1,this.host.clientHeight)}}clampPosition(t,n){const{width:o,height:s}=this.hostSize(),i=Math.max(0,1-KR/o),r=Math.max(0,1-120/s);return{x:Math.min(i,Math.max(0,t)),y:Math.min(r,Math.max(0,n))}}normalizedFromClient(t,n){const o=this.host.getBoundingClientRect(),{width:s,height:i}=this.hostSize();return this.clampPosition((t-o.left)/s,(n-o.top)/i)}createNoteAt(t){const n=t.text??"",o=xc(t.color??Xt[0]),s=t.isPublic===!0,{x:i,y:r}=this.clampPosition(t.x,t.y),a=SR(n||`${i},${r}`),l=this.nextTempId(),c=this.upsertNote({id:l,text:n,color:o,x:i,y:r,z:1,public:s,seed:a,ownerId:0,ownerName:"",ownerAvatar:"",canEdit:!0,updatedAtMs:0},{animate:"thunk"});return this.bringToFront(c),t.focus&&c.focusEditor(),MR({text:n,color:o,x:i,y:r,public:s,seed:a}).then(d=>{this.bumpHighWater(d.updatedAtMs),c.replace(d),this.rekeyNote(l,c),c.flushPendingEdits()}).catch(d=>{this.removeNote(l),this.notifyError(S("Could not pin the note. Please try again.","desktop-mode")),console.error("[openstation] notes: create failed:",d)}),c}announce(t){this.ensureRoot(),this.liveRegion&&(this.liveRegion.textContent=t)}notifyError(t){this.onError?.(t)}trashNote(t){jR(t,{onEvict:n=>this.removeNote(n),onRestore:n=>{this.bumpHighWater(n.updatedAtMs),this.upsertNote(n,{animate:"move"})}})}convertNote(t){!this.canCreatePosts||!t.canEdit||qR(t,{onEvict:n=>this.removeNote(n),onRestore:n=>{this.bumpHighWater(n.updatedAtMs),this.upsertNote(n,{animate:"move"})}})}getHeartbeatSubscription(){return{knownIds:Array.from(this.controllers.keys()).filter(t=>t>0),sinceMs:this.highWaterMs}}applyHeartbeatPayload(t){for(const n of t.notes??[]){this.bumpHighWater(n.updatedAtMs);const o=this.controllers.get(n.id);o?o.shouldReplaceFromRemote(n)&&o.replace(n):this.upsertNote(n,{animate:"move"})}for(const n of t.removed??[])this.removeNote(n);typeof t.serverTimeMs=="number"&&Number.isFinite(t.serverTimeMs)&&this.bumpHighWater(t.serverTimeMs),t.truncated&&this.reloadFromServer()}async reloadFromServer(){try{const{notes:t}=await ly(),n=new Set;for(const o of t){n.add(o.id),this.bumpHighWater(o.updatedAtMs);const s=this.controllers.get(o.id);s?s.shouldReplaceFromRemote(o)&&s.replace(o):this.upsertNote(o,{animate:"move"})}for(const o of Array.from(this.controllers.keys()))o>0&&!n.has(o)&&this.removeNote(o)}catch{}}ensureRoot(){if(this.root)return this.root;const t=document.createElement("section");t.className="os-notes",t.setAttribute("aria-label",S("Pinned notes","desktop-mode"));const n=document.createElement("div");return n.className="os-notes__live screen-reader-text",n.setAttribute("aria-live","polite"),t.appendChild(n),this.host.appendChild(t),this.root=t,this.liveRegion=n,t}}class oO{constructor(t){this.editor=null,this.statusEl=null,this.colorDot=null,this.visibilityBtn=null,this.saveTimer=null,this.zTimer=null,this.patchChain=Promise.resolve(),this.pendingText=null,this.disposed=!1,this.moveMode=!1,this.moveOrigin=null,this.dragCleanup=null,this.lastPointer=null,this.layer=t.layer,this.note=t.note,this.jitter=ry(or(t.note)),this.element=document.createElement("article"),this.paperEl=document.createElement("div"),this.pinEl=document.createElement(this.note.canEdit?"button":"span"),this.paint(),this.applyPosition(),this.setZ(this.note.z),this.element.addEventListener("pointerdown",()=>this.layer.bringToFront(this),{capture:!0})}paint(){const t=this.note;this.element.className="os-pinned-note",this.element.dataset.noteId=String(t.id),this.element.dataset.noteColor=xc(t.color),this.element.dataset.owner=t.canEdit?"me":"other",this.element.setAttribute("role",t.canEdit?"group":"note"),this.element.setAttribute("aria-label",t.canEdit?S("Pinned note","desktop-mode"):le(S("Note by %s","desktop-mode"),t.ownerName)),this.element.style.setProperty("--dm-note-rot",`${this.jitter.rotation}deg`),this.element.style.setProperty("--dm-pin-dx",`${this.jitter.pinOffsetX}px`),this.element.style.setProperty("--dm-pin-rot",`${this.jitter.pinRotation}deg`),this.pinEl.className="os-pinned-note__pin",this.pinEl.appendChild(TR(this.layer.pluginUrl)),t.canEdit?(this.pinEl.setAttribute("type","button"),this.pinEl.setAttribute("aria-pressed","false"),this.pinEl.setAttribute("aria-label",S("Move note. Drag the pin, or press Enter then use the arrow keys.","desktop-mode")),this.pinEl.addEventListener("pointerdown",n=>this.startDrag(n)),this.pinEl.addEventListener("click",n=>{n.detail===0&&!this.moveMode&&this.toggleMoveMode()}),this.pinEl.addEventListener("keydown",n=>this.onPinKeydown(n)),this.pinEl.addEventListener("blur",()=>this.exitMoveMode(!1))):this.pinEl.setAttribute("aria-hidden","true"),this.paperEl.className="os-pinned-note__paper",t.canEdit?this.paintOwnerPaper():this.paintViewerPaper(),this.element.append(this.pinEl,this.paperEl)}paintOwnerPaper(){const t=document.createElement("div");t.className="os-pinned-note__meta";const n=document.createElement("os-save-status");n.setAttribute("mode","icon"),n.setAttribute("phase","idle"),n.className="os-pinned-note__status",this.statusEl=n;const o=document.createElement("button");o.type="button",o.className="os-pinned-note__color-dot",this.colorDot=o,this.refreshColorDot(),o.addEventListener("click",()=>this.cycleColor()),t.append(n,o);const s=document.createElement("div");s.className="os-pinned-note__actions";const i=document.createElement("os-window-button");if(i.className="os-pinned-note__visibility",this.visibilityBtn=i,this.refreshVisibility(),i.addEventListener("os-button-activate",()=>this.togglePublic()),s.appendChild(i),this.layer.canCreatePosts){const d=document.createElement("os-window-button");d.className="os-pinned-note__convert",d.innerHTML=eO;const u=S("Convert to a draft post","desktop-mode");d.setAttribute("title",u),d.setAttribute("aria-label",u),d.addEventListener("os-button-activate",()=>this.layer.convertNote(this.note)),s.appendChild(d)}const r=document.createElement("os-window-button");r.className="os-pinned-note__trash",r.innerHTML=tO;const a=S("Move to Trash","desktop-mode");r.setAttribute("title",a),r.setAttribute("aria-label",a),r.addEventListener("os-button-activate",()=>this.confirmTrash()),s.appendChild(r);const l=document.createElement("os-textarea");l.className="os-pinned-note__editor",l.setAttribute("aria-label",S("Note text","desktop-mode")),l.setAttribute("rows","5"),l.setAttribute("auto-grow",""),l.setAttribute("max-rows","10"),l.setAttribute("value",this.note.text),["keydown","keypress","keyup"].forEach(d=>{l.addEventListener(d,u=>u.stopPropagation())}),l.addEventListener("os-input-change",d=>{const u=d.detail;this.pendingText=u.value,this.setPhase("pending"),this.scheduleSave()}),l.addEventListener("os-input-commit",()=>this.flushSave()),this.editor=l;const c=document.createElement("div");c.className="os-pinned-note__footer",c.appendChild(s),this.paperEl.append(t,l,c)}paintViewerPaper(){const t=document.createElement("div");t.className="os-pinned-note__body",t.textContent=this.note.text;const n=document.createElement("div");n.className="os-pinned-note__attribution",n.title=le(S("Pinned by %s","desktop-mode"),this.note.ownerName);const o=document.createElement("os-avatar");o.setAttribute("size","20"),o.setAttribute("name",this.note.ownerName),this.note.ownerAvatar&&o.setAttribute("src",this.note.ownerAvatar);const s=document.createElement("span");s.className="os-pinned-note__attribution-name",s.textContent=this.note.ownerName,n.append(o,s),this.paperEl.append(t,n)}refreshColorDot(){if(!this.colorDot)return;const t=ny(this.note.color);this.colorDot.style.setProperty("--dm-note-next-paper",`var(--dm-note-${t})`),this.colorDot.setAttribute("aria-label",le(S("Change paper color (next: %s)","desktop-mode"),t))}refreshVisibility(){if(!this.visibilityBtn)return;const t=this.note.public;this.visibilityBtn.innerHTML="";const n=document.createElement("span");n.className=`dashicons ${t?"dashicons-admin-site-alt3":"dashicons-lock"}`,n.setAttribute("aria-hidden","true"),this.visibilityBtn.appendChild(n),this.visibilityBtn.setAttribute("title",S(t?"Public note — everyone can see it. Click to make private.":"Private note. Click to share with every desktop user.","desktop-mode")),this.visibilityBtn.classList.toggle("is-public",t)}replace(t){const n=t.id!==this.note.id,o=or(t)!==or(this.note),s=t.color!==this.note.color,i=t.x!==this.note.x||t.y!==this.note.y,r=t.z!==this.note.z;if(this.note=t,r&&(this.element.style.zIndex=String(t.z)),n&&(this.element.dataset.noteId=String(t.id)),o&&(this.jitter=ry(or(t)),this.element.style.setProperty("--dm-note-rot",`${this.jitter.rotation}deg`),this.element.style.setProperty("--dm-pin-dx",`${this.jitter.pinOffsetX}px`),this.element.style.setProperty("--dm-pin-rot",`${this.jitter.pinRotation}deg`)),s&&(this.element.dataset.noteColor=xc(t.color),this.refreshColorDot()),i&&this.applyPosition(),this.note.canEdit)this.pendingText===null&&this.editor?.setAttribute("value",t.text),this.refreshVisibility();else{const a=this.paperEl.querySelector(".os-pinned-note__body");a&&(a.textContent=t.text)}}shouldReplaceFromRemote(t){return this.pendingText!==null||this.saveTimer!==null?!1:t.updatedAtMs>=this.note.updatedAtMs}setZ(t){this.element.style.zIndex=String(t),!(t===this.note.z||!this.note.canEdit)&&(this.note={...this.note,z:t},!(this.note.id<=0)&&(this.zTimer!==null&&window.clearTimeout(this.zTimer),this.zTimer=window.setTimeout(()=>{this.zTimer=null,this.queuePatch({z:this.note.z})},XR)))}applyPosition(){this.element.style.left=`${(this.note.x*100).toFixed(3)}%`,this.element.style.top=`${(this.note.y*100).toFixed(3)}%`}moveTo(t,n){const o=this.layer.clampPosition(t,n);this.note={...this.note,x:o.x,y:o.y},this.applyPosition(),this.note.id>0&&this.queuePatch({x:o.x,y:o.y})}playInsertion(t=1){return vR({pin:this.pinEl,paper:this.paperEl,rippleHost:this.element,restRotation:this.jitter.pinRotation,fallDistance:t>=1?30:12,tempo:t})}focusEditor(){window.setTimeout(()=>this.editor?.focusInput?.(),0)}dispose(){this.disposed=!0,this.saveTimer!==null&&(window.clearTimeout(this.saveTimer),this.saveTimer=null),this.zTimer!==null&&(window.clearTimeout(this.zTimer),this.zTimer=null),this.dragCleanup?.(),this.dragCleanup=null}setPhase(t){this.statusEl?.setAttribute("phase",t)}scheduleSave(){this.saveTimer!==null&&window.clearTimeout(this.saveTimer),this.saveTimer=window.setTimeout(()=>{this.saveTimer=null,this.flushSave()},YR)}flushPendingEdits(){this.flushSave()}flushSave(){if(this.saveTimer!==null&&(window.clearTimeout(this.saveTimer),this.saveTimer=null),this.pendingText===null||this.note.id<=0)return;const t=this.pendingText;this.pendingText=null,this.note={...this.note,text:t},this.setPhase("saving"),this.queuePatch({text:t})}cycleColor(){const t=ny(this.note.color);this.note={...this.note,color:t},this.element.dataset.noteColor=t,this.refreshColorDot(),this.note.id>0&&this.queuePatch({color:t})}togglePublic(){const t=!this.note.public;this.note={...this.note,public:t},this.refreshVisibility(),t&&!Bn()&&this.visibilityBtn&&this.visibilityBtn.animate?.([{transform:"scale(1)"},{transform:"scale(1.25)"},{transform:"scale(1)"}],{duration:300,easing:"ease-out"}),this.layer.announce(S(t?"Note is now public.":"Note is now private.","desktop-mode")),this.note.id>0&&this.queuePatch({public:t})}confirmTrash(){Nn({title:S("Move note to the Trash?","desktop-mode"),message:S("You can restore it from the Trash later.","desktop-mode"),confirmLabel:S("Move to Trash","desktop-mode"),danger:!0}).then(t=>{t&&this.layer.trashNote(this.note)})}queuePatch(t){this.patchChain=this.patchChain.then(async()=>{if(!(this.disposed||this.note.id<=0))try{const n=await PR(this.note.id,{...t,updatedAtMs:this.note.updatedAtMs});if(this.disposed)return;const o=n.public!==this.note.public;this.note={...this.note,updatedAtMs:n.updatedAtMs,public:n.public},o&&this.refreshVisibility(),this.setPhase("saved")}catch(n){if(this.disposed)return;if(OR(n)&&n.current){this.pendingText=null,this.replace(n.current),this.setPhase("idle"),this.layer.notifyError(S("This note was changed in another session — showing the latest version.","desktop-mode"));return}this.setPhase("failed"),console.error("[openstation] notes: save failed:",n)}})}startDrag(t){if(!this.note.canEdit||this.note.id<=0)return;const n=QR();if(!n)return;t.preventDefault(),this.element.ownerDocument.defaultView?.getSelection()?.removeAllRanges();const o=this.buildGhost(),s=this.element.getBoundingClientRect(),i={noteId:this.note.id,canEdit:this.note.canEdit,updatedAtMs:this.note.updatedAtMs};n.start({payload:{type:zn,source:this.element,data:i,ghost:{element:o.root,offsetX:o.tipX,offsetY:o.tipY,hint:{neutral:S("Drop on the desktop to pin","desktop-mode"),accept:S("Pin here","desktop-mode"),reject:S("Can’t pin here","desktop-mode")}}},origin:t,onClickOnly:()=>{this.teardownDragListeners(),this.toggleMoveMode()},onCancel:()=>{this.teardownDragListeners(),this.snapBack(s)},onCommit:()=>{this.teardownDragListeners(),this.layer.has(this.note.id)&&this.playInsertion(.7)}})&&this.installDragListeners(o)}buildGhost(){const t=this.element.getBoundingClientRect(),o=(this.pinEl.querySelector("img")??this.pinEl).getBoundingClientRect(),s=o.left-t.left+o.width*AR,i=o.top-t.top+o.height*CR,r=document.createElement("div");r.className="os-pinned-note-ghost",r.style.width=`${t.width}px`,r.style.height=`${t.height}px`;const a=document.createElement("div");a.className="os-pinned-note-ghost__swing",a.style.transformOrigin=`${s}px ${i}px`;const l=this.pinEl.cloneNode(!0);l.removeAttribute("aria-pressed"),l.setAttribute("aria-hidden","true");const c=this.paperEl.cloneNode(!0);return c.classList.add("os-pinned-note-ghost__paper"),a.dataset.noteColor=this.element.dataset.noteColor??"",a.append(l,c),r.appendChild(a),{root:r,swing:a,pin:l,paper:c,tipX:s,tipY:i}}installDragListeners(t){this.teardownDragListeners();let n=null;const o=a=>{a.detail?.payload?.data?.noteId===this.note.id&&(n=_R(t.swing))},s=a=>{const l=a.detail;this.lastPointer={x:l.clientX,y:l.clientY},n?.onPointerMove(l.clientX)},i=a=>{a.detail?.targetId?.startsWith("recycle-bin")&&(t.root.classList.add("os-pinned-note-ghost--doom"),n?.setBias(6))},r=a=>{a.detail?.targetId?.startsWith("recycle-bin")&&(t.root.classList.remove("os-pinned-note-ghost--doom"),n?.setBias(0))};document.addEventListener(we.START,o),document.addEventListener(we.MOVE,s),document.addEventListener(we.ENTER,i),document.addEventListener(we.LEAVE,r),this.dragCleanup=()=>{n?.stop(),n=null,document.removeEventListener(we.START,o),document.removeEventListener(we.MOVE,s),document.removeEventListener(we.ENTER,i),document.removeEventListener(we.LEAVE,r)}}teardownDragListeners(){this.dragCleanup?.(),this.dragCleanup=null}async snapBack(t){if(!this.lastPointer||Bn()){this.playInsertion(.63);return}const n=this.buildGhost();n.root.classList.add("os-pinned-note-ghost--flyback"),n.root.style.position="fixed",n.root.style.left=`${this.lastPointer.x-n.tipX}px`,n.root.style.top=`${this.lastPointer.y-n.tipY}px`,n.root.style.zIndex="2147483647",n.root.style.pointerEvents="none",document.body.appendChild(n.root);try{await ER({flyback:n.root,swing:n.swing,homeX:t.left,homeY:t.top})}finally{n.root.remove()}this.playInsertion(.63)}async playCrumpleAt(t,n){const o=this.buildGhost();o.root.classList.add("os-pinned-note-ghost--flyback"),o.root.style.position="fixed",o.root.style.left=`${t-o.tipX}px`,o.root.style.top=`${n-o.tipY}px`,o.root.style.zIndex="2147483647",o.root.style.pointerEvents="none",document.body.appendChild(o.root);try{await kR({clone:o.root,pin:o.pin,paper:o.paper,binX:t,binY:n+24})}finally{o.root.remove()}}toggleMoveMode(){this.moveMode?this.exitMoveMode(!0):this.enterMoveMode()}enterMoveMode(){this.note.canEdit&&(this.moveMode=!0,this.moveOrigin={x:this.note.x,y:this.note.y},this.element.classList.add("os-pinned-note--move-mode"),this.pinEl.setAttribute("aria-pressed","true"),this.layer.announce(S("Moving note. Arrow keys to move, Enter to place, Escape to cancel, Delete to move to the Trash.","desktop-mode")))}exitMoveMode(t){this.moveMode&&(this.moveMode=!1,this.element.classList.remove("os-pinned-note--move-mode"),this.pinEl.setAttribute("aria-pressed","false"),t?(this.moveTo(this.note.x,this.note.y),this.layer.announce(S("Note placed.","desktop-mode")),this.playInsertion(.7)):this.moveOrigin&&(this.note={...this.note,...this.moveOrigin},this.applyPosition()),this.moveOrigin=null)}onPinKeydown(t){if(!this.moveMode)return;const{width:n,height:o}=this.layer.hostSize(),s=t.shiftKey?JR:ZR,i=s/n,r=s/o;switch(t.key){case"ArrowLeft":this.nudge(-i,0);break;case"ArrowRight":this.nudge(i,0);break;case"ArrowUp":this.nudge(0,-r);break;case"ArrowDown":this.nudge(0,r);break;case"Enter":case" ":this.exitMoveMode(!0);break;case"Escape":this.exitMoveMode(!1),this.layer.announce(S("Move cancelled.","desktop-mode"));break;case"Delete":case"Backspace":this.exitMoveMode(!1),this.confirmTrash();break;default:return}t.preventDefault(),t.stopPropagation()}nudge(t,n){const o=this.layer.clampPosition(this.note.x+t,this.note.y+n);this.note={...this.note,...o},this.applyPosition()}}const ts=new Map;function sO(e,t){return ts.set(e,t),()=>{ts.get(e)===t&&ts.delete(e)}}function iO(e){const t=ts.get(e.type);return t?t.accept(e.data):!1}function rO(e,t){const n=ts.get(e.payload.type);return n?(n.onDrop(e,t),!0):!1}function fy(e,t,n){const o=e.host.getBoundingClientRect(),s=t.payload.ghost?.offsetX??0,i=t.payload.ghost?.offsetY??0,{width:r,height:a}=e.hostSize();return e.clampPosition((n.clientX-s-o.left)/r,(n.clientY-i-o.top)/a)}function aO(e,t,n){const o=t.payload.data,s=String(o.text??"");if(!s.trim())return;const{x:i,y:r}=fy(e,t,n);e.createNoteAt({x:i,y:r,text:s,color:String(o.color??""),isPublic:o.isPublic===!0})}function lO(e,t,n){const o=t.payload.data,s=e.get(o.noteId);if(!s)return;const{x:i,y:r}=fy(e,t,n);s.moveTo(i,r)}function cO(e){const t=[],n=o=>o.folderId===0;return t.push(kw(zR,{accept:(o,s)=>n(s)&&!!String(o.text??"").trim(),onDrop:(o,s)=>aO(e,o,s)})),t.push(kw(zn,{accept:(o,s)=>n(s)&&o.canEdit===!0,onDrop:(o,s)=>lO(e,o,s)})),t.push(sO(zn,{accept:o=>o.canEdit===!0,onDrop:(o,s)=>{const i=o.payload.data,r=e.get(i.noteId);if(!r)return;const a=r.note;r.playCrumpleAt(s.clientX,s.clientY),e.trashNote(a)}})),()=>{t.forEach(o=>o())}}const Nc="data-os-posts-drop-active",py="desktop-mode-posts",dO='.os-dock__item[data-menu-slug="menu-posts"],.os-dock__item[data-menu-slug="editphp"]',uO="[data-os-posts-root]";function fO(){return window.wp?.os?.dragManager??null}function pO(e){return e.type!==zn?!1:e.data.canEdit===!0}function hO(e){if(!e)return!1;let t=e,n="";try{const i=new URL(e,window.location.origin);t=i.pathname,n=i.search}catch{}if(!(/(?:^|\/)(?:edit\.php|post-new\.php)$/.test(t)||!t.includes("/")&&(t==="edit.php"||t==="post-new.php")))return!1;const s=new URLSearchParams(n).get("post_type");return!s||s==="post"}function mO(e){const t=e.placement.file;if(!t||t.type!=="shortcut")return!1;const n=typeof t.shortcutUrl=="string"?t.shortcutUrl:"";return hO(n)}function hy(e,t){if(t.payload.type!==zn)return;const n=t.payload.data;if(typeof n.noteId!="number")return;const o=e.get(n.noteId);o&&e.convertNote(o.note)}let my=!1,ns=null,os=null,gy=null;function wy(e,t,n,o){return e.registerDropTarget({id:n,element:o,acceptLabel:S("Convert to post","desktop-mode"),accept:s=>pO(s),onEnter:()=>{o.setAttribute(Nc,"")},onLeave:()=>{o.removeAttribute(Nc)},onDrop:s=>{o.removeAttribute(Nc),hy(t,s)}})}function gO(e,t){const n=e.debug().listTargets().find(o=>o.id===t);return n?n.element:null}function wO(e){if(my||!e.canCreatePosts)return;const t=fO();if(!t)return;my=!0,Bi(zn,{appliesTo:o=>mO(o),acceptLabel:S("Convert to post","desktop-mode"),accept:o=>o.canEdit===!0,onDrop:o=>hy(e,o)});const n=()=>{const o=document.querySelector(dO);if(!(o instanceof HTMLElement)){ns?.(),ns=null;return}ns&&gO(t,"notes-convert-dock")===o||(ns?.(),ns=wy(t,e,"notes-convert-dock",o))};n(),K(b.DOCK_AFTER_RENDER,"desktop-mode/notes/convert-dock-target",n),typeof MutationObserver<"u"&&(gy=new MutationObserver(()=>{n()}),gy.observe(document.body,{childList:!0,subtree:!0})),K(b.WINDOW_OPENED,"desktop-mode/notes/convert-window-target",o=>{if(o.windowId!==py)return;os?.(),os=null;const s=document.querySelector(uO);s instanceof HTMLElement&&(os=wy(t,e,"notes-convert-window",s))}),K(b.WINDOW_CLOSED,"desktop-mode/notes/convert-window-cleanup",o=>{o.windowId===py&&(os?.(),os=null)})}const yy="new-note";function yO(e){Vn("os.wallpaper-context-menu","desktop-mode/notes",(t,n)=>{if(!Array.isArray(t)||t.some(i=>i.id===yy))return t;const{x:o,y:s}=n??{x:0,y:0};return[...t,{id:yy,label:S("New note","desktop-mode"),icon:"dashicons-edit-page",sort:14,onClick:()=>{const i=e.normalizedFromClient(o,s);e.createNoteAt({...i,focus:!0})}}]})}function bO(e){const t=e.config.notesUrl;if(typeof t!="string"||!t)return null;NR({baseUrl:t,nonce:e.config.restNonce??""});const n=new nO({host:e.host,pluginUrl:e.config.pluginUrl??"",canCreatePosts:e.config.canCreatePosts??!1,onError:e.onError});return cO(n),wO(n),yO(n),document.addEventListener(GR,o=>{const s=o.detail?.note;if(s&&typeof s.id=="number"){n.bumpHighWater(s.updatedAtMs);const i=n.upsertNote(s,{animate:"thunk"});n.bringToFront(i),i.focusEditor()}}),n.boot(),n}const vO={id:"clock",get label(){return S("Clock")},get description(){return S("Local time and date, refreshed every second.")},icon:"dashicons-clock",mount:e=>{e.classList.add("os-widget-clock");const t=document.createElement("div");t.className="os-widget-clock__time",e.appendChild(t);const n=document.createElement("div");n.className="os-widget-clock__date",e.appendChild(n);const o=()=>{const a=new Date;t.textContent=a.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}),n.textContent=a.toLocaleDateString(void 0,{weekday:"long",month:"short",day:"numeric"})};o();const s=1e3-Date.now()%1e3;let i=null;const r=window.setTimeout(()=>{o(),i=window.setInterval(o,1e3)},s);return()=>{window.clearTimeout(r),i!==null&&window.clearInterval(i)}}};function _O(){tl(vO)}async function EO(){const e=window;if(e.openStationReleaseCard)return e.openStationReleaseCard;const t=e.openStationConfig?.releaseCardBundleUrl??"";if(!t)return null;try{await ke(t)}catch{return null}return e.openStationReleaseCard??null}function by(e,t){if(t){const o=S('WordPress %1$s "%2$s" is available.');return le(o,e,t)}const n=S("WordPress %s is available.");return le(n,e)}async function kO(e){const{update:t,openUrl:n}=e;if(!t||typeof t.version!="string"||!t.version||typeof t.url!="string"||!t.url)return;const o=t.version,s=typeof t.branch=="string"&&t.branch?t.branch:o,i=t.crossing===!0,a=`desktop-mode/core-update:${typeof t.available=="string"&&t.available?t.available:o}`;if(Ya(a))return;const l=()=>n({url:t.url,title:S("WordPress Updates")}),d=e.resolveArt&&e.loadImage&&e.showCard?null:await EO(),u=e.resolveArt??d?.resolveReleaseArt,f=e.loadImage??d?.preloadImage,p=e.showCard??d?.showReleaseCard,g=u?await u(s):null;if(g&&g.artUrl&&f&&p&&await f(g.artUrl)){p({message:by(o,i?g.name:""),artUrl:g.artUrl,dismissKey:a,onUpdate:l});return}X({message:by(o,""),persistent:!0,dismissible:!0,onDismiss:()=>ki(a),action:{label:S("Update now"),onClick:l}})}function vy(e){const{notices:t,openUrl:n,keyPrefix:o="core-notice"}=e;if(Array.isArray(t))for(const s of t){if(!s||typeof s.id!="string"||!s.id||typeof s.message!="string"||!s.message)continue;const i=`desktop-mode/${o}:${s.id}`;if(Ya(i))continue;const r=s.actionLabel,a=s.actionUrl,l=s.title||r||"";let c;r&&a&&(c={label:r,onClick:()=>n({url:a,title:l})}),X({message:s.message,persistent:!0,dismissible:!0,onDismiss:()=>ki(i),action:c})}}const Dc="desktop-mode/starter",SO="desktop-mode/dev-mode-gate";let _y=!1;function AO({osSettings:e,layer:t}){if(_y)return;_y=!0,Vn(b.WIDGETS,SO,o=>e.getOsSettingsSnapshot().developerModeEnabled?o:o.filter(s=>s.id!==Dc));let n=e.getOsSettingsSnapshot().developerModeEnabled;e.subscribeOsSettings(o=>{o.developerModeEnabled!==n&&(n=o.developerModeEnabled,n?t.mountIfEnabled(Dc):t.unmount(Dc),So())})}function CO(e){const{layer:t}=e,n=new Set,o=new Set,s=async c=>{if(!(!c.scriptUrl||o.has(c.scriptUrl))){try{await ke(c.scriptUrl,{translations:c.scriptTranslations,l10n:c.scriptL10n,before:c.scriptBefore,after:c.scriptAfter})}catch(d){T(b.SHELL_ERROR,{scope:"widget-script-load",id:c.id,error:d});return}o.add(c.scriptUrl)}},i=c=>(window.openStationWidgets||{})[c]??null,r=c=>({id:c.id,label:c.label,description:c.description,icon:c.icon,movable:c.movable,resizable:c.resizable,minWidth:c.minWidth||void 0,minHeight:c.minHeight||void 0,maxWidth:c.maxWidth||void 0,maxHeight:c.maxHeight||void 0,defaultWidth:c.defaultWidth||void 0,defaultHeight:c.defaultHeight||void 0,mount:async(d,u)=>{await s(c);const f=i(c.id);if(!f){const p=new Error(`[openstation] No mount callback on window.openStationWidgets["${c.id}"]. Plugin script loaded but didn't register. Check the plugin's enqueue + global assignment.`);throw T(b.SHELL_ERROR,{scope:"widget-missing-mount",id:c.id,error:p}),p}return f(d,u)}}),a=async c=>{if(n.has(c.id))return;const d=r(c);try{tl(d)}catch(u){T(b.SHELL_ERROR,{scope:"widget-register",id:c.id,error:u});return}n.add(c.id),So(),t&&t.mountIfEnabled(c.id)},l=c=>{n.has(c)&&(t?.unmount(c),jA(c),n.delete(c),So())};return async c=>{const d=new Set;for(const u of c)d.add(u.id);for(const u of Array.from(n))d.has(u)||l(u);for(const u of c)n.has(u.id)||await a(u)}}const Ey=new Set(Mi),IO=2e3,Rc=new Set,ky=new WeakSet;let Sy=!1;function xO(e,t){const n=e.length,o=t.length;if(n===0)return o;if(o===0)return n;const s=new Array(o+1);for(let i=0;i<=o;i++)s[i]=i;for(let i=1;i<=n;i++){let r=s[0];s[0]=i;for(let a=1;a<=o;a++){const l=s[a];s[a]=e[i-1]===t[a-1]?r:1+Math.min(r,s[a],s[a-1]),r=l}}return s[o]}function LO(e){let t=null,n=1/0;for(const o of Ey){const s=xO(e,o);s<n&&(n=s,t=o)}return n>0&&n<=3?t:null}function TO(e){return e.startsWith("os-")?e.slice(4):e}function NO(e,t){if(Rc.has(e))return;if(Rc.add(e),Ey.has(e)){const s=TO(e);console.error(`[wp.os] <${e}> is in the DOM but its module was never imported, so the tag will not upgrade and the component will render as inert HTML. |
| 260 |
|
| 261 |
Fix — side-effect-import the component module from wherever you render it: |
| 262 |
|
| 263 |
import '<rel>/ui/components/${s}/${s}'; |
| 264 |
|
| 265 |
Or pull every os-* component in one go (heavier — only do this from an entry bundle): |
| 266 |
|
| 267 |
import '<rel>/ui/components'; |
| 268 |
|
| 269 |
See docs/components-reference.md for the full list.`,` |
| 270 |
First offending element:`,t);return}const o=LO(e);if(o){console.error(`[wp.os] <${e}> is not a registered os-* component. Did you mean <${o}>? |
| 271 |
|
| 272 |
If the typo is in your template, update it. If you meant to ship a new component, register it via 'src/ui/components/<name>/<name>.ts' and add it to 'src/ui/components/tags.ts' + 'src/ui/components/index.ts'.`,` |
| 273 |
First offending element:`,t);return}console.error(`[wp.os] <${e}> looks like a os-* tag but no component by that name exists. |
| 274 |
|
| 275 |
See 'src/ui/components/index.ts' (or docs/components-reference.md) for the canonical list. If you intended to register a new component, add it to 'tags.ts' and side-effect-import its module.`,` |
| 276 |
First offending element:`,t)}function Ay(e){const t=e.tagName.toLowerCase();if(!t.startsWith("os-")||Rc.has(t)||customElements.get(t))return;let n=!1;customElements.whenDefined(t).then(()=>{n=!0}),setTimeout(()=>{n||customElements.get(t)||NO(t,e)},IO)}function Cy(e){e instanceof Element&&(Ay(e),e.shadowRoot&&sr(e.shadowRoot));const t=e.querySelectorAll("*");for(let n=0;n<t.length;n++){const o=t[n];Ay(o),o.shadowRoot&&sr(o.shadowRoot)}}function sr(e){if(ky.has(e))return;ky.add(e),Cy(e),new MutationObserver(n=>{for(let o=0;o<n.length;o++){const s=n[o].addedNodes;for(let i=0;i<s.length;i++){const r=s[i];r.nodeType===1&&Cy(r)}}}).observe(e,{childList:!0,subtree:!0})}function DO(){const e=Element.prototype,t=e.attachShadow;if(t.__wpdPatched)return;const n=function(o){const s=t.call(this,o);return s.mode==="open"&&sr(s),s};n.__wpdPatched=!0,e.attachShadow=n}function RO(){Sy||typeof document>"u"||(Sy=!0,DO(),sr(document))}const Iy={appearance:{radius:56,bodyColor:789263,bodyAlpha:1,hueStart:296.5,hueSpan:-52.5,hueAngle:225,hueDrift:0,hueSpin:0,hueLoop:!0,saturation:1,lightness:.75,iridescence:0,outlineWidth:3,glow:10,glowBlur:!0,eyeColor:16776191,eyeScale:.3},physics:{points:12,shapePreset:"blob",shapeLobes:3,shapeAmount:1,shapeAngle:0,shapeShuffle:60,radialStiffness:460,edgeStiffness:540,bendStiffness:170,pressure:2400,damping:9,airDamping:.5,magnetStrength:2200,magnetRange:260,magnetGrip:.24,magnetDamping:7,floatAmplitude:10,floatSpeed:1.1,idleWobble:.085,idleWobbleSpeed:.55,speedStretch:.3,friction:.86,restitution:.2,dragStiffness:480,throwBoost:1,minStretch:.55,maxStretch:1.7,minAngularGap:.25,limitIterations:3,dragMaxAccel:9e3,subStep:1/240,maxSubSteps:8}},ee={radius:[16,220],bodyAlpha:[0,1],hueStart:[-720,720],hueSpan:[-360,360],hueDrift:[-180,180],hueAngle:[-360,360],hueSpin:[-180,180],saturation:[0,1],lightness:[.15,1],iridescence:[0,2],outlineWidth:[.5,24],glow:[0,20],eyeScale:[.05,.6],points:[12,128],shapeLobes:[0,8],shapeAmount:[0,1.4],shapeAngle:[-360,360],shapeShuffle:[0,3600],radialStiffness:[0,2e3],edgeStiffness:[0,4e3],bendStiffness:[0,2e3],pressure:[0,8e3],damping:[0,30],airDamping:[0,20],magnetStrength:[0,8e3],magnetRange:[0,2e3],magnetGrip:[0,.6],magnetDamping:[0,40],floatAmplitude:[0,200],floatSpeed:[0,20],idleWobble:[0,.4],idleWobbleSpeed:[0,8],speedStretch:[0,.8],friction:[0,1],restitution:[0,1],dragStiffness:[1,4e3],throwBoost:[0,4],minStretch:[.1,1],maxStretch:[1,4],minAngularGap:[0,.9],limitIterations:[0,8],dragMaxAccel:[100,2e5],subStep:[1/1e3,1/30],maxSubSteps:[1,32]};function te(e,t,n){return typeof e!="number"||!Number.isFinite(e)?t:Math.min(n[1],Math.max(n[0],e))}function xy(e,t){if(typeof e=="number"&&Number.isFinite(e))return Math.min(16777215,Math.max(0,Math.floor(e)));if(typeof e=="string"){const n=e.trim().replace(/^#/,"");if(/^[0-9a-fA-F]{6}$/.test(n))return Number.parseInt(n,16);if(/^[0-9a-fA-F]{3}$/.test(n)){const[o,s,i]=n.split("");return Number.parseInt(`${o}${o}${s}${s}${i}${i}`,16)}}return t}function Ly(e,t){return typeof e=="boolean"?e:t}const OO=["circle","blob","ghost","potato","star","flower","heart","diamond","drop","cloud","custom"];function MO(e,t){return OO.includes(e)?e:t}function ss(e,t=Iy){const n=e&&typeof e=="object"&&!Array.isArray(e)?e:{},o=n.appearance??{},s=n.physics??{},i={radius:te(o.radius,t.appearance.radius,ee.radius),bodyColor:xy(o.bodyColor,t.appearance.bodyColor),bodyAlpha:te(o.bodyAlpha,t.appearance.bodyAlpha,ee.bodyAlpha),hueStart:te(o.hueStart,t.appearance.hueStart,ee.hueStart),hueSpan:te(o.hueSpan,t.appearance.hueSpan,ee.hueSpan),hueDrift:te(o.hueDrift,t.appearance.hueDrift,ee.hueDrift),hueLoop:Ly(o.hueLoop,t.appearance.hueLoop),hueAngle:te(o.hueAngle,t.appearance.hueAngle,ee.hueAngle),hueSpin:te(o.hueSpin,t.appearance.hueSpin,ee.hueSpin),saturation:te(o.saturation,t.appearance.saturation,ee.saturation),lightness:te(o.lightness,t.appearance.lightness,ee.lightness),iridescence:te(o.iridescence,t.appearance.iridescence,ee.iridescence),outlineWidth:te(o.outlineWidth,t.appearance.outlineWidth,ee.outlineWidth),glow:te(o.glow,t.appearance.glow,ee.glow),glowBlur:Ly(o.glowBlur,t.appearance.glowBlur),eyeColor:xy(o.eyeColor,t.appearance.eyeColor),eyeScale:te(o.eyeScale,t.appearance.eyeScale,ee.eyeScale)},r={points:Math.round(te(s.points,t.physics.points,ee.points)),shapePreset:MO(s.shapePreset,t.physics.shapePreset),shapeLobes:Math.round(te(s.shapeLobes,t.physics.shapeLobes,ee.shapeLobes)),shapeAmount:te(s.shapeAmount,t.physics.shapeAmount,ee.shapeAmount),shapeAngle:te(s.shapeAngle,t.physics.shapeAngle,ee.shapeAngle),shapeShuffle:te(s.shapeShuffle,t.physics.shapeShuffle,ee.shapeShuffle),radialStiffness:te(s.radialStiffness,t.physics.radialStiffness,ee.radialStiffness),edgeStiffness:te(s.edgeStiffness,t.physics.edgeStiffness,ee.edgeStiffness),bendStiffness:te(s.bendStiffness,t.physics.bendStiffness,ee.bendStiffness),pressure:te(s.pressure,t.physics.pressure,ee.pressure),damping:te(s.damping,t.physics.damping,ee.damping),airDamping:te(s.airDamping,t.physics.airDamping,ee.airDamping),magnetStrength:te(s.magnetStrength,t.physics.magnetStrength,ee.magnetStrength),magnetRange:te(s.magnetRange,t.physics.magnetRange,ee.magnetRange),magnetGrip:te(s.magnetGrip,t.physics.magnetGrip,ee.magnetGrip),magnetDamping:te(s.magnetDamping,t.physics.magnetDamping,ee.magnetDamping),floatAmplitude:te(s.floatAmplitude,t.physics.floatAmplitude,ee.floatAmplitude),floatSpeed:te(s.floatSpeed,t.physics.floatSpeed,ee.floatSpeed),idleWobble:te(s.idleWobble,t.physics.idleWobble,ee.idleWobble),idleWobbleSpeed:te(s.idleWobbleSpeed,t.physics.idleWobbleSpeed,ee.idleWobbleSpeed),speedStretch:te(s.speedStretch,t.physics.speedStretch,ee.speedStretch),friction:te(s.friction,t.physics.friction,ee.friction),restitution:te(s.restitution,t.physics.restitution,ee.restitution),dragStiffness:te(s.dragStiffness,t.physics.dragStiffness,ee.dragStiffness),throwBoost:te(s.throwBoost,t.physics.throwBoost,ee.throwBoost),minStretch:te(s.minStretch,t.physics.minStretch,ee.minStretch),maxStretch:te(s.maxStretch,t.physics.maxStretch,ee.maxStretch),minAngularGap:te(s.minAngularGap,t.physics.minAngularGap,ee.minAngularGap),dragMaxAccel:te(s.dragMaxAccel,t.physics.dragMaxAccel,ee.dragMaxAccel),limitIterations:Math.round(te(s.limitIterations,t.physics.limitIterations,ee.limitIterations)),subStep:te(s.subStep,t.physics.subStep,ee.subStep),maxSubSteps:Math.round(te(s.maxSubSteps,t.physics.maxSubSteps,ee.maxSubSteps))};return{appearance:i,physics:r}}const Ty="desktop-mode-mio-position",Ny="os-mio",PO="os-mio-toggle",WO=`data:image/svg+xml;base64,${btoa(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"> |
| 277 |
<defs><linearGradient id="mio" x1="19" y1="19" x2="5" y2="5" gradientUnits="userSpaceOnUse"> |
| 278 |
<stop offset="0" stop-color="#3f6dff"/><stop offset=".5" stop-color="#a855f7"/><stop offset="1" stop-color="#ff4fd8"/> |
| 279 |
</linearGradient></defs> |
| 280 |
<circle cx="12" cy="12" r="8.2" fill="none" stroke="url(#mio)" stroke-width="2.6"/> |
| 281 |
<rect x="8" y="9.6" width="2.9" height="4.8" rx="1.45" fill="#fff"/> |
| 282 |
<rect x="13.1" y="9.6" width="2.9" height="4.8" rx="1.45" fill="#fff"/> |
| 283 |
</svg>`)}`;class $O{constructor(t){this.layer=null,this.handle=null,this.parked=null,this.generation=0,this.loading=null,this.look=ta(),this.options=t,this.enabled=t.enabled,this.look=If(t.savedLook),this.config=this.resolveConfig()}boot(){this.enabled&&this.mount()}api(){return{isEnabled:()=>this.enabled,enable:()=>this.setEnabled(!0),disable:()=>{this.setEnabled(!1)},toggle:()=>this.setEnabled(!this.enabled),getPosition:()=>this.handle?.getPosition()??null,setPosition:(t,n)=>this.handle?.setPosition(t,n),getConfig:()=>this.config,setConfig:t=>{this.config=ss(t,this.config),this.handle?.applyConfig(this.config)},setStyle:t=>{const n=BE(t);this.look={appearance:{...this.look.appearance,...n.appearance},physics:{...this.look.physics,...n.physics}},this.config=ss({appearance:n.appearance,physics:n.physics},this.config),this.handle?.applyConfig(this.config),this.commitLook()},getLook:()=>({appearance:{...this.look.appearance},physics:{...this.look.physics}}),commitStyle:()=>this.commitLook(),resetStyle:()=>{this.look=ta(),this.config=this.resolveConfig(),this.handle?.applyConfig(this.config),this.commitLook()}}}async setEnabled(t){t!==this.enabled&&(this.enabled=t,this.generation++,this.options.persist(t),T(t?"os.mio.enabled":"os.mio.disabled",{}),T(b.DOCK_REFRESH_ACTIVE,{}),t?await this.mount():this.unmount())}resolveConfig(){const t=ss(this.options.serverConfig,Iy),n=V("os.mio.config",t),o=ss(n,t);return ss({appearance:this.look.appearance,physics:this.look.physics},o)}commitLook(){this.options.persistLook?.({appearance:{...this.look.appearance},physics:{...this.look.physics}})}ensureLayer(){if(this.layer&&this.layer.isConnected)return this.layer;const t=document.getElementById(Ny);if(t)return this.layer=t,t;const n=document.createElement("div");return n.id=Ny,n.className="os-mio",n.setAttribute("aria-hidden","true"),this.options.shell.appendChild(n),this.layer=n,n}async mount(){const t=this.generation;if(this.handle)return;const n=this.parked;if(n){this.parked=null,n.layer.style.removeProperty("display"),n.handle.applyConfig(this.config),n.handle.setAnimating(!0),this.handle=n.handle,this.layer=n.layer;return}try{await this.loadBundle()}catch(i){console.warn("[desktop-mode/mio] bundle failed to load.",i);return}if(t!==this.generation||!this.enabled)return;const o=window.openStationMountMio;if(typeof o!="function"){console.warn("[desktop-mode/mio] bundle loaded but did not publish window.openStationMountMio.");return}const s=await o({host:this.ensureLayer(),config:this.config,position:UO(),savePosition:Dy});if(!s){this.layer?.remove(),this.layer=null;return}if(t!==this.generation||!this.enabled){const i=this.layer;this.layer=null,s.setAnimating(!1),i?(i.style.display="none",this.parked={handle:s,layer:i}):s.destroy();return}this.handle=s}unmount(){const t=this.handle,n=this.layer;if(this.handle=null,this.layer=null,!t||!n){n?.remove();return}const o=t.getPosition();o&&Dy(o),t.setAnimating(!1),n.style.display="none",this.parked={handle:t,layer:n}}loadBundle(){if(typeof window.openStationMountMio=="function")return Promise.resolve();if(!this.loading){if(!this.options.bundleUrl)return Promise.reject(new Error("No Mio bundle URL in the shell config."));this.loading=ke(this.options.bundleUrl).catch(t=>{throw this.loading=null,t})}return this.loading}}function UO(){try{const e=window.localStorage.getItem(Ty);if(!e)return null;const t=JSON.parse(e);return typeof t?.x!="number"||typeof t?.y!="number"||!Number.isFinite(t.x)||!Number.isFinite(t.y)?null:{x:t.x,y:t.y}}catch{return null}}function Dy(e){try{window.localStorage.setItem(Ty,JSON.stringify(e))}catch{}}const Ry=8,FO=e=>`<rect x="28" y="5" width="8" height="12" rx="2" fill="currentColor" transform="rotate(${360/Ry*e} 32 32)"/>`,BO='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">'+Array.from({length:Ry},(e,t)=>FO(t)).join("")+'<circle cx="32" cy="32" r="15.5" fill="none" stroke="currentColor" stroke-width="9"/></svg>',HO=`data:image/svg+xml;base64,${btoa(BO)}`,zO='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8Zm0 1.5c3.4 0 6.2 2.7 6.5 6l-1.2-.6-.8-.4c-.1 0-.2 0-.3-.1H16c-.1-.2-.4-.2-.7 0l-2.9 2.1L9 11.3h-.7L5.5 13v-1.1c0-3.6 2.9-6.5 6.5-6.5Zm0 13c-2.7 0-5-1.7-6-4l2.8-1.7 3.5 1.2h.4s.2 0 .4-.2l2.9-2.1.4.2c.6.3 1.4.7 2.1 1.1-.5 3.1-3.2 5.4-6.4 5.4Z"/></svg>',GO=2400,Oy="os-notch";function jO(e,t){document.getElementById(Oy)?.remove();const n=document.createElement("button");n.type="button",n.id=Oy,n.className="os-notch",n.setAttribute("aria-label",S("Open the site assistant"));const o=document.createElement("span");o.className="os-notch__glyph",o.setAttribute("aria-hidden","true"),o.innerHTML=zO,n.appendChild(o);const s=document.createElement("span");s.className="os-notch__label",s.setAttribute("aria-hidden","true"),s.textContent=S("Site assistant"),n.appendChild(s);const i=document.createElement("span");i.className="os-notch__message",i.setAttribute("aria-live","polite"),n.appendChild(i),n.addEventListener("click",t);let r=null;const a=l=>{r!==null&&window.clearTimeout(r),i.textContent=l,n.classList.add("os-notch--speaking"),r=window.setTimeout(()=>{r=null,n.classList.remove("os-notch--speaking"),window.setTimeout(()=>{n.classList.contains("os-notch--speaking")||(i.textContent="")},200)},GO)};return e.appendChild(n),{say:a,destroy:()=>{r!==null&&window.clearTimeout(r),n.remove()}}}function VO(){return document.fullscreenElement!==null}function qO(){if(VO()){document.exitFullscreen?.().catch(()=>{});return}document.documentElement.requestFullscreen?.().catch(()=>{})}function My(e){const t=document.createElement("span");return t.className="os-shortcuts__chord",e.forEach((n,o)=>{if(o>0){const i=document.createElement("span");i.className="os-shortcuts__plus",i.textContent="+",t.appendChild(i)}const s=document.createElement("kbd");s.className="os-shortcuts__kbd",s.textContent=n,t.appendChild(s)}),t}function KO(e){const t=document.createElement("section");if(t.className="os-shortcuts__section",e.heading){const c=document.createElement("h2");c.className="os-shortcuts__heading",c.textContent=e.heading,t.appendChild(c)}const n=document.createElement("div");n.className="os-shortcuts__scroller";const o=document.createElement("table");o.className="os-shortcuts__table";const s=e.headers??{},i=["key","outside","inside","showDesktop"],r=document.createElement("thead"),a=document.createElement("tr");for(const c of i){const d=document.createElement("th");d.scope="col",d.textContent=s[c]??"",a.appendChild(d)}r.appendChild(a),o.appendChild(r);const l=document.createElement("tbody");for(const c of e.rows??[]){const d=document.createElement("tr"),u=document.createElement("td");if(u.className="os-shortcuts__key-cell",u.appendChild(My(c.keys??[])),c.note){const f=document.createElement("span");f.className="os-shortcuts__note",f.textContent=c.note,u.appendChild(f)}d.appendChild(u);for(const f of["outside","inside","showDesktop"]){const p=document.createElement("td");p.textContent=c[f]??"",d.appendChild(p)}l.appendChild(d)}return o.appendChild(l),n.appendChild(o),t.appendChild(n),t}function YO(e){const t=document.createElement("section");if(t.className="os-shortcuts__section",e.heading){const o=document.createElement("h2");o.className="os-shortcuts__heading",o.textContent=e.heading,t.appendChild(o)}const n=document.createElement("ul");n.className="os-shortcuts__list";for(const o of e.items??[]){const s=document.createElement("li");s.className="os-shortcuts__item",s.appendChild(My(o.keys??[]));const i=document.createElement("span");i.className="os-shortcuts__description",i.textContent=o.description??"",s.appendChild(i),n.appendChild(s)}return t.appendChild(n),t}function XO(e){e.innerHTML="";const t=document.createElement("div");t.className="os-shortcuts";const n=window.openStationAdminBar?.shortcuts;if(!n){const o=document.createElement("p");o.className="os-shortcuts__empty",o.textContent="Keyboard shortcuts are unavailable.",t.appendChild(o),e.appendChild(t);return}n.contextual&&t.appendChild(KO(n.contextual)),n.general&&t.appendChild(YO(n.general)),e.appendChild(t)}const Oc="openstation-shortcuts",ZO=`data:image/svg+xml;base64,${btoa('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" fill="none" stroke="currentColor" stroke-width="5" stroke-linecap="round"><rect x="5" y="14" width="54" height="36" rx="7"/><path d="M17 26h2M27 26h2M37 26h2M47 26h2M22 39h20"/></svg>')}`;function JO(e){e({id:Oc,baseId:Oc,url:"#os-shortcuts",title:window.openStationAdminBar?.shortcuts?.title?String(window.openStationAdminBar.shortcuts.title):"Keyboard shortcuts",icon:ZO,native:!0,render:XO,width:760,height:560,minWidth:480,minHeight:360})}const Py="openstation-rebrand",QO=1200,e1="a[href], button:not([disabled])";async function t1(e){const t=e.seenIntrosUrl;if(t)try{await Be(`${t.replace(/\/$/,"")}/seen`,{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":e.restNonce??""},body:JSON.stringify({slug:Py})},{source:"desktop-mode/rebrand-notice",silent:!0})}catch{}}function n1(){const e=document.createElement("div");e.className="os-announce",e.setAttribute("role","dialog"),e.setAttribute("aria-modal","true"),e.setAttribute("aria-labelledby","os-announce-title"),e.setAttribute("aria-describedby","os-announce-desc");const t=document.createElement("div");t.className="os-announce__card",e.appendChild(t);const n=document.createElement("div");n.className="os-announce__hero",t.appendChild(n);const o=document.createElement("span");o.className="os-announce__eyebrow";const s=document.createElement("span");s.className="os-announce__eyebrow-dot",s.setAttribute("aria-hidden","true"),o.appendChild(s),o.appendChild(document.createTextNode(S("New name"))),n.appendChild(o);const i=document.createElement("h2");i.id="os-announce-title",i.className="os-announce__title",i.textContent=S("Desktop Mode is now OpenStation"),n.appendChild(i);const r=document.createElement("p");r.className="os-announce__subtitle",r.textContent=S("The beginning of a new identity."),n.appendChild(r);const a=document.createElement("div");a.className="os-announce__body",t.appendChild(a);const l=document.createElement("p");l.id="os-announce-desc",l.textContent=S("Why OpenStation? Because it represents much more than a desktop interface. It's an open workspace where WordPress becomes a complete environment for creating, managing and building, just like a real workstation, but powered by the web."),a.appendChild(l);const c=document.createElement("p");c.textContent=S("This update also comes with a new default theme that we hope you enjoy."),a.appendChild(c);const d=document.createElement("p");d.className="os-announce__fine",d.textContent=S("Everything is already set up. You don't need to install any new plugins, so you can keep using the same features as before."),a.appendChild(d);const u=document.createElement("div");u.className="os-announce__actions",t.appendChild(u);const f=document.createElement("button");return f.type="button",f.className="os-announce__btn os-announce__btn--primary",f.dataset.rebrandDismiss="",f.textContent=S("Got it"),u.appendChild(f),e}async function o1(e){const{config:t}=e;if(!t.rebrandNotice||t.seenIntros?.includes(Py))return;await new Promise(c=>window.setTimeout(c,QO));const n=n1(),o=n.querySelector(".os-announce__card"),i=document.activeElement;let r=!1;const a=()=>{r||(r=!0,document.removeEventListener("keydown",l,!0),n.remove(),i?.focus?.(),t1(t))};function l(c){if(!n.isConnected){document.removeEventListener("keydown",l,!0);return}if(c.key==="Escape"){c.preventDefault(),a();return}if(c.key!=="Tab")return;const d=Array.from(n.querySelectorAll(e1));if(d.length===0)return;const u=d[0],f=d[d.length-1],p=n.ownerDocument.activeElement;c.shiftKey&&(p===u||!n.contains(p))?(c.preventDefault(),f.focus()):!c.shiftKey&&(p===f||!n.contains(p))&&(c.preventDefault(),u.focus())}n.addEventListener("click",c=>{o&&!o.contains(c.target)&&a()});for(const c of n.querySelectorAll("[data-rebrand-dismiss]"))c.addEventListener("click",a);document.addEventListener("keydown",l,!0),document.body.appendChild(n),n.querySelector(".os-announce__btn--primary")?.focus()}const s1=new Set(["post"]);function Wy(){const e=window.wp?.os?.myWordpress;return e&&typeof e.trashEntity=="function"?e:null}const Mc="data-os-trash-drop-active",Zt="desktop-mode-recycle-bin",i1=[{id:"recycle-bin-tile",selector:`.os-file-tile[data-file-ref="${Zt}"]`},{id:"recycle-bin-icon",selector:`[data-icon-id="${Zt}"]`},{id:"recycle-bin-dock",selector:`[data-system-id="${Zt}"]`}];let $y=!1;const Pc=new Map;let is=null,Uy=null;function r1(e){return e.payload.type==="desktop-file"}function a1(e){return e.payload.type==="shortcut"}function l1(e){if(!e.kind||!e.ref||!e.entityId||!s1.has(e.kind))return!1;const t=Number.parseInt(e.ref,10);return!Number.isFinite(t)||t<=0?!1:Wy()!==null}function Fy(e,t,n){return e.registerDropTarget({id:t,element:n,acceptLabel:S("Move to Trash","desktop-mode"),accept:o=>{if(o.type==="desktop-file"){const s=o.data,i=s?.placement;if(!i)return!1;const r=$n(s);return r.length>1?r.every(a=>a.file?.ref!==Zt&&a.canTrash!==!1):i.file?.ref===Zt?!1:i.canTrash!==!1}if(o.type==="shortcut"){const s=o.data,i=ji(s);return i.length>0&&i.every(r=>l1(r))}return iO(o)},onEnter:()=>{n.setAttribute(Mc,"")},onLeave:()=>{n.removeAttribute(Mc)},onDrop:(o,s)=>{if(n.removeAttribute(Mc),r1(o)){yw($n(o.payload.data));return}if(!(o.payload.type!=="shortcut"&&rO(o,s))&&a1(o)){const i=Wy();if(!i?.trashEntity)return;const r=i.trashEntity,l=ji(o.payload.data).map(c=>({entityId:c.entityId,ref:Number.parseInt(c.ref,10)})).filter(c=>!!c.entityId&&Number.isFinite(c.ref)&&c.ref>0);if(l.length===0)return;Promise.allSettled(l.map(c=>r(c.entityId,c.ref))).then(c=>{const d=c.filter(f=>f.status==="rejected");for(const f of d)console.error("[openstation] recycle-bin: shortcut trash failed:",f.reason);const u=l.length-d.length;(u>1||d.length>0)&&X({message:d.length>0?`${u} moved to Trash · ${d.length} could not be moved`:`${u} items moved to Trash`,duration:d.length>0?6e3:4e3})})}}})}function c1(e){if($y)return;$y=!0;const t=()=>{for(const{id:n,selector:o}of i1){const s=document.querySelector(o),i=s instanceof HTMLElement?s:null,r=Pc.get(n);if(!i){r?.deregister(),Pc.delete(n);continue}r&&r.el===i||(r?.deregister(),Pc.set(n,{el:i,deregister:Fy(e,n,i)}))}};if(t(),document.addEventListener("os-files-changed",t),K(b.DESKTOP_ICONS_RENDERED,"desktop-mode/files/recycle-bin-icons-target",t),K(b.DOCK_AFTER_RENDER,"desktop-mode/files/recycle-bin-dock-target",t),typeof MutationObserver<"u"){Uy=new MutationObserver(()=>{t()});const n=document.getElementById("os-area")??document.body;Uy.observe(n,{childList:!0,subtree:!0})}K(b.WINDOW_OPENED,"desktop-mode/files/recycle-bin-window-target",n=>{if(n.windowId!==Zt)return;is?.(),is=null;const o=document.querySelector("[data-os-recycle-bin-root]");o instanceof HTMLElement&&(is=Fy(e,"recycle-bin-window",o))}),K(b.WINDOW_CLOSED,"desktop-mode/files/recycle-bin-window-cleanup",n=>{n.windowId===Zt&&(is?.(),is=null)})}function Wc(e){const t=e.placement.file;return!t||t.type!=="user"||t.isAgent!==!0?null:t}function d1(){const e=window.openStationConfig;return e?.restUrl&&e?.restNonce?{restRoot:e.restUrl,restNonce:e.restNonce}:null}function By(e){return{appliesTo(t){return Wc(t)!==null},accept(t,n){const o=Wc(n);if(!o)return!1;const s=Vg({type:e,data:t});return JT(o.agentDragKinds??null,s,Number.parseInt(String(o.ref??""),10)||void 0)},acceptLabel:S("Send to agent","desktop-mode"),onDrop(t,n,o){const s=Wc(o);if(!s)return;const i=Vg({type:t.payload.type,data:t.payload.data}),r=d1();!i||!r||nN({id:Number.parseInt(String(s.ref??""),10),name:String(s.title??""),description:"",avatarUrl:String(s.previewUrl??"")},i,r)}}}let Hy=!1;function u1(){Hy||(Hy=!0,Bi("shortcut",By("shortcut")),Bi("desktop-file",By("desktop-file")))}let zy=!1,Jt=0;function f1(){zy||(zy=!0,xe.contribute("openstation_files_subscribe",()=>{const e=Ct(),t={};for(const[n,o]of e.folders)t[String(n)]=o.updatedAtMs;return{folderVersions:t,placementsVersion:Jt,sharesVersion:Je().state.sharesVersion}}),xe.subscribe("openstation_files",e=>{p1(e)}))}function p1(e){const t=e.folders??[];for(const i of t)Xl(i,"remote"),i.updatedAtMs>Jt&&(Jt=i.updatedAtMs);const n=e.placements??[];for(const i of n)Ui(i,"remote"),i.updatedAtMs>Jt&&(Jt=i.updatedAtMs);const o=e.removed??{};for(const i of o.folders??[])Zl(i,"remote");for(const i of o.placements??[])Bo(i,"remote");typeof e.serverTimeMs=="number"&&e.serverTimeMs>Jt&&(Jt=e.serverTimeMs);const s=e.shares?.pending;if(Array.isArray(s)&&s.length>0&&Bw(s),e.truncated){const i=Array.from(Ct().hydratedFolders);for(const r of i)Te(r).then(a=>{pt(r,a.placements)}).catch(()=>{})}}let Gy=!1;const h1=[];function m1(){if(Gy)return;Gy=!0;const e=t=>{const n=t;!n||n.action!=="untrashed"||g1()};h1.push(bn("os.placement.changed",e),bn("os.shortcut.changed",e),bn("os.folder.changed",e))}function g1(){ql().then(t=>{Fi(t.folders)}).catch(t=>{console.error("[openstation] files restore-sync: listFolders failed",t)});const e=Array.from(Ct().hydratedFolders);for(const t of e)Te(t).then(n=>{pt(t,n.placements)}).catch(n=>{console.error("[openstation] files restore-sync: listPlacements failed for",t,n)})}const rs="os-wallpaper-menu";let Gn=null;function jy(){return Gn!==null}let Vy=0;function w1(e,t,n,o={}){as();const s=++Vy;Os(()=>s===Vy,()=>y1(e,t,n,o))}function y1(e,t,n,o={}){if(n.length===0)return;n=n.slice().sort((u,f)=>{const p=typeof u.sort=="number"?u.sort:100,g=typeof f.sort=="number"?f.sort:100;return p!==g?p-g:u.label.localeCompare(f.label)});const s=document.createElement("os-context-menu");s.setAttribute("open",""),s.classList.add(rs),s.style.left=`${t.x}px`,s.style.top=`${t.y}px`;const i=new Map;let r=null,a=null;const l=()=>{r&&(r.remove(),r=null,a=null)};for(const u of n){i.set(u.id,u);const f=document.createElement("os-context-menu-option");f.dataset.menuItemId=u.id,f.setAttribute("value",u.id),u.heading&&f.setAttribute("heading",""),u.disabled&&f.setAttribute("disabled",""),u.icon&&f.setAttribute("icon",qy(u.icon));const p=Array.isArray(u.children)&&u.children.length>0;p&&f.setAttribute("has-children",""),f.textContent=u.label,f.addEventListener("mouseenter",()=>{if(p){c(u,f);return}l()}),s.appendChild(f)}s.addEventListener("os-context-menu-pick",u=>{const f=u.detail,p=i.get(f.id)??null;if(p){if(Array.isArray(p.children)&&p.children.length>0){if(u.stopPropagation(),a&&a.id===p.id){l();return}const g=s.querySelector(`[data-menu-item-id="${p.id}"]`);g&&c(p,g);return}as(),p.onClick(new MouseEvent("click"))}});function c(u,f){l();const p=document.createElement("os-context-menu");p.setAttribute("open",""),p.classList.add(rs,`${rs}--flyout`),p.dataset.parentId=u.id;const g=(u.children??[]).slice().sort((m,h)=>{const v=typeof m.sort=="number"?m.sort:100,y=typeof h.sort=="number"?h.sort:100;return v!==y?v-y:m.label.localeCompare(h.label)});for(const m of g){const h=document.createElement("os-context-menu-option");h.dataset.menuItemId=m.id,h.setAttribute("value",m.id),m.icon&&h.setAttribute("icon",qy(m.icon)),m.disabled&&h.setAttribute("disabled",""),m.checked&&h.setAttribute("checked",""),h.textContent=m.label,h.addEventListener("os-context-menu-pick",v=>{v.stopPropagation(),as(),m.onClick(new MouseEvent("click"))}),p.appendChild(h)}document.body.appendChild(p),r=p,a=u,mg(p,f)}e.appendChild(s),Gn=s,vl(s);const d=pg(s,{close:()=>as(),siblingSelectors:[`.${rs}--flyout`],excludeOutsideTarget:o.excludeOutsideTarget});s.addEventListener("wallpaper-menu-closed",d),T("os.wallpaper-menu.opened",{items:n.map(u=>u.id)})}function as(){Gn&&(document.querySelectorAll(`.${rs}--flyout`).forEach(e=>e.remove()),Gn.dispatchEvent(new CustomEvent("wallpaper-menu-closed")),Gn.remove(),Gn=null,T("os.wallpaper-menu.closed",{}))}function b1(e){const t=[{id:"create-folder",label:e.labels.createFolder,icon:"dashicons-portfolio",sort:10,onClick:()=>e.createFolder()},{id:"new-url",label:e.labels.newUrl,icon:"dashicons-admin-links",sort:12,onClick:()=>e.createUrl()},{id:"sort-by",label:e.labels.sortHeading,icon:"dashicons-sort",sort:16,onClick:()=>{},children:[{id:"sort-name-asc",label:e.labels.sortNameAsc,sort:10,checked:e.currentSortMode==="name-asc",onClick:()=>e.sortIcons("name-asc")},{id:"sort-name-desc",label:e.labels.sortNameDesc,sort:20,checked:e.currentSortMode==="name-desc",onClick:()=>e.sortIcons("name-desc")},{id:"sort-date-desc",label:e.labels.sortDateDesc,sort:30,checked:e.currentSortMode==="date-desc",onClick:()=>e.sortIcons("date-desc")},{id:"sort-date-asc",label:e.labels.sortDateAsc,sort:40,checked:e.currentSortMode==="date-asc",onClick:()=>e.sortIcons("date-asc")}]},...e.includeShowDesktop===!1?[]:[{id:"show-desktop",label:e.labels.showDesktop,icon:"dashicons-desktop",sort:20,onClick:()=>e.toggleShowDesktop()}],{id:"os-settings",label:e.labels.osSettings,icon:"dashicons-admin-generic",sort:30,onClick:()=>e.openOsSettings()}],n=(e.serverItems??[]).map(i=>v1(i,e)),o=[...t,...n],s=V("os.wallpaper-context-menu",o,{x:e.position?.x??0,y:e.position?.y??0});return Array.isArray(s)?s:o}function v1(e,t){return{id:e.id,label:e.label,icon:e.icon,sort:e.sort,disabled:e.disabled,onClick:()=>{if(e.callbackId){const n=t.serverCallbacks?.[e.callbackId];if(typeof n=="function")return n()}T("os.wallpaper-context-menu.activated",{id:e.id,callbackId:e.callbackId??""})}}}function qy(e){return e.replace(/[^a-zA-Z0-9_-]/g,"")}const ls="os-url-dialog";let cs=null;function $c(){cs&&(cs.dispatchEvent(new CustomEvent("url-dialog-closed")),cs.remove(),cs=null,T("os.files.url-dialog.closed",{}))}function _1(e){if($c(),V("os.files.url-dialog",null,e)===!1)return;const n=document.createElement("div");n.className=`${ls}__overlay os-create-folder-dialog__overlay`,n.setAttribute("role","presentation");const o=document.createElement("div");o.className=`${ls} os-create-folder-dialog`,o.setAttribute("role","dialog"),o.setAttribute("aria-modal","true"),o.setAttribute("aria-labelledby",`${ls}-title`);const s=document.createElement("h2");if(s.id=`${ls}-title`,s.className="os-create-folder-dialog__title",s.textContent=e.title,o.appendChild(s),e.description){const h=document.createElement("p");h.className=`${ls}__description`,h.textContent=e.description,o.appendChild(h)}const i=document.createElement("os-text-field");i.className="os-create-folder-dialog__field",i.setAttribute("label",e.nameLabel??"Name"),i.setAttribute("value",e.initialName??""),i.setAttribute("placeholder","My web app"),i.setAttribute("autocomplete","off"),o.appendChild(i);const r=document.createElement("os-text-field");r.className="os-create-folder-dialog__field",r.setAttribute("label",e.urlLabel??"URL"),r.setAttribute("value",e.initialUrl??"https://"),r.setAttribute("placeholder","https://example.com"),r.setAttribute("type","url"),r.setAttribute("autocomplete","off"),o.appendChild(r);const a=document.createElement("p");a.className="os-create-folder-dialog__error",a.hidden=!0,a.setAttribute("role","alert"),o.appendChild(a);const l=document.createElement("div");l.className="os-create-folder-dialog__actions";const c=document.createElement("os-button");c.className="os-create-folder-dialog__btn os-create-folder-dialog__btn--secondary",c.setAttribute("variant","ghost"),c.textContent="Cancel";const d=document.createElement("os-button");d.className="os-create-folder-dialog__btn os-create-folder-dialog__btn--primary",d.setAttribute("variant","primary"),d.textContent=e.submitLabel??"Create",l.appendChild(c),l.appendChild(d),o.appendChild(l),n.appendChild(o),document.body.appendChild(n),cs=n,Hi(i),T("os.files.url-dialog.opened",{});const u=h=>{Vt(i,h),Vt(r,h),Vt(c,h),Vt(d,h),o.classList.toggle("os-create-folder-dialog--busy",h)},f=h=>{a.textContent=h,a.hidden=!1},p=()=>{$c(),e.onCancel?.()},g=async()=>{const h=nc(r).trim();if(!h){f("Please enter a URL.");return}const v=/^[a-z][a-z0-9+\-.]*:/i.test(h)?h:`https://${h}`;try{new URL(v)}catch{f("That doesn't look like a valid URL.");return}const y=nc(i).trim();a.hidden=!0,u(!0);try{await e.onSubmit({name:y,url:v}),$c()}catch(x){u(!1),f(x instanceof Error?x.message:"Could not save.")}};c.addEventListener("click",()=>p()),d.addEventListener("click",()=>void g()),n.addEventListener("click",h=>{h.target===n&&p()});const m=h=>{h.key==="Escape"?(h.preventDefault(),p()):h.key==="Enter"&&!h.isComposing&&(h.preventDefault(),g())};o.addEventListener("keydown",m),n.addEventListener("url-dialog-closed",()=>{o.removeEventListener("keydown",m)})}const Ky=[];let Uc=!1;(function(){const t=window;if(t.wp||(t.wp={}),t.wp.os)return;const n={whenReady(o){if(typeof o=="function"){if(Uc){Promise.resolve().then(o);return}Ky.push(o)}},ready(o){n.whenReady(o)},isReady(){return Uc}};t.wp.os=n})();const ir="desktop-mode-os-settings";let Fc=[],rr=Number.POSITIVE_INFINITY,Bc=!1;function Ke(e,t=1500){if(Fc.push(e),t<rr&&(rr=t),Bc)return;Bc=!0;const n=()=>{const o=Fc;Fc=[],rr=Number.POSITIVE_INFINITY,Bc=!1;for(const s of o)try{s()}catch(i){typeof console<"u"&&console.error("[openstation] scheduleIdleBoot callback threw:",i)}};typeof window.requestIdleCallback=="function"?window.requestIdleCallback(n,{timeout:rr}):window.setTimeout(n,0)}function Yy(){const e=window.openStationConfig;if(!e)return;const t=document.getElementById("os-area");if(!t)return;const n=new lE(t),o=document.getElementById("os-wallpaper"),s=e.pluginUrl||"";let i=null;o&&(i=new rp(o,s));const r=document.getElementById("os-widgets");let a=null;_O(),Ek(),r&&(a=new bC(r,s)),Yf({id:"pixijs",url:`${s}/assets/vendor/pixi.min.js`,isReady:()=>typeof window.PIXI<"u"});const l=new Xk({mediaUrl:e.mediaUrl,restNonce:e.restNonce,canUpload:!!e.canUpload,isAdmin:!!e.currentUserIsAdmin,extendedOptions:e.extendedOptions??null,extendedOptionsUrl:e.extendedOptionsUrl??"",osSettingsPanelBundleUrl:e.osSettingsPanelBundleUrl??"",canManageDesktopThemes:!!e.canManageDesktopThemes,desktopThemesUrl:e.desktopThemesUrl??""},i??new rp(document.createElement("div"),s));l.apply();const c=document.getElementById("os-shell"),d=new $O({shell:c??document.body,bundleUrl:e.mioBundleUrl??"",serverConfig:e.mio,enabled:l.state.mioEnabled,persist:C=>{l.state.mioEnabled=C,l.save()},savedLook:l.state.mioStyle,persistLook:C=>{l.state.mioStyle=C,l.save()}}),u=d.api();d.boot(),a&&AO({osSettings:l,layer:a});const f=new QC({aiSearchUrl:e.aiSearchUrl??"",restNonce:e.restNonce,adminUrl:e.adminUrl,isAiAvailable:()=>e.aiAssistant?.available===!0&&e.aiAssistant?.assistantProviderConfigured===!0,isOverrideEnabled:()=>l.getOsSettingsSnapshot().ai.enabled!==!1},e.aiAssistantBundleUrl??"");f.attachAsk(sI({config:()=>e,fallbackContext:()=>({close:()=>f.close(),openInWindow:(C,B,q)=>{n.open({url:C,title:B,icon:q??"dashicons-admin-generic"})},confirm:C=>Nn({message:C})})}));const p=new YI,g=new ux;document.addEventListener(we.START,C=>{const q=C.detail?.payload;if(!q||q.type!=="shortcut"&&q.type!=="desktop-file")return;const ne=q.data?.bridgePayload;ne&&p.start(ne)}),document.addEventListener(we.END,()=>{p.end()}),Ke(()=>kx(g)),Ke(()=>Wx(n)),window.addEventListener("message",C=>{if(C.origin!==window.location.origin)return;const B=C.data;!B||B.type!=="os-drop-failed"||X({message:"Could not insert into the editor."})}),ng({id:"desktop-mode-ai-assistant",label:"AI Assistant",open:()=>f.open(),close:()=>f.close(),isOpen:()=>f.isOpen}),zx(),dE(n),mE(n),Ke(()=>{new PA({manager:n,adminUrl:e.adminUrl}).install(),new GA({manager:n,adminUrl:e.adminUrl}).install()}),document.addEventListener("os-open-ai",()=>{ml("desktop-mode-ai-assistant")}),document.addEventListener("click",C=>{const B=C.target;!(B instanceof Element)||!B.closest("#wp-admin-bar-command-palette")||(C.preventDefault(),C.stopImmediatePropagation(),ml("desktop-mode-ai-assistant"))},!0);const m=document.getElementById("os-dock"),h=document.getElementById("os-shell"),v=h?.querySelector(".os-shell__body");let y=null,x=!1;const M=C=>C.some(B=>!!B.windowId&&n.getAllByBaseIdOnActiveDesktop(B.windowId).length>0),I=DC({manager:n,appendSystemTile:C=>y?.appendSystemTile(C),removeSystemTile:C=>y?.removeSystemTile(C)}),W=I.sync;vE({getSnapshot:()=>l.getOsSettingsSnapshot(),openById:(C,B)=>I.openById(C,B),adminUrl:e.adminUrl});const P=C=>{const B=ae(C,e.adminUrl),q=y?y.getMenuItems():e.dockItems??[];for(const ne of q){if(ae(ne.url,e.adminUrl)===B)return{title:ne.title,icon:ne.icon,url:ne.url,submenu:ne.submenu,selfLabel:ne.selfLabel,multi:ne.multi};for(const ge of ne.submenu??[])if(ae(ge.url,e.adminUrl)===B)return{title:ge.title,icon:ne.icon,url:ne.url,multi:ne.multi}}return null};if(ME({adminUrl:e.adminUrl,deriveSlug:C=>ae(C,e.adminUrl),openWindow:C=>{n.open(C)},findDockEntry:P}),Mt({id:"desktop-mode-posts",nativeWindowId:"desktop-mode-posts",matches:(C,B)=>{if(!B.pathname.endsWith("/edit.php"))return!1;const q=B.searchParams.get("post_type");return!q||q==="post"},enabled:C=>C.nativePostsEnabled===!0}),Mt({id:"desktop-mode-pages",nativeWindowId:"desktop-mode-pages",matches:(C,B)=>B.pathname.endsWith("/edit.php")?B.searchParams.get("post_type")==="page":!1,enabled:C=>C.nativePagesEnabled===!0}),Mt({id:"desktop-mode-users",nativeWindowId:"desktop-mode-users",matches:(C,B)=>B.pathname.endsWith("/users.php"),enabled:C=>C.nativeUsersEnabled===!0}),Mt({id:"desktop-mode-user-edit",nativeWindowId:"desktop-mode-user-edit",matches:(C,B)=>{if(bE(B))return!1;const q=B.pathname;return q.endsWith("/profile.php")?!0:q.endsWith("/user-edit.php")?B.searchParams.has("user_id"):!1},enabled:C=>C.nativeUsersEnabled===!0,onMatch:(C,B)=>{const q=parseInt(B.searchParams.get("user_id")??"0",10);q>0&&Qk(q)}}),Mt({id:"desktop-mode-comments",nativeWindowId:"desktop-mode-comments",matches:(C,B)=>B.pathname.endsWith("/edit-comments.php"),enabled:C=>C.nativeCommentsEnabled===!0,onMatch:(C,B)=>{const q=parseInt(B.searchParams.get("p")??"0",10);q>0?sp(q):t0()}}),Mt({id:"desktop-mode-plugins",nativeWindowId:"desktop-mode-plugins",matches:(C,B)=>{const q=B.pathname;return q.endsWith("/plugins.php")||q.endsWith("/plugin-install.php")},enabled:C=>C.nativePluginsEnabled===!0,onMatch:(C,B)=>{const q=B.pathname.endsWith("/plugin-install.php")?"browse":"installed";Promise.resolve().then(()=>X1).then(ne=>{ne.setPluginsWindowTab(q)})}}),m&&h&&v&&e.dockItems){t.classList.add("os-area--with-dock");const C=l.getOsSettingsSnapshot(),B=C.desktopLayout,q=C.dockPlacement,ne=be=>{lm(t,be,{openWindow:I.openById,manager:n,deriveWindowId:Ce=>ae(Ce,e.adminUrl)})};y=ZC({shellRoot:h,shellBody:v,bottomDockEl:m,desktopArea:t,windowManager:n,adminUrl:e.adminUrl,renderIcons:ne,getSettings:()=>{const be=l.getOsSettingsSnapshot();return{itemVisibility:be.itemVisibility,dockOrder:be.dockOrder}}},B,e.dockItems,e.desktopIcons,q),qS({windowManager:n,adminUrl:e.adminUrl,getMenuItems:()=>y?.getMenuItems()??[],getSystemItem:be=>y?.getSystemTile(be)??null}),jO(h,()=>{document.dispatchEvent(new CustomEvent("os-open-ai"))});const ge=FI(e.pwa?.appName||"WordPress",X),gt={id:Yv,title:"System",icon:Zv,order:Gs.system,onOpen:$,get submenu(){const be=[{title:"OpenStation Preferences",url:"",windowId:ir,onSelect:()=>$()}];return e.homeUrl&&be.push({title:"View site",url:e.homeUrl}),be.push({title:"Fullscreen",url:"",onSelect:qO},{title:"Keyboard shortcuts",url:"",windowId:Oc,onSelect:()=>JO(Ce=>{n.open(Ce)})},{title:"Report a bug",url:"",windowId:No,onSelect:()=>k()}),!Am()&&!x&&be.push({title:ge.title,url:"",onSelect:ge.onOpen}),e.logoutUrl&&be.push({title:"Log out",url:"",onSelect:()=>{window.location.assign(e.logoutUrl)}}),be},isOpen:()=>M(gt.submenu??[])};y.appendSystemTile(gt,"core"),Cm().then(be=>{x=be})}function $(C={}){const B={extended:"features",effects:"windows"},q=C.tabId?B[C.tabId]:void 0;q&&(C={...C,tabId:q}),C.tabId&&(l.activeTabId=C.tabId),n.open({id:ir,baseId:ir,url:"#os-settings",title:"OpenStation Preferences",icon:HO,native:!0,render:ne=>l.renderPanel(ne),width:820,height:720,minWidth:560,minHeight:480}),C.tabId&&l.focusTab(C.tabId)}function k(){n.open({id:No,baseId:No,url:`#${No}`,title:"Report a bug",icon:"dashicons-buddicons-replies",native:!0,render:C=>kI(C),width:560,height:620,minWidth:420,minHeight:480})}document.addEventListener("os-open-bug-report",()=>{k()}),y&&(y.appendSystemTile(Qv(),"core"),y.appendSystemTile({id:PO,title:"Mio",icon:WO,placeable:!0,order:Gs.mio,isOpen:()=>u.isEnabled(),onOpen:()=>{u.toggle()}},"plugin"),y.appendSystemTile({id:Kv,title:"Overview",icon:Xv,order:Gs.overview,isOpen:()=>n._overviewActive,onOpen:()=>{n._overviewActive?n.exitOverview():n.enterOverview()}},"plugin"));const w=y?.getPrimary()??null;W(Array.isArray(e.nativeWindows)?e.nativeWindows:[]);const E=HL(e.session);function _(C){return C===ir?($(),!0):C===No?(k(),!0):I.openById(C)}const O=typeof e.soloWindow=="string"?e.soloWindow:"";O&&queueMicrotask(()=>{if(_(O))return;const C=O.startsWith("os-game-")?O.slice(8):"";if(C){hp.launch(C).catch(B=>{typeof console<"u"&&console.error("[openstation] solo game failed to launch:",B)});return}typeof console<"u"&&console.error(`[openstation] solo window "${O}" is not registered; nothing to paint.`)});const H=E&&!O?GL(n,e,t,_).catch(C=>{typeof console<"u"&&console.error("[openstation] session restore failed:",C)}):Promise.resolve(),G=e.defaultWindow?.enabled!==!1,j=e.defaultWindow?.url??"",L=typeof j=="string"&&j.startsWith("native:");!O&&VL({fromPortal:e.fromPortal,fromPortalIntent:e.fromPortalIntent,hasSession:E,defaultEnabled:G,isNativeDefault:L})&&H.then(()=>jL(n,e).catch(C=>{typeof console<"u"&&console.error("[openstation] openCurrentPage failed:",C)}));const F=XL(n,e);JL(F);const D=async C=>{try{const B=await Dl(n,e.defaultWindowUrl,{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json","X-WP-Nonce":e.restNonce},body:JSON.stringify({url:C})},{source:"desktop-mode/default-window"});if(!B.ok)throw new Error(`HTTP ${B.status}`);const q=await B.json();e.defaultWindow=q,document.dispatchEvent(new CustomEvent("os-default-window-changed",{detail:q}))}catch(B){T(b.SHELL_ERROR,{scope:"default-window-save",error:B}),typeof console<"u"&&console.error("[openstation] Failed to save default window:",B)}};if(n.onToggleStartupRequested=C=>{const B=e.defaultWindow,q=!!C.config.native,ne=q?`native:${C.id}`:C.getCurrentUrl(),ge=q?B?.url===ne:sd(B?.url??"")===sd(ne),gt=!!B?.enabled&≥D(gt?null:ne)},e.defaultWindow?.enabled&&e.fromPortal&&!e.fromPortalIntent&&!E&&L){const C=j.slice(7);queueMicrotask(()=>{_(C)})}const A=C=>{y?.appendSystemTile(C)},R=CO({layer:a});R(Array.isArray(e.serverWidgets)?e.serverWidgets:[]);const U=S0({osSettings:l});U(Array.isArray(e.serverWallpapers)?e.serverWallpapers:[]),K(b.WALLPAPERS_SERVER_CHANGED,"desktop-mode/wallpapers-server-sync",C=>{const B=C?.wallpapers;Array.isArray(B)&&U(B)});const N=C0();N(Array.isArray(e.serverGames)?e.serverGames:[]);const z=I0();z(Array.isArray(e.serverDesktopThemes)?e.serverDesktopThemes:[]);const Z=B0();Z(Array.isArray(e.serverCommandScripts)?e.serverCommandScripts:[],Array.isArray(e.serverCommands)?e.serverCommands:[]);const se=G0();se(Array.isArray(e.serverSettingsTabScripts)?e.serverSettingsTabScripts:[],Array.isArray(e.serverSettingsTabs)?e.serverSettingsTabs:[]);const oe=Y0();oe(Array.isArray(e.serverTitleBarButtonScripts)?e.serverTitleBarButtonScripts:[]);const _e=tS();_e(Array.isArray(e.serverWindowActionScripts)?e.serverWindowActionScripts:[]);const pe=RS();pe(Array.isArray(e.serverUnfocusEffectScripts)?e.serverUnfocusEffectScripts:[]);const ye=OS();ye(Array.isArray(e.serverWindowLinkRendererScripts)?e.serverWindowLinkRendererScripts:[]),PS({manager:n,osSettings:l}),g_({osSettings:l}),RE({manager:n}),pS({manager:n,osSettings:l}),wS({manager:n,openUrl:C=>{if(C.windowId&&I.openById(C.windowId,{source:"related-entities",...C.params?{params:C.params}:{}})||!C.url||Ge(C.url))return;const B=ae(C.url,e.adminUrl);n.open({id:B,baseId:B,url:C.url,title:C.label,icon:C.icon||"dashicons-admin-links"})}}),LS({manager:n});const he=WS();he(Array.isArray(e.serverDockRailRendererScripts)?e.serverDockRailRendererScripts:[]),lA()(Array.isArray(e.serverWindowThemeScripts)?e.serverWindowThemeScripts:[],Array.isArray(e.serverWindowThemes)?e.serverWindowThemes:[]),uA(),fA()(Array.isArray(e.serverWindowControlScripts)?e.serverWindowControlScripts:[],Array.isArray(e.serverWindowControls)?e.serverWindowControls:[]),mA()(Array.isArray(e.serverWindowSlotScripts)?e.serverWindowSlotScripts:[],Array.isArray(e.serverWindowSlots)?e.serverWindowSlots:[]),Nh(Array.isArray(e.serverWindowNotices)?e.serverWindowNotices:[]),IA()(Array.isArray(e.serverWindowChromeScripts)?e.serverWindowChromeScripts:[],Array.isArray(e.serverWindowChromes)?e.serverWindowChromes:[]);const xs=NA(n);yS(n),Ke(()=>bS()),gE(),K("os.shell.toast","desktop-mode/shell-toast",C=>{!C||typeof C.message!="string"||X({message:C.message,action:C.action,duration:C.duration})});const Zc=e,cM=Zc.recycleBinCount;lI(Number(cM)||0,typeof Zc.recycleBinCountUrl=="string"?Zc.recycleBinCountUrl:""),wI({getRecycleBinCount:aI}),window.__openStationConnectionBridge=xs,K(b.WINDOW_CLOSED,"desktop-mode/connection-cleanup",C=>{C?.windowId&&xs.onWindowClosed(C.windowId)}),K(b.IFRAME_READY,"desktop-mode/connection-rearm",C=>{C?.windowId&&xs.onIframeReady(C.windowId)});const dM=IC(n),uM=BL({layoutDispatcher:y,desktopArea:t,config:e,syncNativeWindows:W,syncServerWidgets:R,syncServerWallpapers:U,syncServerCommands:Z,syncServerSettingsTabs:se,syncServerTitleBarButtons:oe,syncServerWindowActions:_e,syncServerUnfocusEffects:pe,syncServerWindowLinkRenderers:ye,syncServerDockRailRenderers:he,syncServerGames:N,syncServerDesktopThemes:z,renderIcons:C=>{if(y){y.applyDesktopIcons(C);return}lm(t,C,{openWindow:I.openById,manager:n,deriveWindowId:B=>ae(B,e.adminUrl)})},syncShortcuts:()=>{const C=l.getOsSettingsSnapshot();es(C.itemVisibility,C.dockPromotedPositions)}});document.addEventListener($f,()=>{y&&y.setLayout(y.getLayout());for(const C of n._stack)try{C.repaintWindowControls(),C.repaintThemedChrome()}catch(B){T(b.SHELL_ERROR,{scope:"desktop-theme-repaint",id:C.id,error:B})}}),l.subscribeOsSettings(C=>{if(!y)return;const B=y.getLayout(),q=y.getDockPlacement();y.setDockPlacement(C.dockPlacement),y.setLayout(C.desktopLayout),Ls.dock=y.getPrimary(),Ls.sideDock=y.getSide(),Ls.desktopLayout=C.desktopLayout,Ls.dockPlacement=y.getDockPlacement(),B===C.desktopLayout&&q===C.dockPlacement&&y.refresh(),es(C.itemVisibility,C.dockPromotedPositions),Mg(C.desktopLayout)}),aR(()=>l.getOsSettingsSnapshot().itemVisibility,()=>l.getOsSettingsSnapshot().dockPromotedPositions),Mg(l.getOsSettingsSnapshot().desktopLayout);const Ls=$T({manager:n,dock:w,layoutDispatcher:y,osSettings:l,iconsApi:BC,filesApi:We,saveSession:F,widgetLayer:a,registerWindow:dM,openWindowById:I.openById,openNewWindowById:I.openNewById,loadWindowScriptById:I.loadScriptById,placeSystemTile:A,setDefaultWindow:D,refreshMenu:uM,openOsSettings:$,aiAssistant:f,dragBridge:p,dragManager:g,connect:xs.connect,getConnection:xs.getConnection,mio:u,wallpaperSuspend:{suspend:C=>i?.suspend(C),resume:C=>i?.resume(C),isSuspended:()=>i?.isSuspended()??!1},config:e});UT(Ls),Ke(()=>c1(g)),Ke(()=>u1()),x0(),d_(),e.gamesEnabled!==!1&&W0({currentUserId:Number(e.currentUserId)||0}),Ke(()=>gL()),Ke(()=>yL()),Ke(()=>NL({currentUserId:Number(e.currentUserId)||0})),bO({host:t,config:e,onError:C=>{X({message:C})}}),qT({openUrl:({id:C,url:B,title:q,icon:ne})=>(Ge(B)||n.open({id:C,baseId:C,url:B,title:q,icon:ne}),!0),openNativeWindow:C=>I.openById(C),deriveWindowId:C=>ae(C,e.adminUrl)}),Ug(e.userFileAssociations??{}),kO({update:e.coreUpdate,openUrl:({url:C,title:B})=>{Ge(C)||n.open({id:"update-core",baseId:"update-core",url:C,title:B,icon:"dashicons-update"})}});const lb=({url:C,title:B})=>{if(Ge(C))return;const q=ae(C,e.adminUrl);n.open({id:q,baseId:q,url:C,title:B,icon:"dashicons-info"})};if(vy({notices:e.coreNotices,openUrl:lb}),vy({notices:e.pluginNotices,openUrl:lb,keyPrefix:"plugin-notice"}),o1({config:e}),typeof e.filesUrl=="string"&&e.filesUrl){Kg({baseUrl:e.filesUrl,nonce:e.restNonce});const C=document.getElementById("os-area");if(C){const B=Sw(C,0),q=()=>{t.classList.contains("os-area--booting")&&requestAnimationFrame(()=>{t.classList.remove("os-area--booting")})},ne=setTimeout(q,2e3);B.hydrated.then(()=>{clearTimeout(ne),q()})}}Ke(()=>f1()),Ke(()=>m1()),Ke(()=>Vx()),T(b.COMPONENTS_REGISTERED,{tags:[...Mi]}),Ux(),GI(e,X);const cb=()=>{Cb(e.shellOverlaysBundleUrl??""),Sb(e.windowSystemBundleUrl??"")};typeof window.requestIdleCallback=="function"?window.requestIdleCallback(cb,{timeout:1500}):window.setTimeout(cb,0),T(b.INIT,{config:e}),Uc=!0;const fM=Ky.splice(0);for(const C of fM)try{C()}catch(B){T(b.SHELL_ERROR,{scope:"when-ready-cb",error:B}),typeof console<"u"&&console.error("[openstation] whenReady cb threw:",B)}l.apply(),a?.hydrate(),window.addEventListener("pagehide",()=>{i?.teardownActive(),a?.disposeAll()}),QL(),DL(n,e);const db=(C,B=!0)=>{const q=We.store.getState().placementsByFolder.get(0)??[],ne=C(q),ge=Math.max(1,Math.floor((t.clientHeight-16)/110)),gt=new Set;let be=0;for(const Ce of ne){const Re=xt(16+Math.floor(be/ge)*96,16+be%ge*110,gt,t);gt.add(`${Re.col},${Re.row}`),be++,!(Ce.x===Re.x&&Ce.y===Re.y)&&(We.store.upsertPlacement({...Ce,x:Re.x,y:Re.y,sortOrder:be}),!(!B||Vi(Ce))&&Rn(Ce.id,{x:Re.x,y:Re.y,sortOrder:be}).catch(wt=>{console.error("[openstation] relayout persist failed",wt)}))}},ub=C=>B=>{const q=B.slice();switch(C){case"name-asc":q.sort((ne,ge)=>ne.file.title.localeCompare(ge.file.title));break;case"name-desc":q.sort((ne,ge)=>ge.file.title.localeCompare(ne.file.title));break;case"date-asc":q.sort((ne,ge)=>ne.updatedAtMs-ge.updatedAtMs);break;case"date-desc":q.sort((ne,ge)=>ge.updatedAtMs-ne.updatedAtMs);break}return q},Jc="desktop-mode:root-sort-mode",pM=C=>C==="name-asc"||C==="name-desc"||C==="date-asc"||C==="date-desc";let fr=(()=>{try{const C=window.localStorage.getItem(Jc);return pM(C)?C:null}catch{return null}})();const fb=C=>{fr=C;try{C?window.localStorage.setItem(Jc,C):window.localStorage.removeItem(Jc)}catch{}};if(K("os.files.tile-manually-placed","desktop-mode/root-sort-clear",C=>{C?.folderId===0&&fb(null)}),typeof ResizeObserver<"u"){let C=t.clientWidth,B=t.clientHeight;new ResizeObserver(()=>{if(!fr)return;const ne=t.clientWidth,ge=t.clientHeight;ne===C&&ge===B||(C=ne,B=ge,db(ub(fr),!1))}).observe(t)}let pb=!1;t.addEventListener("pointerdown",C=>{C.isPrimary&&(pb=C.target===t)}),t.addEventListener("click",C=>{l.state.showDesktopOnWallpaperClick&&C.target===t&&pb&&(t.classList.contains("os-area--overview")||jy()||g.recentlyEndedDrag()||lL()||n.toggleShowDesktop())}),t.addEventListener("contextmenu",C=>{if(C.target!==t)return;C.preventDefault();const B=C.clientX,q=C.clientY;(()=>{if(t.classList.contains("os-area--overview"))return;if(jy()){as();return}const ne={x:B,y:q},ge=()=>{const Ce=t.getBoundingClientRect(),Re=Math.max(0,ne.x-Ce.left),wt=Math.max(0,ne.y-Ce.top),Ts=vw(We.store.getState().placementsByFolder.get(0)??[]);return xt(Re,wt,Ts,t)},gt=(Ce,Re)=>{_1({title:Ce,description:Re,nameLabel:"Name",urlLabel:"URL",submitLabel:"Create",onSubmit:async({name:wt,url:Ts})=>{const hb=ge(),hM=await Dn({type:"link",ref:Ts,parentId:0,x:hb.x,y:hb.y,meta:wt?{name:wt}:void 0});We.store.upsertPlacement(hM)}})},be=b1({createFolder:()=>{sc({onSubmit:async Ce=>{const Re=await Kl({name:Ce}),wt=ge(),Ts=await Dn({type:"folder",ref:String(Re.id),parentId:0,x:wt.x,y:wt.y});We.store.upsertFolder(Re),We.store.upsertPlacement(Ts)}})},createUrl:()=>gt("New URL","Opens the URL in a new browser tab."),toggleShowDesktop:()=>n.toggleShowDesktop(),openOsSettings:()=>$(),sortIcons:Ce=>{fb(Ce),db(ub(Ce))},currentSortMode:fr,includeShowDesktop:!l.state.showDesktopOnWallpaperClick,position:{x:B,y:q},labels:{createFolder:"New folder",showDesktop:"Show desktop",osSettings:"OpenStation Preferences",sortHeading:"Sort by",sortNameAsc:"Name (A → Z)",sortNameDesc:"Name (Z → A)",sortDateAsc:"Date (oldest first)",sortDateDesc:"Date (newest first)",newUrl:"New URL"},serverItems:e.serverWallpaperMenuItems??[]});w1(document.body,{x:B,y:q},be)})()}),Promise.resolve().then(()=>lM).then(C=>{C.bootOsFileDrop({config:e.dropConfig,mediaUrl:e.mediaUrl,restNonce:e.restNonce,filesUrl:e.filesUrl,storage:e.desktopStorage})}),document.dispatchEvent(new CustomEvent("os-init",{detail:{config:e,restored:E}}))}RO(),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",Yy):Yy();const de={FILES_DETECTED:"os.drop.files-detected",FILES_REJECTED:"os.drop.files-rejected",DIALOG_FIELDS:"os.drop.dialog-fields",BEFORE_UPLOAD:"os.drop.before-upload",UPLOAD_STARTED:"os.drop.upload-started",UPLOAD_PROGRESS:"os.drop.upload-progress",AFTER_UPLOAD:"os.drop.after-upload",UPLOAD_FAILED:"os.drop.upload-failed"},E1=32;function k1(e){if(!e)return[];const t=[];for(let n=0;n<e.length;n++){const o=e[n];if(o.kind!=="file")continue;const s=typeof o.webkitGetAsEntry=="function"?o.webkitGetAsEntry():null;s&&t.push(s)}return t}function S1(e){const t=e.createReader();return new Promise((n,o)=>{const s=[],i=()=>{t.readEntries(r=>{if(r.length===0){n(s);return}s.push(...r),i()},o)};i()})}function A1(e){return new Promise((t,n)=>{e.file(t,n)})}async function C1(e){const t={files:[],emptyDirs:[],hadDirectory:!1};for(const n of e)await Xy(n,"",t,0);return t}async function Xy(e,t,n,o){if(o>E1)return;if(e.isFile){try{const r=await A1(e);n.files.push({file:r,relativePath:t?`${t}${r.name}`:""})}catch{}return}if(!e.isDirectory)return;n.hadDirectory=!0;const s=`${t}${e.name}`;let i=[];try{i=await S1(e)}catch{i=[]}if(i.length===0){n.emptyDirs.push(s);return}for(const r of i)await Xy(r,`${s}/`,n,o+1)}const Zy=[".components-drop-zone","[data-drop-zone]",".uploader-window",".media-frame-content"];function ds(e){const t=e.dataTransfer?.types;if(!t)return!1;const n=t;if(typeof n.includes=="function")return n.includes("Files");if(typeof n.contains=="function")return n.contains("Files");for(let o=0;o<n.length;o++)if(n[o]==="Files")return!0;return!1}function ar(e){const t=e?.closest?.(".os-window");if(!t)return;const n=/^wp-window-(.+)$/.exec(t.id||"");return n?n[1]:void 0}function I1(e){if(!e)return;const t=document.querySelectorAll("iframe");for(const n of Array.from(t))if(n.contentWindow===e){const o=ar(n);return o||n.closest("[data-window-id]")?.getAttribute("data-window-id")||void 0}}function Jy(e){const t=window;if(t.__openStationOsFileDropMounted)return t.__openStationOsFileDropMounted;if(!e.config.enabled)return L1();const n=x1();let o=0,s=null;const i=()=>{o=0,n.classList.remove("is-active"),s!==null&&(clearTimeout(s),s=null)},r=()=>{s!==null&&clearTimeout(s),s=setTimeout(i,250)},a=m=>{ds(m)&&(m.preventDefault(),o++,n.classList.add("is-active"),r())},l=m=>{if(ds(m)){if(m.defaultPrevented){i();return}m.preventDefault(),m.dataTransfer&&(m.dataTransfer.dropEffect="copy"),r()}},c=()=>{o=Math.max(0,o-1),o===0&&n.classList.remove("is-active")},d=m=>{if(!ds(m))return;if(m.defaultPrevented){i();return}m.preventDefault(),i();const h=k1(m.dataTransfer?.items),v=Qy(m);if(h.some(x=>x.isDirectory)){eb(h,v,e);return}const y=m.dataTransfer?.files?Array.from(m.dataTransfer.files):[];y.length!==0&&Hc(y,v,e)},u=()=>i(),f=()=>{document.visibilityState==="hidden"&&i()},p=m=>{if(m.origin!==window.location.origin)return;const h=m.data;if(!h||h.type!=="os-file-drop"||!Array.isArray(h.files)||h.files.length===0)return;const v=h.files.filter(M=>M instanceof File);if(v.length===0)return;const y=I1(m.source);if(!y)return;const x={surface:"iframe",windowId:y,x:typeof h.x=="number"?h.x:0,y:typeof h.y=="number"?h.y:0};o=0,n.classList.remove("is-active"),Hc(v,x,e)};window.addEventListener("dragenter",a),window.addEventListener("dragover",l),window.addEventListener("dragleave",c),window.addEventListener("drop",d),window.addEventListener("dragend",u),document.addEventListener("visibilitychange",f),window.addEventListener("blur",u),window.addEventListener("message",p);const g={dispose:()=>{window.removeEventListener("dragenter",a),window.removeEventListener("dragover",l),window.removeEventListener("dragleave",c),window.removeEventListener("drop",d),window.removeEventListener("dragend",u),document.removeEventListener("visibilitychange",f),window.removeEventListener("blur",u),window.removeEventListener("message",p),n.remove(),delete window.__openStationOsFileDropMounted}};return t.__openStationOsFileDropMounted=g,g}function x1(){const e=document.querySelector(".os-drop-overlay");if(e)return e;const t=document.createElement("div");t.className="os-drop-overlay",t.setAttribute("aria-hidden","true"),t.style.cssText=["position:fixed","inset:0","pointer-events:none","z-index:200","opacity:0","transition:opacity 120ms ease","background:radial-gradient(circle at center, rgba(34,113,177,0.18) 0%, rgba(34,113,177,0.06) 60%, transparent 100%)","box-shadow:inset 0 0 0 3px rgba(34,113,177,0.55)"].join(";");const n=document.createElement("div");n.style.cssText=["position:absolute","top:50%","left:50%","transform:translate(-50%,-50%)","padding:14px 22px","border-radius:12px","background:rgba(20,20,24,0.78)","color:#fff","font:600 14px/1.2 -apple-system,BlinkMacSystemFont,sans-serif","letter-spacing:0.02em"].join(";"),n.textContent="Drop to upload",t.appendChild(n),document.body.appendChild(t);const o=document.createElement("style");return o.textContent=".os-drop-overlay.is-active{opacity:1!important;}",document.head.appendChild(o),t}function L1(){const e=o=>{if(!ds(o))return;const s=o.target;s?.closest&&Zy.some(i=>s.closest(i))||o.preventDefault()};window.addEventListener("dragover",e),window.addEventListener("drop",e);const t=window,n={dispose:()=>{window.removeEventListener("dragover",e),window.removeEventListener("drop",e),delete t.__openStationOsFileDropMounted}};return t.__openStationOsFileDropMounted=n,n}function Qy(e){const t=e.clientX,n=e.clientY;let o=e.target;for(;o&&o!==document.body;){if(o.classList.contains("os-file-tile")&&o.dataset.fileType==="folder"){const s=Number(o.dataset.fileRef??0);if(Number.isFinite(s)&&s>0)return{surface:"folder",folderId:s,x:t,y:n}}if(o.tagName==="IFRAME")return{surface:"iframe",windowId:ar(o),x:t,y:n};if(o.classList.contains("os-window")||o.hasAttribute("data-window-id")){const s=ar(o)??(o.getAttribute("data-window-id")||void 0),i=s?/^os-folder-(\d+)/.exec(s):null;return i?{surface:"folder",folderId:Number(i[1]),windowId:s,x:t,y:n}:{surface:"window",windowId:s,x:t,y:n}}if(o.dataset?.folderId!==void 0){const s=Number(o.dataset.folderId);return Number.isFinite(s)&&s>0?{surface:"folder",folderId:s,x:t,y:n}:{surface:"wallpaper",x:t,y:n}}if(o.id==="os-wallpaper"||o.classList.contains("os-wallpaper")||o.classList.contains("os-desktop"))return{surface:"wallpaper",x:t,y:n};o=o.parentElement}return{surface:"unknown",x:t,y:n}}async function Hc(e,t,n){const o=V(de.FILES_DETECTED,e,t);if(!Array.isArray(o)||o.length===0)return;const{accepted:s,rejected:i}=zc(o,n.config);if(i.length>0&&(T(de.FILES_REJECTED,{rejections:i,context:t}),X({message:i.length===1?i[0].message:`${i.length} files couldn't be uploaded.`})),s.length===0)return;const r=s.map(({file:a,mime:l})=>{const c={file:a,mime:l,fields:Gc(a,l)},d=V(de.DIALOG_FIELDS,c,t);return!d||typeof d!="object"||!("fields"in d)||typeof d.fields!="object"?c:d});await n.openDialog(r,t)}async function eb(e,t,n){if(!n.storage?.canUpload||!n.filesUrl){X({message:"Folder uploads need desktop storage, which is not available for your account."});return}const o=await C1(e),s=V(de.FILES_DETECTED,o.files.map(u=>u.file),t);if(!Array.isArray(s))return;const i=new Set(s),r=o.files.filter(u=>i.has(u.file));if(r.length===0&&o.emptyDirs.length===0)return;const{accepted:a,rejected:l}=zc(r.map(u=>u.file),n.config);l.length>0&&(T(de.FILES_REJECTED,{rejections:l,context:t}),X({message:l.length===1?l[0].message:`${l.length} files couldn't be uploaded.`}));const c=new Map(r.map(u=>[u.file,u.relativePath])),d=a.map(({file:u,mime:f})=>({file:u,mime:f,fields:Gc(u,f),relativePath:c.get(u)??""}));d.length===0&&o.emptyDirs.length===0||await n.openDialog(d,t,{forceDesktop:!0,emptyDirs:o.emptyDirs})}function zc(e,t){const n=[],o=[];for(const s of e){if(s.size===0){o.push({file:s,reason:"empty",message:`“${s.name}” is empty.`});continue}if(t.maxSize>0&&s.size>t.maxSize){o.push({file:s,reason:"size",message:`“${s.name}” exceeds the ${N1(t.maxSize)} upload limit.`});continue}const i=tb(s,t.allowedMimes,t.extToMime);if(!i){o.push({file:s,reason:"mime",message:`“${s.name}” is not an allowed file type.`});continue}n.push({file:s,mime:i})}return{accepted:n,rejected:o}}function tb(e,t,n){if(t.length===0)return null;const o=e.type.toLowerCase();if(o&&t.includes(o))return o;const s=nb(e.name);if(!s)return null;if(n){for(const[r,a]of Object.entries(n))if(r.split("|").includes(s)&&t.includes(a))return a;return null}const i=T1[s];return i&&t.includes(i)?i:null}const T1={jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp",avif:"image/avif",heic:"image/heic",heif:"image/heif",svg:"image/svg+xml",mp4:"video/mp4",mov:"video/quicktime",webm:"video/webm",mp3:"audio/mpeg",wav:"audio/wav",pdf:"application/pdf"};function nb(e){const t=e.lastIndexOf(".");return t<0?"":e.slice(t+1).toLowerCase()}function Gc(e,t){const n=ob(e.name),o=nb(n),s=o?n.slice(0,n.length-o.length-1):n,i=sb(s);return{title:i,altText:t.startsWith("image/")?i:"",caption:"",description:"",filename:n}}function ob(e){return e.replace(/[\\/]/g,"-").replace(/[\x00-\x1f\x7f]/g,"").replace(/\s+/g," ").replace(/ *- */g,"-").replace(/-+/g,"-").trim().replace(/^[-.]+|[-.]+$/g,"")||"upload"}function sb(e){const t=e.replace(/[-_]+/g," ").trim();return t?t.charAt(0).toUpperCase()+t.slice(1):"Upload"}function N1(e){return e>=1048576?`${(e/1048576).toFixed(0)} MB`:e>=1024?`${(e/1024).toFixed(0)} KB`:`${e} B`}const D1=Object.freeze(Object.defineProperty({__proto__:null,IFRAME_PASSTHROUGH_SELECTORS:Zy,classifyDropTarget:Qy,defaultFields:Gc,dragHasFiles:ds,handleFiles:Hc,handleTreeDrop:eb,humanize:sb,mountOsFileDropManager:Jy,partitionByPolicy:zc,resolveAllowedMime:tb,sanitizeFilename:ob,windowIdFromElement:ar},Symbol.toStringTag,{value:"Module"})),R1=ce` ${ct} ${ma}:host{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var( --os-ui-fg,#1d2327 );min-width:0}:host( [ hidden ] ){display:none}.os-text-field__label{font-size:12px;color:var( --os-ui-fg-muted,#646970 )}.os-text-field__row{position:relative;display:flex;align-items:center;width:100%}input{appearance:none;-webkit-appearance:none;display:block;width:100%;min-width:0;box-sizing:border-box;padding:7px 10px;background:var( --os-window-bg,#fff );border:1px solid var( --os-ui-border,#dcdcde );border-radius:6px;font:inherit;font-size:13px;color:var( --os-ui-fg,#1d2327 )}.os-text-field__suffix{position:absolute;inset-inline-end:10px;top:50%;transform:translateY( -50% );pointer-events:none;font-size:12px;color:var( --os-ui-fg-muted,#646970 )}.os-text-field__row--has-reveal input{padding-inline-end:36px}.os-text-field__reveal{position:absolute;inset-inline-end:0;top:0;bottom:0;width:34px;display:flex;align-items:center;justify-content:center;padding:0;border:none;background:transparent;color:var( --os-ui-fg-muted,#646970 );cursor:pointer;border-radius:0 6px 6px 0;transition:color 0.12s ease}.os-text-field__reveal:hover{color:var( --os-ui-accent,#2271b1 )}.os-text-field__reveal:focus-visible{outline:none;color:var( --os-ui-accent,#2271b1 );box-shadow:inset 0 0 0 2px var( --os-ui-accent,#2271b1 );border-radius:0 6px 6px 0}.os-text-field__reveal:disabled{opacity:0.45;cursor:not-allowed}.os-text-field__input--masked{-webkit-text-security:disc;text-security:disc}@supports not ( ( -webkit-text-security:disc ) or ( text-security:disc ) ){.os-text-field__input--masked{font-family:text-security-disc,"password",monospace;letter-spacing:0.2em}}input:disabled{opacity:0.55;cursor:not-allowed;background:var( --os-ui-hover,rgba( 0,0,0,0.03 ) )}input[ aria-invalid='true' ],input[ aria-invalid='true' ]:hover:not(:disabled ){border-color:var( --os-ui-danger,#d63638 )}input[ aria-invalid='true' ]:focus,input[ aria-invalid='true' ]:focus-visible{border-color:var( --os-ui-danger,#d63638 );box-shadow:0 0 0 1px var( --os-ui-danger,#d63638 ),0 0 0 4px rgba( 214,54,56,0.18 )}input[ type='number' ]::-webkit-inner-spin-button,input[ type='number' ]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[ type='number' ]{-moz-appearance:textfield}`,As=class As extends Se{constructor(){super(...arguments),this._revealed=!1}connectedCallback(){super.connectedCallback(),Kf(this)}render(){const t=this.label||"",n=this.value??"",o=this.placeholder||"",s=this.disabled!==null,i=this.readonly!==null,r=this.autocomplete,a=this.type||"text",l=a==="password";let c=r||"off";l&&(!r||c==="off")&&(c="new-password");const d=this.maxlength,u=this.minlength,f=this.pattern||"",p=this.name||"",g=this.suffix||"",m=this.invalid!==null,h=this.reveal!==null,v=a==="password",y=v&&!(h&&this._revealed);let x;v||h&&this._revealed?x="text":x=a;const M=h?"os-text-field__row os-text-field__row--has-reveal":"os-text-field__row",I=y?"os-text-field__input os-text-field__input--masked":"os-text-field__input",P=`${this.id||"os-unnamed"}__input`;return Y` |
| 284 |
${t?Y`<label |
| 285 |
class="os-text-field__label" |
| 286 |
for=${P} |
| 287 |
>${t}</label>`:Y``} |
| 288 |
<span class=${M}> |
| 289 |
<input |
| 290 |
id=${P} |
| 291 |
class=${I} |
| 292 |
type=${x} |
| 293 |
.value=${n} |
| 294 |
placeholder=${o} |
| 295 |
?disabled=${s} |
| 296 |
?readonly=${i} |
| 297 |
autocomplete=${c} |
| 298 |
maxlength=${d??""} |
| 299 |
minlength=${u??""} |
| 300 |
pattern=${f} |
| 301 |
name=${p} |
| 302 |
aria-invalid=${m?"true":"false"} |
| 303 |
aria-label=${t||""} |
| 304 |
@input=${$=>this._onInput($)} |
| 305 |
@change=${$=>this._onChange($)} |
| 306 |
@keydown=${$=>this._onKeyDown($)} |
| 307 |
/> |
| 308 |
${g?Y`<span class="os-text-field__suffix">${g}</span>`:Y``} |
| 309 |
${h?this._renderRevealButton(s):Y``} |
| 310 |
</span> |
| 311 |
`}_renderRevealButton(t){const n=this._revealed?"Hide":"Show";return Y` |
| 312 |
<button |
| 313 |
type="button" |
| 314 |
class="os-text-field__reveal" |
| 315 |
aria-label=${n} |
| 316 |
aria-pressed=${this._revealed?"true":"false"} |
| 317 |
?disabled=${t} |
| 318 |
tabindex="0" |
| 319 |
@click=${()=>this._onToggleReveal()} |
| 320 |
> |
| 321 |
${this._revealed?M1():O1()} |
| 322 |
</button> |
| 323 |
`}_onToggleReveal(){this._revealed=!this._revealed,this.requestUpdate()}_onInput(t){const n=t.target;this.value=n.value,this.emit("os-input-change",{value:n.value})}_onChange(t){const n=t.target;this.emit("os-input-commit",{value:n.value})}_onKeyDown(t){if(t.key==="Enter"&&!t.shiftKey&&!t.altKey&&!t.metaKey){const n=t.target;this.emit("os-submit",{value:n.value})}}};As.props=["label","value","placeholder","disabled","readonly","autocomplete","type","maxlength","minlength","pattern","name","suffix","invalid","reveal"],As.styles=[R1],As.help=void 0;let jc=As;Ie("os-text-field",jc);function O1(){return Y` |
| 324 |
<svg |
| 325 |
viewBox="0 0 16 16" |
| 326 |
width="14" |
| 327 |
height="14" |
| 328 |
fill="none" |
| 329 |
stroke="currentColor" |
| 330 |
stroke-width="1.5" |
| 331 |
stroke-linecap="round" |
| 332 |
stroke-linejoin="round" |
| 333 |
aria-hidden="true" |
| 334 |
focusable="false" |
| 335 |
> |
| 336 |
<path d="M1 8C1 8 3.5 3 8 3s7 5 7 5-2.5 5-7 5S1 8 1 8z" /> |
| 337 |
<circle cx="8" cy="8" r="2" /> |
| 338 |
</svg> |
| 339 |
`}function M1(){return Y` |
| 340 |
<svg |
| 341 |
viewBox="0 0 16 16" |
| 342 |
width="14" |
| 343 |
height="14" |
| 344 |
fill="none" |
| 345 |
stroke="currentColor" |
| 346 |
stroke-width="1.5" |
| 347 |
stroke-linecap="round" |
| 348 |
stroke-linejoin="round" |
| 349 |
aria-hidden="true" |
| 350 |
focusable="false" |
| 351 |
> |
| 352 |
<path d="M1 8C1 8 3.5 3 8 3s7 5 7 5-2.5 5-7 5S1 8 1 8z" /> |
| 353 |
<circle cx="8" cy="8" r="2" /> |
| 354 |
<line x1="2" y1="2" x2="14" y2="14" /> |
| 355 |
</svg> |
| 356 |
`}async function P1(e){const t={file:e.file,mime:e.mime,fields:e.fields},n=V(de.BEFORE_UPLOAD,t,e.context);if(!n)throw new Vc;const o=new FormData,s=n.fields.filename!==n.file.name?new File([n.file],n.fields.filename,{type:n.mime||n.file.type}):n.file;return o.append("file",s),o.append("title",n.fields.title),o.append("alt_text",n.fields.altText),o.append("caption",n.fields.caption),o.append("description",n.fields.description),new Promise((i,r)=>{const a=new XMLHttpRequest;a.open("POST",e.mediaUrl,!0),a.withCredentials=!0,a.setRequestHeader("X-WP-Nonce",e.restNonce),a.responseType="text";let l=!1,c=!1,d=!1;const u=()=>{if(d=!0,!c){l=!0;try{a.abort()}catch{}}};T(de.UPLOAD_STARTED,{file:n.file,fields:n.fields,context:e.context,abort:u}),a.upload.addEventListener("progress",f=>{T(de.UPLOAD_PROGRESS,{file:n.file,fields:n.fields,context:e.context,loaded:f.loaded,total:f.lengthComputable?f.total:0,indeterminate:!f.lengthComputable})}),a.upload.addEventListener("load",()=>{c=!0,T(de.UPLOAD_PROGRESS,{file:n.file,fields:n.fields,context:e.context,loaded:n.file.size,total:n.file.size,indeterminate:!1})}),a.addEventListener("error",()=>{if(l)return;const f=new Error("Network error during upload.");T(de.UPLOAD_FAILED,{file:n.file,error:f,context:e.context}),r(f)}),a.addEventListener("abort",()=>{const f=new lr;T(de.UPLOAD_FAILED,{file:n.file,error:f,context:e.context}),r(f)}),a.addEventListener("load",()=>{if(l)return;if(a.status<200||a.status>=300){const g=$1(a),m=new Error(g);T(de.UPLOAD_FAILED,{file:n.file,error:m,context:e.context}),r(m);return}let f;try{f=JSON.parse(a.responseText)}catch(g){const m=g instanceof Error?g:new Error("Could not parse server response.");T(de.UPLOAD_FAILED,{file:n.file,error:m,context:e.context}),r(m);return}if(d&&f.id){W1(e.mediaUrl,e.restNonce,f.id);const g=new lr;T(de.UPLOAD_FAILED,{file:n.file,error:g,context:e.context}),r(g);return}const p={id:f.id,url:f.source_url,mime:f.mime_type||n.mime,title:f.title?.rendered||n.fields.title,filename:f.media_details?.file||n.fields.filename};T(de.AFTER_UPLOAD,{file:n.file,result:p,fields:n.fields,context:e.context}),i(p)}),a.send(o)})}class Vc extends Error{constructor(){super("Upload cancelled by os.drop.before-upload filter."),this.name="UploadCancelledError"}}class lr extends Error{constructor(){super("Upload aborted by the caller."),this.name="UploadAbortedError"}}function W1(e,t,n){const o=`${e.replace(/\/$/,"")}/${n}?force=true`,s=new XMLHttpRequest;return s.open("DELETE",o,!0),s.withCredentials=!0,s.setRequestHeader("X-WP-Nonce",t),new Promise(i=>{s.addEventListener("loadend",()=>{(s.status<200||s.status>=300)&&console.warn(`[os-file-drop] late-cancel cleanup failed for attachment ${n} (HTTP ${s.status}). The attachment remains in the Media Library; delete it manually.`),i()}),s.addEventListener("error",()=>{console.warn(`[os-file-drop] late-cancel cleanup network error for attachment ${n}. The attachment remains in the Media Library; delete it manually.`),i()});try{s.send()}catch(r){console.warn(`[os-file-drop] late-cancel cleanup could not be dispatched for attachment ${n}:`,r),i()}})}function $1(e){const t=`Upload failed (HTTP ${e.status}).`,n=e.responseText;if(!n)return t;try{const o=JSON.parse(n);if(o&&typeof o.message=="string")return o.message}catch{}return t}async function U1(e){const t={file:e.file,mime:e.mime,fields:e.fields},n=V(de.BEFORE_UPLOAD,t,e.context);if(!n)throw new Vc;const o=new FormData,s=n.fields.filename!==n.file.name?new File([n.file],n.fields.filename,{type:n.mime||n.file.type}):n.file;o.append("file",s),o.append("parentId",String(e.parentId)),e.relativePath&&o.append("relativePath",e.relativePath),e.coords&&(o.append("x",String(e.coords.x)),o.append("y",String(e.coords.y)));const i=`${e.filesUrl.replace(/\/$/,"")}/uploads`;return new Promise((r,a)=>{const l=new XMLHttpRequest;l.open("POST",i,!0),l.withCredentials=!0,l.setRequestHeader("X-WP-Nonce",e.restNonce),l.responseType="text";let c=!1;const d=()=>{c=!0;try{l.abort()}catch{}};T(de.UPLOAD_STARTED,{file:n.file,fields:n.fields,context:e.context,abort:d}),l.upload.addEventListener("progress",f=>{T(de.UPLOAD_PROGRESS,{file:n.file,fields:n.fields,context:e.context,loaded:f.loaded,total:f.lengthComputable?f.total:0,indeterminate:!f.lengthComputable})});const u=f=>{T(de.UPLOAD_FAILED,{file:n.file,error:f,context:e.context}),a(f)};l.addEventListener("error",()=>{c||u(new Error("Network error during upload."))}),l.addEventListener("abort",()=>u(new lr)),l.addEventListener("load",()=>{if(c)return;if(l.status<200||l.status>=300){u(new Error(F1(l,n.file.name)));return}let f;try{f=JSON.parse(l.responseText)}catch{u(new Error("Could not parse server response."));return}if(!f.placement||typeof f.storedFileId!="number"){u(new Error("Unexpected server response."));return}Ui(f.placement,"local");const p={placement:f.placement,storedFileId:f.storedFileId};T(de.AFTER_UPLOAD,{file:n.file,result:p,fields:n.fields,context:e.context}),r(p)}),l.send(o)})}function F1(e,t){if(e.status===413)return`“${t}” is larger than this server accepts.`;const n=`Upload failed (HTTP ${e.status}).`,o=e.responseText;if(!o)return n;try{const s=JSON.parse(o);if(s&&typeof s.message=="string"&&s.message)return s.message}catch{}return n}function B1(e,t){const n=Math.max(0,Math.round((e-16)/96)),o=Math.max(0,Math.round((t-16)/110));return{x:16+n*96,y:16+o*110}}const H1=/^(image|video|audio)\//;function qc(e){return e.desktopAllowed?e.forceDesktop||e.preferDesktop?"desktop":e.surface==="window"||e.surface==="iframe"?"media":(e.folderId??0)>0?"desktop":e.mimes.length>0&&e.mimes.every(n=>H1.test(n))?"media":"desktop":"media"}let Qt=null;async function z1(e){if(e.entries.length===0&&!e.emptyDirs?.length)return;if(Qt){Qt.replace(e);return}const t=!!(e.storage?.canUpload&&e.filesUrl);let n=qc({desktopAllowed:t,surface:e.context.surface,folderId:e.context.folderId,forceDesktop:e.forceDesktop,preferDesktop:e.preferDesktop,mimes:e.entries.map(d=>d.mime)});const o=document.createElement("os-modal");o.setAttribute("open",""),o.setAttribute("size","md"),document.body.appendChild(o);const s=()=>{const d=e.entries.length;let u="Media Library";n==="desktop"&&(u=(e.context.folderId??0)>0?"this folder":"Desktop");let f=`Upload ${d} files to ${u}`;d===0?f=(e.context.folderId??0)>0?"Create folders in this folder":"Create folders on Desktop":d===1&&(f=`Upload to ${u}`),o.setAttribute("title",f)};s();const i=e.entries.map(d=>({...d.fields})),r=()=>{if(o.innerHTML="",t&&!e.forceDesktop){const m=document.createElement("div");m.style.cssText="display:flex;align-items:center;gap:10px;margin-bottom:14px;";const h=document.createElement("span");h.textContent="Upload to",h.style.cssText="font-weight:600;",m.appendChild(h);const v=document.createElement("os-segmented");v.setAttribute("value",n),v.setAttribute("label","Destination"),v.style.setProperty("--os-ui-segmented-bg","rgba(255,255,255,0.06)");const y=document.createElement("os-segment");y.setAttribute("value","desktop"),y.textContent="Desktop",v.appendChild(y);const x=document.createElement("os-segment");x.setAttribute("value","media"),x.textContent="Media Library",v.appendChild(x),v.addEventListener("os-pick",M=>{n=M.detail.value,s(),r()}),m.appendChild(v),o.appendChild(m)}else if(e.forceDesktop){const m=document.createElement("div");m.style.cssText="opacity:0.7;font-size:12px;margin-bottom:14px;",m.textContent="Folder uploads land in your desktop storage, preserving the folder structure.",o.appendChild(m)}const d=n==="desktop"?e.storage?.maxBytes??0:e.mediaMaxBytes??0;if(d>0){const m=document.createElement("div");m.className="os-upload-dialog__max-size",m.style.cssText="opacity:0.6;font-size:12px;margin-bottom:14px;",m.textContent=`Maximum file size: ${qt(d)}`,o.appendChild(m)}const u=document.createElement("div");u.style.cssText="display:flex;flex-direction:column;gap:18px;max-height:60vh;overflow:auto;padding-right:6px;",e.entries.forEach((m,h)=>{u.appendChild(a(m,i[h],h+1))}),o.appendChild(u);const f=document.createElement("div");f.setAttribute("slot","footer"),f.style.cssText="display:flex;gap:8px;justify-content:flex-end;";const p=document.createElement("os-button");p.setAttribute("variant","secondary"),p.textContent="Cancel",p.addEventListener("click",()=>{o.remove()});const g=document.createElement("os-button");g.setAttribute("variant","primary"),e.entries.length===0?g.textContent="Create folders":g.textContent=e.entries.length===1?"Upload":`Upload ${e.entries.length} files`,g.addEventListener("click",()=>{l(g,p)}),f.appendChild(p),f.appendChild(g),o.appendChild(f)},a=(d,u,f)=>{const p=document.createElement("div");p.style.cssText="display:flex;flex-direction:column;gap:8px;border:1px solid rgba(255,255,255,0.08);border-radius:10px;padding:14px;";const g=document.createElement("div");g.style.cssText="display:flex;gap:10px;align-items:center;font-weight:600;";const m=document.createElement("span");m.textContent=e.entries.length===1?"":`#${f} · `,m.style.opacity="0.6";const h=document.createElement("span");h.textContent=d.file.name,h.style.cssText="flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;";const v=document.createElement("span");if(v.textContent=`${d.mime||"unknown"} · ${qt(d.file.size)}`,v.style.cssText="opacity:0.6;font-size:12px;",g.appendChild(m),g.appendChild(h),g.appendChild(v),p.appendChild(g),n==="desktop"){if(d.relativePath){const y=document.createElement("div");y.textContent=d.relativePath,y.style.cssText="opacity:0.55;font-size:12px;",p.appendChild(y)}return p.appendChild(us("Filename",u.filename,y=>u.filename=y)),p}return p.appendChild(us("Title",u.title,y=>u.title=y)),p.appendChild(us("Filename",u.filename,y=>u.filename=y)),d.mime.startsWith("image/")&&p.appendChild(us("Alt text",u.altText,y=>u.altText=y)),p.appendChild(us("Caption",u.caption,y=>u.caption=y)),p.appendChild(G1("Description",u.description,y=>u.description=y)),p},l=async(d,u)=>{Qt===c&&(Qt=null),d.disabled=!0,u.disabled=!0,d.textContent="Uploading…";const f=e.entries.length;let p=0,g=0,m=0;const h=[],v=e.context.folderId??0;let y=!1;for(let M=0;M<f;M++){const I=e.entries[M];try{if(n==="desktop"&&e.filesUrl){const P=!I.relativePath&&!y&&e.context.surface==="wallpaper"?B1(e.context.x,e.context.y):void 0;P&&(y=!0),await U1({file:I.file,mime:I.mime,fields:i[M],context:e.context,filesUrl:e.filesUrl,restNonce:e.restNonce,parentId:v,relativePath:I.relativePath??"",coords:P})}else await P1({file:I.file,mime:I.mime,fields:i[M],context:e.context,mediaUrl:e.mediaUrl,restNonce:e.restNonce});p++}catch(W){if(W instanceof Vc){m++;continue}if(W instanceof lr){m++;continue}g++;const P=W instanceof Error?W.message:"Upload failed.";h.push(`“${I.file.name}” — ${P}`)}}if(n==="desktop"&&e.emptyDirs?.length)for(const M of e.emptyDirs)try{await dw(v,M)}catch{}const x=e.entries.some(M=>M.relativePath)||!!e.emptyDirs?.length;if(n==="desktop"&&x)try{const[M,I]=await Promise.all([ql(),Te(v)]);Fi(M.folders),pt(v,I.placements)}catch{}o.remove(),j1({total:f,successes:p,failures:g,cancelled:m,failureDetails:h,destination:n})},c={replace:d=>{e.entries=d.entries,e.emptyDirs=d.emptyDirs,e.forceDesktop=d.forceDesktop,e.preferDesktop=d.preferDesktop,e.context=d.context,e.mediaMaxBytes=d.mediaMaxBytes??e.mediaMaxBytes,i.length=0;for(const u of d.entries)i.push({...u.fields});n=qc({desktopAllowed:t,surface:d.context.surface,folderId:d.context.folderId,forceDesktop:d.forceDesktop,preferDesktop:d.preferDesktop,mimes:d.entries.map(u=>u.mime)}),s(),r()}};Qt=c,r(),await new Promise(d=>{const u=()=>{Qt===c&&(Qt=null),d()};o.addEventListener("os-modal-cancel",()=>{o.remove(),u()});const f=new MutationObserver(()=>{o.isConnected||(f.disconnect(),u())});f.observe(document.body,{childList:!0,subtree:!0})})}function us(e,t,n){const o=document.createElement("os-text-field");return o.setAttribute("label",e),o.setAttribute("value",t),o.addEventListener("input",()=>{const s=o.value;typeof s=="string"&&n(s)}),o}function G1(e,t,n){const o=document.createElement("os-textarea");return o.setAttribute("label",e),o.setAttribute("value",t),o.setAttribute("rows","3"),o.addEventListener("input",()=>{const s=o.value;typeof s=="string"&&n(s)}),o}function j1(e){const{total:t,successes:n,failures:o,cancelled:s,failureDetails:i}=e,r=e.destination==="desktop"?"your desktop":"Media Library";if(t===0){e.destination==="desktop"&&X({message:"Folder created on your desktop."});return}if(t===1){n===1?X({message:`Uploaded to ${r}.`}):o===1&&i[0]?X({message:i[0]}):s===1&&X({message:"Upload cancelled."});return}if(n===t){X({message:`Uploaded ${n} files to ${r}.`});return}if(s===t){X({message:"All uploads cancelled."});return}if(o===t){X({message:o===1&&i[0]?i[0]:`${o} uploads failed.`});return}const a=[];n>0&&a.push(`Uploaded ${n} file${n===1?"":"s"}.`),s>0&&a.push(`Cancelled ${s}.`),o>0&&a.push(`Failed ${o}.`),X({message:a.join(" ")})}const ib=Object.freeze(Object.defineProperty({__proto__:null,openUploadDialog:z1,resolveDefaultDestination:qc},Symbol.toStringTag,{value:"Module"})),V1={tab:null,requestedAt:0};let cr=null;function Kc(){if(cr)return cr;const t=window.wp?.os?.createSharedStore;return typeof t!="function"?null:(cr=t("desktop-mode/plugins-window/tab-target",()=>({...V1})),cr)}function q1(e){const t=Kc();if(t){t.state.tab=e,t.state.requestedAt=Date.now(),t.notify();return}const n=window;n._wpdPluginsWindowTab={tab:e,requestedAt:Date.now()}}function K1(){const e=Kc();if(e){const o=e.state.tab;return o!==null&&(e.state.tab=null,e.state.requestedAt=0,e.notify()),o}const t=window,n=t._wpdPluginsWindowTab;return n?(t._wpdPluginsWindowTab={tab:null,requestedAt:0},n.tab):null}function Y1(e){const t=Kc();return t?t.subscribe(n=>e({...n})):()=>{}}const X1=Object.freeze(Object.defineProperty({__proto__:null,consumePluginsWindowTab:K1,setPluginsWindowTab:q1,subscribePluginsWindowTab:Y1},Symbol.toStringTag,{value:"Module"})),Z1=ce` ${ct} ${ep}:host{display:block;--_track-bg:var( --os-ui-progress-track-bg,var( --os-ui-surface-sunken,rgba( 0,0,0,0.08 ) ) );--_fill:var( --os-ui-progress-fill,var( --wp-admin-theme-color,#2271b1 ) );--_height:var( --os-ui-progress-height,6px );--_radius:var( --os-ui-progress-radius,999px );--_label-color:var( --os-ui-progress-label-color,inherit );--_label-size:var( --os-ui-progress-label-size,12px );--_label-gap:var( --os-ui-progress-label-gap,4px );width:100%;font:inherit;color:var( --_label-color )}:host( [ hidden ] ){display:none}.header{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:var( --_label-gap );font-size:var( --_label-size );line-height:1.3}.label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.percent{font-variant-numeric:tabular-nums;opacity:0.75;flex-shrink:0}.track{position:relative;width:100%;height:var( --_height );background:var( --_track-bg );border-radius:var( --_radius );overflow:hidden}.fill{position:absolute;inset-block:0;inset-inline-start:0;width:0;background:var( --_fill );border-radius:inherit;transition:width 0.18s ease-out}:host( [ tone='success' ] ){--os-ui-progress-fill:var( --os-ui-success-fg,#3a8a3a )}:host( [ tone='warning' ] ){--os-ui-progress-fill:var( --os-ui-warning-fg,#dba617 )}:host( [ tone='danger' ] ){--os-ui-progress-fill:var( --os-ui-danger,#d63638 )}:host( [ indeterminate ] ) .fill{width:100%;transition:none;background-image:var( --_fill );background-size:300% 300%;background-repeat:no-repeat;animation:os-holo-shimmer 2.4s var( --_holo-loop ) infinite}:host( [ indeterminate ][ tone ] ) .fill{width:33%;background-image:none;animation:os-progress-sweep 1.1s linear infinite}@keyframes os-progress-sweep{0%{transform:translateX( -120% )}100%{transform:translateX( 320% )}}@media ( prefers-reduced-motion:reduce ){.fill{transition:none}:host( [ indeterminate ] ) .fill,:host( [ indeterminate ][ tone ] ) .fill{animation:none;width:100%;opacity:0.6}}`,Cs=class Cs extends Se{constructor(){super(...arguments),this._ownedAriaLabel=null}render(){return Y`<div class="root" part="root"> |
| 357 |
<div class="header" part="header" hidden> |
| 358 |
<span class="label" part="label"></span> |
| 359 |
<span class="percent" part="percent"></span> |
| 360 |
</div> |
| 361 |
<div class="track" part="track"> |
| 362 |
<div class="fill" part="fill"></div> |
| 363 |
</div> |
| 364 |
</div>`}requestUpdate(){super.requestUpdate(),queueMicrotask(()=>this._paint())}connectedCallback(){super.connectedCallback(),queueMicrotask(()=>this._paint())}_paint(){const t=this.shadowRoot;if(!t)return;const n=this._readMax(),o=this.hasAttribute("indeterminate")||n<=0,s=o?0:this._readValue(n),i=o?0:s/n,r=Math.round(i*100),a=this.getAttribute("label")??"",l=this.hasAttribute("show-percent"),c=t.querySelector(".fill");c&&!o?c.style.width=`${(i*100).toFixed(2)}%`:c&&o&&c.style.removeProperty("width");const d=t.querySelector(".header"),u=t.querySelector(".label"),f=t.querySelector(".percent");if(d&&u&&f){const g=a||l&&!o;d.hidden=!g,u.textContent=a,f.hidden=!(l&&!o),f.textContent=`${r}%`}this._syncAria(n,s,o,a);const p=t.querySelector(".track");p&&(p.setAttribute("role","progressbar"),p.setAttribute("aria-valuemin","0"),o?(p.removeAttribute("aria-valuenow"),p.removeAttribute("aria-valuemax")):(p.setAttribute("aria-valuemax",String(n)),p.setAttribute("aria-valuenow",String(s))),a?p.setAttribute("aria-label",a):p.removeAttribute("aria-label"))}_syncAria(t,n,o,s){this.setAttribute("role","progressbar"),this.setAttribute("aria-valuemin","0"),o?(this.removeAttribute("aria-valuenow"),this.removeAttribute("aria-valuemax")):(this.setAttribute("aria-valuemax",String(t)),this.setAttribute("aria-valuenow",String(n)));const i=this.getAttribute("aria-label");s?(i===null||i===this._ownedAriaLabel)&&(this.setAttribute("aria-label",s),this._ownedAriaLabel=s):i!==null&&i===this._ownedAriaLabel&&(this.removeAttribute("aria-label"),this._ownedAriaLabel=null)}_readMax(){const t=this.getAttribute("max");if(t===null)return 100;const n=parseFloat(t);return Number.isFinite(n)?n:100}_readValue(t){const n=parseFloat(this.getAttribute("value")??"0");return!Number.isFinite(n)||n<0?0:n>t?t:n}};Cs.props=["value","max","indeterminate","tone","label","showPercent"],Cs.styles=[Z1],Cs.help=void 0;let Yc=Cs;Ie("os-progress-bar",Yc);const Qe=new Map;let mt=null;function J1(){if(document.body.hasAttribute("data-os-suppress-upload-hud")||window.__wpdUploadHud)return;window.__wpdUploadHud=!0;const e="desktop-mode/os-file-drop-hud";K(de.UPLOAD_STARTED,e,t=>Q1(t.file,t.fields,t.abort)),K(de.UPLOAD_PROGRESS,e,t=>eM(t.file,t.loaded,t.total,t.indeterminate)),K(de.AFTER_UPLOAD,e,t=>tM(t.file,t.fields,t.result)),K(de.UPLOAD_FAILED,e,t=>nM(t.file,t.error))}function Q1(e,t,n){const o=oM(),s=document.createElement("div");s.className="os-upload-hud__row";const i=document.createElement("div");i.className="os-upload-hud__meta";const r=document.createElement("div");r.className="os-upload-hud__name",r.textContent=t.filename||e.name,r.title=t.filename||e.name;const a=document.createElement("div");a.className="os-upload-hud__status",a.textContent="Uploading…",i.append(r,a);const l=document.createElement("os-progress-bar");l.setAttribute("indeterminate",""),l.setAttribute("show-percent","");const c=document.createElement("div");c.className="os-upload-hud__actions";const d=document.createElement("os-button");d.setAttribute("variant","tertiary"),d.setAttribute("size","small"),d.textContent="Cancel",d.addEventListener("click",()=>{const u=Qe.get(e);u&&(u.state==="running"?(u.statusEl.textContent="Cancelling…",u.cancelBtn.disabled=!0,u.abort()):Xc(u))}),c.appendChild(d),s.append(i,l,c),o.querySelector(".os-upload-hud__list").appendChild(s),Qe.set(e,{file:e,abort:n,root:s,bar:l,statusEl:a,cancelBtn:d,state:"running",lingerTimer:null}),dr()}function eM(e,t,n,o){const s=Qe.get(e);!s||s.state!=="running"||(o||n<=0?(s.bar.setAttribute("indeterminate",""),s.statusEl.textContent=`${qt(t)} sent`):(s.bar.removeAttribute("indeterminate"),s.bar.setAttribute("max",String(n)),s.bar.setAttribute("value",String(t)),s.statusEl.textContent=`${qt(t)} / ${qt(n)}`))}function tM(e,t,n){const o=Qe.get(e);o&&(o.state="success",o.bar.removeAttribute("indeterminate"),o.bar.setAttribute("value","100"),o.bar.setAttribute("max","100"),o.bar.setAttribute("tone","success"),o.statusEl.textContent="Uploaded",o.cancelBtn.textContent="Dismiss",o.lingerTimer=setTimeout(()=>Xc(o),2500),dr(),Ee.publish("os/upload-hud-complete",{filename:t.filename||n.filename,attachmentId:n.id}))}function nM(e,t){const n=Qe.get(e);n&&(n.bar.removeAttribute("indeterminate"),n.bar.setAttribute("tone","danger"),n.cancelBtn.textContent="Dismiss",n.cancelBtn.disabled=!1,t.name==="UploadAbortedError"?(n.state="aborted",n.statusEl.textContent="Cancelled"):(n.state="failed",n.statusEl.textContent=t.message||"Upload failed"),dr())}function Xc(e){e.lingerTimer&&clearTimeout(e.lingerTimer),Qe.delete(e.file),e.root.remove(),dr(),Qe.size===0&&mt&&(mt.hidden=!0)}function oM(){if(mt&&mt.isConnected)return mt.hidden=!1,mt;const e=document.createElement("div");e.className="os-upload-hud",e.setAttribute("role","region"),e.setAttribute("aria-label","Uploads");const t=document.createElement("div");t.className="os-upload-hud__header";const n=document.createElement("div");n.className="os-upload-hud__title",n.textContent="Uploads";const o=document.createElement("button");o.type="button",o.className="os-upload-hud__close",o.setAttribute("aria-label","Hide upload panel"),o.textContent="×",o.addEventListener("click",()=>{for(const i of[...Qe.values()])i.state!=="running"&&Xc(i);Qe.size===0&&(e.hidden=!0)}),t.append(n,o);const s=document.createElement("div");return s.className="os-upload-hud__list",e.append(t,s),document.body.appendChild(e),mt=e,e}function dr(){if(!mt)return;const e=mt.querySelector(".os-upload-hud__title");if(!e)return;const t=Qe.size,n=[...Qe.values()].filter(o=>o.state==="running").length;n>0?e.textContent=n===t?`Uploading ${n} file${n===1?"":"s"}…`:`${n} of ${t} uploading…`:t>0?e.textContent=`Uploads (${t})`:e.textContent="Uploads"}function sM(){if(document.body.hasAttribute("data-os-suppress-media-library-refresh"))return;const e=window;e.__wpdMediaLibraryRefresher||(e.__wpdMediaLibraryRefresher=!0,K(de.AFTER_UPLOAD,"desktop-mode/os-file-drop-library-refresh",()=>iM()))}function iM(){const e=document.querySelectorAll("iframe");for(const t of Array.from(e))if(rM(rb(t)))try{t.contentWindow?.location.reload()}catch{const n=rb(t);n&&t.setAttribute("src",n)}}function rb(e){try{return e.contentWindow?.location.href??e.src??""}catch{return e.src??""}}function rM(e){return e?/\/wp-admin\/upload\.php(?:[?#]|$)/.test(e):!1}function aM(e){const t=e.config||{enabled:!1,allowedMimes:[],maxSize:0};J1(),sM(),Jy({config:t,mediaUrl:e.mediaUrl,restNonce:e.restNonce,filesUrl:e.filesUrl,storage:e.storage,openDialog:async(n,o,s)=>{const{openUploadDialog:i}=await Promise.resolve().then(()=>ib);await i({entries:n,context:o,mediaUrl:e.mediaUrl,restNonce:e.restNonce,filesUrl:e.filesUrl,storage:e.storage,forceDesktop:s?.forceDesktop,emptyDirs:s?.emptyDirs,mediaMaxBytes:t.maxSize})}})}const lM=Object.freeze(Object.defineProperty({__proto__:null,FILE_DROP_HOOKS:de,bootOsFileDrop:aM},Symbol.toStringTag,{value:"Module"}));return pr.clampGeometryToViewport=Tl,Object.defineProperty(pr,Symbol.toStringTag,{value:"Module"}),pr}({}); |
| 365 |
|