@telepath-computer/television 0.1.11 → 0.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,10 +1,10 @@
1
- var ps=Object.defineProperty;var Lr=t=>{throw TypeError(t)};var fs=(t,r,e)=>r in t?ps(t,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[r]=e;var l=(t,r,e)=>fs(t,typeof r!="symbol"?r+"":r,e),Et=(t,r,e)=>r.has(t)||Lr("Cannot "+e);var u=(t,r,e)=>(Et(t,r,"read from private field"),e?e.call(t):r.get(t)),b=(t,r,e)=>r.has(t)?Lr("Cannot add the same private member more than once"):r instanceof WeakSet?r.add(t):r.set(t,e),T=(t,r,e,i)=>(Et(t,r,"write to private field"),i?i.call(t,e):r.set(t,e),e),f=(t,r,e)=>(Et(t,r,"access private method"),e);(function(){const r=document.createElement("link").relList;if(r&&r.supports&&r.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))i(s);new MutationObserver(s=>{for(const n of s)if(n.type==="childList")for(const o of n.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function e(s){const n={};return s.integrity&&(n.integrity=s.integrity),s.referrerPolicy&&(n.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?n.credentials="include":s.crossOrigin==="anonymous"?n.credentials="omit":n.credentials="same-origin",n}function i(s){if(s.ep)return;s.ep=!0;const n=e(s);fetch(s.href,n)}})();const Dr=new WeakMap;function gs(t){return(typeof t=="object"||typeof t=="function")&&t!==null&&"then"in t&&typeof t.then=="function"}function ge(t){return typeof t=="string"?t:typeof t=="symbol"?t.description??t.toString():t.name||"(anonymous class)"}function $r(){return new Error("register(Key, factory) requires a factory function. Wrap existing instances as () => instance.")}function vs(){return new Error("register(Key, factory) does not accept async factories. Await setup before registering.")}class ms{constructor(){l(this,"entries",new Map);l(this,"constructionStack",[])}register(r,e){if(e===void 0){if(typeof r!="function")throw $r();this.validateClassRegistration(r),this.storeFactory(r,()=>this.instantiateClass(r));return}if(typeof e!="function")throw $r();if(e.constructor.name==="AsyncFunction")throw vs();this.storeFactory(r,e)}has(r){var e;return((e=this.entries.get(r))==null?void 0:e.factory)!==void 0}resolve(r){return this.resolveAny(r)}storeFactory(r,e){const i=this.getOrCreateEntry(r);i.factory=e,i.instance=void 0,i.error=void 0}validateClassRegistration(r){const e=Dr.get(r);if(e){if(r.length!==e.length)throw new Error(`${ge(r)} cannot be registered with register(Class). @injectable(...) declared ${e.length} dependencies but constructor arity is ${r.length}. Use register(Key, () => value) instead.`);return}if(r.length!==0)throw new Error(`${ge(r)} cannot be registered with register(Class). Undecorated classes must have zero required constructor parameters. Use register(Key, () => value) instead.`)}instantiateClass(r){const e=Dr.get(r);if(!e)return new r;const i=e.map(s=>this.resolveAny(s));return new r(...i)}resolveAny(r){return this.getOrCreateEntry(r).proxy}getOrCreateEntry(r){let e=this.entries.get(r);return e||(e={key:r},e.proxy=this.createProxy(e),this.entries.set(r,e),e)}createProxy(r){return new Proxy({},{get:(e,i)=>{if(i==="then")return;const s=this.getInstance(r),n=Reflect.get(s,i,s);return typeof n=="function"?n.bind(s):n},set:(e,i,s)=>{const n=this.getInstance(r);return Reflect.set(n,i,s,n)},has:(e,i)=>{const s=this.getInstance(r);return i in s}})}getInstance(r){if(r.instance)return r.instance;if(r.error)throw r.error;if(!r.factory)throw new Error(`${ge(r.key)} was resolved but never registered`);const e=this.constructionStack.indexOf(r.key);if(e!==-1){const i=[...this.constructionStack.slice(e),r.key].map(s=>ge(s)).join(" -> ");throw new Error(`Circular dependency detected: ${i}`)}this.constructionStack.push(r.key);try{const i=r.factory();if(gs(i))throw new Error(`Factory for ${ge(r.key)} returned a Promise. Await setup before registering.`);if(typeof i!="object"||i===null)throw new Error(`Factory for ${ge(r.key)} returned a non-object value. Wrap primitives in an object.`);return r.instance=i,i}catch(i){throw r.error=i,i}finally{this.constructionStack.pop()}}}const W=new ms,ys=new Set(["target","currentTarget","eventPhase","defaultPrevented","isTrusted","timeStamp","srcElement","returnValue","cancelBubble","NONE","CAPTURING_PHASE","AT_TARGET","BUBBLING_PHASE","composedPath","stopPropagation","stopImmediatePropagation","preventDefault","initEvent"]);function ws(t){for(const r of Object.keys(t))if(ys.has(r))throw new Error(`Event payload key "${r}" is reserved; choose a different property name`)}function ks(t,r){ws(r);for(const e of Object.keys(r))Object.defineProperty(t,e,{value:r[e],writable:!0,enumerable:!0,configurable:!0})}function Ze(){class t extends Event{constructor(e,i){const{type:s,bubbles:n,cancelable:o,composed:a,...c}=i??{};if(s!==void 0)throw new Error('Do not pass "type" in init; use the constructor argument instead');super(e,{bubbles:n,cancelable:o,composed:a}),ks(this,c)}}return t}class Je extends globalThis.EventTarget{}const w=Ze(),li=Ze(),Ee=Ze(),hi="0123456789ABCDEFGHJKMNPQRSTVWXYZ",pt=32,Ss=16,di=10,Tr=0xffffffffffff;var oe;(function(t){t.Base32IncorrectEncoding="B32_ENC_INVALID",t.DecodeTimeInvalidCharacter="DEC_TIME_CHAR",t.DecodeTimeValueMalformed="DEC_TIME_MALFORMED",t.EncodeTimeNegative="ENC_TIME_NEG",t.EncodeTimeSizeExceeded="ENC_TIME_SIZE_EXCEED",t.EncodeTimeValueMalformed="ENC_TIME_MALFORMED",t.PRNGDetectFailure="PRNG_DETECT",t.ULIDInvalid="ULID_INVALID",t.Unexpected="UNEXPECTED",t.UUIDInvalid="UUID_INVALID"})(oe||(oe={}));class Ie extends Error{constructor(r,e){super(`${e} (${r})`),this.name="ULIDError",this.code=r}}function bs(t){const r=Math.floor(t()*pt)%pt;return hi.charAt(r)}function _s(t){const r=xs(),e=r&&(r.crypto||r.msCrypto)||null;if(typeof(e==null?void 0:e.getRandomValues)=="function")return()=>{const i=new Uint8Array(1);return e.getRandomValues(i),i[0]/256};if(typeof(e==null?void 0:e.randomBytes)=="function")return()=>e.randomBytes(1).readUInt8()/256;throw new Ie(oe.PRNGDetectFailure,"Failed to find a reliable PRNG")}function xs(){return Cs()?self:typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:null}function Es(t,r){let e="";for(;t>0;t--)e=bs(r)+e;return e}function As(t,r=di){if(isNaN(t))throw new Ie(oe.EncodeTimeValueMalformed,`Time must be a number: ${t}`);if(t>Tr)throw new Ie(oe.EncodeTimeSizeExceeded,`Cannot encode a time larger than ${Tr}: ${t}`);if(t<0)throw new Ie(oe.EncodeTimeNegative,`Time must be positive: ${t}`);if(Number.isInteger(t)===!1)throw new Ie(oe.EncodeTimeValueMalformed,`Time must be an integer: ${t}`);let e,i="";for(let s=r;s>0;s--)e=t%pt,i=hi.charAt(e)+i,t=(t-e)/pt;return i}function Cs(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}function $e(t,r){const e=_s(),i=Date.now();return As(i,di)+Es(Ss,e)}const ui="markdown";function Is(t){const r=t.type??ui;return{id:t.id??$e(),type:r,title:t.title,content:t.content}}const z=4,R=6,pi=2,Ot=2,Ps=z,Ms=R,gr="auto",J="auto",se=120,Wr=75,x=16,Z=se*z+x*(z-1),me=se*R+x*(R-1),Ls=200,Ds=4,st=150,$s=10,Rr=2;function Ft(t,r={}){return{id:r.id??$e(),type:"card",artifactID:t,width:r.width??gr,height:r.height??J}}function Ut(t,r){return t.some(e=>fi(e,r))}function fi(t,r){switch(t.type){case"card":return t.artifactID===r;case"row":return t.children.some(e=>e.artifactID===r);case"stack":return t.children.some(e=>fi(e,r))}}function At(t){return t.layout.flatMap(gi)}function gi(t){switch(t.type){case"card":return[t.artifactID];case"row":return t.children.map(r=>r.artifactID);case"stack":return t.children.flatMap(gi)}}const Ts=4,Ws=/^[0-9A-HJKMNP-TV-Z]{26}$/;function vi(t){return wi(t)}function mi(t,r){return wi(t.flatMap(e=>Si(e,r)))}function yi(t){const r=[],e=new Set;for(const i of t){if(i.type==="row"){r.push(`Top-level rows are invalid: ${i.id}`);continue}bi(i,"strip",r,e)}return{valid:r.length===0,errors:r}}function ye(t){const r=vi(t),e=yi(r);if(!e.valid)throw new Error(`Invalid layout: ${e.errors.join("; ")}`);return{totalNodes:r.length,nodes:r.filter(i=>i.type!=="row").map(Fs)}}function wi(t){const r=[];for(const e of t){const i=ki(e);for(const s of i){if(s.type==="row"){r.push(...s.children.map(j));continue}r.push(s)}}return r}function ki(t){switch(t.type){case"card":return[j(t)];case"row":{const r=t.children.map(j);return r.length===0?[]:r.length===1?[r[0]]:[{...t,children:r}]}case"stack":{const r=[];for(const e of t.children){const i=ki(e);for(const s of i){if(s.type==="stack"){r.push(...s.children.map(Ht));continue}if(s.type==="row"){r.push({...s,children:s.children.map(j)});continue}r.push(j(s))}}return r.length===0?[]:r.length===1?[Ht(r[0])]:[{...t,children:r}]}}}function Si(t,r){switch(t.type){case"card":return t.artifactID===r?[]:[j(t)];case"row":{const e=t.children.filter(i=>i.artifactID!==r).map(j);return e.length===0?[]:e.length===1?[e[0]]:[{...t,children:e}]}case"stack":{const e=t.children.flatMap(i=>Si(i,r).filter(n=>n.type!=="stack"));return e.length===0?[]:e.length===1?[Ht(e[0])]:[{...t,children:e}]}}}function bi(t,r,e,i){switch(t.type){case"card":_i(t,r,e,i);return;case"row":Rs(t,r,e,i);return;case"stack":Ns(t,r,e,i);return}}function _i(t,r,e,i){vr(t.id,e),typeof t.artifactID!="string"||t.artifactID.length===0?e.push(`Card ${t.id} is missing artifactID`):i.has(t.artifactID)?e.push(`Duplicate artifactID in layout: ${t.artifactID}`):i.add(t.artifactID),Os(t.width)||e.push(`Card ${t.id} width must be an integer in the range 2-4`),xi(t.height)||e.push(`Card ${t.id} height must be an integer in the range 2-6 or "auto"`);const s=ne(t.width);r==="row"&&s<pi&&e.push(`Row child ${t.id} must be at least 2 columns wide`)}function Rs(t,r,e,i){if(vr(t.id,e),r!=="stack"&&e.push(`Row ${t.id} may only appear inside a stack`),xi(t.height,Ts)||e.push(`Row ${t.id} height must be an integer in the range 2-4 or "auto"`),!Array.isArray(t.children)||t.children.length===0){e.push(`Row ${t.id} must contain card nodes`);return}let s=0;for(const n of t.children){if(n.type!=="card"){e.push(`Row ${t.id} must contain only card nodes`);continue}_i(n,"row",e,i),s+=ne(n.width)}s!==z&&e.push(`Row ${t.id} children must sum to 4 columns`)}function Ns(t,r,e,i){if(vr(t.id,e),r!=="strip"&&e.push(`Invalid nested stack at ${t.id}; stack children cannot contain another nested stack`),!Array.isArray(t.children)||t.children.length===0){e.push(`Stack ${t.id} must contain at least one child`);return}let s=0,n=0;for(const a of t.children){if(a.type==="stack"){e.push(`Stack ${t.id} cannot contain another nested stack`);continue}if(bi(a,"stack",e,i),a.height===J){n+=1;continue}s+=a.height}if(s>R&&e.push(`Stack ${t.id} exceeds the 6-row budget`),n===0)return;const o=R-s;if(o<n*Ot||o%n!==0){e.push(`Stack ${t.id} has auto-height children that cannot resolve to whole height >= 2`);return}o/n<Ot&&e.push(`Stack ${t.id} has auto-height children below the minimum row size`)}function vr(t,r){(typeof t!="string"||!Ws.test(t))&&r.push(`Node id must be a ULID: ${String(t)}`)}function Os(t){return t===gr||Number.isInteger(t)&&t>=pi&&t<=Ps}function xi(t,r=Ms){return t===J||Number.isInteger(t)&&t>=Ot&&t<=r}function ne(t){return t===gr?z:t}function Fs(t){if(t.type==="card")return{id:t.id,type:"card",width:ne(t.width),cards:[{id:t.id,artifactID:t.artifactID,col:1,row:1,width:ne(t.width),height:Ei(t.height,R)}]};const r=Us(t.children),e=[];let i=1;for(let s=0;s<t.children.length;s+=1){const n=t.children[s],o=r[s];if(n.type==="card")e.push({id:n.id,artifactID:n.artifactID,col:1,row:i,width:ne(n.width),height:o});else{let a=1;for(const c of n.children)e.push({id:c.id,artifactID:c.artifactID,col:a,row:i,width:ne(c.width),height:o}),a+=ne(c.width)}i+=o}return{id:t.id,type:"stack",width:e.reduce((s,n)=>Math.max(s,n.col+n.width-1),1),cards:e}}function Us(t){let r=0,e=0;for(const s of t)s.height===J?e+=1:r+=s.height;const i=e>0?(R-r)/e:0;return t.map(s=>Ei(s.height,i))}function Ei(t,r){return t===J?r:t}function j(t){return{...t}}function Ht(t){return t.type==="card"?j(t):{...t,children:t.children.map(j)}}const Ct="create-artifact",It="remove-artifact",nt="update-layout";class Hs extends Je{constructor(e){var s;super();l(this,"artifacts",new Map);l(this,"activeWorkspaceID",null);l(this,"scrollPosition",0);l(this,"activeWorkspaceData",null);l(this,"clientStore");l(this,"serverManager");l(this,"pendingMutations",new Map);l(this,"pendingWorkspaceCreates",new Map);l(this,"pendingWorkspaceDeletes",new Map);this.clientStore=e.clientStore,this.serverManager=e.serverManager;const i=this.clientStore.get();this.activeWorkspaceID=(i==null?void 0:i.lastWorkspaceID)??null,this.activeWorkspaceID&&(this.scrollPosition=((s=i==null?void 0:i.workspaces[this.activeWorkspaceID])==null?void 0:s.scrollPosition)??0)}get workspaces(){return[...this.getServers().values()].flatMap(e=>[...e.workspaces.values()])}get activeWorkspace(){return this.activeWorkspaceData}get activeWorkspaceServerURL(){var e;return this.activeWorkspaceID?((e=this.findWorkspace(this.activeWorkspaceID))==null?void 0:e.serverURL)??null:null}get activeArtifacts(){return(this.activeWorkspaceData?At(this.activeWorkspaceData):[]).map(e=>this.artifacts.get(e)).filter(e=>e!==void 0)}getArtifactURL(e){const i=this.activeWorkspaceServerURL;if(!i)return null;const s=this.getServers().get(i);return s!=null&&s.getArtifactURL?s.getArtifactURL(e):null}setActiveWorkspace(e){this.selectWorkspace(e)}setScrollPosition(e){const i=Math.max(0,e);this.scrollPosition!==i&&(this.scrollPosition=i,this.persistWorkspaceViewState(),this.dispatchEvent(new w("change")))}createArtifact(e){var c;const i=this.activeWorkspaceData;if(!i)return;const s=this.snapshotState(),n=Is({id:$e(),type:ui,title:e.title,content:e.content});Ut(i.layout,n.id)||(i.layout=[...i.layout,Ft(n.id)]),this.artifacts.set(n.id,n),this.scrollPosition=zs(i.layout),this.persistWorkspaceViewState(),this.dispatchEvent(new w("change"));const o=((c=this.findWorkspace(i.id))==null?void 0:c.server)??null,a=this.getMutationKey(Ct,n.id);this.pendingMutations.set(a,s),this.sendServerMessage(o,{type:"create-artifact",id:n.id,title:e.title,content:e.content,workspaceID:i.id})||(this.pendingMutations.delete(a),this.restoreState(s),this.dispatchEvent(new w("change")))}removeArtifact(e){var a;const i=this.activeWorkspaceData;if(!i||!this.artifacts.has(e))return;const s=this.snapshotState();this.removeArtifactLocally(e),this.dispatchEvent(new w("change"));const n=((a=this.findWorkspace(i.id))==null?void 0:a.server)??null,o=this.getMutationKey(It,e);this.pendingMutations.set(o,s),this.sendServerMessage(n,{type:"remove-artifact",artifactID:e,workspaceID:i.id})||(this.pendingMutations.delete(o),this.restoreState(s),this.dispatchEvent(new w("change")))}handleServerEvent(e,i){var s;switch(i.type){case"workspace-list":this.syncActiveWorkspaceState(e,!0);break;case"workspace-updated":this.syncActiveWorkspaceState(e,!1),Array.isArray(i.fields.layout)&&this.pendingMutations.delete(this.getMutationKey(nt,i.workspaceID));break;case"workspace-removed":{this.syncActiveWorkspaceState(e,!1);const n=this.pendingWorkspaceDeletes.get(i.workspaceID);n&&(this.pendingWorkspaceDeletes.delete(i.workspaceID),n.resolve());break}case"workspace-created":if(this.pendingWorkspaceCreates.has(i.workspace.id)){const n=this.pendingWorkspaceCreates.get(i.workspace.id);this.pendingWorkspaceCreates.delete(i.workspace.id),this.selectWorkspace(i.workspace.id),n==null||n.resolve();return}this.syncActiveWorkspaceState(e,!1);break;case"workspace":this.applyWorkspaceSnapshot(i.workspace,i.artifacts);break;case"artifact-created":this.pendingMutations.delete(this.getMutationKey(Ct,i.artifact.id)),this.applyArtifactCreated(i);break;case"artifact-updated":this.applyArtifactUpdated(i);break;case"artifact-removed":if(this.pendingMutations.delete(this.getMutationKey(It,i.artifactID)),((s=this.activeWorkspaceData)==null?void 0:s.id)!==i.workspaceID)return;this.removeArtifactLocally(i.artifactID)&&this.dispatchEvent(new w("change"));break;case"error":this.handleServerError(i);break}}createWorkspace(e,i){const s=this.getServers().get(e)??null,n=$e(),o=Nr();return this.pendingWorkspaceCreates.set(n,o),this.sendServerMessage(s,{type:"create-workspace",id:n,name:i})||(this.pendingWorkspaceCreates.delete(n),o.reject(new Error(`Server unavailable: ${e}`))),o.promise}deleteWorkspace(){var o;const e=this.activeWorkspaceData;if(!e)return Promise.reject(new Error("No active workspace"));const i=this.pendingWorkspaceDeletes.get(e.id);if(i)return i.promise;const s=((o=this.findWorkspace(e.id))==null?void 0:o.server)??null,n=Nr();return this.pendingWorkspaceDeletes.set(e.id,n),this.sendServerMessage(s,{type:"delete-workspace",workspaceID:e.id})||(this.pendingWorkspaceDeletes.delete(e.id),n.reject(new Error(`Server unavailable: ${e.id}`))),n.promise}renameWorkspace(e){var n;const i=this.activeWorkspaceData;if(!i)return;const s=((n=this.findWorkspace(i.id))==null?void 0:n.server)??null;i.name=e,this.dispatchEvent(new w("change")),this.sendServerMessage(s,{type:"update-workspace",workspaceID:i.id,fields:{name:e}})}setLayout(e){var h;const i=this.activeWorkspaceData;if(!i)return;const s=vi(e);if(!yi(s).valid)return;const o=this.snapshotState();i.layout=s,this.dispatchEvent(new w("change"));const a=((h=this.findWorkspace(i.id))==null?void 0:h.server)??null,c=this.getMutationKey(nt,i.id);this.pendingMutations.set(c,o),this.sendServerMessage(a,{type:"update-workspace",workspaceID:i.id,fields:{layout:s.map(d=>structuredClone(d))}})||(this.pendingMutations.delete(c),this.restoreState(o),this.dispatchEvent(new w("change")))}syncActiveWorkspaceState(e,i){const s=this.activeWorkspaceID?this.findWorkspace(this.activeWorkspaceID):null;if(!s){const n=this.pickNextWorkspace();if(!n){const o=this.activeWorkspaceID!==null||this.activeWorkspaceData!==null||this.artifacts.size>0;this.activeWorkspaceID=null,this.activeWorkspaceData=null,this.artifacts.clear(),this.scrollPosition=0,o&&this.dispatchEvent(new w("change"));return}this.selectWorkspace(n.workspace.id);return}this.applyServerWorkspaceState(s.workspace),i&&s.serverURL===e&&this.requestWorkspace(s.serverURL,s.workspace.id)}hasPendingLayoutMutation(e){return this.pendingMutations.has(this.getMutationKey(nt,e))}selectWorkspace(e){const i=this.findWorkspace(e);i&&(this.activeWorkspaceID=e,this.activeWorkspaceData=structuredClone(i.workspace),this.artifacts.clear(),this.restoreWorkspaceViewState(),this.persistActiveWorkspace(),this.requestWorkspace(i.serverURL,e),this.dispatchEvent(new w("change")))}requestWorkspace(e,i){const s=this.getServers().get(e);this.sendServerMessage(s??null,{type:"get-workspace",workspaceID:i})}applyWorkspaceSnapshot(e,i){if(e.id===this.activeWorkspaceID){this.applyServerWorkspaceState(e),this.artifacts.clear();for(const s of i)this.artifacts.set(s.id,structuredClone(s));this.restoreWorkspaceViewState(),this.dispatchEvent(new w("change"))}}applyServerWorkspaceState(e){if(!this.activeWorkspaceData||this.activeWorkspaceData.id!==e.id){this.activeWorkspaceData=structuredClone(e);return}this.activeWorkspaceData.name=e.name,this.hasPendingLayoutMutation(e.id)||(this.activeWorkspaceData.layout=e.layout.map(i=>structuredClone(i)))}applyArtifactCreated(e){var i;((i=this.activeWorkspaceData)==null?void 0:i.id)===e.workspaceID&&(Ut(this.activeWorkspaceData.layout,e.artifact.id)||(this.activeWorkspaceData.layout=[...this.activeWorkspaceData.layout,Ft(e.artifact.id)]),this.artifacts.set(e.artifact.id,e.artifact),this.dispatchEvent(new w("change")))}applyArtifactUpdated(e){const i=this.artifacts.get(e.artifactID);i&&(Object.assign(i,e.fields),this.dispatchEvent(new w("change")))}removeArtifactLocally(e){if(!this.activeWorkspaceData)return!1;const i=this.artifacts.delete(e),s=At(this.activeWorkspaceData).length;return this.activeWorkspaceData.layout=mi(this.activeWorkspaceData.layout,e),!(!i&&s===At(this.activeWorkspaceData).length)}snapshotState(){return{activeWorkspaceData:this.activeWorkspaceData?structuredClone(this.activeWorkspaceData):null,scrollPosition:this.scrollPosition,artifacts:new Map([...this.artifacts.entries()].map(([e,i])=>[e,structuredClone(i)]))}}restoreState(e){this.activeWorkspaceData=e.activeWorkspaceData?structuredClone(e.activeWorkspaceData):null,this.scrollPosition=e.scrollPosition,this.artifacts.clear();for(const[i,s]of e.artifacts.entries())this.artifacts.set(i,structuredClone(s));this.persistWorkspaceViewState()}handleServerError(e){const i=e.request;if(i){if(i.type==="create-artifact"){const s=this.getMutationKey(Ct,i.id),n=this.pendingMutations.get(s);if(!n)return;this.pendingMutations.delete(s),this.restoreState(n),this.dispatchEvent(new w("change"));return}if(i.type==="create-workspace"){const s=this.pendingWorkspaceCreates.get(i.id);if(!s)return;this.pendingWorkspaceCreates.delete(i.id),s.reject(new Error(e.message));return}if(i.type==="delete-workspace"){const s=this.pendingWorkspaceDeletes.get(i.workspaceID);if(!s)return;this.pendingWorkspaceDeletes.delete(i.workspaceID),s.reject(new Error(e.message));return}if(i.type==="update-workspace"&&Array.isArray(i.fields.layout)){const s=this.getMutationKey(nt,i.workspaceID),n=this.pendingMutations.get(s);if(!n)return;this.pendingMutations.delete(s),this.restoreState(n),this.dispatchEvent(new w("change"));return}if(i.type==="remove-artifact"){const s=this.getMutationKey(It,i.artifactID),n=this.pendingMutations.get(s);if(!n)return;this.pendingMutations.delete(s),this.restoreState(n),this.dispatchEvent(new w("change"))}}}restoreWorkspaceViewState(){var i,s;if(!this.activeWorkspaceID){this.scrollPosition=0;return}const e=((s=(i=this.clientStore.get())==null?void 0:i.workspaces[this.activeWorkspaceID])==null?void 0:s.scrollPosition)??0;this.scrollPosition=Math.max(0,e),this.persistWorkspaceViewState()}persistActiveWorkspace(){this.clientStore.update(e=>{e.lastWorkspaceID=this.activeWorkspaceID})}persistWorkspaceViewState(){this.activeWorkspaceID&&this.clientStore.update(e=>{var i,s;(i=e.workspaces)[s=this.activeWorkspaceID]??(i[s]={scrollPosition:0}),e.workspaces[this.activeWorkspaceID].scrollPosition=this.scrollPosition})}findWorkspace(e){for(const[i,s]of this.getServers()){const n=s.workspaces.get(e);if(n)return{serverURL:i,server:s,workspace:n}}return null}pickNextWorkspace(){var i;const e=(i=this.clientStore.get())==null?void 0:i.lastWorkspaceID;if(e){const s=this.findWorkspace(e);if(s)return s}for(const[s,n]of this.getServers()){const o=n.workspaces.values().next().value;if(o)return{serverURL:s,server:n,workspace:o}}return null}sendServerMessage(e,i){return e?e.send(i):!1}getServers(){return this.serverManager.servers}getMutationKey(e,i){return`${e}:${i}`}}function zs(t){var i;const r=ye(t);if(r.nodes.length<=1)return 0;let e=0;for(let s=0;s<r.nodes.length-1;s+=1)e+=((i=r.nodes[s])==null?void 0:i.width)??0;return e}function Nr(){let t,r;return{promise:new Promise((i,s)=>{t=i,r=s}),resolve:t,reject:r}}var Ai=Symbol.for("immer-nothing"),Or=Symbol.for("immer-draftable"),N=Symbol.for("immer-state");function H(t,...r){throw new Error(`[Immer] minified error nr: ${t}. Full error at: https://bit.ly/3cXEKWf`)}var Te=Object.getPrototypeOf;function Se(t){return!!t&&!!t[N]}function le(t){var r;return t?Ci(t)||Array.isArray(t)||!!t[Or]||!!((r=t.constructor)!=null&&r[Or])||Qe(t)||St(t):!1}var Vs=Object.prototype.constructor.toString(),Fr=new WeakMap;function Ci(t){if(!t||typeof t!="object")return!1;const r=Object.getPrototypeOf(t);if(r===null||r===Object.prototype)return!0;const e=Object.hasOwnProperty.call(r,"constructor")&&r.constructor;if(e===Object)return!0;if(typeof e!="function")return!1;let i=Fr.get(e);return i===void 0&&(i=Function.toString.call(e),Fr.set(e,i)),i===Vs}function ft(t,r,e=!0){kt(t)===0?(e?Reflect.ownKeys(t):Object.keys(t)).forEach(s=>{r(s,t[s],t)}):t.forEach((i,s)=>r(s,i,t))}function kt(t){const r=t[N];return r?r.type_:Array.isArray(t)?1:Qe(t)?2:St(t)?3:0}function zt(t,r){return kt(t)===2?t.has(r):Object.prototype.hasOwnProperty.call(t,r)}function Ii(t,r,e){const i=kt(t);i===2?t.set(r,e):i===3?t.add(e):t[r]=e}function Gs(t,r){return t===r?t!==0||1/t===1/r:t!==t&&r!==r}function Qe(t){return t instanceof Map}function St(t){return t instanceof Set}function re(t){return t.copy_||t.base_}function Vt(t,r){if(Qe(t))return new Map(t);if(St(t))return new Set(t);if(Array.isArray(t))return Array.prototype.slice.call(t);const e=Ci(t);if(r===!0||r==="class_only"&&!e){const i=Object.getOwnPropertyDescriptors(t);delete i[N];let s=Reflect.ownKeys(i);for(let n=0;n<s.length;n++){const o=s[n],a=i[o];a.writable===!1&&(a.writable=!0,a.configurable=!0),(a.get||a.set)&&(i[o]={configurable:!0,writable:!0,enumerable:a.enumerable,value:t[o]})}return Object.create(Te(t),i)}else{const i=Te(t);if(i!==null&&e)return{...t};const s=Object.create(i);return Object.assign(s,t)}}function mr(t,r=!1){return bt(t)||Se(t)||!le(t)||(kt(t)>1&&Object.defineProperties(t,{set:ot,add:ot,clear:ot,delete:ot}),Object.freeze(t),r&&Object.values(t).forEach(e=>mr(e,!0))),t}function Bs(){H(2)}var ot={value:Bs};function bt(t){return t===null||typeof t!="object"?!0:Object.isFrozen(t)}var js={};function he(t){const r=js[t];return r||H(0,t),r}var We;function Pi(){return We}function Xs(t,r){return{drafts_:[],parent_:t,immer_:r,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function Ur(t,r){r&&(he("Patches"),t.patches_=[],t.inversePatches_=[],t.patchListener_=r)}function Gt(t){Bt(t),t.drafts_.forEach(Ys),t.drafts_=null}function Bt(t){t===We&&(We=t.parent_)}function Hr(t){return We=Xs(We,t)}function Ys(t){const r=t[N];r.type_===0||r.type_===1?r.revoke_():r.revoked_=!0}function zr(t,r){r.unfinalizedDrafts_=r.drafts_.length;const e=r.drafts_[0];return t!==void 0&&t!==e?(e[N].modified_&&(Gt(r),H(4)),le(t)&&(t=gt(r,t),r.parent_||vt(r,t)),r.patches_&&he("Patches").generateReplacementPatches_(e[N].base_,t,r.patches_,r.inversePatches_)):t=gt(r,e,[]),Gt(r),r.patches_&&r.patchListener_(r.patches_,r.inversePatches_),t!==Ai?t:void 0}function gt(t,r,e){if(bt(r))return r;const i=t.immer_.shouldUseStrictIteration(),s=r[N];if(!s)return ft(r,(n,o)=>Vr(t,s,r,n,o,e),i),r;if(s.scope_!==t)return r;if(!s.modified_)return vt(t,s.base_,!0),s.base_;if(!s.finalized_){s.finalized_=!0,s.scope_.unfinalizedDrafts_--;const n=s.copy_;let o=n,a=!1;s.type_===3&&(o=new Set(n),n.clear(),a=!0),ft(o,(c,h)=>Vr(t,s,n,c,h,e,a),i),vt(t,n,!1),e&&t.patches_&&he("Patches").generatePatches_(s,e,t.patches_,t.inversePatches_)}return s.copy_}function Vr(t,r,e,i,s,n,o){if(s==null||typeof s!="object"&&!o)return;const a=bt(s);if(!(a&&!o)){if(Se(s)){const c=n&&r&&r.type_!==3&&!zt(r.assigned_,i)?n.concat(i):void 0,h=gt(t,s,c);if(Ii(e,i,h),Se(h))t.canAutoFreeze_=!1;else return}else o&&e.add(s);if(le(s)&&!a){if(!t.immer_.autoFreeze_&&t.unfinalizedDrafts_<1||r&&r.base_&&r.base_[i]===s&&a)return;gt(t,s),(!r||!r.scope_.parent_)&&typeof i!="symbol"&&(Qe(e)?e.has(i):Object.prototype.propertyIsEnumerable.call(e,i))&&vt(t,s)}}}function vt(t,r,e=!1){!t.parent_&&t.immer_.autoFreeze_&&t.canAutoFreeze_&&mr(r,e)}function Ks(t,r){const e=Array.isArray(t),i={type_:e?1:0,scope_:r?r.scope_:Pi(),modified_:!1,finalized_:!1,assigned_:{},parent_:r,base_:t,draft_:null,copy_:null,revoke_:null,isManual_:!1};let s=i,n=yr;e&&(s=[i],n=Re);const{revoke:o,proxy:a}=Proxy.revocable(s,n);return i.draft_=a,i.revoke_=o,a}var yr={get(t,r){if(r===N)return t;const e=re(t);if(!zt(e,r))return qs(t,e,r);const i=e[r];return t.finalized_||!le(i)?i:i===Pt(t.base_,r)?(Mt(t),t.copy_[r]=Xt(i,t)):i},has(t,r){return r in re(t)},ownKeys(t){return Reflect.ownKeys(re(t))},set(t,r,e){const i=Mi(re(t),r);if(i!=null&&i.set)return i.set.call(t.draft_,e),!0;if(!t.modified_){const s=Pt(re(t),r),n=s==null?void 0:s[N];if(n&&n.base_===e)return t.copy_[r]=e,t.assigned_[r]=!1,!0;if(Gs(e,s)&&(e!==void 0||zt(t.base_,r)))return!0;Mt(t),jt(t)}return t.copy_[r]===e&&(e!==void 0||r in t.copy_)||Number.isNaN(e)&&Number.isNaN(t.copy_[r])||(t.copy_[r]=e,t.assigned_[r]=!0),!0},deleteProperty(t,r){return Pt(t.base_,r)!==void 0||r in t.base_?(t.assigned_[r]=!1,Mt(t),jt(t)):delete t.assigned_[r],t.copy_&&delete t.copy_[r],!0},getOwnPropertyDescriptor(t,r){const e=re(t),i=Reflect.getOwnPropertyDescriptor(e,r);return i&&{writable:!0,configurable:t.type_!==1||r!=="length",enumerable:i.enumerable,value:e[r]}},defineProperty(){H(11)},getPrototypeOf(t){return Te(t.base_)},setPrototypeOf(){H(12)}},Re={};ft(yr,(t,r)=>{Re[t]=function(){return arguments[0]=arguments[0][0],r.apply(this,arguments)}});Re.deleteProperty=function(t,r){return Re.set.call(this,t,r,void 0)};Re.set=function(t,r,e){return yr.set.call(this,t[0],r,e,t[0])};function Pt(t,r){const e=t[N];return(e?re(e):t)[r]}function qs(t,r,e){var s;const i=Mi(r,e);return i?"value"in i?i.value:(s=i.get)==null?void 0:s.call(t.draft_):void 0}function Mi(t,r){if(!(r in t))return;let e=Te(t);for(;e;){const i=Object.getOwnPropertyDescriptor(e,r);if(i)return i;e=Te(e)}}function jt(t){t.modified_||(t.modified_=!0,t.parent_&&jt(t.parent_))}function Mt(t){t.copy_||(t.copy_=Vt(t.base_,t.scope_.immer_.useStrictShallowCopy_))}var Zs=class{constructor(t){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!0,this.produce=(r,e,i)=>{if(typeof r=="function"&&typeof e!="function"){const n=e;e=r;const o=this;return function(c=n,...h){return o.produce(c,d=>e.call(this,d,...h))}}typeof e!="function"&&H(6),i!==void 0&&typeof i!="function"&&H(7);let s;if(le(r)){const n=Hr(this),o=Xt(r,void 0);let a=!0;try{s=e(o),a=!1}finally{a?Gt(n):Bt(n)}return Ur(n,i),zr(s,n)}else if(!r||typeof r!="object"){if(s=e(r),s===void 0&&(s=r),s===Ai&&(s=void 0),this.autoFreeze_&&mr(s,!0),i){const n=[],o=[];he("Patches").generateReplacementPatches_(r,s,n,o),i(n,o)}return s}else H(1,r)},this.produceWithPatches=(r,e)=>{if(typeof r=="function")return(o,...a)=>this.produceWithPatches(o,c=>r(c,...a));let i,s;return[this.produce(r,e,(o,a)=>{i=o,s=a}),i,s]},typeof(t==null?void 0:t.autoFreeze)=="boolean"&&this.setAutoFreeze(t.autoFreeze),typeof(t==null?void 0:t.useStrictShallowCopy)=="boolean"&&this.setUseStrictShallowCopy(t.useStrictShallowCopy),typeof(t==null?void 0:t.useStrictIteration)=="boolean"&&this.setUseStrictIteration(t.useStrictIteration)}createDraft(t){le(t)||H(8),Se(t)&&(t=Js(t));const r=Hr(this),e=Xt(t,void 0);return e[N].isManual_=!0,Bt(r),e}finishDraft(t,r){const e=t&&t[N];(!e||!e.isManual_)&&H(9);const{scope_:i}=e;return Ur(i,r),zr(void 0,i)}setAutoFreeze(t){this.autoFreeze_=t}setUseStrictShallowCopy(t){this.useStrictShallowCopy_=t}setUseStrictIteration(t){this.useStrictIteration_=t}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(t,r){let e;for(e=r.length-1;e>=0;e--){const s=r[e];if(s.path.length===0&&s.op==="replace"){t=s.value;break}}e>-1&&(r=r.slice(e+1));const i=he("Patches").applyPatches_;return Se(t)?i(t,r):this.produce(t,s=>i(s,r))}};function Xt(t,r){const e=Qe(t)?he("MapSet").proxyMap_(t,r):St(t)?he("MapSet").proxySet_(t,r):Ks(t,r);return(r?r.scope_:Pi()).drafts_.push(e),e}function Js(t){return Se(t)||H(10,t),Li(t)}function Li(t){if(!le(t)||bt(t))return t;const r=t[N];let e,i=!0;if(r){if(!r.modified_)return r.base_;r.finalized_=!0,e=Vt(t,r.scope_.immer_.useStrictShallowCopy_),i=r.scope_.immer_.shouldUseStrictIteration()}else e=Vt(t,!0);return ft(e,(s,n)=>{Ii(e,s,Li(n))},i),r&&(r.finalized_=!1),e}var Qs=new Zs,en=Qs.produce,tn=Object.defineProperty,rn=(t,r,e)=>r in t?tn(t,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[r]=e,at=(t,r,e)=>rn(t,typeof r!="symbol"?r+"":r,e);function sn(t){return{all:t=t||new Map,on:function(r,e){var i=t.get(r);i?i.push(e):t.set(r,[e])},off:function(r,e){var i=t.get(r);i&&(e?i.splice(i.indexOf(e)>>>0,1):t.set(r,[]))},emit:function(r,e){var i=t.get(r);i&&i.slice().map(function(s){s(e)}),(i=t.get("*"))&&i.slice().map(function(s){s(r,e)})}}}var nn=class{constructor(){at(this,"emitter",sn()),at(this,"on",(t,r)=>(this.emitter.on(t,r),{dispose:()=>this.emitter.off(t,r)})),at(this,"once",(t,r)=>{const e=i=>{r(i),this.emitter.off(t,e)};return this.emitter.on(t,e),{dispose:()=>this.emitter.off(t,e)}}),at(this,"off",this.emitter.off)}emit(t,...[r]){this.emitter.emit(t,r)}},on="store-",an=class extends nn{emitChange(t){this.emit("change",{state:t})}},cn=class{constructor(t,r,e){this.emitter=new an,this.id=t,this.initValue=r,this.key=`${on}${t}`,this.storage=(e==null?void 0:e.storage)==="session"?sessionStorage:localStorage,this.get()===void 0&&this.storage.setItem(this.key,JSON.stringify(r))}get(){const t=this.storage.getItem(this.key);return t===null?void 0:JSON.parse(t)}update(t){const r=this.get()??{},e=en(r,t);this.storage.setItem(this.key,JSON.stringify(e)),this.emitter.emitChange(e)}reset(){this.storage.setItem(this.key,JSON.stringify(this.initValue)),this.emitter.emitChange(this.initValue)}on(t,r){return this.emitter.on(t,({state:e})=>r(e))}subscribe(t){const r=this.on("change",t),e=this.get();return e!==void 0&&t(e),r}};const ln="Local";function Y(t){return new URL(t).origin}function hn(t){return{servers:[{url:Y(t),name:ln}],lastWorkspaceID:null,workspaces:{}}}function dn(t,r){return new cn(t,hn(r))}const un=4401;class Yt extends Error{constructor(r="Authentication required"){super(r),this.name="AuthError"}}class Kt extends Je{constructor(e){super();l(this,"url");l(this,"name");l(this,"token");l(this,"status","disconnected");l(this,"workspaces",new Map);l(this,"createSocket");l(this,"socket",null);l(this,"connectAttempt",0);this.url=Y(e.url),this.name=e.name,this.token=e.token??null,this.createSocket=e.createSocket??(i=>new WebSocket(i))}async connect(){var s;this.connectAttempt+=1;const e=this.connectAttempt;(s=this.socket)==null||s.close(),this.status="connecting",this.dispatchEvent(new w("change"));const i=this.createSocket(pn(this.url,this.token));return this.socket=i,await new Promise((n,o)=>{let a=!1;const c=()=>{a||this.connectAttempt!==e||(a=!0,this.status="connected",this.dispatchEvent(new w("change")),n())},h=d=>{a||this.connectAttempt!==e||(a=!0,this.status="disconnected",this.dispatchEvent(new w("change")),o(d))};i.addEventListener("message",d=>{const p=gn(d);this.applyServerMessage(p),this.dispatchEvent(new li("server-message",{serverURL:this.url,message:p})),a||c()}),i.addEventListener("close",d=>{if(this.connectAttempt===e){if(this.socket=null,fn(d)===un){h(new Yt);return}if(!a){h(new Error("Connection closed before initialization"));return}this.status="disconnected",this.dispatchEvent(new w("change"))}}),i.addEventListener("error",()=>{h(new Error("WebSocket connection failed"))})})}disconnect(){var e;this.connectAttempt+=1,(e=this.socket)==null||e.close(),this.socket=null,this.status="disconnected",this.dispatchEvent(new w("change"))}send(e){return!this.socket||this.socket.readyState!==1?!1:(this.socket.send(JSON.stringify(e)),!0)}getArtifactURL(e){const i=new URL(this.url);return i.pathname=`/artifact/${e}`,i.search="",this.token&&i.searchParams.set("token",this.token),i.hash="",i.toString()}applyServerMessage(e){switch(e.type){case"workspace-list":this.workspaces=new Map(e.workspaces.map(i=>[i.id,structuredClone(i)]));break;case"workspace-created":this.workspaces.set(e.workspace.id,structuredClone(e.workspace));break;case"workspace-updated":{const i=this.workspaces.get(e.workspaceID);i&&(typeof e.fields.name=="string"&&(i.name=e.fields.name),Array.isArray(e.fields.layout)&&(i.layout=e.fields.layout));break}case"workspace-removed":this.workspaces.delete(e.workspaceID);break;case"artifact-created":{const i=this.workspaces.get(e.workspaceID);i&&!Ut(i.layout,e.artifact.id)&&(i.layout=[...i.layout,Ft(e.artifact.id)]);break}case"artifact-removed":{const i=this.workspaces.get(e.workspaceID);i&&(i.layout=mi(i.layout,e.artifactID));break}}}}function pn(t,r){const e=new URL(t);return e.protocol=e.protocol==="https:"?"wss:":"ws:",e.pathname="/ws",e.search="",r&&e.searchParams.set("token",r),e.hash="",e.toString()}function fn(t){return typeof t=="object"&&t!==null&&"code"in t&&typeof t.code=="number"?t.code:null}function gn(t){const r=typeof t=="string"?t:typeof t=="object"&&t!==null&&"data"in t&&typeof t.data=="string"?t.data:"";return JSON.parse(r)}class vn extends Je{constructor(e){super();l(this,"servers",new Map);l(this,"localServerURL");l(this,"activeServer",null);l(this,"clientStore");l(this,"createSocket");l(this,"serverListeners",new Map);this.clientStore=e.clientStore,this.localServerURL=e.localServerURL?Y(e.localServerURL):null,this.createSocket=e.createSocket??(i=>new WebSocket(i))}add(e){const i=Y(e.url);this.servers.get(i)&&this.remove(i),this.servers.set(i,e);const n=()=>{this.dispatchEvent(new w("change"))},o=a=>{this.dispatchEvent(new li("server-message",{serverURL:a.serverURL,message:a.message}))};e.addEventListener("change",n),e.addEventListener("server-message",o),this.serverListeners.set(i,{onServerChange:n,onServerMessage:o}),this.dispatchEvent(new w("change"))}remove(e){const i=Y(e);if(this.localServerURL&&i===this.localServerURL)return;const s=this.servers.get(i);if(!s)return;const n=this.serverListeners.get(i);n&&(s.removeEventListener("change",n.onServerChange),s.removeEventListener("server-message",n.onServerMessage),this.serverListeners.delete(i)),s.disconnect(),this.servers.delete(i),this.activeServer===s&&(this.activeServer=null),this.clientStore.update(o=>{o.servers=o.servers.filter(a=>a.url!==i)}),this.dispatchEvent(new w("change"))}setActive(e){this.activeServer=e,this.dispatchEvent(new w("change"))}connectConfiguredServers(e){var n;const i=((n=this.clientStore.get())==null?void 0:n.servers)??[];for(const o of i){const a=new Kt({url:o.url,name:o.name,createSocket:this.createSocket});this.add(a),a.connect().catch(()=>{})}const s=e?this.servers.get(Y(e))??null:null;this.setActive(s??this.servers.values().next().value??null)}addServer(e,i){const s=Y(e);this.remove(s),this.clientStore.update(o=>{o.servers=o.servers.filter(a=>Y(a.url)!==s),o.servers.push({url:s,name:i})});const n=new Kt({url:s,name:i,createSocket:this.createSocket});this.add(n),this.setActive(n),n.connect().catch(()=>{})}removeServer(e){this.remove(e)}}const mn="serverURL",yn="token",wn="mode",kn="electron";function Di(t=window.location.search,r=window.location.origin){const i=new URLSearchParams(t).get(mn);return i?new URL(i).origin:new URL(r).origin}function Sn(t=window.location.search){return new URLSearchParams(t).get(yn)}function $i(t=window.location.search){return new URLSearchParams(t).get(wn)===kn}/**
1
+ var ps=Object.defineProperty;var Dr=t=>{throw TypeError(t)};var fs=(t,r,e)=>r in t?ps(t,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[r]=e;var l=(t,r,e)=>fs(t,typeof r!="symbol"?r+"":r,e),At=(t,r,e)=>r.has(t)||Dr("Cannot "+e);var u=(t,r,e)=>(At(t,r,"read from private field"),e?e.call(t):r.get(t)),b=(t,r,e)=>r.has(t)?Dr("Cannot add the same private member more than once"):r instanceof WeakSet?r.add(t):r.set(t,e),T=(t,r,e,i)=>(At(t,r,"write to private field"),i?i.call(t,e):r.set(t,e),e),f=(t,r,e)=>(At(t,r,"access private method"),e);(function(){const r=document.createElement("link").relList;if(r&&r.supports&&r.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))i(s);new MutationObserver(s=>{for(const n of s)if(n.type==="childList")for(const o of n.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function e(s){const n={};return s.integrity&&(n.integrity=s.integrity),s.referrerPolicy&&(n.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?n.credentials="include":s.crossOrigin==="anonymous"?n.credentials="omit":n.credentials="same-origin",n}function i(s){if(s.ep)return;s.ep=!0;const n=e(s);fetch(s.href,n)}})();const $r=new WeakMap;function gs(t){return(typeof t=="object"||typeof t=="function")&&t!==null&&"then"in t&&typeof t.then=="function"}function ge(t){return typeof t=="string"?t:typeof t=="symbol"?t.description??t.toString():t.name||"(anonymous class)"}function Tr(){return new Error("register(Key, factory) requires a factory function. Wrap existing instances as () => instance.")}function vs(){return new Error("register(Key, factory) does not accept async factories. Await setup before registering.")}class ms{constructor(){l(this,"entries",new Map);l(this,"constructionStack",[])}register(r,e){if(e===void 0){if(typeof r!="function")throw Tr();this.validateClassRegistration(r),this.storeFactory(r,()=>this.instantiateClass(r));return}if(typeof e!="function")throw Tr();if(e.constructor.name==="AsyncFunction")throw vs();this.storeFactory(r,e)}has(r){var e;return((e=this.entries.get(r))==null?void 0:e.factory)!==void 0}resolve(r){return this.resolveAny(r)}storeFactory(r,e){const i=this.getOrCreateEntry(r);i.factory=e,i.instance=void 0,i.error=void 0}validateClassRegistration(r){const e=$r.get(r);if(e){if(r.length!==e.length)throw new Error(`${ge(r)} cannot be registered with register(Class). @injectable(...) declared ${e.length} dependencies but constructor arity is ${r.length}. Use register(Key, () => value) instead.`);return}if(r.length!==0)throw new Error(`${ge(r)} cannot be registered with register(Class). Undecorated classes must have zero required constructor parameters. Use register(Key, () => value) instead.`)}instantiateClass(r){const e=$r.get(r);if(!e)return new r;const i=e.map(s=>this.resolveAny(s));return new r(...i)}resolveAny(r){return this.getOrCreateEntry(r).proxy}getOrCreateEntry(r){let e=this.entries.get(r);return e||(e={key:r},e.proxy=this.createProxy(e),this.entries.set(r,e),e)}createProxy(r){return new Proxy({},{get:(e,i)=>{if(i==="then")return;const s=this.getInstance(r),n=Reflect.get(s,i,s);return typeof n=="function"?n.bind(s):n},set:(e,i,s)=>{const n=this.getInstance(r);return Reflect.set(n,i,s,n)},has:(e,i)=>{const s=this.getInstance(r);return i in s}})}getInstance(r){if(r.instance)return r.instance;if(r.error)throw r.error;if(!r.factory)throw new Error(`${ge(r.key)} was resolved but never registered`);const e=this.constructionStack.indexOf(r.key);if(e!==-1){const i=[...this.constructionStack.slice(e),r.key].map(s=>ge(s)).join(" -> ");throw new Error(`Circular dependency detected: ${i}`)}this.constructionStack.push(r.key);try{const i=r.factory();if(gs(i))throw new Error(`Factory for ${ge(r.key)} returned a Promise. Await setup before registering.`);if(typeof i!="object"||i===null)throw new Error(`Factory for ${ge(r.key)} returned a non-object value. Wrap primitives in an object.`);return r.instance=i,i}catch(i){throw r.error=i,i}finally{this.constructionStack.pop()}}}const W=new ms,ys=new Set(["target","currentTarget","eventPhase","defaultPrevented","isTrusted","timeStamp","srcElement","returnValue","cancelBubble","NONE","CAPTURING_PHASE","AT_TARGET","BUBBLING_PHASE","composedPath","stopPropagation","stopImmediatePropagation","preventDefault","initEvent"]);function ws(t){for(const r of Object.keys(t))if(ys.has(r))throw new Error(`Event payload key "${r}" is reserved; choose a different property name`)}function ks(t,r){ws(r);for(const e of Object.keys(r))Object.defineProperty(t,e,{value:r[e],writable:!0,enumerable:!0,configurable:!0})}function xe(){class t extends Event{constructor(e,i){const{type:s,bubbles:n,cancelable:o,composed:a,...c}=i??{};if(s!==void 0)throw new Error('Do not pass "type" in init; use the constructor argument instead');super(e,{bubbles:n,cancelable:o,composed:a}),ks(this,c)}}return t}class Je extends globalThis.EventTarget{}const w=xe(),hi=xe(),Ae=xe(),di="0123456789ABCDEFGHJKMNPQRSTVWXYZ",ft=32,Ss=16,ui=10,Wr=0xffffffffffff;var oe;(function(t){t.Base32IncorrectEncoding="B32_ENC_INVALID",t.DecodeTimeInvalidCharacter="DEC_TIME_CHAR",t.DecodeTimeValueMalformed="DEC_TIME_MALFORMED",t.EncodeTimeNegative="ENC_TIME_NEG",t.EncodeTimeSizeExceeded="ENC_TIME_SIZE_EXCEED",t.EncodeTimeValueMalformed="ENC_TIME_MALFORMED",t.PRNGDetectFailure="PRNG_DETECT",t.ULIDInvalid="ULID_INVALID",t.Unexpected="UNEXPECTED",t.UUIDInvalid="UUID_INVALID"})(oe||(oe={}));class Pe extends Error{constructor(r,e){super(`${e} (${r})`),this.name="ULIDError",this.code=r}}function bs(t){const r=Math.floor(t()*ft)%ft;return di.charAt(r)}function _s(t){const r=xs(),e=r&&(r.crypto||r.msCrypto)||null;if(typeof(e==null?void 0:e.getRandomValues)=="function")return()=>{const i=new Uint8Array(1);return e.getRandomValues(i),i[0]/256};if(typeof(e==null?void 0:e.randomBytes)=="function")return()=>e.randomBytes(1).readUInt8()/256;throw new Pe(oe.PRNGDetectFailure,"Failed to find a reliable PRNG")}function xs(){return Cs()?self:typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:null}function Es(t,r){let e="";for(;t>0;t--)e=bs(r)+e;return e}function As(t,r=ui){if(isNaN(t))throw new Pe(oe.EncodeTimeValueMalformed,`Time must be a number: ${t}`);if(t>Wr)throw new Pe(oe.EncodeTimeSizeExceeded,`Cannot encode a time larger than ${Wr}: ${t}`);if(t<0)throw new Pe(oe.EncodeTimeNegative,`Time must be positive: ${t}`);if(Number.isInteger(t)===!1)throw new Pe(oe.EncodeTimeValueMalformed,`Time must be an integer: ${t}`);let e,i="";for(let s=r;s>0;s--)e=t%ft,i=di.charAt(e)+i,t=(t-e)/ft;return i}function Cs(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}function Te(t,r){const e=_s(),i=Date.now();return As(i,ui)+Es(Ss,e)}const pi="markdown";function Is(t){const r=t.type??pi;return{id:t.id??Te(),type:r,title:t.title,content:t.content}}const z=4,R=6,fi=2,Ot=2,Ps=z,Ms=R,gr="auto",J="auto",se=120,Rr=75,x=16,Z=se*z+x*(z-1),me=se*R+x*(R-1),Ls=200,Ds=4,st=150,$s=10,Nr=2;function Ft(t,r={}){return{id:r.id??Te(),type:"card",artifactID:t,width:r.width??gr,height:r.height??J}}function Ut(t,r){return t.some(e=>gi(e,r))}function gi(t,r){switch(t.type){case"card":return t.artifactID===r;case"row":return t.children.some(e=>e.artifactID===r);case"stack":return t.children.some(e=>gi(e,r))}}function Ct(t){return t.layout.flatMap(vi)}function vi(t){switch(t.type){case"card":return[t.artifactID];case"row":return t.children.map(r=>r.artifactID);case"stack":return t.children.flatMap(vi)}}const Ts=4,Ws=/^[0-9A-HJKMNP-TV-Z]{26}$/;function mi(t){return ki(t)}function yi(t,r){return ki(t.flatMap(e=>bi(e,r)))}function wi(t){const r=[],e=new Set;for(const i of t){if(i.type==="row"){r.push(`Top-level rows are invalid: ${i.id}`);continue}_i(i,"strip",r,e)}return{valid:r.length===0,errors:r}}function ye(t){const r=mi(t),e=wi(r);if(!e.valid)throw new Error(`Invalid layout: ${e.errors.join("; ")}`);return{totalNodes:r.length,nodes:r.filter(i=>i.type!=="row").map(Fs)}}function ki(t){const r=[];for(const e of t){const i=Si(e);for(const s of i){if(s.type==="row"){r.push(...s.children.map(j));continue}r.push(s)}}return r}function Si(t){switch(t.type){case"card":return[j(t)];case"row":{const r=t.children.map(j);return r.length===0?[]:r.length===1?[r[0]]:[{...t,children:r}]}case"stack":{const r=[];for(const e of t.children){const i=Si(e);for(const s of i){if(s.type==="stack"){r.push(...s.children.map(Ht));continue}if(s.type==="row"){r.push({...s,children:s.children.map(j)});continue}r.push(j(s))}}return r.length===0?[]:r.length===1?[Ht(r[0])]:[{...t,children:r}]}}}function bi(t,r){switch(t.type){case"card":return t.artifactID===r?[]:[j(t)];case"row":{const e=t.children.filter(i=>i.artifactID!==r).map(j);return e.length===0?[]:e.length===1?[e[0]]:[{...t,children:e}]}case"stack":{const e=t.children.flatMap(i=>bi(i,r).filter(n=>n.type!=="stack"));return e.length===0?[]:e.length===1?[Ht(e[0])]:[{...t,children:e}]}}}function _i(t,r,e,i){switch(t.type){case"card":xi(t,r,e,i);return;case"row":Rs(t,r,e,i);return;case"stack":Ns(t,r,e,i);return}}function xi(t,r,e,i){vr(t.id,e),typeof t.artifactID!="string"||t.artifactID.length===0?e.push(`Card ${t.id} is missing artifactID`):i.has(t.artifactID)?e.push(`Duplicate artifactID in layout: ${t.artifactID}`):i.add(t.artifactID),Os(t.width)||e.push(`Card ${t.id} width must be an integer in the range 2-4`),Ei(t.height)||e.push(`Card ${t.id} height must be an integer in the range 2-6 or "auto"`);const s=ne(t.width);r==="row"&&s<fi&&e.push(`Row child ${t.id} must be at least 2 columns wide`)}function Rs(t,r,e,i){if(vr(t.id,e),r!=="stack"&&e.push(`Row ${t.id} may only appear inside a stack`),Ei(t.height,Ts)||e.push(`Row ${t.id} height must be an integer in the range 2-4 or "auto"`),!Array.isArray(t.children)||t.children.length===0){e.push(`Row ${t.id} must contain card nodes`);return}let s=0;for(const n of t.children){if(n.type!=="card"){e.push(`Row ${t.id} must contain only card nodes`);continue}xi(n,"row",e,i),s+=ne(n.width)}s!==z&&e.push(`Row ${t.id} children must sum to 4 columns`)}function Ns(t,r,e,i){if(vr(t.id,e),r!=="strip"&&e.push(`Invalid nested stack at ${t.id}; stack children cannot contain another nested stack`),!Array.isArray(t.children)||t.children.length===0){e.push(`Stack ${t.id} must contain at least one child`);return}let s=0,n=0;for(const a of t.children){if(a.type==="stack"){e.push(`Stack ${t.id} cannot contain another nested stack`);continue}if(_i(a,"stack",e,i),a.height===J){n+=1;continue}s+=a.height}if(s>R&&e.push(`Stack ${t.id} exceeds the 6-row budget`),n===0)return;const o=R-s;if(o<n*Ot||o%n!==0){e.push(`Stack ${t.id} has auto-height children that cannot resolve to whole height >= 2`);return}o/n<Ot&&e.push(`Stack ${t.id} has auto-height children below the minimum row size`)}function vr(t,r){(typeof t!="string"||!Ws.test(t))&&r.push(`Node id must be a ULID: ${String(t)}`)}function Os(t){return t===gr||Number.isInteger(t)&&t>=fi&&t<=Ps}function Ei(t,r=Ms){return t===J||Number.isInteger(t)&&t>=Ot&&t<=r}function ne(t){return t===gr?z:t}function Fs(t){if(t.type==="card")return{id:t.id,type:"card",width:ne(t.width),cards:[{id:t.id,artifactID:t.artifactID,col:1,row:1,width:ne(t.width),height:Ai(t.height,R)}]};const r=Us(t.children),e=[];let i=1;for(let s=0;s<t.children.length;s+=1){const n=t.children[s],o=r[s];if(n.type==="card")e.push({id:n.id,artifactID:n.artifactID,col:1,row:i,width:ne(n.width),height:o});else{let a=1;for(const c of n.children)e.push({id:c.id,artifactID:c.artifactID,col:a,row:i,width:ne(c.width),height:o}),a+=ne(c.width)}i+=o}return{id:t.id,type:"stack",width:e.reduce((s,n)=>Math.max(s,n.col+n.width-1),1),cards:e}}function Us(t){let r=0,e=0;for(const s of t)s.height===J?e+=1:r+=s.height;const i=e>0?(R-r)/e:0;return t.map(s=>Ai(s.height,i))}function Ai(t,r){return t===J?r:t}function j(t){return{...t}}function Ht(t){return t.type==="card"?j(t):{...t,children:t.children.map(j)}}const It="create-artifact",Pt="remove-artifact",nt="update-layout";class Hs extends Je{constructor(e){var s;super();l(this,"artifacts",new Map);l(this,"activeWorkspaceID",null);l(this,"scrollPosition",0);l(this,"activeWorkspaceData",null);l(this,"clientStore");l(this,"serverManager");l(this,"pendingMutations",new Map);l(this,"pendingWorkspaceCreates",new Map);l(this,"pendingWorkspaceDeletes",new Map);this.clientStore=e.clientStore,this.serverManager=e.serverManager;const i=this.clientStore.get();this.activeWorkspaceID=(i==null?void 0:i.lastWorkspaceID)??null,this.activeWorkspaceID&&(this.scrollPosition=((s=i==null?void 0:i.workspaces[this.activeWorkspaceID])==null?void 0:s.scrollPosition)??0)}get workspaces(){return[...this.getServers().values()].flatMap(e=>[...e.workspaces.values()])}get activeWorkspace(){return this.activeWorkspaceData}get activeWorkspaceServerURL(){var e;return this.activeWorkspaceID?((e=this.findWorkspace(this.activeWorkspaceID))==null?void 0:e.serverURL)??null:null}get activeArtifacts(){return(this.activeWorkspaceData?Ct(this.activeWorkspaceData):[]).map(e=>this.artifacts.get(e)).filter(e=>e!==void 0)}getArtifactURL(e){const i=this.activeWorkspaceServerURL;if(!i)return null;const s=this.getServers().get(i);return s!=null&&s.getArtifactURL?s.getArtifactURL(e):null}setActiveWorkspace(e){this.selectWorkspace(e)}setScrollPosition(e){const i=Math.max(0,e);this.scrollPosition!==i&&(this.scrollPosition=i,this.persistWorkspaceViewState(),this.dispatchEvent(new w("change")))}createArtifact(e){var c;const i=this.activeWorkspaceData;if(!i)return;const s=this.snapshotState(),n=Is({id:Te(),type:pi,title:e.title,content:e.content});Ut(i.layout,n.id)||(i.layout=[...i.layout,Ft(n.id)]),this.artifacts.set(n.id,n),this.scrollPosition=zs(i.layout),this.persistWorkspaceViewState(),this.dispatchEvent(new w("change"));const o=((c=this.findWorkspace(i.id))==null?void 0:c.server)??null,a=this.getMutationKey(It,n.id);this.pendingMutations.set(a,s),this.sendServerMessage(o,{type:"create-artifact",id:n.id,title:e.title,content:e.content,workspaceID:i.id})||(this.pendingMutations.delete(a),this.restoreState(s),this.dispatchEvent(new w("change")))}removeArtifact(e){var a;const i=this.activeWorkspaceData;if(!i||!this.artifacts.has(e))return;const s=this.snapshotState();this.removeArtifactLocally(e),this.dispatchEvent(new w("change"));const n=((a=this.findWorkspace(i.id))==null?void 0:a.server)??null,o=this.getMutationKey(Pt,e);this.pendingMutations.set(o,s),this.sendServerMessage(n,{type:"remove-artifact",artifactID:e,workspaceID:i.id})||(this.pendingMutations.delete(o),this.restoreState(s),this.dispatchEvent(new w("change")))}handleServerEvent(e,i){var s;switch(i.type){case"workspace-list":this.syncActiveWorkspaceState(e,!0);break;case"workspace-updated":this.syncActiveWorkspaceState(e,!1),Array.isArray(i.fields.layout)&&this.pendingMutations.delete(this.getMutationKey(nt,i.workspaceID));break;case"workspace-removed":{this.syncActiveWorkspaceState(e,!1);const n=this.pendingWorkspaceDeletes.get(i.workspaceID);n&&(this.pendingWorkspaceDeletes.delete(i.workspaceID),n.resolve());break}case"workspace-created":if(this.pendingWorkspaceCreates.has(i.workspace.id)){const n=this.pendingWorkspaceCreates.get(i.workspace.id);this.pendingWorkspaceCreates.delete(i.workspace.id),this.selectWorkspace(i.workspace.id),n==null||n.resolve();return}this.syncActiveWorkspaceState(e,!1);break;case"workspace":this.applyWorkspaceSnapshot(i.workspace,i.artifacts);break;case"artifact-created":this.pendingMutations.delete(this.getMutationKey(It,i.artifact.id)),this.applyArtifactCreated(i);break;case"artifact-updated":this.applyArtifactUpdated(i);break;case"artifact-removed":if(this.pendingMutations.delete(this.getMutationKey(Pt,i.artifactID)),((s=this.activeWorkspaceData)==null?void 0:s.id)!==i.workspaceID)return;this.removeArtifactLocally(i.artifactID)&&this.dispatchEvent(new w("change"));break;case"error":this.handleServerError(i);break}}createWorkspace(e,i){const s=this.getServers().get(e)??null,n=Te(),o=Or();return this.pendingWorkspaceCreates.set(n,o),this.sendServerMessage(s,{type:"create-workspace",id:n,name:i})||(this.pendingWorkspaceCreates.delete(n),o.reject(new Error(`Server unavailable: ${e}`))),o.promise}deleteWorkspace(){var o;const e=this.activeWorkspaceData;if(!e)return Promise.reject(new Error("No active workspace"));const i=this.pendingWorkspaceDeletes.get(e.id);if(i)return i.promise;const s=((o=this.findWorkspace(e.id))==null?void 0:o.server)??null,n=Or();return this.pendingWorkspaceDeletes.set(e.id,n),this.sendServerMessage(s,{type:"delete-workspace",workspaceID:e.id})||(this.pendingWorkspaceDeletes.delete(e.id),n.reject(new Error(`Server unavailable: ${e.id}`))),n.promise}renameWorkspace(e){var n;const i=this.activeWorkspaceData;if(!i)return;const s=((n=this.findWorkspace(i.id))==null?void 0:n.server)??null;i.name=e,this.dispatchEvent(new w("change")),this.sendServerMessage(s,{type:"update-workspace",workspaceID:i.id,fields:{name:e}})}setLayout(e){var h;const i=this.activeWorkspaceData;if(!i)return;const s=mi(e);if(!wi(s).valid)return;const o=this.snapshotState();i.layout=s,this.dispatchEvent(new w("change"));const a=((h=this.findWorkspace(i.id))==null?void 0:h.server)??null,c=this.getMutationKey(nt,i.id);this.pendingMutations.set(c,o),this.sendServerMessage(a,{type:"update-workspace",workspaceID:i.id,fields:{layout:s.map(d=>structuredClone(d))}})||(this.pendingMutations.delete(c),this.restoreState(o),this.dispatchEvent(new w("change")))}syncActiveWorkspaceState(e,i){const s=this.activeWorkspaceID?this.findWorkspace(this.activeWorkspaceID):null;if(!s){const n=this.pickNextWorkspace();if(!n){const o=this.activeWorkspaceID!==null||this.activeWorkspaceData!==null||this.artifacts.size>0;this.activeWorkspaceID=null,this.activeWorkspaceData=null,this.artifacts.clear(),this.scrollPosition=0,o&&this.dispatchEvent(new w("change"));return}this.selectWorkspace(n.workspace.id);return}this.applyServerWorkspaceState(s.workspace),i&&s.serverURL===e&&this.requestWorkspace(s.serverURL,s.workspace.id)}hasPendingLayoutMutation(e){return this.pendingMutations.has(this.getMutationKey(nt,e))}selectWorkspace(e){const i=this.findWorkspace(e);i&&(this.activeWorkspaceID=e,this.activeWorkspaceData=structuredClone(i.workspace),this.artifacts.clear(),this.restoreWorkspaceViewState(),this.persistActiveWorkspace(),this.requestWorkspace(i.serverURL,e),this.dispatchEvent(new w("change")))}requestWorkspace(e,i){const s=this.getServers().get(e);this.sendServerMessage(s??null,{type:"get-workspace",workspaceID:i})}applyWorkspaceSnapshot(e,i){if(e.id===this.activeWorkspaceID){this.applyServerWorkspaceState(e),this.artifacts.clear();for(const s of i)this.artifacts.set(s.id,structuredClone(s));this.restoreWorkspaceViewState(),this.dispatchEvent(new w("change"))}}applyServerWorkspaceState(e){if(!this.activeWorkspaceData||this.activeWorkspaceData.id!==e.id){this.activeWorkspaceData=structuredClone(e);return}this.activeWorkspaceData.name=e.name,this.hasPendingLayoutMutation(e.id)||(this.activeWorkspaceData.layout=e.layout.map(i=>structuredClone(i)))}applyArtifactCreated(e){var i;((i=this.activeWorkspaceData)==null?void 0:i.id)===e.workspaceID&&(Ut(this.activeWorkspaceData.layout,e.artifact.id)||(this.activeWorkspaceData.layout=[...this.activeWorkspaceData.layout,Ft(e.artifact.id)]),this.artifacts.set(e.artifact.id,e.artifact),this.dispatchEvent(new w("change")))}applyArtifactUpdated(e){const i=this.artifacts.get(e.artifactID);i&&(Object.assign(i,e.fields),this.dispatchEvent(new w("change")))}removeArtifactLocally(e){if(!this.activeWorkspaceData)return!1;const i=this.artifacts.delete(e),s=Ct(this.activeWorkspaceData).length;return this.activeWorkspaceData.layout=yi(this.activeWorkspaceData.layout,e),!(!i&&s===Ct(this.activeWorkspaceData).length)}snapshotState(){return{activeWorkspaceData:this.activeWorkspaceData?structuredClone(this.activeWorkspaceData):null,scrollPosition:this.scrollPosition,artifacts:new Map([...this.artifacts.entries()].map(([e,i])=>[e,structuredClone(i)]))}}restoreState(e){this.activeWorkspaceData=e.activeWorkspaceData?structuredClone(e.activeWorkspaceData):null,this.scrollPosition=e.scrollPosition,this.artifacts.clear();for(const[i,s]of e.artifacts.entries())this.artifacts.set(i,structuredClone(s));this.persistWorkspaceViewState()}handleServerError(e){const i=e.request;if(i){if(i.type==="create-artifact"){const s=this.getMutationKey(It,i.id),n=this.pendingMutations.get(s);if(!n)return;this.pendingMutations.delete(s),this.restoreState(n),this.dispatchEvent(new w("change"));return}if(i.type==="create-workspace"){const s=this.pendingWorkspaceCreates.get(i.id);if(!s)return;this.pendingWorkspaceCreates.delete(i.id),s.reject(new Error(e.message));return}if(i.type==="delete-workspace"){const s=this.pendingWorkspaceDeletes.get(i.workspaceID);if(!s)return;this.pendingWorkspaceDeletes.delete(i.workspaceID),s.reject(new Error(e.message));return}if(i.type==="update-workspace"&&Array.isArray(i.fields.layout)){const s=this.getMutationKey(nt,i.workspaceID),n=this.pendingMutations.get(s);if(!n)return;this.pendingMutations.delete(s),this.restoreState(n),this.dispatchEvent(new w("change"));return}if(i.type==="remove-artifact"){const s=this.getMutationKey(Pt,i.artifactID),n=this.pendingMutations.get(s);if(!n)return;this.pendingMutations.delete(s),this.restoreState(n),this.dispatchEvent(new w("change"))}}}restoreWorkspaceViewState(){var i,s;if(!this.activeWorkspaceID){this.scrollPosition=0;return}const e=((s=(i=this.clientStore.get())==null?void 0:i.workspaces[this.activeWorkspaceID])==null?void 0:s.scrollPosition)??0;this.scrollPosition=Math.max(0,e),this.persistWorkspaceViewState()}persistActiveWorkspace(){this.clientStore.update(e=>{e.lastWorkspaceID=this.activeWorkspaceID})}persistWorkspaceViewState(){this.activeWorkspaceID&&this.clientStore.update(e=>{var i,s;(i=e.workspaces)[s=this.activeWorkspaceID]??(i[s]={scrollPosition:0}),e.workspaces[this.activeWorkspaceID].scrollPosition=this.scrollPosition})}findWorkspace(e){for(const[i,s]of this.getServers()){const n=s.workspaces.get(e);if(n)return{serverURL:i,server:s,workspace:n}}return null}pickNextWorkspace(){var i;const e=(i=this.clientStore.get())==null?void 0:i.lastWorkspaceID;if(e){const s=this.findWorkspace(e);if(s)return s}for(const[s,n]of this.getServers()){const o=n.workspaces.values().next().value;if(o)return{serverURL:s,server:n,workspace:o}}return null}sendServerMessage(e,i){return e?e.send(i):!1}getServers(){return this.serverManager.servers}getMutationKey(e,i){return`${e}:${i}`}}function zs(t){var i;const r=ye(t);if(r.nodes.length<=1)return 0;let e=0;for(let s=0;s<r.nodes.length-1;s+=1)e+=((i=r.nodes[s])==null?void 0:i.width)??0;return e}function Or(){let t,r;return{promise:new Promise((i,s)=>{t=i,r=s}),resolve:t,reject:r}}var Ci=Symbol.for("immer-nothing"),Fr=Symbol.for("immer-draftable"),N=Symbol.for("immer-state");function H(t,...r){throw new Error(`[Immer] minified error nr: ${t}. Full error at: https://bit.ly/3cXEKWf`)}var We=Object.getPrototypeOf;function Se(t){return!!t&&!!t[N]}function le(t){var r;return t?Ii(t)||Array.isArray(t)||!!t[Fr]||!!((r=t.constructor)!=null&&r[Fr])||Qe(t)||bt(t):!1}var Vs=Object.prototype.constructor.toString(),Ur=new WeakMap;function Ii(t){if(!t||typeof t!="object")return!1;const r=Object.getPrototypeOf(t);if(r===null||r===Object.prototype)return!0;const e=Object.hasOwnProperty.call(r,"constructor")&&r.constructor;if(e===Object)return!0;if(typeof e!="function")return!1;let i=Ur.get(e);return i===void 0&&(i=Function.toString.call(e),Ur.set(e,i)),i===Vs}function gt(t,r,e=!0){St(t)===0?(e?Reflect.ownKeys(t):Object.keys(t)).forEach(s=>{r(s,t[s],t)}):t.forEach((i,s)=>r(s,i,t))}function St(t){const r=t[N];return r?r.type_:Array.isArray(t)?1:Qe(t)?2:bt(t)?3:0}function zt(t,r){return St(t)===2?t.has(r):Object.prototype.hasOwnProperty.call(t,r)}function Pi(t,r,e){const i=St(t);i===2?t.set(r,e):i===3?t.add(e):t[r]=e}function Gs(t,r){return t===r?t!==0||1/t===1/r:t!==t&&r!==r}function Qe(t){return t instanceof Map}function bt(t){return t instanceof Set}function re(t){return t.copy_||t.base_}function Vt(t,r){if(Qe(t))return new Map(t);if(bt(t))return new Set(t);if(Array.isArray(t))return Array.prototype.slice.call(t);const e=Ii(t);if(r===!0||r==="class_only"&&!e){const i=Object.getOwnPropertyDescriptors(t);delete i[N];let s=Reflect.ownKeys(i);for(let n=0;n<s.length;n++){const o=s[n],a=i[o];a.writable===!1&&(a.writable=!0,a.configurable=!0),(a.get||a.set)&&(i[o]={configurable:!0,writable:!0,enumerable:a.enumerable,value:t[o]})}return Object.create(We(t),i)}else{const i=We(t);if(i!==null&&e)return{...t};const s=Object.create(i);return Object.assign(s,t)}}function mr(t,r=!1){return _t(t)||Se(t)||!le(t)||(St(t)>1&&Object.defineProperties(t,{set:ot,add:ot,clear:ot,delete:ot}),Object.freeze(t),r&&Object.values(t).forEach(e=>mr(e,!0))),t}function Bs(){H(2)}var ot={value:Bs};function _t(t){return t===null||typeof t!="object"?!0:Object.isFrozen(t)}var js={};function he(t){const r=js[t];return r||H(0,t),r}var Re;function Mi(){return Re}function Xs(t,r){return{drafts_:[],parent_:t,immer_:r,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function Hr(t,r){r&&(he("Patches"),t.patches_=[],t.inversePatches_=[],t.patchListener_=r)}function Gt(t){Bt(t),t.drafts_.forEach(Ys),t.drafts_=null}function Bt(t){t===Re&&(Re=t.parent_)}function zr(t){return Re=Xs(Re,t)}function Ys(t){const r=t[N];r.type_===0||r.type_===1?r.revoke_():r.revoked_=!0}function Vr(t,r){r.unfinalizedDrafts_=r.drafts_.length;const e=r.drafts_[0];return t!==void 0&&t!==e?(e[N].modified_&&(Gt(r),H(4)),le(t)&&(t=vt(r,t),r.parent_||mt(r,t)),r.patches_&&he("Patches").generateReplacementPatches_(e[N].base_,t,r.patches_,r.inversePatches_)):t=vt(r,e,[]),Gt(r),r.patches_&&r.patchListener_(r.patches_,r.inversePatches_),t!==Ci?t:void 0}function vt(t,r,e){if(_t(r))return r;const i=t.immer_.shouldUseStrictIteration(),s=r[N];if(!s)return gt(r,(n,o)=>Gr(t,s,r,n,o,e),i),r;if(s.scope_!==t)return r;if(!s.modified_)return mt(t,s.base_,!0),s.base_;if(!s.finalized_){s.finalized_=!0,s.scope_.unfinalizedDrafts_--;const n=s.copy_;let o=n,a=!1;s.type_===3&&(o=new Set(n),n.clear(),a=!0),gt(o,(c,h)=>Gr(t,s,n,c,h,e,a),i),mt(t,n,!1),e&&t.patches_&&he("Patches").generatePatches_(s,e,t.patches_,t.inversePatches_)}return s.copy_}function Gr(t,r,e,i,s,n,o){if(s==null||typeof s!="object"&&!o)return;const a=_t(s);if(!(a&&!o)){if(Se(s)){const c=n&&r&&r.type_!==3&&!zt(r.assigned_,i)?n.concat(i):void 0,h=vt(t,s,c);if(Pi(e,i,h),Se(h))t.canAutoFreeze_=!1;else return}else o&&e.add(s);if(le(s)&&!a){if(!t.immer_.autoFreeze_&&t.unfinalizedDrafts_<1||r&&r.base_&&r.base_[i]===s&&a)return;vt(t,s),(!r||!r.scope_.parent_)&&typeof i!="symbol"&&(Qe(e)?e.has(i):Object.prototype.propertyIsEnumerable.call(e,i))&&mt(t,s)}}}function mt(t,r,e=!1){!t.parent_&&t.immer_.autoFreeze_&&t.canAutoFreeze_&&mr(r,e)}function Ks(t,r){const e=Array.isArray(t),i={type_:e?1:0,scope_:r?r.scope_:Mi(),modified_:!1,finalized_:!1,assigned_:{},parent_:r,base_:t,draft_:null,copy_:null,revoke_:null,isManual_:!1};let s=i,n=yr;e&&(s=[i],n=Ne);const{revoke:o,proxy:a}=Proxy.revocable(s,n);return i.draft_=a,i.revoke_=o,a}var yr={get(t,r){if(r===N)return t;const e=re(t);if(!zt(e,r))return qs(t,e,r);const i=e[r];return t.finalized_||!le(i)?i:i===Mt(t.base_,r)?(Lt(t),t.copy_[r]=Xt(i,t)):i},has(t,r){return r in re(t)},ownKeys(t){return Reflect.ownKeys(re(t))},set(t,r,e){const i=Li(re(t),r);if(i!=null&&i.set)return i.set.call(t.draft_,e),!0;if(!t.modified_){const s=Mt(re(t),r),n=s==null?void 0:s[N];if(n&&n.base_===e)return t.copy_[r]=e,t.assigned_[r]=!1,!0;if(Gs(e,s)&&(e!==void 0||zt(t.base_,r)))return!0;Lt(t),jt(t)}return t.copy_[r]===e&&(e!==void 0||r in t.copy_)||Number.isNaN(e)&&Number.isNaN(t.copy_[r])||(t.copy_[r]=e,t.assigned_[r]=!0),!0},deleteProperty(t,r){return Mt(t.base_,r)!==void 0||r in t.base_?(t.assigned_[r]=!1,Lt(t),jt(t)):delete t.assigned_[r],t.copy_&&delete t.copy_[r],!0},getOwnPropertyDescriptor(t,r){const e=re(t),i=Reflect.getOwnPropertyDescriptor(e,r);return i&&{writable:!0,configurable:t.type_!==1||r!=="length",enumerable:i.enumerable,value:e[r]}},defineProperty(){H(11)},getPrototypeOf(t){return We(t.base_)},setPrototypeOf(){H(12)}},Ne={};gt(yr,(t,r)=>{Ne[t]=function(){return arguments[0]=arguments[0][0],r.apply(this,arguments)}});Ne.deleteProperty=function(t,r){return Ne.set.call(this,t,r,void 0)};Ne.set=function(t,r,e){return yr.set.call(this,t[0],r,e,t[0])};function Mt(t,r){const e=t[N];return(e?re(e):t)[r]}function qs(t,r,e){var s;const i=Li(r,e);return i?"value"in i?i.value:(s=i.get)==null?void 0:s.call(t.draft_):void 0}function Li(t,r){if(!(r in t))return;let e=We(t);for(;e;){const i=Object.getOwnPropertyDescriptor(e,r);if(i)return i;e=We(e)}}function jt(t){t.modified_||(t.modified_=!0,t.parent_&&jt(t.parent_))}function Lt(t){t.copy_||(t.copy_=Vt(t.base_,t.scope_.immer_.useStrictShallowCopy_))}var Zs=class{constructor(t){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!0,this.produce=(r,e,i)=>{if(typeof r=="function"&&typeof e!="function"){const n=e;e=r;const o=this;return function(c=n,...h){return o.produce(c,d=>e.call(this,d,...h))}}typeof e!="function"&&H(6),i!==void 0&&typeof i!="function"&&H(7);let s;if(le(r)){const n=zr(this),o=Xt(r,void 0);let a=!0;try{s=e(o),a=!1}finally{a?Gt(n):Bt(n)}return Hr(n,i),Vr(s,n)}else if(!r||typeof r!="object"){if(s=e(r),s===void 0&&(s=r),s===Ci&&(s=void 0),this.autoFreeze_&&mr(s,!0),i){const n=[],o=[];he("Patches").generateReplacementPatches_(r,s,n,o),i(n,o)}return s}else H(1,r)},this.produceWithPatches=(r,e)=>{if(typeof r=="function")return(o,...a)=>this.produceWithPatches(o,c=>r(c,...a));let i,s;return[this.produce(r,e,(o,a)=>{i=o,s=a}),i,s]},typeof(t==null?void 0:t.autoFreeze)=="boolean"&&this.setAutoFreeze(t.autoFreeze),typeof(t==null?void 0:t.useStrictShallowCopy)=="boolean"&&this.setUseStrictShallowCopy(t.useStrictShallowCopy),typeof(t==null?void 0:t.useStrictIteration)=="boolean"&&this.setUseStrictIteration(t.useStrictIteration)}createDraft(t){le(t)||H(8),Se(t)&&(t=Js(t));const r=zr(this),e=Xt(t,void 0);return e[N].isManual_=!0,Bt(r),e}finishDraft(t,r){const e=t&&t[N];(!e||!e.isManual_)&&H(9);const{scope_:i}=e;return Hr(i,r),Vr(void 0,i)}setAutoFreeze(t){this.autoFreeze_=t}setUseStrictShallowCopy(t){this.useStrictShallowCopy_=t}setUseStrictIteration(t){this.useStrictIteration_=t}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(t,r){let e;for(e=r.length-1;e>=0;e--){const s=r[e];if(s.path.length===0&&s.op==="replace"){t=s.value;break}}e>-1&&(r=r.slice(e+1));const i=he("Patches").applyPatches_;return Se(t)?i(t,r):this.produce(t,s=>i(s,r))}};function Xt(t,r){const e=Qe(t)?he("MapSet").proxyMap_(t,r):bt(t)?he("MapSet").proxySet_(t,r):Ks(t,r);return(r?r.scope_:Mi()).drafts_.push(e),e}function Js(t){return Se(t)||H(10,t),Di(t)}function Di(t){if(!le(t)||_t(t))return t;const r=t[N];let e,i=!0;if(r){if(!r.modified_)return r.base_;r.finalized_=!0,e=Vt(t,r.scope_.immer_.useStrictShallowCopy_),i=r.scope_.immer_.shouldUseStrictIteration()}else e=Vt(t,!0);return gt(e,(s,n)=>{Pi(e,s,Di(n))},i),r&&(r.finalized_=!1),e}var Qs=new Zs,en=Qs.produce,tn=Object.defineProperty,rn=(t,r,e)=>r in t?tn(t,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[r]=e,at=(t,r,e)=>rn(t,typeof r!="symbol"?r+"":r,e);function sn(t){return{all:t=t||new Map,on:function(r,e){var i=t.get(r);i?i.push(e):t.set(r,[e])},off:function(r,e){var i=t.get(r);i&&(e?i.splice(i.indexOf(e)>>>0,1):t.set(r,[]))},emit:function(r,e){var i=t.get(r);i&&i.slice().map(function(s){s(e)}),(i=t.get("*"))&&i.slice().map(function(s){s(r,e)})}}}var nn=class{constructor(){at(this,"emitter",sn()),at(this,"on",(t,r)=>(this.emitter.on(t,r),{dispose:()=>this.emitter.off(t,r)})),at(this,"once",(t,r)=>{const e=i=>{r(i),this.emitter.off(t,e)};return this.emitter.on(t,e),{dispose:()=>this.emitter.off(t,e)}}),at(this,"off",this.emitter.off)}emit(t,...[r]){this.emitter.emit(t,r)}},on="store-",an=class extends nn{emitChange(t){this.emit("change",{state:t})}},cn=class{constructor(t,r,e){this.emitter=new an,this.id=t,this.initValue=r,this.key=`${on}${t}`,this.storage=(e==null?void 0:e.storage)==="session"?sessionStorage:localStorage,this.get()===void 0&&this.storage.setItem(this.key,JSON.stringify(r))}get(){const t=this.storage.getItem(this.key);return t===null?void 0:JSON.parse(t)}update(t){const r=this.get()??{},e=en(r,t);this.storage.setItem(this.key,JSON.stringify(e)),this.emitter.emitChange(e)}reset(){this.storage.setItem(this.key,JSON.stringify(this.initValue)),this.emitter.emitChange(this.initValue)}on(t,r){return this.emitter.on(t,({state:e})=>r(e))}subscribe(t){const r=this.on("change",t),e=this.get();return e!==void 0&&t(e),r}};const ln="Local";function Y(t){return new URL(t).origin}function hn(t){return{servers:[{url:Y(t),name:ln}],lastWorkspaceID:null,workspaces:{}}}function dn(t,r){return new cn(t,hn(r))}const un=4401;class Yt extends Error{constructor(r="Authentication required"){super(r),this.name="AuthError"}}class Kt extends Je{constructor(e){super();l(this,"url");l(this,"name");l(this,"token");l(this,"status","disconnected");l(this,"workspaces",new Map);l(this,"createSocket");l(this,"socket",null);l(this,"connectAttempt",0);this.url=Y(e.url),this.name=e.name,this.token=e.token??null,this.createSocket=e.createSocket??(i=>new WebSocket(i))}async connect(){var s;this.connectAttempt+=1;const e=this.connectAttempt;(s=this.socket)==null||s.close(),this.status="connecting",this.dispatchEvent(new w("change"));const i=this.createSocket(pn(this.url,this.token));return this.socket=i,await new Promise((n,o)=>{let a=!1;const c=()=>{a||this.connectAttempt!==e||(a=!0,this.status="connected",this.dispatchEvent(new w("change")),n())},h=d=>{a||this.connectAttempt!==e||(a=!0,this.status="disconnected",this.dispatchEvent(new w("change")),o(d))};i.addEventListener("message",d=>{const p=gn(d);this.applyServerMessage(p),this.dispatchEvent(new hi("server-message",{serverURL:this.url,message:p})),a||c()}),i.addEventListener("close",d=>{if(this.connectAttempt===e){if(this.socket=null,fn(d)===un){h(new Yt);return}if(!a){h(new Error("Connection closed before initialization"));return}this.status="disconnected",this.dispatchEvent(new w("change"))}}),i.addEventListener("error",()=>{h(new Error("WebSocket connection failed"))})})}disconnect(){var e;this.connectAttempt+=1,(e=this.socket)==null||e.close(),this.socket=null,this.status="disconnected",this.dispatchEvent(new w("change"))}send(e){return!this.socket||this.socket.readyState!==1?!1:(this.socket.send(JSON.stringify(e)),!0)}getArtifactURL(e){const i=new URL(this.url);return i.pathname=`/artifact/${e}`,i.search="",this.token&&i.searchParams.set("token",this.token),i.hash="",i.toString()}applyServerMessage(e){switch(e.type){case"workspace-list":this.workspaces=new Map(e.workspaces.map(i=>[i.id,structuredClone(i)]));break;case"workspace-created":this.workspaces.set(e.workspace.id,structuredClone(e.workspace));break;case"workspace-updated":{const i=this.workspaces.get(e.workspaceID);i&&(typeof e.fields.name=="string"&&(i.name=e.fields.name),Array.isArray(e.fields.layout)&&(i.layout=e.fields.layout));break}case"workspace-removed":this.workspaces.delete(e.workspaceID);break;case"artifact-created":{const i=this.workspaces.get(e.workspaceID);i&&!Ut(i.layout,e.artifact.id)&&(i.layout=[...i.layout,Ft(e.artifact.id)]);break}case"artifact-removed":{const i=this.workspaces.get(e.workspaceID);i&&(i.layout=yi(i.layout,e.artifactID));break}}}}function pn(t,r){const e=new URL(t);return e.protocol=e.protocol==="https:"?"wss:":"ws:",e.pathname="/ws",e.search="",r&&e.searchParams.set("token",r),e.hash="",e.toString()}function fn(t){return typeof t=="object"&&t!==null&&"code"in t&&typeof t.code=="number"?t.code:null}function gn(t){const r=typeof t=="string"?t:typeof t=="object"&&t!==null&&"data"in t&&typeof t.data=="string"?t.data:"";return JSON.parse(r)}class vn extends Je{constructor(e){super();l(this,"servers",new Map);l(this,"localServerURL");l(this,"activeServer",null);l(this,"clientStore");l(this,"createSocket");l(this,"serverListeners",new Map);this.clientStore=e.clientStore,this.localServerURL=e.localServerURL?Y(e.localServerURL):null,this.createSocket=e.createSocket??(i=>new WebSocket(i))}add(e){const i=Y(e.url);this.servers.get(i)&&this.remove(i),this.servers.set(i,e);const n=()=>{this.dispatchEvent(new w("change"))},o=a=>{this.dispatchEvent(new hi("server-message",{serverURL:a.serverURL,message:a.message}))};e.addEventListener("change",n),e.addEventListener("server-message",o),this.serverListeners.set(i,{onServerChange:n,onServerMessage:o}),this.dispatchEvent(new w("change"))}remove(e){const i=Y(e);if(this.localServerURL&&i===this.localServerURL)return;const s=this.servers.get(i);if(!s)return;const n=this.serverListeners.get(i);n&&(s.removeEventListener("change",n.onServerChange),s.removeEventListener("server-message",n.onServerMessage),this.serverListeners.delete(i)),s.disconnect(),this.servers.delete(i),this.activeServer===s&&(this.activeServer=null),this.clientStore.update(o=>{o.servers=o.servers.filter(a=>a.url!==i)}),this.dispatchEvent(new w("change"))}setActive(e){this.activeServer=e,this.dispatchEvent(new w("change"))}connectConfiguredServers(e){var n;const i=((n=this.clientStore.get())==null?void 0:n.servers)??[];for(const o of i){const a=new Kt({url:o.url,name:o.name,createSocket:this.createSocket});this.add(a),a.connect().catch(()=>{})}const s=e?this.servers.get(Y(e))??null:null;this.setActive(s??this.servers.values().next().value??null)}addServer(e,i){const s=Y(e);this.remove(s),this.clientStore.update(o=>{o.servers=o.servers.filter(a=>Y(a.url)!==s),o.servers.push({url:s,name:i})});const n=new Kt({url:s,name:i,createSocket:this.createSocket});this.add(n),this.setActive(n),n.connect().catch(()=>{})}removeServer(e){this.remove(e)}}const mn="serverURL",yn="token",wn="mode",kn="electron";function $i(t=window.location.search,r=window.location.origin){const i=new URLSearchParams(t).get(mn);return i?new URL(i).origin:new URL(r).origin}function Sn(t=window.location.search){return new URLSearchParams(t).get(yn)}function Ti(t=window.location.search){return new URLSearchParams(t).get(wn)===kn}/**
2
2
  * @license
3
3
  * Copyright 2017 Google LLC
4
4
  * SPDX-License-Identifier: BSD-3-Clause
5
- */const De=globalThis,Gr=t=>t,mt=De.trustedTypes,Br=mt?mt.createPolicy("lit-html",{createHTML:t=>t}):void 0,Ti="$lit$",K=`lit$${Math.random().toFixed(9).slice(2)}$`,Wi="?"+K,bn=`<${Wi}>`,de=document,Ne=()=>de.createComment(""),Oe=t=>t===null||typeof t!="object"&&typeof t!="function",wr=Array.isArray,_n=t=>wr(t)||typeof(t==null?void 0:t[Symbol.iterator])=="function",Lt=`[
6
- \f\r]`,Ae=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,jr=/-->/g,Xr=/>/g,ee=RegExp(`>|${Lt}(?:([^\\s"'>=/]+)(${Lt}*=${Lt}*(?:[^
7
- \f\r"'\`<>=]|("|')|))|$)`,"g"),Yr=/'/g,Kr=/"/g,Ri=/^(?:script|style|textarea|title)$/i,xn=t=>(r,...e)=>({_$litType$:t,strings:r,values:e}),m=xn(1),be=Symbol.for("lit-noChange"),E=Symbol.for("lit-nothing"),qr=new WeakMap,ae=de.createTreeWalker(de,129);function Ni(t,r){if(!wr(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return Br!==void 0?Br.createHTML(r):r}const En=(t,r)=>{const e=t.length-1,i=[];let s,n=r===2?"<svg>":r===3?"<math>":"",o=Ae;for(let a=0;a<e;a++){const c=t[a];let h,d,p=-1,v=0;for(;v<c.length&&(o.lastIndex=v,d=o.exec(c),d!==null);)v=o.lastIndex,o===Ae?d[1]==="!--"?o=jr:d[1]!==void 0?o=Xr:d[2]!==void 0?(Ri.test(d[2])&&(s=RegExp("</"+d[2],"g")),o=ee):d[3]!==void 0&&(o=ee):o===ee?d[0]===">"?(o=s??Ae,p=-1):d[1]===void 0?p=-2:(p=o.lastIndex-d[2].length,h=d[1],o=d[3]===void 0?ee:d[3]==='"'?Kr:Yr):o===Kr||o===Yr?o=ee:o===jr||o===Xr?o=Ae:(o=ee,s=void 0);const y=o===ee&&t[a+1].startsWith("/>")?" ":"";n+=o===Ae?c+bn:p>=0?(i.push(h),c.slice(0,p)+Ti+c.slice(p)+K+y):c+K+(p===-2?a:y)}return[Ni(t,n+(t[e]||"<?>")+(r===2?"</svg>":r===3?"</math>":"")),i]};class Fe{constructor({strings:r,_$litType$:e},i){let s;this.parts=[];let n=0,o=0;const a=r.length-1,c=this.parts,[h,d]=En(r,e);if(this.el=Fe.createElement(h,i),ae.currentNode=this.el.content,e===2||e===3){const p=this.el.content.firstChild;p.replaceWith(...p.childNodes)}for(;(s=ae.nextNode())!==null&&c.length<a;){if(s.nodeType===1){if(s.hasAttributes())for(const p of s.getAttributeNames())if(p.endsWith(Ti)){const v=d[o++],y=s.getAttribute(p).split(K),k=/([.?@])?(.*)/.exec(v);c.push({type:1,index:n,name:k[2],strings:y,ctor:k[1]==="."?Cn:k[1]==="?"?In:k[1]==="@"?Pn:_t}),s.removeAttribute(p)}else p.startsWith(K)&&(c.push({type:6,index:n}),s.removeAttribute(p));if(Ri.test(s.tagName)){const p=s.textContent.split(K),v=p.length-1;if(v>0){s.textContent=mt?mt.emptyScript:"";for(let y=0;y<v;y++)s.append(p[y],Ne()),ae.nextNode(),c.push({type:2,index:++n});s.append(p[v],Ne())}}}else if(s.nodeType===8)if(s.data===Wi)c.push({type:2,index:n});else{let p=-1;for(;(p=s.data.indexOf(K,p+1))!==-1;)c.push({type:7,index:n}),p+=K.length-1}n++}}static createElement(r,e){const i=de.createElement("template");return i.innerHTML=r,i}}function _e(t,r,e=t,i){var o,a;if(r===be)return r;let s=i!==void 0?(o=e._$Co)==null?void 0:o[i]:e._$Cl;const n=Oe(r)?void 0:r._$litDirective$;return(s==null?void 0:s.constructor)!==n&&((a=s==null?void 0:s._$AO)==null||a.call(s,!1),n===void 0?s=void 0:(s=new n(t),s._$AT(t,e,i)),i!==void 0?(e._$Co??(e._$Co=[]))[i]=s:e._$Cl=s),s!==void 0&&(r=_e(t,s._$AS(t,r.values),s,i)),r}class An{constructor(r,e){this._$AV=[],this._$AN=void 0,this._$AD=r,this._$AM=e}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(r){const{el:{content:e},parts:i}=this._$AD,s=((r==null?void 0:r.creationScope)??de).importNode(e,!0);ae.currentNode=s;let n=ae.nextNode(),o=0,a=0,c=i[0];for(;c!==void 0;){if(o===c.index){let h;c.type===2?h=new et(n,n.nextSibling,this,r):c.type===1?h=new c.ctor(n,c.name,c.strings,this,r):c.type===6&&(h=new Mn(n,this,r)),this._$AV.push(h),c=i[++a]}o!==(c==null?void 0:c.index)&&(n=ae.nextNode(),o++)}return ae.currentNode=de,s}p(r){let e=0;for(const i of this._$AV)i!==void 0&&(i.strings!==void 0?(i._$AI(r,i,e),e+=i.strings.length-2):i._$AI(r[e])),e++}}class et{get _$AU(){var r;return((r=this._$AM)==null?void 0:r._$AU)??this._$Cv}constructor(r,e,i,s){this.type=2,this._$AH=E,this._$AN=void 0,this._$AA=r,this._$AB=e,this._$AM=i,this.options=s,this._$Cv=(s==null?void 0:s.isConnected)??!0}get parentNode(){let r=this._$AA.parentNode;const e=this._$AM;return e!==void 0&&(r==null?void 0:r.nodeType)===11&&(r=e.parentNode),r}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(r,e=this){r=_e(this,r,e),Oe(r)?r===E||r==null||r===""?(this._$AH!==E&&this._$AR(),this._$AH=E):r!==this._$AH&&r!==be&&this._(r):r._$litType$!==void 0?this.$(r):r.nodeType!==void 0?this.T(r):_n(r)?this.k(r):this._(r)}O(r){return this._$AA.parentNode.insertBefore(r,this._$AB)}T(r){this._$AH!==r&&(this._$AR(),this._$AH=this.O(r))}_(r){this._$AH!==E&&Oe(this._$AH)?this._$AA.nextSibling.data=r:this.T(de.createTextNode(r)),this._$AH=r}$(r){var n;const{values:e,_$litType$:i}=r,s=typeof i=="number"?this._$AC(r):(i.el===void 0&&(i.el=Fe.createElement(Ni(i.h,i.h[0]),this.options)),i);if(((n=this._$AH)==null?void 0:n._$AD)===s)this._$AH.p(e);else{const o=new An(s,this),a=o.u(this.options);o.p(e),this.T(a),this._$AH=o}}_$AC(r){let e=qr.get(r.strings);return e===void 0&&qr.set(r.strings,e=new Fe(r)),e}k(r){wr(this._$AH)||(this._$AH=[],this._$AR());const e=this._$AH;let i,s=0;for(const n of r)s===e.length?e.push(i=new et(this.O(Ne()),this.O(Ne()),this,this.options)):i=e[s],i._$AI(n),s++;s<e.length&&(this._$AR(i&&i._$AB.nextSibling,s),e.length=s)}_$AR(r=this._$AA.nextSibling,e){var i;for((i=this._$AP)==null?void 0:i.call(this,!1,!0,e);r!==this._$AB;){const s=Gr(r).nextSibling;Gr(r).remove(),r=s}}setConnected(r){var e;this._$AM===void 0&&(this._$Cv=r,(e=this._$AP)==null||e.call(this,r))}}class _t{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(r,e,i,s,n){this.type=1,this._$AH=E,this._$AN=void 0,this.element=r,this.name=e,this._$AM=s,this.options=n,i.length>2||i[0]!==""||i[1]!==""?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=E}_$AI(r,e=this,i,s){const n=this.strings;let o=!1;if(n===void 0)r=_e(this,r,e,0),o=!Oe(r)||r!==this._$AH&&r!==be,o&&(this._$AH=r);else{const a=r;let c,h;for(r=n[0],c=0;c<n.length-1;c++)h=_e(this,a[i+c],e,c),h===be&&(h=this._$AH[c]),o||(o=!Oe(h)||h!==this._$AH[c]),h===E?r=E:r!==E&&(r+=(h??"")+n[c+1]),this._$AH[c]=h}o&&!s&&this.j(r)}j(r){r===E?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,r??"")}}class Cn extends _t{constructor(){super(...arguments),this.type=3}j(r){this.element[this.name]=r===E?void 0:r}}class In extends _t{constructor(){super(...arguments),this.type=4}j(r){this.element.toggleAttribute(this.name,!!r&&r!==E)}}class Pn extends _t{constructor(r,e,i,s,n){super(r,e,i,s,n),this.type=5}_$AI(r,e=this){if((r=_e(this,r,e,0)??E)===be)return;const i=this._$AH,s=r===E&&i!==E||r.capture!==i.capture||r.once!==i.once||r.passive!==i.passive,n=r!==E&&(i===E||s);s&&this.element.removeEventListener(this.name,this,i),n&&this.element.addEventListener(this.name,this,r),this._$AH=r}handleEvent(r){var e;typeof this._$AH=="function"?this._$AH.call(((e=this.options)==null?void 0:e.host)??this.element,r):this._$AH.handleEvent(r)}}class Mn{constructor(r,e,i){this.element=r,this.type=6,this._$AN=void 0,this._$AM=e,this.options=i}get _$AU(){return this._$AM._$AU}_$AI(r){_e(this,r)}}const Dt=De.litHtmlPolyfillSupport;Dt==null||Dt(Fe,et),(De.litHtmlVersions??(De.litHtmlVersions=[])).push("3.3.2");const M=(t,r,e)=>{const i=r;let s=i._$litPart$;return s===void 0&&(i._$litPart$=s=new et(r.insertBefore(Ne(),null),null,void 0,{})),s._$AI(t),s};/**
5
+ */const $e=globalThis,Br=t=>t,yt=$e.trustedTypes,jr=yt?yt.createPolicy("lit-html",{createHTML:t=>t}):void 0,Wi="$lit$",K=`lit$${Math.random().toFixed(9).slice(2)}$`,Ri="?"+K,bn=`<${Ri}>`,de=document,Oe=()=>de.createComment(""),Fe=t=>t===null||typeof t!="object"&&typeof t!="function",wr=Array.isArray,_n=t=>wr(t)||typeof(t==null?void 0:t[Symbol.iterator])=="function",Dt=`[
6
+ \f\r]`,Ce=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,Xr=/-->/g,Yr=/>/g,ee=RegExp(`>|${Dt}(?:([^\\s"'>=/]+)(${Dt}*=${Dt}*(?:[^
7
+ \f\r"'\`<>=]|("|')|))|$)`,"g"),Kr=/'/g,qr=/"/g,Ni=/^(?:script|style|textarea|title)$/i,xn=t=>(r,...e)=>({_$litType$:t,strings:r,values:e}),m=xn(1),be=Symbol.for("lit-noChange"),E=Symbol.for("lit-nothing"),Zr=new WeakMap,ae=de.createTreeWalker(de,129);function Oi(t,r){if(!wr(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return jr!==void 0?jr.createHTML(r):r}const En=(t,r)=>{const e=t.length-1,i=[];let s,n=r===2?"<svg>":r===3?"<math>":"",o=Ce;for(let a=0;a<e;a++){const c=t[a];let h,d,p=-1,v=0;for(;v<c.length&&(o.lastIndex=v,d=o.exec(c),d!==null);)v=o.lastIndex,o===Ce?d[1]==="!--"?o=Xr:d[1]!==void 0?o=Yr:d[2]!==void 0?(Ni.test(d[2])&&(s=RegExp("</"+d[2],"g")),o=ee):d[3]!==void 0&&(o=ee):o===ee?d[0]===">"?(o=s??Ce,p=-1):d[1]===void 0?p=-2:(p=o.lastIndex-d[2].length,h=d[1],o=d[3]===void 0?ee:d[3]==='"'?qr:Kr):o===qr||o===Kr?o=ee:o===Xr||o===Yr?o=Ce:(o=ee,s=void 0);const y=o===ee&&t[a+1].startsWith("/>")?" ":"";n+=o===Ce?c+bn:p>=0?(i.push(h),c.slice(0,p)+Wi+c.slice(p)+K+y):c+K+(p===-2?a:y)}return[Oi(t,n+(t[e]||"<?>")+(r===2?"</svg>":r===3?"</math>":"")),i]};class Ue{constructor({strings:r,_$litType$:e},i){let s;this.parts=[];let n=0,o=0;const a=r.length-1,c=this.parts,[h,d]=En(r,e);if(this.el=Ue.createElement(h,i),ae.currentNode=this.el.content,e===2||e===3){const p=this.el.content.firstChild;p.replaceWith(...p.childNodes)}for(;(s=ae.nextNode())!==null&&c.length<a;){if(s.nodeType===1){if(s.hasAttributes())for(const p of s.getAttributeNames())if(p.endsWith(Wi)){const v=d[o++],y=s.getAttribute(p).split(K),k=/([.?@])?(.*)/.exec(v);c.push({type:1,index:n,name:k[2],strings:y,ctor:k[1]==="."?Cn:k[1]==="?"?In:k[1]==="@"?Pn:xt}),s.removeAttribute(p)}else p.startsWith(K)&&(c.push({type:6,index:n}),s.removeAttribute(p));if(Ni.test(s.tagName)){const p=s.textContent.split(K),v=p.length-1;if(v>0){s.textContent=yt?yt.emptyScript:"";for(let y=0;y<v;y++)s.append(p[y],Oe()),ae.nextNode(),c.push({type:2,index:++n});s.append(p[v],Oe())}}}else if(s.nodeType===8)if(s.data===Ri)c.push({type:2,index:n});else{let p=-1;for(;(p=s.data.indexOf(K,p+1))!==-1;)c.push({type:7,index:n}),p+=K.length-1}n++}}static createElement(r,e){const i=de.createElement("template");return i.innerHTML=r,i}}function _e(t,r,e=t,i){var o,a;if(r===be)return r;let s=i!==void 0?(o=e._$Co)==null?void 0:o[i]:e._$Cl;const n=Fe(r)?void 0:r._$litDirective$;return(s==null?void 0:s.constructor)!==n&&((a=s==null?void 0:s._$AO)==null||a.call(s,!1),n===void 0?s=void 0:(s=new n(t),s._$AT(t,e,i)),i!==void 0?(e._$Co??(e._$Co=[]))[i]=s:e._$Cl=s),s!==void 0&&(r=_e(t,s._$AS(t,r.values),s,i)),r}class An{constructor(r,e){this._$AV=[],this._$AN=void 0,this._$AD=r,this._$AM=e}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(r){const{el:{content:e},parts:i}=this._$AD,s=((r==null?void 0:r.creationScope)??de).importNode(e,!0);ae.currentNode=s;let n=ae.nextNode(),o=0,a=0,c=i[0];for(;c!==void 0;){if(o===c.index){let h;c.type===2?h=new et(n,n.nextSibling,this,r):c.type===1?h=new c.ctor(n,c.name,c.strings,this,r):c.type===6&&(h=new Mn(n,this,r)),this._$AV.push(h),c=i[++a]}o!==(c==null?void 0:c.index)&&(n=ae.nextNode(),o++)}return ae.currentNode=de,s}p(r){let e=0;for(const i of this._$AV)i!==void 0&&(i.strings!==void 0?(i._$AI(r,i,e),e+=i.strings.length-2):i._$AI(r[e])),e++}}class et{get _$AU(){var r;return((r=this._$AM)==null?void 0:r._$AU)??this._$Cv}constructor(r,e,i,s){this.type=2,this._$AH=E,this._$AN=void 0,this._$AA=r,this._$AB=e,this._$AM=i,this.options=s,this._$Cv=(s==null?void 0:s.isConnected)??!0}get parentNode(){let r=this._$AA.parentNode;const e=this._$AM;return e!==void 0&&(r==null?void 0:r.nodeType)===11&&(r=e.parentNode),r}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(r,e=this){r=_e(this,r,e),Fe(r)?r===E||r==null||r===""?(this._$AH!==E&&this._$AR(),this._$AH=E):r!==this._$AH&&r!==be&&this._(r):r._$litType$!==void 0?this.$(r):r.nodeType!==void 0?this.T(r):_n(r)?this.k(r):this._(r)}O(r){return this._$AA.parentNode.insertBefore(r,this._$AB)}T(r){this._$AH!==r&&(this._$AR(),this._$AH=this.O(r))}_(r){this._$AH!==E&&Fe(this._$AH)?this._$AA.nextSibling.data=r:this.T(de.createTextNode(r)),this._$AH=r}$(r){var n;const{values:e,_$litType$:i}=r,s=typeof i=="number"?this._$AC(r):(i.el===void 0&&(i.el=Ue.createElement(Oi(i.h,i.h[0]),this.options)),i);if(((n=this._$AH)==null?void 0:n._$AD)===s)this._$AH.p(e);else{const o=new An(s,this),a=o.u(this.options);o.p(e),this.T(a),this._$AH=o}}_$AC(r){let e=Zr.get(r.strings);return e===void 0&&Zr.set(r.strings,e=new Ue(r)),e}k(r){wr(this._$AH)||(this._$AH=[],this._$AR());const e=this._$AH;let i,s=0;for(const n of r)s===e.length?e.push(i=new et(this.O(Oe()),this.O(Oe()),this,this.options)):i=e[s],i._$AI(n),s++;s<e.length&&(this._$AR(i&&i._$AB.nextSibling,s),e.length=s)}_$AR(r=this._$AA.nextSibling,e){var i;for((i=this._$AP)==null?void 0:i.call(this,!1,!0,e);r!==this._$AB;){const s=Br(r).nextSibling;Br(r).remove(),r=s}}setConnected(r){var e;this._$AM===void 0&&(this._$Cv=r,(e=this._$AP)==null||e.call(this,r))}}class xt{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(r,e,i,s,n){this.type=1,this._$AH=E,this._$AN=void 0,this.element=r,this.name=e,this._$AM=s,this.options=n,i.length>2||i[0]!==""||i[1]!==""?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=E}_$AI(r,e=this,i,s){const n=this.strings;let o=!1;if(n===void 0)r=_e(this,r,e,0),o=!Fe(r)||r!==this._$AH&&r!==be,o&&(this._$AH=r);else{const a=r;let c,h;for(r=n[0],c=0;c<n.length-1;c++)h=_e(this,a[i+c],e,c),h===be&&(h=this._$AH[c]),o||(o=!Fe(h)||h!==this._$AH[c]),h===E?r=E:r!==E&&(r+=(h??"")+n[c+1]),this._$AH[c]=h}o&&!s&&this.j(r)}j(r){r===E?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,r??"")}}class Cn extends xt{constructor(){super(...arguments),this.type=3}j(r){this.element[this.name]=r===E?void 0:r}}class In extends xt{constructor(){super(...arguments),this.type=4}j(r){this.element.toggleAttribute(this.name,!!r&&r!==E)}}class Pn extends xt{constructor(r,e,i,s,n){super(r,e,i,s,n),this.type=5}_$AI(r,e=this){if((r=_e(this,r,e,0)??E)===be)return;const i=this._$AH,s=r===E&&i!==E||r.capture!==i.capture||r.once!==i.once||r.passive!==i.passive,n=r!==E&&(i===E||s);s&&this.element.removeEventListener(this.name,this,i),n&&this.element.addEventListener(this.name,this,r),this._$AH=r}handleEvent(r){var e;typeof this._$AH=="function"?this._$AH.call(((e=this.options)==null?void 0:e.host)??this.element,r):this._$AH.handleEvent(r)}}class Mn{constructor(r,e,i){this.element=r,this.type=6,this._$AN=void 0,this._$AM=e,this.options=i}get _$AU(){return this._$AM._$AU}_$AI(r){_e(this,r)}}const $t=$e.litHtmlPolyfillSupport;$t==null||$t(Ue,et),($e.litHtmlVersions??($e.litHtmlVersions=[])).push("3.3.2");const M=(t,r,e)=>{const i=r;let s=i._$litPart$;return s===void 0&&(i._$litPart$=s=new et(r.insertBefore(Oe(),null),null,void 0,{})),s._$AI(t),s};/**
8
8
  * @license
9
9
  * Copyright 2017 Google LLC
10
10
  * SPDX-License-Identifier: BSD-3-Clause
@@ -23,13 +23,13 @@ var ps=Object.defineProperty;var Lr=t=>{throw TypeError(t)};var fs=(t,r,e)=>r in
23
23
  height="${s}"
24
24
  viewBox="${r}"
25
25
  fill="${n}"
26
- >${Tn(a)}</svg>`}}const Nn=new Map,$t=new Set;var we,lt;const Ar=class Ar extends HTMLElement{constructor(){super(...arguments);b(this,we)}connectedCallback(){f(this,we,lt).call(this)}disconnectedCallback(){$t.delete(this)}attributeChangedCallback(){f(this,we,lt).call(this)}refresh(){f(this,we,lt).call(this)}get name(){return this.getAttribute("name")}get size(){const e=this.getAttribute("size");if(e===null)return;const i=Number(e);return Number.isFinite(i)?i:void 0}get weight(){const e=this.getAttribute("weight");return e==="bold"||e==="regular"?e:void 0}};we=new WeakSet,lt=function(){const e=this.name?Nn.get(this.name):null;if(!e){this.name&&$t.add(this),M(null,this);return}$t.delete(this),M(e({size:this.size,weight:this.weight}),this)},Ar.observedAttributes=["name","size","weight"];let Jt=Ar;customElements.get("icon-element")||customElements.define("icon-element",Jt);const Oi=kr('<path d="M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z"/>'),Qt=kr('<path d="M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,53.66,90.34L128,164.69l74.34-74.35a8,8,0,0,1,11.32,11.32Z"/>'),On=kr('<path d="M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm88-29.84q.06-2.16,0-4.32l14.92-18.64a8,8,0,0,0,1.48-7.06,107.21,107.21,0,0,0-10.88-26.25,8,8,0,0,0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186,40.54a8,8,0,0,0-3.94-6,107.71,107.71,0,0,0-26.25-10.87,8,8,0,0,0-7.06,1.49L130.16,40Q128,40,125.84,40L107.2,25.11a8,8,0,0,0-7.06-1.48A107.6,107.6,0,0,0,73.89,34.51a8,8,0,0,0-3.93,6L67.32,64.27q-1.56,1.49-3,3L40.54,70a8,8,0,0,0-6,3.94,107.71,107.71,0,0,0-10.87,26.25,8,8,0,0,0,1.49,7.06L40,125.84Q40,128,40,130.16L25.11,148.8a8,8,0,0,0-1.48,7.06,107.21,107.21,0,0,0,10.88,26.25,8,8,0,0,0,6,3.93l23.72,2.64q1.49,1.56,3,3L70,215.46a8,8,0,0,0,3.94,6,107.71,107.71,0,0,0,26.25,10.87,8,8,0,0,0,7.06-1.49L125.84,216q2.16.06,4.32,0l18.64,14.92a8,8,0,0,0,7.06,1.48,107.21,107.21,0,0,0,26.25-10.88,8,8,0,0,0,3.93-6l2.64-23.72q1.56-1.48,3-3L215.46,186a8,8,0,0,0,6-3.94,107.71,107.71,0,0,0,10.87-26.25,8,8,0,0,0-1.49-7.06Zm-16.1-6.5a73.93,73.93,0,0,1,0,8.68,8,8,0,0,0,1.74,5.48l14.19,17.73a91.57,91.57,0,0,1-6.23,15L187,173.11a8,8,0,0,0-5.1,2.64,74.11,74.11,0,0,1-6.14,6.14,8,8,0,0,0-2.64,5.1l-2.51,22.58a91.32,91.32,0,0,1-15,6.23l-17.74-14.19a8,8,0,0,0-5-1.75h-.48a73.93,73.93,0,0,1-8.68,0,8,8,0,0,0-5.48,1.74L100.45,215.8a91.57,91.57,0,0,1-15-6.23L82.89,187a8,8,0,0,0-2.64-5.1,74.11,74.11,0,0,1-6.14-6.14,8,8,0,0,0-5.1-2.64L46.43,170.6a91.32,91.32,0,0,1-6.23-15l14.19-17.74a8,8,0,0,0,1.74-5.48,73.93,73.93,0,0,1,0-8.68,8,8,0,0,0-1.74-5.48L40.2,100.45a91.57,91.57,0,0,1,6.23-15L69,82.89a8,8,0,0,0,5.1-2.64,74.11,74.11,0,0,1,6.14-6.14A8,8,0,0,0,82.89,69L85.4,46.43a91.32,91.32,0,0,1,15-6.23l17.74,14.19a8,8,0,0,0,5.48,1.74,73.93,73.93,0,0,1,8.68,0,8,8,0,0,0,5.48-1.74L155.55,40.2a91.57,91.57,0,0,1,15,6.23L173.11,69a8,8,0,0,0,2.64,5.1,74.11,74.11,0,0,1,6.14,6.14,8,8,0,0,0,5.1,2.64l22.58,2.51a91.32,91.32,0,0,1,6.23,15l-14.19,17.74A8,8,0,0,0,199.87,123.66Z"/>');class Fi extends Event{constructor(r){super("dropdown-item-select",{bubbles:!0,composed:!0}),this.value=r}}class Ui extends Event{constructor(r){super("select",{bubbles:!0,composed:!0}),this.value=r}}var F,U,q,ke,S,Ue,g,Hi,Pe,zi,Vi,tr,rr,ht,ie,ce,He,ze,Ve,yt,Gi,Bi,ir,Me,sr,G;const Cr=class Cr extends HTMLElement{constructor(){super();b(this,g);b(this,F,!1);b(this,U,null);b(this,q,null);b(this,ke);b(this,S,null);b(this,Ue,new MutationObserver(e=>f(this,g,Gi).call(this,e)));b(this,ce,()=>{f(this,g,ht).call(this,!u(this,F))});b(this,He,e=>{e.key!=="Enter"&&e.key!==" "||(e.preventDefault(),u(this,ce).call(this))});b(this,ze,e=>{u(this,F)&&(e.composedPath().includes(this)||f(this,g,ht).call(this,!1))});b(this,Ve,e=>{e instanceof Fi&&(e.stopPropagation(),T(this,F,!1),f(this,g,Pe).call(this,e.value),f(this,g,G).call(this),this.dispatchEvent(new Ui(e.value)))});b(this,yt,()=>{f(this,g,ir).call(this)});T(this,ke,this.attachShadow({mode:"open"}))}connectedCallback(){this.addEventListener("dropdown-item-select",u(this,Ve)),document.addEventListener("click",u(this,ze),!0),f(this,g,Hi).call(this),u(this,Ue).observe(this,{childList:!0,subtree:!0,characterData:!0,attributes:!0,attributeFilter:["selected","value","slot"]}),f(this,g,G).call(this)}disconnectedCallback(){this.removeEventListener("dropdown-item-select",u(this,Ve)),document.removeEventListener("click",u(this,ze),!0),u(this,Ue).disconnect(),f(this,g,sr).call(this)}attributeChangedCallback(){f(this,g,G).call(this)}get title(){return this.getAttribute("title")??""}get value(){return u(this,U)}set value(e){e===null?(f(this,g,ie).call(this,null,null),f(this,g,zi).call(this)):f(this,g,Pe).call(this,e),f(this,g,G).call(this)}close(){f(this,g,ht).call(this,!1)}};F=new WeakMap,U=new WeakMap,q=new WeakMap,ke=new WeakMap,S=new WeakMap,Ue=new WeakMap,g=new WeakSet,Hi=function(){var i;const e=this.querySelector("dropdown-item[selected]");e&&f(this,g,ie).call(this,e.value,((i=e.textContent)==null?void 0:i.trim())??null)},Pe=function(e){var i;for(const s of u(this,g,tr))s.value===e?(f(this,g,ie).call(this,e,((i=s.textContent)==null?void 0:i.trim())??null),s.hasAttribute("selected")||s.setAttribute("selected","")):s.hasAttribute("selected")&&s.removeAttribute("selected")},zi=function(){const e=this.querySelectorAll("dropdown-item[selected]");for(const i of e)i.removeAttribute("selected")},Vi=function(e){for(const i of u(this,g,tr))if(i.value===e)return i;return null},tr=function(){return this.querySelectorAll("dropdown-item")},rr=function(){return u(this,q)??this.title},ht=function(e){u(this,F)!==e&&(T(this,F,e),f(this,g,G).call(this))},ie=function(e,i){T(this,U,e),T(this,q,i)},ce=new WeakMap,He=new WeakMap,ze=new WeakMap,Ve=new WeakMap,yt=new WeakMap,Gi=function(e){e.every(s=>s.target instanceof Element?s.target.closest('[slot="trigger"]')!==null:!1)||f(this,g,Bi).call(this)},Bi=function(){var i,s;const e=this.querySelector("dropdown-item[selected]");if(e){const n=e.value,o=((i=e.textContent)==null?void 0:i.trim())??null,a=u(this,U)!==n||u(this,q)!==o;f(this,g,ie).call(this,n,o),f(this,g,Pe).call(this,n),a?f(this,g,G).call(this):f(this,g,Me).call(this);return}if(u(this,U)!==null){const n=f(this,g,Vi).call(this,u(this,U));if(n){const o=((s=n.textContent)==null?void 0:s.trim())??null,a=u(this,q)!==o;f(this,g,ie).call(this,u(this,U),o),f(this,g,Pe).call(this,u(this,U)),a?f(this,g,G).call(this):f(this,g,Me).call(this);return}}if(u(this,U)!==null||u(this,q)!==null){f(this,g,ie).call(this,null,null),f(this,g,G).call(this);return}f(this,g,Me).call(this)},ir=function(){const e=u(this,ke).querySelector('slot[name="trigger"]'),i=e instanceof HTMLSlotElement?e.assignedElements({flatten:!0})[0]??null:null;u(this,S)!==i&&(f(this,g,sr).call(this),T(this,S,i),u(this,S)&&(u(this,S).addEventListener("click",u(this,ce)),u(this,S)instanceof HTMLButtonElement?u(this,S).hasAttribute("type")||(u(this,S).type="button"):(u(this,S).hasAttribute("role")||u(this,S).setAttribute("role","button"),u(this,S).hasAttribute("tabindex")||(u(this,S).tabIndex=0),u(this,S).addEventListener("keydown",u(this,He))))),f(this,g,Me).call(this)},Me=function(){u(this,S)&&(u(this,S).setAttribute("data-dropdown-trigger",""),u(this,S).setAttribute("aria-haspopup","listbox"),u(this,S).setAttribute("aria-expanded",u(this,F)?"true":"false"),M(m`
26
+ >${Tn(a)}</svg>`}}const Nn=new Map,Tt=new Set;var we,ht;const Cr=class Cr extends HTMLElement{constructor(){super(...arguments);b(this,we)}connectedCallback(){f(this,we,ht).call(this)}disconnectedCallback(){Tt.delete(this)}attributeChangedCallback(){f(this,we,ht).call(this)}refresh(){f(this,we,ht).call(this)}get name(){return this.getAttribute("name")}get size(){const e=this.getAttribute("size");if(e===null)return;const i=Number(e);return Number.isFinite(i)?i:void 0}get weight(){const e=this.getAttribute("weight");return e==="bold"||e==="regular"?e:void 0}};we=new WeakSet,ht=function(){const e=this.name?Nn.get(this.name):null;if(!e){this.name&&Tt.add(this),M(null,this);return}Tt.delete(this),M(e({size:this.size,weight:this.weight}),this)},Cr.observedAttributes=["name","size","weight"];let Jt=Cr;customElements.get("icon-element")||customElements.define("icon-element",Jt);const Fi=kr('<path d="M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z"/>'),Qt=kr('<path d="M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,53.66,90.34L128,164.69l74.34-74.35a8,8,0,0,1,11.32,11.32Z"/>'),On=kr('<path d="M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm88-29.84q.06-2.16,0-4.32l14.92-18.64a8,8,0,0,0,1.48-7.06,107.21,107.21,0,0,0-10.88-26.25,8,8,0,0,0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186,40.54a8,8,0,0,0-3.94-6,107.71,107.71,0,0,0-26.25-10.87,8,8,0,0,0-7.06,1.49L130.16,40Q128,40,125.84,40L107.2,25.11a8,8,0,0,0-7.06-1.48A107.6,107.6,0,0,0,73.89,34.51a8,8,0,0,0-3.93,6L67.32,64.27q-1.56,1.49-3,3L40.54,70a8,8,0,0,0-6,3.94,107.71,107.71,0,0,0-10.87,26.25,8,8,0,0,0,1.49,7.06L40,125.84Q40,128,40,130.16L25.11,148.8a8,8,0,0,0-1.48,7.06,107.21,107.21,0,0,0,10.88,26.25,8,8,0,0,0,6,3.93l23.72,2.64q1.49,1.56,3,3L70,215.46a8,8,0,0,0,3.94,6,107.71,107.71,0,0,0,26.25,10.87,8,8,0,0,0,7.06-1.49L125.84,216q2.16.06,4.32,0l18.64,14.92a8,8,0,0,0,7.06,1.48,107.21,107.21,0,0,0,26.25-10.88,8,8,0,0,0,3.93-6l2.64-23.72q1.56-1.48,3-3L215.46,186a8,8,0,0,0,6-3.94,107.71,107.71,0,0,0,10.87-26.25,8,8,0,0,0-1.49-7.06Zm-16.1-6.5a73.93,73.93,0,0,1,0,8.68,8,8,0,0,0,1.74,5.48l14.19,17.73a91.57,91.57,0,0,1-6.23,15L187,173.11a8,8,0,0,0-5.1,2.64,74.11,74.11,0,0,1-6.14,6.14,8,8,0,0,0-2.64,5.1l-2.51,22.58a91.32,91.32,0,0,1-15,6.23l-17.74-14.19a8,8,0,0,0-5-1.75h-.48a73.93,73.93,0,0,1-8.68,0,8,8,0,0,0-5.48,1.74L100.45,215.8a91.57,91.57,0,0,1-15-6.23L82.89,187a8,8,0,0,0-2.64-5.1,74.11,74.11,0,0,1-6.14-6.14,8,8,0,0,0-5.1-2.64L46.43,170.6a91.32,91.32,0,0,1-6.23-15l14.19-17.74a8,8,0,0,0,1.74-5.48,73.93,73.93,0,0,1,0-8.68,8,8,0,0,0-1.74-5.48L40.2,100.45a91.57,91.57,0,0,1,6.23-15L69,82.89a8,8,0,0,0,5.1-2.64,74.11,74.11,0,0,1,6.14-6.14A8,8,0,0,0,82.89,69L85.4,46.43a91.32,91.32,0,0,1,15-6.23l17.74,14.19a8,8,0,0,0,5.48,1.74,73.93,73.93,0,0,1,8.68,0,8,8,0,0,0,5.48-1.74L155.55,40.2a91.57,91.57,0,0,1,15,6.23L173.11,69a8,8,0,0,0,2.64,5.1,74.11,74.11,0,0,1,6.14,6.14,8,8,0,0,0,5.1,2.64l22.58,2.51a91.32,91.32,0,0,1,6.23,15l-14.19,17.74A8,8,0,0,0,199.87,123.66Z"/>');class Ui extends Event{constructor(r){super("dropdown-item-select",{bubbles:!0,composed:!0}),this.value=r}}class Hi extends Event{constructor(r){super("select",{bubbles:!0,composed:!0}),this.value=r}}var F,U,q,ke,S,He,g,zi,Me,Vi,Gi,tr,rr,dt,ie,ce,ze,Ve,Ge,wt,Bi,ji,ir,Le,sr,G;const Ir=class Ir extends HTMLElement{constructor(){super();b(this,g);b(this,F,!1);b(this,U,null);b(this,q,null);b(this,ke);b(this,S,null);b(this,He,new MutationObserver(e=>f(this,g,Bi).call(this,e)));b(this,ce,()=>{f(this,g,dt).call(this,!u(this,F))});b(this,ze,e=>{e.key!=="Enter"&&e.key!==" "||(e.preventDefault(),u(this,ce).call(this))});b(this,Ve,e=>{u(this,F)&&(e.composedPath().includes(this)||f(this,g,dt).call(this,!1))});b(this,Ge,e=>{e instanceof Ui&&(e.stopPropagation(),T(this,F,!1),f(this,g,Me).call(this,e.value),f(this,g,G).call(this),this.dispatchEvent(new Hi(e.value)))});b(this,wt,()=>{f(this,g,ir).call(this)});T(this,ke,this.attachShadow({mode:"open"}))}connectedCallback(){this.addEventListener("dropdown-item-select",u(this,Ge)),document.addEventListener("click",u(this,Ve),!0),f(this,g,zi).call(this),u(this,He).observe(this,{childList:!0,subtree:!0,characterData:!0,attributes:!0,attributeFilter:["selected","value","slot"]}),f(this,g,G).call(this)}disconnectedCallback(){this.removeEventListener("dropdown-item-select",u(this,Ge)),document.removeEventListener("click",u(this,Ve),!0),u(this,He).disconnect(),f(this,g,sr).call(this)}attributeChangedCallback(){f(this,g,G).call(this)}get title(){return this.getAttribute("title")??""}get value(){return u(this,U)}set value(e){e===null?(f(this,g,ie).call(this,null,null),f(this,g,Vi).call(this)):f(this,g,Me).call(this,e),f(this,g,G).call(this)}close(){f(this,g,dt).call(this,!1)}};F=new WeakMap,U=new WeakMap,q=new WeakMap,ke=new WeakMap,S=new WeakMap,He=new WeakMap,g=new WeakSet,zi=function(){var i;const e=this.querySelector("dropdown-item[selected]");e&&f(this,g,ie).call(this,e.value,((i=e.textContent)==null?void 0:i.trim())??null)},Me=function(e){var i;for(const s of u(this,g,tr))s.value===e?(f(this,g,ie).call(this,e,((i=s.textContent)==null?void 0:i.trim())??null),s.hasAttribute("selected")||s.setAttribute("selected","")):s.hasAttribute("selected")&&s.removeAttribute("selected")},Vi=function(){const e=this.querySelectorAll("dropdown-item[selected]");for(const i of e)i.removeAttribute("selected")},Gi=function(e){for(const i of u(this,g,tr))if(i.value===e)return i;return null},tr=function(){return this.querySelectorAll("dropdown-item")},rr=function(){return u(this,q)??this.title},dt=function(e){u(this,F)!==e&&(T(this,F,e),f(this,g,G).call(this))},ie=function(e,i){T(this,U,e),T(this,q,i)},ce=new WeakMap,ze=new WeakMap,Ve=new WeakMap,Ge=new WeakMap,wt=new WeakMap,Bi=function(e){e.every(s=>s.target instanceof Element?s.target.closest('[slot="trigger"]')!==null:!1)||f(this,g,ji).call(this)},ji=function(){var i,s;const e=this.querySelector("dropdown-item[selected]");if(e){const n=e.value,o=((i=e.textContent)==null?void 0:i.trim())??null,a=u(this,U)!==n||u(this,q)!==o;f(this,g,ie).call(this,n,o),f(this,g,Me).call(this,n),a?f(this,g,G).call(this):f(this,g,Le).call(this);return}if(u(this,U)!==null){const n=f(this,g,Gi).call(this,u(this,U));if(n){const o=((s=n.textContent)==null?void 0:s.trim())??null,a=u(this,q)!==o;f(this,g,ie).call(this,u(this,U),o),f(this,g,Me).call(this,u(this,U)),a?f(this,g,G).call(this):f(this,g,Le).call(this);return}}if(u(this,U)!==null||u(this,q)!==null){f(this,g,ie).call(this,null,null),f(this,g,G).call(this);return}f(this,g,Le).call(this)},ir=function(){const e=u(this,ke).querySelector('slot[name="trigger"]'),i=e instanceof HTMLSlotElement?e.assignedElements({flatten:!0})[0]??null:null;u(this,S)!==i&&(f(this,g,sr).call(this),T(this,S,i),u(this,S)&&(u(this,S).addEventListener("click",u(this,ce)),u(this,S)instanceof HTMLButtonElement?u(this,S).hasAttribute("type")||(u(this,S).type="button"):(u(this,S).hasAttribute("role")||u(this,S).setAttribute("role","button"),u(this,S).hasAttribute("tabindex")||(u(this,S).tabIndex=0),u(this,S).addEventListener("keydown",u(this,ze))))),f(this,g,Le).call(this)},Le=function(){u(this,S)&&(u(this,S).setAttribute("data-dropdown-trigger",""),u(this,S).setAttribute("aria-haspopup","listbox"),u(this,S).setAttribute("aria-expanded",u(this,F)?"true":"false"),M(m`
27
27
  <span class="trigger-label" data-dropdown-trigger-label>${u(this,g,rr)}</span>
28
28
  <span class="trigger-icon" data-dropdown-trigger-icon aria-hidden="true">
29
29
  ${Qt({size:14})}
30
30
  </span>
31
- `,u(this,S)))},sr=function(){u(this,S)&&(u(this,S).removeEventListener("click",u(this,ce)),u(this,S).removeEventListener("keydown",u(this,He)),u(this,S).removeAttribute("data-dropdown-trigger"),u(this,S).removeAttribute("aria-haspopup"),u(this,S).removeAttribute("aria-expanded"),T(this,S,null))},G=function(){this.toggleAttribute("open",u(this,F)),M(m`
32
- <slot name="trigger" @slotchange=${u(this,yt)}>
31
+ `,u(this,S)))},sr=function(){u(this,S)&&(u(this,S).removeEventListener("click",u(this,ce)),u(this,S).removeEventListener("keydown",u(this,ze)),u(this,S).removeAttribute("data-dropdown-trigger"),u(this,S).removeAttribute("aria-haspopup"),u(this,S).removeAttribute("aria-expanded"),T(this,S,null))},G=function(){this.toggleAttribute("open",u(this,F)),M(m`
32
+ <slot name="trigger" @slotchange=${u(this,wt)}>
33
33
  <button
34
34
  class="fallback-trigger"
35
35
  part="trigger"
@@ -49,13 +49,13 @@ var ps=Object.defineProperty;var Lr=t=>{throw TypeError(t)};var fs=(t,r,e)=>r in
49
49
  <slot></slot>
50
50
  </div>
51
51
  `:null}
52
- `,u(this,ke)),queueMicrotask(()=>f(this,g,ir).call(this))},Cr.observedAttributes=["title"];let er=Cr;class Fn extends HTMLElement{}class Un extends HTMLElement{}class Hn extends HTMLElement{}var pe,or,ji,Ge,Be;const Ir=class Ir extends HTMLElement{constructor(){super(...arguments);b(this,pe);b(this,Ge,()=>{this.action||f(this,pe,ji).call(this)});b(this,Be,e=>{e.key!=="Enter"&&e.key!==" "||(e.preventDefault(),this.click())})}connectedCallback(){this.hasAttribute("role")||this.setAttribute("role","option"),this.hasAttribute("tabindex")||(this.tabIndex=0),this.addEventListener("click",u(this,Ge)),this.addEventListener("keydown",u(this,Be)),f(this,pe,or).call(this)}disconnectedCallback(){this.removeEventListener("click",u(this,Ge)),this.removeEventListener("keydown",u(this,Be))}attributeChangedCallback(){f(this,pe,or).call(this)}get value(){return this.getAttribute("value")??""}get selected(){return this.hasAttribute("selected")}get action(){return this.hasAttribute("action")}};pe=new WeakSet,or=function(){if(this.action){this.setAttribute("role","button"),this.removeAttribute("aria-selected");return}this.setAttribute("role","option"),this.setAttribute("aria-selected",this.selected?"true":"false")},ji=function(){this.dispatchEvent(new Fi(this.value))},Ge=new WeakMap,Be=new WeakMap,Ir.observedAttributes=["action","selected","value"];let nr=Ir;customElements.get("dropdown-menu")||customElements.define("dropdown-menu",er);customElements.get("dropdown-group")||customElements.define("dropdown-group",Fn);customElements.get("dropdown-label")||customElements.define("dropdown-label",Un);customElements.get("dropdown-divider")||customElements.define("dropdown-divider",Hn);customElements.get("dropdown-item")||customElements.define("dropdown-item",nr);class zn extends Event{constructor(){super("close",{bubbles:!0,composed:!0})}}var je,Q,cr,wt,Xe,lr;const Pr=class Pr extends HTMLElement{constructor(){super();b(this,Q);b(this,je);b(this,wt,e=>{e.target===e.currentTarget&&f(this,Q,cr).call(this)});b(this,Xe,e=>{this.open&&e.key==="Escape"&&f(this,Q,cr).call(this)});T(this,je,this.attachShadow({mode:"open"}))}connectedCallback(){document.addEventListener("keydown",u(this,Xe)),f(this,Q,lr).call(this)}disconnectedCallback(){document.removeEventListener("keydown",u(this,Xe))}attributeChangedCallback(){f(this,Q,lr).call(this)}get open(){return this.hasAttribute("open")}};je=new WeakMap,Q=new WeakSet,cr=function(){this.dispatchEvent(new zn)},wt=new WeakMap,Xe=new WeakMap,lr=function(){M(m`
52
+ `,u(this,ke)),queueMicrotask(()=>f(this,g,ir).call(this))},Ir.observedAttributes=["title"];let er=Ir;class Fn extends HTMLElement{}class Un extends HTMLElement{}class Hn extends HTMLElement{}var pe,or,Xi,Be,je;const Pr=class Pr extends HTMLElement{constructor(){super(...arguments);b(this,pe);b(this,Be,()=>{this.action||f(this,pe,Xi).call(this)});b(this,je,e=>{e.key!=="Enter"&&e.key!==" "||(e.preventDefault(),this.click())})}connectedCallback(){this.hasAttribute("role")||this.setAttribute("role","option"),this.hasAttribute("tabindex")||(this.tabIndex=0),this.addEventListener("click",u(this,Be)),this.addEventListener("keydown",u(this,je)),f(this,pe,or).call(this)}disconnectedCallback(){this.removeEventListener("click",u(this,Be)),this.removeEventListener("keydown",u(this,je))}attributeChangedCallback(){f(this,pe,or).call(this)}get value(){return this.getAttribute("value")??""}get selected(){return this.hasAttribute("selected")}get action(){return this.hasAttribute("action")}};pe=new WeakSet,or=function(){if(this.action){this.setAttribute("role","button"),this.removeAttribute("aria-selected");return}this.setAttribute("role","option"),this.setAttribute("aria-selected",this.selected?"true":"false")},Xi=function(){this.dispatchEvent(new Ui(this.value))},Be=new WeakMap,je=new WeakMap,Pr.observedAttributes=["action","selected","value"];let nr=Pr;customElements.get("dropdown-menu")||customElements.define("dropdown-menu",er);customElements.get("dropdown-group")||customElements.define("dropdown-group",Fn);customElements.get("dropdown-label")||customElements.define("dropdown-label",Un);customElements.get("dropdown-divider")||customElements.define("dropdown-divider",Hn);customElements.get("dropdown-item")||customElements.define("dropdown-item",nr);class zn extends Event{constructor(){super("close",{bubbles:!0,composed:!0})}}var Xe,Q,cr,kt,Ye,lr;const Mr=class Mr extends HTMLElement{constructor(){super();b(this,Q);b(this,Xe);b(this,kt,e=>{e.target===e.currentTarget&&f(this,Q,cr).call(this)});b(this,Ye,e=>{this.open&&e.key==="Escape"&&f(this,Q,cr).call(this)});T(this,Xe,this.attachShadow({mode:"open"}))}connectedCallback(){document.addEventListener("keydown",u(this,Ye)),f(this,Q,lr).call(this)}disconnectedCallback(){document.removeEventListener("keydown",u(this,Ye))}attributeChangedCallback(){f(this,Q,lr).call(this)}get open(){return this.hasAttribute("open")}};Xe=new WeakMap,Q=new WeakSet,cr=function(){this.dispatchEvent(new zn)},kt=new WeakMap,Ye=new WeakMap,lr=function(){M(m`
53
53
  ${this.open?m`
54
- <div class="backdrop" part="backdrop" @click=${u(this,wt)}>
54
+ <div class="backdrop" part="backdrop" @click=${u(this,kt)}>
55
55
  <slot></slot>
56
56
  </div>
57
57
  `:null}
58
- `,u(this,je))},Pr.observedAttributes=["open"];let ar=Pr;customElements.get("modal-overlay")||customElements.define("modal-overlay",ar);class Xi extends Event{constructor(){super("close",{bubbles:!0,composed:!0})}}class Vn extends HTMLElement{}var Ye,$,Ke,_,dt,ut,Yi,Ki,Le,qi,qe,dr;const Mr=class Mr extends HTMLElement{constructor(){super();b(this,_);b(this,Ye);b(this,$,[]);b(this,Ke,new MutationObserver(()=>f(this,_,qi).call(this)));b(this,qe,e=>{const i=e.target;if(!(i instanceof Element))return;const s=i.closest("[data-navigate]");if(s){this.navigate(s.dataset.navigate??"");return}i.closest("[data-back]")&&this.back()});T(this,Ye,this.attachShadow({mode:"open"}))}connectedCallback(){this.addEventListener("click",u(this,qe)),u(this,Ke).observe(this,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["id","title"]}),f(this,_,Le).call(this)}disconnectedCallback(){this.removeEventListener("click",u(this,qe)),u(this,Ke).disconnect(),T(this,$,[])}attributeChangedCallback(){f(this,_,dr).call(this)}get closable(){return this.hasAttribute("closable")}navigate(e){var n;const i=((n=u(this,_,dt))==null?void 0:n.id)??null;e===i||!f(this,_,ut).call(this,e)||(u(this,$).push(e),f(this,_,Le).call(this))}back(){u(this,$).length<=1||(u(this,$).pop(),f(this,_,Le).call(this))}};Ye=new WeakMap,$=new WeakMap,Ke=new WeakMap,_=new WeakSet,dt=function(){const e=u(this,$)[u(this,$).length-1]??null;return e?f(this,_,ut).call(this,e):null},ut=function(e){const i=this.querySelectorAll("panel-page");for(const s of i)if(s.id===e)return s;return null},Yi=function(){if(T(this,$,u(this,$).filter(i=>f(this,_,ut).call(this,i)!==null)),u(this,$).length>0)return;const e=this.querySelector("panel-page");e!=null&&e.id&&T(this,$,[e.id])},Ki=function(){f(this,_,Yi).call(this);const e=u(this,_,dt),i=this.querySelectorAll("panel-page");for(const s of i)s.hidden=s!==e},Le=function(){f(this,_,Ki).call(this),f(this,_,dr).call(this)},qi=function(){f(this,_,Le).call(this)},qe=new WeakMap,dr=function(){const e=u(this,_,dt);M(m`
58
+ `,u(this,Xe))},Mr.observedAttributes=["open"];let ar=Mr;customElements.get("modal-overlay")||customElements.define("modal-overlay",ar);class Yi extends Event{constructor(){super("close",{bubbles:!0,composed:!0})}}class Vn extends HTMLElement{}var Ke,$,qe,_,ut,pt,Ki,qi,De,Zi,Ze,dr;const Lr=class Lr extends HTMLElement{constructor(){super();b(this,_);b(this,Ke);b(this,$,[]);b(this,qe,new MutationObserver(()=>f(this,_,Zi).call(this)));b(this,Ze,e=>{const i=e.target;if(!(i instanceof Element))return;const s=i.closest("[data-navigate]");if(s){this.navigate(s.dataset.navigate??"");return}i.closest("[data-back]")&&this.back()});T(this,Ke,this.attachShadow({mode:"open"}))}connectedCallback(){this.addEventListener("click",u(this,Ze)),u(this,qe).observe(this,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["id","title"]}),f(this,_,De).call(this)}disconnectedCallback(){this.removeEventListener("click",u(this,Ze)),u(this,qe).disconnect(),T(this,$,[])}attributeChangedCallback(){f(this,_,dr).call(this)}get closable(){return this.hasAttribute("closable")}navigate(e){var n;const i=((n=u(this,_,ut))==null?void 0:n.id)??null;e===i||!f(this,_,pt).call(this,e)||(u(this,$).push(e),f(this,_,De).call(this))}back(){u(this,$).length<=1||(u(this,$).pop(),f(this,_,De).call(this))}};Ke=new WeakMap,$=new WeakMap,qe=new WeakMap,_=new WeakSet,ut=function(){const e=u(this,$)[u(this,$).length-1]??null;return e?f(this,_,pt).call(this,e):null},pt=function(e){const i=this.querySelectorAll("panel-page");for(const s of i)if(s.id===e)return s;return null},Ki=function(){if(T(this,$,u(this,$).filter(i=>f(this,_,pt).call(this,i)!==null)),u(this,$).length>0)return;const e=this.querySelector("panel-page");e!=null&&e.id&&T(this,$,[e.id])},qi=function(){f(this,_,Ki).call(this);const e=u(this,_,ut),i=this.querySelectorAll("panel-page");for(const s of i)s.hidden=s!==e},De=function(){f(this,_,qi).call(this),f(this,_,dr).call(this)},Zi=function(){f(this,_,De).call(this)},Ze=new WeakMap,dr=function(){const e=u(this,_,ut);M(m`
59
59
  <section class="panel" part="panel">
60
60
  <header class="title-bar" part="header">
61
61
  <div class="title-group" part="title-group">
@@ -80,44 +80,46 @@ var ps=Object.defineProperty;var Lr=t=>{throw TypeError(t)};var fs=(t,r,e)=>r in
80
80
  class="title-button"
81
81
  part="button close-button"
82
82
  aria-label="Close"
83
- @click=${()=>this.dispatchEvent(new Xi)}
83
+ @click=${()=>this.dispatchEvent(new Yi)}
84
84
  >
85
- <span class="close-icon" part="icon close-icon">${Oi({size:14})}</span>
85
+ <span class="close-icon" part="icon close-icon">${Fi({size:14})}</span>
86
86
  </button>
87
87
  `:null}
88
88
  </header>
89
89
  <slot></slot>
90
90
  </section>
91
- `,u(this,Ye))},Mr.observedAttributes=["closable"];let hr=Mr;customElements.get("panel-view")||customElements.define("panel-view",hr);customElements.get("panel-page")||customElements.define("panel-page",Vn);class Zi extends Event{constructor(e){super("close-artifact",{bubbles:!0,composed:!0});l(this,"id");this.id=e}}class Gn extends HTMLElement{constructor(){super(...arguments);l(this,"_artifact",null);l(this,"_artifactURL",null)}set artifact(e){this._artifact=e,this.render()}get artifact(){return this._artifact}set artifactURL(e){this._artifactURL=e,this.render()}get artifactURL(){return this._artifactURL}handleClose(){this._artifact&&this.dispatchEvent(new Zi(this._artifact.id))}template(){const e=this._artifact;return m`
91
+ `,u(this,Ke))},Lr.observedAttributes=["closable"];let hr=Lr;customElements.get("panel-view")||customElements.define("panel-view",hr);customElements.get("panel-page")||customElements.define("panel-page",Vn);const Ji=xe();class Gn extends HTMLElement{constructor(){super(...arguments);l(this,"_artifact",null);l(this,"_artifactURL",null)}set artifact(e){this._artifact=e,this.render()}get artifact(){return this._artifact}set artifactURL(e){this._artifactURL=e,this.render()}get artifactURL(){return this._artifactURL}handleClose(){this._artifact&&this.dispatchEvent(new Ji("close-artifact",{artifactID:this._artifact.id,bubbles:!0,composed:!0}))}template(){const e=this._artifact;return m`
92
92
  <header class="artifact-title-bar" drag-handle>
93
93
  <span class="artifact-title">${e.title}</span>
94
94
  <button
95
95
  class="artifact-close-btn"
96
96
  @click=${()=>this.handleClose()}
97
97
  aria-label="Close"
98
- >${Oi({size:14})}</button>
98
+ >
99
+ ${Fi({size:14})}
100
+ </button>
99
101
  </header>
100
102
  <div class="artifact-content">
101
- ${this.renderContent()}
103
+ <iframe
104
+ class="artifact-html-frame"
105
+ title=${this._artifact.title}
106
+ src=${this._artifactURL??"about:blank"}
107
+ sandbox="allow-scripts"
108
+ style="width: 100%; height: 100%; border: none;"
109
+ ></iframe>
102
110
  </div>
103
- `}renderContent(){return m`<iframe
104
- class="artifact-html-frame"
105
- title=${this._artifact.title}
106
- src=${this._artifactURL??"about:blank"}
107
- sandbox="allow-scripts"
108
- style="width: 100%; height: 100%; border: none;"
109
- ></iframe>`}render(){this._artifact&&(this.setAttribute("type",this._artifact.type),M(this.template(),this))}}customElements.define("artifact-view",Gn);const P=t=>({type:"px",...t}),D=t=>({type:"unit",...t}),ct=2,Bn=2;class jn{constructor(r){l(this,"basis");l(this,"min");l(this,"_gap");l(this,"_viewport");l(this,"_unit");this.basis=r.basis,this.min=r.min,this._viewport=r.viewport,this._gap=r.gap??P({x,y:x});const e=this._viewport.x??Z,i=this._viewport.y??me,s=this._gap.x??x,n=this._gap.y??x,o=Z+s*Bn,a=e<=o,c=a?e-s*ct:Math.min(Z,e-s*ct),h=a?i-n*ct:Math.min(me,i-n*ct),d=(c-s*(z-1))/z,p=(h-n*(R-1))/R,v=this.basis.x??0,y=this.basis.y??0,k=this.min.x??0,L=this.min.y??0;this._unit=P(a?{x:Math.max(k,d),y:Math.max(L,p)}:{x:Math.max(k,Math.min(v,d)),y:Math.max(L,Math.min(y,p))})}get unit(){return this._unit}get viewport(){return this._viewport}get gap(){return this._gap}toUnits(r){return D({x:r.x==null?void 0:r.x/(this._unit.x??1),y:r.y==null?void 0:r.y/(this._unit.y??1)})}toPixels(r){const e=this._unit.x??0,i=this._unit.y??0,s=this._gap.x??x,n=this._gap.y??x,o=r.x==null?void 0:r.x*e+Math.max(0,r.x-1)*s,a=r.y==null?void 0:r.y*i+Math.max(0,r.y-1)*n;return P({x:o,y:a})}}const ue=1e-4,B=1e-6,Xn=40,Yn=24;function Ji(t,r){return Math.max(0,t-r*2)}function Qi(t){const r=[0];for(const e of t)r.push((r[r.length-1]??0)+e);return r}function es(t){const r=[0];for(let e=0;e<t.length;e+=1){const i=r[e]??0;r.push(i+t[e]+x)}return r}function ts(t,r,e){if(r<0||r>=t.length)return 0;let i=0,s=0;for(let n=r;n<t.length;n+=1){const o=t[n],a=s===0?o:i+x+o;if(a>e+ue)break;i=a,s+=1}return Math.max(1,s)}function Kn(t,r,e){if(r<0||r>=t.length)return 0;let i=0,s=0;for(let n=r;n>=0;n-=1){const o=t[n],a=s===0?o:i+x+o;if(a>e+ue)break;i=a,s+=1}return Math.max(1,s)}function qn(t,r){if(t.length===0)return 0;let e=0,i=0;for(let s=t.length-1;s>=0;s-=1){const n=t[s],o=i===0?n:e+x+n;if(o>r+ue)break;e=o,i+=1}return Math.max(1,i)}function Sr(t,r){if(t.length===0)return 0;const e=qn(t,r);return Math.max(0,t.length-e)}function Zr(t,r,e){if(t.length===0)return 0;const i=ts(t,r,e),s=Math.min(t.length,r+i);if(s<=r)return 0;const n=t.slice(r,s);return n.reduce((o,a)=>o+a,0)+Math.max(0,n.length-1)*x}function ur(t,r,e){const i=t[r]??0;return e-i}function ve(t,r,e,i,s){if(t.length===0)return 0;const n=Sr(t,s),o=r[n]??0,a=Math.max(0,Math.min(o,e));let c=0;for(let X=0;X<n;X+=1){const C=r[X]??0,xe=r[X+1]??C;if(a>=C&&a<=xe+ue){c=X;break}c=X+1}const h=Math.min(c+1,n),d=r[c]??0,p=r[h]??d,v=Math.max(p-d,ue),y=h===c?0:(a-d)/v,k=es(t),L=Zr(t,c,s),O=Zr(t,h,s),V=(i-L)/2,fe=(i-O)/2,rt=ur(k,c,V),A=ur(k,h,fe);return rt+(A-rt)*y}function Jr(t,r,e,i,s){const n=Sr(t,i),o=r[n]??0;let a=0,c=o;for(let h=0;h<Xn;h+=1){const d=(a+c)/2;ve(t,r,d,e,i)>s?a=d:c=d}return(a+c)/2}function Qr(t,r,e){const i=es(t),[s,n]=r,o=t.slice(s,n+1),a=o.reduce((h,d)=>h+d,0)+Math.max(0,o.length-1)*x,c=(e-a)/2;return ur(i,s,c)}function Zn(t,r,e){const i=ts(t,r,e);return[r,Math.min(t.length-1,r+i-1)]}function Jn(t,r,e){const i=Kn(t,r,e);return[Math.max(0,r-i+1),r]}function Qn(t){const r=new Set,e=[];for(const i of t){const s=`${i.nodeRange[0]}:${i.nodeRange[1]}`;if(r.has(s))continue;const n=e[e.length-1];n&&Math.abs(n.anchor-i.anchor)<=B||(r.add(s),e.push(i))}return e}function eo(t){const{nodeCols:r,nodeWidthsPx:e,viewportWidthPx:i}=t;if(r.length===0||e.length===0)return{viewspans:[],minScroll:0,maxScroll:0};const s=t.gapPx??x,n=Ji(i,s),o=Qi(r),a=Sr(e,n),c=o[a]??0,h=[];for(let d=0;d<=a;d+=1){const p=Zn(e,d,n),v=Qr(e,p,i),y=Jr(e,o,i,n,v);h.push({nodeRange:p,anchor:Math.max(0,Math.min(c,y))})}for(let d=e.length-1;d>=0;d-=1){const p=Jn(e,d,n),v=`${p[0]}:${p[1]}`;if(h.some(L=>`${L.nodeRange[0]}:${L.nodeRange[1]}`===v))continue;const y=Qr(e,p,i),k=Jr(e,o,i,n,y);h.push({nodeRange:p,anchor:Math.max(0,Math.min(c,k))})}return h.sort((d,p)=>Math.abs(d.anchor-p.anchor)>B?d.anchor-p.anchor:d.nodeRange[0]!==p.nodeRange[0]?d.nodeRange[0]-p.nodeRange[0]:d.nodeRange[1]-p.nodeRange[1]),{viewspans:Qn(h),minScroll:0,maxScroll:c}}function to(t,r){var s;let e=0,i=Number.POSITIVE_INFINITY;for(let n=0;n<t.length;n+=1){const o=Math.abs((((s=t[n])==null?void 0:s.anchor)??0)-r);if(o+B<i){i=o,e=n;continue}Math.abs(o-i)<=B&&n<e&&(e=n)}return e}function ro(t,r,e){return e<=0?0:Math.max(0,Math.min(e-1,t+r))}function Ce(t,r,e){return Math.max(r,Math.min(e,t))}class io extends Je{constructor(e){super();l(this,"_scroll",0);l(this,"minScroll",0);l(this,"maxScroll",0);l(this,"viewspans",[]);l(this,"activeViewspanIndex",null);l(this,"nodeWidthsPx",[]);l(this,"boundaryCols",[0]);l(this,"viewportWidthPx",0);l(this,"framedViewportWidthPx",0);this._scroll=(e==null?void 0:e.x)??0}get scroll(){return D({x:this._scroll})}get translate(){return P({x:ve(this.nodeWidthsPx,this.boundaryCols,this._scroll,this.viewportWidthPx,this.framedViewportWidthPx)})}set scroll(e){const i=Ce(e.x??this._scroll,this.minScroll,this.maxScroll);Math.abs(i-this._scroll)<=B||(this._scroll=i,this.activeViewspanIndex=null,this.dispatchEvent(new Ee("layout-scroll",{scroll:this.scroll})))}rebuild(e){const i=e.nodeWidths.map(h=>Math.max(0,h.x??0)),s=i.map(h=>e.grid.toPixels(D({x:h})).x??0),n=e.grid.viewport.x??0,o=e.grid.gap.x??x,a=eo({nodeCols:i,nodeWidthsPx:s,viewportWidthPx:n,gapPx:o});this.nodeWidthsPx=s,this.boundaryCols=Qi(i),this.viewportWidthPx=n,this.framedViewportWidthPx=Ji(n,o),this.viewspans=a.viewspans,this.minScroll=a.minScroll,this.maxScroll=a.maxScroll,this.activeViewspanIndex=null;const c=Ce(this._scroll,this.minScroll,this.maxScroll);Math.abs(c-this._scroll)>B&&(this._scroll=c,this.dispatchEvent(new Ee("layout-scroll",{scroll:this.scroll})))}step(e){var a;if(this.viewspans.length===0)return;const i=this.activeViewspanIndex??to(this.viewspans,this._scroll),s=ro(i,e,this.viewspans.length),n=((a=this.viewspans[s])==null?void 0:a.anchor)??this._scroll,o=Ce(n,this.minScroll,this.maxScroll);this.activeViewspanIndex=s,!(Math.abs(o-this._scroll)<=B)&&(this._scroll=o,this.dispatchEvent(new Ee("layout-scroll",{scroll:this.scroll})))}wheel(e){const i=Ce(this._scroll+(e.x??0),this.minScroll,this.maxScroll);this.activeViewspanIndex=null,!(Math.abs(i-this._scroll)<=B)&&(this._scroll=i,this.dispatchEvent(new Ee("layout-scroll",{scroll:this.scroll})))}wheelPixels(e){const i=e.x??0;if(Math.abs(i)<=ue)return;this.activeViewspanIndex=null;const s=ve(this.nodeWidthsPx,this.boundaryCols,this._scroll,this.viewportWidthPx,this.framedViewportWidthPx),n=s-i,o=ve(this.nodeWidthsPx,this.boundaryCols,this.maxScroll,this.viewportWidthPx,this.framedViewportWidthPx),a=ve(this.nodeWidthsPx,this.boundaryCols,this.minScroll,this.viewportWidthPx,this.framedViewportWidthPx),c=Math.max(o,Math.min(a,n));if(Math.abs(c-s)<=ue)return;let h=this.minScroll,d=this.maxScroll;for(let v=0;v<Yn;v+=1){const y=(h+d)/2;ve(this.nodeWidthsPx,this.boundaryCols,y,this.viewportWidthPx,this.framedViewportWidthPx)>c?h=y:d=y}const p=Ce((h+d)/2,this.minScroll,this.maxScroll);Math.abs(p-this._scroll)<=B||(this._scroll=p,this.dispatchEvent(new Ee("layout-scroll",{scroll:this.scroll})))}}const Tt={"stack-above":{left:.25,top:0,width:.5,height:.5},"stack-below":{left:.25,top:.5,width:.5,height:.5},"reorder-before":{left:0,top:0,width:.25,height:1},"reorder-after":{left:.75,top:0,width:.25,height:1}},so=["stack-above","stack-below","reorder-before","reorder-after"];function Wt(t,r){return{left:t.left+t.width*r.left,top:t.top+t.height*r.top,width:t.width*r.width,height:t.height*r.height}}function te(t,r,e){return t>=e.left&&t<e.left+e.width&&r>=e.top&&r<e.top+e.height}function pr(t){return t.height===R||t.height===J?{...t,height:J}:t}function fr(t){return t.height===J?{...t,height:R}:t}function no(t,r,e,i){const s=t.findIndex(d=>d.type==="stack"&&d.id===r);if(s===-1)return t;const n=t[s];if(!n||n.type!=="stack")return t;const o=n.children.find(d=>d.type==="card"&&d.id===e);if(!o||o.type!=="card")return t;const a=n.children.filter(d=>d.id!==e);if(a.length===n.children.length||a.length<1)return t;const c=[...t];if(a.length===1){const[d]=a;c[s]=d.type==="card"?fr(d):d}else c[s]={...n,children:a};const h=Math.max(0,Math.min(i,c.length));return c.splice(h,0,fr(o)),c}const oo=Ze(),ao=Ze(),co=50;function lo(t,r){if(t.type!==r.type)return!1;switch(t.type){case"reorder":return r.index===t.index;case"stack":return r.targetCardId===t.targetCardId&&r.position===t.position;case"stack-child-noop":return!0;case"stack-child-extract":return r.toIndex===t.toIndex;case"stack-child-reorder":return r.position===t.position;default:return!1}}function tt(t){return{id:t.id,type:"drop-target",width:t.width,height:t.height}}function ei(t){return t.map(uo)}function ho(t){return t.type==="drop-target"?{id:t.id,type:"card",artifactID:t.id,width:t.width,height:t.height}:t}function uo(t){return t.type==="drop-target"?{id:t.id,type:"card",artifactID:t.id,width:t.width,height:t.height}:t.type==="stack"?{...t,children:t.children.map(ho)}:t}function rs(t,r){return t.find(i=>i.type==="card"&&i.id===r)??null}function ti(t,r){return t.find(i=>i.type==="stack"&&i.id===r)??null}function is(t,r){for(const e of t){if(e.type==="card"&&e.id===r)return e;if(e.type==="stack")for(const i of e.children){if(i.type==="card"&&i.id===r)return i;if(i.type==="row"){for(const s of i.children)if(s.id===r)return s}}}return null}function po(t,r){const e=[...r],i=e.findIndex(a=>a.type==="card"&&a.id===t.nodeId);if(i===-1)return null;const s=e[i];if(!s||s.type!=="card")return null;e.splice(i,1);const n=Math.max(0,Math.min(t.lastReorderIndex,e.length));e.splice(n,0,s);const o=e.findIndex(a=>a.type==="card"&&a.id===t.nodeId);return o===-1?null:{base:e,visualDraggedIndex:o}}function fo(t,r,e,i){const s=[...t.base];s.splice(t.visualDraggedIndex,1);const n=s.findIndex(v=>v.type==="card"&&v.id===e.targetCardId),o=n===-1?null:s[n];if(!o||o.type!=="card")return null;const a=rs(i,r.nodeId);if(!a)return null;const c=pr(a),h=pr(o),d=tt(c),p=e.position==="above"?[d,h]:[h,d];return s[n]={id:o.id,type:"stack",children:p},s}function Rt(t,r){return t.parentStackId?vo(t,r):go(t,r)}function go(t,r){const e=t.hitTarget;if(e.type==="reorder"){const i=r[t.sourceIndex];if(!i||i.type!=="card")return[...r];const s=[...r];return s.splice(t.sourceIndex,1),s.splice(e.index,0,tt(i)),s}if(e.type==="stack"){const i=po(t,r);return i?fo(i,t,e,r)??[...r]:[...r]}return[...r]}function vo(t,r){const e=t.hitTarget;switch(e.type){case"stack-child-reorder":return mo(t,r,e.position);case"stack-child-extract":return yo(t,r,e.toIndex);case"stack-child-noop":return wo(t,r);default:return[...r]}}function mo(t,r,e){const i=r.findIndex(v=>v.type==="stack"&&v.id===t.parentStackId);if(i===-1)return[...r];const s=r[i];if(!s||s.type!=="stack")return[...r];if(!s.children.every(v=>v.type==="card"))return[...r];const n=s.children,o=n.findIndex(v=>v.id===t.nodeId);if(o===-1)return[...r];const a=n[o],c=n.filter(v=>v.id!==t.nodeId),h=tt(a),d=e==="above"?[h,...c]:[...c,h],p=[...r];return p[i]={...s,children:d},p}function yo(t,r,e){if(!t.parentStackId)return[...r];const i=no(r,t.parentStackId,t.nodeId,e);if(i===r)return[...r];const s=i.findIndex(a=>a.type==="card"&&a.id===t.nodeId);if(s===-1)return[...r];const n=i[s];if(!n||n.type!=="card")return[...r];const o=[...i];return o[s]=tt(n),o}function wo(t,r){const e=r.findIndex(c=>c.type==="stack"&&c.id===t.parentStackId);if(e===-1)return[...r];const i=r[e];if(!i||i.type!=="stack")return[...r];const s=i.children.findIndex(c=>c.type==="card"&&c.id===t.nodeId);if(s===-1)return[...r];const n=i.children[s];if(!n||n.type!=="card")return[...r];const o=[...r],a=[...i.children];return a[s]=tt(n),o[e]={...i,children:a},o}function ko(t,r){return r.find(i=>i.type==="stack"&&i.id===t.id)?t.id:$e()}function So(t,r,e){if(t.type==="drop-target"){const i=is(r,e);if(!i)throw new Error(`finalize: missing dragged card ${e}`);return pr(i)}return t}function bo(t,r,e){const i=t.children.map(n=>So(n,r,e));return{id:ko(t,r),type:"stack",children:i}}function _o(t,r,e){if(t.type==="drop-target"){const i=is(r,e);if(!i)throw new Error(`finalize: missing dragged card ${e}`);return rs(r,e)!==null?i:fr(i)}return t.type==="card"||t.type==="row"?t:bo(t,r,e)}function xo(t,r,e){return t.map(i=>_o(i,r,e))}function Eo(t,r){return JSON.stringify(t)===JSON.stringify(r)}class Ao extends Je{constructor(e={}){super();l(this,"pending",null);l(this,"active",null)}start(e){if(this.pending||this.active)return;const i=e.pointer.x??0,s=e.pointer.y??0;this.pending={startX:i,startY:s,grabOffsetX:e.grabOffset.x??0,grabOffsetY:e.grabOffset.y??0,nodeId:e.nodeId,sourceIndex:e.source.index,parentStackId:e.source.parentId,width:e.size.x??0,height:e.size.y??0,baseLayout:e.layout}}update(e){const i=e.pointer.x??0,s=e.pointer.y??0,n=this.pending;if(n){const h=i-n.startX,d=s-n.startY;Math.hypot(h,d)>=Ds&&(this.pending=null,this.active={...n,pointerX:i,pointerY:s,hitTarget:{type:"reorder",index:n.sourceIndex},lastReorderIndex:n.sourceIndex},this.emitDrag(),this.dispatchEvent(new w("change")));return}if(!this.active)return;const o=Rt(this.active,this.active.baseLayout),a=this.getHitTargetForPointer(i,s,e,o),c=a.type==="reorder"?a.index:this.active.lastReorderIndex;this.active.pointerX===i&&this.active.pointerY===s&&lo(this.active.hitTarget,a)&&this.active.lastReorderIndex===c||(this.active={...this.active,pointerX:i,pointerY:s,hitTarget:a,lastReorderIndex:c},this.emitDrag(),this.dispatchEvent(new w("change")))}drop(){if(this.pending){this.cancel();return}if(!this.active)return;const e=this.active.baseLayout;let i=null;try{const s=Rt(this.active,e),n=xo(s,e,this.active.nodeId);Eo(n,e)||(i=n)}catch{i=null}this.reset(),i&&this.dispatchEvent(new ao("drop",{layout:i})),this.dispatchEvent(new w("change"))}cancel(){!this.pending&&!this.active||(this.reset(),this.dispatchEvent(new w("change")))}dispose(){this.reset()}get status(){return this.active?"active":this.pending?"pending":"idle"}reset(){this.pending=null,this.active=null}emitDrag(){if(!this.active)return;const e=Rt(this.active,this.active.baseLayout);this.dispatchEvent(new oo("drag",{nodeId:this.active.nodeId,source:{index:this.active.sourceIndex,parentId:this.active.parentStackId},grabOffset:P({x:this.active.grabOffsetX,y:this.active.grabOffsetY}),pointer:P({x:this.active.pointerX,y:this.active.pointerY}),size:P({x:this.active.width,y:this.active.height}),projectedLayout:e}))}getHitTargetForPointer(e,i,s,n){return this.active?this.isPointerInsideDragBounds(e,i,s.viewport)?this.active.parentStackId?this.getStackChildHitTarget(e,i,s,n):this.getTopLevelCardHitTarget(e,i,s,n):{type:"reorder",index:this.active.sourceIndex}:{type:"reorder",index:0}}getStackChildHitTarget(e,i,s,n){var h;if(!((h=this.active)!=null&&h.parentStackId))return{type:"stack-child-noop"};const o=this.getSourceStackInteractionRect(s.geometry);if(o&&te(e,i,o)){const d=o.top+o.height/2;return{type:"stack-child-reorder",position:i<d?"above":"below"}}const a=this.getSourceRemainingSiblingRect(s.geometry);if(a&&te(e,i,a)){const d=a.top+a.height/2;return{type:"stack-child-reorder",position:i<d?"above":"below"}}return{type:"stack-child-extract",toIndex:this.getTopLevelReorderIndexForPointer(e,i,s,n)}}getSourceRemainingSiblingRect(e){var n,o;if(!((n=this.active)!=null&&n.parentStackId))return;const i=ti(this.active.baseLayout,this.active.parentStackId);if(!i)return;const s=i.children.find(a=>{var c;return a.type==="card"&&a.id!==((c=this.active)==null?void 0:c.nodeId)});if(s)return(o=e.find(a=>a.id===s.id))==null?void 0:o.rect}getSourceStackInteractionRect(e){var o;if(!((o=this.active)!=null&&o.parentStackId))return;const i=e.find(a=>{var c;return a.id===((c=this.active)==null?void 0:c.parentStackId)});if(i)return this.active.sourceStackRect=i.rect,i.rect;const s=ti(this.active.baseLayout,this.active.parentStackId);if(!s)return this.active.sourceStackRect;const n=s.children.find(a=>{var c;return a.type==="card"&&a.id!==((c=this.active)==null?void 0:c.nodeId)});if(n){const a=e.find(c=>c.id===n.id);if(a)return a.rect}return this.active.sourceStackRect}getTopLevelCardHitTarget(e,i,s,n){var y,k,L;const o=this.getTopLevelZoneNodes(s.geometry,n);if(o.length===0)return{type:"reorder",index:((y=this.active)==null?void 0:y.sourceIndex)??0};const c=(s.effectiveVelocity??0)<=co;for(const O of o){const V=O.rect;if(!te(e,i,V))continue;const fe=this.resolveTopLevelTargetForCard(e,i,O,O.logicalIndex,c);if(fe)return fe;if(!c&&((k=this.active)!=null&&k.hitTarget))return this.active.hitTarget}const h=this.getNearestTargetableZone(e,o);if(!h)return{type:"reorder",index:((L=this.active)==null?void 0:L.sourceIndex)??0};const d=Math.max(h.rect.left,Math.min(h.rect.left+h.rect.width,e)),p=this.resolveTopLevelTargetForCard(d,i,h,h.logicalIndex,c);if(p)return p;const v=h.rect.left+h.rect.width/2;return{type:"reorder",index:e<v?h.logicalIndex:h.logicalIndex+1}}getTopLevelReorderIndexForPointer(e,i,s,n){var h,d;const o=this.getTopLevelZoneNodes(s.geometry,n);if(o.length===0)return((h=this.active)==null?void 0:h.sourceIndex)??0;for(const p of o){if(!te(e,i,p.rect))continue;const v=Wt(p.rect,Tt["reorder-before"]);if(te(e,i,v))return p.logicalIndex;const y=Wt(p.rect,Tt["reorder-after"]);if(te(e,i,y))return p.logicalIndex+1}const a=this.getNearestTargetableZone(e,o);if(!a)return((d=this.active)==null?void 0:d.sourceIndex)??0;const c=a.rect.left+a.rect.width/2;return e<c?a.logicalIndex:a.logicalIndex+1}getTopLevelZoneNodes(e,i){const s=new Map(i.map(a=>[a.id,a])),n=[];let o=0;for(const a of e){const c=s.get(a.id);c&&c.type!=="drop-target"&&(c.type==="card"||c.type==="stack")&&(n.push({id:c.id,rect:a.rect,logicalIndex:o}),o+=1)}return n}resolveTopLevelTargetForCard(e,i,s,n,o){const a=s.rect;for(const c of so){if(!o&&(c==="stack-above"||c==="stack-below"))continue;const h=Tt[c],d=Wt(a,h);if(te(e,i,d))return c==="stack-above"?{type:"stack",targetCardId:s.id,position:"above"}:c==="stack-below"?{type:"stack",targetCardId:s.id,position:"below"}:c==="reorder-before"?{type:"reorder",index:n}:{type:"reorder",index:n+1}}return null}getNearestTargetableZone(e,i){let s=null,n=Number.POSITIVE_INFINITY;for(const o of i){const a=o.rect.left,c=o.rect.left+o.rect.width,h=e<a?a-e:e>c?e-c:0;h<n&&(n=h,s=o)}return s}isPointerInsideDragBounds(e,i,s){return e>=s.left&&e<=s.left+s.width&&i>=s.top&&i<=s.top+s.height}}const ri=120,Co=80,ii=.5;class Io{constructor(){l(this,"awaitingFreshWheelGesture",!1);l(this,"lastWheelEventAt",Number.NEGATIVE_INFINITY);l(this,"lastWheelDeltaX",0);l(this,"activeGestureType","none");l(this,"lastWheelGestureAt",Number.NEGATIVE_INFINITY)}markKeyboardNavigation(r){this.awaitingFreshWheelGesture=!0,this.lastWheelEventAt=r,this.activeGestureType="none"}reset(){this.awaitingFreshWheelGesture=!1,this.lastWheelEventAt=Number.NEGATIVE_INFINITY,this.lastWheelDeltaX=0,this.activeGestureType="none",this.lastWheelGestureAt=Number.NEGATIVE_INFINITY}decide(r){const{now:e,shiftKey:i,deltaX:s,deltaY:n,overArtifactContent:o,artifactCanScrollUp:a,artifactCanScrollDown:c}=r;e-this.lastWheelGestureAt>=ri&&(this.activeGestureType="none");const d=i&&n!==0,p=d?n:s,v=n>0?c:n<0?a:!1;if(this.activeGestureType==="vertical-artifact"&&o&&v)return this.lastWheelGestureAt=e,{type:"scroll-native"};if(this.activeGestureType==="horizontal-filmstrip"&&Math.abs(p)>=ii)return this.lastWheelGestureAt=e,this.lastWheelEventAt=e,this.lastWheelDeltaX=p,{type:"scroll-horizontal",horizontalDelta:p};if(Math.abs(p)<ii)return o&&v&&(this.activeGestureType="vertical-artifact"),this.lastWheelGestureAt=e,{type:"scroll-native"};if(!d&&o&&v&&Math.abs(n)>=Math.abs(p))return this.activeGestureType="vertical-artifact",this.lastWheelGestureAt=e,{type:"scroll-native"};const y=e-this.lastWheelEventAt,k=Math.sign(this.lastWheelDeltaX),L=Math.sign(p),O=k!==0&&L!==0&&k!==L,V=k!==0&&Math.abs(p)>=Math.abs(this.lastWheelDeltaX)+Co;return this.lastWheelEventAt=e,this.lastWheelDeltaX=p,this.lastWheelGestureAt=e,this.awaitingFreshWheelGesture&&y<ri&&!O&&!V?{type:"ignore"}:(this.awaitingFreshWheelGesture=!1,this.activeGestureType="horizontal-filmstrip",{type:"scroll-horizontal",horizontalDelta:p})}}const Po=2,si=1e3,Nt=1e-4;function ni(t,r,e){if(t===0)return 0;const i=r.toPixels(D({y:R})).y??0;return(e-i)/Po}class Mo extends Event{constructor(e){super("scroll",{bubbles:!0,composed:!0});l(this,"scrollPosition");this.scrollPosition=e}}class ss extends Event{constructor(e){super("layout-change",{bubbles:!0,composed:!0});l(this,"layout");this.layout=e}}class Lo extends HTMLElement{constructor(){super();l(this,"_layout",[]);l(this,"_scrollPosition",0);l(this,"layoutGrid",null);l(this,"layoutScroll",new io(D({x:0})));l(this,"scrollModelKey","");l(this,"resizeObserver",null);l(this,"renderPending",!1);l(this,"animateNextRender",!0);l(this,"wheelGesture",new Io);l(this,"dragController",new Ao);l(this,"dragState",null);l(this,"activeDragPointerId",null);l(this,"dragListenersAttached",!1);l(this,"dragFrame",0);l(this,"lastDragFrameTime",0);l(this,"lastPointerX",0);l(this,"lastPointerY",0);l(this,"pointerVelocityPxPerSec",0);l(this,"scrollVelocityPxPerSec",0);l(this,"motionSampleTime",0);l(this,"motionSampleX",0);l(this,"motionSampleY",0);l(this,"dragTrackOffsetXPx",0);l(this,"previousProjectedLayoutForOffset",null);l(this,"renderContent",()=>m``);l(this,"onDragControllerChange",()=>{this.dragController.status==="idle"&&(this.dragState=null,this.dragTrackOffsetXPx=0,this.previousProjectedLayoutForOffset=null),this.scheduleRender()});l(this,"onDragControllerDrag",e=>{const i=ei(e.projectedLayout),s=this.shouldApplyTrackOffset(e.projectedLayout,e.source.parentId),n=e.source.parentId?this.getStackChildAnchorCardId(e.source.parentId,e.nodeId):null;this.dragTrackOffsetXPx=s?this.computeDragTrackOffset(this.previousProjectedLayoutForOffset,i,e.nodeId,e.source.parentId,n,this.dragTrackOffsetXPx):0,this.previousProjectedLayoutForOffset=i,this.dragState={nodeId:e.nodeId,source:e.source,grabOffset:e.grabOffset,pointer:e.pointer,size:e.size,projectedLayout:e.projectedLayout},this.scheduleRender()});l(this,"onDragControllerDrop",e=>{this.dragState=null,this.dragTrackOffsetXPx=0,this.previousProjectedLayoutForOffset=null,this.commitLayout(e.layout)});l(this,"onLayoutScrollInternal",e=>{const s=e.scroll.x??0;Math.abs(s-this._scrollPosition)<Nt||(this._scrollPosition=s,this.emitScrollPositionChanged(s),this.scheduleRender())});l(this,"handleKeyDown",e=>{if(e.key==="Escape"&&this.dragController.status!=="idle"){e.preventDefault(),this.stopDragFrameLoop(),this.releaseActiveDragPointerCapture(),this.dragController.cancel(),this.detachDragListeners();return}this.dragController.status==="idle"&&(e.key==="ArrowRight"?(e.preventDefault(),this.wheelGesture.markKeyboardNavigation(Date.now()),this.shiftWindow(1)):e.key==="ArrowLeft"&&(e.preventDefault(),this.wheelGesture.markKeyboardNavigation(Date.now()),this.shiftWindow(-1)))});l(this,"handleWheel",e=>{if(this._layout.length===0)return;const i=this.wheelGesture.decide({now:Date.now(),shiftKey:e.shiftKey,deltaX:e.deltaX,deltaY:e.deltaY,overArtifactContent:!1,artifactCanScrollDown:!1,artifactCanScrollUp:!1});if(i.type!=="scroll-horizontal")return;e.preventDefault(),this.syncScrollModel();const s=this.layoutGrid;if(!s)return;this.animateNextRender=!1;const n=s.toUnits(P({x:i.horizontalDelta}));this.layoutScroll.wheel(D({x:n.x??0}))});l(this,"handlePointerDown",e=>{if(e.button!==0||this.dragController.status!=="idle")return;const i=e.target;if(!(i instanceof Element))return;const s=i.closest(".card-slot[data-layout-draggable='true']");if(!s)return;const n=s.getAttribute("data-layout-node-id");if(!n)return;const o=$o(this._layout,n);if(!o)return;const a=s.getBoundingClientRect();this.lastPointerX=e.clientX,this.lastPointerY=e.clientY,this.resetMotionTracking(e.clientX,e.clientY),this.focus(),this.dragController.start({nodeId:n,source:{index:o.topLevelIndex,parentId:o.sourceStackId},pointer:P({x:e.clientX,y:e.clientY}),grabOffset:P({x:e.clientX-a.left,y:e.clientY-a.top}),size:P({x:a.width,y:a.height}),layout:this._layout}),this.attachDragListeners(),this.activeDragPointerId=e.pointerId;try{this.setPointerCapture(e.pointerId)}catch{}e.preventDefault()});l(this,"handleWindowPointerMove",e=>{this.lastPointerX=e.clientX,this.lastPointerY=e.clientY,this.updatePointerVelocity(e.clientX,e.clientY),this.syncDragTargetForLatestPointer(),this.ensureDragFrameLoop()});l(this,"handleWindowPointerUp",e=>{this.stopDragFrameLoop(),this.releasePointerCaptureForEvent(e.pointerId),this.dragController.drop(),this.clearMotionTracking(),this.detachDragListeners()});l(this,"handleWindowPointerCancel",e=>{this.stopDragFrameLoop(),this.releasePointerCaptureForEvent(e.pointerId),this.dragController.cancel(),this.clearMotionTracking(),this.detachDragListeners()});l(this,"handleWindowBlur",()=>{this.releaseActiveDragPointerCapture(),this.stopDragFrameLoop(),this.dragController.cancel(),this.clearMotionTracking(),this.detachDragListeners()});l(this,"runDragFrame",e=>{if(this.dragController.status==="idle"){this.dragFrame=0;return}const i=Math.max(0,e-this.lastDragFrameTime)/si;this.lastDragFrameTime=e,this.samplePointerVelocityAt(e,this.lastPointerX,this.lastPointerY);const s=this.getBoundingClientRect(),n=this.clampPointerToViewport(this.lastPointerX,this.lastPointerY,s),o=this.getDragEdgeScrollDeltaPixels(n.x,s,i);this.scrollVelocityPxPerSec=i>Nt?Math.abs(o)/i:0,Math.abs(o)>Nt&&(this.animateNextRender=!1,this.layoutScroll.wheelPixels(P({x:o}))),this.dragController.status==="active"&&this.syncDragTarget(n.x,n.y,s),this.dragFrame=requestAnimationFrame(this.runDragFrame)});this.dragController.addEventListener("change",this.onDragControllerChange),this.dragController.addEventListener("drag",this.onDragControllerDrag),this.dragController.addEventListener("drop",this.onDragControllerDrop),this.layoutScroll.addEventListener("layout-scroll",this.onLayoutScrollInternal)}set layout(e){this._layout=[...e],this.stopDragFrameLoop(),this.dragController.cancel(),this.scrollModelKey="",this.syncScrollModel(),this.layoutScroll.scroll=D({x:this._scrollPosition}),this.scheduleRender()}get layout(){return this._layout}commitLayout(e){this.layout=e,this.emitLayoutChanged()}set scrollPosition(e){this.animateNextRender=!1,this.syncScrollModel(),this.layoutScroll.scroll=D({x:e})}get scrollPosition(){return this._scrollPosition}connectedCallback(){this.hasAttribute("tabindex")||(this.tabIndex=0),this.focus(),this.addEventListener("keydown",this.handleKeyDown),this.addEventListener("wheel",this.handleWheel,{passive:!1}),this.addEventListener("pointerdown",this.handlePointerDown),typeof ResizeObserver<"u"&&(this.resizeObserver=new ResizeObserver(()=>this.render()),this.resizeObserver.observe(this)),this.render()}disconnectedCallback(){var e;this.removeEventListener("keydown",this.handleKeyDown),this.removeEventListener("wheel",this.handleWheel),this.removeEventListener("pointerdown",this.handlePointerDown),(e=this.resizeObserver)==null||e.disconnect(),this.resizeObserver=null,this.wheelGesture.reset(),this.detachDragListeners(),this.dragController.removeEventListener("change",this.onDragControllerChange),this.dragController.removeEventListener("drag",this.onDragControllerDrag),this.dragController.removeEventListener("drop",this.onDragControllerDrop),this.layoutScroll.removeEventListener("layout-scroll",this.onLayoutScrollInternal),this.dragController.dispose(),this.stopDragFrameLoop()}scheduleRender(){this.renderPending||(this.renderPending=!0,queueMicrotask(()=>{this.renderPending=!1,this.render()}))}createGrid(e,i){return new jn({basis:P({x:se,y:se}),min:P({x:Wr,y:Wr}),viewport:P({x:e,y:i}),gap:P({x,y:x})})}syncScrollModel(){const e=this.clientWidth>0?this.clientWidth:Z,i=this.clientHeight>0?this.clientHeight:me,n=ye(this._layout).nodes.map(a=>a.width),o=`${e}x${i}:${n.join(",")}`;o===this.scrollModelKey&&this.layoutGrid||(this.scrollModelKey=o,this.layoutGrid=this.createGrid(e,i),this.layoutScroll.rebuild({grid:this.layoutGrid,nodeWidths:n.map(a=>D({x:a}))}))}emitScrollPositionChanged(e){this.dispatchEvent(new Mo(e))}emitLayoutChanged(){this.dispatchEvent(new ss([...this._layout]))}shiftWindow(e){this.syncScrollModel(),this.animateNextRender=!0,this.layoutScroll.step(e)}releaseActiveDragPointerCapture(){this.activeDragPointerId!==null&&this.releasePointerCaptureForEvent(this.activeDragPointerId)}releasePointerCaptureForEvent(e){try{this.hasPointerCapture(e)&&this.releasePointerCapture(e)}catch{}}attachDragListeners(){this.dragListenersAttached||(window.addEventListener("pointermove",this.handleWindowPointerMove),window.addEventListener("pointerup",this.handleWindowPointerUp),window.addEventListener("pointercancel",this.handleWindowPointerCancel),this.addEventListener("pointermove",this.handleWindowPointerMove),this.addEventListener("pointerup",this.handleWindowPointerUp),this.addEventListener("pointercancel",this.handleWindowPointerCancel),window.addEventListener("blur",this.handleWindowBlur),this.dragListenersAttached=!0)}detachDragListeners(){this.dragListenersAttached&&(window.removeEventListener("pointermove",this.handleWindowPointerMove),window.removeEventListener("pointerup",this.handleWindowPointerUp),window.removeEventListener("pointercancel",this.handleWindowPointerCancel),this.removeEventListener("pointermove",this.handleWindowPointerMove),this.removeEventListener("pointerup",this.handleWindowPointerUp),this.removeEventListener("pointercancel",this.handleWindowPointerCancel),window.removeEventListener("blur",this.handleWindowBlur),this.dragListenersAttached=!1,this.activeDragPointerId=null)}getDisplayModel(){if(this.dragController.status!=="active"||!this.dragState)return{layout:this._layout,activePlaceholderId:null,placeholdersById:new Map};const e=new Map;return e.set(this.dragState.nodeId,{id:this.dragState.nodeId,sourceCardId:this.dragState.nodeId}),{layout:ei(this.dragState.projectedLayout),activePlaceholderId:this.dragState.nodeId,placeholdersById:e}}render(){const e=this.clientWidth>0?this.clientWidth:Z,i=this.clientHeight>0?this.clientHeight:me,s=this.createGrid(e,i);this.layoutGrid=s;const n=this.getDisplayModel(),o=n.layout,a=this.dragController.status==="active",c=ye(o),h=c.nodes.map(C=>C.width),d=To(o),p=`${e}x${i}:${h.join(",")}`;!a&&p!==this.scrollModelKey&&(this.scrollModelKey=p,this.layoutScroll.rebuild({grid:s,nodeWidths:h.map(C=>D({x:C}))}),this._scrollPosition=this.layoutScroll.scroll.x??this._scrollPosition);const v=Do(o),y=s.unit.x??se,k=s.unit.y??se,L=a?this.dragTrackOffsetXPx:0,O=(this.layoutScroll.translate.x??0)+L,V=ni(c.nodes.length,s,i),fe=this.animateNextRender&&!a,rt=[`transform: translate(${O}px, ${V}px);`,`transition-duration: ${fe?Ls:0}ms;`,`pointer-events: ${a?"none":"auto"};`].join(" ");this.animateNextRender=!0,this.style.setProperty("--layout-unit-x",`${y}px`),this.style.setProperty("--layout-unit-y",`${k}px`),this.style.setProperty("--layout-gap",`${x}px`);const A=this.dragState,X={width:(A==null?void 0:A.size.x)??0,height:(A==null?void 0:A.size.y)??0};M(m`
111
+ `}render(){this._artifact&&(this.setAttribute("type",this._artifact.type),M(this.template(),this))}}customElements.define("artifact-view",Gn);const P=t=>({type:"px",...t}),D=t=>({type:"unit",...t}),ct=2,Bn=2;class jn{constructor(r){l(this,"basis");l(this,"min");l(this,"_gap");l(this,"_viewport");l(this,"_unit");this.basis=r.basis,this.min=r.min,this._viewport=r.viewport,this._gap=r.gap??P({x,y:x});const e=this._viewport.x??Z,i=this._viewport.y??me,s=this._gap.x??x,n=this._gap.y??x,o=Z+s*Bn,a=e<=o,c=a?e-s*ct:Math.min(Z,e-s*ct),h=a?i-n*ct:Math.min(me,i-n*ct),d=(c-s*(z-1))/z,p=(h-n*(R-1))/R,v=this.basis.x??0,y=this.basis.y??0,k=this.min.x??0,L=this.min.y??0;this._unit=P(a?{x:Math.max(k,d),y:Math.max(L,p)}:{x:Math.max(k,Math.min(v,d)),y:Math.max(L,Math.min(y,p))})}get unit(){return this._unit}get viewport(){return this._viewport}get gap(){return this._gap}toUnits(r){return D({x:r.x==null?void 0:r.x/(this._unit.x??1),y:r.y==null?void 0:r.y/(this._unit.y??1)})}toPixels(r){const e=this._unit.x??0,i=this._unit.y??0,s=this._gap.x??x,n=this._gap.y??x,o=r.x==null?void 0:r.x*e+Math.max(0,r.x-1)*s,a=r.y==null?void 0:r.y*i+Math.max(0,r.y-1)*n;return P({x:o,y:a})}}const ue=1e-4,B=1e-6,Xn=40,Yn=24;function Qi(t,r){return Math.max(0,t-r*2)}function es(t){const r=[0];for(const e of t)r.push((r[r.length-1]??0)+e);return r}function ts(t){const r=[0];for(let e=0;e<t.length;e+=1){const i=r[e]??0;r.push(i+t[e]+x)}return r}function rs(t,r,e){if(r<0||r>=t.length)return 0;let i=0,s=0;for(let n=r;n<t.length;n+=1){const o=t[n],a=s===0?o:i+x+o;if(a>e+ue)break;i=a,s+=1}return Math.max(1,s)}function Kn(t,r,e){if(r<0||r>=t.length)return 0;let i=0,s=0;for(let n=r;n>=0;n-=1){const o=t[n],a=s===0?o:i+x+o;if(a>e+ue)break;i=a,s+=1}return Math.max(1,s)}function qn(t,r){if(t.length===0)return 0;let e=0,i=0;for(let s=t.length-1;s>=0;s-=1){const n=t[s],o=i===0?n:e+x+n;if(o>r+ue)break;e=o,i+=1}return Math.max(1,i)}function Sr(t,r){if(t.length===0)return 0;const e=qn(t,r);return Math.max(0,t.length-e)}function Jr(t,r,e){if(t.length===0)return 0;const i=rs(t,r,e),s=Math.min(t.length,r+i);if(s<=r)return 0;const n=t.slice(r,s);return n.reduce((o,a)=>o+a,0)+Math.max(0,n.length-1)*x}function ur(t,r,e){const i=t[r]??0;return e-i}function ve(t,r,e,i,s){if(t.length===0)return 0;const n=Sr(t,s),o=r[n]??0,a=Math.max(0,Math.min(o,e));let c=0;for(let X=0;X<n;X+=1){const C=r[X]??0,Ee=r[X+1]??C;if(a>=C&&a<=Ee+ue){c=X;break}c=X+1}const h=Math.min(c+1,n),d=r[c]??0,p=r[h]??d,v=Math.max(p-d,ue),y=h===c?0:(a-d)/v,k=ts(t),L=Jr(t,c,s),O=Jr(t,h,s),V=(i-L)/2,fe=(i-O)/2,rt=ur(k,c,V),A=ur(k,h,fe);return rt+(A-rt)*y}function Qr(t,r,e,i,s){const n=Sr(t,i),o=r[n]??0;let a=0,c=o;for(let h=0;h<Xn;h+=1){const d=(a+c)/2;ve(t,r,d,e,i)>s?a=d:c=d}return(a+c)/2}function ei(t,r,e){const i=ts(t),[s,n]=r,o=t.slice(s,n+1),a=o.reduce((h,d)=>h+d,0)+Math.max(0,o.length-1)*x,c=(e-a)/2;return ur(i,s,c)}function Zn(t,r,e){const i=rs(t,r,e);return[r,Math.min(t.length-1,r+i-1)]}function Jn(t,r,e){const i=Kn(t,r,e);return[Math.max(0,r-i+1),r]}function Qn(t){const r=new Set,e=[];for(const i of t){const s=`${i.nodeRange[0]}:${i.nodeRange[1]}`;if(r.has(s))continue;const n=e[e.length-1];n&&Math.abs(n.anchor-i.anchor)<=B||(r.add(s),e.push(i))}return e}function eo(t){const{nodeCols:r,nodeWidthsPx:e,viewportWidthPx:i}=t;if(r.length===0||e.length===0)return{viewspans:[],minScroll:0,maxScroll:0};const s=t.gapPx??x,n=Qi(i,s),o=es(r),a=Sr(e,n),c=o[a]??0,h=[];for(let d=0;d<=a;d+=1){const p=Zn(e,d,n),v=ei(e,p,i),y=Qr(e,o,i,n,v);h.push({nodeRange:p,anchor:Math.max(0,Math.min(c,y))})}for(let d=e.length-1;d>=0;d-=1){const p=Jn(e,d,n),v=`${p[0]}:${p[1]}`;if(h.some(L=>`${L.nodeRange[0]}:${L.nodeRange[1]}`===v))continue;const y=ei(e,p,i),k=Qr(e,o,i,n,y);h.push({nodeRange:p,anchor:Math.max(0,Math.min(c,k))})}return h.sort((d,p)=>Math.abs(d.anchor-p.anchor)>B?d.anchor-p.anchor:d.nodeRange[0]!==p.nodeRange[0]?d.nodeRange[0]-p.nodeRange[0]:d.nodeRange[1]-p.nodeRange[1]),{viewspans:Qn(h),minScroll:0,maxScroll:c}}function to(t,r){var s;let e=0,i=Number.POSITIVE_INFINITY;for(let n=0;n<t.length;n+=1){const o=Math.abs((((s=t[n])==null?void 0:s.anchor)??0)-r);if(o+B<i){i=o,e=n;continue}Math.abs(o-i)<=B&&n<e&&(e=n)}return e}function ro(t,r,e){return e<=0?0:Math.max(0,Math.min(e-1,t+r))}function Ie(t,r,e){return Math.max(r,Math.min(e,t))}class io extends Je{constructor(e){super();l(this,"_scroll",0);l(this,"minScroll",0);l(this,"maxScroll",0);l(this,"viewspans",[]);l(this,"activeViewspanIndex",null);l(this,"nodeWidthsPx",[]);l(this,"boundaryCols",[0]);l(this,"viewportWidthPx",0);l(this,"framedViewportWidthPx",0);this._scroll=(e==null?void 0:e.x)??0}get scroll(){return D({x:this._scroll})}get translate(){return P({x:ve(this.nodeWidthsPx,this.boundaryCols,this._scroll,this.viewportWidthPx,this.framedViewportWidthPx)})}set scroll(e){const i=Ie(e.x??this._scroll,this.minScroll,this.maxScroll);Math.abs(i-this._scroll)<=B||(this._scroll=i,this.activeViewspanIndex=null,this.dispatchEvent(new Ae("layout-scroll",{scroll:this.scroll})))}rebuild(e){const i=e.nodeWidths.map(h=>Math.max(0,h.x??0)),s=i.map(h=>e.grid.toPixels(D({x:h})).x??0),n=e.grid.viewport.x??0,o=e.grid.gap.x??x,a=eo({nodeCols:i,nodeWidthsPx:s,viewportWidthPx:n,gapPx:o});this.nodeWidthsPx=s,this.boundaryCols=es(i),this.viewportWidthPx=n,this.framedViewportWidthPx=Qi(n,o),this.viewspans=a.viewspans,this.minScroll=a.minScroll,this.maxScroll=a.maxScroll,this.activeViewspanIndex=null;const c=Ie(this._scroll,this.minScroll,this.maxScroll);Math.abs(c-this._scroll)>B&&(this._scroll=c,this.dispatchEvent(new Ae("layout-scroll",{scroll:this.scroll})))}step(e){var a;if(this.viewspans.length===0)return;const i=this.activeViewspanIndex??to(this.viewspans,this._scroll),s=ro(i,e,this.viewspans.length),n=((a=this.viewspans[s])==null?void 0:a.anchor)??this._scroll,o=Ie(n,this.minScroll,this.maxScroll);this.activeViewspanIndex=s,!(Math.abs(o-this._scroll)<=B)&&(this._scroll=o,this.dispatchEvent(new Ae("layout-scroll",{scroll:this.scroll})))}wheel(e){const i=Ie(this._scroll+(e.x??0),this.minScroll,this.maxScroll);this.activeViewspanIndex=null,!(Math.abs(i-this._scroll)<=B)&&(this._scroll=i,this.dispatchEvent(new Ae("layout-scroll",{scroll:this.scroll})))}wheelPixels(e){const i=e.x??0;if(Math.abs(i)<=ue)return;this.activeViewspanIndex=null;const s=ve(this.nodeWidthsPx,this.boundaryCols,this._scroll,this.viewportWidthPx,this.framedViewportWidthPx),n=s-i,o=ve(this.nodeWidthsPx,this.boundaryCols,this.maxScroll,this.viewportWidthPx,this.framedViewportWidthPx),a=ve(this.nodeWidthsPx,this.boundaryCols,this.minScroll,this.viewportWidthPx,this.framedViewportWidthPx),c=Math.max(o,Math.min(a,n));if(Math.abs(c-s)<=ue)return;let h=this.minScroll,d=this.maxScroll;for(let v=0;v<Yn;v+=1){const y=(h+d)/2;ve(this.nodeWidthsPx,this.boundaryCols,y,this.viewportWidthPx,this.framedViewportWidthPx)>c?h=y:d=y}const p=Ie((h+d)/2,this.minScroll,this.maxScroll);Math.abs(p-this._scroll)<=B||(this._scroll=p,this.dispatchEvent(new Ae("layout-scroll",{scroll:this.scroll})))}}const Wt={"stack-above":{left:.25,top:0,width:.5,height:.5},"stack-below":{left:.25,top:.5,width:.5,height:.5},"reorder-before":{left:0,top:0,width:.25,height:1},"reorder-after":{left:.75,top:0,width:.25,height:1}},so=["stack-above","stack-below","reorder-before","reorder-after"];function Rt(t,r){return{left:t.left+t.width*r.left,top:t.top+t.height*r.top,width:t.width*r.width,height:t.height*r.height}}function te(t,r,e){return t>=e.left&&t<e.left+e.width&&r>=e.top&&r<e.top+e.height}function br(t,r){for(const e of t){if(e.type==="card"&&e.id===r)return e;if(e.type==="stack")for(const i of e.children){if(i.type==="card"&&i.id===r)return i;if(i.type==="row"){for(const s of i.children)if(s.id===r)return s}}}return null}function pr(t){return t.height===R||t.height===J?{...t,height:J}:t}function fr(t){return t.height===J?{...t,height:R}:t}function no(t,r,e,i){const s=t.findIndex(d=>d.type==="stack"&&d.id===r);if(s===-1)return t;const n=t[s];if(!n||n.type!=="stack")return t;const o=n.children.find(d=>d.type==="card"&&d.id===e);if(!o||o.type!=="card")return t;const a=n.children.filter(d=>d.id!==e);if(a.length===n.children.length||a.length<1)return t;const c=[...t];if(a.length===1){const[d]=a;c[s]=d.type==="card"?fr(d):d}else c[s]={...n,children:a};const h=Math.max(0,Math.min(i,c.length));return c.splice(h,0,fr(o)),c}const oo=xe(),ao=xe(),co=50;function lo(t,r){if(t.type!==r.type)return!1;switch(t.type){case"reorder":return r.index===t.index;case"stack":return r.targetCardId===t.targetCardId&&r.position===t.position;case"stack-child-noop":return!0;case"stack-child-extract":return r.toIndex===t.toIndex;case"stack-child-reorder":return r.position===t.position;default:return!1}}function tt(t){return{id:t.id,type:"drop-target",width:t.width,height:t.height}}function ti(t){return t.map(uo)}function ho(t){return t.type==="drop-target"?{id:t.id,type:"card",artifactID:t.id,width:t.width,height:t.height}:t}function uo(t){return t.type==="drop-target"?{id:t.id,type:"card",artifactID:t.id,width:t.width,height:t.height}:t.type==="stack"?{...t,children:t.children.map(ho)}:t}function is(t,r){return t.find(i=>i.type==="card"&&i.id===r)??null}function ri(t,r){return t.find(i=>i.type==="stack"&&i.id===r)??null}function po(t,r){const e=[...r],i=e.findIndex(a=>a.type==="card"&&a.id===t.nodeId);if(i===-1)return null;const s=e[i];if(!s||s.type!=="card")return null;e.splice(i,1);const n=Math.max(0,Math.min(t.lastReorderIndex,e.length));e.splice(n,0,s);const o=e.findIndex(a=>a.type==="card"&&a.id===t.nodeId);return o===-1?null:{base:e,visualDraggedIndex:o}}function fo(t,r,e,i){const s=[...t.base];s.splice(t.visualDraggedIndex,1);const n=s.findIndex(v=>v.type==="card"&&v.id===e.targetCardId),o=n===-1?null:s[n];if(!o||o.type!=="card")return null;const a=is(i,r.nodeId);if(!a)return null;const c=pr(a),h=pr(o),d=tt(c),p=e.position==="above"?[d,h]:[h,d];return s[n]={id:o.id,type:"stack",children:p},s}function Nt(t,r){return t.parentStackId?vo(t,r):go(t,r)}function go(t,r){const e=t.hitTarget;if(e.type==="reorder"){const i=r[t.sourceIndex];if(!i||i.type!=="card")return[...r];const s=[...r];return s.splice(t.sourceIndex,1),s.splice(e.index,0,tt(i)),s}if(e.type==="stack"){const i=po(t,r);return i?fo(i,t,e,r)??[...r]:[...r]}return[...r]}function vo(t,r){const e=t.hitTarget;switch(e.type){case"stack-child-reorder":return mo(t,r,e.position);case"stack-child-extract":return yo(t,r,e.toIndex);case"stack-child-noop":return wo(t,r);default:return[...r]}}function mo(t,r,e){const i=r.findIndex(v=>v.type==="stack"&&v.id===t.parentStackId);if(i===-1)return[...r];const s=r[i];if(!s||s.type!=="stack")return[...r];if(!s.children.every(v=>v.type==="card"))return[...r];const n=s.children,o=n.findIndex(v=>v.id===t.nodeId);if(o===-1)return[...r];const a=n[o],c=n.filter(v=>v.id!==t.nodeId),h=tt(a),d=e==="above"?[h,...c]:[...c,h],p=[...r];return p[i]={...s,children:d},p}function yo(t,r,e){if(!t.parentStackId)return[...r];const i=no(r,t.parentStackId,t.nodeId,e);if(i===r)return[...r];const s=i.findIndex(a=>a.type==="card"&&a.id===t.nodeId);if(s===-1)return[...r];const n=i[s];if(!n||n.type!=="card")return[...r];const o=[...i];return o[s]=tt(n),o}function wo(t,r){const e=r.findIndex(c=>c.type==="stack"&&c.id===t.parentStackId);if(e===-1)return[...r];const i=r[e];if(!i||i.type!=="stack")return[...r];const s=i.children.findIndex(c=>c.type==="card"&&c.id===t.nodeId);if(s===-1)return[...r];const n=i.children[s];if(!n||n.type!=="card")return[...r];const o=[...r],a=[...i.children];return a[s]=tt(n),o[e]={...i,children:a},o}function ko(t,r){return r.find(i=>i.type==="stack"&&i.id===t.id)?t.id:Te()}function So(t,r,e){if(t.type==="drop-target"){const i=br(r,e);if(!i)throw new Error(`finalize: missing dragged card ${e}`);return pr(i)}return t}function bo(t,r,e){const i=t.children.map(n=>So(n,r,e));return{id:ko(t,r),type:"stack",children:i}}function _o(t,r,e){if(t.type==="drop-target"){const i=br(r,e);if(!i)throw new Error(`finalize: missing dragged card ${e}`);return is(r,e)!==null?i:fr(i)}return t.type==="card"||t.type==="row"?t:bo(t,r,e)}function xo(t,r,e){return t.map(i=>_o(i,r,e))}function Eo(t,r){return JSON.stringify(t)===JSON.stringify(r)}class Ao extends Je{constructor(e={}){super();l(this,"pending",null);l(this,"active",null)}start(e){if(this.pending||this.active)return;const i=e.pointer.x??0,s=e.pointer.y??0;this.pending={startX:i,startY:s,grabOffsetX:e.grabOffset.x??0,grabOffsetY:e.grabOffset.y??0,nodeId:e.nodeId,sourceIndex:e.source.index,parentStackId:e.source.parentId,width:e.size.x??0,height:e.size.y??0,baseLayout:e.layout}}update(e){const i=e.pointer.x??0,s=e.pointer.y??0,n=this.pending;if(n){const h=i-n.startX,d=s-n.startY;Math.hypot(h,d)>=Ds&&(this.pending=null,this.active={...n,pointerX:i,pointerY:s,hitTarget:{type:"reorder",index:n.sourceIndex},lastReorderIndex:n.sourceIndex},this.emitDrag(),this.dispatchEvent(new w("change")));return}if(!this.active)return;const o=Nt(this.active,this.active.baseLayout),a=this.getHitTargetForPointer(i,s,e,o),c=a.type==="reorder"?a.index:this.active.lastReorderIndex;this.active.pointerX===i&&this.active.pointerY===s&&lo(this.active.hitTarget,a)&&this.active.lastReorderIndex===c||(this.active={...this.active,pointerX:i,pointerY:s,hitTarget:a,lastReorderIndex:c},this.emitDrag(),this.dispatchEvent(new w("change")))}drop(){if(this.pending){this.cancel();return}if(!this.active)return;const e=this.active.baseLayout;let i=null;try{const s=Nt(this.active,e),n=xo(s,e,this.active.nodeId);Eo(n,e)||(i=n)}catch{i=null}this.reset(),i&&this.dispatchEvent(new ao("drop",{layout:i})),this.dispatchEvent(new w("change"))}cancel(){!this.pending&&!this.active||(this.reset(),this.dispatchEvent(new w("change")))}dispose(){this.reset()}get status(){return this.active?"active":this.pending?"pending":"idle"}reset(){this.pending=null,this.active=null}emitDrag(){if(!this.active)return;const e=Nt(this.active,this.active.baseLayout);this.dispatchEvent(new oo("drag",{nodeId:this.active.nodeId,source:{index:this.active.sourceIndex,parentId:this.active.parentStackId},grabOffset:P({x:this.active.grabOffsetX,y:this.active.grabOffsetY}),pointer:P({x:this.active.pointerX,y:this.active.pointerY}),size:P({x:this.active.width,y:this.active.height}),projectedLayout:e}))}getHitTargetForPointer(e,i,s,n){return this.active?this.isPointerInsideDragBounds(e,i,s.viewport)?this.active.parentStackId?this.getStackChildHitTarget(e,i,s,n):this.getTopLevelCardHitTarget(e,i,s,n):{type:"reorder",index:this.active.sourceIndex}:{type:"reorder",index:0}}getStackChildHitTarget(e,i,s,n){var h;if(!((h=this.active)!=null&&h.parentStackId))return{type:"stack-child-noop"};const o=this.getSourceStackInteractionRect(s.geometry);if(o&&te(e,i,o)){const d=o.top+o.height/2;return{type:"stack-child-reorder",position:i<d?"above":"below"}}const a=this.getSourceRemainingSiblingRect(s.geometry);if(a&&te(e,i,a)){const d=a.top+a.height/2;return{type:"stack-child-reorder",position:i<d?"above":"below"}}return{type:"stack-child-extract",toIndex:this.getTopLevelReorderIndexForPointer(e,i,s,n)}}getSourceRemainingSiblingRect(e){var n,o;if(!((n=this.active)!=null&&n.parentStackId))return;const i=ri(this.active.baseLayout,this.active.parentStackId);if(!i)return;const s=i.children.find(a=>{var c;return a.type==="card"&&a.id!==((c=this.active)==null?void 0:c.nodeId)});if(s)return(o=e.find(a=>a.id===s.id))==null?void 0:o.rect}getSourceStackInteractionRect(e){var o;if(!((o=this.active)!=null&&o.parentStackId))return;const i=e.find(a=>{var c;return a.id===((c=this.active)==null?void 0:c.parentStackId)});if(i)return this.active.sourceStackRect=i.rect,i.rect;const s=ri(this.active.baseLayout,this.active.parentStackId);if(!s)return this.active.sourceStackRect;const n=s.children.find(a=>{var c;return a.type==="card"&&a.id!==((c=this.active)==null?void 0:c.nodeId)});if(n){const a=e.find(c=>c.id===n.id);if(a)return a.rect}return this.active.sourceStackRect}getTopLevelCardHitTarget(e,i,s,n){var y,k,L;const o=this.getTopLevelZoneNodes(s.geometry,n);if(o.length===0)return{type:"reorder",index:((y=this.active)==null?void 0:y.sourceIndex)??0};const c=(s.effectiveVelocity??0)<=co;for(const O of o){const V=O.rect;if(!te(e,i,V))continue;const fe=this.resolveTopLevelTargetForCard(e,i,O,O.logicalIndex,c);if(fe)return fe;if(!c&&((k=this.active)!=null&&k.hitTarget))return this.active.hitTarget}const h=this.getNearestTargetableZone(e,o);if(!h)return{type:"reorder",index:((L=this.active)==null?void 0:L.sourceIndex)??0};const d=Math.max(h.rect.left,Math.min(h.rect.left+h.rect.width,e)),p=this.resolveTopLevelTargetForCard(d,i,h,h.logicalIndex,c);if(p)return p;const v=h.rect.left+h.rect.width/2;return{type:"reorder",index:e<v?h.logicalIndex:h.logicalIndex+1}}getTopLevelReorderIndexForPointer(e,i,s,n){var h,d;const o=this.getTopLevelZoneNodes(s.geometry,n);if(o.length===0)return((h=this.active)==null?void 0:h.sourceIndex)??0;for(const p of o){if(!te(e,i,p.rect))continue;const v=Rt(p.rect,Wt["reorder-before"]);if(te(e,i,v))return p.logicalIndex;const y=Rt(p.rect,Wt["reorder-after"]);if(te(e,i,y))return p.logicalIndex+1}const a=this.getNearestTargetableZone(e,o);if(!a)return((d=this.active)==null?void 0:d.sourceIndex)??0;const c=a.rect.left+a.rect.width/2;return e<c?a.logicalIndex:a.logicalIndex+1}getTopLevelZoneNodes(e,i){const s=new Map(i.map(a=>[a.id,a])),n=[];let o=0;for(const a of e){const c=s.get(a.id);c&&c.type!=="drop-target"&&(c.type==="card"||c.type==="stack")&&(n.push({id:c.id,rect:a.rect,logicalIndex:o}),o+=1)}return n}resolveTopLevelTargetForCard(e,i,s,n,o){const a=s.rect;for(const c of so){if(!o&&(c==="stack-above"||c==="stack-below"))continue;const h=Wt[c],d=Rt(a,h);if(te(e,i,d))return c==="stack-above"?{type:"stack",targetCardId:s.id,position:"above"}:c==="stack-below"?{type:"stack",targetCardId:s.id,position:"below"}:c==="reorder-before"?{type:"reorder",index:n}:{type:"reorder",index:n+1}}return null}getNearestTargetableZone(e,i){let s=null,n=Number.POSITIVE_INFINITY;for(const o of i){const a=o.rect.left,c=o.rect.left+o.rect.width,h=e<a?a-e:e>c?e-c:0;h<n&&(n=h,s=o)}return s}isPointerInsideDragBounds(e,i,s){return e>=s.left&&e<=s.left+s.width&&i>=s.top&&i<=s.top+s.height}}const ii=120,Co=80,si=.5;class Io{constructor(){l(this,"awaitingFreshWheelGesture",!1);l(this,"lastWheelEventAt",Number.NEGATIVE_INFINITY);l(this,"lastWheelDeltaX",0);l(this,"activeGestureType","none");l(this,"lastWheelGestureAt",Number.NEGATIVE_INFINITY)}markKeyboardNavigation(r){this.awaitingFreshWheelGesture=!0,this.lastWheelEventAt=r,this.activeGestureType="none"}reset(){this.awaitingFreshWheelGesture=!1,this.lastWheelEventAt=Number.NEGATIVE_INFINITY,this.lastWheelDeltaX=0,this.activeGestureType="none",this.lastWheelGestureAt=Number.NEGATIVE_INFINITY}decide(r){const{now:e,shiftKey:i,deltaX:s,deltaY:n,overArtifactContent:o,artifactCanScrollUp:a,artifactCanScrollDown:c}=r;e-this.lastWheelGestureAt>=ii&&(this.activeGestureType="none");const d=i&&n!==0,p=d?n:s,v=n>0?c:n<0?a:!1;if(this.activeGestureType==="vertical-artifact"&&o&&v)return this.lastWheelGestureAt=e,{type:"scroll-native"};if(this.activeGestureType==="horizontal-filmstrip"&&Math.abs(p)>=si)return this.lastWheelGestureAt=e,this.lastWheelEventAt=e,this.lastWheelDeltaX=p,{type:"scroll-horizontal",horizontalDelta:p};if(Math.abs(p)<si)return o&&v&&(this.activeGestureType="vertical-artifact"),this.lastWheelGestureAt=e,{type:"scroll-native"};if(!d&&o&&v&&Math.abs(n)>=Math.abs(p))return this.activeGestureType="vertical-artifact",this.lastWheelGestureAt=e,{type:"scroll-native"};const y=e-this.lastWheelEventAt,k=Math.sign(this.lastWheelDeltaX),L=Math.sign(p),O=k!==0&&L!==0&&k!==L,V=k!==0&&Math.abs(p)>=Math.abs(this.lastWheelDeltaX)+Co;return this.lastWheelEventAt=e,this.lastWheelDeltaX=p,this.lastWheelGestureAt=e,this.awaitingFreshWheelGesture&&y<ii&&!O&&!V?{type:"ignore"}:(this.awaitingFreshWheelGesture=!1,this.activeGestureType="horizontal-filmstrip",{type:"scroll-horizontal",horizontalDelta:p})}}const Po=2,ni=1e3,lt=1e-4;function oi(t,r,e){if(t===0)return 0;const i=r.toPixels(D({y:R})).y??0;return(e-i)/Po}class Mo extends Event{constructor(e){super("scroll",{bubbles:!0,composed:!0});l(this,"scrollPosition");this.scrollPosition=e}}class ss extends Event{constructor(e){super("layout-change",{bubbles:!0,composed:!0});l(this,"layout");this.layout=e}}class Lo extends HTMLElement{constructor(){super();l(this,"_layout",[]);l(this,"_scrollPosition",0);l(this,"layoutGrid",null);l(this,"layoutScroll",new io(D({x:0})));l(this,"scrollModelKey","");l(this,"resizeObserver",null);l(this,"renderPending",!1);l(this,"animateNextRender",!0);l(this,"wheelGesture",new Io);l(this,"dragController",new Ao);l(this,"dragState",null);l(this,"activeDragPointerId",null);l(this,"dragListenersAttached",!1);l(this,"dragFrame",0);l(this,"lastDragFrameTime",0);l(this,"lastPointerX",0);l(this,"lastPointerY",0);l(this,"pointerVelocityPxPerSec",0);l(this,"scrollVelocityPxPerSec",0);l(this,"motionSampleTime",0);l(this,"motionSampleX",0);l(this,"motionSampleY",0);l(this,"dragTrackOffsetXPx",0);l(this,"previousProjectedLayoutForOffset",null);l(this,"renderContent",()=>m``);l(this,"onDragControllerChange",()=>{this.dragController.status==="idle"&&(this.dragState=null,this.dragTrackOffsetXPx=0,this.previousProjectedLayoutForOffset=null),this.scheduleRender()});l(this,"onDragControllerDrag",e=>{const i=ti(e.projectedLayout),s=this.shouldApplyTrackOffset(e.projectedLayout,e.source.parentId),n=e.source.parentId?this.getStackChildAnchorCardId(e.source.parentId,e.nodeId):null;this.dragTrackOffsetXPx=s?this.computeDragTrackOffset(this.previousProjectedLayoutForOffset,i,e.nodeId,e.source.parentId,n,this.dragTrackOffsetXPx):0,this.previousProjectedLayoutForOffset=i,this.dragState={nodeId:e.nodeId,source:e.source,grabOffset:e.grabOffset,pointer:e.pointer,size:e.size,projectedLayout:e.projectedLayout},this.scheduleRender()});l(this,"onDragControllerDrop",e=>{this.dragState=null,this.dragTrackOffsetXPx=0,this.previousProjectedLayoutForOffset=null,this.commitLayout(e.layout)});l(this,"onLayoutScrollInternal",e=>{const s=e.scroll.x??0;Math.abs(s-this._scrollPosition)<lt||(this._scrollPosition=s,this.emitScrollPositionChanged(s),this.scheduleRender())});l(this,"handleKeyDown",e=>{if(e.key==="Escape"&&this.dragController.status!=="idle"){e.preventDefault(),this.stopDragFrameLoop(),this.releaseActiveDragPointerCapture(),this.dragController.cancel(),this.detachDragListeners();return}this.dragController.status==="idle"&&(e.key==="ArrowRight"?(e.preventDefault(),this.wheelGesture.markKeyboardNavigation(Date.now()),this.shiftWindow(1)):e.key==="ArrowLeft"&&(e.preventDefault(),this.wheelGesture.markKeyboardNavigation(Date.now()),this.shiftWindow(-1)))});l(this,"handleWheel",e=>{if(this._layout.length===0)return;const i=this.wheelGesture.decide({now:Date.now(),shiftKey:e.shiftKey,deltaX:e.deltaX,deltaY:e.deltaY,overArtifactContent:!1,artifactCanScrollDown:!1,artifactCanScrollUp:!1});if(i.type!=="scroll-horizontal")return;e.preventDefault(),this.syncScrollModel();const s=this.layoutGrid;if(!s)return;this.animateNextRender=!1;const n=s.toUnits(P({x:i.horizontalDelta}));this.layoutScroll.wheel(D({x:n.x??0}))});l(this,"handlePointerDown",e=>{if(e.button!==0||this.dragController.status!=="idle")return;const i=e.target;if(!(i instanceof Element))return;const s=i.closest(".card-slot[data-layout-draggable='true']");if(!s)return;const n=s.getAttribute("data-layout-node-id");if(!n)return;const o=$o(this._layout,n);if(!o)return;const a=s.getBoundingClientRect();this.lastPointerX=e.clientX,this.lastPointerY=e.clientY,this.resetMotionTracking(e.clientX,e.clientY),this.focus(),this.dragController.start({nodeId:n,source:{index:o.topLevelIndex,parentId:o.sourceStackId},pointer:P({x:e.clientX,y:e.clientY}),grabOffset:P({x:e.clientX-a.left,y:e.clientY-a.top}),size:P({x:a.width,y:a.height}),layout:this._layout}),this.attachDragListeners(),this.activeDragPointerId=e.pointerId;try{this.setPointerCapture(e.pointerId)}catch{}e.preventDefault()});l(this,"handleWindowPointerMove",e=>{this.lastPointerX=e.clientX,this.lastPointerY=e.clientY,this.updatePointerVelocity(e.clientX,e.clientY),this.syncDragTargetForLatestPointer(),this.ensureDragFrameLoop()});l(this,"handleWindowPointerUp",e=>{this.stopDragFrameLoop(),this.releasePointerCaptureForEvent(e.pointerId),this.dragController.drop(),this.clearMotionTracking(),this.detachDragListeners()});l(this,"handleWindowPointerCancel",e=>{this.stopDragFrameLoop(),this.releasePointerCaptureForEvent(e.pointerId),this.dragController.cancel(),this.clearMotionTracking(),this.detachDragListeners()});l(this,"handleWindowBlur",()=>{this.releaseActiveDragPointerCapture(),this.stopDragFrameLoop(),this.dragController.cancel(),this.clearMotionTracking(),this.detachDragListeners()});l(this,"runDragFrame",e=>{if(this.dragController.status==="idle"){this.dragFrame=0;return}const i=Math.max(0,e-this.lastDragFrameTime)/ni;this.lastDragFrameTime=e,this.samplePointerVelocityAt(e,this.lastPointerX,this.lastPointerY);const s=this.getBoundingClientRect(),n=this.clampPointerToViewport(this.lastPointerX,this.lastPointerY,s),o=this.getDragEdgeScrollDeltaPixels(n.x,s,i);this.scrollVelocityPxPerSec=i>lt?Math.abs(o)/i:0,Math.abs(o)>lt&&(this.animateNextRender=!1,this.layoutScroll.wheelPixels(P({x:o}))),this.dragController.status==="active"&&this.syncDragTarget(n.x,n.y,s),this.dragFrame=requestAnimationFrame(this.runDragFrame)});this.dragController.addEventListener("change",this.onDragControllerChange),this.dragController.addEventListener("drag",this.onDragControllerDrag),this.dragController.addEventListener("drop",this.onDragControllerDrop),this.layoutScroll.addEventListener("layout-scroll",this.onLayoutScrollInternal)}set layout(e){this._layout=[...e],this.stopDragFrameLoop(),this.dragController.cancel(),this.scrollModelKey="",this.syncScrollModel(),this.layoutScroll.scroll=D({x:this._scrollPosition}),this.scheduleRender()}get layout(){return this._layout}commitLayout(e){this.layout=e,this.emitLayoutChanged()}set scrollPosition(e){Math.abs(e-this._scrollPosition)<lt||(this.animateNextRender=!1,this.syncScrollModel(),this.layoutScroll.scroll=D({x:e}))}get scrollPosition(){return this._scrollPosition}connectedCallback(){this.hasAttribute("tabindex")||(this.tabIndex=0),this.focus(),this.addEventListener("keydown",this.handleKeyDown),this.addEventListener("wheel",this.handleWheel,{passive:!1}),this.addEventListener("pointerdown",this.handlePointerDown),typeof ResizeObserver<"u"&&(this.resizeObserver=new ResizeObserver(()=>this.render()),this.resizeObserver.observe(this)),this.render()}disconnectedCallback(){var e;this.removeEventListener("keydown",this.handleKeyDown),this.removeEventListener("wheel",this.handleWheel),this.removeEventListener("pointerdown",this.handlePointerDown),(e=this.resizeObserver)==null||e.disconnect(),this.resizeObserver=null,this.wheelGesture.reset(),this.detachDragListeners(),this.dragController.removeEventListener("change",this.onDragControllerChange),this.dragController.removeEventListener("drag",this.onDragControllerDrag),this.dragController.removeEventListener("drop",this.onDragControllerDrop),this.layoutScroll.removeEventListener("layout-scroll",this.onLayoutScrollInternal),this.dragController.dispose(),this.stopDragFrameLoop()}scheduleRender(){this.renderPending||(this.renderPending=!0,queueMicrotask(()=>{this.renderPending=!1,this.render()}))}createGrid(e,i){return new jn({basis:P({x:se,y:se}),min:P({x:Rr,y:Rr}),viewport:P({x:e,y:i}),gap:P({x,y:x})})}syncScrollModel(){const e=this.clientWidth>0?this.clientWidth:Z,i=this.clientHeight>0?this.clientHeight:me,n=ye(this._layout).nodes.map(a=>a.width),o=`${e}x${i}:${n.join(",")}`;o===this.scrollModelKey&&this.layoutGrid||(this.scrollModelKey=o,this.layoutGrid=this.createGrid(e,i),this.layoutScroll.rebuild({grid:this.layoutGrid,nodeWidths:n.map(a=>D({x:a}))}))}emitScrollPositionChanged(e){this.dispatchEvent(new Mo(e))}emitLayoutChanged(){this.dispatchEvent(new ss([...this._layout]))}shiftWindow(e){this.syncScrollModel(),this.animateNextRender=!0,this.layoutScroll.step(e)}releaseActiveDragPointerCapture(){this.activeDragPointerId!==null&&this.releasePointerCaptureForEvent(this.activeDragPointerId)}releasePointerCaptureForEvent(e){try{this.hasPointerCapture(e)&&this.releasePointerCapture(e)}catch{}}attachDragListeners(){this.dragListenersAttached||(window.addEventListener("pointermove",this.handleWindowPointerMove),window.addEventListener("pointerup",this.handleWindowPointerUp),window.addEventListener("pointercancel",this.handleWindowPointerCancel),this.addEventListener("pointermove",this.handleWindowPointerMove),this.addEventListener("pointerup",this.handleWindowPointerUp),this.addEventListener("pointercancel",this.handleWindowPointerCancel),window.addEventListener("blur",this.handleWindowBlur),this.dragListenersAttached=!0)}detachDragListeners(){this.dragListenersAttached&&(window.removeEventListener("pointermove",this.handleWindowPointerMove),window.removeEventListener("pointerup",this.handleWindowPointerUp),window.removeEventListener("pointercancel",this.handleWindowPointerCancel),this.removeEventListener("pointermove",this.handleWindowPointerMove),this.removeEventListener("pointerup",this.handleWindowPointerUp),this.removeEventListener("pointercancel",this.handleWindowPointerCancel),window.removeEventListener("blur",this.handleWindowBlur),this.dragListenersAttached=!1,this.activeDragPointerId=null)}getDisplayModel(){if(this.dragController.status!=="active"||!this.dragState)return{layout:this._layout,activePlaceholderId:null,placeholdersById:new Map};const e=new Map;return e.set(this.dragState.nodeId,{id:this.dragState.nodeId,sourceCardId:this.dragState.nodeId}),{layout:ti(this.dragState.projectedLayout),activePlaceholderId:this.dragState.nodeId,placeholdersById:e}}render(){const e=this.clientWidth>0?this.clientWidth:Z,i=this.clientHeight>0?this.clientHeight:me,s=this.createGrid(e,i);this.layoutGrid=s;const n=this.getDisplayModel(),o=n.layout,a=this.dragController.status==="active",c=ye(o),h=c.nodes.map(C=>C.width),d=To(o),p=`${e}x${i}:${h.join(",")}`;!a&&p!==this.scrollModelKey&&(this.scrollModelKey=p,this.layoutScroll.rebuild({grid:s,nodeWidths:h.map(C=>D({x:C}))}),this._scrollPosition=this.layoutScroll.scroll.x??this._scrollPosition);const v=Do(o),y=s.unit.x??se,k=s.unit.y??se,L=a?this.dragTrackOffsetXPx:0,O=(this.layoutScroll.translate.x??0)+L,V=oi(c.nodes.length,s,i),fe=this.animateNextRender&&!a,rt=[`transform: translate(${O}px, ${V}px);`,`transition-duration: ${fe?Ls:0}ms;`,`pointer-events: ${a?"none":"auto"};`].join(" ");this.animateNextRender=!0,this.style.setProperty("--layout-unit-x",`${y}px`),this.style.setProperty("--layout-unit-y",`${k}px`),this.style.setProperty("--layout-gap",`${x}px`);const A=this.dragState,X={width:(A==null?void 0:A.size.x)??0,height:(A==null?void 0:A.size.y)??0};M(m`
110
112
  <div class="track" style=${rt}>
111
- ${c.nodes.map((C,xe)=>m`
113
+ ${c.nodes.map((C,Ee)=>m`
112
114
  <div
113
115
  class="node"
114
- layout-node=${String(xe)}
116
+ layout-node=${String(Ee)}
115
117
  data-layout-node-id=${C.id}
116
118
  data-layout-placeholder=${String(n.activePlaceholderId===C.id)}
117
119
  layout-node-cols=${String(C.width)}
118
120
  style=${`grid-template-columns: repeat(${C.width}, var(--layout-unit-x)); width: ${s.toPixels(D({x:C.width})).x}px;`}
119
121
  >
120
- ${C.cards.map(I=>{const xt=n.placeholdersById.get(I.id);if(A&&xt)return m`
122
+ ${C.cards.map(I=>{const Et=n.placeholdersById.get(I.id);if(A&&Et)return m`
121
123
  <div
122
124
  class="card-slot card-placeholder"
123
125
  data-layout-placeholder-for=${A.nodeId}
@@ -141,16 +143,16 @@ var ps=Object.defineProperty;var Lr=t=>{throw TypeError(t)};var fs=(t,r,e)=>r in
141
143
  </div>
142
144
  `)}
143
145
  </div>
144
- ${A?(()=>{const C=this.getPlaceholderPixelSize(c,n.activePlaceholderId,s,X),xe=A.pointer.x??0,I=A.pointer.y??0,xt=A.grabOffset.x??0,it=A.grabOffset.y??0;return m`
146
+ ${A?(()=>{const C=this.getPlaceholderPixelSize(c,n.activePlaceholderId,s,X),Ee=A.pointer.x??0,I=A.pointer.y??0,Et=A.grabOffset.x??0,it=A.grabOffset.y??0;return m`
145
147
  <div
146
148
  class="drag-preview"
147
149
  data-layout-preview-card-id=${A.nodeId}
148
- style=${[`width: ${C.width}px;`,`height: ${C.height}px;`,`left: ${xe-xt}px;`,`top: ${I-it}px;`].join(" ")}
150
+ style=${[`width: ${C.width}px;`,`height: ${C.height}px;`,`left: ${Ee-Et}px;`,`top: ${I-it}px;`].join(" ")}
149
151
  >
150
152
  ${this.renderDraggedPreview(A.nodeId)}
151
153
  </div>
152
154
  `})():null}
153
- `,this)}ensureDragFrameLoop(){this.dragFrame!==0||this.dragController.status==="idle"||(this.lastDragFrameTime=performance.now(),this.dragFrame=requestAnimationFrame(this.runDragFrame))}stopDragFrameLoop(){this.dragFrame!==0&&(cancelAnimationFrame(this.dragFrame),this.dragFrame=0,this.scrollVelocityPxPerSec=0)}syncDragTargetForLatestPointer(){if(this.dragController.status==="idle")return;const e=this.getBoundingClientRect();if(this.dragController.status==="active"){const s=this.clampPointerToViewport(this.lastPointerX,this.lastPointerY,e);this.syncDragTarget(s.x,s.y,e);return}if(this.syncDragTarget(this.lastPointerX,this.lastPointerY,e),this.dragController.status==="pending")return;const i=this.clampPointerToViewport(this.lastPointerX,this.lastPointerY,e);(i.x!==this.lastPointerX||i.y!==this.lastPointerY)&&this.syncDragTarget(i.x,i.y,e)}syncDragTarget(e,i,s=this.getBoundingClientRect()){if(this.dragController.status==="idle")return;const n=this.getDisplayModel(),o=new Set(n.placeholdersById.keys()),a=this.dragController.status==="active"?this.dragTrackOffsetXPx:0,c=this.measureLayoutGeometry(n.layout,o,a);this.dragController.update({pointer:P({x:e,y:i}),viewport:{left:s.left,top:s.top,width:s.width,height:s.height},geometry:c,effectiveVelocity:Math.max(this.pointerVelocityPxPerSec,this.scrollVelocityPxPerSec)})}resetMotionTracking(e,i){this.pointerVelocityPxPerSec=0,this.scrollVelocityPxPerSec=0,this.motionSampleTime=performance.now(),this.motionSampleX=e,this.motionSampleY=i}clearMotionTracking(){this.pointerVelocityPxPerSec=0,this.scrollVelocityPxPerSec=0,this.motionSampleTime=0}updatePointerVelocity(e,i){this.samplePointerVelocityAt(performance.now(),e,i)}samplePointerVelocityAt(e,i,s){if(this.motionSampleTime===0){this.motionSampleTime=e,this.motionSampleX=i,this.motionSampleY=s,this.pointerVelocityPxPerSec=0;return}const n=e-this.motionSampleTime;if(n<100)return;const o=i-this.motionSampleX;this.pointerVelocityPxPerSec=Math.abs(o)/n*si,this.motionSampleTime=e,this.motionSampleX=i,this.motionSampleY=s}clampPointerToViewport(e,i,s){return{x:Math.max(s.left,Math.min(s.left+s.width,e)),y:Math.max(s.top,Math.min(s.top+s.height,i))}}isPointerOutsideViewport(e,i,s){return e<s.left||e>s.left+s.width||i<s.top||i>s.top+s.height}getDragEdgeScrollDeltaPixels(e,i,s){var h;const n=i.left+st,o=i.left+i.width-st,a=((h=this.layoutGrid)==null?void 0:h.unit.x)??se,c=$s*a;if(e<n){const d=Math.max(0,Math.min(1,(n-e)/st));return-(c*d**Rr)*s}if(e>o){const d=Math.max(0,Math.min(1,(e-o)/st));return c*d**Rr*s}return 0}measureLayoutGeometry(e,i,s=0){const n=this.layoutGrid;if(!n)return[];const o=ye(e),a=new Map(o.nodes.map(k=>[k.id,k.width])),c=n.toPixels(D({y:R})).y??me,h=this.clientHeight>0?this.clientHeight:me,d=(this.layoutScroll.translate.x??0)+s,p=ni(o.nodes.length,n,h),v=[];let y=d;for(const k of e){const L=a.get(k.id)??z,O=n.toPixels(D({x:L})).x??Z,V={left:y,top:p,width:O,height:c};v.push({id:k.id,rect:V}),y+=O+x}return v}getPlaceholderPixelSize(e,i,s,n){if(!i)return n;for(const o of e.nodes)for(const a of o.cards)if(a.id===i)return{width:s.toPixels(D({x:a.width})).x??n.width,height:s.toPixels(D({y:a.height})).y??n.height};return n}renderDraggedPreview(e){const i=Wo(this._layout,e);return i?this.renderContent(i):m``}shouldApplyTrackOffset(e,i){if(i)return!0;for(const s of e){if(s.type!=="stack")continue;if(s.children.some(o=>o.type==="drop-target")&&i!==s.id)return!0}return!1}computeDragTrackOffset(e,i,s,n,o,a){if(!e)return a;const c=n?o??this.getStableAnchorCardId(e,i,s):this.getStableAnchorNodeId(e,i,s);if(!c)return a;const h=n?ai(e,c,this.layoutGrid):ci(e,c,this.layoutGrid),d=n?ai(i,c,this.layoutGrid):ci(i,c,this.layoutGrid);return h===null||d===null?a:a+(h-d)}getStableAnchorCardId(e,i,s){const n=oi(e),o=new Set(oi(i));for(const a of n)if(a!==s&&o.has(a))return a;return null}getStableAnchorNodeId(e,i,s){const n=new Set(i.map(o=>o.id));for(const o of e)if(o.id!==s&&n.has(o.id))return o.id;return null}getStackChildAnchorCardId(e,i){const s=this._layout.find(o=>o.type==="stack"&&o.id===e);if(!s||s.type!=="stack")return null;const n=s.children.find(o=>o.type==="card"&&o.id!==i);return(n==null?void 0:n.id)??null}}function Do(t){const r=new Map;for(const e of t){if(e.type==="card"){r.set(e.id,e);continue}for(const i of e.children)if(i.type==="card")r.set(i.id,i);else for(const s of i.children)r.set(s.id,s)}return r}function $o(t,r){const e=t.findIndex(i=>i.type==="card"&&i.id===r);if(e!==-1)return{topLevelIndex:e};for(let i=0;i<t.length;i+=1){const s=t[i];if(!(!s||s.type!=="stack")&&s.children.some(n=>n.type==="card"&&n.id===r))return{topLevelIndex:i,sourceStackId:s.id}}return null}function To(t){const r=new Set;for(const e of t)if(e.type==="stack")for(const i of e.children)i.type==="card"&&r.add(i.id);return r}function Wo(t,r){return t.find(i=>i.type==="card"&&i.id===r)??null}function oi(t){const r=[];for(const e of t){if(e.type==="card"){r.push(e.id);continue}if(e.type==="stack"){const i=e.children.find(s=>s.type==="card");i&&r.push(i.id)}}return r}function ai(t,r,e){if(!e)return null;const i=ye(t),s=new Map(i.nodes.map(o=>[o.id,o.width]));let n=0;for(const o of t){if(o.type==="card"&&o.id===r||o.type==="stack"&&o.children.some(h=>h.type==="card"&&h.id===r))return n;const a=s.get(o.id)??z,c=e.toPixels(D({x:a})).x??Z;n+=c+x}return null}function ci(t,r,e){if(!e)return null;const i=ye(t),s=new Map(i.nodes.map(o=>[o.id,o.width]));let n=0;for(const o of t){if(o.id===r)return n;const a=s.get(o.id)??z,c=e.toPixels(D({x:a})).x??Z;n+=c+x}return null}customElements.get("layout-view")||customElements.define("layout-view",Lo);class Ro extends HTMLElement{constructor(){super(...arguments);l(this,"workspaceService",W.resolve("WorkspaceService"));l(this,"handleWorkspaceChange",()=>{this.render()});l(this,"handleCloseArtifact",e=>{e instanceof Zi&&this.workspaceService.removeArtifact(e.id)});l(this,"handleScrollPositionChanged",e=>{const i=e;typeof i.scrollPosition=="number"&&Number.isFinite(i.scrollPosition)&&this.workspaceService.setScrollPosition(i.scrollPosition)});l(this,"handleLayoutChanged",e=>{e instanceof ss&&this.workspaceService.setLayout(e.layout)})}connectedCallback(){this.render(),this.workspaceService.addEventListener("change",this.handleWorkspaceChange)}disconnectedCallback(){this.workspaceService.removeEventListener("change",this.handleWorkspaceChange)}buildArtifactMap(){return new Map(this.workspaceService.activeArtifacts.map(e=>[e.id,e]))}render(){const e=this.workspaceService.activeWorkspace,i=(e==null?void 0:e.layout)??[],s=this.buildArtifactMap();if(i.length===0){M(m`<p data-testid="empty-workspace">No artifacts yet.</p>`,this);return}M(m`
155
+ `,this)}ensureDragFrameLoop(){this.dragFrame!==0||this.dragController.status==="idle"||(this.lastDragFrameTime=performance.now(),this.dragFrame=requestAnimationFrame(this.runDragFrame))}stopDragFrameLoop(){this.dragFrame!==0&&(cancelAnimationFrame(this.dragFrame),this.dragFrame=0,this.scrollVelocityPxPerSec=0)}syncDragTargetForLatestPointer(){if(this.dragController.status==="idle")return;const e=this.getBoundingClientRect();if(this.dragController.status==="active"){const s=this.clampPointerToViewport(this.lastPointerX,this.lastPointerY,e);this.syncDragTarget(s.x,s.y,e);return}if(this.syncDragTarget(this.lastPointerX,this.lastPointerY,e),this.dragController.status==="pending")return;const i=this.clampPointerToViewport(this.lastPointerX,this.lastPointerY,e);(i.x!==this.lastPointerX||i.y!==this.lastPointerY)&&this.syncDragTarget(i.x,i.y,e)}syncDragTarget(e,i,s=this.getBoundingClientRect()){if(this.dragController.status==="idle")return;const n=this.getDisplayModel(),o=new Set(n.placeholdersById.keys()),a=this.dragController.status==="active"?this.dragTrackOffsetXPx:0,c=this.measureLayoutGeometry(n.layout,o,a);this.dragController.update({pointer:P({x:e,y:i}),viewport:{left:s.left,top:s.top,width:s.width,height:s.height},geometry:c,effectiveVelocity:Math.max(this.pointerVelocityPxPerSec,this.scrollVelocityPxPerSec)})}resetMotionTracking(e,i){this.pointerVelocityPxPerSec=0,this.scrollVelocityPxPerSec=0,this.motionSampleTime=performance.now(),this.motionSampleX=e,this.motionSampleY=i}clearMotionTracking(){this.pointerVelocityPxPerSec=0,this.scrollVelocityPxPerSec=0,this.motionSampleTime=0}updatePointerVelocity(e,i){this.samplePointerVelocityAt(performance.now(),e,i)}samplePointerVelocityAt(e,i,s){if(this.motionSampleTime===0){this.motionSampleTime=e,this.motionSampleX=i,this.motionSampleY=s,this.pointerVelocityPxPerSec=0;return}const n=e-this.motionSampleTime;if(n<100)return;const o=i-this.motionSampleX;this.pointerVelocityPxPerSec=Math.abs(o)/n*ni,this.motionSampleTime=e,this.motionSampleX=i,this.motionSampleY=s}clampPointerToViewport(e,i,s){return{x:Math.max(s.left,Math.min(s.left+s.width,e)),y:Math.max(s.top,Math.min(s.top+s.height,i))}}isPointerOutsideViewport(e,i,s){return e<s.left||e>s.left+s.width||i<s.top||i>s.top+s.height}getDragEdgeScrollDeltaPixels(e,i,s){var h;const n=i.left+st,o=i.left+i.width-st,a=((h=this.layoutGrid)==null?void 0:h.unit.x)??se,c=$s*a;if(e<n){const d=Math.max(0,Math.min(1,(n-e)/st));return-(c*d**Nr)*s}if(e>o){const d=Math.max(0,Math.min(1,(e-o)/st));return c*d**Nr*s}return 0}measureLayoutGeometry(e,i,s=0){const n=this.layoutGrid;if(!n)return[];const o=ye(e),a=new Map(o.nodes.map(k=>[k.id,k.width])),c=n.toPixels(D({y:R})).y??me,h=this.clientHeight>0?this.clientHeight:me,d=(this.layoutScroll.translate.x??0)+s,p=oi(o.nodes.length,n,h),v=[];let y=d;for(const k of e){const L=a.get(k.id)??z,O=n.toPixels(D({x:L})).x??Z,V={left:y,top:p,width:O,height:c};v.push({id:k.id,rect:V}),y+=O+x}return v}getPlaceholderPixelSize(e,i,s,n){if(!i)return n;for(const o of e.nodes)for(const a of o.cards)if(a.id===i)return{width:s.toPixels(D({x:a.width})).x??n.width,height:s.toPixels(D({y:a.height})).y??n.height};return n}renderDraggedPreview(e){const i=br(this._layout,e);return i?this.renderContent(i):m``}shouldApplyTrackOffset(e,i){if(i)return!0;for(const s of e){if(s.type!=="stack")continue;if(s.children.some(o=>o.type==="drop-target")&&i!==s.id)return!0}return!1}computeDragTrackOffset(e,i,s,n,o,a){if(!e)return a;const c=n?o??this.getStableAnchorCardId(e,i,s):this.getStableAnchorNodeId(e,i,s);if(!c)return a;const h=n?ci(e,c,this.layoutGrid):li(e,c,this.layoutGrid),d=n?ci(i,c,this.layoutGrid):li(i,c,this.layoutGrid);return h===null||d===null?a:a+(h-d)}getStableAnchorCardId(e,i,s){const n=ai(e),o=new Set(ai(i));for(const a of n)if(a!==s&&o.has(a))return a;return null}getStableAnchorNodeId(e,i,s){const n=new Set(i.map(o=>o.id));for(const o of e)if(o.id!==s&&n.has(o.id))return o.id;return null}getStackChildAnchorCardId(e,i){const s=this._layout.find(o=>o.type==="stack"&&o.id===e);if(!s||s.type!=="stack")return null;const n=s.children.find(o=>o.type==="card"&&o.id!==i);return(n==null?void 0:n.id)??null}}function Do(t){const r=new Map;for(const e of t){if(e.type==="card"){r.set(e.id,e);continue}for(const i of e.children)if(i.type==="card")r.set(i.id,i);else for(const s of i.children)r.set(s.id,s)}return r}function $o(t,r){const e=t.findIndex(i=>i.type==="card"&&i.id===r);if(e!==-1)return{topLevelIndex:e};for(let i=0;i<t.length;i+=1){const s=t[i];if(!(!s||s.type!=="stack")&&s.children.some(n=>n.type==="card"&&n.id===r))return{topLevelIndex:i,sourceStackId:s.id}}return null}function To(t){const r=new Set;for(const e of t)if(e.type==="stack")for(const i of e.children)i.type==="card"&&r.add(i.id);return r}function ai(t){const r=[];for(const e of t){if(e.type==="card"){r.push(e.id);continue}if(e.type==="stack"){const i=e.children.find(s=>s.type==="card");i&&r.push(i.id)}}return r}function ci(t,r,e){if(!e)return null;const i=ye(t),s=new Map(i.nodes.map(o=>[o.id,o.width]));let n=0;for(const o of t){if(o.type==="card"&&o.id===r||o.type==="stack"&&o.children.some(h=>h.type==="card"&&h.id===r))return n;const a=s.get(o.id)??z,c=e.toPixels(D({x:a})).x??Z;n+=c+x}return null}function li(t,r,e){if(!e)return null;const i=ye(t),s=new Map(i.nodes.map(o=>[o.id,o.width]));let n=0;for(const o of t){if(o.id===r)return n;const a=s.get(o.id)??z,c=e.toPixels(D({x:a})).x??Z;n+=c+x}return null}customElements.get("layout-view")||customElements.define("layout-view",Lo);class Wo extends HTMLElement{constructor(){super(...arguments);l(this,"workspaceService",W.resolve("WorkspaceService"));l(this,"handleWorkspaceChange",()=>{this.render()});l(this,"handleCloseArtifact",e=>{e instanceof Ji&&this.workspaceService.removeArtifact(e.artifactID)});l(this,"handleScrollPositionChanged",e=>{const i=e;typeof i.scrollPosition=="number"&&Number.isFinite(i.scrollPosition)&&this.workspaceService.setScrollPosition(i.scrollPosition)});l(this,"handleLayoutChanged",e=>{e instanceof ss&&this.workspaceService.setLayout(e.layout)})}connectedCallback(){this.render(),this.workspaceService.addEventListener("change",this.handleWorkspaceChange)}disconnectedCallback(){this.workspaceService.removeEventListener("change",this.handleWorkspaceChange)}buildArtifactMap(){return new Map(this.workspaceService.activeArtifacts.map(e=>[e.id,e]))}render(){const e=this.workspaceService.activeWorkspace,i=(e==null?void 0:e.layout)??[],s=this.buildArtifactMap();if(i.length===0){M(m`<p data-testid="empty-workspace">No artifacts yet.</p>`,this);return}M(m`
154
156
  <layout-view
155
157
  .layout=${i}
156
158
  .renderContent=${o=>{const a=s.get(o.artifactID);return a?m`<artifact-view
@@ -162,7 +164,7 @@ var ps=Object.defineProperty;var Lr=t=>{throw TypeError(t)};var fs=(t,r,e)=>r in
162
164
  @layout-change=${this.handleLayoutChanged}
163
165
  @close-artifact=${this.handleCloseArtifact}
164
166
  ></layout-view>
165
- `,this)}}customElements.define("workspace-view",Ro);class No extends Event{constructor(){super("edit-workspace",{bubbles:!0,composed:!0})}}class ns extends Event{constructor(e){super("create-workspace",{bubbles:!0,composed:!0});l(this,"serverURL");this.serverURL=e}}class Oo extends Event{constructor(){super("delete-workspace",{bubbles:!0,composed:!0})}}class Fo extends HTMLElement{constructor(){super(...arguments);l(this,"workspaceService",W.resolve("WorkspaceService"));l(this,"serverManager",W.has("ServerManager")?W.resolve("ServerManager"):null);l(this,"handleWorkspaceChange",()=>{this.render()});l(this,"handleServerManagerChange",()=>{this.render()})}connectedCallback(){this.render(),this.workspaceService.addEventListener("change",this.handleWorkspaceChange),this.serverManager&&this.serverManager.addEventListener("change",this.handleServerManagerChange)}disconnectedCallback(){this.workspaceService.removeEventListener("change",this.handleWorkspaceChange),this.serverManager&&this.serverManager.removeEventListener("change",this.handleServerManagerChange)}handleSelect(e){e instanceof Ui&&this.workspaceService.setActiveWorkspace(e.value)}closeDropdown(){var e;(e=this.querySelector("dropdown-menu"))==null||e.close()}handleEditWorkspace(){this.workspaceService.activeWorkspace&&(this.closeDropdown(),this.dispatchEvent(new No))}handleCreateWorkspace(e){this.closeDropdown(),this.dispatchEvent(new ns(e))}handleDeleteWorkspace(){this.workspaceService.activeWorkspace&&(this.closeDropdown(),this.dispatchEvent(new Oo))}render(){var a;const e=((a=this.workspaceService.activeWorkspace)==null?void 0:a.name)??"No workspaces",i=this.serverManager?[...this.serverManager.servers.values()]:[],s=this.serverManager?i.map(c=>({...c,sortedWorkspaces:[...c.workspaces.values()].sort((h,d)=>h.name.localeCompare(d.name,void 0,{sensitivity:"base"}))})):[],n=this.serverManager?[]:[...this.workspaceService.workspaces??[]].sort((c,h)=>c.name.localeCompare(h.name,void 0,{sensitivity:"base"})),o=this.workspaceService.activeWorkspaceServerURL;M(m`
167
+ `,this)}}customElements.define("workspace-view",Wo);class Ro extends Event{constructor(){super("edit-workspace",{bubbles:!0,composed:!0})}}class ns extends Event{constructor(e){super("create-workspace",{bubbles:!0,composed:!0});l(this,"serverURL");this.serverURL=e}}class No extends Event{constructor(){super("delete-workspace",{bubbles:!0,composed:!0})}}class Oo extends HTMLElement{constructor(){super(...arguments);l(this,"workspaceService",W.resolve("WorkspaceService"));l(this,"serverManager",W.has("ServerManager")?W.resolve("ServerManager"):null);l(this,"handleWorkspaceChange",()=>{this.render()});l(this,"handleServerManagerChange",()=>{this.render()})}connectedCallback(){this.render(),this.workspaceService.addEventListener("change",this.handleWorkspaceChange),this.serverManager&&this.serverManager.addEventListener("change",this.handleServerManagerChange)}disconnectedCallback(){this.workspaceService.removeEventListener("change",this.handleWorkspaceChange),this.serverManager&&this.serverManager.removeEventListener("change",this.handleServerManagerChange)}handleSelect(e){e instanceof Hi&&this.workspaceService.setActiveWorkspace(e.value)}closeDropdown(){var e;(e=this.querySelector("dropdown-menu"))==null||e.close()}handleEditWorkspace(){this.workspaceService.activeWorkspace&&(this.closeDropdown(),this.dispatchEvent(new Ro))}handleCreateWorkspace(e){this.closeDropdown(),this.dispatchEvent(new ns(e))}handleDeleteWorkspace(){this.workspaceService.activeWorkspace&&(this.closeDropdown(),this.dispatchEvent(new No))}render(){var a;const e=((a=this.workspaceService.activeWorkspace)==null?void 0:a.name)??"No workspaces",i=this.serverManager?[...this.serverManager.servers.values()]:[],s=this.serverManager?i.map(c=>({...c,sortedWorkspaces:[...c.workspaces.values()].sort((h,d)=>h.name.localeCompare(d.name,void 0,{sensitivity:"base"}))})):[],n=this.serverManager?[]:[...this.workspaceService.workspaces??[]].sort((c,h)=>c.name.localeCompare(h.name,void 0,{sensitivity:"base"})),o=this.workspaceService.activeWorkspaceServerURL;M(m`
166
168
  <dropdown-menu
167
169
  title=${e}
168
170
  @select=${c=>this.handleSelect(c)}
@@ -210,7 +212,7 @@ var ps=Object.defineProperty;var Lr=t=>{throw TypeError(t)};var fs=(t,r,e)=>r in
210
212
  >
211
213
  ${i}
212
214
  </dropdown-item>
213
- `}}customElements.define("workspace-picker",Fo);class os extends HTMLElement{constructor(){super(...arguments);l(this,"workspaceService",W.resolve("WorkspaceService"));l(this,"handleWorkspaceChange",()=>{this.render()});l(this,"_mode","edit");l(this,"_targetServerURL");l(this,"createPending",!1)}get open(){return this.hasAttribute("open")}set mode(e){this._mode=e,this.render()}get mode(){return this._mode}set targetServerURL(e){this._targetServerURL=e,this.render()}get targetServerURL(){return this._targetServerURL}attributeChangedCallback(e){e==="open"&&(this.open||(this.createPending=!1),this.render())}connectedCallback(){this.render(),this.workspaceService.addEventListener("change",this.handleWorkspaceChange)}disconnectedCallback(){this.workspaceService.removeEventListener("change",this.handleWorkspaceChange)}emitClose(){this.dispatchEvent(new Event("close",{bubbles:!0}))}async handleSubmit(e){e.preventDefault();const i=e.currentTarget,s=new FormData(i),n=String(s.get("name")??"").trim();if(n){if(this._mode==="edit"){this.workspaceService.renameWorkspace(n),this.emitClose();return}if(this._targetServerURL){this.createPending=!0,this.render();try{await this.workspaceService.createWorkspace(this._targetServerURL,n),this.emitClose()}catch{this.createPending=!1,this.render()}}}}render(){var n;const e=this._mode==="edit"?"Edit workspace":"New workspace",i=this._mode==="edit"?"Save":this.createPending?"Creating...":"Create",s=this._mode==="edit"?((n=this.workspaceService.activeWorkspace)==null?void 0:n.name)??"":"";M(m`
215
+ `}}customElements.define("workspace-picker",Oo);class os extends HTMLElement{constructor(){super(...arguments);l(this,"workspaceService",W.resolve("WorkspaceService"));l(this,"handleWorkspaceChange",()=>{this.render()});l(this,"_mode","edit");l(this,"_targetServerURL");l(this,"createPending",!1)}get open(){return this.hasAttribute("open")}set mode(e){this._mode=e,this.render()}get mode(){return this._mode}set targetServerURL(e){this._targetServerURL=e,this.render()}get targetServerURL(){return this._targetServerURL}attributeChangedCallback(e){e==="open"&&(this.open||(this.createPending=!1),this.render())}connectedCallback(){this.render(),this.workspaceService.addEventListener("change",this.handleWorkspaceChange)}disconnectedCallback(){this.workspaceService.removeEventListener("change",this.handleWorkspaceChange)}emitClose(){this.dispatchEvent(new Event("close",{bubbles:!0}))}async handleSubmit(e){e.preventDefault();const i=e.currentTarget,s=new FormData(i),n=String(s.get("name")??"").trim();if(n){if(this._mode==="edit"){this.workspaceService.renameWorkspace(n),this.emitClose();return}if(this._targetServerURL){this.createPending=!0,this.render();try{await this.workspaceService.createWorkspace(this._targetServerURL,n),this.emitClose()}catch{this.createPending=!1,this.render()}}}}render(){var n;const e=this._mode==="edit"?"Edit workspace":"New workspace",i=this._mode==="edit"?"Save":this.createPending?"Creating...":"Create",s=this._mode==="edit"?((n=this.workspaceService.activeWorkspace)==null?void 0:n.name)??"":"";M(m`
214
216
  <modal-overlay ?open=${this.open}>
215
217
  <section class="workspace-modal">
216
218
  <form class="workspace-form" @submit=${o=>void this.handleSubmit(o)}>
@@ -264,7 +266,7 @@ var ps=Object.defineProperty;var Lr=t=>{throw TypeError(t)};var fs=(t,r,e)=>r in
264
266
  `,this)}}l(as,"observedAttributes",["open"]);customElements.define("workspace-delete-modal",as);class cs extends HTMLElement{constructor(){super(...arguments);l(this,"serverManager",W.has("ServerManager")?W.resolve("ServerManager"):null);l(this,"handleServerManagerChange",()=>{this.render()});l(this,"addServerFormOpen",!1)}get open(){return this.hasAttribute("open")}attributeChangedCallback(e){e==="open"&&(this.open||(this.addServerFormOpen=!1),this.render())}connectedCallback(){this.render(),this.serverManager&&this.serverManager.addEventListener("change",this.handleServerManagerChange)}disconnectedCallback(){this.serverManager&&this.serverManager.removeEventListener("change",this.handleServerManagerChange)}emitClose(){this.dispatchEvent(new Event("close",{bubbles:!0}))}openAddServerForm(){this.addServerFormOpen=!0,this.render()}closeAddServerForm(){this.addServerFormOpen&&(this.addServerFormOpen=!1,this.render())}handleAddServer(e){if(!this.serverManager)return;e.preventDefault();const i=e.currentTarget,s=new FormData(i),n=String(s.get("name")??"").trim(),o=String(s.get("url")??"").trim();!n||!o||(this.serverManager.addServer(o,n),this.addServerFormOpen=!1,i.reset(),this.render())}render(){const e=this.serverManager?[...this.serverManager.servers.values()]:[],i=this.serverManager!==null;M(m`
265
267
  <modal-overlay ?open=${this.open}>
266
268
  <section class="settings-panel">
267
- <panel-view closable @close=${s=>s instanceof Xi&&this.emitClose()}>
269
+ <panel-view closable @close=${s=>s instanceof Yi&&this.emitClose()}>
268
270
  <panel-page id="main" title="Settings">
269
271
  <div class="settings-section">
270
272
  ${i?m`
@@ -327,7 +329,7 @@ var ps=Object.defineProperty;var Lr=t=>{throw TypeError(t)};var fs=(t,r,e)=>r in
327
329
  </panel-view>
328
330
  </section>
329
331
  </modal-overlay>
330
- `,this)}}l(cs,"observedAttributes",["open"]);customElements.define("settings-modal",cs);class ls extends Event{constructor(e){super("auth-submit",{bubbles:!0,composed:!0});l(this,"token");this.token=e}}class Uo extends HTMLElement{constructor(){super(...arguments);l(this,"_invalid",!1);l(this,"_tokenValue","")}set invalid(e){this._invalid=e,this.render()}get invalid(){return this._invalid}set tokenValue(e){this._tokenValue=e,this.render()}get tokenValue(){return this._tokenValue}connectedCallback(){this.render()}handleInput(e){const i=e.currentTarget;this._tokenValue=i.value}handleSubmit(e){e.preventDefault();const i=this._tokenValue.trim();i&&this.dispatchEvent(new ls(i))}render(){M(m`
332
+ `,this)}}l(cs,"observedAttributes",["open"]);customElements.define("settings-modal",cs);class ls extends Event{constructor(e){super("auth-submit",{bubbles:!0,composed:!0});l(this,"token");this.token=e}}class Fo extends HTMLElement{constructor(){super(...arguments);l(this,"_invalid",!1);l(this,"_tokenValue","")}set invalid(e){this._invalid=e,this.render()}get invalid(){return this._invalid}set tokenValue(e){this._tokenValue=e,this.render()}get tokenValue(){return this._tokenValue}connectedCallback(){this.render()}handleInput(e){const i=e.currentTarget;this._tokenValue=i.value}handleSubmit(e){e.preventDefault();const i=this._tokenValue.trim();i&&this.dispatchEvent(new ls(i))}render(){M(m`
331
333
  <modal-overlay open>
332
334
  <section class="auth-modal">
333
335
  <form class="auth-form" @submit=${e=>this.handleSubmit(e)}>
@@ -348,7 +350,7 @@ var ps=Object.defineProperty;var Lr=t=>{throw TypeError(t)};var fs=(t,r,e)=>r in
348
350
  </form>
349
351
  </section>
350
352
  </modal-overlay>
351
- `,this)}}customElements.get("auth-modal")||customElements.define("auth-modal",Uo);class Ho extends HTMLElement{constructor(){super(...arguments);l(this,"runtimeServerURL",Di());l(this,"electronMode",$i());l(this,"serverManager",W.resolve("ServerManager"));l(this,"modals",{workspaceForm:{open:!1,mode:"edit"},deleteWorkspace:{open:!1},settings:{open:!1}});l(this,"connectError",null);l(this,"handleServerManagerChange",()=>{this.render()})}connectedCallback(){this.serverManager.addEventListener("change",this.handleServerManagerChange),this.addEventListener("auth-submit",e=>{var s;const i=e instanceof ls?e.token:e instanceof CustomEvent&&typeof((s=e.detail)==null?void 0:s.token)=="string"?e.detail.token:null;i&&this.handleAuthSubmit(i)}),this.initializeConnection(),this.render()}disconnectedCallback(){this.serverManager.removeEventListener("change",this.handleServerManagerChange)}async initializeConnection(){if(this.electronMode){this.serverManager.connectConfiguredServers(this.runtimeServerURL);return}if(this.serverManager.activeServer)return;const e=new Kt({url:this.runtimeServerURL,name:"Server",token:Sn()});this.serverManager.add(e),this.serverManager.setActive(e);try{await e.connect(),this.connectError=null}catch(i){this.connectError=i instanceof Error&&!(i instanceof Yt)?i.message:null}this.render()}async handleAuthSubmit(e){const i=this.serverManager.activeServer;if(i){this.connectError=null,i.token=e,this.updateTokenQueryParam(e);try{await i.connect()}catch(s){s instanceof Yt||(this.connectError=s instanceof Error?s.message:String(s))}this.render()}}updateTokenQueryParam(e){const i=new URL(window.location.href);i.searchParams.set("token",e),window.history.replaceState({},"",`${i.pathname}${i.search}${i.hash}`)}render(){const e=this.serverManager.activeServer,i=(e==null?void 0:e.status)??null;if(i==="connecting"){M(m`
353
+ `,this)}}customElements.get("auth-modal")||customElements.define("auth-modal",Fo);class Uo extends HTMLElement{constructor(){super(...arguments);l(this,"runtimeServerURL",$i());l(this,"electronMode",Ti());l(this,"serverManager",W.resolve("ServerManager"));l(this,"modals",{workspaceForm:{open:!1,mode:"edit"},deleteWorkspace:{open:!1},settings:{open:!1}});l(this,"connectError",null);l(this,"handleServerManagerChange",()=>{this.render()})}connectedCallback(){this.serverManager.addEventListener("change",this.handleServerManagerChange),this.addEventListener("auth-submit",e=>{var s;const i=e instanceof ls?e.token:e instanceof CustomEvent&&typeof((s=e.detail)==null?void 0:s.token)=="string"?e.detail.token:null;i&&this.handleAuthSubmit(i)}),this.initializeConnection(),this.render()}disconnectedCallback(){this.serverManager.removeEventListener("change",this.handleServerManagerChange)}async initializeConnection(){if(this.electronMode){this.serverManager.connectConfiguredServers(this.runtimeServerURL);return}if(this.serverManager.activeServer)return;const e=new Kt({url:this.runtimeServerURL,name:"Server",token:Sn()});this.serverManager.add(e),this.serverManager.setActive(e);try{await e.connect(),this.connectError=null}catch(i){this.connectError=i instanceof Error&&!(i instanceof Yt)?i.message:null}this.render()}async handleAuthSubmit(e){const i=this.serverManager.activeServer;if(i){this.connectError=null,i.token=e,this.updateTokenQueryParam(e);try{await i.connect()}catch(s){s instanceof Yt||(this.connectError=s instanceof Error?s.message:String(s))}this.render()}}updateTokenQueryParam(e){const i=new URL(window.location.href);i.searchParams.set("token",e),window.history.replaceState({},"",`${i.pathname}${i.search}${i.hash}`)}render(){const e=this.serverManager.activeServer,i=(e==null?void 0:e.status)??null;if(i==="connecting"){M(m`
352
354
  <main class="auth-gate"><p>Connecting...</p></main>
353
355
  `,this);return}if(i==="disconnected"){const n=e;if(!n)return;M(m`
354
356
  <main class="auth-gate">
@@ -393,4 +395,4 @@ var ps=Object.defineProperty;var Lr=t=>{throw TypeError(t)};var fs=(t,r,e)=>r in
393
395
  ?open=${this.modals.settings.open}
394
396
  @close=${()=>{this.modals.settings={open:!1},this.render()}}
395
397
  ></settings-modal>
396
- `;M(s,this)}}customElements.get("television-app")||customElements.define("television-app",Ho);const br=$i(),_r=Di(),hs=dn(br?"television-electron":"television-browser",_r),xr=new vn({clientStore:hs,localServerURL:_r}),ds=new Hs({clientStore:hs,serverManager:xr});W.register("ServerManager",()=>xr);W.register("WorkspaceService",()=>ds);xr.addEventListener("server-message",t=>{ds.handleServerEvent(t.serverURL,t.message)});const Er=document.createElement("television-app");Er.runtimeServerURL=_r;Er.electronMode=br;br&&document.body.classList.add("electron");document.body.appendChild(Er);
398
+ `;M(s,this)}}customElements.get("television-app")||customElements.define("television-app",Uo);const _r=Ti(),xr=$i(),hs=dn(_r?"television-electron":"television-browser",xr),Er=new vn({clientStore:hs,localServerURL:xr}),ds=new Hs({clientStore:hs,serverManager:Er});W.register("ServerManager",()=>Er);W.register("WorkspaceService",()=>ds);Er.addEventListener("server-message",t=>{ds.handleServerEvent(t.serverURL,t.message)});const Ar=document.createElement("television-app");Ar.runtimeServerURL=xr;Ar.electronMode=_r;_r&&document.body.classList.add("electron");document.body.appendChild(Ar);
@@ -4,7 +4,7 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>Television</title>
7
- <script type="module" crossorigin src="./assets/index-DxFVqGmw.js"></script>
7
+ <script type="module" crossorigin src="./assets/index-CTgK-awk.js"></script>
8
8
  <link rel="stylesheet" crossorigin href="./assets/index-CmOTsDN-.css">
9
9
  </head>
10
10
  <body></body>
package/dist/cli.cjs CHANGED
@@ -77795,7 +77795,11 @@ function migrateWorkspaceJson(raw) {
77795
77795
  return true;
77796
77796
  }
77797
77797
  if ("artifactIDs" in raw && Array.isArray(raw.artifactIDs)) {
77798
- raw.layout = raw.artifactIDs.map((id) => ({ artifactID: id, width: DEFAULT_COLS, height: DEFAULT_ROWS }));
77798
+ raw.layout = raw.artifactIDs.map((id) => ({
77799
+ artifactID: id,
77800
+ width: DEFAULT_COLS,
77801
+ height: DEFAULT_ROWS
77802
+ }));
77799
77803
  delete raw.artifactIDs;
77800
77804
  return true;
77801
77805
  }
@@ -77930,7 +77934,10 @@ var ServerStore = class extends EventTarget {
77930
77934
  throw new Error(`Artifact not linked to workspace: ${input.artifactID}`);
77931
77935
  }
77932
77936
  this.artifacts.delete(input.artifactID);
77933
- workspace.layout = removeArtifactFromLayout(workspace.layout, input.artifactID);
77937
+ workspace.layout = removeArtifactFromLayout(
77938
+ workspace.layout,
77939
+ input.artifactID
77940
+ );
77934
77941
  this.persistWorkspace(workspace);
77935
77942
  this.deleteArtifactFile(input.artifactID);
77936
77943
  this.dispatchEvent(
@@ -77969,7 +77976,9 @@ var ServerStore = class extends EventTarget {
77969
77976
  nextFields.name = input.fields.name;
77970
77977
  }
77971
77978
  if (Array.isArray(input.fields.layout)) {
77972
- workspace.layout = input.fields.layout.map((node) => structuredClone(node));
77979
+ workspace.layout = input.fields.layout.map(
77980
+ (node) => structuredClone(node)
77981
+ );
77973
77982
  nextFields.layout = workspace.layout;
77974
77983
  }
77975
77984
  this.persistWorkspace(workspace);
@@ -78016,14 +78025,18 @@ var ServerStore = class extends EventTarget {
78016
78025
  const raw = this.readJsonFile(filePath);
78017
78026
  if (!raw || typeof raw !== "object") continue;
78018
78027
  const renamedLegacyFields = migrateWorkspaceJson(raw);
78019
- const { workspace, migrated } = deserializeWorkspaceData(raw);
78028
+ const { workspace, migrated } = deserializeWorkspaceData(
78029
+ raw
78030
+ );
78020
78031
  this.workspaces.set(workspace.id, workspace);
78021
78032
  if (renamedLegacyFields || migrated) {
78022
78033
  this.persistWorkspace(workspace);
78023
78034
  }
78024
78035
  }
78025
78036
  for (const file2 of this.readEntityFiles(this.artifactsDir)) {
78026
- const artifact = this.readJsonFile(import_node_path4.default.join(this.artifactsDir, file2));
78037
+ const artifact = this.readJsonFile(
78038
+ import_node_path4.default.join(this.artifactsDir, file2)
78039
+ );
78027
78040
  if (!artifact) continue;
78028
78041
  this.artifacts.set(artifact.id, artifact);
78029
78042
  }
@@ -78077,7 +78090,9 @@ var ServerStore = class extends EventTarget {
78077
78090
  (0, import_node_fs3.rmSync)(import_node_path4.default.join(this.artifactsDir, `${artifactID}.json`), { force: true });
78078
78091
  }
78079
78092
  deleteWorkspaceFile(workspaceID) {
78080
- (0, import_node_fs3.rmSync)(import_node_path4.default.join(this.workspacesDir, `${workspaceID}.json`), { force: true });
78093
+ (0, import_node_fs3.rmSync)(import_node_path4.default.join(this.workspacesDir, `${workspaceID}.json`), {
78094
+ force: true
78095
+ });
78081
78096
  }
78082
78097
  get workspacesDir() {
78083
78098
  return import_node_path4.default.join(this.dataDir, "workspaces");
package/dist/electron.cjs CHANGED
@@ -74083,7 +74083,11 @@ function migrateWorkspaceJson(raw) {
74083
74083
  return true;
74084
74084
  }
74085
74085
  if ("artifactIDs" in raw && Array.isArray(raw.artifactIDs)) {
74086
- raw.layout = raw.artifactIDs.map((id) => ({ artifactID: id, width: DEFAULT_COLS, height: DEFAULT_ROWS }));
74086
+ raw.layout = raw.artifactIDs.map((id) => ({
74087
+ artifactID: id,
74088
+ width: DEFAULT_COLS,
74089
+ height: DEFAULT_ROWS
74090
+ }));
74087
74091
  delete raw.artifactIDs;
74088
74092
  return true;
74089
74093
  }
@@ -74218,7 +74222,10 @@ var ServerStore = class extends EventTarget {
74218
74222
  throw new Error(`Artifact not linked to workspace: ${input.artifactID}`);
74219
74223
  }
74220
74224
  this.artifacts.delete(input.artifactID);
74221
- workspace.layout = removeArtifactFromLayout(workspace.layout, input.artifactID);
74225
+ workspace.layout = removeArtifactFromLayout(
74226
+ workspace.layout,
74227
+ input.artifactID
74228
+ );
74222
74229
  this.persistWorkspace(workspace);
74223
74230
  this.deleteArtifactFile(input.artifactID);
74224
74231
  this.dispatchEvent(
@@ -74257,7 +74264,9 @@ var ServerStore = class extends EventTarget {
74257
74264
  nextFields.name = input.fields.name;
74258
74265
  }
74259
74266
  if (Array.isArray(input.fields.layout)) {
74260
- workspace.layout = input.fields.layout.map((node) => structuredClone(node));
74267
+ workspace.layout = input.fields.layout.map(
74268
+ (node) => structuredClone(node)
74269
+ );
74261
74270
  nextFields.layout = workspace.layout;
74262
74271
  }
74263
74272
  this.persistWorkspace(workspace);
@@ -74304,14 +74313,18 @@ var ServerStore = class extends EventTarget {
74304
74313
  const raw = this.readJsonFile(filePath);
74305
74314
  if (!raw || typeof raw !== "object") continue;
74306
74315
  const renamedLegacyFields = migrateWorkspaceJson(raw);
74307
- const { workspace, migrated } = deserializeWorkspaceData(raw);
74316
+ const { workspace, migrated } = deserializeWorkspaceData(
74317
+ raw
74318
+ );
74308
74319
  this.workspaces.set(workspace.id, workspace);
74309
74320
  if (renamedLegacyFields || migrated) {
74310
74321
  this.persistWorkspace(workspace);
74311
74322
  }
74312
74323
  }
74313
74324
  for (const file2 of this.readEntityFiles(this.artifactsDir)) {
74314
- const artifact = this.readJsonFile(import_node_path3.default.join(this.artifactsDir, file2));
74325
+ const artifact = this.readJsonFile(
74326
+ import_node_path3.default.join(this.artifactsDir, file2)
74327
+ );
74315
74328
  if (!artifact) continue;
74316
74329
  this.artifacts.set(artifact.id, artifact);
74317
74330
  }
@@ -74365,7 +74378,9 @@ var ServerStore = class extends EventTarget {
74365
74378
  (0, import_node_fs2.rmSync)(import_node_path3.default.join(this.artifactsDir, `${artifactID}.json`), { force: true });
74366
74379
  }
74367
74380
  deleteWorkspaceFile(workspaceID) {
74368
- (0, import_node_fs2.rmSync)(import_node_path3.default.join(this.workspacesDir, `${workspaceID}.json`), { force: true });
74381
+ (0, import_node_fs2.rmSync)(import_node_path3.default.join(this.workspacesDir, `${workspaceID}.json`), {
74382
+ force: true
74383
+ });
74369
74384
  }
74370
74385
  get workspacesDir() {
74371
74386
  return import_node_path3.default.join(this.dataDir, "workspaces");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@telepath-computer/television",
3
- "version": "0.1.11",
3
+ "version": "0.1.13",
4
4
  "type": "module",
5
5
  "main": "dist/electron.cjs",
6
6
  "bin": {