PluginProbe
OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin / 1.1.12
OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin v1.1.12
1.1.13 1.1.12 1.1.11 1.1.10 1.1.9 1.1.8 1.1.7 1.1.6 1.1.5 1.1.4 1.1.3 1.1.2 1.1.1 1.1.0 1.0.1 1.0.0 0.9.8 0.9.7 0.9.6 0.9.4 0.9.5 0.9.3 0.9.2 0.9.1 0.9.0 All 37 releases
← All changes | assets/js/apps/my-wordpress.min.js +397 -399 1.1.6 → 1.1.12 View file →
@@ -1,20 +1,20 @@
1 -var openStationApp_myWordpress=function(E){"use strict";const Ye="desktop-mode";function Se(){return window.wp?.i18n}function r(e,t=Ye){return Se()?.__(e,t)??e}function B(e,t,s,n=Ye){return Se()?._n(e,t,s,n)??(s===1?e:t)}function b(e,...t){const s=Se()?.sprintf;if(s)return s(e,...t);let n=0;return e.replace(/%(?:(\d+)\$)?[sd]/g,(o,i)=>{const a=i?Number.parseInt(i,10)-1:n++;return String(t[a]??"")})}function l(e,...t){return{__wpdHtml:!0,strings:e,values:t}}function jt(e){return!!e&&e.__wpdHtml===!0}const Kt="$$wpd$$",N=/\$\$wpd\$\$(\d+)\$\$/g,zt="$$wpd-node$$",Ht=/^\$\$wpd-node\$\$(\d+)\$\$$/,Xt=new Set(["style","script","textarea","title"]);function Yt(e){let t="",s=!1,n=null,o=!1,i=null,a="",c=!1;for(let u=0;u<e.length;u++){const p=e[u];t+=p;for(let d=0;d<p.length;d++){const f=p[d];if(o){p.startsWith("-->",d)&&(o=!1,d+=2);continue}if(i!==null){f==="<"&&p[d+1]==="/"&&p.slice(d+2,d+2+i.length).toLowerCase()===i&&(d+=1+i.length,i=null,s=!0,c=!1,a="");continue}if(n!==null){f===n&&(n=null);continue}if(s){f==='"'||f==="'"?(n=f,c=!1):f===">"?(s=!1,c=!1,Xt.has(a)&&(i=a),a=""):c&&(/[a-zA-Z0-9-]/.test(f)?a+=f.toLowerCase():c=!1);continue}if(p.startsWith("<!--",d)){o=!0,d+=3;continue}const m=p[d+1]??"";f==="<"&&/[a-zA-Z/!]/.test(m)&&(s=!0,a="",c=/[a-zA-Z]/.test(m))}u<e.length-1&&(t+=s||o||i!==null?`${Kt}${u}$$`:`<!--${zt}${u}$$-->`)}return t}const Ge=new WeakMap;function Ve(e){const t=Ge.get(e);if(t)return t;const s=document.createElement("template");s.innerHTML=Yt(e);const n=[],o=(c,u)=>{if(c.nodeType===Node.ELEMENT_NODE){const f=c;for(const m of Array.from(f.attributes)){const h=m.name,w=m.value,v=h[0];if(N.test(w))if(N.lastIndex=0,v==="@"){const g=N.exec(w);N.lastIndex=0,n.push({path:u,kind:"event",name:h.slice(1),valueIndex:g?Number(g[1]):0}),f.removeAttribute(h)}else if(v==="."){const g=N.exec(w);N.lastIndex=0,n.push({path:u,kind:"prop",name:h.slice(1),valueIndex:g?Number(g[1]):0}),f.removeAttribute(h)}else if(v==="?"){const g=N.exec(w);N.lastIndex=0,n.push({path:u,kind:"bool",name:h.slice(1),valueIndex:g?Number(g[1]):0}),f.removeAttribute(h)}else{const g=[],$=[];let y=0,_;for(N.lastIndex=0;(_=N.exec(w))!==null;)g.push(w.slice(y,_.index)),$.push(Number(_[1])),y=_.index+_[0].length;g.push(w.slice(y)),n.push({path:u,kind:"attr",name:h,template:g,valueIndices:$}),f.setAttribute(h,"")}}}const p=Array.from(c.childNodes);let d=0;for(let f=0;f<p.length;f++){const m=p[f],h=f+d;if(m.nodeType===Node.COMMENT_NODE){const w=Ht.exec(m.data);if(w){const v=document.createTextNode("");m.parentNode.replaceChild(v,m),n.push({path:[...u,h],kind:"node",valueIndex:Number(w[1])})}continue}if(m.nodeType===Node.TEXT_NODE){const w=m.textContent||"";if(!N.test(w)){N.lastIndex=0;continue}N.lastIndex=0;const v=m.parentNode;let g=0,$;const y=[],_=[];for(N.lastIndex=0;($=N.exec(w))!==null;){$.index>g&&y.push(document.createTextNode(w.slice(g,$.index)));const S=document.createTextNode("");y.push(S),_.push({path:[...u,h+y.length-1],kind:"node",valueIndex:Number($[1])}),g=$.index+$[0].length}g<w.length&&y.push(document.createTextNode(w.slice(g)));for(const S of y)v.insertBefore(S,m);v.removeChild(m),d+=y.length-1,n.push(..._)}else o(m,[...u,h])}};o(s.content,[]);const a={template:s,buildParts:c=>{const u=[];for(const p of n){let d=c;for(const f of p.path)d=d.childNodes[f];p.kind==="node"?u.push({kind:"node",valueIndex:p.valueIndex,child:{anchor:d,state:null}}):p.kind==="attr"?u.push({kind:"attr",element:d,name:p.name,template:p.template,valueIndices:p.valueIndices}):p.kind==="event"?u.push({kind:"event",valueIndex:p.valueIndex,element:d,name:p.name}):p.kind==="prop"?u.push({kind:"prop",valueIndex:p.valueIndex,element:d,name:p.name}):p.kind==="bool"&&u.push({kind:"bool",valueIndex:p.valueIndex,element:d,name:p.name})}return u}};return Ge.set(e,a),a}const Qe=new WeakMap;function Gt(e,t){for(const s of e.nodes)if(s.parentNode!==t)return!1;return!0}function Vt(e,t){const s=Qe.get(t);if(s&&s.strings===e.strings&&Gt(s,t)){ne(s.parts,e.values);return}const n=Ve(e.strings),o=n.template.content.cloneNode(!0),i=n.buildParts(o),a=Array.from(o.childNodes);for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(o),ne(i,e.values),Qe.set(t,{strings:e.strings,parts:i,nodes:a})}function ne(e,t){for(const s of e)if(s.kind==="node")oe(s.child,t[s.valueIndex]);else if(s.kind==="attr"){let n=s.template[0];for(let o=0;o<s.valueIndices.length;o++)n+=Ze(t[s.valueIndices[o]]),n+=s.template[o+1];n!==s.last&&(s.last=n,n===""?s.element.removeAttribute(s.name):s.element.setAttribute(s.name,n))}else if(s.kind==="event"){const n=t[s.valueIndex];n!==s.current&&(s.current&&s.element.removeEventListener(s.name,s.current),n&&s.element.addEventListener(s.name,n),s.current=n)}else if(s.kind==="prop"){const n=t[s.valueIndex];n!==s.last&&(s.last=n,s.element[s.name]=n)}else if(s.kind==="bool"){const n=!!t[s.valueIndex];n!==s.last&&(s.last=n,n?s.element.setAttribute(s.name,""):s.element.removeAttribute(s.name))}}function oe(e,t){if(t==null||t===!1){e.state&&(R(e.state),e.state=null);return}if(Array.isArray(t)){xt(e,t);return}if(jt(t)){Jt(e,t);return}if(t instanceof Node){Qt(e,t);return}Zt(e,Ze(t))}function Qt(e,t){const s=e.state;s?.shape==="node"&&s.node===t||(s&&R(s),G(e,[t]),e.state={shape:"node",node:t})}function Zt(e,t){const s=e.state;if(s?.shape==="text"){s.text!==t&&(s.node.textContent=t,s.text=t);return}s&&R(s);const n=document.createTextNode(t);G(e,[n]),e.state={shape:"text",node:n,text:t}}function Jt(e,t){const s=e.state;if(s?.shape==="template"&&s.strings===t.strings){ne(s.parts,t.values);return}s&&R(s);const n=Ve(t.strings),o=n.template.content.cloneNode(!0),i=n.buildParts(o),a=Array.from(o.childNodes);G(e,[o]),ne(i,t.values),e.state={shape:"template",strings:t.strings,parts:i,nodes:a}}function xt(e,t){const s=e.state;if(s?.shape==="array"){const o=Math.min(s.entries.length,t.length);for(let i=0;i<o;i++)oe(s.entries[i],t[i]);if(t.length<s.entries.length){for(let i=t.length;i<s.entries.length;i++){const a=s.entries[i];a.state&&R(a.state),a.anchor.remove()}s.entries.length=t.length}else for(let i=s.entries.length;i<t.length;i++){const a=document.createTextNode("");G(e,[a]);const c={anchor:a,state:null};oe(c,t[i]),s.entries.push(c)}return}s&&R(s);const n=[];for(const o of t){const i=document.createTextNode("");G(e,[i]);const a={anchor:i,state:null};oe(a,o),n.push(a)}e.state={shape:"array",entries:n}}function G(e,t){const s=e.anchor.parentNode;if(s)for(const n of t)s.insertBefore(n,e.anchor)}function R(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&&(R(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&&R(t.state),t.anchor.remove()}function Ze(e){return e==null||e===!1?"":String(e)}function I(e,t="short"){if(e===""||e===null||e===void 0)return"";const s=typeof e=="string"&&/^\d{4}-\d{2}$/.test(e)?`${e}-01T00:00:00`:e,n=s instanceof Date?s:new Date(s);if(Number.isNaN(n.getTime()))return String(e);try{switch(t){case"long":return n.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"});case"month":return n.toLocaleDateString(void 0,{year:"numeric",month:"long"});case"datetime":return n.toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"});case"iso":return n.toISOString();default:return n.toLocaleDateString(void 0,{month:"short",day:"numeric"})}}catch{return String(e)}}function es(){let e="";const t=new Map;let s=0,n=1,o=0,i=!1,a=!0,c=null,u,p=async()=>{},d=()=>{};const f=()=>{const w=[],v=new Set;for(const g of Array.from(t.keys()).sort(($,y)=>$-y))for(const $ of t.get(g)??[])v.has($.id)||(v.add($.id),w.push($));return w},m=()=>n>Math.max(...Array.from(t.keys()),1),h=w=>{!w.some(v=>v.isIntersecting)||i||!a||(a=!1,i=!0,o=Math.max(1,...Array.from(t.keys()))+1,d(),p().finally(()=>{i=!1,o=0,d()}))};return{accumulate(w,v){return v?(e!==w&&(e=w,t.clear()),t.set(v.page,v.items),s=v.total,n=v.pages,f()):(e="",t.clear(),s=0,n=1,[])},items:f,get total(){return s},get pageCount(){return n},get loadingPage(){return o},hasMore:m,ghosts(w){return o===0||t.has(o)||!m()?0:Math.max(1,Math.min(w,s-f().length))},sync(w){p=w.load,d=w.repaint,!u&&typeof IntersectionObserver<"u"&&(u=new IntersectionObserver(h)),u?.disconnect(),w.sentinel&&u?.observe(w.sentinel),w.canvas!==c&&(c=w.canvas,c?.addEventListener("scroll",()=>{a=!0},{passive:!0})),c&&c.scrollHeight<=c.clientHeight+4&&(a=!0)},dispose(){u?.disconnect(),u=void 0}}}function Je(e,t,s,n){if(n.shift&&e.length>0){const o=e[e.length-1],i=t.indexOf(o),a=t.indexOf(s);if(i!==-1&&a!==-1){const c=t.slice(Math.min(i,a),Math.max(i,a)+1),u=new Set([...e,...c]);return Array.from(u)}}return n.ctrl?e.includes(s)?e.filter(o=>o!==s):[...e,s]:[s]}function ts(e){const{root:t,select:s}=e,n=e.item??"[data-item-id]";let o=null;const i=u=>{if(u.button!==0||!u.target?.closest(e.canvas)||u.target.closest(n))return;const d=document.createElement("div");d.className=e.className??"os-app__marquee",document.body.appendChild(d),o={x:u.clientX,y:u.clientY,box:d},!u.ctrlKey&&!u.metaKey&&!u.shiftKey&&s([])},a=u=>{if(!o)return;const p=Math.min(o.x,u.clientX),d=Math.min(o.y,u.clientY),f=Math.abs(u.clientX-o.x),m=Math.abs(u.clientY-o.y);Object.assign(o.box.style,{left:`${p}px`,top:`${d}px`,width:`${f}px`,height:`${m}px`});const h=[];for(const w of Array.from(t.querySelectorAll(n))){const v=w.getBoundingClientRect();v.left<p+f&&v.right>p&&v.top<d+m&&v.bottom>d&&h.push(Number(w.getAttribute("data-item-id")))}s(h)},c=()=>{o&&(o.box.remove(),o=null)};return t.addEventListener("pointerdown",i),document.addEventListener("pointermove",a),document.addEventListener("pointerup",c),()=>{t.removeEventListener("pointerdown",i),document.removeEventListener("pointermove",a),document.removeEventListener("pointerup",c),c()}}async function ss(e){if(e==="")return!1;const t=globalThis.navigator?.clipboard;if(t?.writeText)try{return await t.writeText(e),!0}catch{}return ns(e)}function ns(e){const t=globalThis.document;if(!t?.body||typeof t.execCommand!="function")return!1;const s=t.createElement("textarea");s.value=e,s.setAttribute("readonly",""),s.setAttribute("aria-hidden","true"),s.style.position="fixed",s.style.insetInlineStart="-9999px",s.style.opacity="0",t.body.appendChild(s);const n=t.activeElement;s.select();let o=!1;try{o=t.execCommand("copy")}catch{o=!1}return s.remove(),n?.focus?.(),o}const os="data-os-mode";function K(e=typeof document<"u"?document.documentElement:null){return!!e&&e.getAttribute(os)==="mobile"}function is(e,t){const s=t.local??{},n={id:e,hasLocal:a=>Object.prototype.hasOwnProperty.call(s,a),runLocal:(a,c,u,p)=>{const d=s[a];if(!d)return c;const f={...c},m=d(f,u,p);return m===void 0?f:m},render:a=>{Vt(t.view(a),a.root),t.updated?.(a)},mounted:a=>t.mounted?.(a)},{placeholder:o}=t;o&&(n.placeholder=a=>o(a));const i=window;return(i.openStationApps??(i.openStationApps={}))[e]=n,n}function T(){return window.wp?.os??{}}function rs(){return{menu:null,folderSel:null,quickEdit:null,zoom:!1,columnsMenu:null,revealSelection:!1,list:es(),abilityQuery:"",abilityOpen:new Map,nameError:"",agentDraft:null,agentDraftFor:0,agentBusy:!1,agentBackfilled:new Set,agentDropTargets:new Map,rosterStamp:"",chatAfterCreate:!1,fp:null}}function k(e){return e.ui(rs)}function ie(e=null){const t=e??(typeof document<"u"?document.documentElement:null);return t&&K(t)?!0:typeof window<"u"&&typeof window.matchMedia=="function"&&window.matchMedia("(pointer: coarse)").matches}function xe(e){return[e.section,e.query,e.sort].join("|")}function re(e,t,s){const n=e.filter(i=>{if(i.sections&&i.sections.length>0&&!(i.sections.includes(t.entityId)||i.sections.includes("*")||!!t.postType&&i.sections.includes(t.postType)))return!1;if(i.mime){if(!t.mime)return!1;try{if(!new RegExp(i.mime).test(t.mime))return!1}catch{return!1}}return!0}),o=s?.applyFilters("os.my-wordpress.preview-actions",n,t);return Array.isArray(o)?o:n}function V(e,t,s){return{entityId:e.id,kind:e.kind,postType:e.post_type,mime:t.mime||void 0,item:t,itemId:t.id,surface:s}}function et(e,t){try{e.onSelect?.(t)}catch{console.error(`[my-wordpress] preview action ${e.id} threw.`)}}function ae(e,t){return e.sections.find(s=>s.id===t)??null}function tt(e,t){const s=e?.applyFilters("os.my-wordpress.list-bands",null,t);return!s||!Array.isArray(s.bands)||s.bands.length===0||typeof s.assign!="function"?null:s}function Ae(e,t){return e.startsWith("dashicons-")?l`<span class="${t} dashicons ${e}" aria-hidden="true"></span>`:l`<span
1 +var openStationApp_myWordpress=function(E){"use strict";const st="desktop-mode";function Le(){return window.wp?.i18n}function r(e,t=st){return Le()?.__(e,t)??e}function B(e,t,s,n=st){return Le()?._n(e,t,s,n)??(s===1?e:t)}function b(e,...t){const s=Le()?.sprintf;if(s)return s(e,...t);let n=0;return e.replace(/%(?:(\d+)\$)?[sd]/g,(o,i)=>{const a=i?Number.parseInt(i,10)-1:n++;return String(t[a]??"")})}function c(e,...t){return{__wpdHtml:!0,strings:e,values:t}}function es(e){return!!e&&e.__wpdHtml===!0}const ts="$$wpd$$",D=/\$\$wpd\$\$(\d+)\$\$/g,ss="$$wpd-node$$",ns=/^\$\$wpd-node\$\$(\d+)\$\$$/,os=new Set(["style","script","textarea","title"]);function is(e){let t="",s=!1,n=null,o=!1,i=null,a="",l=!1;for(let u=0;u<e.length;u++){const d=e[u];t+=d;for(let p=0;p<d.length;p++){const f=d[p];if(o){d.startsWith("-->",p)&&(o=!1,p+=2);continue}if(i!==null){f==="<"&&d[p+1]==="/"&&d.slice(p+2,p+2+i.length).toLowerCase()===i&&(p+=1+i.length,i=null,s=!0,l=!1,a="");continue}if(n!==null){f===n&&(n=null);continue}if(s){f==='"'||f==="'"?(n=f,l=!1):f===">"?(s=!1,l=!1,os.has(a)&&(i=a),a=""):l&&(/[a-zA-Z0-9-]/.test(f)?a+=f.toLowerCase():l=!1);continue}if(d.startsWith("<!--",p)){o=!0,p+=3;continue}const m=d[p+1]??"";f==="<"&&/[a-zA-Z/!]/.test(m)&&(s=!0,a="",l=/[a-zA-Z]/.test(m))}u<e.length-1&&(t+=s||o||i!==null?`${ts}${u}$$`:`<!--${ss}${u}$$-->`)}return t}const nt=new WeakMap;function ot(e){const t=nt.get(e);if(t)return t;const s=document.createElement("template");s.innerHTML=is(e);const n=[],o=(l,u)=>{if(l.nodeType===Node.ELEMENT_NODE){const f=l;for(const m of Array.from(f.attributes)){const h=m.name,$=m.value,_=h[0];if(D.test($))if(D.lastIndex=0,_==="@"){const w=D.exec($);D.lastIndex=0,n.push({path:u,kind:"event",name:h.slice(1),valueIndex:w?Number(w[1]):0}),f.removeAttribute(h)}else if(_==="."){const w=D.exec($);D.lastIndex=0,n.push({path:u,kind:"prop",name:h.slice(1),valueIndex:w?Number(w[1]):0}),f.removeAttribute(h)}else if(_==="?"){const w=D.exec($);D.lastIndex=0,n.push({path:u,kind:"bool",name:h.slice(1),valueIndex:w?Number(w[1]):0}),f.removeAttribute(h)}else{const w=[],g=[];let y=0,v;for(D.lastIndex=0;(v=D.exec($))!==null;)w.push($.slice(y,v.index)),g.push(Number(v[1])),y=v.index+v[0].length;w.push($.slice(y)),n.push({path:u,kind:"attr",name:h,template:w,valueIndices:g}),f.setAttribute(h,"")}}}const d=Array.from(l.childNodes);let p=0;for(let f=0;f<d.length;f++){const m=d[f],h=f+p;if(m.nodeType===Node.COMMENT_NODE){const $=ns.exec(m.data);if($){const _=document.createTextNode("");m.parentNode.replaceChild(_,m),n.push({path:[...u,h],kind:"node",valueIndex:Number($[1])})}continue}if(m.nodeType===Node.TEXT_NODE){const $=m.textContent||"";if(!D.test($)){D.lastIndex=0;continue}D.lastIndex=0;const _=m.parentNode;let w=0,g;const y=[],v=[];for(D.lastIndex=0;(g=D.exec($))!==null;){g.index>w&&y.push(document.createTextNode($.slice(w,g.index)));const M=document.createTextNode("");y.push(M),v.push({path:[...u,h+y.length-1],kind:"node",valueIndex:Number(g[1])}),w=g.index+g[0].length}w<$.length&&y.push(document.createTextNode($.slice(w)));for(const M of y)_.insertBefore(M,m);_.removeChild(m),p+=y.length-1,n.push(...v)}else o(m,[...u,h])}};o(s.content,[]);const a={template:s,buildParts:l=>{const u=[];for(const d of n){let p=l;for(const f of d.path)p=p.childNodes[f];d.kind==="node"?u.push({kind:"node",valueIndex:d.valueIndex,child:{anchor:p,state:null}}):d.kind==="attr"?u.push({kind:"attr",element:p,name:d.name,template:d.template,valueIndices:d.valueIndices}):d.kind==="event"?u.push({kind:"event",valueIndex:d.valueIndex,element:p,name:d.name}):d.kind==="prop"?u.push({kind:"prop",valueIndex:d.valueIndex,element:p,name:d.name}):d.kind==="bool"&&u.push({kind:"bool",valueIndex:d.valueIndex,element:p,name:d.name})}return u}};return nt.set(e,a),a}const it=new WeakMap;function rs(e,t){for(const s of e.nodes)if(s.parentNode!==t)return!1;return!0}function as(e,t){const s=it.get(t);if(s&&s.strings===e.strings&&rs(s,t)){le(s.parts,e.values);return}const n=ot(e.strings),o=n.template.content.cloneNode(!0),i=n.buildParts(o),a=Array.from(o.childNodes);for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(o),le(i,e.values),it.set(t,{strings:e.strings,parts:i,nodes:a})}function le(e,t){for(const s of e)if(s.kind==="node")de(s.child,t[s.valueIndex]);else if(s.kind==="attr"){let n=s.template[0];for(let o=0;o<s.valueIndices.length;o++)n+=rt(t[s.valueIndices[o]]),n+=s.template[o+1];n!==s.last&&(s.last=n,n===""?s.element.removeAttribute(s.name):s.element.setAttribute(s.name,n))}else if(s.kind==="event"){const n=t[s.valueIndex];n!==s.current&&(s.current&&s.element.removeEventListener(s.name,s.current),n&&s.element.addEventListener(s.name,n),s.current=n)}else if(s.kind==="prop"){const n=t[s.valueIndex];n!==s.last&&(s.last=n,s.element[s.name]=n)}else if(s.kind==="bool"){const n=!!t[s.valueIndex];n!==s.last&&(s.last=n,n?s.element.setAttribute(s.name,""):s.element.removeAttribute(s.name))}}function de(e,t){if(t==null||t===!1){e.state&&(F(e.state),e.state=null);return}if(Array.isArray(t)){us(e,t);return}if(es(t)){cs(e,t);return}if(t instanceof Node){ls(e,t);return}ds(e,rt(t))}function ls(e,t){const s=e.state;s?.shape==="node"&&s.node===t||(s&&F(s),x(e,[t]),e.state={shape:"node",node:t})}function ds(e,t){const s=e.state;if(s?.shape==="text"){s.text!==t&&(s.node.textContent=t,s.text=t);return}s&&F(s);const n=document.createTextNode(t);x(e,[n]),e.state={shape:"text",node:n,text:t}}function cs(e,t){const s=e.state;if(s?.shape==="template"&&s.strings===t.strings){le(s.parts,t.values);return}s&&F(s);const n=ot(t.strings),o=n.template.content.cloneNode(!0),i=n.buildParts(o),a=Array.from(o.childNodes);x(e,[o]),le(i,t.values),e.state={shape:"template",strings:t.strings,parts:i,nodes:a}}function us(e,t){const s=e.state;if(s?.shape==="array"){const o=Math.min(s.entries.length,t.length);for(let i=0;i<o;i++)de(s.entries[i],t[i]);if(t.length<s.entries.length){for(let i=t.length;i<s.entries.length;i++){const a=s.entries[i];a.state&&F(a.state),a.anchor.remove()}s.entries.length=t.length}else for(let i=s.entries.length;i<t.length;i++){const a=document.createTextNode("");x(e,[a]);const l={anchor:a,state:null};de(l,t[i]),s.entries.push(l)}return}s&&F(s);const n=[];for(const o of t){const i=document.createTextNode("");x(e,[i]);const a={anchor:i,state:null};de(a,o),n.push(a)}e.state={shape:"array",entries:n}}function x(e,t){const s=e.anchor.parentNode;if(s)for(const n of t)s.insertBefore(n,e.anchor)}function F(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&&(F(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&&F(t.state),t.anchor.remove()}function rt(e){return e==null||e===!1?"":String(e)}function I(e,t="short"){if(e===""||e===null||e===void 0)return"";const s=typeof e=="string"&&/^\d{4}-\d{2}$/.test(e)?`${e}-01T00:00:00`:e,n=s instanceof Date?s:new Date(s);if(Number.isNaN(n.getTime()))return String(e);try{switch(t){case"long":return n.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"});case"month":return n.toLocaleDateString(void 0,{year:"numeric",month:"long"});case"datetime":return n.toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"});case"iso":return n.toISOString();default:return n.toLocaleDateString(void 0,{month:"short",day:"numeric"})}}catch{return String(e)}}function ps(){let e="";const t=new Map;let s=0,n=1,o=0,i=!1,a=!0,l=null,u,d=async()=>{},p=()=>{};const f=()=>{const $=[],_=new Set;for(const w of Array.from(t.keys()).sort((g,y)=>g-y))for(const g of t.get(w)??[])_.has(g.id)||(_.add(g.id),$.push(g));return $},m=()=>n>Math.max(...Array.from(t.keys()),1),h=$=>{!$.some(_=>_.isIntersecting)||i||!a||(a=!1,i=!0,o=Math.max(1,...Array.from(t.keys()))+1,p(),d().finally(()=>{i=!1,o=0,p()}))};return{accumulate($,_){return _?(e!==$&&(e=$,t.clear()),t.set(_.page,_.items),s=_.total,n=_.pages,f()):(e="",t.clear(),s=0,n=1,[])},items:f,get total(){return s},get pageCount(){return n},get loadingPage(){return o},hasMore:m,ghosts($){return o===0||t.has(o)||!m()?0:Math.max(1,Math.min($,s-f().length))},sync($){d=$.load,p=$.repaint,!u&&typeof IntersectionObserver<"u"&&(u=new IntersectionObserver(h)),u?.disconnect(),$.sentinel&&u?.observe($.sentinel),$.canvas!==l&&(l=$.canvas,l?.addEventListener("scroll",()=>{a=!0},{passive:!0})),l&&l.scrollHeight<=l.clientHeight+4&&(a=!0)},dispose(){u?.disconnect(),u=void 0}}}function at(e,t,s,n){if(n.shift&&e.length>0){const o=e[e.length-1],i=t.indexOf(o),a=t.indexOf(s);if(i!==-1&&a!==-1){const l=t.slice(Math.min(i,a),Math.max(i,a)+1),u=new Set([...e,...l]);return Array.from(u)}}return n.ctrl?e.includes(s)?e.filter(o=>o!==s):[...e,s]:[s]}function fs(e){const{root:t,select:s}=e,n=e.item??"[data-item-id]";let o=null;const i=u=>{if(u.button!==0||!u.target?.closest(e.canvas)||u.target.closest(n))return;const p=document.createElement("div");p.className=e.className??"os-app__marquee",document.body.appendChild(p),o={x:u.clientX,y:u.clientY,box:p},!u.ctrlKey&&!u.metaKey&&!u.shiftKey&&s([])},a=u=>{if(!o)return;const d=Math.min(o.x,u.clientX),p=Math.min(o.y,u.clientY),f=Math.abs(u.clientX-o.x),m=Math.abs(u.clientY-o.y);Object.assign(o.box.style,{left:`${d}px`,top:`${p}px`,width:`${f}px`,height:`${m}px`});const h=[];for(const $ of Array.from(t.querySelectorAll(n))){const _=$.getBoundingClientRect();_.left<d+f&&_.right>d&&_.top<p+m&&_.bottom>p&&h.push(Number($.getAttribute("data-item-id")))}s(h)},l=()=>{o&&(o.box.remove(),o=null)};return t.addEventListener("pointerdown",i),document.addEventListener("pointermove",a),document.addEventListener("pointerup",l),()=>{t.removeEventListener("pointerdown",i),document.removeEventListener("pointermove",a),document.removeEventListener("pointerup",l),l()}}async function ms(e){if(e==="")return!1;const t=globalThis.navigator?.clipboard;if(t?.writeText)try{return await t.writeText(e),!0}catch{}return hs(e)}function hs(e){const t=globalThis.document;if(!t?.body||typeof t.execCommand!="function")return!1;const s=t.createElement("textarea");s.value=e,s.setAttribute("readonly",""),s.setAttribute("aria-hidden","true"),s.style.position="fixed",s.style.insetInlineStart="-9999px",s.style.opacity="0",t.body.appendChild(s);const n=t.activeElement;s.select();let o=!1;try{o=t.execCommand("copy")}catch{o=!1}return s.remove(),n?.focus?.(),o}const gs="data-os-mode";function H(e=typeof document<"u"?document.documentElement:null){return!!e&&e.getAttribute(gs)==="mobile"}function ys(e,t){const s=t.local??{},n={id:e,hasLocal:a=>Object.prototype.hasOwnProperty.call(s,a),runLocal:(a,l,u,d)=>{const p=s[a];if(!p)return l;const f={...l},m=p(f,u,d);return m===void 0?f:m},render:a=>{as(t.view(a),a.root),t.updated?.(a)},mounted:a=>t.mounted?.(a)},{placeholder:o}=t;o&&(n.placeholder=a=>o(a));const i=window;return(i.openStationApps??(i.openStationApps={}))[e]=n,n}function T(){return window.wp?.os??{}}function $s(){return{menu:null,folderSel:null,quickEdit:null,trashHidden:new Map,trashPage:null,previewTarget:0,previewScope:"",previewLoading:!1,previewRevision:0,previewError:!1,zoom:!1,columnsMenu:null,revealSelection:!1,list:ps(),abilityQuery:"",abilityOpen:new Map,nameError:"",agentDraft:null,agentDraftFor:0,agentBusy:!1,agentBackfilled:new Set,agentDropTargets:new Map,rosterStamp:"",chatAfterCreate:!1,fp:null}}function k(e){return e.ui($s)}const lt="__openStationSharedStores";function ws(){const e=window;let t=e[lt];return t||(t=new Map,e[lt]=t),t}function ce(e,t){const s=ws();let n=s.get(e);n||(n={state:t(),listeners:new Set,rebuild:t},s.set(e,n));const o={get state(){return n.state},set state(i){n.state=i},getState(){return n.state},notify(){for(const i of Array.from(n.listeners))try{i(n.state)}catch(a){console.error(`[desktop-mode/shared-store:${e}] subscriber threw:`,a)}},subscribe(i){return n.listeners.add(i),()=>{n.listeners.delete(i)}},setState(i){const a=n.state;if(typeof a!="object"||a===null){console.warn(`[desktop-mode/shared-store:${e}] setState called on a primitive store; use the state setter instead.`);return}Object.assign(a,i),o.notify()},reset(){const i=n.rebuild(),a=n.state;if(typeof a=="object"&&a!==null&&typeof i=="object"&&i!==null){const l=a;for(const u of Object.keys(l))delete l[u];Object.assign(l,i)}else n.state=i;n.listeners.clear()}};return o}const L=ce("openstation/trash-optimistic",()=>({changes:new Map,reconcile:new Set})),vs=e=>`${e.type}:${e.id}`;function _s(e){return{subtitle:"",mime:"",preview:"",icon:"",deleted_at:new Date().toISOString(),deleted_by:"",deleted_by_id:0,can_restore:!1,can_purge:!1,edit_link:"",...e}}function ue(){return Array.from(L.state.changes.values())}function bs(e,t){const s=L.subscribe(e);return t&&L.state.reconcile.add(t),()=>{s(),t&&L.state.reconcile.delete(t)}}function ks(e,t="in"){const s=vs(e);if(L.state.changes.get(s)?.pending)return null;const n={item:e,direction:t,pending:!0};return L.state.changes.set(s,n),L.notify(),{async finish(o){L.state.changes.get(s)!==n||!n.pending||(n.pending=!1,o&&(L.notify(),await Promise.allSettled(Array.from(L.state.reconcile,async i=>i()))),L.state.changes.get(s)===n&&(L.state.changes.delete(s),L.notify()))}}}function pe(e=null){const t=e??(typeof document<"u"?document.documentElement:null);return t&&H(t)?!0:typeof window<"u"&&typeof window.matchMedia=="function"&&window.matchMedia("(pointer: coarse)").matches}function fe(e){return[e.section,e.query,e.sort].join("|")}function me(e,t,s){const n=e.filter(i=>{if(i.sections&&i.sections.length>0&&!(i.sections.includes(t.entityId)||i.sections.includes("*")||!!t.postType&&i.sections.includes(t.postType)))return!1;if(i.mime){if(!t.mime)return!1;try{if(!new RegExp(i.mime).test(t.mime))return!1}catch{return!1}}return!0}),o=s?.applyFilters("os.my-wordpress.preview-actions",n,t);return Array.isArray(o)?o:n}function ee(e,t,s){return{entityId:e.id,kind:e.kind,postType:e.post_type,mime:t.mime||void 0,item:t,itemId:t.id,surface:s}}function dt(e,t){try{e.onSelect?.(t)}catch{console.error(`[my-wordpress] preview action ${e.id} threw.`)}}function X(e,t){return e.sections.find(s=>s.id===t)??null}function ct(e,t){const s=e?.applyFilters("os.my-wordpress.list-bands",null,t);return!s||!Array.isArray(s.bands)||s.bands.length===0||typeof s.assign!="function"?null:s}function Pe(e,t){return e.startsWith("dashicons-")?c`<span class="${t} dashicons ${e}" aria-hidden="true"></span>`:c`<span
2 2 class="${t} os-mywp__icon-mask"
3 3 style="--mywp-icon:url(&quot;${e.replace(/"/g,"%22")}&quot;)"
4 4 aria-hidden="true"
5 - ></span>`}function st(e,t){if(t.length<=e.length||!e.every((i,a)=>t[a]?.id===i.id))return t;const s=t.slice(e.length),n=s.filter(i=>i.id.startsWith("agent-send-to-"));if(n.length===0)return t;const o=s.filter(i=>!i.id.startsWith("agent-send-to-"));return[...t.slice(0,e.length),...o,{id:"send-to-heading",label:r("Send to"),heading:!0},...n]}function nt(e,t,s){const n=[];t.canEdit&&n.push({id:"edit",label:e.kind==="user"?r("Edit profile"):r("Open in editor")}),n.push({id:"open",label:r("Navigate into")}),e.kind==="post"&&t.canEdit&&!e.flat&&(n.push({id:"quick-edit",label:r("Edit…")}),t.status!=="publish"&&n.push({id:"publish",label:r("Publish")})),t.link&&n.push({id:"copy-link",label:r("Copy link")}),t.shortlink&&n.push({id:"copy-shortlink",label:r("Copy shortlink")}),n.push({id:"copy-id",label:r("Copy ID")}),e.kind==="post"&&!e.flat&&n.push({id:"trash",label:r("Move to Trash"),danger:!0,disabled:!t.canDelete});for(const o of s)n.push({id:o.id,label:o.label,icon:o.icon});return n}const ot="desktop-mode-user-edit";function Q(e,t={}){if(!Number.isFinite(e)||e<=0)return!1;const s=window.wp?.os;return s?.openWindow?.(ot,{source:t.source??"user-edit/open",params:{userId:e}})?(s?.relations?.set?.(ot,{type:"user",id:e}),!0):(t.fallback?.(),!1)}const as=500,ls=10,z=new WeakMap;function le(e){const t=z.get(e);t&&(clearTimeout(t.timer),z.delete(e))}function cs(e){return e.isPrimary&&(e.pointerType==="touch"||e.pointerType==="pen")}function Me(e,t=()=>!0){return{pointerdown:s=>{const n=s.currentTarget;if(le(n),!cs(s)||!t(s))return;const o=s.clientX,i=s.clientY,a=setTimeout(()=>{z.delete(n);const c=u=>{u.stopPropagation(),u.preventDefault()};n.addEventListener("click",c,{capture:!0,once:!0}),setTimeout(()=>n.removeEventListener("click",c,{capture:!0}),700),e(o,i)},as);z.set(n,{pointerId:s.pointerId,x:o,y:i,timer:a})},pointermove:s=>{const n=s.currentTarget,o=z.get(n);!o||o.pointerId!==s.pointerId||Math.hypot(s.clientX-o.x,s.clientY-o.y)>ls&&le(n)},pointerup:s=>{const n=s.currentTarget;z.get(n)?.pointerId===s.pointerId&&le(n)},pointercancel:s=>{le(s.currentTarget)}}}function Te(e,t,s,n){const o=(a,c)=>{k(e).menu={x:a,y:c,item:s},e.repaint()},i=()=>{if(t.kind==="user"){if(T().hooks?.applyFilters("os.my-wordpress.user-activate",!1,{entityId:t.id,kind:t.kind,item:s})===!0)return;e.dispatch("footprint",{user:s.id,name:s.title});return}s.canEdit&&e.dispatch("edit",{item:s.id})};return{select:a=>{if(e.local("select",{item:s.id,ctrl:a.ctrlKey||a.metaKey,shift:a.shiftKey,order:n}),!(a.ctrlKey||a.metaKey||a.shiftKey)){if(ie()&&(t.kind==="user"||s.canEdit)){i();return}e.dispatch("open",{item:s.id})}},activate:i,menu:a=>{a.preventDefault(),a.stopPropagation(),o(a.clientX,a.clientY)},menuAt:a=>{const c=a.getBoundingClientRect();o(c.left,c.bottom+2)},press:Me(o)}}async function Ce(e,t,s){const n=await ss(t);e.host.toast?.({message:n?s:r("Could not copy — the clipboard is not available here.")})}function it(e){return b(r("Copied ID %d."),e)}function Ee(e,t,s){const n=t.map(i=>String(i[s]??"")).filter(Boolean);let o=b(r("Copied %d links."),n.length);n.length===1&&(o=r(s==="shortlink"?"Copied the shortlink.":"Copied the link.")),Ce(e,n.join(`
6 -`),o)}function ds(e,t){const s=t.map(n=>n.id);Ce(e,s.join(", "),s.length===1?it(s[0]):b(r("Copied %d IDs."),s.length))}function us(e){if(e===""||e==="publish")return"";const t={draft:"warning",pending:"info",future:"info",private:"neutral"},s={draft:r("Draft"),pending:r("Pending"),future:r("Scheduled"),private:r("Private")};return l`<os-badge tone=${t[e]??"neutral"} no-dot class="os-mywp__cell-badge">${s[e]??e}</os-badge>`}function Ie(e,t){const s=e.thumb?l`<img class="os-mywp__cell-thumb" src=${e.thumb} alt="" loading="lazy" />`:Ae(t.icon,"os-mywp__cell-glyph");return l`
5 + ></span>`}function ut(e,t){if(t.length<=e.length||!e.every((i,a)=>t[a]?.id===i.id))return t;const s=t.slice(e.length),n=s.filter(i=>i.id.startsWith("agent-send-to-"));if(n.length===0)return t;const o=s.filter(i=>!i.id.startsWith("agent-send-to-"));return[...t.slice(0,e.length),...o,{id:"send-to-heading",label:r("Send to"),heading:!0},...n]}function pt(e,t,s){const n=[];t.canEdit&&n.push({id:"edit",label:e.kind==="user"?r("Edit profile"):r("Open in editor")}),n.push({id:"open",label:r("Navigate into")}),e.kind==="post"&&t.canEdit&&!e.flat&&(n.push({id:"quick-edit",label:r("Edit…")}),t.status!=="publish"&&n.push({id:"publish",label:r("Publish")})),t.link&&n.push({id:"copy-link",label:r("Copy link")}),t.shortlink&&n.push({id:"copy-shortlink",label:r("Copy shortlink")}),n.push({id:"copy-id",label:r("Copy ID")}),e.kind==="post"&&!e.flat&&n.push({id:"trash",label:r("Move to Trash"),danger:!0,disabled:!t.canDelete});for(const o of s)n.push({id:o.id,label:o.label,icon:o.icon});return n}const he=e=>JSON.stringify([e.state.group,e.state.section,e.state.query,e.state.into,e.state.relation,e.state.footprint]);function ft(e){const t=Object.create(e);return Object.defineProperty(t,"state",{get:()=>{const s=k(e);return s.previewLoading&&s.previewScope===he(e)?{...e.state,item:s.previewTarget}:e.state}}),t}function mt(e){e=ft(e);const t=e.data.detail,s=X(e.data,e.state.section);return t?.id===e.state.item&&t.kind===s?.kind?t:null}function Ss(e){const t=k(e);return t.previewError?r("Could not load details."):t.previewLoading?r("Loading details…"):r("Details are not available for this item.")}function O(e,t){const s=k(e),n=s.previewLoading;s.previewTarget=t,s.previewScope=he(e),s.previewError=!1,s.previewRevision++,s.previewLoading=n||t>0,e.local("preview",{item:t}),!(n||t===0)&&(s.previewLoading=!0,(async()=>{try{let o;do{o=s.previewRevision;const i=s.previewTarget,a=s.previewScope,l=await e.dispatch("open",{item:i});if(a!==he(e)){if(o!==s.previewRevision&&s.previewScope===he(e))continue;break}e.local("preview",{item:s.previewTarget}),o===s.previewRevision&&(s.previewError=!l)}while(o!==s.previewRevision&&s.previewTarget>0)}catch{s.previewError=!0}finally{s.previewLoading=!1,e.repaint()}})())}function As(e,t,s){const n=k(e),o=fe(e.state),i=n.trashHidden.get(o)??new Set;if(n.trashPage!==e.data.list){n.trashPage=e.data.list;for(const l of e.data.list?.items??[])ge(t,l.id)||i.delete(l.id)}const a=new Set(ue().filter(l=>l.direction==="in"&&l.item.type===t.post_type).map(l=>l.item.id));return s.filter(l=>!i.has(l.id)&&!a.has(l.id))}function ge(e,t){return ue().some(s=>s.direction==="in"&&s.item.type===e.post_type&&s.item.id===t)}function Ms(e){let t=null;return bs(()=>e.repaint(),()=>(t??(t=Promise.resolve().then(async()=>{if(t=null,await e.dispatch("refresh")){const n=k(e),o=X(e.data,e.state.section),i=fe(e.state),a=n.trashHidden.get(i)??new Set;for(const u of ue())u.direction==="in"&&!u.pending&&u.item.type===o?.post_type&&!e.data.list?.items.some(d=>d.id===u.item.id)&&a.add(u.item.id);n.trashHidden.set(i,a);const l=ue().filter(u=>!u.pending&&u.direction==="in"&&u.item.type===o?.post_type).map(u=>u.item.id);e.local("select-set",{ids:e.state.selected.filter(u=>!l.includes(u))}),l.includes(e.state.item)&&O(e,0)}})),t))}async function ht(e,t,s){if(s.length===0||!await e.host.confirm?.({message:s.length>1?b(r("Move %d items to the Trash?"),s.length):r("Move this to the Trash?"),confirmLabel:r("Trash"),danger:!0}))return;const o=s.flatMap(u=>{const d=ks(_s({id:u.id,type:t.post_type??"post",title:u.title,subtitle:u.subtitle,preview:u.thumb}));return d?[{row:u,operation:d}]:[]});if(o.length===0)return;if(!t.restPath){let u=!1;try{o.length===1?u=await e.dispatch("trash",{item:o[0].row.id}):(e.local("select-set",{ids:o.map(({row:d})=>d.id)}),u=await e.dispatch("bulk-trash"))}finally{o.forEach(({operation:d})=>void d.finish(u))}return}const i=await Promise.allSettled(o.map(async({row:u})=>{if(!(await e.fetch(`${t.restPath.replace(/\/+$/,"")}/${u.id}`,{method:"DELETE"})).ok)throw new Error(r("Could not move this item to Trash."))})),a=o.filter((u,d)=>i[d].status==="fulfilled").map(({row:u})=>u.id);a.length>0&&(e.host.announce?.(t.post_type??"post","trashed",a),e.local("select-set",{ids:e.state.selected.filter(u=>!a.includes(u))}),a.includes(e.state.item)&&O(e,0)),i.forEach((u,d)=>{o[d].operation.finish(u.status==="fulfilled")});const l=i.length-a.length;e.host.toast?.({message:l>0?b(r("%d item(s) could not be moved to Trash."),l):b(r("Moved %d item(s) to the Trash."),a.length)})}const gt="desktop-mode-user-edit";function te(e,t={}){if(!Number.isFinite(e)||e<=0)return!1;const s=window.wp?.os;return s?.openWindow?.(gt,{source:t.source??"user-edit/open",params:{userId:e}})?(s?.relations?.set?.(gt,{type:"user",id:e}),!0):(t.fallback?.(),!1)}const Ts=500,Cs=10,Y=new WeakMap;function ye(e){const t=Y.get(e);t&&(clearTimeout(t.timer),Y.delete(e))}function Es(e){return e.isPrimary&&(e.pointerType==="touch"||e.pointerType==="pen")}function Re(e,t=()=>!0){return{pointerdown:s=>{const n=s.currentTarget;if(ye(n),!Es(s)||!t(s))return;const o=s.clientX,i=s.clientY,a=setTimeout(()=>{Y.delete(n);const l=u=>{u.stopPropagation(),u.preventDefault()};n.addEventListener("click",l,{capture:!0,once:!0}),setTimeout(()=>n.removeEventListener("click",l,{capture:!0}),700),e(o,i)},Ts);Y.set(n,{pointerId:s.pointerId,x:o,y:i,timer:a})},pointermove:s=>{const n=s.currentTarget,o=Y.get(n);!o||o.pointerId!==s.pointerId||Math.hypot(s.clientX-o.x,s.clientY-o.y)>Cs&&ye(n)},pointerup:s=>{const n=s.currentTarget;Y.get(n)?.pointerId===s.pointerId&&ye(n)},pointercancel:s=>{ye(s.currentTarget)}}}function Oe(e,t,s,n){const o=(a,l)=>{k(e).menu={x:a,y:l,item:s},e.repaint()},i=()=>{if(t.kind==="user"){if(T().hooks?.applyFilters("os.my-wordpress.user-activate",!1,{entityId:t.id,kind:t.kind,item:s})===!0)return;e.dispatch("footprint",{user:s.id,name:s.title});return}s.canEdit&&e.dispatch("edit",{item:s.id})};return{select:a=>{if(e.local("select",{item:s.id,ctrl:a.ctrlKey||a.metaKey,shift:a.shiftKey,order:n}),!(a.ctrlKey||a.metaKey||a.shiftKey)){if(pe()&&(t.kind==="user"||s.canEdit)){i();return}O(e,s.id)}},activate:i,menu:a=>{a.preventDefault(),a.stopPropagation(),o(a.clientX,a.clientY)},menuAt:a=>{const l=a.getBoundingClientRect();o(l.left,l.bottom+2)},press:Re(o)}}async function Fe(e,t,s){const n=await ms(t);e.host.toast?.({message:n?s:r("Could not copy — the clipboard is not available here.")})}function yt(e){return b(r("Copied ID %d."),e)}function We(e,t,s){const n=t.map(i=>String(i[s]??"")).filter(Boolean);let o=b(r("Copied %d links."),n.length);n.length===1&&(o=r(s==="shortlink"?"Copied the shortlink.":"Copied the link.")),Fe(e,n.join(`
6 +`),o)}function Is(e,t){const s=t.map(n=>n.id);Fe(e,s.join(", "),s.length===1?yt(s[0]):b(r("Copied %d IDs."),s.length))}function Ns(e){if(e===""||e==="publish")return"";const t={draft:"warning",pending:"info",future:"info",private:"neutral"},s={draft:r("Draft"),pending:r("Pending"),future:r("Scheduled"),private:r("Private")};return c`<os-badge tone=${t[e]??"neutral"} no-dot class="os-mywp__cell-badge">${s[e]??e}</os-badge>`}function Ue(e,t){const s=e.thumb?c`<img class="os-mywp__cell-thumb" src=${e.thumb} alt="" loading="lazy" />`:Pe(t.icon,"os-mywp__cell-glyph");return c`
7 7 <span class="os-mywp__cell-title">
8 8 ${s}
9 9 <span class="os-mywp__cell-text">${e.title}</span>
10 - ${t.kind==="post"?us(e.status):""}
11 - ${e.lockedBy?l`<span
10 + ${t.kind==="post"?Ns(e.status):""}
11 + ${e.lockedBy?c`<span
12 12 class="dashicons dashicons-lock os-mywp__cell-lock"
13 13 title=${b(r("%s is editing"),e.lockedBy)}
14 14 ></span>`:""}
15 15 </span>
16 - `}function Ne(e){return e?l`<time datetime=${e} title=${I(e,"datetime")}>${I(e,"long")}</time>`:""}function rt(e){return e?l`<os-relative-time datetime=${e} title=${I(e,"datetime")}></os-relative-time>`:""}const De={id:"id",label:r("ID"),sort:{asc:"id-asc",desc:"id-desc",first:"desc"},mono:!0,align:"end",locked:!0,render:e=>e.id},ce={id:"actions",label:r("Actions"),align:"end",locked:!0,render:()=>""};function ps(e){const t=[De,{id:"title",label:r("Title"),sort:{asc:"title-asc",desc:"title-desc",first:"asc"},width:"1fr",locked:!0,render:Ie},{id:"slug",label:r("Slug"),sort:{asc:"slug-asc",desc:"slug-desc",first:"asc"},mono:!0,render:s=>s.slug??""},{id:"author",label:r("Author"),render:s=>s.author??""},{id:"status",label:r("Status"),render:s=>s.status},{id:"date",label:r("Date"),sort:{asc:"oldest",desc:"default",first:"desc"},render:s=>Ne(s.date)},{id:"modified",label:r("Modified"),sort:{asc:"modified-asc",desc:"modified",first:"desc"},render:s=>rt(s.modified)},{id:"comments",label:r("Comments"),sort:{asc:"comments-asc",desc:"comments",first:"desc"},align:"end",mono:!0,render:s=>s.comments??0}];return e.hierarchical&&t.push({id:"parent",label:r("Parent"),render:s=>s.parent&&s.parent>0?l`<span class="os-mywp__cell-parent"><span class="os-mywp__cell-id">#${s.parent}</span> ${s.parentTitle??""}</span>`:""}),t.push({id:"words",label:r("Words"),align:"end",mono:!0,hidden:!0,render:s=>s.words??0},ce),t}function fs(){return[De,{id:"title",label:r("File"),sort:{asc:"title-asc",desc:"title-desc",first:"asc"},width:"1fr",locked:!0,render:Ie},{id:"file",label:r("File name"),sort:{asc:"slug-asc",desc:"slug-desc",first:"asc"},mono:!0,render:e=>e.file??""},{id:"mime",label:r("Type"),mono:!0,render:e=>e.mime},{id:"size",label:r("Size"),align:"end",mono:!0,render:e=>e.size??""},{id:"dimensions",label:r("Dimensions"),mono:!0,render:e=>e.dimensions??""},{id:"parent",label:r("Attached to"),render:e=>e.parent&&e.parent>0?l`<span class="os-mywp__cell-parent"><span class="os-mywp__cell-id">#${e.parent}</span> ${e.parentTitle??""}</span>`:l`<span class="os-mywp__cell-muted">${r("Unattached")}</span>`},{id:"author",label:r("Uploaded by"),hidden:!0,render:e=>e.author??""},{id:"date",label:r("Uploaded"),sort:{asc:"oldest",desc:"default",first:"desc"},render:e=>Ne(e.date)},{id:"modified",label:r("Modified"),sort:{asc:"modified-asc",desc:"modified",first:"desc"},hidden:!0,render:e=>rt(e.modified)},ce]}function ms(){return[De,{id:"title",label:r("Name"),sort:{asc:"default",desc:"title-desc",first:"asc"},width:"1fr",locked:!0,render:Ie},{id:"login",label:r("Username"),sort:{asc:"login-asc",desc:"login-desc",first:"asc"},mono:!0,render:e=>e.login??""},{id:"email",label:r("Email"),sort:{asc:"email-asc",desc:"email-desc",first:"asc"},render:e=>e.email??e.subtitle},{id:"roles",label:r("Role"),render:e=>e.status},{id:"posts",label:r("Posts"),sort:{asc:"posts-asc",desc:"posts",first:"desc"},align:"end",mono:!0,render:e=>e.posts??0},{id:"registered",label:r("Registered"),sort:{asc:"oldest",desc:"newest",first:"desc"},render:e=>Ne(e.registered)},ce]}function de(e){let t;e.kind==="user"?t=ms():e.kind==="media"?t=fs():t=ps(e);const s=T().hooks?.applyFilters("os.my-wordpress.list-columns",t,e);if(!Array.isArray(s))return t;const n=s.filter(i=>{if(!i||typeof i!="object")return!1;const a=i;return typeof a.id=="string"&&a.id!==""&&typeof a.render=="function"}),o=new Set(n.map(i=>i.id));return o.has("title")||n.unshift(t.find(i=>i.id==="title")),o.has("actions")||n.push(ce),n}function ue(e,t,s){const n=e.data.hiddenColumns?.[t.id];return Array.isArray(n)?new Set(n.map(String)):new Set(s.filter(o=>o.hidden).map(o=>o.id))}function at(e,t){if(!e.sort)return t;const{asc:s,desc:n,first:o}=e.sort,i=o==="asc"?s:n;return t===i?o==="asc"?n:s:i}function hs(e,t){return!!e.sort&&e.sort.asc in t&&e.sort.desc in t}function pe(e,t,s){return l`
16 + `}function qe(e){return e?c`<time datetime=${e} title=${I(e,"datetime")}>${I(e,"long")}</time>`:""}function $t(e){return e?c`<os-relative-time datetime=${e} title=${I(e,"datetime")}></os-relative-time>`:""}const Be={id:"id",label:r("ID"),sort:{asc:"id-asc",desc:"id-desc",first:"desc"},mono:!0,align:"end",locked:!0,render:e=>e.id},$e={id:"actions",label:r("Actions"),align:"end",locked:!0,render:()=>""};function Ds(e){const t=[Be,{id:"title",label:r("Title"),sort:{asc:"title-asc",desc:"title-desc",first:"asc"},width:"1fr",locked:!0,render:Ue},{id:"slug",label:r("Slug"),sort:{asc:"slug-asc",desc:"slug-desc",first:"asc"},mono:!0,render:s=>s.slug??""},{id:"author",label:r("Author"),render:s=>s.author??""},{id:"status",label:r("Status"),render:s=>s.status},{id:"date",label:r("Date"),sort:{asc:"oldest",desc:"default",first:"desc"},render:s=>qe(s.date)},{id:"modified",label:r("Modified"),sort:{asc:"modified-asc",desc:"modified",first:"desc"},render:s=>$t(s.modified)},{id:"comments",label:r("Comments"),sort:{asc:"comments-asc",desc:"comments",first:"desc"},align:"end",mono:!0,render:s=>s.comments??0}];return e.hierarchical&&t.push({id:"parent",label:r("Parent"),render:s=>s.parent&&s.parent>0?c`<span class="os-mywp__cell-parent"><span class="os-mywp__cell-id">#${s.parent}</span> ${s.parentTitle??""}</span>`:""}),t.push({id:"words",label:r("Words"),align:"end",mono:!0,hidden:!0,render:s=>s.words??0},$e),t}function Ls(){return[Be,{id:"title",label:r("File"),sort:{asc:"title-asc",desc:"title-desc",first:"asc"},width:"1fr",locked:!0,render:Ue},{id:"file",label:r("File name"),sort:{asc:"slug-asc",desc:"slug-desc",first:"asc"},mono:!0,render:e=>e.file??""},{id:"mime",label:r("Type"),mono:!0,render:e=>e.mime},{id:"size",label:r("Size"),align:"end",mono:!0,render:e=>e.size??""},{id:"dimensions",label:r("Dimensions"),mono:!0,render:e=>e.dimensions??""},{id:"parent",label:r("Attached to"),render:e=>e.parent&&e.parent>0?c`<span class="os-mywp__cell-parent"><span class="os-mywp__cell-id">#${e.parent}</span> ${e.parentTitle??""}</span>`:c`<span class="os-mywp__cell-muted">${r("Unattached")}</span>`},{id:"author",label:r("Uploaded by"),hidden:!0,render:e=>e.author??""},{id:"date",label:r("Uploaded"),sort:{asc:"oldest",desc:"default",first:"desc"},render:e=>qe(e.date)},{id:"modified",label:r("Modified"),sort:{asc:"modified-asc",desc:"modified",first:"desc"},hidden:!0,render:e=>$t(e.modified)},$e]}function Ps(){return[Be,{id:"title",label:r("Name"),sort:{asc:"default",desc:"title-desc",first:"asc"},width:"1fr",locked:!0,render:Ue},{id:"login",label:r("Username"),sort:{asc:"login-asc",desc:"login-desc",first:"asc"},mono:!0,render:e=>e.login??""},{id:"email",label:r("Email"),sort:{asc:"email-asc",desc:"email-desc",first:"asc"},render:e=>e.email??e.subtitle},{id:"roles",label:r("Role"),render:e=>e.status},{id:"posts",label:r("Posts"),sort:{asc:"posts-asc",desc:"posts",first:"desc"},align:"end",mono:!0,render:e=>e.posts??0},{id:"registered",label:r("Registered"),sort:{asc:"oldest",desc:"newest",first:"desc"},render:e=>qe(e.registered)},$e]}function we(e){let t;e.kind==="user"?t=Ps():e.kind==="media"?t=Ls():t=Ds(e);const s=T().hooks?.applyFilters("os.my-wordpress.list-columns",t,e);if(!Array.isArray(s))return t;const n=s.filter(i=>{if(!i||typeof i!="object")return!1;const a=i;return typeof a.id=="string"&&a.id!==""&&typeof a.render=="function"}),o=new Set(n.map(i=>i.id));return o.has("title")||n.unshift(t.find(i=>i.id==="title")),o.has("actions")||n.push($e),n}function ve(e,t,s){const n=e.data.hiddenColumns?.[t.id];return Array.isArray(n)?new Set(n.map(String)):new Set(s.filter(o=>o.hidden).map(o=>o.id))}function wt(e,t){if(!e.sort)return t;const{asc:s,desc:n,first:o}=e.sort,i=o==="asc"?s:n;return t===i?o==="asc"?n:s:i}function Rs(e,t){return!!e.sort&&e.sort.asc in t&&e.sort.desc in t}function _e(e,t,s){return c`
17 17 <os-button
18 18 variant="ghost"
19 19 class="os-mywp__row-action"
20 20 title=${t}
@@ -23,9 +23,9 @@
23 23 @dblclick=${n=>n.stopPropagation()}
24 24 >
25 25 <span class="dashicons ${e}" aria-hidden="true"></span>
26 26 </os-button>
27 - `}function gs(e,t,s,n){const o=Te(e,t,s,n),i=[];return s.canEdit&&i.push(pe("dashicons-edit",t.kind==="user"?r("Edit profile"):r("Open in editor"),()=>{t.kind==="user"?Q(s.id,{source:"my-wordpress-app/list-view",fallback:()=>void e.dispatch("edit",{item:s.id})}):e.dispatch("edit",{item:s.id})})),t.kind==="user"&&i.push(pe("dashicons-chart-area",r("View activity footprint"),()=>void e.dispatch("footprint",{user:s.id,name:s.title}))),s.link&&i.push(pe("dashicons-admin-links",t.kind==="media"?r("Copy URL"):r("Copy link"),()=>Ee(e,[s],"link"))),s.shortlink&&i.push(pe("dashicons-shortcode",r("Copy shortlink"),()=>Ee(e,[s],"shortlink"))),i.push(l`
27 + `}function Os(e,t,s,n){const o=Oe(e,t,s,n),i=[];return s.canEdit&&i.push(_e("dashicons-edit",t.kind==="user"?r("Edit profile"):r("Open in editor"),()=>{t.kind==="user"?te(s.id,{source:"my-wordpress-app/list-view",fallback:()=>void e.dispatch("edit",{item:s.id})}):e.dispatch("edit",{item:s.id})})),t.kind==="user"&&i.push(_e("dashicons-chart-area",r("View activity footprint"),()=>void e.dispatch("footprint",{user:s.id,name:s.title}))),s.link&&i.push(_e("dashicons-admin-links",t.kind==="media"?r("Copy URL"):r("Copy link"),()=>We(e,[s],"link"))),s.shortlink&&i.push(_e("dashicons-shortcode",r("Copy shortlink"),()=>We(e,[s],"shortlink"))),i.push(c`
28 28 <os-button
29 29 variant="ghost"
30 30 class="os-mywp__row-action"
31 31 title=${r("More actions")}
@@ -35,21 +35,21 @@
35 35 @dblclick=${a=>a.stopPropagation()}
36 36 >
37 37 <span class="dashicons dashicons-ellipsis" aria-hidden="true"></span>
38 38 </os-button>
39 - `),l`<span class="os-mywp__row-actions">${i}</span>`}function $s(e,t,s,n,o){const i=["os-mywp__td",t.align==="end"?"os-mywp__td--end":"",t.mono?"os-mywp__td--mono":"",`os-mywp__td--${t.id}`].filter(Boolean).join(" ");if(t.id==="id")return l`
39 + `),c`<span class="os-mywp__row-actions">${i}</span>`}function Fs(e,t,s,n,o){const i=["os-mywp__td",t.align==="end"?"os-mywp__td--end":"",t.mono?"os-mywp__td--mono":"",`os-mywp__td--${t.id}`].filter(Boolean).join(" ");if(t.id==="id")return c`
40 40 <td class=${i}>
41 41 <button
42 42 type="button"
43 43 class="os-mywp__cell-id os-mywp__cell-id--copy"
44 44 title=${r("Copy ID")}
45 - @click=${c=>{c.stopPropagation(),Ce(e,String(s.id),it(s.id))}}
46 - @dblclick=${c=>c.stopPropagation()}
45 + @click=${l=>{l.stopPropagation(),Fe(e,String(s.id),yt(s.id))}}
46 + @dblclick=${l=>l.stopPropagation()}
47 47 >${s.id}</button>
48 48 </td>
49 - `;if(t.id==="actions")return l`<td class=${i}>${gs(e,n,s,o)}</td>`;let a;try{a=t.render(s,n)}catch{a=""}return l`<td class=${i}>${a}</td>`}function ys(e,t,s,n,o){const{state:i}=e,a=i.selected.includes(s.id),c=i.item===s.id,u=Te(e,t,s,o),p=d=>{const f=d.currentTarget;d.key==="Enter"?(d.preventDefault(),u.activate()):d.key===" "?(d.preventDefault(),e.local("select",{item:s.id,ctrl:d.ctrlKey||d.metaKey,shift:d.shiftKey,order:o}),e.dispatch("open",{item:s.id})):(d.key==="ArrowDown"||d.key==="ArrowUp")&&(d.preventDefault(),(d.key==="ArrowDown"?f.nextElementSibling:f.previousElementSibling)?.focus?.())};return l`
49 + `;if(t.id==="actions")return c`<td class=${i}>${Os(e,n,s,o)}</td>`;let a;try{a=t.render(s,n)}catch{a=""}return c`<td class=${i}>${a}</td>`}function Ws(e,t,s,n,o){const{state:i}=e,a=i.selected.includes(s.id),l=i.item===s.id,u=Oe(e,t,s,o),d=p=>{const f=p.currentTarget;p.key==="Enter"?(p.preventDefault(),u.activate()):p.key===" "?(p.preventDefault(),e.local("select",{item:s.id,ctrl:p.ctrlKey||p.metaKey,shift:p.shiftKey,order:o}),O(e,s.id)):(p.key==="ArrowDown"||p.key==="ArrowUp")&&(p.preventDefault(),(p.key==="ArrowDown"?f.nextElementSibling:f.previousElementSibling)?.focus?.())};return c`
50 50 <tr
51 - class="os-mywp__row ${c?"is-open":""} ${a?"is-selected":""}"
51 + class="os-mywp__row ${l?"is-open":""} ${a?"is-selected":""}"
52 52 data-item-id=${String(s.id)}
53 53 data-mywp-drag=${t.kind==="user"?"user":t.post_type}
54 54 role="row"
55 55 aria-selected=${a?"true":"false"}
@@ -60,13 +60,13 @@
60 60 @pointerdown=${u.press.pointerdown}
61 61 @pointermove=${u.press.pointermove}
62 62 @pointerup=${u.press.pointerup}
63 63 @pointercancel=${u.press.pointercancel}
64 - @keydown=${p}
64 + @keydown=${d}
65 65 >
66 - ${n.map(d=>$s(e,d,s,t,o))}
66 + ${n.map(p=>Fs(e,p,s,t,o))}
67 67 </tr>
68 - `}function ws(e,t,s){const n=k(e),o=de(t),i=ue(e,t,o),a=o.filter($=>!i.has($.id)),c=s.map($=>$.id),u=e.state.sort||"default",p=e.data.sortOptions??{},d=n.list.hasMore(),f=n.list.ghosts(e.data.list?.perPage??24),m=$=>{const y=at($,u);e.local("set-sort",{sort:y==="default"?"":y}),e.dispatch("sort")},h=$=>$.sort?u===$.sort.asc?"ascending":u===$.sort.desc?"descending":"none":"none",w=$=>{const y=["os-mywp__th",$.align==="end"?"os-mywp__th--end":"",`os-mywp__th--${$.id}`].filter(Boolean).join(" ");if($.id==="actions")return l`
68 + `}function Us(e,t,s){const n=k(e),o=we(t),i=ve(e,t,o),a=o.filter(g=>!i.has(g.id)),l=s.map(g=>g.id),u=e.state.sort||"default",d=e.data.sortOptions??{},p=n.list.hasMore(),f=n.list.ghosts(e.data.list?.perPage??24),m=g=>{const y=wt(g,u);e.local("set-sort",{sort:y==="default"?"":y}),e.dispatch("sort")},h=g=>g.sort?u===g.sort.asc?"ascending":u===g.sort.desc?"descending":"none":"none",$=g=>{const y=["os-mywp__th",g.align==="end"?"os-mywp__th--end":"",`os-mywp__th--${g.id}`].filter(Boolean).join(" ");if(g.id==="actions")return c`
69 69 <th class=${y} scope="col">
70 70 <os-button
71 71 variant="ghost"
72 72 class="os-mywp__row-action os-mywp__columns-btn"
@@ -72,33 +72,33 @@
72 72 class="os-mywp__row-action os-mywp__columns-btn"
73 73 title=${r("Choose columns")}
74 74 aria-label=${r("Choose columns")}
75 75 aria-haspopup="menu"
76 - @click=${M=>{const A=M.currentTarget.getBoundingClientRect();n.columnsMenu={x:A.left,y:A.bottom+2},e.repaint()}}
76 + @click=${S=>{const A=S.currentTarget.getBoundingClientRect();n.columnsMenu={x:A.left,y:A.bottom+2},e.repaint()}}
77 77 >
78 78 <span class="dashicons dashicons-screenoptions" aria-hidden="true"></span>
79 79 </os-button>
80 80 </th>
81 - `;if(!hs($,p))return l`<th class=${y} scope="col">${$.label}</th>`;const _=h($),S={ascending:"▲",descending:"▼"};return l`
82 - <th class=${y} scope="col" aria-sort=${_}>
81 + `;if(!Rs(g,d))return c`<th class=${y} scope="col">${g.label}</th>`;const v=h(g),M={ascending:"▲",descending:"▼"};return c`
82 + <th class=${y} scope="col" aria-sort=${v}>
83 83 <button
84 84 type="button"
85 - class="os-mywp__sort ${_!=="none"?"is-active":""}"
86 - @click=${()=>m($)}
85 + class="os-mywp__sort ${v!=="none"?"is-active":""}"
86 + @click=${()=>m(g)}
87 87 >
88 - <span>${$.label}</span>
89 - <span class="os-mywp__sort-arrow" aria-hidden="true">${S[_]??""}</span>
88 + <span>${g.label}</span>
89 + <span class="os-mywp__sort-arrow" aria-hidden="true">${M[v]??""}</span>
90 90 </button>
91 91 </th>
92 - `},v=$=>{$.preventDefault(),n.menu={x:$.clientX,y:$.clientY,item:null},e.repaint()},g=Me(($,y)=>{n.menu={x:$,y,item:null},e.repaint()},$=>!$.target?.closest("[data-item-id]"));return l`
92 + `},_=g=>{g.preventDefault(),n.menu={x:g.clientX,y:g.clientY,item:null},e.repaint()},w=Re((g,y)=>{n.menu={x:g,y,item:null},e.repaint()},g=>!g.target?.closest("[data-item-id]"));return c`
93 93 <div
94 94 class="os-mywp__canvas os-mywp__table-wrap"
95 95 data-mywp-list
96 - @contextmenu=${v}
97 - @pointerdown=${g.pointerdown}
98 - @pointermove=${g.pointermove}
99 - @pointerup=${g.pointerup}
100 - @pointercancel=${g.pointercancel}
96 + @contextmenu=${_}
97 + @pointerdown=${w.pointerdown}
98 + @pointermove=${w.pointermove}
99 + @pointerup=${w.pointerup}
100 + @pointercancel=${w.pointercancel}
101 101 >
102 102 <table
103 103 class="os-mywp__table"
104 104 role="grid"
@@ -105,16 +105,16 @@
105 105 aria-multiselectable="true"
106 106 aria-label=${t.label}
107 107 >
108 108 <colgroup>
109 - ${a.map($=>l`<col style=${$.width&&$.width!=="1fr"?`width:${$.width}`:""} />`)}
109 + ${a.map(g=>c`<col style=${g.width&&g.width!=="1fr"?`width:${g.width}`:""} />`)}
110 110 </colgroup>
111 111 <thead>
112 - <tr role="row">${a.map(w)}</tr>
112 + <tr role="row">${a.map($)}</tr>
113 113 </thead>
114 114 <tbody>
115 - ${s.map($=>ys(e,t,$,a,c))}
116 - ${Array.from({length:f},($,y)=>l`
115 + ${s.map(g=>Ws(e,t,g,a,l))}
116 + ${Array.from({length:f},(g,y)=>c`
117 117 <tr class="os-mywp__row os-mywp__row--ghost" data-ghost-index=${String(y)} aria-hidden="true">
118 118 <td colspan=${String(a.length)}><span class="os-mywp__ghost-line"></span></td>
119 119 </tr>
120 120 `)}
@@ -119,16 +119,16 @@
119 119 </tr>
120 120 `)}
121 121 </tbody>
122 122 </table>
123 - ${s.length===0&&f===0?l`<p class="os-mywp__table-empty">${e.state.query?r("Nothing matches the search."):r("Nothing here yet.")}</p>`:""}
124 - ${d?l`<div class="os-mywp__sentinel" data-mywp-sentinel></div>`:""}
123 + ${s.length===0&&f===0?c`<p class="os-mywp__table-empty">${e.state.query?r("Nothing matches the search."):r("Nothing here yet.")}</p>`:""}
124 + ${p?c`<div class="os-mywp__sentinel" data-mywp-sentinel></div>`:""}
125 125 </div>
126 - `}function _s(e,t){const s=k(e);if(!s.columnsMenu||!t)return"";const{x:n,y:o}=s.columnsMenu,i=de(t),a=ue(e,t,i),c=()=>{s.columnsMenu=null,e.repaint()},u=d=>{const f=String(d.detail?.id??"");if(f==="reset"){c(),e.dispatch("set-columns",{reset:!0});return}const m=new Set(a);m.has(f)?m.delete(f):m.add(f),e.dispatch("set-columns",{hidden:Array.from(m)})},p=i.filter(d=>!d.locked);return l`
126 + `}function qs(e,t){const s=k(e);if(!s.columnsMenu||!t)return"";const{x:n,y:o}=s.columnsMenu,i=we(t),a=ve(e,t,i),l=()=>{s.columnsMenu=null,e.repaint()},u=p=>{const f=String(p.detail?.id??"");if(f==="reset"){l(),e.dispatch("set-columns",{reset:!0});return}const m=new Set(a);m.has(f)?m.delete(f):m.add(f),e.dispatch("set-columns",{hidden:Array.from(m)})},d=i.filter(p=>!p.locked);return c`
127 127 <div
128 128 class="os-mywp__menu-backdrop"
129 - @click=${c}
130 - @contextmenu=${d=>{d.preventDefault(),c()}}
129 + @click=${l}
130 + @contextmenu=${p=>{p.preventDefault(),l()}}
131 131 ></div>
132 132 <os-context-menu
133 133 open
134 134 class="os-mywp__menu os-mywp__columns-menu"
@@ -135,38 +135,38 @@
135 135 style="position:fixed;left:${n}px;top:${o}px;visibility:hidden"
136 136 @os-context-menu-pick=${u}
137 137 >
138 138 <os-context-menu-option heading>${r("Columns")}</os-context-menu-option>
139 - ${p.map(d=>l`
140 - <os-context-menu-option id=${d.id} ?checked=${!a.has(d.id)}>
141 - ${d.label}
139 + ${d.map(p=>c`
140 + <os-context-menu-option id=${p.id} ?checked=${!a.has(p.id)}>
141 + ${p.label}
142 142 </os-context-menu-option>
143 143 `)}
144 144 <os-context-menu-option id="reset">${r("Reset columns")}</os-context-menu-option>
145 145 </os-context-menu>
146 - `}function vs(e){const t=e.state.sort||"default",s=e.data.sortOptions?.[t];return s?b(r("Sorted by %s"),s):""}function bs(e,t){const s=de(t),n=ue(e,t,s),o=s.filter(i=>n.has(i.id)).length;return o===0?"":b(B("%d column hidden","%d columns hidden",o),o)}function ks(e){const{data:t,state:s}=e,n=s.group,o=t.sections.filter(p=>n?p.group===n:!p.group),i=n?[]:t.groups.map(p=>({...p,count:t.sections.filter(d=>d.group===p.id).reduce((d,f)=>d+f.count,0)})),a=k(e),c=(p,d,f,m,h)=>l`
146 + `}function Bs(e){const t=e.state.sort||"default",s=e.data.sortOptions?.[t];return s?b(r("Sorted by %s"),s):""}function js(e,t){const s=we(t),n=ve(e,t,s),o=s.filter(i=>n.has(i.id)).length;return o===0?"":b(B("%d column hidden","%d columns hidden",o),o)}function Ks(e){const{data:t,state:s}=e,n=s.group,o=t.sections.filter(d=>n?d.group===n:!d.group),i=n?[]:t.groups.map(d=>({...d,count:t.sections.filter(p=>p.group===d.id).reduce((p,f)=>p+f.count,0)})),a=k(e),l=(d,p,f,m,h)=>c`
147 147 <button
148 148 type="button"
149 - class="os-mywp__tile ${a.folderSel===p?"is-selected":""}"
150 - aria-pressed=${a.folderSel===p?"true":"false"}
151 - @click=${()=>{if(ie()){a.folderSel=null,h();return}a.folderSel=p,e.repaint()}}
149 + class="os-mywp__tile ${a.folderSel===d?"is-selected":""}"
150 + aria-pressed=${a.folderSel===d?"true":"false"}
151 + @click=${()=>{if(pe()){a.folderSel=null,h();return}a.folderSel=d,e.repaint()}}
152 152 @dblclick=${()=>{a.folderSel=null,h()}}
153 - @keydown=${w=>{w.key==="Enter"&&(w.preventDefault(),a.folderSel=null,h())}}
153 + @keydown=${$=>{$.key==="Enter"&&($.preventDefault(),a.folderSel=null,h())}}
154 154 >
155 155 ${f}
156 - <span class="os-mywp__tile-label">${d} · ${m}</span>
156 + <span class="os-mywp__tile-label">${p} · ${m}</span>
157 157 </button>
158 - `,u=p=>p.kind==="agent"&&/^(https?:|data:)/.test(p.icon)?l`<img class="os-mywp__icon-img" src=${p.icon} alt="" width="48" height="48" />`:Ae(p.icon,"os-mywp__tile-icon");return l`
159 - ${n?l`<div
158 + `,u=d=>d.kind==="agent"&&/^(https?:|data:)/.test(d.icon)?c`<img class="os-mywp__icon-img" src=${d.icon} alt="" width="48" height="48" />`:Pe(d.icon,"os-mywp__tile-icon");return c`
159 + ${n?c`<div
160 160 class="os-my-wordpress__group-extras"
161 161 data-mywp-group-extras=${n}
162 162 os-preserve
163 163 ></div>`:""}
164 164 <div class="os-mywp__root" role="list">
165 - ${o.map(p=>c(`section:${p.id}`,p.label,u(p),p.count,()=>void e.dispatch("go",{group:n,section:p.id})))}
166 - ${i.map(p=>c(`group:${p.id}`,p.label,Ae(p.icon,"os-mywp__tile-icon"),p.count,()=>void e.dispatch("go",{group:p.id})))}
165 + ${o.map(d=>l(`section:${d.id}`,d.label,u(d),d.count,()=>void e.dispatch("go",{group:n,section:d.id})))}
166 + ${i.map(d=>l(`group:${d.id}`,d.label,Pe(d.icon,"os-mywp__tile-icon"),d.count,()=>void e.dispatch("go",{group:d.id})))}
167 167 </div>
168 - `}function Le(e,t,s,n){const{state:o}=e,i=o.selected.includes(s.id),a=o.item===s.id,c=Te(e,t,s,n);return l`
168 + `}function je(e,t,s,n){const{state:o}=e,i=o.selected.includes(s.id),a=o.item===s.id,l=Oe(e,t,s,n);return c`
169 169 <div
170 170 class="os-mywp__cell ${a?"is-open":""}"
171 171 data-item-id=${String(s.id)}
172 172 data-mywp-drag=${t.kind==="user"?"user":t.post_type}
@@ -171,15 +171,15 @@
171 171 data-item-id=${String(s.id)}
172 172 data-mywp-drag=${t.kind==="user"?"user":t.post_type}
173 173 role="option"
174 174 aria-selected=${i?"true":"false"}
175 - @click=${c.select}
176 - @dblclick=${c.activate}
177 - @contextmenu=${c.menu}
178 - @pointerdown=${c.press.pointerdown}
179 - @pointermove=${c.press.pointermove}
180 - @pointerup=${c.press.pointerup}
181 - @pointercancel=${c.press.pointercancel}
175 + @click=${l.select}
176 + @dblclick=${l.activate}
177 + @contextmenu=${l.menu}
178 + @pointerdown=${l.press.pointerdown}
179 + @pointermove=${l.press.pointermove}
180 + @pointerup=${l.press.pointerup}
181 + @pointercancel=${l.press.pointercancel}
182 182 >
183 183 <span class="os-mywp__tilebox">
184 184 <os-tile
185 185 kind="entry"
@@ -190,17 +190,17 @@
190 190 thumbnail=${s.thumb}
191 191 status=${s.status&&s.status!=="publish"&&t.kind==="post"?s.status:""}
192 192 ?selected=${i}
193 193 ></os-tile>
194 - ${s.lockedBy?l`<span class="os-mywp__lock" title=${b(r("%s is editing"),s.lockedBy)}>🔒</span>`:""}
194 + ${s.lockedBy?c`<span class="os-mywp__lock" title=${b(r("%s is editing"),s.lockedBy)}>🔒</span>`:""}
195 195 </span>
196 196 </div>
197 - `}function Ss(e,t,s){if(e.state.view==="list")return ws(e,t,s);if(s.length===0)return l`
197 + `}function zs(e,t,s){if(e.state.view==="list")return Us(e,t,s);if(s.length===0)return c`
198 198 <os-empty-state icon=${t.icon.startsWith("dashicons-")?t.icon:"dashicons-portfolio"}>
199 199 ${e.state.query?r("Nothing matches the search."):r("Nothing here yet.")}
200 200 </os-empty-state>
201 - `;const n=k(e),o=f=>{f.preventDefault(),n.menu={x:f.clientX,y:f.clientY,item:null},e.repaint()},i=Me((f,m)=>{n.menu={x:f,y:m,item:null},e.repaint()},f=>!f.target?.closest("[data-item-id]")),a=n.list.hasMore(),c=n.list.ghosts(e.data.list?.perPage??24),u=l`
202 - ${Array.from({length:c},(f,m)=>l`
201 + `;const n=k(e),o=f=>{f.preventDefault(),n.menu={x:f.clientX,y:f.clientY,item:null},e.repaint()},i=Re((f,m)=>{n.menu={x:f,y:m,item:null},e.repaint()},f=>!f.target?.closest("[data-item-id]")),a=n.list.hasMore(),l=n.list.ghosts(e.data.list?.perPage??24),u=c`
202 + ${Array.from({length:l},(f,m)=>c`
203 203 <div class="os-mywp__cell os-mywp__cell--ghost" data-ghost-index=${String(m)} aria-hidden="true">
204 204 <span class="os-mywp__ghost">
205 205 <span class="os-mywp__ghost-visual"></span>
206 206 <span class="os-mywp__ghost-label"></span>
@@ -206,9 +206,9 @@
206 206 <span class="os-mywp__ghost-label"></span>
207 207 </span>
208 208 </div>
209 209 `)}
210 - `,p=tt(T().hooks,t);if(p){const f=new Set(p.bands.map(g=>g.id)),m=new Map,h=[];for(const g of s){const $=p.assign(g);$!==null&&f.has($)?m.set($,[...m.get($)??[],g]):h.push(g)}const w=[...p.bands].sort((g,$)=>(g.order??0)-($.order??0)),v=[...w.flatMap(g=>m.get(g.id)??[]),...h].map(g=>g.id);return l`
210 + `,d=ct(T().hooks,t);if(d){const f=new Set(d.bands.map(w=>w.id)),m=new Map,h=[];for(const w of s){const g=d.assign(w);g!==null&&f.has(g)?m.set(g,[...m.get(g)??[],w]):h.push(w)}const $=[...d.bands].sort((w,g)=>(w.order??0)-(g.order??0)),_=[...$.flatMap(w=>m.get(w.id)??[]),...h].map(w=>w.id);return c`
211 211 <div
212 212 class="os-mywp__tiles os-mywp__canvas os-mywp__tiles--banded"
213 213 role="listbox"
214 214 aria-multiselectable="true"
@@ -217,26 +217,26 @@
217 217 @pointermove=${i.pointermove}
218 218 @pointerup=${i.pointerup}
219 219 @pointercancel=${i.pointercancel}
220 220 >
221 - ${w.map(g=>{const $=m.get(g.id)??[];return $.length===0&&!((g.count??0)>0)?"":l`
222 - <section class="os-mywp__band" data-band=${g.id}>
223 - <h3 class="os-mywp__band-head ${g.tone?`os-mywp__band-head--${g.tone}`:""}">
224 - <span>${g.label}</span>
225 - <span class="os-mywp__band-count">${$.length}</span>
221 + ${$.map(w=>{const g=m.get(w.id)??[];return g.length===0&&!((w.count??0)>0)?"":c`
222 + <section class="os-mywp__band" data-band=${w.id}>
223 + <h3 class="os-mywp__band-head ${w.tone?`os-mywp__band-head--${w.tone}`:""}">
224 + <span>${w.label}</span>
225 + <span class="os-mywp__band-count">${g.length}</span>
226 226 </h3>
227 227 <div class="os-mywp__band-grid" role="presentation">
228 - ${$.map(y=>Le(e,t,y,v))}
228 + ${g.map(y=>je(e,t,y,_))}
229 229 </div>
230 230 </section>
231 231 `})}
232 - ${h.length>0?l`<div class="os-mywp__band-grid" role="presentation">
233 - ${h.map(g=>Le(e,t,g,v))}
232 + ${h.length>0?c`<div class="os-mywp__band-grid" role="presentation">
233 + ${h.map(w=>je(e,t,w,_))}
234 234 </div>`:""}
235 - ${c>0?l`<div class="os-mywp__band-grid" role="presentation">${u}</div>`:""}
236 - ${a?l`<div class="os-mywp__sentinel" data-mywp-sentinel></div>`:""}
235 + ${l>0?c`<div class="os-mywp__band-grid" role="presentation">${u}</div>`:""}
236 + ${a?c`<div class="os-mywp__sentinel" data-mywp-sentinel></div>`:""}
237 237 </div>
238 - `}const d=s.map(f=>f.id);return l`
238 + `}const p=s.map(f=>f.id);return c`
239 239 <div
240 240 class="os-mywp__tiles os-mywp__canvas"
241 241 role="listbox"
242 242 aria-multiselectable="true"
@@ -245,13 +245,13 @@
245 245 @pointermove=${i.pointermove}
246 246 @pointerup=${i.pointerup}
247 247 @pointercancel=${i.pointercancel}
248 248 >
249 - ${s.map(f=>Le(e,t,f,d))}
249 + ${s.map(f=>je(e,t,f,p))}
250 250 ${u}
251 - ${a?l`<div class="os-mywp__sentinel" data-mywp-sentinel></div>`:""}
251 + ${a?c`<div class="os-mywp__sentinel" data-mywp-sentinel></div>`:""}
252 252 </div>
253 - `}function As(e,t){const s=k(e);if(!s.menu)return"";const{x:n,y:o,item:i}=s.menu,a=()=>{k(e).menu=null,e.repaint()},c=e.state.sort||"default";let u=[];i&&(u=e.state.selected.includes(i.id)&&e.state.selected.length>1?e.state.selected:[i.id]);const p=s.list.items();let d=[];if(i){const m=re(e.data.previewActions,V(t,i,"menu"),T().hooks);d=nt(t,i,m);const h=T().hooks?.applyFilters("os.my-wordpress.tile-context-menu",d,{entityId:t.id,kind:t.kind,item:i});Array.isArray(h)&&(d=st(d,h))}return l`
253 + `}function Hs(e,t){const s=k(e);if(!s.menu)return"";const{x:n,y:o,item:i}=s.menu,a=()=>{k(e).menu=null,e.repaint()},l=e.state.sort||"default";let u=[];i&&(u=e.state.selected.includes(i.id)&&e.state.selected.length>1?e.state.selected:[i.id]);const d=s.list.items();let p=[];if(i){const m=me(e.data.previewActions,ee(t,i,"menu"),T().hooks);p=pt(t,i,m);const h=T().hooks?.applyFilters("os.my-wordpress.tile-context-menu",p,{entityId:t.id,kind:t.kind,item:i});Array.isArray(h)&&(p=ut(p,h))}return c`
254 254 <div
255 255 class="os-mywp__menu-backdrop"
256 256 @click=${a}
257 257 @contextmenu=${m=>{m.preventDefault(),a()}}
@@ -259,11 +259,11 @@
259 259 <os-context-menu
260 260 open
261 261 class="os-mywp__menu"
262 262 style="position:fixed;left:${n}px;top:${o}px;visibility:hidden"
263 - @os-context-menu-pick=${m=>{const h=String(m.detail?.id??"");if(a(),h.startsWith("sort:")){e.local("set-sort",{sort:h.slice(5)}),e.dispatch("sort");return}if(h==="refresh"){e.dispatch("refresh");return}if(!i)return;const w=d.find(v=>v.id===h);if(w?.onSelect){w.onSelect();return}if(h==="open")t.kind==="post"&&!t.flat?e.dispatch("into",{item:i.id}):e.dispatch("open",{item:i.id});else if(h==="edit")t.kind==="user"?Q(i.id,{source:"my-wordpress-app/context-menu",fallback:()=>void e.dispatch("edit",{item:i.id})}):e.dispatch("edit",{item:i.id});else if(h==="quick-edit")k(e).quickEdit={ids:u,status:"",comments:"",author:"",sticky:"",categories:[],tags:[]},e.repaint();else if(h==="publish")e.dispatch("quick-edit",{items:u,status:"publish"});else if(h==="copy-link"||h==="copy-shortlink"||h==="copy-id"){const v=p.filter(g=>u.includes(g.id));h==="copy-id"?ds(e,v):Ee(e,v,h==="copy-link"?"link":"shortlink")}else if(h==="trash"){const v={message:u.length>1?b(r("Move %d items to the Trash?"),u.length):r("Move this to the Trash?"),label:r("Trash"),danger:!0};u.length>1?e.dispatch("bulk-trash",{},{confirm:v}):e.dispatch("trash",{item:i.id},{confirm:v})}else{const v=re(e.data.previewActions,V(t,i,"menu"),T().hooks).find(g=>g.id===h);v&&et(v,V(t,i,"menu"))}}}
263 + @os-context-menu-pick=${m=>{const h=String(m.detail?.id??"");if(a(),h.startsWith("sort:")){e.local("set-sort",{sort:h.slice(5)}),e.dispatch("sort");return}if(h==="refresh"){e.dispatch("refresh");return}if(!i)return;const $=p.find(_=>_.id===h);if($?.onSelect){$.onSelect();return}if(h==="open")t.kind==="post"&&!t.flat?e.dispatch("into",{item:i.id}):O(e,i.id);else if(h==="edit")t.kind==="user"?te(i.id,{source:"my-wordpress-app/context-menu",fallback:()=>void e.dispatch("edit",{item:i.id})}):e.dispatch("edit",{item:i.id});else if(h==="quick-edit")k(e).quickEdit={ids:u,status:"",comments:"",author:"",sticky:"",categories:[],tags:[]},e.repaint();else if(h==="publish")e.dispatch("quick-edit",{items:u,status:"publish"});else if(h==="copy-link"||h==="copy-shortlink"||h==="copy-id"){const _=d.filter(w=>u.includes(w.id));h==="copy-id"?Is(e,_):We(e,_,h==="copy-link"?"link":"shortlink")}else if(h==="trash")ht(e,t,d.filter(_=>u.includes(_.id)));else{const _=me(e.data.previewActions,ee(t,i,"menu"),T().hooks).find(w=>w.id===h);_&&dt(_,ee(t,i,"menu"))}}}
264 264 >
265 - ${i?d.map(m=>m.heading?l`<os-context-menu-option heading>${m.label}</os-context-menu-option>`:l`
265 + ${i?p.map(m=>m.heading?c`<os-context-menu-option heading>${m.label}</os-context-menu-option>`:c`
266 266 <os-context-menu-option
267 267 id=${m.id}
268 268 icon=${m.icon??""}
269 269 ?danger=${!!m.danger}
@@ -268,12 +268,12 @@
268 268 icon=${m.icon??""}
269 269 ?danger=${!!m.danger}
270 270 ?disabled=${!!m.disabled}
271 271 >${m.label}</os-context-menu-option>
272 - `):l`
272 + `):c`
273 273 <os-context-menu-option heading>${r("Sort by")}</os-context-menu-option>
274 - ${Object.entries(e.data.sortOptions).map(([m,h])=>l`
275 - <os-context-menu-option id=${"sort:"+m} ?checked=${m===c}>
274 + ${Object.entries(e.data.sortOptions).map(([m,h])=>c`
275 + <os-context-menu-option id=${"sort:"+m} ?checked=${m===l}>
276 276 ${h}
277 277 </os-context-menu-option>
278 278 `)}
279 279 <os-context-menu-option id="refresh" icon="dashicons-update">${r("Refresh")}</os-context-menu-option>
@@ -278,18 +278,18 @@
278 278 `)}
279 279 <os-context-menu-option id="refresh" icon="dashicons-update">${r("Refresh")}</os-context-menu-option>
280 280 `}
281 281 </os-context-menu>
282 - `}function Ms(e,t){const s=k(e),n=s.quickEdit;if(!n||!t)return"";const o=()=>{s.quickEdit=null,e.repaint()},i=()=>{const d={items:n.ids};n.status&&(d.status=n.status),n.comments&&(d.comments=n.comments),n.author&&(d.author=Number(n.author)),n.sticky&&(d.sticky=n.sticky),n.categories.length>0&&(d.categories=n.categories),n.tags.length>0&&(d.tags=n.tags.map(f=>f.label).join(", ")),o(),e.dispatch("quick-edit",d)},a=["",r("— No change —")],c=d=>f=>{n[d]=String(f.detail?.value??"")},u=(d,f,m)=>l`
282 + `}function Xs(e,t){const s=k(e),n=s.quickEdit;if(!n||!t)return"";const o=()=>{s.quickEdit=null,e.repaint()},i=()=>{const p={items:n.ids};n.status&&(p.status=n.status),n.comments&&(p.comments=n.comments),n.author&&(p.author=Number(n.author)),n.sticky&&(p.sticky=n.sticky),n.categories.length>0&&(p.categories=n.categories),n.tags.length>0&&(p.tags=n.tags.map(f=>f.label).join(", ")),o(),e.dispatch("quick-edit",p)},a=["",r("— No change —")],l=p=>f=>{n[p]=String(f.detail?.value??"")},u=(p,f,m)=>c`
283 283 <label class="os-mywp__qe-row">
284 - <span>${d}</span>
285 - <os-select value=${n[f]} @os-pick=${c(f)}>
286 - ${m.map(([h,w])=>l`
287 - <os-option value=${h} ?selected=${h===n[f]}>${w}</os-option>
284 + <span>${p}</span>
285 + <os-select value=${n[f]} @os-pick=${l(f)}>
286 + ${m.map(([h,$])=>c`
287 + <os-option value=${h} ?selected=${h===n[f]}>${$}</os-option>
288 288 `)}
289 289 </os-select>
290 290 </label>
291 - `,p=t.post_type==="post";return l`
291 + `,d=t.post_type==="post";return c`
292 292 <os-modal
293 293 open
294 294 size="sm"
295 295 title=${b(r("Edit %1$d %2$s"),n.ids.length,t.label)}
@@ -299,22 +299,22 @@
299 299 ${r("Only the fields you change are applied. Categories and tags are added to what each entry already has.")}
300 300 </os-notice>
301 301 <div class="os-mywp__qe">
302 302 ${u(r("Status"),"status",[a,["publish",r("Published")],["pending",r("Pending Review")],["draft",r("Draft")],["private",r("Private")]])}
303 - ${e.data.authors.length>0?u(r("Author"),"author",[a,...e.data.authors.map(d=>[String(d.id),d.name])]):""}
303 + ${e.data.authors.length>0?u(r("Author"),"author",[a,...e.data.authors.map(p=>[String(p.id),p.name])]):""}
304 304 ${u(r("Comments"),"comments",[a,["open",r("Allow")],["closed",r("Do not allow")]])}
305 - ${p?u(r("Sticky"),"sticky",[a,["sticky",r("Sticky")],["not-sticky",r("Not sticky")]]):""}
306 - ${p&&e.data.categories.length>0?l`
305 + ${d?u(r("Sticky"),"sticky",[a,["sticky",r("Sticky")],["not-sticky",r("Not sticky")]]):""}
306 + ${d&&e.data.categories.length>0?c`
307 307 <div class="os-mywp__qe-row">
308 308 <span>${r("Add categories")}</span>
309 309 <os-category-picker
310 310 .items=${e.data.categories}
311 311 .value=${n.categories}
312 - @os-categories-change=${d=>{n.categories=[...d.detail?.value??[]],e.repaint()}}
312 + @os-categories-change=${p=>{n.categories=[...p.detail?.value??[]],e.repaint()}}
313 313 ></os-category-picker>
314 314 </div>
315 315 `:""}
316 - ${p?l`
316 + ${d?c`
317 317 <div class="os-mywp__qe-row">
318 318 <span>${r("Add tags")}</span>
319 319 <os-tag-input
320 320 creatable
@@ -320,11 +320,11 @@
320 320 creatable
321 321 placeholder=${r("Add tags…")}
322 322 .value=${n.tags}
323 323 .suggestions=${[]}
324 - @os-tag-suggest=${d=>{const f=(d.detail?.query??"").toLowerCase();d.target.suggestions=e.data.tags.filter(m=>m.name.toLowerCase().includes(f)).map(m=>({id:m.id,label:m.name}))}}
325 - @os-tag-add=${d=>{const f=d.detail?.tag;f&&!n.tags.some(m=>m.label===f.label)&&(n.tags=[...n.tags,f]),e.repaint()}}
326 - @os-tag-remove=${d=>{const f=d.detail?.tag;f&&(n.tags=n.tags.filter(m=>m.label!==f.label)),e.repaint()}}
324 + @os-tag-suggest=${p=>{const f=(p.detail?.query??"").toLowerCase();p.target.suggestions=e.data.tags.filter(m=>m.name.toLowerCase().includes(f)).map(m=>({id:m.id,label:m.name}))}}
325 + @os-tag-add=${p=>{const f=p.detail?.tag;f&&!n.tags.some(m=>m.label===f.label)&&(n.tags=[...n.tags,f]),e.repaint()}}
326 + @os-tag-remove=${p=>{const f=p.detail?.tag;f&&(n.tags=n.tags.filter(m=>m.label!==f.label)),e.repaint()}}
327 327 ></os-tag-input>
328 328 </div>
329 329 `:""}
330 330 </div>
@@ -332,51 +332,63 @@
332 332 <os-button variant="ghost" @click=${o}>${r("Cancel")}</os-button>
333 333 <os-button variant="primary" @click=${i}>${r("Update")}</os-button>
334 334 </div>
335 335 </os-modal>
336 - `}function Ts(e){const t=k(e),s=e.data.detail;return!t.zoom||!s?.full?"":l`
336 + `}function Ys(e){const t=k(e),s=e.data.detail;return!t.zoom||!s?.full?"":c`
337 337 <div class="os-mywp__zoom" @click=${()=>{t.zoom=!1,e.repaint()}}>
338 338 <img src=${s.full} alt=${s.title} />
339 339 </div>
340 - `}const Cs=["bio","stats","activity","milestones","recent","terms"];function Es(e,t){if(e.kind!=="user")return null;const s=T().hooks?.applyFilters("os.my-wordpress.user-dossier-sections",Cs,{entityId:t.id,kind:t.kind,userId:e.id});return Array.isArray(s)?new Set(s):null}function Is(e,t){return t?e.facts.filter(s=>!s[2]||t.has(s[2])):e.facts}function Ns(e,t,s){const n=t.kind==="user"?t.stats:null;if(!n)return"";const o=d=>!s||s.has(d),i=n.counts?.posts??{},a=n.counts?.pages??{},c=d=>b(r("%d published"),d.publish??0),u=[];n.profile?.registered&&u.push([r("Member since"),I(n.profile.registered,"month")]),n.milestones?.firstPublished&&u.push([r("First published"),I(n.milestones.firstPublished,"month")]),n.milestones?.lastPublished&&u.push([r("Last published"),I(n.milestones.lastPublished,"month")]);const p=n.topTerms??[];return l`
341 - ${o("stats")?l`<div class="os-mywp__stats">
342 - ${U(i.total??0,r("Posts"),c(i))}
343 - ${U(a.total??0,r("Pages"))}
344 - ${U(n.counts?.commentsReceived??0,r("Comments received"))}
345 - ${U(n.counts?.commentsLeft??0,r("Comments left"))}
340 + `}const Gs=["bio","stats","activity","milestones","recent","terms"];function Vs(e,t){if(e.kind!=="user")return null;const s=T().hooks?.applyFilters("os.my-wordpress.user-dossier-sections",Gs,{entityId:t.id,kind:t.kind,userId:e.id});return Array.isArray(s)?new Set(s):null}function Qs(e,t){return t?e.facts.filter(s=>!s[2]||t.has(s[2])):e.facts}function Js(e,t,s){const n=t.kind==="user"?t.stats:null;if(!n)return"";const o=p=>!s||s.has(p),i=n.counts?.posts??{},a=n.counts?.pages??{},l=p=>b(r("%d published"),p.publish??0),u=[];n.profile?.registered&&u.push([r("Member since"),I(n.profile.registered,"month")]),n.milestones?.firstPublished&&u.push([r("First published"),I(n.milestones.firstPublished,"month")]),n.milestones?.lastPublished&&u.push([r("Last published"),I(n.milestones.lastPublished,"month")]);const d=n.topTerms??[];return c`
341 + ${o("stats")?c`<div class="os-mywp__stats">
342 + ${j(i.total??0,r("Posts"),l(i))}
343 + ${j(a.total??0,r("Pages"))}
344 + ${j(n.counts?.commentsReceived??0,r("Comments received"))}
345 + ${j(n.counts?.commentsLeft??0,r("Comments left"))}
346 346 </div>`:""}
347 - ${o("activity")?Pe(n.activity??[]):""}
348 - ${o("milestones")&&u.length>0?me(u):""}
349 - ${o("recent")?Re(e,n.recent??[]):""}
350 - ${o("terms")&&p.length>0?l`
347 + ${o("activity")?Ke(n.activity??[]):""}
348 + ${o("milestones")&&u.length>0?ke(u):""}
349 + ${o("recent")?ze(e,n.recent??[]):""}
350 + ${o("terms")&&d.length>0?c`
351 351 <h3 class="os-mywp__pane-h">${r("Top categories & tags")}</h3>
352 352 <div class="os-mywp__chips">
353 - ${p.map(d=>l`<span class="os-mywp__chip os-mywp__chip--static">${d.name} · ${d.count}</span>`)}
353 + ${d.map(p=>c`<span class="os-mywp__chip os-mywp__chip--static">${p.name} · ${p.count}</span>`)}
354 354 </div>
355 355 `:""}
356 - `}function Ds(e,t,s,n){const o=[{id:"footprint",label:r("View activity footprint"),title:r("Open the full activity footprint surface for this user."),variant:"primary",onSelect:()=>void e.dispatch("footprint",{user:s.id,name:s.title})}];s.canEdit&&o.push({id:"open-profile",label:r("Edit profile"),variant:"secondary",onSelect:()=>Q(s.id,{source:"my-wordpress-app/user-pane",fallback:()=>void e.dispatch("edit",{item:s.id})})});const i=T().hooks?.applyFilters("os.my-wordpress.user-preview-actions",o,{entityId:t.id,kind:t.kind,item:{...n??{},...s}});return(Array.isArray(i)?i:o).filter(c=>!!c&&typeof c.onSelect=="function")}function fe(e,t){return l`<div
356 + `}function Zs(e,t,s,n){const o=[{id:"footprint",label:r("View activity footprint"),title:r("Open the full activity footprint surface for this user."),variant:"primary",onSelect:()=>void e.dispatch("footprint",{user:s.id,name:s.title})}];s.canEdit&&o.push({id:"open-profile",label:r("Edit profile"),variant:"secondary",onSelect:()=>te(s.id,{source:"my-wordpress-app/user-pane",fallback:()=>void e.dispatch("edit",{item:s.id})})});const i=T().hooks?.applyFilters("os.my-wordpress.user-preview-actions",o,{entityId:t.id,kind:t.kind,item:{...n??{},...s}});return(Array.isArray(i)?i:o).filter(l=>!!l&&typeof l.onSelect=="function")}function vt(e,t){return c`
357 + <div class="os-mywp__split ${t?"":"os-mywp__split--solo"}">
358 + <div class="os-mywp__list-pane">${e}</div>
359 + ${t?c`<aside class="os-mywp__detail-pane">${t}</aside>`:""}
360 + </div>
361 + `}function be(e,t){return c`<div
357 362 class="os-my-wordpress__article-slot os-my-wordpress__article-slot--${e}"
358 363 data-mywp-slot=${e}
359 364 data-mywp-extras-item=${String(t)}
360 365 os-preserve
361 - ></div>`}function lt(e,t){const{data:s}=e,n=s.detail;if(!n)return l`<os-empty-state>${r("This item no longer exists.")}</os-empty-state>`;const o=(s.list?.items??[]).find(f=>f.id===n.id),i=o?re(s.previewActions,V(t,o,"pane"),T().hooks):[],a=Es(n,t),c=Is(n,a),u=n.kind==="user"?n.stats?.profile?.roleLabels?.[0]??"":"",p=n.kind==="user"?n.stats?.profile?.link??"":"";let d="";return n.kind==="user"?d=Ds(e,t,n,o??null).map(f=>l`
366 + ></div>`}function _t(e,t){const{data:s}=e,n=mt(e);if(!n){const f=k(e).list.items().find(m=>m.id===e.state.item);return c`<article class="os-mywp__detail" aria-busy=${k(e).previewLoading?"true":"false"}>
367 + <os-button variant="ghost" class="os-mywp__pane-close" aria-label=${r("Close details")} @click=${()=>O(e,0)}>✕</os-button>
368 + ${f?.thumb?c`<img class="os-mywp__hero" src=${f.thumb} alt=${f.title}/>`:""}
369 + <h2 class="os-mywp__detail-title">${f?.title??""}</h2>
370 + <p>${f?.subtitle??""}</p>
371 + <p>${f?.excerpt??""}</p>
372 + <p role="status">${Ss(e)}</p>
373 + </article>`}const o=k(e).list.items().find(f=>f.id===n.id)??(s.list?.items??[]).find(f=>f.id===n.id),i=o?me(s.previewActions,ee(t,o,"pane"),T().hooks):[],a=Vs(n,t),l=Qs(n,a),u=n.kind==="user"?n.stats?.profile?.roleLabels?.[0]??"":"",d=n.kind==="user"?n.stats?.profile?.link??"":"";let p="";return n.kind==="user"?p=Zs(e,t,n,o??null).map(f=>c`
362 374 <os-button
363 375 variant=${f.variant??"secondary"}
364 376 title=${f.title??""}
365 377 @click=${()=>f.onSelect()}
366 378 >${f.label}</os-button>
367 - `):n.canEdit&&(d=l`<os-button variant="primary" @click=${()=>void e.dispatch("edit",{item:n.id})}>
379 + `):n.canEdit&&(p=c`<os-button variant="primary" @click=${()=>void e.dispatch("edit",{item:n.id})}>
368 380 ${r("Open in editor")}
369 - </os-button>`),l`
381 + </os-button>`),c`
370 382 <article class="os-mywp__detail">
371 383 <os-button
372 384 variant="ghost"
373 385 class="os-mywp__pane-close"
374 386 aria-label=${r("Close details")}
375 - @click=${()=>void e.dispatch("open",{item:0})}
387 + @click=${()=>O(e,0)}
376 388 >✕</os-button>
377 - ${n.avatar?l`<os-avatar src=${n.avatar} name=${n.title} size="xl"></os-avatar>`:""}
378 - ${n.image?l`<img
389 + ${n.avatar?c`<os-avatar src=${n.avatar} name=${n.title} size="xl"></os-avatar>`:""}
390 + ${n.image?c`<img
379 391 class="os-mywp__hero ${n.kind==="media"?"is-zoomable":""}"
380 392 src=${n.image}
381 393 alt=${n.title}
382 394 @click=${()=>{n.kind==="media"&&(k(e).zoom=!0,e.repaint())}}
@@ -381,50 +393,46 @@
381 393 alt=${n.title}
382 394 @click=${()=>{n.kind==="media"&&(k(e).zoom=!0,e.repaint())}}
383 395 />`:""}
384 396 <h2 class="os-mywp__detail-title">${n.title}</h2>
385 - ${u||p?l`<p class="os-mywp__user-meta">
386 - ${u?l`<os-badge no-dot>${u.toUpperCase()}</os-badge>`:""}
387 - ${p?l`<a class="os-mywp__crumb-link" href=${p} target="_blank" rel="noreferrer">${r("Author archive")}</a>`:""}
397 + ${u||d?c`<p class="os-mywp__user-meta">
398 + ${u?c`<os-badge no-dot>${u.toUpperCase()}</os-badge>`:""}
399 + ${d?c`<a class="os-mywp__crumb-link" href=${d} target="_blank" rel="noreferrer">${r("Author archive")}</a>`:""}
388 400 </p>`:""}
389 - ${fe("header",n.id)}
390 - ${n.lockedBy?l`<os-notice tone="warning" not-dismissible>${b(r("%s is editing this right now."),n.lockedBy)}</os-notice>`:""}
391 - ${me(c)}
392 - ${ct(n.usedIn)}
393 - ${n.content!==void 0?l`
401 + ${be("header",n.id)}
402 + ${n.lockedBy?c`<os-notice tone="warning" not-dismissible>${b(r("%s is editing this right now."),n.lockedBy)}</os-notice>`:""}
403 + ${ke(l)}
404 + ${bt(n.usedIn)}
405 + ${n.content!==void 0?c`
394 406 <h3 class="os-mywp__pane-h">${r("Preview")}</h3>
395 407 <div class="os-mywp__content" data-mywp-content="detail" os-preserve></div>
396 408 `:""}
397 - ${fe("meta",n.id)}
398 - ${Ns(e,n,a)}
409 + ${be("meta",n.id)}
410 + ${Js(e,n,a)}
399 411 <div class="os-mywp__actions">
400 - ${n.kind==="post"&&!t.flat?l`<os-button
412 + ${n.kind==="post"&&!t.flat?c`<os-button
401 413 variant="secondary"
402 414 title=${r("See author, comments, categories, tags, attached media, and revisions for this entry.")}
403 415 @click=${()=>void e.dispatch("into",{item:n.id})}
404 416 >${r("Explore details")}</os-button>`:""}
405 - ${d}
406 - ${i.map(f=>l`
407 - <os-button variant="secondary" @click=${()=>o&&et(f,V(t,o,"pane"))}>
417 + ${p}
418 + ${i.map(f=>c`
419 + <os-button variant="secondary" @click=${()=>o&&dt(f,ee(t,o,"pane"))}>
408 420 ${f.label}
409 421 </os-button>
410 422 `)}
411 - ${n.kind==="post"&&n.canDelete?l`<os-button
423 + ${n.kind==="post"&&n.canDelete?c`<os-button
412 424 variant="danger"
413 - os-action="trash"
414 - os-arg-item=${String(n.id)}
415 - os-confirm=${r("Move this to the Trash?")}
416 - os-confirm-label=${r("Trash")}
417 - os-confirm-danger
425 + @click=${()=>o&&void ht(e,t,[o])}
418 426 >${r("Trash")}</os-button>`:""}
419 427 </div>
420 - ${fe("footer",n.id)}
428 + ${be("footer",n.id)}
421 429 </article>
422 - `}function Ls(e){const t=e.data.folder;return t?l`
430 + `}function xs(e){const t=e.data.folder;return t?c`
423 431 <div class="os-mywp__split">
424 432 <div class="os-mywp__list-pane">
425 433 <div class="os-mywp__tiles" role="list">
426 - ${t.folders.map(s=>l`
434 + ${t.folders.map(s=>c`
427 435 <div class="os-mywp__cell ${s.disabled?"is-disabled":""}" role="listitem">
428 436 <span class="os-mywp__tilebox">
429 437 <os-tile
430 438 kind="folder"
@@ -432,9 +440,9 @@
432 440 ref=${s.relation}
433 441 label=${`${s.label} · ${s.count}`}
434 442 icon=${s.icon}
435 443 ?selected=${k(e).folderSel===`relation:${s.relation}`}
436 - @click=${()=>{if(ie()){s.disabled||(k(e).folderSel=null,e.dispatch("relation",{relation:s.relation}));return}k(e).folderSel=`relation:${s.relation}`,e.repaint()}}
444 + @click=${()=>{if(pe()){s.disabled||(k(e).folderSel=null,e.dispatch("relation",{relation:s.relation}));return}k(e).folderSel=`relation:${s.relation}`,e.repaint()}}
437 445 @dblclick=${()=>{s.disabled||(k(e).folderSel=null,e.dispatch("relation",{relation:s.relation}))}}
438 446 ></os-tile>
439 447 </span>
440 448 </div>
@@ -444,16 +452,16 @@
444 452 <aside class="os-mywp__detail-pane">
445 453 <article class="os-mywp__detail">
446 454 <h2 class="os-mywp__detail-title">${t.title}</h2>
447 455 <div class="os-mywp__content" data-mywp-content="folder" os-preserve></div>
448 - ${fe("meta",t.id)}
456 + ${be("meta",t.id)}
449 457 </article>
450 458 </aside>
451 459 </div>
452 - `:l`<os-empty-state>${r("This item no longer exists.")}</os-empty-state>`}function U(e,t,s=""){return l`<os-stat value=${String(e)} label=${t} caption=${s}></os-stat>`}function Pe(e){const t=new Map(e.map(i=>[i.ym,i.count])),s=[],n=new Date;n.setDate(1),n.setMonth(n.getMonth()-11);for(let i=0;i<12;i++){const a=`${n.getFullYear()}-${String(n.getMonth()+1).padStart(2,"0")}`;s.push({ym:a,label:n.toLocaleDateString(void 0,{month:"short"}),count:t.get(a)??0}),n.setMonth(n.getMonth()+1)}const o=Math.max(1,...s.map(i=>i.count));return l`
460 + `:c`<os-empty-state>${r("This item no longer exists.")}</os-empty-state>`}function j(e,t,s=""){return c`<os-stat value=${String(e)} label=${t} caption=${s}></os-stat>`}function Ke(e){const t=new Map(e.map(i=>[i.ym,i.count])),s=[],n=new Date;n.setDate(1),n.setMonth(n.getMonth()-11);for(let i=0;i<12;i++){const a=`${n.getFullYear()}-${String(n.getMonth()+1).padStart(2,"0")}`;s.push({ym:a,label:n.toLocaleDateString(void 0,{month:"short"}),count:t.get(a)??0}),n.setMonth(n.getMonth()+1)}const o=Math.max(1,...s.map(i=>i.count));return c`
453 461 <h3 class="os-mywp__pane-h">${r("Activity (last 12 months)")}</h3>
454 462 <div class="os-mywp__activity" role="img" aria-label=${r("Posts per month")}>
455 - ${s.map(i=>l`
463 + ${s.map(i=>c`
456 464 <div class="os-mywp__activity-col" title="${i.label} · ${i.count}">
457 465 <span class="os-mywp__activity-bar" style="block-size:${Math.round(i.count/o*100)}%"></span>
458 466 <span class="os-mywp__activity-label">${i.label}</span>
459 467 </div>
@@ -458,12 +466,12 @@
458 466 <span class="os-mywp__activity-label">${i.label}</span>
459 467 </div>
460 468 `)}
461 469 </div>
462 - `}function Re(e,t){return t.length===0?"":l`
470 + `}function ze(e,t){return t.length===0?"":c`
463 471 <h3 class="os-mywp__pane-h">${r("Recent posts")}</h3>
464 472 <div class="os-mywp__recent">
465 - ${t.slice(0,6).map(s=>l`
473 + ${t.slice(0,6).map(s=>c`
466 474 <button
467 475 type="button"
468 476 class="os-mywp__recent-row"
469 477 @click=${()=>void e.dispatch("sub-open-post",{post:s.id})}
@@ -472,26 +480,26 @@
472 480 <span class="os-mywp__subtitle">${new Date(s.date).toLocaleString()}${s.status?` · ${s.status}`:""}</span>
473 481 </button>
474 482 `)}
475 483 </div>
476 - `}function me(e){return l`
477 - <dl class="os-mywp__facts">
478 - ${e.map(([t,s])=>l`
479 - <div class="os-mywp__fact"><dt>${t}</dt><dd>${s}</dd></div>
484 + `}function ke(e){return c`
485 + <os-facts>
486 + ${e.map(([t,s])=>c`
487 + <os-fact label=${t}>${s}</os-fact>
480 488 `)}
481 - </dl>
482 - `}function ct(e){return e?l`
489 + </os-facts>
490 + `}function bt(e){return e?c`
483 491 <h3 class="os-mywp__pane-h">${r("Used in")}</h3>
484 - ${e.length>0?l`<ul class="os-mywp__used-in">
485 - ${e.map(t=>l`<li>${t.title} <span class="os-mywp__subtitle">${t.usedAs}</span></li>`)}
486 - </ul>`:l`<p class="os-mywp__subtitle">${r("Not used anywhere yet.")}</p>`}
487 - `:""}function dt(e){return l`
488 - ${e.avatar?l`<os-avatar src=${e.avatar} name=${e.title} size="xl"></os-avatar>`:""}
489 - ${e.image?l`<img class="os-mywp__hero" src=${e.image} alt=${e.title} />`:""}
492 + ${e.length>0?c`<ul class="os-mywp__used-in">
493 + ${e.map(t=>c`<li>${t.title} <span class="os-mywp__subtitle">${t.usedAs}</span></li>`)}
494 + </ul>`:c`<p class="os-mywp__subtitle">${r("Not used anywhere yet.")}</p>`}
495 + `:""}function kt(e){return c`
496 + ${e.avatar?c`<os-avatar src=${e.avatar} name=${e.title} size="xl"></os-avatar>`:""}
497 + ${e.image?c`<img class="os-mywp__hero" src=${e.image} alt=${e.title} />`:""}
490 498 <h2 class="os-mywp__detail-title">${e.title}</h2>
491 - ${me(e.facts)}
492 - ${ct(e.usedIn)}
493 - `}function Ps(e){const t=e.data.subDetail;if(!t)return l`<p class="os-mywp__pane-empty">${r("Select an entry to preview it here.")}</p>`;if(t.kind==="term"){const s=t.stats,n=s.counts?.posts??{},o=n.publish??0;return l`
499 + ${ke(e.facts)}
500 + ${bt(e.usedIn)}
501 + `}function en(e){const t=e.data.subDetail;if(!t)return null;if(t.kind==="term"){const s=t.stats,n=s.counts?.posts??{},o=n.publish??0;return c`
494 502 <article class="os-mywp__detail">
495 503 <header class="os-mywp__term-head">
496 504 <span class="os-mywp__term-swatch" aria-hidden="true"></span>
497 505 <div>
@@ -496,22 +504,22 @@
496 504 <span class="os-mywp__term-swatch" aria-hidden="true"></span>
497 505 <div>
498 506 <h2 class="os-mywp__detail-title">${s.profile?.name??""}</h2>
499 507 <os-badge no-dot>${(s.profile?.taxonomyLabel??"").toUpperCase()}</os-badge>
500 - ${s.profile?.link?l`<a class="os-mywp__crumb-link" href=${s.profile.link} target="_blank" rel="noreferrer">${r("View archive")}</a>`:""}
508 + ${s.profile?.link?c`<a class="os-mywp__crumb-link" href=${s.profile.link} target="_blank" rel="noreferrer">${r("View archive")}</a>`:""}
501 509 </div>
502 510 </header>
503 511 <div class="os-mywp__stats">
504 - ${U(n.total??0,r("Posts"),b(r("%d published"),o))}
505 - ${U(s.counts?.commentsReceived??0,r("Comments"))}
506 - ${U(s.counts?.distinctAuthors??0,r("Authors"))}
512 + ${j(n.total??0,r("Posts"),b(r("%d published"),o))}
513 + ${j(s.counts?.commentsReceived??0,r("Comments"))}
514 + ${j(s.counts?.distinctAuthors??0,r("Authors"))}
507 515 </div>
508 - ${Pe(s.activity??[])}
509 - ${me([...s.milestones?.firstPosted?[[r("First post"),I(s.milestones.firstPosted,"month")]]:[],...s.milestones?.lastPosted?[[r("Last post"),I(s.milestones.lastPosted,"month")]]:[]])}
510 - ${(s.topAuthors??[]).length>0?l`
516 + ${Ke(s.activity??[])}
517 + ${ke([...s.milestones?.firstPosted?[[r("First post"),I(s.milestones.firstPosted,"month")]]:[],...s.milestones?.lastPosted?[[r("Last post"),I(s.milestones.lastPosted,"month")]]:[]])}
518 + ${(s.topAuthors??[]).length>0?c`
511 519 <h3 class="os-mywp__pane-h">${r("Top contributors")}</h3>
512 520 <div class="os-mywp__people">
513 - ${(s.topAuthors??[]).map(i=>l`
521 + ${(s.topAuthors??[]).map(i=>c`
514 522 <div class="os-mywp__person">
515 523 <os-avatar src=${i.userAvatarUrl} name=${i.userName} size="sm"></os-avatar>
516 524 <span class="os-mywp__person-name">${i.userName}</span>
517 525 <span class="os-mywp__subtitle">${b(B("%d post","%d posts",i.count),i.count)}</span>
@@ -518,12 +526,12 @@
518 526 </div>
519 527 `)}
520 528 </div>
521 529 `:""}
522 - ${(s.coTerms??[]).length>0?l`
530 + ${(s.coTerms??[]).length>0?c`
523 531 <h3 class="os-mywp__pane-h">${r("Often paired with")}</h3>
524 532 <div class="os-mywp__chips">
525 - ${(s.coTerms??[]).map(i=>l`
533 + ${(s.coTerms??[]).map(i=>c`
526 534 <button
527 535 type="button"
528 536 class="os-mywp__chip"
529 537 @click=${()=>void e.dispatch("open",{item:i.id})}
@@ -530,26 +538,26 @@
530 538 >${i.name} · ${i.count}</button>
531 539 `)}
532 540 </div>
533 541 `:""}
534 - ${Re(e,s.recent??[])}
542 + ${ze(e,s.recent??[])}
535 543 </article>
536 - `}if(t.kind==="user")return l`
544 + `}if(t.kind==="user")return c`
537 545 <article class="os-mywp__detail">
538 - ${dt(t.detail)}
539 - ${Pe(t.stats?.activity??[])}
540 - ${Re(e,t.stats?.recent??[])}
546 + ${kt(t.detail)}
547 + ${Ke(t.stats?.activity??[])}
548 + ${ze(e,t.stats?.recent??[])}
541 549 </article>
542 - `;if(t.kind==="comment"){const s=t.stats;return l`
550 + `;if(t.kind==="comment"){const s=t.stats;return c`
543 551 <article class="os-mywp__detail">
544 552 <h2 class="os-mywp__detail-title">${s.author?.name??r("Comment")}</h2>
545 - ${s.comment?.date?l`<p class="os-mywp__subtitle">${new Date(String(s.comment.date)).toLocaleString()}${s.comment?.status?` · ${s.comment.status}`:""}</p>`:""}
553 + ${s.comment?.date?c`<p class="os-mywp__subtitle">${new Date(String(s.comment.date)).toLocaleString()}${s.comment?.status?` · ${s.comment.status}`:""}</p>`:""}
546 554 <div class="os-mywp__content" data-mywp-content="sub" os-preserve></div>
547 - ${s.post?.id?l`<os-button variant="secondary" @click=${()=>void e.dispatch("sub-open-post",{post:s.post?.id})}>
555 + ${s.post?.id?c`<os-button variant="secondary" @click=${()=>void e.dispatch("sub-open-post",{post:s.post?.id})}>
548 556 ${r("Open the post")}
549 557 </os-button>`:""}
550 558 </article>
551 - `}return t.kind==="media"?l`<article class="os-mywp__detail">${dt(t.detail)}</article>`:l`
559 + `}return t.kind==="media"?c`<article class="os-mywp__detail">${kt(t.detail)}</article>`:c`
552 560 <article class="os-mywp__detail">
553 561 <h2 class="os-mywp__detail-title">${t.title}</h2>
554 562 <p class="os-mywp__subtitle">${t.author}${t.date?` · ${t.date}`:""}</p>
555 563 <h3 class="os-mywp__pane-h">${r("Preview")}</h3>
@@ -554,14 +562,12 @@
554 562 <p class="os-mywp__subtitle">${t.author}${t.date?` · ${t.date}`:""}</p>
555 563 <h3 class="os-mywp__pane-h">${r("Preview")}</h3>
556 564 <div class="os-mywp__content" data-mywp-content="sub" os-preserve></div>
557 565 </article>
558 - `}function Rs(e){const t=e.data.sub;return t?l`
559 - <div class="os-mywp__split">
560 - <div class="os-mywp__list-pane">
561 - ${t.rows.length===0?l`<os-empty-state>${r("Nothing here yet.")}</os-empty-state>`:l`
566 + `}function tn(e){const t=e.data.sub;return t?vt(c`
567 + ${t.rows.length===0?c`<os-empty-state>${r("Nothing here yet.")}</os-empty-state>`:c`
562 568 <div class="os-mywp__tiles" role="list">
563 - ${t.rows.map(s=>l`
569 + ${t.rows.map(s=>c`
564 570 <div
565 571 class="os-mywp__cell ${e.state.item===s.id?"is-open":""}"
566 572 role="listitem"
567 573 title=${s.subtitle}
@@ -574,9 +580,9 @@
574 580 label=${s.title}
575 581 icon=${s.thumb?"":s.icon??"dashicons-media-default"}
576 582 thumbnail=${s.thumb??""}
577 583 ?selected=${e.state.item===s.id}
578 - @click=${()=>{if(ie()&&s.editUrl){e.dispatch("sub-open",{row:s.id});return}e.dispatch("open",{item:s.id})}}
584 + @click=${()=>{if(pe()&&s.editUrl){e.dispatch("sub-open",{row:s.id});return}e.dispatch("open",{item:s.id})}}
579 585 @dblclick=${()=>s.editUrl&&void e.dispatch("sub-open",{row:s.id})}
580 586 ></os-tile>
581 587 </span>
582 588 </div>
@@ -582,65 +588,62 @@
582 588 </div>
583 589 `)}
584 590 </div>
585 591 `}
586 - </div>
587 - <aside class="os-mywp__detail-pane">${Ps(e)}</aside>
588 - </div>
589 - `:l`<os-empty-state>${r("This item no longer exists.")}</os-empty-state>`}function Os(e,t){const s=k(e);if(s.fp&&s.fp.userId===t)return s.fp;const n={userId:t,status:"loading",payload:null};return s.fp=n,e.fetch(`desktop-mode/v1/user-footprint/${t}`).then(async o=>{if(!o.ok)throw new Error(String(o.status));return await o.json()}).then(o=>{s.fp===n&&(n.status="ready",n.payload=o,e.repaint())}).catch(()=>{s.fp===n&&(n.status="error",e.repaint())}),n}function Fs(e){const t=Number(e.state.footprint);if(!(t>0))return null;const s=k(e).fp;if(!s||s.userId!==t||s.status==="loading")return[r("Loading footprint…"),""];if(s.status==="error"||!s.payload)return[r("Could not load footprint."),""];const n=s.payload;return[b(r("%1$d posts · %2$d comments tracked"),n.totals.posts+n.totals.pages,n.totals.comments),b(r("Window %1$s → %2$s"),I(n.range.from),I(n.range.to))]}function Ws(e){const t=e.trim().split(/\s+/).filter(s=>s.length>0);return t.length===0?"?":t.length===1?t[0].slice(0,2).toUpperCase():(t[0][0]+t[t.length-1][0]).toUpperCase()}function Z(e,t,s){return l`
592 + `,en(e)):c`<os-empty-state>${r("This item no longer exists.")}</os-empty-state>`}const St="X-WP-Nonce";function sn(e,t){const s=nn();if(!s)return t;const n=on(e);if(!n||!rn(n))return t;const o=t?.headers??(typeof Request<"u"&&e instanceof Request?e.headers:void 0),i=new Headers(o??{});return i.has(St)?t:(i.set(St,s),{...t??{},headers:i})}function nn(){if(typeof window>"u")return;const t=window.openStationConfig?.restNonce;return typeof t=="string"&&t.length>0?t:void 0}function on(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 rn(e){return typeof window>"u"||!window.location||e.origin!==window.location.origin?!1:!!(e.pathname.includes("/wp-json/")||e.searchParams.has("rest_route"))}function He(e,t,s={}){const n=window.wp?.os?.fetch;if(typeof n=="function")return n(e,t,s);const o=sn(e,t);return fetch(e,o)}class Xe extends Error{constructor(t,s){super(t||s.serverMessage||`HTTP ${s.status}`),this.name="RestError",this.status=s.status,this.code=s.code,this.data=s.data,this.serverMessage=s.serverMessage??""}}function an(e){const t=typeof e=="object"&&e!==null?e:void 0;return{code:typeof t?.code=="string"?t.code:void 0,data:t?.data,serverMessage:typeof t?.message=="string"?t.message:""}}function se(e,t,s=""){return new Xe(s,{status:e,...an(t)})}async function ln(e,t=""){let s=null;try{s=await e.json()}catch{s=null}return se(e.status,s,t)}function dn(e,t){const s=k(e);if(s.fp&&s.fp.userId===t)return s.fp;const n={userId:t,status:"loading",payload:null};return s.fp=n,e.fetch(`desktop-mode/v1/user-footprint/${t}`).then(async o=>{if(!o.ok)throw await ln(o);return await o.json()}).then(o=>{s.fp===n&&(n.status="ready",n.payload=o,e.repaint())}).catch(()=>{s.fp===n&&(n.status="error",e.repaint())}),n}function cn(e){const t=Number(e.state.footprint);if(!(t>0))return null;const s=k(e).fp;if(!s||s.userId!==t||s.status==="loading")return[r("Loading footprint…"),""];if(s.status==="error"||!s.payload)return[r("Could not load footprint."),""];const n=s.payload;return[b(r("%1$d posts · %2$d comments tracked"),n.totals.posts+n.totals.pages,n.totals.comments),b(r("Window %1$s → %2$s"),I(n.range.from),I(n.range.to))]}function un(e){const t=e.trim().split(/\s+/).filter(s=>s.length>0);return t.length===0?"?":t.length===1?t[0].slice(0,2).toUpperCase():(t[0][0]+t[t.length-1][0]).toUpperCase()}function ne(e,t,s){return c`
590 593 <div class="os-my-wordpress__user-stat">
591 594 <span class="os-my-wordpress__user-stat-value">${e}</span>
592 595 <span class="os-my-wordpress__user-stat-label">${t}</span>
593 - ${s?l`<span class="os-my-wordpress__user-stat-caption">${s}</span>`:""}
596 + ${s?c`<span class="os-my-wordpress__user-stat-caption">${s}</span>`:""}
594 597 </div>
595 - `}function Bs(e){const t=e.profile.roleLabels??[];return l`
598 + `}function pn(e){const t=e.profile.roleLabels??[];return c`
596 599 <header class="os-my-wordpress__footprint-hero">
597 600 <div class="os-my-wordpress__footprint-avatar">
598 - ${e.profile.avatarUrl?l`<img src=${e.profile.avatarUrl} alt="" />`:l`<span class="os-my-wordpress__user-tile-initials">${Ws(e.profile.name)}</span>`}
601 + ${e.profile.avatarUrl?c`<img src=${e.profile.avatarUrl} alt="" />`:c`<span class="os-my-wordpress__user-tile-initials">${un(e.profile.name)}</span>`}
599 602 </div>
600 603 <div class="os-my-wordpress__footprint-headline">
601 604 <h1 class="os-my-wordpress__footprint-title">${e.profile.name}</h1>
602 605 <div class="os-my-wordpress__footprint-meta">
603 - ${t.map(s=>l`<span class="os-my-wordpress__user-role">${s}</span>`)}
604 - ${e.profile.registered?l`<span class="os-my-wordpress__user-role os-my-wordpress__footprint-since">${b(r("Member since %s"),I(e.profile.registered,"month"))}</span>`:""}
606 + ${t.map(s=>c`<span class="os-my-wordpress__user-role">${s}</span>`)}
607 + ${e.profile.registered?c`<span class="os-my-wordpress__user-role os-my-wordpress__footprint-since">${b(r("Member since %s"),I(e.profile.registered,"month"))}</span>`:""}
605 608 </div>
606 - ${e.profile.link?l`<div class="os-my-wordpress__user-links">
609 + ${e.profile.link?c`<div class="os-my-wordpress__user-links">
607 610 <a href=${e.profile.link} target="_blank" rel="noopener noreferrer">${r("Author archive")}</a>
608 611 </div>`:""}
609 612 </div>
610 613 </header>
611 - `}function Us(e){const t=e.totals.posts+e.totals.pages,s=e.totals.updates??0,n=e.streak.longestRange;return l`
614 + `}function fn(e){const t=e.totals.posts+e.totals.pages,s=e.totals.updates??0,n=e.streak.longestRange;return c`
612 615 <section class="os-my-wordpress__footprint-section os-my-wordpress__footprint-stats-row">
613 - ${Z(t.toLocaleString(),r("Total content"),e.totals.posts>0&&e.totals.pages>0?b(r("%1$d posts · %2$d pages"),e.totals.posts,e.totals.pages):"")}
614 - ${Z(e.totals.comments.toLocaleString(),r("Comments left"),"")}
615 - ${s>0?Z(s.toLocaleString(),r("Updates"),r("Saves on existing posts")):""}
616 - ${Z(b(B("%d day","%d days",e.streak.longest),e.streak.longest),r("Longest streak"),n.from&&n.to?b(r("%1$s → %2$s"),I(n.from),I(n.to)):"")}
617 - ${Z(b(B("%d day","%d days",e.streak.current),e.streak.current),r("Current streak"),e.streak.current===0?r("No activity today"):r("Including today"))}
616 + ${ne(t.toLocaleString(),r("Total content"),e.totals.posts>0&&e.totals.pages>0?b(r("%1$d posts · %2$d pages"),e.totals.posts,e.totals.pages):"")}
617 + ${ne(e.totals.comments.toLocaleString(),r("Comments left"),"")}
618 + ${s>0?ne(s.toLocaleString(),r("Updates"),r("Saves on existing posts")):""}
619 + ${ne(b(B("%d day","%d days",e.streak.longest),e.streak.longest),r("Longest streak"),n.from&&n.to?b(r("%1$s → %2$s"),I(n.from),I(n.to)):"")}
620 + ${ne(b(B("%d day","%d days",e.streak.current),e.streak.current),r("Current streak"),e.streak.current===0?r("No activity today"):r("Including today"))}
618 621 </section>
619 - `}function qs(e){const t=f=>f.posts+f.comments+(f.updates??0),s=e.daily.reduce((f,m)=>{const h=t(m);return h>f?h:f},0),n=f=>{if(f<=0||s<=0)return 0;const m=f/s;return m>.75?4:m>.5?3:m>.25?2:1},o=e.daily.map(f=>new Date(f.date+"T00:00:00Z"));if(o.length===0)return l`
622 + `}function mn(e){const t=f=>f.posts+f.comments+(f.updates??0),s=e.daily.reduce((f,m)=>{const h=t(m);return h>f?h:f},0),n=f=>{if(f<=0||s<=0)return 0;const m=f/s;return m>.75?4:m>.5?3:m>.25?2:1},o=e.daily.map(f=>new Date(f.date+"T00:00:00Z"));if(o.length===0)return c`
620 623 <section class="os-my-wordpress__footprint-section os-my-wordpress__footprint-calendar-section">
621 624 <h3>${r("A year of activity")}</h3>
622 625 <p class="os-my-wordpress__article-meta">${r("No activity recorded in the last year.")}</p>
623 626 </section>
624 - `;const i=o[0].getUTCDay(),a=f=>`grid-row:${f%7+2};grid-column:${Math.floor(f/7)+2}`,c=[new Date(Date.UTC(2024,11,2)),new Date(Date.UTC(2024,11,4)),new Date(Date.UTC(2024,11,6))],u=[3,5,7],p=[];let d=-1;for(let f=0;f<e.daily.length;f+=1){const m=o[f].getUTCMonth();if(m===d)continue;d=m;const h=i+f,w=Math.floor(h/7);w===0&&h%7!==0||p.push(l`<span
627 + `;const i=o[0].getUTCDay(),a=f=>`grid-row:${f%7+2};grid-column:${Math.floor(f/7)+2}`,l=[new Date(Date.UTC(2024,11,2)),new Date(Date.UTC(2024,11,4)),new Date(Date.UTC(2024,11,6))],u=[3,5,7],d=[];let p=-1;for(let f=0;f<e.daily.length;f+=1){const m=o[f].getUTCMonth();if(m===p)continue;p=m;const h=i+f,$=Math.floor(h/7);$===0&&h%7!==0||d.push(c`<span
625 628 class="os-my-wordpress__footprint-month"
626 - style="grid-row:1;grid-column:${w+2}"
627 - >${o[f].toLocaleDateString(void 0,{month:"short"})}</span>`)}return l`
629 + style="grid-row:1;grid-column:${$+2}"
630 + >${o[f].toLocaleDateString(void 0,{month:"short"})}</span>`)}return c`
628 631 <section class="os-my-wordpress__footprint-section os-my-wordpress__footprint-calendar-section">
629 632 <h3>${r("A year of activity")}</h3>
630 633 <div class="os-my-wordpress__footprint-calendar">
631 634 <div class="os-my-wordpress__footprint-grid">
632 - ${c.map((f,m)=>l`<span
635 + ${l.map((f,m)=>c`<span
633 636 class="os-my-wordpress__footprint-weekday"
634 637 style="grid-column:1;grid-row:${u[m]+1}"
635 638 >${f.toLocaleDateString(void 0,{weekday:"short"})}</span>`)}
636 - ${p}
637 - ${Array.from({length:i},(f,m)=>l`<span
639 + ${d}
640 + ${Array.from({length:i},(f,m)=>c`<span
638 641 class="os-my-wordpress__footprint-cell os-my-wordpress__footprint-cell--pad"
639 642 aria-hidden="true"
640 643 style=${a(m)}
641 644 ></span>`)}
642 - ${e.daily.map((f,m)=>l`<span
645 + ${e.daily.map((f,m)=>c`<span
643 646 class="os-my-wordpress__footprint-cell os-my-wordpress__footprint-cell--l${n(t(f))}"
644 647 title=${b(r("%1$s — %2$d posts, %3$d comments, %4$d updates"),I(f.date,"long"),f.posts,f.comments,f.updates??0)}
645 648 data-date=${f.date}
646 649 style=${a(i+m)}
@@ -647,16 +650,16 @@
647 650 ></span>`)}
648 651 </div>
649 652 <div class="os-my-wordpress__footprint-legend">
650 653 <span class="os-my-wordpress__footprint-legend-label">${r("Less")}</span>
651 - ${[0,1,2,3,4].map(f=>l`<span class="os-my-wordpress__footprint-cell os-my-wordpress__footprint-cell--l${f}"></span>`)}
654 + ${[0,1,2,3,4].map(f=>c`<span class="os-my-wordpress__footprint-cell os-my-wordpress__footprint-cell--l${f}"></span>`)}
652 655 <span class="os-my-wordpress__footprint-legend-label">${r("More")}</span>
653 656 </div>
654 657 </div>
655 658 </section>
656 - `}function ut(e,t,s){const n=Math.max(1,...e);return l`
659 + `}function At(e,t,s){const n=Math.max(1,...e);return c`
657 660 <div class="os-my-wordpress__footprint-bars">
658 - ${e.map((o,i)=>l`
661 + ${e.map((o,i)=>c`
659 662 <div class="os-my-wordpress__footprint-bar-col">
660 663 <div
661 664 class="os-my-wordpress__footprint-bar ${o===0?"os-my-wordpress__footprint-bar--empty":""}"
662 665 style="height:${Math.round(o/n*100)}%"
@@ -665,44 +668,44 @@
665 668 <span class="os-my-wordpress__footprint-bar-label">${t[i]??""}</span>
666 669 </div>
667 670 `)}
668 671 </div>
669 - `}function js(e){const t=[r("S"),r("M"),r("T"),r("W"),r("T"),r("F"),r("S")],s=[r("Sunday"),r("Monday"),r("Tuesday"),r("Wednesday"),r("Thursday"),r("Friday"),r("Saturday")],n=Array.from({length:24},(i,a)=>a%3===0?String(a):""),o=Array.from({length:24},(i,a)=>b(r("%d:00"),a));return l`
672 + `}function hn(e){const t=[r("S"),r("M"),r("T"),r("W"),r("T"),r("F"),r("S")],s=[r("Sunday"),r("Monday"),r("Tuesday"),r("Wednesday"),r("Thursday"),r("Friday"),r("Saturday")],n=Array.from({length:24},(i,a)=>a%3===0?String(a):""),o=Array.from({length:24},(i,a)=>b(r("%d:00"),a));return c`
670 673 <section class="os-my-wordpress__footprint-section os-my-wordpress__footprint-rhythm">
671 674 <h3>${r("Publishing rhythm")}</h3>
672 675 <div class="os-my-wordpress__footprint-rhythm-grid">
673 676 <div class="os-my-wordpress__footprint-chart">
674 677 <div class="os-my-wordpress__footprint-chart-caption">${r("By weekday")}</div>
675 - ${ut(e.weekday,t,s)}
678 + ${At(e.weekday,t,s)}
676 679 </div>
677 680 <div class="os-my-wordpress__footprint-chart">
678 681 <div class="os-my-wordpress__footprint-chart-caption">${r("By hour of day (site time)")}</div>
679 - ${ut(e.hour,n,o)}
682 + ${At(e.hour,n,o)}
680 683 </div>
681 684 </div>
682 685 </section>
683 - `}function Ks(e){const t=e.totals.mostProlificMonth;return t?l`
686 + `}function gn(e){const t=e.totals.mostProlificMonth;return t?c`
684 687 <section class="os-my-wordpress__footprint-section os-my-wordpress__footprint-callout">
685 688 <span class="os-my-wordpress__footprint-callout-label">${r("Most prolific month")}</span>
686 689 <h3 class="os-my-wordpress__footprint-callout-value">${I(t.ym,"month")}</h3>
687 690 <p class="os-my-wordpress__footprint-callout-detail">${b(B("%d post published — their personal record.","%d posts published — their personal record.",t.n),t.n)}</p>
688 691 </section>
689 - `:""}function zs(e){const t=o=>o==="comment"?"dashicons-admin-comments":o==="post-update"?"dashicons-edit":"dashicons-admin-post",s=o=>{const i=o.title||r("(no title)");return o.kind==="comment"?b(r("Commented on “%s”"),i):o.kind==="post-update"?b(r("Updated “%s”"),i):i},n=o=>{const i=[I(o.date,"long")];return o.status&&o.status!=="publish"&&o.status!=="approved"&&i.push(o.status),i.join(" · ")};return l`
692 + `:""}function yn(e){const t=o=>o==="comment"?"dashicons-admin-comments":o==="post-update"?"dashicons-edit":"dashicons-admin-post",s=o=>{const i=o.title||r("(no title)");return o.kind==="comment"?b(r("Commented on “%s”"),i):o.kind==="post-update"?b(r("Updated “%s”"),i):i},n=o=>{const i=[I(o.date,"long")];return o.status&&o.status!=="publish"&&o.status!=="approved"&&i.push(o.status),i.join(" · ")};return c`
690 693 <section class="os-my-wordpress__footprint-section os-my-wordpress__footprint-timeline-section">
691 694 <h3>${r("Recent activity")}</h3>
692 - ${e.timeline.length===0?l`<p class="os-my-wordpress__article-meta">${r("Nothing to show yet.")}</p>`:l`<ul class="os-my-wordpress__footprint-timeline">
693 - ${e.timeline.map(o=>l`
695 + ${e.timeline.length===0?c`<p class="os-my-wordpress__article-meta">${r("Nothing to show yet.")}</p>`:c`<ul class="os-my-wordpress__footprint-timeline">
696 + ${e.timeline.map(o=>c`
694 697 <li class="os-my-wordpress__footprint-event os-my-wordpress__footprint-event--${o.kind}">
695 698 <span class="os-my-wordpress__footprint-dot">
696 699 <span class="dashicons ${t(o.kind)}" aria-hidden="true"></span>
697 700 </span>
698 701 <div class="os-my-wordpress__footprint-event-body">
699 - ${o.link?l`<a
702 + ${o.link?c`<a
700 703 class="os-my-wordpress__footprint-event-title"
701 704 href=${o.link}
702 705 target="_blank"
703 706 rel="noopener noreferrer"
704 - >${s(o)}</a>`:l`<span class="os-my-wordpress__footprint-event-title">${s(o)}</span>`}
707 + >${s(o)}</a>`:c`<span class="os-my-wordpress__footprint-event-title">${s(o)}</span>`}
705 708 <span class="os-my-wordpress__footprint-event-meta">${n(o)}</span>
706 709 </div>
707 710 </li>
708 711 `)}
@@ -707,9 +710,9 @@
707 710 </li>
708 711 `)}
709 712 </ul>`}
710 713 </section>
711 - `}function Hs(e,t,s){return l`
714 + `}function $n(e,t,s){return c`
712 715 <footer class="os-my-wordpress__footprint-section os-my-wordpress__footprint-footer">
713 716 <os-button
714 717 variant="ghost"
715 718 ?disabled=${!t.profile.link}
@@ -716,63 +719,63 @@
716 719 @click=${()=>{t.profile.link&&window.open(t.profile.link,"_blank","noopener,noreferrer")}}
717 720 >${r("View author archive")}</os-button>
718 721 <os-button
719 722 variant="primary"
720 - @click=${()=>Q(s,{source:"my-wordpress-app/footprint",fallback:()=>void e.dispatch("edit",{item:s})})}
723 + @click=${()=>te(s,{source:"my-wordpress-app/footprint",fallback:()=>void e.dispatch("edit",{item:s})})}
721 724 >${r("Show profile")}</os-button>
722 725 </footer>
723 - `}function Xs(e){const t=Number(e.state.footprint),s=Os(e,t);if(s.status==="loading")return l`
726 + `}function wn(e){const t=Number(e.state.footprint),s=dn(e,t);if(s.status==="loading")return c`
724 727 <div class="os-my-wordpress__footprint">
725 728 <div class="os-my-wordpress__preview-loading"><os-spinner></os-spinner></div>
726 729 </div>
727 - `;if(s.status==="error"||!s.payload)return l`
730 + `;if(s.status==="error"||!s.payload)return c`
728 731 <div class="os-my-wordpress__footprint">
729 732 <os-empty-state>${r("Could not load footprint.")}</os-empty-state>
730 733 </div>
731 - `;const n=s.payload;return l`
734 + `;const n=s.payload;return c`
732 735 <div class="os-my-wordpress__footprint">
733 - ${Bs(n)}
734 - ${Us(n)}
735 - ${qs(n)}
736 - ${js(n)}
737 - ${Ks(n)}
738 - ${zs(n)}
739 - ${Hs(e,n,t)}
736 + ${pn(n)}
737 + ${fn(n)}
738 + ${mn(n)}
739 + ${hn(n)}
740 + ${gn(n)}
741 + ${yn(n)}
742 + ${$n(e,n,t)}
740 743 </div>
741 - `}const O={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:4,linerWidth:2,linerColor:16776191,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}};function Ys(e,t,s){const n=(e%360+360)%360,o=Math.min(1,Math.max(0,t)),i=Math.min(1,Math.max(0,s)),a=(1-Math.abs(2*i-1))*o,c=n/60,u=a*(1-Math.abs(c%2-1));let p=0,d=0,f=0;c<1?(p=a,d=u):c<2?(p=u,d=a):c<3?(d=a,f=u):c<4?(d=u,f=a):c<5?(p=u,f=a):(p=a,f=u);const m=i-a/2,h=w=>Math.min(255,Math.max(0,Math.round((w+m)*255)));return h(p)<<16|h(d)<<8|h(f)}const Gs=Math.PI*2;function Vs(e,t,s,n,o=0){const i=Math.max(1,Math.round(e)),a=new Array(i);for(let c=0;c<i;c++){const u=c/i,p=((u-(s.hueAngle+o)/360)%1+1)%1,d=s.hueLoop?.5-.5*Math.cos(p*Gs):p;let f=s.hueStart+s.hueSpan*d+t;const m=.5+.5*Math.cos((u-1/3)*Math.PI*2);let h=s.lightness*(.72+.28*m),w=s.saturation;a[c]=Ys(f,w,h)}return a}const pt=Math.PI/2,H=Math.PI*2,Qs=.05;function X(e){return((e+pt)%H+H)%H}function Oe(e,t){return Math.pow(.5+.5*e,t)}function Zs(e){const t=Math.max(0,Math.sin(e)),s=2+3.2*t,n=Math.abs(Math.cos(e)),o=Math.abs(Math.sin(e)),i=1/Math.pow(Math.pow(n,s)+Math.pow(o,s),1/s)-1,a=-.17*Math.pow(t,1.4)*Math.cos(6*e);return i+a}function Js(e){return .16*Math.cos(2*e+.9)+.095*Math.cos(3*e-2.1)+.036*Math.cos(5*e+1.3)+.019*Math.cos(7*e-.4)}function xs(e){return .58*(Oe(Math.cos(5*e),3)-.3125)}function en(e){return .34*(Oe(Math.cos(6*e),2)-.375)}function tn(e){return .34*(Oe(Math.cos(4*e),2)-.375)}function sn(e){return .72*(Math.pow(Math.max(0,Math.cos(e)),8)-.1367)}function nn(e){const t=Math.max(0,Math.cos(e)),s=Math.max(0,-Math.cos(e));return .34*(Math.sqrt(t)*(.5+.5*Math.cos(5*e))-.7*s*s-.0247)}function on(e){const t=e>Math.PI?H-e:e,s=-.34*Math.pow(Math.max(0,Math.cos(e)),6),n=.3*Math.pow(Math.max(0,Math.cos(t-1)),3),o=.34*Math.pow(Math.max(0,-Math.cos(e)),8);return s+n+o+.02}function rn(e,t){switch(t.shapePreset){case"circle":return 0;case"ghost":return Zs(e);case"potato":return Js(e);case"star":return xs(X(e));case"flower":return en(X(e));case"diamond":return tn(X(e));case"drop":return sn(X(e));case"cloud":return nn(X(e));case"heart":return on(X(e));case"custom":{const s=Math.round(t.shapeLobes);return s<2?0:1/(1+s*s)*Math.cos(s*e)}default:return Qs*Math.cos(3*(e+pt))}}function ft(e,t){if(t.shapeAmount<=0)return 1;const s=e-t.shapeAngle*Math.PI/180;return 1+t.shapeAmount*rn(s,t)}const he=72,an=16,mt=[[1,.1],[.6,.14],[.28,.2]];function C(e){const t=Number(e.toFixed(2));return(Object.is(t,-0)?0:t).toFixed(2)}function ge(e){return"#"+(e&16777215).toString(16).padStart(6,"0")}function ln(e,t){const s=[];for(let a=0;a<he;a++){const c=a/he*H,u=t*ft(c,e.physics);s.push([u*Math.cos(c),u*Math.sin(c)])}const n=s.length,o=a=>s[(a%n+n)%n];let i=`M${C(s[0][0])} ${C(s[0][1])}`;for(let a=0;a<n;a++){const c=o(a-1),u=o(a),p=o(a+1),d=o(a+2),f=u[0]+(p[0]-c[0])/6,m=u[1]+(p[1]-c[1])/6,h=p[0]-(d[0]-u[0])/6,w=p[1]-(d[1]-u[1])/6;i+=`C${C(f)} ${C(m)},${C(h)} ${C(w)},${C(p[0])} ${C(p[1])}`}return i+"Z"}function cn(e){let t=0;for(let s=0;s<he;s++)t=Math.max(t,ft(s/he*H,e.physics));return t}function dn(e={},t=96,s=""){const n={appearance:{...O.appearance,...e.appearance},physics:{...O.physics,...e.physics}},{appearance:o}=n,i=100,a=i/O.appearance.radius,c=o.outlineWidth*a,u=o.linerWidth*a,p=o.glow/10*i*.18,d=i*cn(n)+c/2+p*mt[0][0],f=C(d),m=C(d*2),h=ln(n,i),w=Vs(an,0,o),v=String(s).replace(/[^A-Za-z0-9_-]/g,""),g=`r${v}`,$=`s${v}`,y=`c${v}`,_=w.map((F,Y)=>`<stop offset="${C(Y/(w.length-1)*100)}%" stop-color="${ge(F)}"/>`).join(""),S=mt.map(([F,Y])=>`<use href="#${$}" fill="none" stroke="url(#${g})" stroke-width="${C(c+p*F*2)}" stroke-opacity="${C(Y)}" stroke-linejoin="round"/>`).join(""),M=i*o.eyeScale,A=M*.46,D=i*.28,P=-i*.02-M/2,se=F=>`<rect x="${C(F-A/2)}" y="${C(P)}" width="${C(A)}" height="${C(M)}" rx="${C(A/2)}" fill="${ge(o.eyeColor)}"/>`,ke=u>0?`<use href="#${$}" fill="none" stroke="${ge(o.linerColor)}" stroke-width="${C(c+u*2)}" stroke-linejoin="round" clip-path="url(#${y})"/>`:"";return`<svg xmlns="http://www.w3.org/2000/svg" width="${t}" height="${t}" viewBox="-${f} -${f} ${m} ${m}"><defs><linearGradient id="${g}" x1="0" y1="0" x2="0.85" y2="1">${_}</linearGradient><path id="${$}" d="${h}"/><clipPath id="${y}"><use href="#${$}"/></clipPath></defs>`+S+`<use href="#${$}" fill="${ge(o.bodyColor)}" fill-opacity="${C(o.bodyAlpha)}"/>`+ke+`<use href="#${$}" fill="none" stroke="url(#${g})" stroke-width="${C(c)}" stroke-linejoin="round"/>`+se(-D)+se(D)+"</svg>"}function un(e={},t=96){const s=dn(e,t);return`data:image/svg+xml;base64,${typeof btoa=="function"?btoa(s):Buffer.from(s,"utf8").toString("base64")}`}const pn=["blob","ghost","potato","star","flower","heart","diamond","drop","cloud"];function fn(e=Math.random){const t=(c,u)=>c+e()*(u-c),s=c=>e()<c,n=c=>c[Math.floor(e()*c.length)%c.length],o=(c,u)=>Math.round(c/u)*u,i=o(t(55,215),1)*(s(.5)?1:-1),a=o(t(2,7),.5);return{appearance:{hueStart:o(t(0,360),1),hueSpan:i,hueAngle:o(t(0,360),1),hueLoop:!0,hueSpin:s(.25)?o(t(-14,14),1):0,hueDrift:s(.15)?o(t(-8,8),1):0,saturation:o(t(.68,1),.01),lightness:o(t(.52,.78),.01),outlineWidth:a,linerWidth:Math.max(1,o(a/2,.5)),linerColor:O.appearance.linerColor,glow:o(t(4,16),.1),iridescence:s(.34)?o(t(.45,1.25),.05):0,bodyColor:s(.25)?mn(e):O.appearance.bodyColor,bodyAlpha:s(.2)?o(t(.78,1),.01):1,eyeColor:O.appearance.eyeColor,eyeScale:o(t(.2,.42),.01)},physics:{shapePreset:n(pn),shapeAmount:o(t(.7,1.15),.05),shapeAngle:0,idleWobble:o(t(.03,.16),.005),idleWobbleSpeed:o(t(.35,1.1),.05)}}}function mn(e){const t=()=>Math.floor(e()*42);return t()<<16|t()<<8|t()}function hn(e){let t=e>>>0;return()=>{t=t+1831565813>>>0;let s=t;return s=Math.imul(s^s>>>15,s|1),s^=s+Math.imul(s^s>>>7,s|61),((s^s>>>14)>>>0)/4294967296}}const Fe=12;function $e(e){const t=fn(hn(e));return{appearance:t.appearance,physics:t.physics}}function gn(e,t=Fe){return Array.from({length:t},(s,n)=>({seed:e+n,look:$e(e+n)}))}function J(e,t){return un(e??{},t)}function ht(e){return e?Object.keys(e.appearance??{}).length>0||Object.keys(e.physics??{}).length>0:!1}function $n(e){const t=e?.physics?.shapePreset;return typeof t=="string"&&t!==""?t:O.physics.shapePreset}const yn=["rose","amber","gold","lime","green","mint","teal","azure","blue","violet","purple","magenta"];function wn(e){const t=e?.appearance?.hueStart,n=((typeof t=="number"&&Number.isFinite(t)?t:O.appearance.hueStart)%360+360)%360;return yn[Math.floor((n+15)%360/30)]}const gt="__openStationSharedStores";function _n(){const e=window;let t=e[gt];return t||(t=new Map,e[gt]=t),t}function We(e,t){const s=_n();let n=s.get(e);n||(n={state:t(),listeners:new Set,rebuild:t},s.set(e,n));const o={get state(){return n.state},set state(i){n.state=i},getState(){return n.state},notify(){for(const i of Array.from(n.listeners))try{i(n.state)}catch(a){console.error(`[desktop-mode/shared-store:${e}] subscriber threw:`,a)}},subscribe(i){return n.listeners.add(i),()=>{n.listeners.delete(i)}},setState(i){const a=n.state;if(typeof a!="object"||a===null){console.warn(`[desktop-mode/shared-store:${e}] setState called on a primitive store; use the state setter instead.`);return}Object.assign(a,i),o.notify()},reset(){const i=n.rebuild(),a=n.state;if(typeof a=="object"&&a!==null&&typeof i=="object"&&i!==null){const c=a;for(const u of Object.keys(c))delete c[u];Object.assign(c,i)}else n.state=i;n.listeners.clear()}};return o}const L=We("desktop-mode/agents-chat",()=>({activeAgent:null,transcripts:{},conversationIds:{},conversationsRev:0}));function Be(e){L.state.activeAgent=e,L.state.transcripts[e.id]||(L.state.transcripts[e.id]=[]),L.state.conversationIds||(L.state.conversationIds={},L.state.conversationsRev=0),L.notify()}const vn=["post","page","media","user","comment"],bn=12,kn=4;function Sn(){return Math.floor(Math.random()*16777215)+1}function $t(e,t){return{brief:"",name:"",description:"",vibes:"",instructions:"",role:e,abilities:[],triggers:[{kind:"chat",config:{}}],copiedFrom:"",faceSeed:t,face:$e(t),stripSeed:t,drafting:!1}}function yt(e){return!e||e.length===0||e.some(t=>t.slug==="author")?"author":e[0].slug}function ye(e,t){return ht(e.face)&&e.avatarUrl!==""?e.avatarUrl:e.faceSeed>0?J($e(e.faceSeed),t):e.avatarUrl}function wt(e){return e.map(t=>`${t.id}:${t.triggers.map(s=>s.kind).sort().join("+")}`).join("|")}let An=0;const _t=new WeakMap;function vt(e){let t=_t.get(e);return t||(t=++An,_t.set(e,t)),t}function Mn(){T().openOsSettings?.({tabId:"features"})}function bt(e,t){Be({id:t.id,name:t.name,description:t.description,avatarUrl:t.avatarUrl}),!T().openWindow?.(e.runWindowId,{source:"agents"})&&typeof T().openWindow!="function"&&console.warn("[desktop-mode/agents] wp.os.openWindow is missing — desktop shell may not be ready.")}function Tn(e){Q(e.id,{source:"agents/profile",fallback:()=>{e.profileUrl&&T().windowManager?.open({id:`user-edit-${e.id}`,url:e.profileUrl,title:e.name,icon:"dashicons-admin-users"})}})}function Cn(e){const t=T();if(!t.windowManager?.open){window.open(e,"_blank","noopener,noreferrer");return}const s=typeof t.deriveWindowId=="function"?t.deriveWindowId(e):"options-connectors";t.windowManager.open({id:s,url:e,title:r("Connectors"),icon:"dashicons-admin-settings"})}async function En(e){const t=T().files;if(!t?.rest?.createPlacement)return r("The desktop files API is not available in this context.");let s=[];try{const i=t.store?.getState?.()?.placementsByFolder?.get(0);Array.isArray(i)&&(s=i)}catch{}let n=16,o=16;for(let i=0;i<200&&(n=16+i%5*96,o=16+Math.floor(i/5)*110,!!s.some(c=>Math.abs((c.x??-9999)-n)<48&&Math.abs((c.y??-9999)-o)<55));i++);try{const i=await t.rest.createPlacement({type:"user",ref:String(e.id),x:n,y:o});return t.store?.upsertPlacement?.(i),r("Agent added to the desktop.")}catch(i){return i instanceof Error?i.message:String(i)}}function kt(e,t){const s=e.some(n=>n.slug===t);return l`
742 - ${e.map(n=>l`<os-option value=${n.slug}>${n.label}</os-option>`)}
743 - ${t&&!s?l`<os-option value=${t}>${t}</os-option>`:""}
744 - `}function x(e,t,s){const n=k(e);return n.agentBusy=!0,e.repaint(),e.dispatch(t,s).finally(()=>{n.agentBusy=!1,e.repaint()})}function In(e){if(!e.enabled||e.aiReady)return"";const t=r("No AI provider is configured — agents cannot run until a connector is set up."),s=r("This WordPress does not ship the AI Client (WordPress 7.0+). Agents can be defined but not run."),n=l`
744 + `}const W={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:4,linerWidth:2,linerColor:16776191,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}};function vn(e,t,s){const n=(e%360+360)%360,o=Math.min(1,Math.max(0,t)),i=Math.min(1,Math.max(0,s)),a=(1-Math.abs(2*i-1))*o,l=n/60,u=a*(1-Math.abs(l%2-1));let d=0,p=0,f=0;l<1?(d=a,p=u):l<2?(d=u,p=a):l<3?(p=a,f=u):l<4?(p=u,f=a):l<5?(d=u,f=a):(d=a,f=u);const m=i-a/2,h=$=>Math.min(255,Math.max(0,Math.round(($+m)*255)));return h(d)<<16|h(p)<<8|h(f)}const _n=Math.PI*2;function bn(e,t,s,n,o=0){const i=Math.max(1,Math.round(e)),a=new Array(i);for(let l=0;l<i;l++){const u=l/i,d=((u-(s.hueAngle+o)/360)%1+1)%1,p=s.hueLoop?.5-.5*Math.cos(d*_n):d;let f=s.hueStart+s.hueSpan*p+t;const m=.5+.5*Math.cos((u-1/3)*Math.PI*2);let h=s.lightness*(.72+.28*m),$=s.saturation;a[l]=vn(f,$,h)}return a}const Mt=Math.PI/2,G=Math.PI*2,kn=.05;function V(e){return((e+Mt)%G+G)%G}function Ye(e,t){return Math.pow(.5+.5*e,t)}function Sn(e){const t=Math.max(0,Math.sin(e)),s=2+3.2*t,n=Math.abs(Math.cos(e)),o=Math.abs(Math.sin(e)),i=1/Math.pow(Math.pow(n,s)+Math.pow(o,s),1/s)-1,a=-.17*Math.pow(t,1.4)*Math.cos(6*e);return i+a}function An(e){return .16*Math.cos(2*e+.9)+.095*Math.cos(3*e-2.1)+.036*Math.cos(5*e+1.3)+.019*Math.cos(7*e-.4)}function Mn(e){return .58*(Ye(Math.cos(5*e),3)-.3125)}function Tn(e){return .34*(Ye(Math.cos(6*e),2)-.375)}function Cn(e){return .34*(Ye(Math.cos(4*e),2)-.375)}function En(e){return .72*(Math.pow(Math.max(0,Math.cos(e)),8)-.1367)}function In(e){const t=Math.max(0,Math.cos(e)),s=Math.max(0,-Math.cos(e));return .34*(Math.sqrt(t)*(.5+.5*Math.cos(5*e))-.7*s*s-.0247)}function Nn(e){const t=e>Math.PI?G-e:e,s=-.34*Math.pow(Math.max(0,Math.cos(e)),6),n=.3*Math.pow(Math.max(0,Math.cos(t-1)),3),o=.34*Math.pow(Math.max(0,-Math.cos(e)),8);return s+n+o+.02}function Dn(e,t){switch(t.shapePreset){case"circle":return 0;case"ghost":return Sn(e);case"potato":return An(e);case"star":return Mn(V(e));case"flower":return Tn(V(e));case"diamond":return Cn(V(e));case"drop":return En(V(e));case"cloud":return In(V(e));case"heart":return Nn(V(e));case"custom":{const s=Math.round(t.shapeLobes);return s<2?0:1/(1+s*s)*Math.cos(s*e)}default:return kn*Math.cos(3*(e+Mt))}}function Tt(e,t){if(t.shapeAmount<=0)return 1;const s=e-t.shapeAngle*Math.PI/180;return 1+t.shapeAmount*Dn(s,t)}const Se=72,Ln=16,Ct=[[1,.1],[.6,.14],[.28,.2]];function C(e){const t=Number(e.toFixed(2));return(Object.is(t,-0)?0:t).toFixed(2)}function Ae(e){return"#"+(e&16777215).toString(16).padStart(6,"0")}function Pn(e,t){const s=[];for(let a=0;a<Se;a++){const l=a/Se*G,u=t*Tt(l,e.physics);s.push([u*Math.cos(l),u*Math.sin(l)])}const n=s.length,o=a=>s[(a%n+n)%n];let i=`M${C(s[0][0])} ${C(s[0][1])}`;for(let a=0;a<n;a++){const l=o(a-1),u=o(a),d=o(a+1),p=o(a+2),f=u[0]+(d[0]-l[0])/6,m=u[1]+(d[1]-l[1])/6,h=d[0]-(p[0]-u[0])/6,$=d[1]-(p[1]-u[1])/6;i+=`C${C(f)} ${C(m)},${C(h)} ${C($)},${C(d[0])} ${C(d[1])}`}return i+"Z"}function Rn(e){let t=0;for(let s=0;s<Se;s++)t=Math.max(t,Tt(s/Se*G,e.physics));return t}function On(e={},t=96,s=""){const n={appearance:{...W.appearance,...e.appearance},physics:{...W.physics,...e.physics}},{appearance:o}=n,i=100,a=i/W.appearance.radius,l=o.outlineWidth*a,u=o.linerWidth*a,d=o.glow/10*i*.18,p=i*Rn(n)+l/2+d*Ct[0][0],f=C(p),m=C(p*2),h=Pn(n,i),$=bn(Ln,0,o),_=String(s).replace(/[^A-Za-z0-9_-]/g,""),w=`r${_}`,g=`s${_}`,y=`c${_}`,v=$.map((U,Z)=>`<stop offset="${C(Z/($.length-1)*100)}%" stop-color="${Ae(U)}"/>`).join(""),M=Ct.map(([U,Z])=>`<use href="#${g}" fill="none" stroke="url(#${w})" stroke-width="${C(l+d*U*2)}" stroke-opacity="${C(Z)}" stroke-linejoin="round"/>`).join(""),S=i*o.eyeScale,A=S*.46,N=i*.28,R=-i*.02-S/2,J=U=>`<rect x="${C(U-A/2)}" y="${C(R)}" width="${C(A)}" height="${C(S)}" rx="${C(A/2)}" fill="${Ae(o.eyeColor)}"/>`,De=u>0?`<use href="#${g}" fill="none" stroke="${Ae(o.linerColor)}" stroke-width="${C(l+u*2)}" stroke-linejoin="round" clip-path="url(#${y})"/>`:"";return`<svg xmlns="http://www.w3.org/2000/svg" width="${t}" height="${t}" viewBox="-${f} -${f} ${m} ${m}"><defs><linearGradient id="${w}" x1="0" y1="0" x2="0.85" y2="1">${v}</linearGradient><path id="${g}" d="${h}"/><clipPath id="${y}"><use href="#${g}"/></clipPath></defs>`+M+`<use href="#${g}" fill="${Ae(o.bodyColor)}" fill-opacity="${C(o.bodyAlpha)}"/>`+De+`<use href="#${g}" fill="none" stroke="url(#${w})" stroke-width="${C(l)}" stroke-linejoin="round"/>`+J(-N)+J(N)+"</svg>"}function Fn(e={},t=96){const s=On(e,t);return`data:image/svg+xml;base64,${typeof btoa=="function"?btoa(s):Buffer.from(s,"utf8").toString("base64")}`}const Wn=["blob","ghost","potato","star","flower","heart","diamond","drop","cloud"];function Un(e=Math.random){const t=(l,u)=>l+e()*(u-l),s=l=>e()<l,n=l=>l[Math.floor(e()*l.length)%l.length],o=(l,u)=>Math.round(l/u)*u,i=o(t(55,215),1)*(s(.5)?1:-1),a=o(t(2,7),.5);return{appearance:{hueStart:o(t(0,360),1),hueSpan:i,hueAngle:o(t(0,360),1),hueLoop:!0,hueSpin:s(.25)?o(t(-14,14),1):0,hueDrift:s(.15)?o(t(-8,8),1):0,saturation:o(t(.68,1),.01),lightness:o(t(.52,.78),.01),outlineWidth:a,linerWidth:Math.max(1,o(a/2,.5)),linerColor:W.appearance.linerColor,glow:o(t(4,16),.1),iridescence:s(.34)?o(t(.45,1.25),.05):0,bodyColor:s(.25)?qn(e):W.appearance.bodyColor,bodyAlpha:s(.2)?o(t(.78,1),.01):1,eyeColor:W.appearance.eyeColor,eyeScale:o(t(.2,.42),.01)},physics:{shapePreset:n(Wn),shapeAmount:o(t(.7,1.15),.05),shapeAngle:0,idleWobble:o(t(.03,.16),.005),idleWobbleSpeed:o(t(.35,1.1),.05)}}}function qn(e){const t=()=>Math.floor(e()*42);return t()<<16|t()<<8|t()}function Bn(e){let t=e>>>0;return()=>{t=t+1831565813>>>0;let s=t;return s=Math.imul(s^s>>>15,s|1),s^=s+Math.imul(s^s>>>7,s|61),((s^s>>>14)>>>0)/4294967296}}const Ge=12;function Me(e){const t=Un(Bn(e));return{appearance:t.appearance,physics:t.physics}}function jn(e,t=Ge){return Array.from({length:t},(s,n)=>({seed:e+n,look:Me(e+n)}))}function oe(e,t){return Fn(e??{},t)}function Et(e){return e?Object.keys(e.appearance??{}).length>0||Object.keys(e.physics??{}).length>0:!1}function Kn(e){const t=e?.physics?.shapePreset;return typeof t=="string"&&t!==""?t:W.physics.shapePreset}const zn=["rose","amber","gold","lime","green","mint","teal","azure","blue","violet","purple","magenta"];function Hn(e){const t=e?.appearance?.hueStart,n=((typeof t=="number"&&Number.isFinite(t)?t:W.appearance.hueStart)%360+360)%360;return zn[Math.floor((n+15)%360/30)]}const P=ce("desktop-mode/agents-chat",()=>({activeAgent:null,transcripts:{},conversationIds:{},conversationsRev:0}));function Ve(e){P.state.activeAgent=e,P.state.transcripts[e.id]||(P.state.transcripts[e.id]=[]),P.state.conversationIds||(P.state.conversationIds={},P.state.conversationsRev=0),P.notify()}const Xn=["post","page","media","user","comment"],Yn=12,Gn=4;function Vn(){return Math.floor(Math.random()*16777215)+1}function It(e,t){return{brief:"",name:"",description:"",vibes:"",instructions:"",role:e,abilities:[],triggers:[{kind:"chat",config:{}}],copiedFrom:"",faceSeed:t,face:Me(t),stripSeed:t,drafting:!1}}function Nt(e){return!e||e.length===0||e.some(t=>t.slug==="author")?"author":e[0].slug}function Te(e,t){return Et(e.face)&&e.avatarUrl!==""?e.avatarUrl:e.faceSeed>0?oe(Me(e.faceSeed),t):e.avatarUrl}function Dt(e){return e.map(t=>`${t.id}:${t.triggers.map(s=>s.kind).sort().join("+")}`).join("|")}let Qn=0;const Lt=new WeakMap;function Pt(e){let t=Lt.get(e);return t||(t=++Qn,Lt.set(e,t)),t}function Jn(){T().openOsSettings?.({tabId:"features"})}function Rt(e,t){Ve({id:t.id,name:t.name,description:t.description,avatarUrl:t.avatarUrl}),!T().openWindow?.(e.runWindowId,{source:"agents"})&&typeof T().openWindow!="function"&&console.warn("[desktop-mode/agents] wp.os.openWindow is missing — desktop shell may not be ready.")}function Zn(e){te(e.id,{source:"agents/profile",fallback:()=>{e.profileUrl&&T().windowManager?.open({id:`user-edit-${e.id}`,url:e.profileUrl,title:e.name,icon:"dashicons-admin-users"})}})}function xn(e){const t=T();if(!t.windowManager?.open){window.open(e,"_blank","noopener,noreferrer");return}const s=typeof t.deriveWindowId=="function"?t.deriveWindowId(e):"options-connectors";t.windowManager.open({id:s,url:e,title:r("Connectors"),icon:"dashicons-admin-settings"})}async function eo(e){const t=T().files;if(!t?.rest?.createPlacement)return r("The desktop files API is not available in this context.");let s=[];try{const i=t.store?.getState?.()?.placementsByFolder?.get(0);Array.isArray(i)&&(s=i)}catch{}let n=16,o=16;for(let i=0;i<200&&(n=16+i%5*96,o=16+Math.floor(i/5)*110,!!s.some(l=>Math.abs((l.x??-9999)-n)<48&&Math.abs((l.y??-9999)-o)<55));i++);try{const i=await t.rest.createPlacement({type:"user",ref:String(e.id),x:n,y:o});return t.store?.upsertPlacement?.(i),r("Agent added to the desktop.")}catch(i){return i instanceof Error?i.message:String(i)}}function Ot(e,t){const s=e.some(n=>n.slug===t);return c`
745 + ${e.map(n=>c`<os-option value=${n.slug}>${n.label}</os-option>`)}
746 + ${t&&!s?c`<os-option value=${t}>${t}</os-option>`:""}
747 + `}function ie(e,t,s){const n=k(e);return n.agentBusy=!0,e.repaint(),e.dispatch(t,s).finally(()=>{n.agentBusy=!1,e.repaint()})}function to(e){if(!e.enabled||e.aiReady)return"";const t=r("No AI provider is configured — agents cannot run until a connector is set up."),s=r("This WordPress does not ship the AI Client (WordPress 7.0+). Agents can be defined but not run."),n=c`
745 748 <a
746 749 href=${e.connectorsUrl}
747 750 rel="noreferrer"
748 - @click=${o=>{o.defaultPrevented||o.button!==0||o.metaKey||o.ctrlKey||o.shiftKey||o.altKey||(o.preventDefault(),Cn(e.connectorsUrl))}}
751 + @click=${o=>{o.defaultPrevented||o.button!==0||o.metaKey||o.ctrlKey||o.shiftKey||o.altKey||(o.preventDefault(),xn(e.connectorsUrl))}}
749 752 >
750 753 ${r("Open Connectors settings")}
751 754 </a>
752 - `;return l`
755 + `;return c`
753 756 <os-notice tone="warning" class="dm-agents__ai-notice">
754 - ${e.aiAvailable?l`${t} ${n}`:s}
757 + ${e.aiAvailable?c`${t} ${n}`:s}
755 758 </os-notice>
756 - `}function St(e,t,s,n,o){return l`
759 + `}function Ft(e,t,s,n,o){return c`
757 760 <div class="dm-agents__cast-inner">
758 761 ${e}
759 762 <span class="dm-agents__cast-name">${t}</span>
760 - ${s?l`<span class="dm-agents__cast-vibes">${s}</span>`:""}
763 + ${s?c`<span class="dm-agents__cast-vibes">${s}</span>`:""}
761 764 <span class="dm-agents__cast-good">${n}</span>
762 765 <os-badge>${o}</os-badge>
763 766 </div>
764 - `}function Nn(e){const t=e.preview??[];return t.length===0?null:l`
767 + `}function so(e){const t=e.preview??[];return t.length===0?null:c`
765 768 <div class="dm-agents__cast-head">
766 769 <h3>${r("The crew you would get")}</h3>
767 770 <span class="dm-agents__cast-count">${t.length}</span>
768 771 </div>
769 772 <div class="dm-agents__cast dm-agents__cast--preview" role="list">
770 - ${t.map(s=>l`
773 + ${t.map(s=>c`
771 774 <os-card class="dm-agents__cast-card" role="listitem">
772 - ${St(l`<img
775 + ${Ft(c`<img
773 776 class="dm-agents__cast-face"
774 - src=${J(s.face,88)}
777 + src=${oe(s.face,88)}
775 778 alt=""
776 779 width="88"
777 780 height="88"
778 781 />`,s.name,s.vibes,s.description,s.roleLabel)}
@@ -778,18 +781,18 @@
778 781 />`,s.name,s.vibes,s.description,s.roleLabel)}
779 782 </os-card>
780 783 `)}
781 784 </div>
782 - `}function Dn(e,t){if(!t.enabled){const o=t.canEnable?r("Turn the Agents framework on in OpenStation Preferences → Features to hire this crew, or cast your own."):r("Ask an administrator to turn the Agents framework on in OpenStation Preferences → Features."),i=t.canEnable?l`
785 + `}function no(e,t){if(!t.enabled){const o=t.canEnable?r("Turn the Agents framework on in OpenStation Preferences → Features to hire this crew, or cast your own."):r("Ask an administrator to turn the Agents framework on in OpenStation Preferences → Features."),i=t.canEnable?c`
783 786 <os-button
784 787 slot="cta"
785 788 class="dm-agents__enable"
786 789 variant="primary"
787 - @click=${()=>Mn()}
790 + @click=${()=>Jn()}
788 791 >
789 792 ${r("Turn on Agents")}
790 793 </os-button>
791 - `:"",a=Nn(t);return a===null?l`
794 + `:"",a=so(t);return a===null?c`
792 795 <os-empty-state
793 796 icon="superhero"
794 797 heading=${r("Agents are turned off")}
795 798 description=${o}
@@ -795,9 +798,9 @@
795 798 description=${o}
796 799 >
797 800 ${i}
798 801 </os-empty-state>
799 - `:l`
802 + `:c`
800 803 <div class="dm-agents__off-head">
801 804 <div class="dm-agents__off-copy">
802 805 <h3>${r("Agents are turned off")}</h3>
803 806 <p>${o}</p>
@@ -804,15 +807,15 @@
804 807 </div>
805 808 ${i}
806 809 </div>
807 810 ${a}
808 - `}const s=k(e),n=o=>t.roleLabels[o]??o;if(t.list.length===0){const o=t.canManage?r("Cast your first agent: describe what it should do, give it a face and a voice, then pick the abilities it may use."):r("An administrator has not created any agents on this site yet.");return l`
811 + `}const s=k(e),n=o=>t.roleLabels[o]??o;if(t.list.length===0){const o=t.canManage?r("Cast your first agent: describe what it should do, give it a face and a voice, then pick the abilities it may use."):r("An administrator has not created any agents on this site yet.");return c`
809 812 <os-empty-state
810 813 icon="superhero"
811 814 heading=${r("No agents yet")}
812 815 description=${o}
813 816 >
814 - ${t.canManage?l`
817 + ${t.canManage?c`
815 818 <os-button
816 819 slot="cta"
817 820 class="dm-agents__create"
818 821 variant="primary"
@@ -822,15 +825,15 @@
822 825 ${r("Cast an agent")}
823 826 </os-button>
824 827 `:""}
825 828 </os-empty-state>
826 - `}return l`
829 + `}return c`
827 830 <div class="dm-agents__cast-head">
828 831 <h3>${r("Your cast")}</h3>
829 832 <span class="dm-agents__cast-count">${t.list.length}</span>
830 833 </div>
831 834 <div class="dm-agents__cast" role="list">
832 - ${t.list.map(o=>l`
835 + ${t.list.map(o=>c`
833 836 <os-card
834 837 class="dm-agents__cast-card"
835 838 role="listitem"
836 839 interactive
@@ -837,11 +840,11 @@
837 840 data-agent-id=${String(o.id)}
838 841 ?selected=${o.id===e.state.item}
839 842 @os-card-click=${()=>void e.dispatch("open",{item:o.id})}
840 843 >
841 - ${St(l`<img
844 + ${Ft(c`<img
842 845 class="dm-agents__cast-face"
843 - src=${ye(o,88)}
846 + src=${Te(o,88)}
844 847 alt=""
845 848 width="88"
846 849 height="88"
847 850 />`,o.name,o.vibes,o.description||r("No description yet."),n(o.role))}
@@ -846,9 +849,9 @@
846 849 height="88"
847 850 />`,o.name,o.vibes,o.description||r("No description yet."),n(o.role))}
848 851 </os-card>
849 852 `)}
850 - ${t.canManage?l`
853 + ${t.canManage?c`
851 854 <os-card
852 855 class="dm-agents__cast-new"
853 856 role="listitem"
854 857 interactive
@@ -864,10 +867,10 @@
864 867 </div>
865 868 </os-card>
866 869 `:""}
867 870 </div>
868 - `}const Ln="my-wordpress",Ue=Object.freeze({userId:null,userName:"",requestedAt:0});function At(){return window.wp?.os}let we=null;function _e(){if(we)return we;const e=At()?.createSharedStore;return typeof e!="function"?null:(we=e("desktop-mode/my-wordpress/footprint-target",()=>({...Ue})),we)}function Pn(e,t=""){const s=_e();if(s){s.state.userId=e,s.state.userName=t,s.state.requestedAt=Date.now(),s.notify();return}window._wpdFootprintTarget={userId:e,userName:t,requestedAt:Date.now()}}function Rn(){const e=_e();return e?{...e.state}:window._wpdFootprintTarget??{...Ue}}function On(){const e=_e();e&&(e.state.userId=null,e.state.userName="",e.state.requestedAt=0,e.notify());const t=window;t._wpdFootprintTarget&&(t._wpdFootprintTarget={...Ue})}function Fn(e){const t=_e();return t?t.subscribe(s=>e({...s})):()=>{}}function Wn(e){const t=Number(e.userId);!Number.isFinite(t)||t<=0||(Pn(t,e.userName??""),At()?.openWindow?.(Ln,{source:"my-wordpress/open-user-footprint"}))}function Mt(e,t,s,n,o={}){const i=k(e),a=t.abilities,c=i.abilityQuery.trim().toLowerCase(),u=m=>c===""||m.label.toLowerCase().includes(c)||m.description.toLowerCase().includes(c)||m.slug.toLowerCase().includes(c),p=new Map;for(const m of a.filter(u)){const h=m.category||r("Other");p.set(h,[...p.get(h)??[],m])}const d=a.length>bn,f=(m,h)=>c!==""?!0:i.abilityOpen.get(m)??(!d||h.some(w=>s.includes(w.slug)));return l`
869 - ${d||c!==""?l`
871 + `}const oo="my-wordpress",Qe=Object.freeze({userId:null,userName:"",requestedAt:0});function Wt(){return window.wp?.os}let Ce=null;function Ee(){if(Ce)return Ce;const e=Wt()?.createSharedStore;return typeof e!="function"?null:(Ce=e("desktop-mode/my-wordpress/footprint-target",()=>({...Qe})),Ce)}function io(e,t=""){const s=Ee();if(s){s.state.userId=e,s.state.userName=t,s.state.requestedAt=Date.now(),s.notify();return}window._wpdFootprintTarget={userId:e,userName:t,requestedAt:Date.now()}}function ro(){const e=Ee();return e?{...e.state}:window._wpdFootprintTarget??{...Qe}}function ao(){const e=Ee();e&&(e.state.userId=null,e.state.userName="",e.state.requestedAt=0,e.notify());const t=window;t._wpdFootprintTarget&&(t._wpdFootprintTarget={...Qe})}function lo(e){const t=Ee();return t?t.subscribe(s=>e({...s})):()=>{}}function co(e){const t=Number(e.userId);if(!Number.isFinite(t)||t<=0)return;const s=e.userName??"";io(t,s),Wt()?.openWindow?.(oo,{source:"my-wordpress/open-user-footprint",params:{footprint:t,fpName:s}})}function Ut(e,t,s,n,o={}){const i=k(e),a=t.abilities,l=i.abilityQuery.trim().toLowerCase(),u=m=>l===""||m.label.toLowerCase().includes(l)||m.description.toLowerCase().includes(l)||m.slug.toLowerCase().includes(l),d=new Map;for(const m of a.filter(u)){const h=m.category||r("Other");d.set(h,[...d.get(h)??[],m])}const p=a.length>Yn,f=(m,h)=>l!==""?!0:i.abilityOpen.get(m)??(!p||h.some($=>s.includes($.slug)));return c`
872 + ${p||l!==""?c`
870 873 <os-text-field
871 874 class="dm-agents__ability-search"
872 875 type="search"
873 876 label=${r("Search abilities")}
@@ -875,50 +878,50 @@
875 878 placeholder=${r("custom fields, orders, media…")}
876 879 @os-input-change=${m=>{i.abilityQuery=m.detail?.value??"",e.repaint()}}
877 880 ></os-text-field>
878 881 `:""}
879 - ${p.size===0?l`<p class="dm-agents__hint">
882 + ${d.size===0?c`<p class="dm-agents__hint">
880 883 ${b(r('No ability matches "%s".'),i.abilityQuery.trim())}
881 884 </p>`:""}
882 - ${[...p.entries()].map(([m,h])=>{const w=h.filter(g=>s.includes(g.slug)).length,v=w>0?b(r("%1$d of %2$d"),w,h.length):String(h.length);return l`
885 + ${[...d.entries()].map(([m,h])=>{const $=h.filter(w=>s.includes(w.slug)).length,_=$>0?b(r("%1$d of %2$d"),$,h.length):String(h.length);return c`
883 886 <details
884 887 class="dm-agents__ability-group"
885 888 ?open=${f(m,h)}
886 - @toggle=${g=>{i.abilityOpen.set(m,g.target.open)}}
889 + @toggle=${w=>{i.abilityOpen.set(m,w.target.open)}}
887 890 >
888 891 <summary class="dm-agents__category">
889 892 <span class="dm-agents__category-name">${m}</span>
890 - <span class="dm-agents__category-count">${v}</span>
893 + <span class="dm-agents__category-count">${_}</span>
891 894 </summary>
892 - ${h.map(g=>l`
895 + ${h.map(w=>c`
893 896 <div class="dm-agents__ability">
894 897 <os-checkbox-label
895 - label=${g.label}
896 - ?checked=${s.includes(g.slug)}
898 + label=${w.label}
899 + ?checked=${s.includes(w.slug)}
897 900 ?disabled=${o.disabled===!0}
898 - @os-checkbox-change=${$=>n(g.slug,$.detail?.checked===!0)}
901 + @os-checkbox-change=${g=>n(w.slug,g.detail?.checked===!0)}
899 902 ></os-checkbox-label>
900 - <os-badge tone=${g.readonly?"neutral":"warning"}>
901 - ${g.readonly?r("read-only"):r("can modify")}
903 + <os-badge tone=${w.readonly?"neutral":"warning"}>
904 + ${w.readonly?r("read-only"):r("can modify")}
902 905 </os-badge>
903 - <p class="dm-agents__ability-desc">${g.description}</p>
906 + <p class="dm-agents__ability-desc">${w.description}</p>
904 907 </div>
905 908 `)}
906 909 </details>
907 910 `})}
908 - `}function Tt(e,t){return e.findIndex(s=>s.kind===t)}function Bn(e){const t=e.config_schema;return!!t?.properties&&"entityKinds"in t.properties}function qe(e,t){e(Tt(t,"chat")===-1?[{kind:"chat",config:{}},...t]:t)}function Un(e,t,s,n){const o=t[s],i=a=>{qe(n,t.map((c,u)=>u===s?{kind:c.kind,config:{...c.config,...a}}:c))};if(o.kind==="hook"){const a=e.hooks.map(c=>c.hook);return l`
911 + `}function qt(e,t){return e.findIndex(s=>s.kind===t)}function uo(e){const t=e.config_schema;return!!t?.properties&&"entityKinds"in t.properties}function Je(e,t){e(qt(t,"chat")===-1?[{kind:"chat",config:{}},...t]:t)}function po(e,t,s,n){const o=t[s],i=a=>{Je(n,t.map((l,u)=>u===s?{kind:l.kind,config:{...l.config,...a}}:l))};if(o.kind==="hook"){const a=e.hooks.map(l=>l.hook);return c`
909 912 <div class="dm-agents__trigger-config">
910 913 <os-text-field
911 914 label=${r("Hook name")}
912 915 value=${String(o.config.hook??"")}
913 916 ?readonly=${!e.canManage}
914 - @os-input-commit=${c=>i({hook:c.detail.value})}
917 + @os-input-commit=${l=>i({hook:l.detail.value})}
915 918 ></os-text-field>
916 - ${a.length>0?l`<p class="dm-agents__hint">
919 + ${a.length>0?c`<p class="dm-agents__hint">
917 920 ${b(r("Suggestions: %s"),a.join(", "))}
918 921 </p>`:""}
919 922 </div>
920 - `}return o.kind==="endpoint"?l`
923 + `}return o.kind==="endpoint"?c`
921 924 <div class="dm-agents__trigger-config">
922 925 <os-text-field
923 926 label=${r("Required capability")}
924 927 value=${String(o.config.capability??"")}
@@ -925,58 +928,58 @@
925 928 ?readonly=${!e.canManage}
926 929 @os-input-commit=${a=>i({capability:a.detail.value})}
927 930 ></os-text-field>
928 931 </div>
929 - `:""}function qn(e,t,s,n,o){const i=Tt(n,s.slug),a=i===-1?null:n[i],c=!t.canManage||k(e).agentBusy,u=()=>n.filter(d=>d.kind!==s.slug);let p="";if(s.slug==="chat")p="";else if(Bn(s)){const d=a?.config.entityKinds,f=Array.isArray(d)?d.filter(h=>typeof h=="string"):[],m=(h,w)=>{const v=w?[...new Set([...f,h])]:f.filter($=>$!==h),g=u();v.length>0&&g.push({kind:s.slug,config:{...a?.config??{},entityKinds:v}}),qe(o,g)};p=l`
932 + `:""}function fo(e,t,s,n,o){const i=qt(n,s.slug),a=i===-1?null:n[i],l=!t.canManage||k(e).agentBusy,u=()=>n.filter(p=>p.kind!==s.slug);let d="";if(s.slug==="chat")d="";else if(uo(s)){const p=a?.config.entityKinds,f=Array.isArray(p)?p.filter(h=>typeof h=="string"):[],m=(h,$)=>{const _=$?[...new Set([...f,h])]:f.filter(g=>g!==h),w=u();_.length>0&&w.push({kind:s.slug,config:{...a?.config??{},entityKinds:_}}),Je(o,w)};d=c`
930 933 <div class="dm-agents__trigger-config">
931 - ${vn.map(h=>l`
934 + ${Xn.map(h=>c`
932 935 <os-checkbox-label
933 936 label=${h}
934 937 ?checked=${f.includes(h)}
935 - ?disabled=${c}
936 - @os-checkbox-change=${w=>m(h,w.detail?.checked===!0)}
938 + ?disabled=${l}
939 + @os-checkbox-change=${$=>m(h,$.detail?.checked===!0)}
937 940 ></os-checkbox-label>
938 941 `)}
939 942 </div>
940 - `}else p=l`
943 + `}else d=c`
941 944 <div class="dm-agents__trigger-config">
942 945 <os-checkbox-label
943 946 label=${r("On")}
944 947 ?checked=${a!==null}
945 - ?disabled=${c}
946 - @os-checkbox-change=${d=>qe(o,d.detail?.checked===!0?[...u(),{kind:s.slug,config:{}}]:u())}
948 + ?disabled=${l}
949 + @os-checkbox-change=${p=>Je(o,p.detail?.checked===!0?[...u(),{kind:s.slug,config:{}}]:u())}
947 950 ></os-checkbox-label>
948 951 </div>
949 - ${a?Un(t,n,i,o):""}
950 - `;return l`
952 + ${a?po(t,n,i,o):""}
953 + `;return c`
951 954 <div class="dm-agents__trigger">
952 955 <div class="dm-agents__trigger-head">
953 956 <strong>${s.label}</strong>
954 - ${s.slug==="chat"?l`<os-badge tone="neutral">${r("Always on")}</os-badge>`:""}
957 + ${s.slug==="chat"?c`<os-badge tone="neutral">${r("Always on")}</os-badge>`:""}
955 958 </div>
956 - ${s.description?l`<p class="dm-agents__trigger-desc">${s.description}</p>`:""}
957 - ${p}
959 + ${s.description?c`<p class="dm-agents__trigger-desc">${s.description}</p>`:""}
960 + ${d}
958 961 </div>
959 - `}function Ct(e,t,s,n){const o=t.triggerKinds.filter(i=>i.wired!==!1);return l`
962 + `}function Bt(e,t,s,n){const o=t.triggerKinds.filter(i=>i.wired!==!1);return c`
960 963 <div class="dm-agents__pane">
961 964 <p class="dm-agents__hint">
962 965 ${r("Chat is always on. Tick where else this site should reach the agent; a door with nothing ticked stays closed.")}
963 966 </p>
964 - ${o.map(i=>qn(e,t,i,s,n))}
967 + ${o.map(i=>fo(e,t,i,s,n))}
965 968 </div>
966 - `}function jn(e,t){return(!e.agentDraft||e.agentDraftFor!==t.id)&&(e.agentDraft={name:t.name,description:t.description,instructions:t.instructions,role:t.role},e.agentDraftFor=t.id),e.agentDraft}function Kn(e,t,s){const n=k(e),o=!t.canManage,i=jn(n,s),a=i.name!==s.name||i.description!==s.description||i.instructions!==s.instructions||i.role!==s.role;return l`
969 + `}function mo(e,t){return(!e.agentDraft||e.agentDraftFor!==t.id)&&(e.agentDraft={name:t.name,description:t.description,instructions:t.instructions,role:t.role},e.agentDraftFor=t.id),e.agentDraft}function ho(e,t,s){const n=k(e),o=!t.canManage,i=mo(n,s),a=i.name!==s.name||i.description!==s.description||i.instructions!==s.instructions||i.role!==s.role;return c`
967 970 <div class="dm-agents__pane">
968 971 <os-text-field
969 972 label=${r("Name")}
970 973 value=${i.name}
971 974 ?readonly=${o}
972 - @os-input-change=${c=>{i.name=c.detail.value,e.repaint()}}
975 + @os-input-change=${l=>{i.name=l.detail.value,e.repaint()}}
973 976 ></os-text-field>
974 977 <os-text-field
975 978 label=${r("When to use (description)")}
976 979 value=${i.description}
977 980 ?readonly=${o}
978 - @os-input-change=${c=>{i.description=c.detail.value,e.repaint()}}
981 + @os-input-change=${l=>{i.description=l.detail.value,e.repaint()}}
979 982 ></os-text-field>
980 983 <os-textarea
981 984 label=${r("Instructions (system prompt)")}
982 985 value=${i.instructions}
@@ -981,20 +984,20 @@
981 984 label=${r("Instructions (system prompt)")}
982 985 value=${i.instructions}
983 986 rows="10"
984 987 ?readonly=${o}
985 - @os-input-change=${c=>{i.instructions=c.detail.value,e.repaint()}}
988 + @os-input-change=${l=>{i.instructions=l.detail.value,e.repaint()}}
986 989 ></os-textarea>
987 - ${o?l`<p class="dm-agents__hint">${r("Role")}: ${s.role}</p>`:l`
988 - ${t.roles?l`
990 + ${o?c`<p class="dm-agents__hint">${r("Role")}: ${s.role}</p>`:c`
991 + ${t.roles?c`
989 992 <os-select
990 993 label=${r("Role")}
991 994 value=${i.role}
992 - @os-pick=${c=>{i.role=c.detail?.value??i.role,e.repaint()}}
995 + @os-pick=${l=>{i.role=l.detail?.value??i.role,e.repaint()}}
993 996 >
994 - ${kt(t.roles,i.role)}
997 + ${Ot(t.roles,i.role)}
995 998 </os-select>
996 - `:l`
999 + `:c`
997 1000 <os-select label=${r("Role")} value=${i.role} disabled>
998 1001 <os-option value=${i.role}>${i.role}</os-option>
999 1002 </os-select>
1000 1003 `}
@@ -1002,38 +1005,38 @@
1002 1005 ${r("The agent acts with this role's capabilities — pick the least privilege that still lets it do its job.")}
1003 1006 </p>
1004 1007 <os-button
1005 1008 ?disabled=${n.agentBusy||!a}
1006 - @click=${()=>void x(e,"agent-update",{id:s.id,name:i.name,description:i.description,instructions:i.instructions,role:i.role})}
1009 + @click=${()=>void ie(e,"agent-update",{id:s.id,name:i.name,description:i.description,instructions:i.instructions,role:i.role})}
1007 1010 >
1008 1011 ${r("Save")}
1009 1012 </os-button>
1010 1013 `}
1011 1014 </div>
1012 - `}function zn(e,t,s){return l`
1015 + `}function go(e,t,s){return c`
1013 1016 <div class="dm-agents__pane">
1014 1017 <p class="dm-agents__hint">
1015 1018 ${r("The agent may only call abilities ticked here — and every call is still gated by the ability's own permission check against the agent's role.")}
1016 1019 </p>
1017 - ${Mt(e,t,s.abilities,(n,o)=>{const i=o?Array.from(new Set([...s.abilities,n])):s.abilities.filter(a=>a!==n);x(e,"agent-update",{id:s.id,abilities:i})},{disabled:!t.canManage||k(e).agentBusy})}
1020 + ${Ut(e,t,s.abilities,(n,o)=>{const i=o?Array.from(new Set([...s.abilities,n])):s.abilities.filter(a=>a!==n);ie(e,"agent-update",{id:s.id,abilities:i})},{disabled:!t.canManage||k(e).agentBusy})}
1018 1021 </div>
1019 - `}function Hn(e,t,s){const n=k(e),o=e.state,i=e.data.sections.some(c=>c.id==="users"),a=l`
1022 + `}function yo(e,t,s){const n=k(e),o=e.state,i=e.data.sections.some(l=>l.id==="users"),a=c`
1020 1023 <os-tabs
1021 1024 class="dm-agents__tabs"
1022 1025 value=${o.pane}
1023 1026 label=${r("Agent detail")}
1024 - @os-tab-change=${c=>{c.detail.value&&e.local("agent-pane",{pane:c.detail.value})}}
1027 + @os-tab-change=${l=>{l.detail.value&&e.local("agent-pane",{pane:l.detail.value})}}
1025 1028 >
1026 - ${[["define",r("Define")],["tools",r("Tools")],["triggers",r("Triggers")]].map(([c,u])=>l`
1027 - <os-tab value=${c}>${u}</os-tab>
1029 + ${[["define",r("Define")],["tools",r("Tools")],["triggers",r("Triggers")]].map(([l,u])=>c`
1030 + <os-tab value=${l}>${u}</os-tab>
1028 1031 `)}
1029 1032 </os-tabs>
1030 - `;return l`
1033 + `;return c`
1031 1034 <os-button class="dm-agents__back" variant="link" @click=${()=>void e.dispatch("open",{item:0})}>
1032 1035 ${r("‹ Your cast")}
1033 1036 </os-button>
1034 1037 <div class="dm-agents__detail-head">
1035 - <img class="dm-agents__detail-avatar" src=${ye(s,96)} alt="" />
1038 + <img class="dm-agents__detail-avatar" src=${Te(s,96)} alt="" />
1036 1039 <div class="dm-agents__detail-title">
1037 1040 <h3>${s.name}</h3>
1038 1041 <span class="dm-agents__detail-slug">@agent-${s.slug}</span>
1039 1042 </div>
@@ -1038,36 +1041,36 @@
1038 1041 <span class="dm-agents__detail-slug">@agent-${s.slug}</span>
1039 1042 </div>
1040 1043 </div>
1041 1044 <div class="dm-agents__detail-actions">
1042 - <os-button @click=${()=>Tn(s)}>
1045 + <os-button @click=${()=>Zn(s)}>
1043 1046 ${r("Open profile")}
1044 1047 </os-button>
1045 - ${i?l`
1048 + ${i?c`
1046 1049 <os-button
1047 - @click=${()=>Wn({userId:s.id,userName:s.name})}
1050 + @click=${()=>co({userId:s.id,userName:s.name})}
1048 1051 >
1049 1052 ${r("View contributions")}
1050 1053 </os-button>
1051 1054 `:""}
1052 - ${t.canManage?l`
1055 + ${t.canManage?c`
1053 1056 <os-button
1054 1057 ?disabled=${n.agentBusy}
1055 - @click=${()=>void En(s).then(c=>e.local("agent-notice",{notice:c}))}
1058 + @click=${()=>void eo(s).then(l=>e.local("agent-notice",{notice:l}))}
1056 1059 >
1057 1060 ${r("Send to Desktop")}
1058 1061 </os-button>
1059 1062 `:""}
1060 - ${t.canInvoke?l`
1063 + ${t.canInvoke?c`
1061 1064 <os-button
1062 1065 variant="primary"
1063 1066 ?disabled=${!t.aiReady}
1064 - @click=${()=>bt(t,s)}
1067 + @click=${()=>Rt(t,s)}
1065 1068 >
1066 1069 ${r("Chat")}
1067 1070 </os-button>
1068 1071 `:""}
1069 - ${t.canManage?l`
1072 + ${t.canManage?c`
1070 1073 <os-button
1071 1074 ?disabled=${n.agentBusy}
1072 1075 os-action="agent-delete"
1073 1076 os-arg-id=${String(s.id)}
@@ -1079,36 +1082,36 @@
1079 1082 </os-button>
1080 1083 `:""}
1081 1084 </div>
1082 1085 ${a}
1083 - ${o.pane==="define"?Kn(e,t,s):""}
1084 - ${o.pane==="tools"?zn(e,t,s):""}
1085 - ${o.pane==="triggers"?Ct(e,t,s.triggers,c=>{x(e,"agent-update",{id:s.id,triggers:c})}):""}
1086 - `}const Xn=()=>[r("Describe"),r("Meet"),r("Powers"),r("Summon"),r("Launch")];function je(e){return e.name.trim()!==""}function Yn(e,t){const s=e.state.cast,n=e.state.wstep,o=l`
1086 + ${o.pane==="define"?ho(e,t,s):""}
1087 + ${o.pane==="tools"?go(e,t,s):""}
1088 + ${o.pane==="triggers"?Bt(e,t,s.triggers,l=>{ie(e,"agent-update",{id:s.id,triggers:l})}):""}
1089 + `}const $o=()=>[r("Describe"),r("Meet"),r("Powers"),r("Summon"),r("Launch")];function Ze(e){return e.name.trim()!==""}function wo(e,t){const s=e.state.cast,n=e.state.wstep,o=c`
1087 1090 <os-steps horizontal class="dm-agents__trail">
1088 - ${Xn().map((i,a)=>l`
1091 + ${$o().map((i,a)=>c`
1089 1092 <os-step
1090 1093 title=${i}
1091 1094 ?done=${a<n}
1092 1095 ?current=${a===n}
1093 - ?interactive=${a<n}
1094 - @os-step-click=${()=>{a<n&&e.local("agent-step",{step:a})}}
1096 + ?interactive=${a!==n}
1097 + @os-step-click=${()=>{a!==n&&e.local("agent-step",{step:a})}}
1095 1098 ></os-step>
1096 1099 `)}
1097 1100 </os-steps>
1098 - `;return l`
1101 + `;return c`
1099 1102 <div class="dm-agents__wizard">
1100 1103 <div class="dm-agents__wiz-head">
1101 1104 <h3>${r("New agent")}</h3>
1102 1105 </div>
1103 1106 ${o}
1104 - ${n===0?Gn(e,t,s):""}
1105 - ${n===1?Vn(e,s):""}
1106 - ${n===2?Qn(e,t,s):""}
1107 - ${n===3?Jn(e,t,s):""}
1108 - ${n===4?xn(e,t,s):""}
1107 + ${n===0?vo(e,t,s):""}
1108 + ${n===1?_o(e,s):""}
1109 + ${n===2?bo(e,t,s):""}
1110 + ${n===3?So(e,t,s):""}
1111 + ${n===4?Ao(e,t,s):""}
1109 1112 </div>
1110 - `}function ee(e,t){return l`
1113 + `}function re(e,t){return c`
1111 1114 <os-button
1112 1115 variant="ghost"
1113 1116 ?disabled=${k(e).agentBusy||t.drafting}
1114 1117 @click=${()=>e.local("agent-cancel")}
@@ -1114,31 +1117,31 @@
1114 1117 @click=${()=>e.local("agent-cancel")}
1115 1118 >
1116 1119 ${r("Cancel")}
1117 1120 </os-button>
1118 - `}function Gn(e,t,s){const n=()=>{s.instructions===""&&s.brief.trim()!==""&&(s.instructions=s.brief.trim())},o=()=>{if(s.brief.trim()===""){e.local("agent-brief-error",{msg:r("Describe the agent first. A sentence is enough.")});return}s.drafting=!0,x(e,"agent-draft")};return l`
1119 - ${t.list.length>0?l`
1121 + `}function vo(e,t,s){const n=()=>{if(s.brief.trim()===""){e.local("agent-brief-error",{msg:r("Describe the agent first. A sentence is enough.")});return}s.drafting=!0,ie(e,"agent-draft")};return c`
1122 + ${t.list.length>0?c`
1120 1123 <h4 class="dm-agents__wiz-heading">${r("Start from someone")}</h4>
1121 1124 <p class="dm-agents__hint">
1122 1125 ${r("Copies their instructions and abilities, and rolls a new face. Nothing you pick is changed.")}
1123 1126 </p>
1124 1127 <div class="dm-agents__starters">
1125 - ${t.list.map(i=>l`
1128 + ${t.list.map(o=>c`
1126 1129 <os-card
1127 1130 class="dm-agents__starter"
1128 1131 interactive
1129 - @os-card-click=${()=>e.local("agent-start",{from:i})}
1132 + @os-card-click=${()=>e.local("agent-start",{from:o})}
1130 1133 >
1131 1134 <img
1132 1135 class="dm-agents__starter-face"
1133 - src=${ye(i,76)}
1136 + src=${Te(o,76)}
1134 1137 alt=""
1135 1138 width="76"
1136 1139 height="76"
1137 1140 />
1138 - <span class="dm-agents__starter-name">${i.name}</span>
1141 + <span class="dm-agents__starter-name">${o.name}</span>
1139 1142 <span class="dm-agents__starter-vibes">
1140 - ${i.vibes||i.description}
1143 + ${o.vibes||o.description}
1141 1144 </span>
1142 1145 </os-card>
1143 1146 `)}
1144 1147 </div>
@@ -1156,17 +1159,17 @@
1156 1159 value=${s.brief}
1157 1160 rows="5"
1158 1161 placeholder=${r("Go through my drafts once a week and tell me which ones are closest to finished.")}
1159 1162 ?invalid=${e.state.briefError!==""}
1160 - @os-input-change=${i=>{s.brief=i.detail?.value??"",e.state.briefError!==""&&e.local("agent-brief-error",{msg:""})}}
1163 + @os-input-change=${o=>{s.brief=o.detail?.value??"",e.state.briefError!==""&&e.local("agent-brief-error",{msg:""})}}
1161 1164 ></os-textarea>
1162 1165 </os-field-row>
1163 1166 <div class="dm-agents__actions">
1164 - ${t.aiReady?l`
1167 + ${t.aiReady?c`
1165 1168 <os-button
1166 1169 variant="holo"
1167 1170 ?busy=${s.drafting}
1168 - @click=${o}
1171 + @click=${n}
1169 1172 >
1170 1173 ${r("Draft it for me")}
1171 1174 </os-button>
1172 1175 `:""}
@@ -1172,27 +1175,27 @@
1172 1175 `:""}
1173 1176 <os-button
1174 1177 variant=${t.aiReady?"ghost":"primary"}
1175 1178 ?disabled=${s.drafting}
1176 - @click=${()=>{n(),e.local("agent-step",{step:1})}}
1179 + @click=${()=>e.local("agent-step",{step:1})}
1177 1180 >
1178 1181 ${t.aiReady?r("I will fill it in myself"):r("Continue")}
1179 1182 </os-button>
1180 1183 <span class="os-app__spacer"></span>
1181 - ${ee(e,s)}
1184 + ${re(e,s)}
1182 1185 </div>
1183 - `}function Vn(e,t){const s=k(e),n=gn(t.stripSeed,Fe);return l`
1186 + `}function _o(e,t){const s=k(e),n=jn(t.stripSeed,Ge);return c`
1184 1187 <div class="dm-agents__meet">
1185 1188 <div class="dm-agents__portrait">
1186 1189 <img
1187 1190 class="dm-agents__portrait-face"
1188 - src=${J(t.face,176)}
1191 + src=${oe(t.face,176)}
1189 1192 alt=""
1190 1193 width="176"
1191 1194 height="176"
1192 1195 />
1193 1196 <div class="dm-agents__faces" role="radiogroup" aria-label=${r("Face")}>
1194 - ${n.map(o=>l`
1197 + ${n.map(o=>c`
1195 1198 <button
1196 1199 type="button"
1197 1200 class="dm-agents__face-pick ${o.seed===t.faceSeed?"is-picked":""}"
1198 1201 role="radio"
@@ -1198,25 +1201,25 @@
1198 1201 role="radio"
1199 1202 aria-checked=${o.seed===t.faceSeed?"true":"false"}
1200 1203 @click=${()=>e.local("agent-wiz",{faceSeed:o.seed,face:o.look})}
1201 1204 >
1202 - <img src=${J(o.look,44)} alt="" width="44" height="44" />
1205 + <img src=${oe(o.look,44)} alt="" width="44" height="44" />
1203 1206 </button>
1204 1207 `)}
1205 1208 </div>
1206 1209 <os-button
1207 1210 variant="secondary"
1208 - @click=${()=>e.local("agent-wiz",{stripSeed:t.stripSeed+Fe})}
1211 + @click=${()=>e.local("agent-wiz",{stripSeed:t.stripSeed+Ge})}
1209 1212 >
1210 1213 ${r("Surprise me")}
1211 1214 </os-button>
1212 1215 <div class="dm-agents__portrait-chips">
1213 - <os-chip size="compact" label=${$n(t.face)}></os-chip>
1214 - <os-chip size="compact" label=${wn(t.face)}></os-chip>
1216 + <os-chip size="compact" label=${Kn(t.face)}></os-chip>
1217 + <os-chip size="compact" label=${Hn(t.face)}></os-chip>
1215 1218 </div>
1216 1219 </div>
1217 1220 <div class="dm-agents__meet-fields">
1218 - ${t.copiedFrom?l`<os-notice tone="info">
1221 + ${t.copiedFrom?c`<os-notice tone="info">
1219 1222 ${b(r("Copied from %s, with a face of its own."),t.copiedFrom)}
1220 1223 </os-notice>`:""}
1221 1224 <os-field-row error=${s.nameError}>
1222 1225 <os-text-field
@@ -1223,9 +1226,9 @@
1223 1226 os-field-control
1224 1227 label=${r("Name")}
1225 1228 value=${t.name}
1226 1229 ?invalid=${s.nameError!==""}
1227 - @os-input-change=${o=>{const i=je(t)&&s.nameError==="";t.name=o.detail?.value??"",s.nameError="",i!==je(t)&&e.repaint()}}
1230 + @os-input-change=${o=>{const i=Ze(t)&&s.nameError==="";t.name=o.detail?.value??"",s.nameError="",i!==Ze(t)&&e.repaint()}}
1228 1231 ></os-text-field>
1229 1232 </os-field-row>
1230 1233 <os-text-field
1231 1234 label=${r("Vibes")}
@@ -1250,16 +1253,16 @@
1250 1253 </os-button>
1251 1254 <span class="os-app__spacer"></span>
1252 1255 <os-button
1253 1256 variant="primary"
1254 - ?disabled=${!je(t)}
1257 + ?disabled=${!Ze(t)}
1255 1258 @click=${()=>e.local("agent-step",{step:2})}
1256 1259 >
1257 1260 ${r("Continue")}
1258 1261 </os-button>
1259 - ${ee(e,t)}
1262 + ${re(e,t)}
1260 1263 </div>
1261 - `}function Qn(e,t,s){return l`
1264 + `}function bo(e,t,s){return c`
1262 1265 <os-select
1263 1266 class="dm-agents__role-select"
1264 1267 label=${r("Role")}
1265 1268 value=${s.role}
@@ -1264,16 +1267,16 @@
1264 1267 label=${r("Role")}
1265 1268 value=${s.role}
1266 1269 @os-pick=${n=>e.local("agent-wiz",{role:n.detail?.value??s.role})}
1267 1270 >
1268 - ${t.roles===null?l`<os-option value=${s.role}>${s.role}</os-option>`:kt(t.roles,s.role)}
1271 + ${t.roles===null?c`<os-option value=${s.role}>${s.role}</os-option>`:Ot(t.roles,s.role)}
1269 1272 </os-select>
1270 1273 <p class="dm-agents__hint">
1271 1274 ${r("The agent acts with this role's capabilities. Pick the least privilege that still lets it do its job.")}
1272 1275 </p>
1273 1276 <h4 class="dm-agents__wiz-heading">${r("What it may call (abilities)")}</h4>
1274 - ${t.abilities.length===0?"":l`
1275 - ${Zn(e,t,s)}
1277 + ${t.abilities.length===0?"":c`
1278 + ${ko(e,t,s)}
1276 1279 <p class="dm-agents__hint">
1277 1280 ${r("The agent may only call abilities ticked here, and every call is still gated by the ability's own permission check against the agent's role.")}
1278 1281 </p>
1279 1282 `}
@@ -1284,12 +1287,12 @@
1284 1287 <span class="os-app__spacer"></span>
1285 1288 <os-button variant="primary" @click=${()=>e.local("agent-step",{step:3})}>
1286 1289 ${r("Continue")}
1287 1290 </os-button>
1288 - ${ee(e,s)}
1291 + ${re(e,s)}
1289 1292 </div>
1290 - `}function Zn(e,t,s){return Mt(e,t,s.abilities,(n,o)=>{const i=new Set(s.abilities);o?i.add(n):i.delete(n),e.local("agent-wiz",{abilities:[...i]})})}function Jn(e,t,s){return l`
1291 - ${Ct(e,t,s.triggers,n=>e.local("agent-wiz",{triggers:n}))}
1293 + `}function ko(e,t,s){return Ut(e,t,s.abilities,(n,o)=>{const i=new Set(s.abilities);o?i.add(n):i.delete(n),e.local("agent-wiz",{abilities:[...i]})})}function So(e,t,s){return c`
1294 + ${Bt(e,t,s.triggers,n=>e.local("agent-wiz",{triggers:n}))}
1292 1295 <div class="dm-agents__actions">
1293 1296 <os-button variant="ghost" @click=${()=>e.local("agent-step",{step:2})}>
1294 1297 ${r("Back")}
1295 1298 </os-button>
@@ -1295,19 +1298,19 @@
1295 1298 </os-button>
1296 1299 <span class="os-app__spacer"></span>
1297 1300 <os-button
1298 1301 variant="primary"
1299 - @click=${()=>e.local("agent-step",{step:kn})}
1302 + @click=${()=>e.local("agent-step",{step:Gn})}
1300 1303 >
1301 1304 ${r("Continue")}
1302 1305 </os-button>
1303 - ${ee(e,s)}
1306 + ${re(e,s)}
1304 1307 </div>
1305 - `}function xn(e,t,s){const n=k(e),o=t.canInvoke&&t.aiReady,i=d=>t.abilities.find(f=>f.slug===d)?.label??d,a=d=>t.triggerKinds.find(f=>f.slug===d)?.label??d,c=t.roles?.find(d=>d.slug===s.role)?.label??t.roleLabels[s.role]??s.role,u=s.triggers.length===0?r("No triggers configured: reachable in chat."):b(r("Starts from: %s."),s.triggers.map(d=>a(d.kind)).join(", ")),p=d=>{if(s.name.trim()===""){n.nameError=r("Agent name is required."),e.local("agent-step",{step:1});return}n.chatAfterCreate=d,x(e,"agent-create")};return l`
1308 + `}function Ao(e,t,s){const n=k(e),o=t.canInvoke&&t.aiReady,i=p=>t.abilities.find(f=>f.slug===p)?.label??p,a=p=>t.triggerKinds.find(f=>f.slug===p)?.label??p,l=t.roles?.find(p=>p.slug===s.role)?.label??t.roleLabels[s.role]??s.role,u=s.triggers.length===0?r("No triggers configured: reachable in chat."):b(r("Starts from: %s."),s.triggers.map(p=>a(p.kind)).join(", ")),d=p=>{if(s.name.trim()===""){n.nameError=r("Agent name is required."),e.local("agent-step",{step:1});return}n.chatAfterCreate=p,ie(e,"agent-create")};return c`
1306 1309 <os-card class="dm-agents__summary">
1307 1310 <img
1308 1311 class="dm-agents__summary-face"
1309 - src=${J(s.face,96)}
1312 + src=${oe(s.face,96)}
1310 1313 alt=""
1311 1314 width="96"
1312 1315 height="96"
1313 1316 />
@@ -1312,20 +1315,20 @@
1312 1315 height="96"
1313 1316 />
1314 1317 <div class="dm-agents__summary-text">
1315 1318 <h4>${s.name}</h4>
1316 - ${s.vibes?l`<p class="dm-agents__summary-vibes">${s.vibes}</p>`:""}
1319 + ${s.vibes?c`<p class="dm-agents__summary-vibes">${s.vibes}</p>`:""}
1317 1320 <p class="dm-agents__summary-desc">
1318 1321 ${s.description||r("No description yet.")}
1319 1322 </p>
1320 1323 <div class="dm-agents__chips">
1321 - <os-chip size="compact" label=${c}></os-chip>
1322 - ${s.abilities.map(d=>l`<os-chip size="compact" label=${i(d)}></os-chip>`)}
1324 + <os-chip size="compact" label=${l}></os-chip>
1325 + ${s.abilities.map(p=>c`<os-chip size="compact" label=${i(p)}></os-chip>`)}
1323 1326 </div>
1324 - ${s.instructions===""?l`<p class="dm-agents__hint">
1325 - ${r("No instructions yet: the agent will improvise. You can add them any time in Define.")}
1326 - </p>`:l`<p class="dm-agents__summary-instr">${s.instructions}</p>`}
1327 - ${s.abilities.length===0?l`<p class="dm-agents__hint">
1327 + ${s.instructions===""?c`<p class="dm-agents__hint">
1328 + ${r("No instructions yet: the agent will improvise. Add them in Describe, or any time after in Define.")}
1329 + </p>`:c`<p class="dm-agents__summary-instr">${s.instructions}</p>`}
1330 + ${s.abilities.length===0?c`<p class="dm-agents__hint">
1328 1331 ${r("No abilities ticked: the agent can talk, but not touch the site.")}
1329 1332 </p>`:""}
1330 1333 <p class="dm-agents__hint">${u}</p>
1331 1334 </div>
@@ -1337,37 +1340,30 @@
1337 1340 <span class="os-app__spacer"></span>
1338 1341 <os-button
1339 1342 variant=${o?"secondary":"primary"}
1340 1343 ?disabled=${n.agentBusy}
1341 - @click=${()=>p(!1)}
1344 + @click=${()=>d(!1)}
1342 1345 >
1343 1346 ${r("Create agent")}
1344 1347 </os-button>
1345 - ${o?l`
1348 + ${o?c`
1346 1349 <os-button
1347 1350 variant="primary"
1348 1351 ?disabled=${n.agentBusy}
1349 - @click=${()=>p(!0)}
1352 + @click=${()=>d(!0)}
1350 1353 >
1351 1354 ${r("Create and chat")}
1352 1355 </os-button>
1353 1356 `:""}
1354 - ${ee(e,s)}
1357 + ${re(e,s)}
1355 1358 </div>
1356 - `}function eo(e){const t=e.data.agents;if(!t)return l`<os-empty-state>${r("This section is not available.")}</os-empty-state>`;const s=!t.enabled,n=e.state,o=t.list.find(a=>a.id===n.item)??null;let i;return n.casting&&n.cast?i=Yn(e,t):o?i=l`<div class="dm-agents__detail">${Hn(e,t,o)}</div>`:i=Dn(e,t),l`
1359 + `}function Mo(e){const t=e.data.agents;if(!t)return c`<os-empty-state>${r("This section is not available.")}</os-empty-state>`;const s=!t.enabled,n=e.state,o=t.list.find(a=>a.id===n.item)??null;let i;return n.casting&&n.cast?i=wo(e,t):o?i=c`<div class="dm-agents__detail">${yo(e,t,o)}</div>`:i=no(e,t),c`
1357 1360 <div class="dm-agents ${s?"is-disabled":""}">
1358 - ${In(t)}
1359 - ${n.agentNotice?l`<os-notice class="dm-agents__notice">${n.agentNotice}</os-notice>`:""}
1361 + ${to(t)}
1362 + ${n.agentNotice?c`<os-notice class="dm-agents__notice">${n.agentNotice}</os-notice>`:""}
1360 1363 <div class="dm-agents__view">${i}</div>
1361 1364 </div>
1362 - `}const Et=8;function to(e,t){e.style.visibility="hidden";const s=()=>{e.isConnected&&(t(e.getBoundingClientRect()),e.style.visibility="")};typeof requestAnimationFrame=="function"?requestAnimationFrame(s):s()}function so(e){to(e,t=>{t.right>window.innerWidth&&(e.style.left=`${Math.max(0,window.innerWidth-t.width-Et)}px`),t.bottom>window.innerHeight&&(e.style.top=`${Math.max(0,window.innerHeight-t.height-Et)}px`)})}const q=We("desktop-mode/my-wordpress/open-target",()=>({kind:null,entityId:"",id:0,title:"",requestedAt:0}));function no(){return{...q.state}}function oo(){q.state.kind=null,q.state.entityId="",q.state.id=0,q.state.title="",q.notify()}function io(e){return q.subscribe(t=>e({...t}))}const te=We("desktop-mode/agents/editor-target",()=>({agentId:null,requestedAt:0}));function ro(){return{...te.state}}function ao(){te.state.agentId=null,te.state.requestedAt=0,te.notify()}function lo(e){return te.subscribe(t=>e({...t}))}function ve(){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 co(e,t,s,n){ve().addFilter(e,t,s,n)}function uo(e,t,s,n){ve().addAction(e,t,s,n)}function po(e,t){return ve().removeAction(e,t)}function fo(e,t){return ve().removeFilter(e,t)}const It="X-WP-Nonce";function mo(e,t){const s=ho();if(!s)return t;const n=go(e);if(!n||!$o(n))return t;const o=t?.headers??(typeof Request<"u"&&e instanceof Request?e.headers:void 0),i=new Headers(o??{});return i.has(It)?t:(i.set(It,s),{...t??{},headers:i})}function ho(){if(typeof window>"u")return;const t=window.openStationConfig?.restNonce;return typeof t=="string"&&t.length>0?t:void 0}function go(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 $o(e){return typeof window>"u"||!window.location||e.origin!==window.location.origin?!1:!!(e.pathname.includes("/wp-json/")||e.searchParams.has("rest_route"))}function Ke(e,t,s={}){const n=window.wp?.os?.fetch;if(typeof n=="function")return n(e,t,s);const o=mo(e,t);return fetch(e,o)}const yo="http://localhost/";function Nt(e,t){const s=typeof window<"u"&&window.location?window.location.href:yo,n=new URL(e,s),o=t.replace(/^\/+/,""),i=o.indexOf("?"),a=i===-1?o:o.slice(0,i),c=i===-1?"":o.slice(i+1);if(n.searchParams.has("rest_route")){const u=n.searchParams.get("rest_route")??"/",p=u.endsWith("/")?u:u+"/";n.searchParams.set("rest_route",p+a)}else{const u=n.pathname.endsWith("/")?n.pathname:n.pathname+"/";n.pathname=u+a}return c&&new URLSearchParams(c).forEach((p,d)=>{n.searchParams.append(d,p)}),n.toString()}const Dt="desktop-mode/v1/agents/conversations";async function Lt(e,t,s={}){const n=await Ke(Nt(e.restRoot,t),{...s,headers:{"Content-Type":"application/json","X-WP-Nonce":e.restNonce,...s.headers??{}}},{source:"desktop-mode/agents",silent:!0}),o=await n.json().catch(()=>null);if(!n.ok){const i=o&&typeof o=="object"&&typeof o.message=="string"?o.message:`HTTP ${n.status}`;throw new Error(i)}return o}function wo(e){return e.filter(t=>!t.pending)}async function _o(e,t){const s=L.state,n=wo(s.transcripts[e.id]??[]);if(n.length!==0){s.conversationIds||(s.conversationIds={});try{const o=s.conversationIds[e.id];if(o)await Lt(t,`${Dt}/${o}`,{method:"PUT",body:JSON.stringify({messages:n})});else{const i=await Lt(t,Dt,{method:"POST",body:JSON.stringify({agentId:e.id,messages:n})});s.conversationIds[e.id]=i.id}s.conversationsRev=(s.conversationsRev??0)+1,L.notify()}catch(o){console.warn("[desktop-mode/agents] conversation save failed:",o)}}}const Pt={post:"post",page:"page",attachment:"media",media:"media",user:"user",comment:"comment"};function Rt(e){const t=Number.parseInt(String(e??""),10);return Number.isFinite(t)&&t>0?t:0}function Ot(e){if(e.type==="shortcut"){const t=e.data;let s=Pt[String(t.kind??"")];s==="post"&&t.bridgePayload?.postType==="page"&&(s="page");const n=Rt(t.ref);return!s||!n?null:{kind:s,id:n,title:String(t.title??"")||`#${n}`}}if(e.type==="desktop-file"){const s=e.data.placement?.file;if(!s)return null;const n=Pt[String(s.type??"")],o=Rt(s.ref);return!n||!o?null:{kind:n,id:o,title:String(s.title??"")||`#${o}`}}return null}function vo(e){const t=e.find(n=>n.kind==="drag");if(!t)return null;const s=t.config?.entityKinds;return Array.isArray(s)?s.map(String):[]}function bo(e,t,s){return!t||s&&t.kind==="user"&&t.id===s||e==null?!1:e.length===0?!0:e.includes(t.kind)}function ko(e){return b(r('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 So(e){return b(r('The user sent you the %1$s "%2$s" (id %3$s) from the "Send to" menu. Handle it according to your instructions, using your tools as needed.',"desktop-mode"),e.kind,e.title,String(e.id))}function Ao(e,t,s){return Wt(e,"agents-send-to"),Bt(e,So(t),s,"send-to",Ft(t))}function Ft(e){return{kind:e.kind,id:e.id,title:e.title}}function Wt(e,t="agents"){Be(e);const s=window.wp?.os?.openWindow;typeof s=="function"&&s("desktop-mode-agent-run",{source:t})}async function Bt(e,t,s,n,o){Be(e);const i=L.state.transcripts[e.id],a=i.filter(u=>!u.pending&&u.role!=="error").map(u=>({role:u.role,text:u.text}));i.push({role:"user",text:t,at:Date.now(),attachment:o});const c={role:"agent",text:r("Working…","desktop-mode"),at:Date.now(),pending:!0};i.push(c),L.notify();try{const u=await Ke(Nt(s.restRoot,`desktop-mode/v1/agents/${e.id}/invoke`),{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":s.restNonce},body:JSON.stringify({message:t,source:n,history:a})},{source:"desktop-mode/agents"}),p=await u.json().catch(()=>null);if(!u.ok){if(u.status===504)throw new Error(r("The agent took too long to reply, so the answer never arrived. It may still be finishing the work: give it a moment before asking again.","desktop-mode"));const f=p&&typeof p=="object"&&typeof p.message=="string"?p.message:`HTTP ${u.status}`;throw new Error(f)}const d=p;c.text=d.text||r("The agent finished without a text answer.","desktop-mode"),c.toolCalls=d.toolCalls,Array.isArray(d.callToActions)&&d.callToActions.length>0&&(c.callToActions=d.callToActions)}catch(u){c.role="error",c.text=u instanceof Error?u.message:String(u)}c.pending=!1,L.notify(),_o(e,s)}function Mo(e,t,s){return Wt(e,"agents-drop"),Bt(e,ko(t),s,"drag",Ft(t))}const To={source:"desktop-mode/agents"};function Ut(){const e=window.wp?.os?.config;return{restRoot:String(e?.restUrl??""),restNonce:String(e?.restNonce??"")}}function Co(e=""){return`${Ut().restRoot.replace(/\/+$/,"")}/desktop-mode/v1/agents${e}`}async function Eo(e,t={}){const s=await Ke(e,{...t,headers:{"Content-Type":"application/json","X-WP-Nonce":Ut().restNonce,...t.headers||{}}},To),n=await s.json().catch(()=>null);if(!s.ok){const o=n&&typeof n=="object"&&typeof n.message=="string"?n.message:`HTTP ${s.status}`;throw new Error(o)}return n}function Io(){return Eo(Co())}let j=null,ze=!1,He=null;function qt(e){He===!1&&e&&(j=null),He=e}function No(){return He===!0}async function Xe(){if(!(ze||j!==null||!No())){ze=!0;try{j=await Io()}catch{j=[]}finally{ze=!1}}}function Do(){j=null,Xe()}function Lo(e){return j===null?(Xe(),[]):j.filter(t=>{const s=t.triggers.find(o=>o.kind==="send-to");if(!s)return!1;const n=Array.isArray(s.config?.entityKinds)?s.config.entityKinds:[];return n.length===0||n.includes(e)})}function Po(e){return e.kind==="user"?"user":e.kind==="attachment"||e.kind==="media"?"media":e.kind==="post"?e.entityId==="pages"?"page":"post":null}function Ro(e){const t=e.title?.rendered;if(typeof t=="string"&&t!==""){const s=document.createElement("div");return s.innerHTML=t,s.textContent??""}return typeof e.title=="string"&&e.title!==""?e.title:typeof e.name=="string"&&e.name!==""?e.name:""}const be="desktop-mode/agents-send-to";function Oo(){fo("os.my-wordpress.tile-context-menu",be),co("os.my-wordpress.tile-context-menu",be,Fo),po("os.agents.roster-changed",be),uo("os.agents.roster-changed",be,()=>{Do()}),Xe()}function Fo(e,t){const s=Po(t);if(!s)return e;const n=Number.parseInt(String(t.item?.id??""),10);if(!n)return e;const o=Lo(s);if(o.length===0)return e;const i=Ro(t.item)||`#${n}`;return[...e,...o.map(a=>({id:`agent-send-to-${a.id}`,label:b(r("Send to %s","desktop-mode"),a.name),icon:"dashicons-share-alt",onSelect:()=>{const c=window.wp?.os?.config;Ao({id:a.id,name:a.name,description:a.description,avatarUrl:a.avatarUrl},{kind:s,id:n,title:i},{restRoot:String(c?.restUrl??""),restNonce:String(c?.restNonce??"")})}}))]}function Wo(e){const{root:t}=e,s=k(e),n=[],o=y=>{if(y.button!==0||y.shiftKey||y.ctrlKey||y.metaKey||K())return;const _=y.target?.closest("[data-mywp-drag][data-item-id]");if(!_)return;const S=T().dragManager;if(!S)return;const M=Number(_.getAttribute("data-item-id")),A=_.getAttribute("data-mywp-drag")??"",D=s.list.items(),P=D.find(W=>W.id===M);if(!P)return;const se=ae(e.data,e.state.section),ke=se?.id??"",F=String(se?.restPath??""),Y=e.state.selected.includes(M)?D.filter(W=>e.state.selected.includes(W.id)):[P];S.start({payload:{type:"shortcut",source:_,data:{kind:A,ref:String(P.id),title:P.title,icon:P.thumb||"",entityId:ke,restPath:F,...Y.length>1?{items:Y.map(W=>({kind:A,ref:String(W.id),title:W.title,icon:W.thumb||"",entityId:ke,restPath:F}))}:{}}},origin:y})};t.addEventListener("pointerdown",o),n.push(()=>t.removeEventListener("pointerdown",o)),K()||n.push(ts({root:t,canvas:".os-mywp__canvas",className:"os-mywp__marquee",select:y=>e.local("select-set",{ids:y})})),n.push(()=>s.list.dispose());const i=T().hooks,a=`openstation-apps/my-wordpress/${vt(t)}`;i?.addAction?.("os.extended-options.changed",a,y=>{const _=y?.options;_&&typeof _.agents=="boolean"&&e.dispatch("refresh")}),n.push(()=>{i?.removeAction?.("os.extended-options.changed",a);for(const y of s.agentDropTargets.values())y();s.agentDropTargets.clear()});let c=null,u=0;const p=()=>{c?.remove(),c=null,u=0},d=(y,_)=>{let M=_.clientX+16,A=_.clientY+16;const D=y.getBoundingClientRect();M+D.width>window.innerWidth-8&&(M=Math.max(8,_.clientX-D.width-16)),A+D.height>window.innerHeight-8&&(A=Math.max(8,_.clientY-D.height-16)),y.style.left=`${M}px`,y.style.top=`${A}px`},f=y=>{const _=document.createElement("div");_.className="os-my-wordpress__tooltip",_.setAttribute("role","tooltip");const S=document.createElement("div");if(S.className="os-my-wordpress__tooltip-title",S.textContent=y.title,_.appendChild(S),y.lockedBy){const A=document.createElement("div");A.className="os-my-wordpress__tooltip-lock";const D=document.createElement("span");D.className="dashicons dashicons-lock",D.setAttribute("aria-hidden","true"),A.appendChild(D);const P=document.createElement("span");P.textContent=b(r("%s is currently editing"),y.lockedBy),A.appendChild(P),_.appendChild(A)}if(y.thumb){const A=document.createElement("img");A.className="os-my-wordpress__tooltip-thumb",A.src=y.thumb,A.alt="",_.appendChild(A)}const M=y.excerpt||y.subtitle;if(M){const A=document.createElement("p");A.className="os-my-wordpress__tooltip-excerpt",A.textContent=M.length>240?M.slice(0,237)+"…":M,_.appendChild(A)}return _},m=y=>{const _=y.target?.closest("[data-mywp-drag][data-item-id]");if(!_||_.closest("[data-mywp-list]"))return;const S=Number(_.getAttribute("data-item-id"));if(S===u)return;const M=s.list.items().find(A=>A.id===S);M&&(p(),c=f(M),u=S,document.body.appendChild(c),d(c,y))},h=y=>{if(!c)return;if(!y.target?.closest("[data-mywp-drag][data-item-id]")){p();return}d(c,y)};t.addEventListener("mouseover",m),t.addEventListener("mousemove",h),t.addEventListener("mouseleave",p),t.addEventListener("pointerdown",p),t.addEventListener("contextmenu",p),n.push(()=>{t.removeEventListener("mouseover",m),t.removeEventListener("mousemove",h),t.removeEventListener("mouseleave",p),t.removeEventListener("pointerdown",p),t.removeEventListener("contextmenu",p),p()});const w=y=>{if(y.key!=="Escape")return;const _=k(e);_.menu?(_.menu=null,e.repaint()):_.columnsMenu?(_.columnsMenu=null,e.repaint()):_.zoom?(_.zoom=!1,e.repaint()):e.state.footprint>0?e.dispatch("back"):e.state.item>0&&e.dispatch("open",{item:0})};t.addEventListener("keydown",w),n.push(()=>t.removeEventListener("keydown",w));const v=y=>{const _=Number(y.userId);!Number.isFinite(_)||_<=0||(On(),e.dispatch("footprint",{user:_,name:y.userName}))};v(Rn()),n.push(Fn(v));const g=y=>{!y.kind||!(Number(y.id)>0)||(oo(),e.dispatch("go",{section:y.entityId}),y.kind==="media"?e.dispatch("open",{item:y.id}):e.dispatch("into",{item:y.id}))};g(no()),n.push(io(g));const $=y=>{const _=Number(y.agentId);!Number.isFinite(_)||_<=0||(ao(),e.dispatch("go",{section:"agents"}),e.dispatch("open",{item:_}))};return $(ro()),n.push(lo($)),qt(e.data.agentsEnabled===!0),window.wp?.hooks&&Oo(),()=>n.forEach(y=>y())}function Bo(e){const t=T().hooks;if(!t?.doAction)return;const s=e.root.querySelector("[data-mywp-group-extras]");if(s){const c=s.dataset.mywpGroupExtras??"";if(s.dataset.mywpExtrasFor!==c){s.dataset.mywpExtrasFor=c,s.replaceChildren();try{t.doAction("os.my-wordpress.group-extras",{container:s,groupId:c,group:e.data.groups.find(u=>u.id===c)??null,entityIds:e.data.sections.filter(u=>u.group===c).map(u=>u.id)})}catch(u){console.error("[my-wordpress] a group-extras subscriber threw.",u)}}}const n=ae(e.data,e.state.section);if(!n||n.kind==="agent")return;const o=new Map;for(const c of k(e).list.items())o.set(c.id,c);const i=e.data.detail,a=e.data.folder;for(const c of Array.from(e.root.querySelectorAll("[data-mywp-slot]"))){const u=c.dataset.mywpSlot??"",p=Number(c.dataset.mywpExtrasItem??0),d=`${n.id}:${u}:${p}`;if(c.dataset.mywpExtrasFor===d)continue;c.dataset.mywpExtrasFor=d,c.replaceChildren();let f=null;if(i&&i.id===p?f={...o.get(p)??{},...i}:a&&a.id===p&&(f={...o.get(p)??{},id:a.id,title:a.title,status:a.status}),!!f)try{t.doAction("os.my-wordpress.preview-extras",{slot:u,container:c,entityId:n.id,kind:n.kind,item:f})}catch(m){console.error("[my-wordpress] a preview-extras subscriber threw.",m)}}for(const c of Array.from(e.root.querySelectorAll("[data-mywp-drag][data-item-id]"))){const u=c.querySelector("os-tile"),p=Number(c.getAttribute("data-item-id")),d=o.get(p);if(!(!u||!d||u.dataset.mywpDecorated===String(p))){u.dataset.mywpDecorated=String(p);try{t.doAction("os.my-wordpress.list-tile",{tile:u,entityId:n.id,kind:n.kind,item:d})}catch(f){console.error("[my-wordpress] a list-tile subscriber threw.",f)}}}}function Uo(e){const t=k(e);if(qt(e.data.agentsEnabled===!0),qo(e),t.list.sync({sentinel:e.root.querySelector("[data-mywp-sentinel]"),canvas:e.root.querySelector(".os-mywp__canvas"),load:()=>e.dispatch("more"),repaint:()=>e.repaint()}),t.revealSelection){t.revealSelection=!1;const i=e.state.item>0?e.state.item:e.state.selected[0]??0;i>0&&e.root.querySelector(`[data-item-id="${i}"]`)?.scrollIntoView?.({block:"nearest"})}for(const i of Array.from(e.root.querySelectorAll("os-context-menu.os-mywp__menu")))(t.menu||t.columnsMenu)&&so(i);const s=e.data.subDetail;let n;s?.kind==="revision"?n=s.content:s?.kind==="comment"&&(n=String(s.stats.comment?.content??""));const o=s?{id:e.state.item,content:n}:null;for(const[i,a]of[["detail",e.data.detail],["folder",e.data.folder],["sub",o]]){const c=e.root.querySelector(`[data-mywp-content="${i}"]`);if(c&&a?.content!==void 0){const u=`${a.id}:${a.content.length}`;c.dataset.mywpStamp!==u&&(c.dataset.mywpStamp=u,c.innerHTML=a.content)}}Bo(e)}function qo(e){const t=k(e),s=e.data.agents,n=ae(e.data,e.state.section);if(!(!!s&&n?.kind==="agent")||!s){for(const p of t.agentDropTargets.values())p();t.agentDropTargets.clear();return}const i=wt(s.list);if(t.rosterStamp!==i){const p=t.rosterStamp===""&&s.list.length>0;t.rosterStamp=i||"·",!p&&i!==""&&T().hooks?.doAction?.("os.agents.roster-changed")}if(t.chatAfterCreate&&!e.state.casting&&e.state.item>0){const p=s.list.find(d=>d.id===e.state.item);p&&(t.chatAfterCreate=!1,bt(s,p))}t.chatAfterCreate&&e.state.casting&&e.state.agentNotice!==""&&(t.chatAfterCreate=!1);const a=T().dragManager,c=vt(e.root),u=new Set;a?.registerDropTarget&&e.root.querySelectorAll(".dm-agents__cast-card[data-agent-id]").forEach(p=>{const d=Number.parseInt(p.dataset.agentId??"",10),f=s.list.find(m=>m.id===d);f&&(u.add(d),p.dataset.dmAgentDragOut||(p.dataset.dmAgentDragOut="1",p.addEventListener("pointerdown",m=>{if(m.button!==0||m.shiftKey||m.ctrlKey||m.metaKey||K())return;const h=T().dragManager;h&&h.start({payload:{type:"shortcut",source:p,data:{kind:"user",ref:String(d),title:f.name,icon:"dashicons-admin-users",entityId:"agents"}},origin:m})})),t.agentDropTargets.set(d,a.registerDropTarget({id:`dm-agents-row-${c}-${d}`,element:p,accept:m=>bo(vo(f.triggers),Ot(m),f.id),acceptLabel:r("Send to agent"),onDrop:m=>{const h=Ot(m.payload);h&&Mo({id:f.id,name:f.name,description:f.description,avatarUrl:f.avatarUrl},h,{restRoot:s.restRoot,restNonce:s.restNonce})}})))});for(const[p,d]of t.agentDropTargets)u.has(p)||(d(),t.agentDropTargets.delete(p));if(s.canManage&&!t.agentBusy){const p=s.list.find(d=>!ht(d.face)&&d.faceSeed>0&&!t.agentBackfilled.has(d.id));p&&(t.agentBackfilled.add(p.id),e.dispatch("agent-update",{id:p.id,face:$e(p.faceSeed),faceSeed:p.faceSeed}))}}function jo(e,t,s,n,o){return e.state.footprint>0?Xs(e):t?t.kind==="agent"?eo(e):n?Rs(e):s?Ls(e):e.state.item>0&&K()?l`<div class="os-mywp__detail-page">${lt(e,t)}</div>`:l`
1363 - <div class="os-mywp__split">
1364 - <div class="os-mywp__list-pane">${Ss(e,t,o)}</div>
1365 - <aside class="os-mywp__detail-pane">
1366 - ${e.state.item>0?lt(e,t):l`<p class="os-mywp__pane-empty">${r("Select an entry to preview it here.")}</p>`}
1367 - </aside>
1368 - </div>
1369 - `:ks(e)}function Ko(e){const{state:t}=e,s=n=>{const o=String(n.detail?.value??"");o!=="icons"&&o!=="list"||o===t.view||(k(e).revealSelection=!0,e.local("set-view",{view:o}),e.dispatch("view"))};return l`
1365 + `}const jt=8;function To(e,t){e.style.visibility="hidden";const s=()=>{e.isConnected&&(t(e.getBoundingClientRect()),e.style.visibility="")};typeof requestAnimationFrame=="function"?requestAnimationFrame(s):s()}function Co(e){To(e,t=>{t.right>window.innerWidth&&(e.style.left=`${Math.max(0,window.innerWidth-t.width-jt)}px`),t.bottom>window.innerHeight&&(e.style.top=`${Math.max(0,window.innerHeight-t.height-jt)}px`)})}const K=ce("desktop-mode/my-wordpress/open-target",()=>({kind:null,entityId:"",id:0,title:"",requestedAt:0}));function Eo(){return{...K.state}}function Io(){K.state.kind=null,K.state.entityId="",K.state.id=0,K.state.title="",K.notify()}function No(e){return K.subscribe(t=>e({...t}))}const ae=ce("desktop-mode/agents/editor-target",()=>({agentId:null,requestedAt:0}));function Do(){return{...ae.state}}function Lo(){ae.state.agentId=null,ae.state.requestedAt=0,ae.notify()}function Po(e){return ae.subscribe(t=>e({...t}))}function Ie(){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 Ro(e,t,s,n){Ie().addFilter(e,t,s,n)}function Oo(e,t,s,n){Ie().addAction(e,t,s,n)}function Fo(e,t){return Ie().removeAction(e,t)}function Wo(e,t){return Ie().removeFilter(e,t)}const Uo="http://localhost/";function Kt(e,t){const s=typeof window<"u"&&window.location?window.location.href:Uo,n=new URL(e,s),o=t.replace(/^\/+/,""),i=o.indexOf("?"),a=i===-1?o:o.slice(0,i),l=i===-1?"":o.slice(i+1);if(n.searchParams.has("rest_route")){const u=n.searchParams.get("rest_route")??"/",d=u.endsWith("/")?u:u+"/";n.searchParams.set("rest_route",d+a)}else{const u=n.pathname.endsWith("/")?n.pathname:n.pathname+"/";n.pathname=u+a}return l&&new URLSearchParams(l).forEach((d,p)=>{n.searchParams.append(p,d)}),n.toString()}function qo(){const e=crypto.getRandomValues(new Uint8Array(16));e[6]=e[6]%16+64,e[8]=e[8]%64+128;const t=Array.from(e,s=>s.toString(16).padStart(2,"0")).join("");return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}class Q extends Xe{constructor(t,s,n=new Xe("",{status:0})){super(t,{status:n.status,code:n.code,data:n.data,serverMessage:n.serverMessage}),this.name="JobRequestError",this.retryable=s}}async function Bo(e,t,s){const n=new AbortController,o=window.setTimeout(()=>n.abort(),15e3);try{const i=await He(Kt(e.restRoot,t),{method:s?"POST":"GET",headers:{"Content-Type":"application/json","X-WP-Nonce":e.restNonce},body:s?JSON.stringify(s):void 0,signal:n.signal,cache:"no-store"},{source:"desktop-mode/agents",silent:!s}),a=await i.json().catch(()=>null);if(!i.ok)throw new Q(a?.message||`HTTP ${i.status}`,i.status>=500&&!a?.code||i.status===408,se(i.status,a));if(!a||!a.jobId&&typeof a.text!="string")throw new Q(r("The job status could not be read.","desktop-mode"),!0,se(i.status,null));return a}finally{window.clearTimeout(o)}}function jo(e){return new Promise(t=>window.setTimeout(t,e))}async function Ko(e,t,s,n,o=()=>{}){const i=`desktop-mode/v1/agents/${e}`,a=Date.now()+2*60*60*1e3;let l=!1,u=2e3;for(;Date.now()<a;){try{const d=await Bo(s,l?`${i}/jobs/${n}`:`${i}/invoke`,l?void 0:{...t,async:!0,requestId:n});if(!("jobId"in d))return d;if(d.jobId!==n)throw new Q(r("The server returned a different job.","desktop-mode"),!1);if(l=!0,d.status==="completed"&&d.result)return d.result;if(d.status==="failed")throw new Q(d.error?.message||r("The agent job failed.","desktop-mode"),!1);if(d.status!=="queued"&&d.status!=="running")throw new Q(r("The server returned an invalid job state.","desktop-mode"),!1);o(d.status),u=Math.min(1e4,Math.max(u*1.25,(d.pollAfter||3)*1e3))}catch(d){if(d instanceof Q&&!d.retryable)throw d;o("reconnecting"),u=Math.min(u*2,3e4)}await jo(document.hidden?Math.max(u,15e3):u)}throw new Error(r("The background job has not returned a result. Some work may already have been applied. Check the site before submitting again.","desktop-mode"))}const zt="desktop-mode/v1/agents/conversations";async function Ht(e,t,s={}){const n=await He(Kt(e.restRoot,t),{...s,headers:{"Content-Type":"application/json","X-WP-Nonce":e.restNonce,...s.headers??{}}},{source:"desktop-mode/agents",silent:!0}),o=await n.json().catch(()=>null);if(!n.ok)throw se(n.status,o);return o}function zo(e){return e.filter(t=>!t.pending)}async function Ho(e,t){const s=P.state,n=zo(s.transcripts[e.id]??[]);if(n.length!==0){s.conversationIds||(s.conversationIds={});try{const o=s.conversationIds[e.id];if(o)await Ht(t,`${zt}/${o}`,{method:"PUT",body:JSON.stringify({messages:n})});else{const i=await Ht(t,zt,{method:"POST",body:JSON.stringify({agentId:e.id,messages:n})});s.conversationIds[e.id]=i.id}s.conversationsRev=(s.conversationsRev??0)+1,P.notify()}catch(o){console.warn("[desktop-mode/agents] conversation save failed:",o)}}}const Xt={post:"post",page:"page",attachment:"media",media:"media",user:"user",comment:"comment"};function Yt(e){const t=Number.parseInt(String(e??""),10);return Number.isFinite(t)&&t>0?t:0}function Gt(e){if(e.type==="shortcut"){const t=e.data;let s=Xt[String(t.kind??"")];s==="post"&&t.bridgePayload?.postType==="page"&&(s="page");const n=Yt(t.ref);return!s||!n?null:{kind:s,id:n,title:String(t.title??"")||`#${n}`}}if(e.type==="desktop-file"){const s=e.data.placement?.file;if(!s)return null;const n=Xt[String(s.type??"")],o=Yt(s.ref);return!n||!o?null:{kind:n,id:o,title:String(s.title??"")||`#${o}`}}return null}function Xo(e){const t=e.find(n=>n.kind==="drag");if(!t)return null;const s=t.config?.entityKinds;return Array.isArray(s)?s.map(String):[]}function Yo(e,t,s){return!t||s&&t.kind==="user"&&t.id===s||e==null?!1:e.length===0?!0:e.includes(t.kind)}function Go(e){return b(r('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 Vo(e){return b(r('The user sent you the %1$s "%2$s" (id %3$s) from the "Send to" menu. Handle it according to your instructions, using your tools as needed.',"desktop-mode"),e.kind,e.title,String(e.id))}function Qo(e,t,s){return Qt(e,"agents-send-to"),Jt(e,Vo(t),s,"send-to",Vt(t))}function Vt(e){return{kind:e.kind,id:e.id,title:e.title}}function Qt(e,t="agents"){Ve(e);const s=window.wp?.os?.openWindow;typeof s=="function"&&s("desktop-mode-agent-run",{source:t})}async function Jt(e,t,s,n,o){Ve(e);const i=P.state.transcripts[e.id],a=r("The agent finished without a text answer.","desktop-mode"),l=i.filter(d=>!d.pending&&d.role!=="error"&&!(d.role==="agent"&&d.text===a)).map(d=>({role:d.role,text:d.text}));i.push({role:"user",text:t,at:Date.now(),attachment:o});const u={role:"agent",text:r("Working…","desktop-mode"),at:Date.now(),pending:!0};i.push(u),P.notify();try{const d=await Ko(e.id,{message:t,source:n,history:l},s,qo(),p=>{const f={queued:r("Queued — waiting for a WordPress worker…","desktop-mode"),reconnecting:r("Reconnecting to the background job…","desktop-mode"),running:r("Working in the background…","desktop-mode")};u.text=f[p],P.notify()});d.text?.trim()?u.text=d.text:(u.role="error",u.text=a),u.toolCalls=d.toolCalls,Array.isArray(d.callToActions)&&d.callToActions.length>0&&(u.callToActions=d.callToActions)}catch(d){u.role="error",u.text=d instanceof Error?d.message:String(d)}u.pending=!1,P.notify(),Ho(e,s)}function Jo(e,t,s){return Qt(e,"agents-drop"),Jt(e,Go(t),s,"drag",Vt(t))}const Zo={source:"desktop-mode/agents"};function Zt(){const e=window.wp?.os?.config;return{restRoot:String(e?.restUrl??""),restNonce:String(e?.restNonce??"")}}function xo(e=""){return`${Zt().restRoot.replace(/\/+$/,"")}/desktop-mode/v1/agents${e}`}async function ei(e,t={}){const s=await He(e,{...t,headers:{"Content-Type":"application/json","X-WP-Nonce":Zt().restNonce,...t.headers||{}}},Zo),n=await s.json().catch(()=>null);if(!s.ok)throw se(s.status,n);return n}function ti(){return ei(xo())}let z=null,xe=!1,et=null;function xt(e){et===!1&&e&&(z=null),et=e}function si(){return et===!0}async function tt(){if(!(xe||z!==null||!si())){xe=!0;try{z=await ti()}catch{z=[]}finally{xe=!1}}}function ni(){z=null,tt()}function oi(e){return z===null?(tt(),[]):z.filter(t=>{const s=t.triggers.find(o=>o.kind==="send-to");if(!s)return!1;const n=Array.isArray(s.config?.entityKinds)?s.config.entityKinds:[];return n.length===0||n.includes(e)})}function ii(e){return e.kind==="user"?"user":e.kind==="attachment"||e.kind==="media"?"media":e.kind==="post"?e.entityId==="pages"?"page":"post":null}function ri(e){const t=e.title?.rendered;if(typeof t=="string"&&t!==""){const s=document.createElement("div");return s.innerHTML=t,s.textContent??""}return typeof e.title=="string"&&e.title!==""?e.title:typeof e.name=="string"&&e.name!==""?e.name:""}const Ne="desktop-mode/agents-send-to";function ai(){Wo("os.my-wordpress.tile-context-menu",Ne),Ro("os.my-wordpress.tile-context-menu",Ne,li),Fo("os.agents.roster-changed",Ne),Oo("os.agents.roster-changed",Ne,()=>{ni()}),tt()}function li(e,t){const s=ii(t);if(!s)return e;const n=Number.parseInt(String(t.item?.id??""),10);if(!n)return e;const o=oi(s);if(o.length===0)return e;const i=ri(t.item)||`#${n}`;return[...e,...o.map(a=>({id:`agent-send-to-${a.id}`,label:b(r("Send to %s","desktop-mode"),a.name),icon:"dashicons-share-alt",onSelect:()=>{const l=window.wp?.os?.config;Qo({id:a.id,name:a.name,description:a.description,avatarUrl:a.avatarUrl},{kind:s,id:n,title:i},{restRoot:String(l?.restUrl??""),restNonce:String(l?.restNonce??"")})}}))]}function di(e,t){if(!(!e||!t.link)){if(e.kind==="media")return{kind:"attachment",id:t.id,url:t.link,title:t.title,alt:t.alt??"",mime:t.mime,thumbnailUrl:t.thumb||void 0};if(e.kind==="user")return{kind:"user",id:t.id,url:t.link,title:t.title};if(e.kind==="post"&&!e.flat)return{kind:"post",id:t.id,postType:e.post_type,url:t.link,title:t.title}}}function ci(e){const{root:t}=e,s=k(e),n=[],o=y=>{if(y.button!==0||y.shiftKey||y.ctrlKey||y.metaKey||H())return;const v=y.target?.closest("[data-mywp-drag][data-item-id]");if(!v)return;const M=T().dragManager;if(!M)return;const S=Number(v.getAttribute("data-item-id")),A=v.getAttribute("data-mywp-drag")??"",N=s.list.items(),R=N.find(q=>q.id===S);if(!R)return;const J=X(e.data,e.state.section),De=J?.id??"",U=String(J?.restPath??""),Z=e.state.selected.includes(S)?N.filter(q=>e.state.selected.includes(q.id)):[R];M.start({payload:{type:"shortcut",source:v,data:{kind:A,ref:String(R.id),title:R.title,icon:R.thumb||"",entityId:De,restPath:U,bridgePayload:di(J,R),...Z.length>1?{items:Z.map(q=>({kind:A,ref:String(q.id),title:q.title,icon:q.thumb||"",entityId:De,restPath:U}))}:{}}},origin:y})};t.addEventListener("pointerdown",o),n.push(()=>t.removeEventListener("pointerdown",o)),H()||n.push(fs({root:t,canvas:".os-mywp__canvas",className:"os-mywp__marquee",select:y=>e.local("select-set",{ids:y})})),n.push(()=>s.list.dispose());const i=T().hooks,a=`openstation-apps/my-wordpress/${Pt(t)}`;i?.addAction?.("os.extended-options.changed",a,y=>{const v=y?.options;v&&typeof v.agents=="boolean"&&e.dispatch("refresh")}),n.push(()=>{i?.removeAction?.("os.extended-options.changed",a);for(const y of s.agentDropTargets.values())y();s.agentDropTargets.clear()});let l=null,u=0;const d=()=>{l?.remove(),l=null,u=0},p=(y,v)=>{let S=v.clientX+16,A=v.clientY+16;const N=y.getBoundingClientRect();S+N.width>window.innerWidth-8&&(S=Math.max(8,v.clientX-N.width-16)),A+N.height>window.innerHeight-8&&(A=Math.max(8,v.clientY-N.height-16)),y.style.left=`${S}px`,y.style.top=`${A}px`},f=y=>{const v=document.createElement("div");v.className="os-my-wordpress__tooltip",v.setAttribute("role","tooltip");const M=document.createElement("div");if(M.className="os-my-wordpress__tooltip-title",M.textContent=y.title,v.appendChild(M),y.lockedBy){const A=document.createElement("div");A.className="os-my-wordpress__tooltip-lock";const N=document.createElement("span");N.className="dashicons dashicons-lock",N.setAttribute("aria-hidden","true"),A.appendChild(N);const R=document.createElement("span");R.textContent=b(r("%s is currently editing"),y.lockedBy),A.appendChild(R),v.appendChild(A)}if(y.thumb){const A=document.createElement("img");A.className="os-my-wordpress__tooltip-thumb",A.src=y.thumb,A.alt="",v.appendChild(A)}const S=y.excerpt||y.subtitle;if(S){const A=document.createElement("p");A.className="os-my-wordpress__tooltip-excerpt",A.textContent=S.length>240?S.slice(0,237)+"…":S,v.appendChild(A)}return v},m=y=>{const v=y.target?.closest("[data-mywp-drag][data-item-id]");if(!v||v.closest("[data-mywp-list]"))return;const M=Number(v.getAttribute("data-item-id"));if(M===u)return;const S=s.list.items().find(N=>N.id===M);if(!S)return;d(),u=M;const A=i?.applyFilters("os.my-wordpress.hover-card",null,S,{build:f,cell:v,event:y});A instanceof HTMLElement&&(l=A,document.body.appendChild(l),p(l,y))},h=y=>{if(!l)return;if(!y.target?.closest("[data-mywp-drag][data-item-id]")){d();return}p(l,y)};t.addEventListener("mouseover",m),t.addEventListener("mousemove",h),t.addEventListener("mouseleave",d),t.addEventListener("pointerdown",d),t.addEventListener("contextmenu",d),n.push(()=>{t.removeEventListener("mouseover",m),t.removeEventListener("mousemove",h),t.removeEventListener("mouseleave",d),t.removeEventListener("pointerdown",d),t.removeEventListener("contextmenu",d),d()});const $=y=>{if(y.key!=="Escape")return;const v=k(e);v.menu?(v.menu=null,e.repaint()):v.columnsMenu?(v.columnsMenu=null,e.repaint()):v.zoom?(v.zoom=!1,e.repaint()):e.state.footprint>0?e.dispatch("back"):e.state.item>0&&O(e,0)};t.addEventListener("keydown",$),n.push(()=>t.removeEventListener("keydown",$));const _=y=>{const v=Number(y.userId);!Number.isFinite(v)||v<=0||(ao(),Number(e.state.footprint)!==v&&e.dispatch("footprint",{user:v,name:y.userName}))};_(ro()),n.push(lo(_));const w=y=>{!y.kind||!(Number(y.id)>0)||(Io(),e.dispatch("go",{section:y.entityId}),y.kind==="media"?e.dispatch("open",{item:y.id}):e.dispatch("into",{item:y.id}))};w(Eo()),n.push(No(w));const g=y=>{const v=Number(y.agentId);!Number.isFinite(v)||v<=0||(Lo(),e.dispatch("go",{section:"agents"}),e.dispatch("open",{item:v}))};return g(Do()),n.push(Po(g)),xt(e.data.agentsEnabled===!0),window.wp?.hooks&&ai(),()=>n.forEach(y=>y())}function ui(e){const t=T().hooks;if(!t?.doAction)return;const s=e.root.querySelector("[data-mywp-group-extras]");if(s){const l=s.dataset.mywpGroupExtras??"";if(s.dataset.mywpExtrasFor!==l){s.dataset.mywpExtrasFor=l,s.replaceChildren();try{t.doAction("os.my-wordpress.group-extras",{container:s,groupId:l,group:e.data.groups.find(u=>u.id===l)??null,entityIds:e.data.sections.filter(u=>u.group===l).map(u=>u.id)})}catch(u){console.error("[my-wordpress] a group-extras subscriber threw.",u)}}}const n=X(e.data,e.state.section);if(!n||n.kind==="agent")return;const o=new Map;for(const l of k(e).list.items())o.set(l.id,l);const i=e.data.detail,a=e.data.folder;for(const l of Array.from(e.root.querySelectorAll("[data-mywp-slot]"))){const u=l.dataset.mywpSlot??"",d=Number(l.dataset.mywpExtrasItem??0),p=`${n.id}:${u}:${d}`;if(l.dataset.mywpExtrasFor===p)continue;l.dataset.mywpExtrasFor=p,l.replaceChildren();let f=null;if(i&&i.id===d?f={...o.get(d)??{},...i}:a&&a.id===d&&(f={...o.get(d)??{},id:a.id,title:a.title,status:a.status}),!!f)try{t.doAction("os.my-wordpress.preview-extras",{slot:u,container:l,entityId:n.id,kind:n.kind,item:f})}catch(m){console.error("[my-wordpress] a preview-extras subscriber threw.",m)}}for(const l of Array.from(e.root.querySelectorAll("[data-mywp-drag][data-item-id]"))){const u=l.querySelector("os-tile"),d=Number(l.getAttribute("data-item-id")),p=o.get(d);if(!(!u||!p||u.dataset.mywpDecorated===String(d))){u.dataset.mywpDecorated=String(d);try{t.doAction("os.my-wordpress.list-tile",{tile:u,entityId:n.id,kind:n.kind,item:p})}catch(f){console.error("[my-wordpress] a list-tile subscriber threw.",f)}}}}function pi(e){const t=k(e);if(xt(e.data.agentsEnabled===!0),fi(e),t.list.sync({sentinel:e.root.querySelector("[data-mywp-sentinel]"),canvas:e.root.querySelector(".os-mywp__canvas"),load:()=>e.dispatch("more"),repaint:()=>e.repaint()}),t.revealSelection){t.revealSelection=!1;const i=e.state.item>0?e.state.item:e.state.selected[0]??0;i>0&&e.root.querySelector(`[data-item-id="${i}"]`)?.scrollIntoView?.({block:"nearest"})}for(const i of Array.from(e.root.querySelectorAll("os-context-menu.os-mywp__menu")))(t.menu||t.columnsMenu)&&Co(i);const s=e.data.subDetail;let n;s?.kind==="revision"?n=s.content:s?.kind==="comment"&&(n=String(s.stats.comment?.content??""));const o=s?{id:e.state.item,content:n}:null;for(const[i,a]of[["detail",mt(e)],["folder",e.data.folder],["sub",o]]){const l=e.root.querySelector(`[data-mywp-content="${i}"]`);if(l&&a?.content!==void 0){const u=`${a.id}:${a.content.length}`;l.dataset.mywpStamp!==u&&(l.dataset.mywpStamp=u,l.innerHTML=a.content)}}ui(e)}function fi(e){const t=k(e),s=e.data.agents,n=X(e.data,e.state.section);if(!(!!s&&n?.kind==="agent")||!s){for(const d of t.agentDropTargets.values())d();t.agentDropTargets.clear();return}const i=Dt(s.list);if(t.rosterStamp!==i){const d=t.rosterStamp===""&&s.list.length>0;t.rosterStamp=i||"·",!d&&i!==""&&T().hooks?.doAction?.("os.agents.roster-changed")}if(t.chatAfterCreate&&!e.state.casting&&e.state.item>0){const d=s.list.find(p=>p.id===e.state.item);d&&(t.chatAfterCreate=!1,Rt(s,d))}t.chatAfterCreate&&e.state.casting&&e.state.agentNotice!==""&&(t.chatAfterCreate=!1);const a=T().dragManager,l=Pt(e.root),u=new Set;a?.registerDropTarget&&e.root.querySelectorAll(".dm-agents__cast-card[data-agent-id]").forEach(d=>{const p=Number.parseInt(d.dataset.agentId??"",10),f=s.list.find(m=>m.id===p);f&&(u.add(p),d.dataset.dmAgentDragOut||(d.dataset.dmAgentDragOut="1",d.addEventListener("pointerdown",m=>{if(m.button!==0||m.shiftKey||m.ctrlKey||m.metaKey||H())return;const h=T().dragManager;h&&h.start({payload:{type:"shortcut",source:d,data:{kind:"user",ref:String(p),title:f.name,icon:"dashicons-admin-users",entityId:"agents"}},origin:m})})),t.agentDropTargets.set(p,a.registerDropTarget({id:`dm-agents-row-${l}-${p}`,element:d,accept:m=>Yo(Xo(f.triggers),Gt(m),f.id),acceptLabel:r("Send to agent"),onDrop:m=>{const h=Gt(m.payload);h&&Jo({id:f.id,name:f.name,description:f.description,avatarUrl:f.avatarUrl},h,{restRoot:s.restRoot,restNonce:s.restNonce})}})))});for(const[d,p]of t.agentDropTargets)u.has(d)||(p(),t.agentDropTargets.delete(d));if(s.canManage&&!t.agentBusy){const d=s.list.find(p=>!Et(p.face)&&p.faceSeed>0&&!t.agentBackfilled.has(p.id));d&&(t.agentBackfilled.add(d.id),e.dispatch("agent-update",{id:d.id,face:Me(d.faceSeed),faceSeed:d.faceSeed}))}}function mi(e,t,s,n,o){return e.state.footprint>0?wn(e):t?t.kind==="agent"?Mo(e):n?tn(e):s?xs(e):e.state.item>0&&!ge(t,e.state.item)&&H()?c`<div class="os-mywp__detail-page">${_t(e,t)}</div>`:vt(zs(e,t,o),e.state.item>0&&!ge(t,e.state.item)?_t(e,t):null):Ks(e)}function hi(e){const{state:t}=e,s=n=>{const o=String(n.detail?.value??"");o!=="icons"&&o!=="list"||o===t.view||(k(e).revealSelection=!0,e.local("set-view",{view:o}),e.dispatch("view"))};return c`
1370 1366 <os-segmented
1371 1367 class="os-mywp__view-switch"
1372 1368 value=${t.view}
1373 1369 label=${r("View as")}
@@ -1381,29 +1377,31 @@
1381 1377 <span class="dashicons dashicons-list-view" aria-hidden="true"></span>
1382 1378 <span class="os-mywp__view-label">${r("List")}</span>
1383 1379 </os-segment>
1384 1380 </os-segmented>
1385 - `}const zo=is("my-wordpress",{local:{select:(e,t)=>{const s=Array.isArray(t.order)?t.order:[];e.selected=Je(e.selected,s,Number(t.item),{ctrl:!!t.ctrl,shift:!!t.shift})},"select-set":(e,t)=>{e.selected=(Array.isArray(t.ids)?t.ids:[]).slice()},"clear-select":e=>{e.selected=[]},"set-sort":(e,t)=>{e.sort=String(t.sort??"")},"set-view":(e,t)=>{e.view=t.view==="list"?"list":"icons",e.view==="list"&&e.sort===""&&(e.sort="id-desc",e.page=1)},"agent-start":(e,t,s)=>{const n=t.from??null,o=Sn(),i=$t(yt(s.agents?.roles??null),o);n&&(i.name=b(r("%s copy"),n.name),i.description=n.description,i.vibes=n.vibes,i.instructions=n.instructions,i.role=n.role,i.abilities=[...n.abilities],i.triggers=n.triggers.map(a=>({kind:a.kind,config:{...a.config}})),i.copiedFrom=n.name),e.casting=!0,e.item=0,e.wstep=n?1:0,e.cast=i,e.agentNotice="",e.briefError=""},"agent-cancel":e=>{e.casting=!1,e.wstep=0,e.cast=null,e.agentNotice="",e.briefError=""},"agent-step":(e,t)=>{e.wstep=Math.max(0,Math.min(4,Number(t.step))),e.agentNotice=""},"agent-pane":(e,t)=>{const s=String(t.pane??"define");e.pane=["define","tools","triggers"].includes(s)?s:"define",e.agentNotice=""},"agent-wiz":(e,t)=>{e.cast={...e.cast??{},...t}},"agent-brief-error":(e,t)=>{e.briefError=String(t.msg??"")},"agent-notice":(e,t)=>{e.agentNotice=String(t.notice??"")}},view:e=>{const{state:t,data:s}=e,n=ae(s,t.section),o=s.groups.find(S=>S.id===t.group)??null,i=t.footprint>0,a=!!(o||n)||i,c=(S,M)=>l`<button type="button" class="os-mywp__crumb-link" @click=${M}>${S}</button>`,u=S=>l`<span class="os-mywp__crumb-current" aria-current="page">${S}</span>`,p=()=>l`<span class="os-mywp__sep" aria-hidden="true">›</span>`,d=n&&t.into>0,f=d&&t.relation!=="",m=!!n&&!d&&n.kind!=="agent"&&t.item>0&&K(),h=[];a?(h.push(c(s.siteName,()=>void e.dispatch("go"))),o&&(h.push(p()),h.push(n?c(o.label,()=>void e.dispatch("go",{group:o.id})):u(o.label))),n&&(h.push(p()),h.push(d||i||m?c(n.label,()=>void e.dispatch("go",{group:t.group,section:n.id})):u(n.label))),m&&s.detail&&(h.push(p()),h.push(u(s.detail.title))),i&&(h.push(p()),h.push(u(t.fpName||r("Activity footprint")))),d&&s.folder&&(h.push(p()),h.push(f?c(s.folder.title,()=>void e.dispatch("relation",{relation:""})):u(s.folder.title))),f&&s.sub&&(h.push(p()),h.push(u(s.sub.label)))):h.push(u(s.siteName));const w=n&&!d?k(e).list.accumulate(xe(t),s.list):[],v=w.length;let g=null;f&&s.sub?g=[b(B("%d item","%d items",s.sub.rows.length),s.sub.rows.length),""]:d&&s.folder&&(g=[b(r("%d folders"),s.folder.folders.length),s.folder.status]);const $=n?.kind==="agent";$&&(g=s.agents?.enabled?[b(B("%d agent","%d agents",s.agents.list.length),s.agents.list.length),""]:["",""]),i&&(g=Fs(e));const y=n&&!d?`${b(r("%1$d of %2$d items"),v,s.list?.total??0)}${t.selected.length>0?" — "+b(r("%d selected"),t.selected.length):""}`:b(r("%d folders"),t.group?s.sections.filter(S=>S.group===t.group).length:s.sections.filter(S=>!S.group).length+s.groups.length);let _=n&&!d?b(r("Page %1$d of %2$d"),s.list?.page??1,s.list?.pages??1):"";return n&&!d&&!$&&t.view==="list"&&(_=[bs(e,n),vs(e),_].filter(Boolean).join(" · ")),l`
1381 + `}const gi=ys("my-wordpress",{local:{"search-query":(e,t)=>{e.query=String(t.value??""),e.page=1,e.item=0,e.selected=[]},preview:(e,t)=>{e.item=Number(t.item)||0,e.pane="define",e.agentNotice=""},select:(e,t)=>{const s=Array.isArray(t.order)?t.order:[];e.selected=at(e.selected,s,Number(t.item),{ctrl:!!t.ctrl,shift:!!t.shift})},"select-set":(e,t)=>{e.selected=(Array.isArray(t.ids)?t.ids:[]).slice()},"clear-select":e=>{e.selected=[]},"set-sort":(e,t)=>{e.sort=String(t.sort??"")},"set-view":(e,t)=>{e.view=t.view==="list"?"list":"icons",e.view==="list"&&e.sort===""&&(e.sort="id-desc",e.page=1)},"agent-start":(e,t,s)=>{const n=t.from??null,o=Vn(),i=It(Nt(s.agents?.roles??null),o);n&&(i.name=b(r("%s copy"),n.name),i.description=n.description,i.vibes=n.vibes,i.instructions=n.instructions,i.brief=n.instructions,i.role=n.role,i.abilities=[...n.abilities],i.triggers=n.triggers.map(a=>({kind:a.kind,config:{...a.config}})),i.copiedFrom=n.name),e.casting=!0,e.item=0,e.wstep=n?1:0,e.cast=i,e.agentNotice="",e.briefError=""},"agent-cancel":e=>{e.casting=!1,e.wstep=0,e.cast=null,e.agentNotice="",e.briefError=""},"agent-step":(e,t)=>{const s=Math.max(0,Math.min(4,Number(t.step)));e.wstep===0&&s!==0&&e.cast&&(e.cast={...e.cast,instructions:String(e.cast.brief??"").trim()}),e.wstep=s,e.agentNotice=""},"agent-pane":(e,t)=>{const s=String(t.pane??"define");e.pane=["define","tools","triggers"].includes(s)?s:"define",e.agentNotice=""},"agent-wiz":(e,t)=>{e.cast={...e.cast??{},...t}},"agent-brief-error":(e,t)=>{e.briefError=String(t.msg??"")},"agent-notice":(e,t)=>{e.agentNotice=String(t.notice??"")}},view:e=>{e=ft(e);const{state:t,data:s}=e,n=X(s,t.section),o=s.groups.find(S=>S.id===t.group)??null,i=t.footprint>0,a=!!(o||n)||i,l=(S,A)=>c`<button type="button" class="os-mywp__crumb-link" @click=${A}>${S}</button>`,u=S=>c`<span class="os-mywp__crumb-current" aria-current="page">${S}</span>`,d=()=>c`<span class="os-mywp__sep" aria-hidden="true">›</span>`,p=n&&t.into>0,f=p&&t.relation!=="",m=!!n&&!p&&n.kind!=="agent"&&t.item>0&&H(),h=[];a?(h.push(l(s.siteName,()=>void e.dispatch("go"))),o&&(h.push(d()),h.push(n?l(o.label,()=>void e.dispatch("go",{group:o.id})):u(o.label))),n&&(h.push(d()),h.push(p||i||m?l(n.label,()=>void e.dispatch("go",{group:t.group,section:n.id})):u(n.label))),m&&s.detail&&(h.push(d()),h.push(u(s.detail.title))),i&&(h.push(d()),h.push(u(t.fpName||r("Activity footprint")))),p&&s.folder&&(h.push(d()),h.push(f?l(s.folder.title,()=>void e.dispatch("relation",{relation:""})):u(s.folder.title))),f&&s.sub&&(h.push(d()),h.push(u(s.sub.label)))):h.push(u(s.siteName));const $=n&&!p?As(e,n,k(e).list.accumulate(fe(t),s.list)):[],_=$.length,w=n?t.selected.filter(S=>!ge(n,S)).length:t.selected.length;let g=null;f&&s.sub?g=[b(B("%d item","%d items",s.sub.rows.length),s.sub.rows.length),""]:p&&s.folder&&(g=[b(r("%d folders"),s.folder.folders.length),s.folder.status]);const y=n?.kind==="agent";y&&(g=s.agents?.enabled?[b(B("%d agent","%d agents",s.agents.list.length),s.agents.list.length),""]:["",""]),i&&(g=cn(e));const v=n&&!p?`${b(r("%1$d of %2$d items"),_,s.list?.total??0)}${w>0?" — "+b(r("%d selected"),w):""}`:b(r("%d folders"),t.group?s.sections.filter(S=>S.group===t.group).length:s.sections.filter(S=>!S.group).length+s.groups.length);let M=n&&!p?b(r("Page %1$d of %2$d"),s.list?.page??1,s.list?.pages??1):"";return n&&!p&&!y&&t.view==="list"&&(M=[js(e,n),Bs(e),M].filter(Boolean).join(" · ")),c`
1386 1382 <div class="os-mywp" tabindex="-1">
1387 1383 <header class="os-mywp__header">
1388 - ${a?l`<button
1384 + ${a?c`<button
1389 1385 type="button"
1390 1386 class="os-mywp__back"
1391 1387 aria-label=${r("Back")}
1392 - @click=${()=>void e.dispatch(m?"open":"back",m?{item:0}:void 0)}
1388 + @click=${()=>m?O(e,0):void e.dispatch("back")}
1393 1389 >‹</button>`:""}
1394 1390 <nav class="os-mywp__crumbs">${h}</nav>
1395 1391 </header>
1396 - ${n&&!d&&!$&&!i?l`<div class="os-mywp__search">
1392 + ${n&&!p&&!y&&!i?c`<div class="os-mywp__search">
1397 1393 <os-text-field
1394 + label=${r("Search this section")}
1395 + hide-label
1398 1396 value=${t.query}
1399 1397 placeholder=${b(r("Search %s…"),n.label.toLowerCase())}
1400 1398 clearable
1401 - os-bind="query"
1402 - os-action="search"
1399 + @os-input-change=${S=>e.local("search-query",S.detail)}
1400 + os-action="refresh"
1403 1401 ></os-text-field>
1404 - ${Ko(e)}
1405 - ${n.kind==="user"&&n.canAdd?l`<os-button
1402 + ${hi(e)}
1403 + ${n.kind==="user"&&n.canAdd?c`<os-button
1406 1404 variant="secondary"
1407 1405 class="os-mywp__add-user"
1408 1406 @click=${()=>void e.dispatch("add-user")}
1409 1407 >
@@ -1410,16 +1408,16 @@
1410 1408 ${r("Add user")}
1411 1409 </os-button>`:""}
1412 1410 </div>`:""}
1413 1411 <div class="os-mywp__body">
1414 - ${jo(e,n,!!d,!!f,w)}
1412 + ${mi(e,n,!!p,!!f,$)}
1415 1413 </div>
1416 1414 <footer class="os-mywp__status">
1417 - <span>${g?g[0]:y}</span>
1418 - <span>${g?g[1]:_}</span>
1415 + <span>${g?g[0]:v}</span>
1416 + <span>${g?g[1]:M}</span>
1419 1417 </footer>
1420 - ${n&&!$?As(e,n):""}
1421 - ${_s(e,n)}
1422 - ${Ms(e,n)}
1423 - ${Ts(e)}
1418 + ${n&&!y?Hs(e,n):""}
1419 + ${qs(e,n)}
1420 + ${Xs(e,n)}
1421 + ${Ys(e)}
1424 1422 </div>
1425 - `},mounted:e=>{const t=Wo(e),s=()=>e.repaint();return document.addEventListener("os-mode-changed",s),()=>{t(),document.removeEventListener("os-mode-changed",s)}},updated:e=>Uo(e)});return E.agentDefaultRole=yt,E.agentFaceSrc=ye,E.agentsRosterStamp=wt,E.applySelection=Je,E.buildMenuOptions=nt,E.columnsFor=de,E.default=zo,E.emptyCast=$t,E.hiddenFor=ue,E.listKey=xe,E.nextSort=at,E.resolveActions=re,E.resolveBanding=tt,E.withSendToHeading=st,Object.defineProperties(E,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}}),E}({});
1423 + `},mounted:e=>{const t=ci(e),s=Ms(e),n=()=>e.repaint();return document.addEventListener("os-mode-changed",n),()=>{s(),t(),document.removeEventListener("os-mode-changed",n)}},updated:e=>pi(e)});return E.agentDefaultRole=Nt,E.agentFaceSrc=Te,E.agentsRosterStamp=Dt,E.applySelection=at,E.buildMenuOptions=pt,E.columnsFor=we,E.default=gi,E.emptyCast=It,E.hiddenFor=ve,E.listKey=fe,E.nextSort=wt,E.resolveActions=me,E.resolveBanding=ct,E.withSendToHeading=ut,Object.defineProperties(E,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}}),E}({});