@telepath-computer/television 0.1.17 → 0.1.18

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.
@@ -0,0 +1,397 @@
1
+ var us=Object.defineProperty;var $r=t=>{throw TypeError(t)};var ps=(t,i,e)=>i in t?us(t,i,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[i]=e;var l=(t,i,e)=>ps(t,typeof i!="symbol"?i+"":i,e),At=(t,i,e)=>i.has(t)||$r("Cannot "+e);var u=(t,i,e)=>(At(t,i,"read from private field"),e?e.call(t):i.get(t)),b=(t,i,e)=>i.has(t)?$r("Cannot add the same private member more than once"):i instanceof WeakSet?i.add(t):i.set(t,e),T=(t,i,e,r)=>(At(t,i,"write to private field"),r?r.call(t,e):i.set(t,e),e),f=(t,i,e)=>(At(t,i,"access private method"),e);(function(){const i=document.createElement("link").relList;if(i&&i.supports&&i.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))r(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"&&r(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 r(s){if(s.ep)return;s.ep=!0;const n=e(s);fetch(s.href,n)}})();const Tr=new WeakMap;function fs(t){return(typeof t=="object"||typeof t=="function")&&t!==null&&"then"in t&&typeof t.then=="function"}function me(t){return typeof t=="string"?t:typeof t=="symbol"?t.description??t.toString():t.name||"(anonymous class)"}function Wr(){return new Error("register(Key, factory) requires a factory function. Wrap existing instances as () => instance.")}function gs(){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(i,e){if(e===void 0){if(typeof i!="function")throw Wr();this.validateClassRegistration(i),this.storeFactory(i,()=>this.instantiateClass(i));return}if(typeof e!="function")throw Wr();if(e.constructor.name==="AsyncFunction")throw gs();this.storeFactory(i,e)}has(i){var e;return((e=this.entries.get(i))==null?void 0:e.factory)!==void 0}resolve(i){return this.resolveAny(i)}storeFactory(i,e){const r=this.getOrCreateEntry(i);r.factory=e,r.instance=void 0,r.error=void 0}validateClassRegistration(i){const e=Tr.get(i);if(e){if(i.length!==e.length)throw new Error(`${me(i)} cannot be registered with register(Class). @injectable(...) declared ${e.length} dependencies but constructor arity is ${i.length}. Use register(Key, () => value) instead.`);return}if(i.length!==0)throw new Error(`${me(i)} cannot be registered with register(Class). Undecorated classes must have zero required constructor parameters. Use register(Key, () => value) instead.`)}instantiateClass(i){const e=Tr.get(i);if(!e)return new i;const r=e.map(s=>this.resolveAny(s));return new i(...r)}resolveAny(i){return this.getOrCreateEntry(i).proxy}getOrCreateEntry(i){let e=this.entries.get(i);return e||(e={key:i},e.proxy=this.createProxy(e),this.entries.set(i,e),e)}createProxy(i){return new Proxy({},{get:(e,r)=>{if(r==="then")return;const s=this.getInstance(i),n=Reflect.get(s,r,s);return typeof n=="function"?n.bind(s):n},set:(e,r,s)=>{const n=this.getInstance(i);return Reflect.set(n,r,s,n)},has:(e,r)=>{const s=this.getInstance(i);return r in s}})}getInstance(i){if(i.instance)return i.instance;if(i.error)throw i.error;if(!i.factory)throw new Error(`${me(i.key)} was resolved but never registered`);const e=this.constructionStack.indexOf(i.key);if(e!==-1){const r=[...this.constructionStack.slice(e),i.key].map(s=>me(s)).join(" -> ");throw new Error(`Circular dependency detected: ${r}`)}this.constructionStack.push(i.key);try{const r=i.factory();if(fs(r))throw new Error(`Factory for ${me(i.key)} returned a Promise. Await setup before registering.`);if(typeof r!="object"||r===null)throw new Error(`Factory for ${me(i.key)} returned a non-object value. Wrap primitives in an object.`);return i.instance=r,r}catch(r){throw i.error=r,r}finally{this.constructionStack.pop()}}}const H=new ms,vs=new Set(["target","currentTarget","eventPhase","defaultPrevented","isTrusted","timeStamp","srcElement","returnValue","cancelBubble","NONE","CAPTURING_PHASE","AT_TARGET","BUBBLING_PHASE","composedPath","stopPropagation","stopImmediatePropagation","preventDefault","initEvent"]);function ys(t){for(const i of Object.keys(t))if(vs.has(i))throw new Error(`Event payload key "${i}" is reserved; choose a different property name`)}function ws(t,i){ys(i);for(const e of Object.keys(i))Object.defineProperty(t,e,{value:i[e],writable:!0,enumerable:!0,configurable:!0})}function fe(){class t extends Event{constructor(e,r){const{type:s,bubbles:n,cancelable:o,composed:a,...c}=r??{};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}),ws(this,c)}}return t}class Je extends globalThis.EventTarget{}const w=fe(),di=fe(),Ae=fe(),ui="0123456789ABCDEFGHJKMNPQRSTVWXYZ",ft=32,ks=16,pi=10,Rr=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(i,e){super(`${e} (${i})`),this.name="ULIDError",this.code=i}}function Ss(t){const i=Math.floor(t()*ft)%ft;return ui.charAt(i)}function bs(t){const i=_s(),e=i&&(i.crypto||i.msCrypto)||null;if(typeof(e==null?void 0:e.getRandomValues)=="function")return()=>{const r=new Uint8Array(1);return e.getRandomValues(r),r[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 _s(){return As()?self:typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:null}function xs(t,i){let e="";for(;t>0;t--)e=Ss(i)+e;return e}function Es(t,i=pi){if(isNaN(t))throw new Pe(oe.EncodeTimeValueMalformed,`Time must be a number: ${t}`);if(t>Rr)throw new Pe(oe.EncodeTimeSizeExceeded,`Cannot encode a time larger than ${Rr}: ${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,r="";for(let s=i;s>0;s--)e=t%ft,r=ui.charAt(e)+r,t=(t-e)/ft;return r}function As(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}function Te(t,i){const e=bs(),r=Date.now();return Es(r,pi)+xs(ks,e)}const fi="markdown";function Cs(t){const i=t.type??fi;return{id:t.id??Te(),type:i,title:t.title,content:t.content}}const z=4,W=6,gi=2,Ft=2,Is=z,Ps=W,mr="auto",J="auto",se=120,Nr=75,x=16,Z=se*z+x*(z-1),ye=se*W+x*(W-1),Ls=200,Ds=4,st=150,Ms=10,Or=2;function Ut(t,i={}){return{id:i.id??Te(),type:"card",artifactID:t,width:i.width??mr,height:i.height??J}}function Ht(t,i){return t.some(e=>mi(e,i))}function mi(t,i){switch(t.type){case"card":return t.artifactID===i;case"row":return t.children.some(e=>e.artifactID===i);case"stack":return t.children.some(e=>mi(e,i))}}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(i=>i.artifactID);case"stack":return t.children.flatMap(vi)}}const $s=4,Ts=/^[0-9A-HJKMNP-TV-Z]{26}$/;function yi(t){return Si(t)}function wi(t,i){return Si(t.flatMap(e=>_i(e,i)))}function ki(t){const i=[],e=new Set;for(const r of t){if(r.type==="row"){i.push(`Top-level rows are invalid: ${r.id}`);continue}xi(r,"strip",i,e)}return{valid:i.length===0,errors:i}}function we(t){const i=yi(t),e=ki(i);if(!e.valid)throw new Error(`Invalid layout: ${e.errors.join("; ")}`);return{totalNodes:i.length,nodes:i.filter(r=>r.type!=="row").map(Os)}}function Si(t){const i=[];for(const e of t){const r=bi(e);for(const s of r){if(s.type==="row"){i.push(...s.children.map(j));continue}i.push(s)}}return i}function bi(t){switch(t.type){case"card":return[j(t)];case"row":{const i=t.children.map(j);return i.length===0?[]:i.length===1?[i[0]]:[{...t,children:i}]}case"stack":{const i=[];for(const e of t.children){const r=bi(e);for(const s of r){if(s.type==="stack"){i.push(...s.children.map(zt));continue}if(s.type==="row"){i.push({...s,children:s.children.map(j)});continue}i.push(j(s))}}return i.length===0?[]:i.length===1?[zt(i[0])]:[{...t,children:i}]}}}function _i(t,i){switch(t.type){case"card":return t.artifactID===i?[]:[j(t)];case"row":{const e=t.children.filter(r=>r.artifactID!==i).map(j);return e.length===0?[]:e.length===1?[e[0]]:[{...t,children:e}]}case"stack":{const e=t.children.flatMap(r=>_i(r,i).filter(n=>n.type!=="stack"));return e.length===0?[]:e.length===1?[zt(e[0])]:[{...t,children:e}]}}}function xi(t,i,e,r){switch(t.type){case"card":Ei(t,i,e,r);return;case"row":Ws(t,i,e,r);return;case"stack":Rs(t,i,e,r);return}}function Ei(t,i,e,r){vr(t.id,e),typeof t.artifactID!="string"||t.artifactID.length===0?e.push(`Card ${t.id} is missing artifactID`):r.has(t.artifactID)?e.push(`Duplicate artifactID in layout: ${t.artifactID}`):r.add(t.artifactID),Ns(t.width)||e.push(`Card ${t.id} width must be an integer in the range 2-4`),Ai(t.height)||e.push(`Card ${t.id} height must be an integer in the range 2-6 or "auto"`);const s=ne(t.width);i==="row"&&s<gi&&e.push(`Row child ${t.id} must be at least 2 columns wide`)}function Ws(t,i,e,r){if(vr(t.id,e),i!=="stack"&&e.push(`Row ${t.id} may only appear inside a stack`),Ai(t.height,$s)||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}Ei(n,"row",e,r),s+=ne(n.width)}s!==z&&e.push(`Row ${t.id} children must sum to 4 columns`)}function Rs(t,i,e,r){if(vr(t.id,e),i!=="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(xi(a,"stack",e,r),a.height===J){n+=1;continue}s+=a.height}if(s>W&&e.push(`Stack ${t.id} exceeds the 6-row budget`),n===0)return;const o=W-s;if(o<n*Ft||o%n!==0){e.push(`Stack ${t.id} has auto-height children that cannot resolve to whole height >= 2`);return}o/n<Ft&&e.push(`Stack ${t.id} has auto-height children below the minimum row size`)}function vr(t,i){(typeof t!="string"||!Ts.test(t))&&i.push(`Node id must be a ULID: ${String(t)}`)}function Ns(t){return t===mr||Number.isInteger(t)&&t>=gi&&t<=Is}function Ai(t,i=Ps){return t===J||Number.isInteger(t)&&t>=Ft&&t<=i}function ne(t){return t===mr?z:t}function Os(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:Ci(t.height,W)}]};const i=Fs(t.children),e=[];let r=1;for(let s=0;s<t.children.length;s+=1){const n=t.children[s],o=i[s];if(n.type==="card")e.push({id:n.id,artifactID:n.artifactID,col:1,row:r,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:r,width:ne(c.width),height:o}),a+=ne(c.width)}r+=o}return{id:t.id,type:"stack",width:e.reduce((s,n)=>Math.max(s,n.col+n.width-1),1),cards:e}}function Fs(t){let i=0,e=0;for(const s of t)s.height===J?e+=1:i+=s.height;const r=e>0?(W-i)/e:0;return t.map(s=>Ci(s.height,r))}function Ci(t,i){return t===J?i:t}function j(t){return{...t}}function zt(t){return t.type==="card"?j(t):{...t,children:t.children.map(j)}}const It="create-artifact",Pt="remove-artifact",nt="update-layout";class Us 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 r=this.clientStore.get();this.activeWorkspaceID=(r==null?void 0:r.lastWorkspaceID)??null,this.activeWorkspaceID&&(this.scrollPosition=((s=r==null?void 0:r.workspaces[this.activeWorkspaceID])==null?void 0:s.scrollPosition)??0)}get workspaces(){return[...this.serverManager.servers.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 r=this.activeWorkspaceServerURL;if(!r)return null;const s=this.serverManager.servers.get(r);return s!=null&&s.getArtifactURL?s.getArtifactURL(e):null}setActiveWorkspace(e){this.selectWorkspace(e)}setScrollPosition(e){const r=Math.max(0,e);this.scrollPosition!==r&&(this.scrollPosition=r,this.persistWorkspaceViewState(),this.dispatchEvent(new w("change")))}createArtifact(e){var c;const r=this.activeWorkspaceData;if(!r)return;const s=this.snapshotState(),n=Cs({id:Te(),type:fi,title:e.title,content:e.content});Ht(r.layout,n.id)||(r.layout=[...r.layout,Ut(n.id)]),this.artifacts.set(n.id,n),this.scrollPosition=Hs(r.layout),this.persistWorkspaceViewState(),this.dispatchEvent(new w("change"));const o=((c=this.findWorkspace(r.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:r.id})||(this.pendingMutations.delete(a),this.restoreState(s),this.dispatchEvent(new w("change")))}removeArtifact(e){var a;const r=this.activeWorkspaceData;if(!r||!this.artifacts.has(e))return;const s=this.snapshotState();this.removeArtifactLocally(e),this.dispatchEvent(new w("change"));const n=((a=this.findWorkspace(r.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:r.id})||(this.pendingMutations.delete(o),this.restoreState(s),this.dispatchEvent(new w("change")))}handleServerEvent(e,r){var s;switch(r.type){case"workspace-list":this.syncActiveWorkspaceState(e,!0);break;case"workspace-updated":this.syncActiveWorkspaceState(e,!1),Array.isArray(r.fields.layout)&&this.pendingMutations.delete(this.getMutationKey(nt,r.workspaceID));break;case"workspace-removed":{this.syncActiveWorkspaceState(e,!1);const n=this.pendingWorkspaceDeletes.get(r.workspaceID);n&&(this.pendingWorkspaceDeletes.delete(r.workspaceID),n.resolve());break}case"workspace-created":if(this.pendingWorkspaceCreates.has(r.workspace.id)){const n=this.pendingWorkspaceCreates.get(r.workspace.id);this.pendingWorkspaceCreates.delete(r.workspace.id),this.selectWorkspace(r.workspace.id),n==null||n.resolve();return}this.syncActiveWorkspaceState(e,!1);break;case"workspace":this.applyWorkspaceSnapshot(r.workspace,r.artifacts);break;case"artifact-created":this.pendingMutations.delete(this.getMutationKey(It,r.artifact.id)),this.applyArtifactCreated(r);break;case"artifact-updated":this.applyArtifactUpdated(r);break;case"artifact-removed":if(this.pendingMutations.delete(this.getMutationKey(Pt,r.artifactID)),((s=this.activeWorkspaceData)==null?void 0:s.id)!==r.workspaceID)return;this.removeArtifactLocally(r.artifactID)&&this.dispatchEvent(new w("change"));break;case"error":this.handleServerError(r);break}}createWorkspace(e,r){const s=this.serverManager.servers.get(e)??null,n=Te(),o=Fr();return this.pendingWorkspaceCreates.set(n,o),this.sendServerMessage(s,{type:"create-workspace",id:n,name:r})||(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 r=this.pendingWorkspaceDeletes.get(e.id);if(r)return r.promise;const s=((o=this.findWorkspace(e.id))==null?void 0:o.server)??null,n=Fr();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 r=this.activeWorkspaceData;if(!r)return;const s=((n=this.findWorkspace(r.id))==null?void 0:n.server)??null;r.name=e,this.dispatchEvent(new w("change")),this.sendServerMessage(s,{type:"update-workspace",workspaceID:r.id,fields:{name:e}})}setLayout(e){var h;const r=this.activeWorkspaceData;if(!r)return;const s=yi(e);if(!ki(s).valid)return;const o=this.snapshotState();r.layout=s,this.dispatchEvent(new w("change"));const a=((h=this.findWorkspace(r.id))==null?void 0:h.server)??null,c=this.getMutationKey(nt,r.id);this.pendingMutations.set(c,o),this.sendServerMessage(a,{type:"update-workspace",workspaceID:r.id,fields:{layout:s.map(d=>structuredClone(d))}})||(this.pendingMutations.delete(c),this.restoreState(o),this.dispatchEvent(new w("change")))}syncActiveWorkspaceState(e,r){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),r&&s.serverURL===e&&this.requestWorkspace(s.serverURL,s.workspace.id)}hasPendingLayoutMutation(e){return this.pendingMutations.has(this.getMutationKey(nt,e))}selectWorkspace(e){const r=this.findWorkspace(e);r&&(this.activeWorkspaceID=e,this.activeWorkspaceData=structuredClone(r.workspace),this.artifacts.clear(),this.restoreWorkspaceViewState(),this.persistActiveWorkspace(),this.requestWorkspace(r.serverURL,e),this.dispatchEvent(new w("change")))}requestWorkspace(e,r){const s=this.serverManager.servers.get(e);this.sendServerMessage(s??null,{type:"get-workspace",workspaceID:r})}applyWorkspaceSnapshot(e,r){if(e.id===this.activeWorkspaceID){this.applyServerWorkspaceState(e),this.artifacts.clear();for(const s of r)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(r=>structuredClone(r)))}applyArtifactCreated(e){var r;((r=this.activeWorkspaceData)==null?void 0:r.id)===e.workspaceID&&(Ht(this.activeWorkspaceData.layout,e.artifact.id)||(this.activeWorkspaceData.layout=[...this.activeWorkspaceData.layout,Ut(e.artifact.id)]),this.artifacts.set(e.artifact.id,e.artifact),this.dispatchEvent(new w("change")))}applyArtifactUpdated(e){const r=this.artifacts.get(e.artifactID);r&&(Object.assign(r,e.fields),this.dispatchEvent(new w("change")))}removeArtifactLocally(e){if(!this.activeWorkspaceData)return!1;const r=this.artifacts.delete(e),s=Ct(this.activeWorkspaceData).length;return this.activeWorkspaceData.layout=wi(this.activeWorkspaceData.layout,e),!(!r&&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,r])=>[e,structuredClone(r)]))}}restoreState(e){this.activeWorkspaceData=e.activeWorkspaceData?structuredClone(e.activeWorkspaceData):null,this.scrollPosition=e.scrollPosition,this.artifacts.clear();for(const[r,s]of e.artifacts.entries())this.artifacts.set(r,structuredClone(s));this.persistWorkspaceViewState()}handleServerError(e){const r=e.request;if(r){if(r.type==="create-artifact"){const s=this.getMutationKey(It,r.id),n=this.pendingMutations.get(s);if(!n)return;this.pendingMutations.delete(s),this.restoreState(n),this.dispatchEvent(new w("change"));return}if(r.type==="create-workspace"){const s=this.pendingWorkspaceCreates.get(r.id);if(!s)return;this.pendingWorkspaceCreates.delete(r.id),s.reject(new Error(e.message));return}if(r.type==="delete-workspace"){const s=this.pendingWorkspaceDeletes.get(r.workspaceID);if(!s)return;this.pendingWorkspaceDeletes.delete(r.workspaceID),s.reject(new Error(e.message));return}if(r.type==="update-workspace"&&Array.isArray(r.fields.layout)){const s=this.getMutationKey(nt,r.workspaceID),n=this.pendingMutations.get(s);if(!n)return;this.pendingMutations.delete(s),this.restoreState(n),this.dispatchEvent(new w("change"));return}if(r.type==="remove-artifact"){const s=this.getMutationKey(Pt,r.artifactID),n=this.pendingMutations.get(s);if(!n)return;this.pendingMutations.delete(s),this.restoreState(n),this.dispatchEvent(new w("change"))}}}restoreWorkspaceViewState(){var r,s;if(!this.activeWorkspaceID){this.scrollPosition=0;return}const e=((s=(r=this.clientStore.get())==null?void 0:r.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 r,s;(r=e.workspaces)[s=this.activeWorkspaceID]??(r[s]={scrollPosition:0}),e.workspaces[this.activeWorkspaceID].scrollPosition=this.scrollPosition})}findWorkspace(e){for(const[r,s]of this.serverManager.servers){const n=s.workspaces.get(e);if(n)return{serverURL:r,server:s,workspace:n}}return null}pickNextWorkspace(){var r;const e=(r=this.clientStore.get())==null?void 0:r.lastWorkspaceID;if(e){const s=this.findWorkspace(e);if(s)return s}for(const[s,n]of this.serverManager.servers){const o=n.workspaces.values().next().value;if(o)return{serverURL:s,server:n,workspace:o}}return null}sendServerMessage(e,r){return e?e.send(r):!1}getServers(){return this.serverManager.servers}getMutationKey(e,r){return`${e}:${r}`}}function Hs(t){var r;const i=we(t);if(i.nodes.length<=1)return 0;let e=0;for(let s=0;s<i.nodes.length-1;s+=1)e+=((r=i.nodes[s])==null?void 0:r.width)??0;return e}function Fr(){let t,i;return{promise:new Promise((r,s)=>{t=r,i=s}),resolve:t,reject:i}}var Ii=Symbol.for("immer-nothing"),Ur=Symbol.for("immer-draftable"),R=Symbol.for("immer-state");function U(t,...i){throw new Error(`[Immer] minified error nr: ${t}. Full error at: https://bit.ly/3cXEKWf`)}var We=Object.getPrototypeOf;function be(t){return!!t&&!!t[R]}function le(t){var i;return t?Pi(t)||Array.isArray(t)||!!t[Ur]||!!((i=t.constructor)!=null&&i[Ur])||Qe(t)||bt(t):!1}var zs=Object.prototype.constructor.toString(),Hr=new WeakMap;function Pi(t){if(!t||typeof t!="object")return!1;const i=Object.getPrototypeOf(t);if(i===null||i===Object.prototype)return!0;const e=Object.hasOwnProperty.call(i,"constructor")&&i.constructor;if(e===Object)return!0;if(typeof e!="function")return!1;let r=Hr.get(e);return r===void 0&&(r=Function.toString.call(e),Hr.set(e,r)),r===zs}function gt(t,i,e=!0){St(t)===0?(e?Reflect.ownKeys(t):Object.keys(t)).forEach(s=>{i(s,t[s],t)}):t.forEach((r,s)=>i(s,r,t))}function St(t){const i=t[R];return i?i.type_:Array.isArray(t)?1:Qe(t)?2:bt(t)?3:0}function Vt(t,i){return St(t)===2?t.has(i):Object.prototype.hasOwnProperty.call(t,i)}function Li(t,i,e){const r=St(t);r===2?t.set(i,e):r===3?t.add(e):t[i]=e}function Vs(t,i){return t===i?t!==0||1/t===1/i:t!==t&&i!==i}function Qe(t){return t instanceof Map}function bt(t){return t instanceof Set}function re(t){return t.copy_||t.base_}function Gt(t,i){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=Pi(t);if(i===!0||i==="class_only"&&!e){const r=Object.getOwnPropertyDescriptors(t);delete r[R];let s=Reflect.ownKeys(r);for(let n=0;n<s.length;n++){const o=s[n],a=r[o];a.writable===!1&&(a.writable=!0,a.configurable=!0),(a.get||a.set)&&(r[o]={configurable:!0,writable:!0,enumerable:a.enumerable,value:t[o]})}return Object.create(We(t),r)}else{const r=We(t);if(r!==null&&e)return{...t};const s=Object.create(r);return Object.assign(s,t)}}function yr(t,i=!1){return _t(t)||be(t)||!le(t)||(St(t)>1&&Object.defineProperties(t,{set:ot,add:ot,clear:ot,delete:ot}),Object.freeze(t),i&&Object.values(t).forEach(e=>yr(e,!0))),t}function Gs(){U(2)}var ot={value:Gs};function _t(t){return t===null||typeof t!="object"?!0:Object.isFrozen(t)}var Bs={};function he(t){const i=Bs[t];return i||U(0,t),i}var Re;function Di(){return Re}function js(t,i){return{drafts_:[],parent_:t,immer_:i,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function zr(t,i){i&&(he("Patches"),t.patches_=[],t.inversePatches_=[],t.patchListener_=i)}function Bt(t){jt(t),t.drafts_.forEach(Xs),t.drafts_=null}function jt(t){t===Re&&(Re=t.parent_)}function Vr(t){return Re=js(Re,t)}function Xs(t){const i=t[R];i.type_===0||i.type_===1?i.revoke_():i.revoked_=!0}function Gr(t,i){i.unfinalizedDrafts_=i.drafts_.length;const e=i.drafts_[0];return t!==void 0&&t!==e?(e[R].modified_&&(Bt(i),U(4)),le(t)&&(t=mt(i,t),i.parent_||vt(i,t)),i.patches_&&he("Patches").generateReplacementPatches_(e[R].base_,t,i.patches_,i.inversePatches_)):t=mt(i,e,[]),Bt(i),i.patches_&&i.patchListener_(i.patches_,i.inversePatches_),t!==Ii?t:void 0}function mt(t,i,e){if(_t(i))return i;const r=t.immer_.shouldUseStrictIteration(),s=i[R];if(!s)return gt(i,(n,o)=>Br(t,s,i,n,o,e),r),i;if(s.scope_!==t)return i;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),gt(o,(c,h)=>Br(t,s,n,c,h,e,a),r),vt(t,n,!1),e&&t.patches_&&he("Patches").generatePatches_(s,e,t.patches_,t.inversePatches_)}return s.copy_}function Br(t,i,e,r,s,n,o){if(s==null||typeof s!="object"&&!o)return;const a=_t(s);if(!(a&&!o)){if(be(s)){const c=n&&i&&i.type_!==3&&!Vt(i.assigned_,r)?n.concat(r):void 0,h=mt(t,s,c);if(Li(e,r,h),be(h))t.canAutoFreeze_=!1;else return}else o&&e.add(s);if(le(s)&&!a){if(!t.immer_.autoFreeze_&&t.unfinalizedDrafts_<1||i&&i.base_&&i.base_[r]===s&&a)return;mt(t,s),(!i||!i.scope_.parent_)&&typeof r!="symbol"&&(Qe(e)?e.has(r):Object.prototype.propertyIsEnumerable.call(e,r))&&vt(t,s)}}}function vt(t,i,e=!1){!t.parent_&&t.immer_.autoFreeze_&&t.canAutoFreeze_&&yr(i,e)}function Ys(t,i){const e=Array.isArray(t),r={type_:e?1:0,scope_:i?i.scope_:Di(),modified_:!1,finalized_:!1,assigned_:{},parent_:i,base_:t,draft_:null,copy_:null,revoke_:null,isManual_:!1};let s=r,n=wr;e&&(s=[r],n=Ne);const{revoke:o,proxy:a}=Proxy.revocable(s,n);return r.draft_=a,r.revoke_=o,a}var wr={get(t,i){if(i===R)return t;const e=re(t);if(!Vt(e,i))return Ks(t,e,i);const r=e[i];return t.finalized_||!le(r)?r:r===Lt(t.base_,i)?(Dt(t),t.copy_[i]=Yt(r,t)):r},has(t,i){return i in re(t)},ownKeys(t){return Reflect.ownKeys(re(t))},set(t,i,e){const r=Mi(re(t),i);if(r!=null&&r.set)return r.set.call(t.draft_,e),!0;if(!t.modified_){const s=Lt(re(t),i),n=s==null?void 0:s[R];if(n&&n.base_===e)return t.copy_[i]=e,t.assigned_[i]=!1,!0;if(Vs(e,s)&&(e!==void 0||Vt(t.base_,i)))return!0;Dt(t),Xt(t)}return t.copy_[i]===e&&(e!==void 0||i in t.copy_)||Number.isNaN(e)&&Number.isNaN(t.copy_[i])||(t.copy_[i]=e,t.assigned_[i]=!0),!0},deleteProperty(t,i){return Lt(t.base_,i)!==void 0||i in t.base_?(t.assigned_[i]=!1,Dt(t),Xt(t)):delete t.assigned_[i],t.copy_&&delete t.copy_[i],!0},getOwnPropertyDescriptor(t,i){const e=re(t),r=Reflect.getOwnPropertyDescriptor(e,i);return r&&{writable:!0,configurable:t.type_!==1||i!=="length",enumerable:r.enumerable,value:e[i]}},defineProperty(){U(11)},getPrototypeOf(t){return We(t.base_)},setPrototypeOf(){U(12)}},Ne={};gt(wr,(t,i)=>{Ne[t]=function(){return arguments[0]=arguments[0][0],i.apply(this,arguments)}});Ne.deleteProperty=function(t,i){return Ne.set.call(this,t,i,void 0)};Ne.set=function(t,i,e){return wr.set.call(this,t[0],i,e,t[0])};function Lt(t,i){const e=t[R];return(e?re(e):t)[i]}function Ks(t,i,e){var s;const r=Mi(i,e);return r?"value"in r?r.value:(s=r.get)==null?void 0:s.call(t.draft_):void 0}function Mi(t,i){if(!(i in t))return;let e=We(t);for(;e;){const r=Object.getOwnPropertyDescriptor(e,i);if(r)return r;e=We(e)}}function Xt(t){t.modified_||(t.modified_=!0,t.parent_&&Xt(t.parent_))}function Dt(t){t.copy_||(t.copy_=Gt(t.base_,t.scope_.immer_.useStrictShallowCopy_))}var qs=class{constructor(t){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!0,this.produce=(i,e,r)=>{if(typeof i=="function"&&typeof e!="function"){const n=e;e=i;const o=this;return function(c=n,...h){return o.produce(c,d=>e.call(this,d,...h))}}typeof e!="function"&&U(6),r!==void 0&&typeof r!="function"&&U(7);let s;if(le(i)){const n=Vr(this),o=Yt(i,void 0);let a=!0;try{s=e(o),a=!1}finally{a?Bt(n):jt(n)}return zr(n,r),Gr(s,n)}else if(!i||typeof i!="object"){if(s=e(i),s===void 0&&(s=i),s===Ii&&(s=void 0),this.autoFreeze_&&yr(s,!0),r){const n=[],o=[];he("Patches").generateReplacementPatches_(i,s,n,o),r(n,o)}return s}else U(1,i)},this.produceWithPatches=(i,e)=>{if(typeof i=="function")return(o,...a)=>this.produceWithPatches(o,c=>i(c,...a));let r,s;return[this.produce(i,e,(o,a)=>{r=o,s=a}),r,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)||U(8),be(t)&&(t=Zs(t));const i=Vr(this),e=Yt(t,void 0);return e[R].isManual_=!0,jt(i),e}finishDraft(t,i){const e=t&&t[R];(!e||!e.isManual_)&&U(9);const{scope_:r}=e;return zr(r,i),Gr(void 0,r)}setAutoFreeze(t){this.autoFreeze_=t}setUseStrictShallowCopy(t){this.useStrictShallowCopy_=t}setUseStrictIteration(t){this.useStrictIteration_=t}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(t,i){let e;for(e=i.length-1;e>=0;e--){const s=i[e];if(s.path.length===0&&s.op==="replace"){t=s.value;break}}e>-1&&(i=i.slice(e+1));const r=he("Patches").applyPatches_;return be(t)?r(t,i):this.produce(t,s=>r(s,i))}};function Yt(t,i){const e=Qe(t)?he("MapSet").proxyMap_(t,i):bt(t)?he("MapSet").proxySet_(t,i):Ys(t,i);return(i?i.scope_:Di()).drafts_.push(e),e}function Zs(t){return be(t)||U(10,t),$i(t)}function $i(t){if(!le(t)||_t(t))return t;const i=t[R];let e,r=!0;if(i){if(!i.modified_)return i.base_;i.finalized_=!0,e=Gt(t,i.scope_.immer_.useStrictShallowCopy_),r=i.scope_.immer_.shouldUseStrictIteration()}else e=Gt(t,!0);return gt(e,(s,n)=>{Li(e,s,$i(n))},r),i&&(i.finalized_=!1),e}var Js=new qs,Qs=Js.produce,en=Object.defineProperty,tn=(t,i,e)=>i in t?en(t,i,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[i]=e,at=(t,i,e)=>tn(t,typeof i!="symbol"?i+"":i,e);function rn(t){return{all:t=t||new Map,on:function(i,e){var r=t.get(i);r?r.push(e):t.set(i,[e])},off:function(i,e){var r=t.get(i);r&&(e?r.splice(r.indexOf(e)>>>0,1):t.set(i,[]))},emit:function(i,e){var r=t.get(i);r&&r.slice().map(function(s){s(e)}),(r=t.get("*"))&&r.slice().map(function(s){s(i,e)})}}}var sn=class{constructor(){at(this,"emitter",rn()),at(this,"on",(t,i)=>(this.emitter.on(t,i),{dispose:()=>this.emitter.off(t,i)})),at(this,"once",(t,i)=>{const e=r=>{i(r),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,...[i]){this.emitter.emit(t,i)}},nn="store-",on=class extends sn{emitChange(t){this.emit("change",{state:t})}},an=class{constructor(t,i,e){this.emitter=new on,this.id=t,this.initValue=i,this.key=`${nn}${t}`,this.storage=(e==null?void 0:e.storage)==="session"?sessionStorage:localStorage,this.get()===void 0&&this.storage.setItem(this.key,JSON.stringify(i))}get(){const t=this.storage.getItem(this.key);return t===null?void 0:JSON.parse(t)}update(t){const i=this.get()??{},e=Qs(i,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,i){return this.emitter.on(t,({state:e})=>i(e))}subscribe(t){const i=this.on("change",t),e=this.get();return e!==void 0&&t(e),i}};const cn="Local";function Y(t){return new URL(t).origin}function ln(t){return{servers:[{url:Y(t),name:cn}],lastWorkspaceID:null,workspaces:{}}}function hn(t,i){return new an(t,ln(i))}const dn=4401;class Kt extends Error{constructor(i="Authentication required"){super(i),this.name="AuthError"}}class qt 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??(r=>new WebSocket(r))}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 r=this.createSocket(un(this.url,this.token));return this.socket=r,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))};r.addEventListener("message",d=>{const p=fn(d);this.applyServerMessage(p),this.dispatchEvent(new di("server-message",{serverURL:this.url,message:p})),a||c()}),r.addEventListener("close",d=>{if(this.connectAttempt===e){if(this.socket=null,pn(d)===dn){h(new Kt);return}if(!a){h(new Error("Connection closed before initialization"));return}this.status="disconnected",this.dispatchEvent(new w("change"))}}),r.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 r=new URL(this.url);return r.pathname=`/artifact/${e}`,r.search="",this.token&&r.searchParams.set("token",this.token),r.hash="",r.toString()}applyServerMessage(e){switch(e.type){case"workspace-list":this.workspaces=new Map(e.workspaces.map(r=>[r.id,structuredClone(r)]));break;case"workspace-created":this.workspaces.set(e.workspace.id,structuredClone(e.workspace));break;case"workspace-updated":{const r=this.workspaces.get(e.workspaceID);r&&(typeof e.fields.name=="string"&&(r.name=e.fields.name),Array.isArray(e.fields.layout)&&(r.layout=e.fields.layout));break}case"workspace-removed":this.workspaces.delete(e.workspaceID);break;case"artifact-created":{const r=this.workspaces.get(e.workspaceID);r&&!Ht(r.layout,e.artifact.id)&&(r.layout=[...r.layout,Ut(e.artifact.id)]);break}case"artifact-removed":{const r=this.workspaces.get(e.workspaceID);r&&(r.layout=wi(r.layout,e.artifactID));break}}}}function un(t,i){const e=new URL(t);return e.protocol=e.protocol==="https:"?"wss:":"ws:",e.pathname="/ws",e.search="",i&&e.searchParams.set("token",i),e.hash="",e.toString()}function pn(t){return typeof t=="object"&&t!==null&&"code"in t&&typeof t.code=="number"?t.code:null}function fn(t){const i=typeof t=="string"?t:typeof t=="object"&&t!==null&&"data"in t&&typeof t.data=="string"?t.data:"";return JSON.parse(i)}class gn 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??(r=>new WebSocket(r))}add(e){const r=Y(e.url);this.servers.get(r)&&this.remove(r),this.servers.set(r,e);const n=()=>{this.dispatchEvent(new w("change"))},o=a=>{this.dispatchEvent(new di("server-message",{serverURL:a.serverURL,message:a.message}))};e.addEventListener("change",n),e.addEventListener("server-message",o),this.serverListeners.set(r,{onServerChange:n,onServerMessage:o}),this.dispatchEvent(new w("change"))}remove(e){const r=Y(e);if(this.localServerURL&&r===this.localServerURL)return;const s=this.servers.get(r);if(!s)return;const n=this.serverListeners.get(r);n&&(s.removeEventListener("change",n.onServerChange),s.removeEventListener("server-message",n.onServerMessage),this.serverListeners.delete(r)),s.disconnect(),this.servers.delete(r),this.activeServer===s&&(this.activeServer=null),this.clientStore.update(o=>{o.servers=o.servers.filter(a=>a.url!==r)}),this.dispatchEvent(new w("change"))}setActive(e){this.activeServer=e,this.dispatchEvent(new w("change"))}connectConfiguredServers(e){var n;const r=((n=this.clientStore.get())==null?void 0:n.servers)??[];for(const o of r){const a=new qt({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,r){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:r})});const n=new qt({url:s,name:r,createSocket:this.createSocket});this.add(n),this.setActive(n),n.connect().catch(()=>{})}removeServer(e){this.remove(e)}}const mn="serverURL",vn="token",yn="mode",wn="electron";function Ti(t=window.location.search,i=window.location.origin){const r=new URLSearchParams(t).get(mn);return r?new URL(r).origin:new URL(i).origin}function kn(t=window.location.search){return new URLSearchParams(t).get(vn)}function Wi(t=window.location.search){return new URLSearchParams(t).get(yn)===wn}/**
2
+ * @license
3
+ * Copyright 2017 Google LLC
4
+ * SPDX-License-Identifier: BSD-3-Clause
5
+ */const $e=globalThis,jr=t=>t,yt=$e.trustedTypes,Xr=yt?yt.createPolicy("lit-html",{createHTML:t=>t}):void 0,Ri="$lit$",K=`lit$${Math.random().toFixed(9).slice(2)}$`,Ni="?"+K,Sn=`<${Ni}>`,de=document,Oe=()=>de.createComment(""),Fe=t=>t===null||typeof t!="object"&&typeof t!="function",kr=Array.isArray,bn=t=>kr(t)||typeof(t==null?void 0:t[Symbol.iterator])=="function",Mt=`[
6
+ \f\r]`,Ce=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,Yr=/-->/g,Kr=/>/g,ee=RegExp(`>|${Mt}(?:([^\\s"'>=/]+)(${Mt}*=${Mt}*(?:[^
7
+ \f\r"'\`<>=]|("|')|))|$)`,"g"),qr=/'/g,Zr=/"/g,Oi=/^(?:script|style|textarea|title)$/i,_n=t=>(i,...e)=>({_$litType$:t,strings:i,values:e}),v=_n(1),_e=Symbol.for("lit-noChange"),E=Symbol.for("lit-nothing"),Jr=new WeakMap,ae=de.createTreeWalker(de,129);function Fi(t,i){if(!kr(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return Xr!==void 0?Xr.createHTML(i):i}const xn=(t,i)=>{const e=t.length-1,r=[];let s,n=i===2?"<svg>":i===3?"<math>":"",o=Ce;for(let a=0;a<e;a++){const c=t[a];let h,d,p=-1,m=0;for(;m<c.length&&(o.lastIndex=m,d=o.exec(c),d!==null);)m=o.lastIndex,o===Ce?d[1]==="!--"?o=Yr:d[1]!==void 0?o=Kr:d[2]!==void 0?(Oi.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]==='"'?Zr:qr):o===Zr||o===qr?o=ee:o===Yr||o===Kr?o=Ce:(o=ee,s=void 0);const y=o===ee&&t[a+1].startsWith("/>")?" ":"";n+=o===Ce?c+Sn:p>=0?(r.push(h),c.slice(0,p)+Ri+c.slice(p)+K+y):c+K+(p===-2?a:y)}return[Fi(t,n+(t[e]||"<?>")+(i===2?"</svg>":i===3?"</math>":"")),r]};class Ue{constructor({strings:i,_$litType$:e},r){let s;this.parts=[];let n=0,o=0;const a=i.length-1,c=this.parts,[h,d]=xn(i,e);if(this.el=Ue.createElement(h,r),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(Ri)){const m=d[o++],y=s.getAttribute(p).split(K),k=/([.?@])?(.*)/.exec(m);c.push({type:1,index:n,name:k[2],strings:y,ctor:k[1]==="."?An:k[1]==="?"?Cn:k[1]==="@"?In:xt}),s.removeAttribute(p)}else p.startsWith(K)&&(c.push({type:6,index:n}),s.removeAttribute(p));if(Oi.test(s.tagName)){const p=s.textContent.split(K),m=p.length-1;if(m>0){s.textContent=yt?yt.emptyScript:"";for(let y=0;y<m;y++)s.append(p[y],Oe()),ae.nextNode(),c.push({type:2,index:++n});s.append(p[m],Oe())}}}else if(s.nodeType===8)if(s.data===Ni)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(i,e){const r=de.createElement("template");return r.innerHTML=i,r}}function xe(t,i,e=t,r){var o,a;if(i===_e)return i;let s=r!==void 0?(o=e._$Co)==null?void 0:o[r]:e._$Cl;const n=Fe(i)?void 0:i._$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,r)),r!==void 0?(e._$Co??(e._$Co=[]))[r]=s:e._$Cl=s),s!==void 0&&(i=xe(t,s._$AS(t,i.values),s,r)),i}class En{constructor(i,e){this._$AV=[],this._$AN=void 0,this._$AD=i,this._$AM=e}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(i){const{el:{content:e},parts:r}=this._$AD,s=((i==null?void 0:i.creationScope)??de).importNode(e,!0);ae.currentNode=s;let n=ae.nextNode(),o=0,a=0,c=r[0];for(;c!==void 0;){if(o===c.index){let h;c.type===2?h=new et(n,n.nextSibling,this,i):c.type===1?h=new c.ctor(n,c.name,c.strings,this,i):c.type===6&&(h=new Pn(n,this,i)),this._$AV.push(h),c=r[++a]}o!==(c==null?void 0:c.index)&&(n=ae.nextNode(),o++)}return ae.currentNode=de,s}p(i){let e=0;for(const r of this._$AV)r!==void 0&&(r.strings!==void 0?(r._$AI(i,r,e),e+=r.strings.length-2):r._$AI(i[e])),e++}}class et{get _$AU(){var i;return((i=this._$AM)==null?void 0:i._$AU)??this._$Cv}constructor(i,e,r,s){this.type=2,this._$AH=E,this._$AN=void 0,this._$AA=i,this._$AB=e,this._$AM=r,this.options=s,this._$Cv=(s==null?void 0:s.isConnected)??!0}get parentNode(){let i=this._$AA.parentNode;const e=this._$AM;return e!==void 0&&(i==null?void 0:i.nodeType)===11&&(i=e.parentNode),i}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(i,e=this){i=xe(this,i,e),Fe(i)?i===E||i==null||i===""?(this._$AH!==E&&this._$AR(),this._$AH=E):i!==this._$AH&&i!==_e&&this._(i):i._$litType$!==void 0?this.$(i):i.nodeType!==void 0?this.T(i):bn(i)?this.k(i):this._(i)}O(i){return this._$AA.parentNode.insertBefore(i,this._$AB)}T(i){this._$AH!==i&&(this._$AR(),this._$AH=this.O(i))}_(i){this._$AH!==E&&Fe(this._$AH)?this._$AA.nextSibling.data=i:this.T(de.createTextNode(i)),this._$AH=i}$(i){var n;const{values:e,_$litType$:r}=i,s=typeof r=="number"?this._$AC(i):(r.el===void 0&&(r.el=Ue.createElement(Fi(r.h,r.h[0]),this.options)),r);if(((n=this._$AH)==null?void 0:n._$AD)===s)this._$AH.p(e);else{const o=new En(s,this),a=o.u(this.options);o.p(e),this.T(a),this._$AH=o}}_$AC(i){let e=Jr.get(i.strings);return e===void 0&&Jr.set(i.strings,e=new Ue(i)),e}k(i){kr(this._$AH)||(this._$AH=[],this._$AR());const e=this._$AH;let r,s=0;for(const n of i)s===e.length?e.push(r=new et(this.O(Oe()),this.O(Oe()),this,this.options)):r=e[s],r._$AI(n),s++;s<e.length&&(this._$AR(r&&r._$AB.nextSibling,s),e.length=s)}_$AR(i=this._$AA.nextSibling,e){var r;for((r=this._$AP)==null?void 0:r.call(this,!1,!0,e);i!==this._$AB;){const s=jr(i).nextSibling;jr(i).remove(),i=s}}setConnected(i){var e;this._$AM===void 0&&(this._$Cv=i,(e=this._$AP)==null||e.call(this,i))}}class xt{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(i,e,r,s,n){this.type=1,this._$AH=E,this._$AN=void 0,this.element=i,this.name=e,this._$AM=s,this.options=n,r.length>2||r[0]!==""||r[1]!==""?(this._$AH=Array(r.length-1).fill(new String),this.strings=r):this._$AH=E}_$AI(i,e=this,r,s){const n=this.strings;let o=!1;if(n===void 0)i=xe(this,i,e,0),o=!Fe(i)||i!==this._$AH&&i!==_e,o&&(this._$AH=i);else{const a=i;let c,h;for(i=n[0],c=0;c<n.length-1;c++)h=xe(this,a[r+c],e,c),h===_e&&(h=this._$AH[c]),o||(o=!Fe(h)||h!==this._$AH[c]),h===E?i=E:i!==E&&(i+=(h??"")+n[c+1]),this._$AH[c]=h}o&&!s&&this.j(i)}j(i){i===E?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,i??"")}}class An extends xt{constructor(){super(...arguments),this.type=3}j(i){this.element[this.name]=i===E?void 0:i}}class Cn extends xt{constructor(){super(...arguments),this.type=4}j(i){this.element.toggleAttribute(this.name,!!i&&i!==E)}}class In extends xt{constructor(i,e,r,s,n){super(i,e,r,s,n),this.type=5}_$AI(i,e=this){if((i=xe(this,i,e,0)??E)===_e)return;const r=this._$AH,s=i===E&&r!==E||i.capture!==r.capture||i.once!==r.once||i.passive!==r.passive,n=i!==E&&(r===E||s);s&&this.element.removeEventListener(this.name,this,r),n&&this.element.addEventListener(this.name,this,i),this._$AH=i}handleEvent(i){var e;typeof this._$AH=="function"?this._$AH.call(((e=this.options)==null?void 0:e.host)??this.element,i):this._$AH.handleEvent(i)}}class Pn{constructor(i,e,r){this.element=i,this.type=6,this._$AN=void 0,this._$AM=e,this.options=r}get _$AU(){return this._$AM._$AU}_$AI(i){xe(this,i)}}const $t=$e.litHtmlPolyfillSupport;$t==null||$t(Ue,et),($e.litHtmlVersions??($e.litHtmlVersions=[])).push("3.3.2");const L=(t,i,e)=>{const r=i;let s=r._$litPart$;return s===void 0&&(r._$litPart$=s=new et(i.insertBefore(Oe(),null),null,void 0,{})),s._$AI(t),s};/**
8
+ * @license
9
+ * Copyright 2017 Google LLC
10
+ * SPDX-License-Identifier: BSD-3-Clause
11
+ */const Ln={CHILD:2},Dn=t=>(...i)=>({_$litDirective$:t,values:i});class Mn{constructor(i){}get _$AU(){return this._$AM._$AU}_$AT(i,e,r){this._$Ct=i,this._$AM=e,this._$Ci=r}_$AS(i,e){return this.update(i,e)}update(i,e){return this.render(...e)}}/**
12
+ * @license
13
+ * Copyright 2017 Google LLC
14
+ * SPDX-License-Identifier: BSD-3-Clause
15
+ */class Zt extends Mn{constructor(i){if(super(i),this.it=E,i.type!==Ln.CHILD)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(i){if(i===E||i==null)return this._t=void 0,this.it=i;if(i===_e)return i;if(typeof i!="string")throw Error(this.constructor.directiveName+"() called with a non-string value");if(i===this.it)return this._t;this.it=i;const e=[i];return e.raw=e,this._t={_$litType$:this.constructor.resultType,strings:e,values:[]}}}Zt.directiveName="unsafeHTML",Zt.resultType=1;/**
16
+ * @license
17
+ * Copyright 2017 Google LLC
18
+ * SPDX-License-Identifier: BSD-3-Clause
19
+ */class Jt extends Zt{}Jt.directiveName="unsafeSVG",Jt.resultType=2;const $n=Dn(Jt),Tn={size:16,color:"currentColor",weight:"regular"};function Wn(t){return typeof t=="string"?{regular:t}:t}function Sr(t,i="0 0 256 256"){const e=Wn(t);return r=>{const{size:s,color:n,weight:o}={...Tn,...r},a=e[o]??e.regular;return v`<svg
20
+ xmlns="http://www.w3.org/2000/svg"
21
+ data-ui-icon=""
22
+ width="${s}"
23
+ height="${s}"
24
+ viewBox="${i}"
25
+ fill="${n}"
26
+ >${$n(a)}</svg>`}}const Rn=new Map,Tt=new Set;var ke,ht;const Ir=class Ir extends HTMLElement{constructor(){super(...arguments);b(this,ke)}connectedCallback(){f(this,ke,ht).call(this)}disconnectedCallback(){Tt.delete(this)}attributeChangedCallback(){f(this,ke,ht).call(this)}refresh(){f(this,ke,ht).call(this)}get name(){return this.getAttribute("name")}get size(){const e=this.getAttribute("size");if(e===null)return;const r=Number(e);return Number.isFinite(r)?r:void 0}get weight(){const e=this.getAttribute("weight");return e==="bold"||e==="regular"?e:void 0}};ke=new WeakSet,ht=function(){const e=this.name?Rn.get(this.name):null;if(!e){this.name&&Tt.add(this),L(null,this);return}Tt.delete(this),L(e({size:this.size,weight:this.weight}),this)},Ir.observedAttributes=["name","size","weight"];let Qt=Ir;customElements.get("icon-element")||customElements.define("icon-element",Qt);const Ui=Sr('<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"/>'),er=Sr('<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"/>'),Nn=Sr('<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 Hi extends Event{constructor(i){super("dropdown-item-select",{bubbles:!0,composed:!0}),this.value=i}}class On extends Event{constructor(i){super("select",{bubbles:!0,composed:!0}),this.value=i}}var O,F,q,Se,S,He,g,zi,Le,Vi,Gi,rr,ir,dt,ie,ce,ze,Ve,Ge,wt,Bi,ji,sr,De,nr,G;const Pr=class Pr extends HTMLElement{constructor(){super();b(this,g);b(this,O,!1);b(this,F,null);b(this,q,null);b(this,Se);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,O))});b(this,ze,e=>{e.key!=="Enter"&&e.key!==" "||(e.preventDefault(),u(this,ce).call(this))});b(this,Ve,e=>{u(this,O)&&(e.composedPath().includes(this)||f(this,g,dt).call(this,!1))});b(this,Ge,e=>{e instanceof Hi&&(e.stopPropagation(),T(this,O,!1),f(this,g,Le).call(this,e.value),f(this,g,G).call(this),this.dispatchEvent(new On(e.value)))});b(this,wt,()=>{f(this,g,sr).call(this)});T(this,Se,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,nr).call(this)}attributeChangedCallback(){f(this,g,G).call(this)}get title(){return this.getAttribute("title")??""}get value(){return u(this,F)}set value(e){e===null?(f(this,g,ie).call(this,null,null),f(this,g,Vi).call(this)):f(this,g,Le).call(this,e),f(this,g,G).call(this)}close(){f(this,g,dt).call(this,!1)}};O=new WeakMap,F=new WeakMap,q=new WeakMap,Se=new WeakMap,S=new WeakMap,He=new WeakMap,g=new WeakSet,zi=function(){var r;const e=this.querySelector("dropdown-item[selected]");e&&f(this,g,ie).call(this,e.value,((r=e.textContent)==null?void 0:r.trim())??null)},Le=function(e){var r;for(const s of u(this,g,rr))s.value===e?(f(this,g,ie).call(this,e,((r=s.textContent)==null?void 0:r.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 r of e)r.removeAttribute("selected")},Gi=function(e){for(const r of u(this,g,rr))if(r.value===e)return r;return null},rr=function(){return this.querySelectorAll("dropdown-item")},ir=function(){return u(this,q)??this.title},dt=function(e){u(this,O)!==e&&(T(this,O,e),f(this,g,G).call(this))},ie=function(e,r){T(this,F,e),T(this,q,r)},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 r,s;const e=this.querySelector("dropdown-item[selected]");if(e){const n=e.value,o=((r=e.textContent)==null?void 0:r.trim())??null,a=u(this,F)!==n||u(this,q)!==o;f(this,g,ie).call(this,n,o),f(this,g,Le).call(this,n),a?f(this,g,G).call(this):f(this,g,De).call(this);return}if(u(this,F)!==null){const n=f(this,g,Gi).call(this,u(this,F));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,F),o),f(this,g,Le).call(this,u(this,F)),a?f(this,g,G).call(this):f(this,g,De).call(this);return}}if(u(this,F)!==null||u(this,q)!==null){f(this,g,ie).call(this,null,null),f(this,g,G).call(this);return}f(this,g,De).call(this)},sr=function(){const e=u(this,Se).querySelector('slot[name="trigger"]'),r=e instanceof HTMLSlotElement?e.assignedElements({flatten:!0})[0]??null:null;u(this,S)!==r&&(f(this,g,nr).call(this),T(this,S,r),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,De).call(this)},De=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,O)?"true":"false"),L(v`
27
+ <span class="trigger-label" data-dropdown-trigger-label>${u(this,g,ir)}</span>
28
+ <span class="trigger-icon" data-dropdown-trigger-icon aria-hidden="true">
29
+ ${er({size:14})}
30
+ </span>
31
+ `,u(this,S)))},nr=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,O)),L(v`
32
+ <slot name="trigger" @slotchange=${u(this,wt)}>
33
+ <button
34
+ class="fallback-trigger"
35
+ part="trigger"
36
+ type="button"
37
+ aria-haspopup="listbox"
38
+ aria-expanded=${u(this,O)?"true":"false"}
39
+ @click=${u(this,ce)}
40
+ >
41
+ <span class="trigger-label" part="trigger-label">${u(this,g,ir)}</span>
42
+ <span class="trigger-icon" part="trigger-icon" aria-hidden="true">
43
+ ${er({size:14})}
44
+ </span>
45
+ </button>
46
+ </slot>
47
+ ${u(this,O)?v`
48
+ <div class="panel" part="panel" role="listbox">
49
+ <slot></slot>
50
+ </div>
51
+ `:null}
52
+ `,u(this,Se)),queueMicrotask(()=>f(this,g,sr).call(this))},Pr.observedAttributes=["title"];let tr=Pr;class Fn extends HTMLElement{}class Un extends HTMLElement{}class Hn extends HTMLElement{}var pe,ar,Xi,Be,je;const Lr=class Lr 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,ar).call(this)}disconnectedCallback(){this.removeEventListener("click",u(this,Be)),this.removeEventListener("keydown",u(this,je))}attributeChangedCallback(){f(this,pe,ar).call(this)}get value(){return this.getAttribute("value")??""}get selected(){return this.hasAttribute("selected")}get action(){return this.hasAttribute("action")}};pe=new WeakSet,ar=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 Hi(this.value))},Be=new WeakMap,je=new WeakMap,Lr.observedAttributes=["action","selected","value"];let or=Lr;customElements.get("dropdown-menu")||customElements.define("dropdown-menu",tr);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",or);class zn extends Event{constructor(){super("close",{bubbles:!0,composed:!0})}}var Xe,Q,lr,kt,Ye,hr;const Dr=class Dr extends HTMLElement{constructor(){super();b(this,Q);b(this,Xe);b(this,kt,e=>{e.target===e.currentTarget&&f(this,Q,lr).call(this)});b(this,Ye,e=>{this.open&&e.key==="Escape"&&f(this,Q,lr).call(this)});T(this,Xe,this.attachShadow({mode:"open"}))}connectedCallback(){document.addEventListener("keydown",u(this,Ye)),f(this,Q,hr).call(this)}disconnectedCallback(){document.removeEventListener("keydown",u(this,Ye))}attributeChangedCallback(){f(this,Q,hr).call(this)}get open(){return this.hasAttribute("open")}};Xe=new WeakMap,Q=new WeakSet,lr=function(){this.dispatchEvent(new zn)},kt=new WeakMap,Ye=new WeakMap,hr=function(){L(v`
53
+ ${this.open?v`
54
+ <div class="backdrop" part="backdrop" @click=${u(this,kt)}>
55
+ <slot></slot>
56
+ </div>
57
+ `:null}
58
+ `,u(this,Xe))},Dr.observedAttributes=["open"];let cr=Dr;customElements.get("modal-overlay")||customElements.define("modal-overlay",cr);class Yi extends Event{constructor(){super("close",{bubbles:!0,composed:!0})}}class Vn extends HTMLElement{}var Ke,$,qe,_,ut,pt,Ki,qi,Me,Zi,Ze,ur;const Mr=class Mr 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 r=e.target;if(!(r instanceof Element))return;const s=r.closest("[data-navigate]");if(s){this.navigate(s.dataset.navigate??"");return}r.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,_,Me).call(this)}disconnectedCallback(){this.removeEventListener("click",u(this,Ze)),u(this,qe).disconnect(),T(this,$,[])}attributeChangedCallback(){f(this,_,ur).call(this)}get closable(){return this.hasAttribute("closable")}navigate(e){var n;const r=((n=u(this,_,ut))==null?void 0:n.id)??null;e===r||!f(this,_,pt).call(this,e)||(u(this,$).push(e),f(this,_,Me).call(this))}back(){u(this,$).length<=1||(u(this,$).pop(),f(this,_,Me).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 r=this.querySelectorAll("panel-page");for(const s of r)if(s.id===e)return s;return null},Ki=function(){if(T(this,$,u(this,$).filter(r=>f(this,_,pt).call(this,r)!==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),r=this.querySelectorAll("panel-page");for(const s of r)s.hidden=s!==e},Me=function(){f(this,_,qi).call(this),f(this,_,ur).call(this)},Zi=function(){f(this,_,Me).call(this)},Ze=new WeakMap,ur=function(){const e=u(this,_,ut);L(v`
59
+ <section class="panel" part="panel">
60
+ <header class="title-bar" part="header">
61
+ <div class="title-group" part="title-group">
62
+ ${u(this,$).length>1?v`
63
+ <button
64
+ type="button"
65
+ class="title-button"
66
+ part="button back-button"
67
+ aria-label="Back"
68
+ @click=${()=>this.back()}
69
+ >
70
+ <span class="back-icon" part="icon back-icon">
71
+ ${er({size:14})}
72
+ </span>
73
+ </button>
74
+ `:null}
75
+ <h2 class="title" part="title">${(e==null?void 0:e.getAttribute("title"))??""}</h2>
76
+ </div>
77
+ ${this.closable?v`
78
+ <button
79
+ type="button"
80
+ class="title-button"
81
+ part="button close-button"
82
+ aria-label="Close"
83
+ @click=${()=>this.dispatchEvent(new Yi)}
84
+ >
85
+ <span class="close-icon" part="icon close-icon">${Ui({size:14})}</span>
86
+ </button>
87
+ `:null}
88
+ </header>
89
+ <slot></slot>
90
+ </section>
91
+ `,u(this,Ke))},Mr.observedAttributes=["closable"];let dr=Mr;customElements.get("panel-view")||customElements.define("panel-view",dr);customElements.get("panel-page")||customElements.define("panel-page",Vn);const Ji=fe();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 v`
92
+ <header class="artifact-title-bar" drag-handle>
93
+ <span class="artifact-title">${e.title}</span>
94
+ <button
95
+ class="artifact-close-btn"
96
+ @click=${()=>this.handleClose()}
97
+ aria-label="Close"
98
+ >
99
+ ${Ui({size:14})}
100
+ </button>
101
+ </header>
102
+ <div class="artifact-content">
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>
110
+ </div>
111
+ `}render(){this._artifact&&(this.setAttribute("type",this._artifact.type),L(this.template(),this))}}customElements.define("artifact-view",Gn);const P=t=>({type:"px",...t}),M=t=>({type:"unit",...t}),ct=2,Bn=2;class jn{constructor(i){l(this,"basis");l(this,"min");l(this,"_gap");l(this,"_viewport");l(this,"_unit");this.basis=i.basis,this.min=i.min,this._viewport=i.viewport,this._gap=i.gap??P({x,y:x});const e=this._viewport.x??Z,r=this._viewport.y??ye,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?r-n*ct:Math.min(ye,r-n*ct),d=(c-s*(z-1))/z,p=(h-n*(W-1))/W,m=this.basis.x??0,y=this.basis.y??0,k=this.min.x??0,D=this.min.y??0;this._unit=P(a?{x:Math.max(k,d),y:Math.max(D,p)}:{x:Math.max(k,Math.min(m,d)),y:Math.max(D,Math.min(y,p))})}get unit(){return this._unit}get viewport(){return this._viewport}get gap(){return this._gap}toUnits(i){return M({x:i.x==null?void 0:i.x/(this._unit.x??1),y:i.y==null?void 0:i.y/(this._unit.y??1)})}toPixels(i){const e=this._unit.x??0,r=this._unit.y??0,s=this._gap.x??x,n=this._gap.y??x,o=i.x==null?void 0:i.x*e+Math.max(0,i.x-1)*s,a=i.y==null?void 0:i.y*r+Math.max(0,i.y-1)*n;return P({x:o,y:a})}}const ue=1e-4,B=1e-6,Xn=40,Yn=24;function Qi(t,i){return Math.max(0,t-i*2)}function es(t){const i=[0];for(const e of t)i.push((i[i.length-1]??0)+e);return i}function ts(t){const i=[0];for(let e=0;e<t.length;e+=1){const r=i[e]??0;i.push(r+t[e]+x)}return i}function rs(t,i,e){if(i<0||i>=t.length)return 0;let r=0,s=0;for(let n=i;n<t.length;n+=1){const o=t[n],a=s===0?o:r+x+o;if(a>e+ue)break;r=a,s+=1}return Math.max(1,s)}function Kn(t,i,e){if(i<0||i>=t.length)return 0;let r=0,s=0;for(let n=i;n>=0;n-=1){const o=t[n],a=s===0?o:r+x+o;if(a>e+ue)break;r=a,s+=1}return Math.max(1,s)}function qn(t,i){if(t.length===0)return 0;let e=0,r=0;for(let s=t.length-1;s>=0;s-=1){const n=t[s],o=r===0?n:e+x+n;if(o>i+ue)break;e=o,r+=1}return Math.max(1,r)}function br(t,i){if(t.length===0)return 0;const e=qn(t,i);return Math.max(0,t.length-e)}function Qr(t,i,e){if(t.length===0)return 0;const r=rs(t,i,e),s=Math.min(t.length,i+r);if(s<=i)return 0;const n=t.slice(i,s);return n.reduce((o,a)=>o+a,0)+Math.max(0,n.length-1)*x}function pr(t,i,e){const r=t[i]??0;return e-r}function ve(t,i,e,r,s){if(t.length===0)return 0;const n=br(t,s),o=i[n]??0,a=Math.max(0,Math.min(o,e));let c=0;for(let X=0;X<n;X+=1){const C=i[X]??0,Ee=i[X+1]??C;if(a>=C&&a<=Ee+ue){c=X;break}c=X+1}const h=Math.min(c+1,n),d=i[c]??0,p=i[h]??d,m=Math.max(p-d,ue),y=h===c?0:(a-d)/m,k=ts(t),D=Qr(t,c,s),N=Qr(t,h,s),V=(r-D)/2,ge=(r-N)/2,rt=pr(k,c,V),A=pr(k,h,ge);return rt+(A-rt)*y}function ei(t,i,e,r,s){const n=br(t,r),o=i[n]??0;let a=0,c=o;for(let h=0;h<Xn;h+=1){const d=(a+c)/2;ve(t,i,d,e,r)>s?a=d:c=d}return(a+c)/2}function ti(t,i,e){const r=ts(t),[s,n]=i,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 pr(r,s,c)}function Zn(t,i,e){const r=rs(t,i,e);return[i,Math.min(t.length-1,i+r-1)]}function Jn(t,i,e){const r=Kn(t,i,e);return[Math.max(0,i-r+1),i]}function Qn(t){const i=new Set,e=[];for(const r of t){const s=`${r.nodeRange[0]}:${r.nodeRange[1]}`;if(i.has(s))continue;const n=e[e.length-1];n&&Math.abs(n.anchor-r.anchor)<=B||(i.add(s),e.push(r))}return e}function eo(t){const{nodeCols:i,nodeWidthsPx:e,viewportWidthPx:r}=t;if(i.length===0||e.length===0)return{viewspans:[],minScroll:0,maxScroll:0};const s=t.gapPx??x,n=Qi(r,s),o=es(i),a=br(e,n),c=o[a]??0,h=[];for(let d=0;d<=a;d+=1){const p=Zn(e,d,n),m=ti(e,p,r),y=ei(e,o,r,n,m);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),m=`${p[0]}:${p[1]}`;if(h.some(D=>`${D.nodeRange[0]}:${D.nodeRange[1]}`===m))continue;const y=ti(e,p,r),k=ei(e,o,r,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,i){var s;let e=0,r=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)-i);if(o+B<r){r=o,e=n;continue}Math.abs(o-r)<=B&&n<e&&(e=n)}return e}function ro(t,i,e){return e<=0?0:Math.max(0,Math.min(e-1,t+i))}function Ie(t,i,e){return Math.max(i,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 M({x:this._scroll})}get translate(){return P({x:ve(this.nodeWidthsPx,this.boundaryCols,this._scroll,this.viewportWidthPx,this.framedViewportWidthPx)})}set scroll(e){const r=Ie(e.x??this._scroll,this.minScroll,this.maxScroll);Math.abs(r-this._scroll)<=B||(this._scroll=r,this.activeViewspanIndex=null,this.dispatchEvent(new Ae("layout-scroll",{scroll:this.scroll})))}rebuild(e){const r=e.nodeWidths.map(h=>Math.max(0,h.x??0)),s=r.map(h=>e.grid.toPixels(M({x:h})).x??0),n=e.grid.viewport.x??0,o=e.grid.gap.x??x,a=eo({nodeCols:r,nodeWidthsPx:s,viewportWidthPx:n,gapPx:o});this.nodeWidthsPx=s,this.boundaryCols=es(r),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 r=this.activeViewspanIndex??to(this.viewspans,this._scroll),s=ro(r,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 r=Ie(this._scroll+(e.x??0),this.minScroll,this.maxScroll);this.activeViewspanIndex=null,!(Math.abs(r-this._scroll)<=B)&&(this._scroll=r,this.dispatchEvent(new Ae("layout-scroll",{scroll:this.scroll})))}wheelPixels(e){const r=e.x??0;if(Math.abs(r)<=ue)return;this.activeViewspanIndex=null;const s=ve(this.nodeWidthsPx,this.boundaryCols,this._scroll,this.viewportWidthPx,this.framedViewportWidthPx),n=s-r,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 m=0;m<Yn;m+=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,i){return{left:t.left+t.width*i.left,top:t.top+t.height*i.top,width:t.width*i.width,height:t.height*i.height}}function te(t,i,e){return t>=e.left&&t<e.left+e.width&&i>=e.top&&i<e.top+e.height}function _r(t,i){for(const e of t){if(e.type==="card"&&e.id===i)return e;if(e.type==="stack")for(const r of e.children){if(r.type==="card"&&r.id===i)return r;if(r.type==="row"){for(const s of r.children)if(s.id===i)return s}}}return null}function fr(t){return t.height===W||t.height===J?{...t,height:J}:t}function gr(t){return t.height===J?{...t,height:W}:t}function no(t,i,e,r){const s=t.findIndex(d=>d.type==="stack"&&d.id===i);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"?gr(d):d}else c[s]={...n,children:a};const h=Math.max(0,Math.min(r,c.length));return c.splice(h,0,gr(o)),c}const oo=fe(),ao=fe(),co=50;function lo(t,i){if(t.type!==i.type)return!1;switch(t.type){case"reorder":return i.index===t.index;case"stack":return i.targetCardId===t.targetCardId&&i.position===t.position;case"stack-child-noop":return!0;case"stack-child-extract":return i.toIndex===t.toIndex;case"stack-child-reorder":return i.position===t.position;default:return!1}}function tt(t){return{id:t.id,type:"drop-target",width:t.width,height:t.height}}function ri(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,i){return t.find(r=>r.type==="card"&&r.id===i)??null}function ii(t,i){return t.find(r=>r.type==="stack"&&r.id===i)??null}function po(t,i){const e=[...i],r=e.findIndex(a=>a.type==="card"&&a.id===t.nodeId);if(r===-1)return null;const s=e[r];if(!s||s.type!=="card")return null;e.splice(r,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,i,e,r){const s=[...t.base];s.splice(t.visualDraggedIndex,1);const n=s.findIndex(m=>m.type==="card"&&m.id===e.targetCardId),o=n===-1?null:s[n];if(!o||o.type!=="card")return null;const a=is(r,i.nodeId);if(!a)return null;const c=fr(a),h=fr(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,i){return t.parentStackId?mo(t,i):go(t,i)}function go(t,i){const e=t.hitTarget;if(e.type==="reorder"){const r=i[t.sourceIndex];if(!r||r.type!=="card")return[...i];const s=[...i];return s.splice(t.sourceIndex,1),s.splice(e.index,0,tt(r)),s}if(e.type==="stack"){const r=po(t,i);return r?fo(r,t,e,i)??[...i]:[...i]}return[...i]}function mo(t,i){const e=t.hitTarget;switch(e.type){case"stack-child-reorder":return vo(t,i,e.position);case"stack-child-extract":return yo(t,i,e.toIndex);case"stack-child-noop":return wo(t,i);default:return[...i]}}function vo(t,i,e){const r=i.findIndex(m=>m.type==="stack"&&m.id===t.parentStackId);if(r===-1)return[...i];const s=i[r];if(!s||s.type!=="stack")return[...i];if(!s.children.every(m=>m.type==="card"))return[...i];const n=s.children,o=n.findIndex(m=>m.id===t.nodeId);if(o===-1)return[...i];const a=n[o],c=n.filter(m=>m.id!==t.nodeId),h=tt(a),d=e==="above"?[h,...c]:[...c,h],p=[...i];return p[r]={...s,children:d},p}function yo(t,i,e){if(!t.parentStackId)return[...i];const r=no(i,t.parentStackId,t.nodeId,e);if(r===i)return[...i];const s=r.findIndex(a=>a.type==="card"&&a.id===t.nodeId);if(s===-1)return[...i];const n=r[s];if(!n||n.type!=="card")return[...i];const o=[...r];return o[s]=tt(n),o}function wo(t,i){const e=i.findIndex(c=>c.type==="stack"&&c.id===t.parentStackId);if(e===-1)return[...i];const r=i[e];if(!r||r.type!=="stack")return[...i];const s=r.children.findIndex(c=>c.type==="card"&&c.id===t.nodeId);if(s===-1)return[...i];const n=r.children[s];if(!n||n.type!=="card")return[...i];const o=[...i],a=[...r.children];return a[s]=tt(n),o[e]={...r,children:a},o}function ko(t,i){return i.find(r=>r.type==="stack"&&r.id===t.id)?t.id:Te()}function So(t,i,e){if(t.type==="drop-target"){const r=_r(i,e);if(!r)throw new Error(`finalize: missing dragged card ${e}`);return fr(r)}return t}function bo(t,i,e){const r=t.children.map(n=>So(n,i,e));return{id:ko(t,i),type:"stack",children:r}}function _o(t,i,e){if(t.type==="drop-target"){const r=_r(i,e);if(!r)throw new Error(`finalize: missing dragged card ${e}`);return is(i,e)!==null?r:gr(r)}return t.type==="card"||t.type==="row"?t:bo(t,i,e)}function xo(t,i,e){return t.map(r=>_o(r,i,e))}function Eo(t,i){return JSON.stringify(t)===JSON.stringify(i)}class Ao extends Je{constructor(e={}){super();l(this,"pending",null);l(this,"active",null)}start(e){if(this.pending||this.active)return;const r=e.pointer.x??0,s=e.pointer.y??0;this.pending={startX:r,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 r=e.pointer.x??0,s=e.pointer.y??0,n=this.pending;if(n){const h=r-n.startX,d=s-n.startY;Math.hypot(h,d)>=Ds&&(this.pending=null,this.active={...n,pointerX:r,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(r,s,e,o),c=a.type==="reorder"?a.index:this.active.lastReorderIndex;this.active.pointerX===r&&this.active.pointerY===s&&lo(this.active.hitTarget,a)&&this.active.lastReorderIndex===c||(this.active={...this.active,pointerX:r,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 r=null;try{const s=Nt(this.active,e),n=xo(s,e,this.active.nodeId);Eo(n,e)||(r=n)}catch{r=null}this.reset(),r&&this.dispatchEvent(new ao("drop",{layout:r})),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,r,s,n){return this.active?this.isPointerInsideDragBounds(e,r,s.viewport)?this.active.parentStackId?this.getStackChildHitTarget(e,r,s,n):this.getTopLevelCardHitTarget(e,r,s,n):{type:"reorder",index:this.active.sourceIndex}:{type:"reorder",index:0}}getStackChildHitTarget(e,r,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,r,o)){const d=o.top+o.height/2;return{type:"stack-child-reorder",position:r<d?"above":"below"}}const a=this.getSourceRemainingSiblingRect(s.geometry);if(a&&te(e,r,a)){const d=a.top+a.height/2;return{type:"stack-child-reorder",position:r<d?"above":"below"}}return{type:"stack-child-extract",toIndex:this.getTopLevelReorderIndexForPointer(e,r,s,n)}}getSourceRemainingSiblingRect(e){var n,o;if(!((n=this.active)!=null&&n.parentStackId))return;const r=ii(this.active.baseLayout,this.active.parentStackId);if(!r)return;const s=r.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 r=e.find(a=>{var c;return a.id===((c=this.active)==null?void 0:c.parentStackId)});if(r)return this.active.sourceStackRect=r.rect,r.rect;const s=ii(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,r,s,n){var y,k,D;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 N of o){const V=N.rect;if(!te(e,r,V))continue;const ge=this.resolveTopLevelTargetForCard(e,r,N,N.logicalIndex,c);if(ge)return ge;if(!c&&((k=this.active)!=null&&k.hitTarget))return this.active.hitTarget}const h=this.getNearestTargetableZone(e,o);if(!h)return{type:"reorder",index:((D=this.active)==null?void 0:D.sourceIndex)??0};const d=Math.max(h.rect.left,Math.min(h.rect.left+h.rect.width,e)),p=this.resolveTopLevelTargetForCard(d,r,h,h.logicalIndex,c);if(p)return p;const m=h.rect.left+h.rect.width/2;return{type:"reorder",index:e<m?h.logicalIndex:h.logicalIndex+1}}getTopLevelReorderIndexForPointer(e,r,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,r,p.rect))continue;const m=Rt(p.rect,Wt["reorder-before"]);if(te(e,r,m))return p.logicalIndex;const y=Rt(p.rect,Wt["reorder-after"]);if(te(e,r,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,r){const s=new Map(r.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,r,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,r,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,r){let s=null,n=Number.POSITIVE_INFINITY;for(const o of r){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,r,s){return e>=s.left&&e<=s.left+s.width&&r>=s.top&&r<=s.top+s.height}}const si=120,Co=80,ni=.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(i){this.awaitingFreshWheelGesture=!0,this.lastWheelEventAt=i,this.activeGestureType="none"}reset(){this.awaitingFreshWheelGesture=!1,this.lastWheelEventAt=Number.NEGATIVE_INFINITY,this.lastWheelDeltaX=0,this.activeGestureType="none",this.lastWheelGestureAt=Number.NEGATIVE_INFINITY}decide(i){const{now:e,shiftKey:r,deltaX:s,deltaY:n,overArtifactContent:o,artifactCanScrollUp:a,artifactCanScrollDown:c}=i;e-this.lastWheelGestureAt>=si&&(this.activeGestureType="none");const d=r&&n!==0,p=d?n:s,m=n>0?c:n<0?a:!1;if(this.activeGestureType==="vertical-artifact"&&o&&m)return this.lastWheelGestureAt=e,{type:"scroll-native"};if(this.activeGestureType==="horizontal-filmstrip"&&Math.abs(p)>=ni)return this.lastWheelGestureAt=e,this.lastWheelEventAt=e,this.lastWheelDeltaX=p,{type:"scroll-horizontal",horizontalDelta:p};if(Math.abs(p)<ni)return o&&m&&(this.activeGestureType="vertical-artifact"),this.lastWheelGestureAt=e,{type:"scroll-native"};if(!d&&o&&m&&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),D=Math.sign(p),N=k!==0&&D!==0&&k!==D,V=k!==0&&Math.abs(p)>=Math.abs(this.lastWheelDeltaX)+Co;return this.lastWheelEventAt=e,this.lastWheelDeltaX=p,this.lastWheelGestureAt=e,this.awaitingFreshWheelGesture&&y<si&&!N&&!V?{type:"ignore"}:(this.awaitingFreshWheelGesture=!1,this.activeGestureType="horizontal-filmstrip",{type:"scroll-horizontal",horizontalDelta:p})}}const Po=2,oi=1e3,lt=1e-4;function ai(t,i,e){if(t===0)return 0;const r=i.toPixels(M({y:W})).y??0;return(e-r)/Po}class Lo 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 Do extends HTMLElement{constructor(){super();l(this,"_layout",[]);l(this,"_scrollPosition",0);l(this,"layoutGrid",null);l(this,"layoutScroll",new io(M({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",()=>v``);l(this,"onDragControllerChange",()=>{this.dragController.status==="idle"&&(this.dragState=null,this.dragTrackOffsetXPx=0,this.previousProjectedLayoutForOffset=null),this.scheduleRender()});l(this,"onDragControllerDrag",e=>{const r=ri(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,r,e.nodeId,e.source.parentId,n,this.dragTrackOffsetXPx):0,this.previousProjectedLayoutForOffset=r,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 r=this.wheelGesture.decide({now:Date.now(),shiftKey:e.shiftKey,deltaX:e.deltaX,deltaY:e.deltaY,overArtifactContent:!1,artifactCanScrollDown:!1,artifactCanScrollUp:!1});if(r.type!=="scroll-horizontal")return;e.preventDefault(),this.syncScrollModel();const s=this.layoutGrid;if(!s)return;this.animateNextRender=!1;const n=s.toUnits(P({x:r.horizontalDelta}));this.layoutScroll.wheel(M({x:n.x??0}))});l(this,"handlePointerDown",e=>{if(e.button!==0||this.dragController.status!=="idle")return;const r=e.target;if(!(r instanceof Element))return;const s=r.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 r=Math.max(0,e-this.lastDragFrameTime)/oi;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,r);this.scrollVelocityPxPerSec=r>lt?Math.abs(o)/r: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=M({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=M({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,r){return new jn({basis:P({x:se,y:se}),min:P({x:Nr,y:Nr}),viewport:P({x:e,y:r}),gap:P({x,y:x})})}syncScrollModel(){const e=this.clientWidth>0?this.clientWidth:Z,r=this.clientHeight>0?this.clientHeight:ye,n=we(this._layout).nodes.map(a=>a.width),o=`${e}x${r}:${n.join(",")}`;o===this.scrollModelKey&&this.layoutGrid||(this.scrollModelKey=o,this.layoutGrid=this.createGrid(e,r),this.layoutScroll.rebuild({grid:this.layoutGrid,nodeWidths:n.map(a=>M({x:a}))}))}emitScrollPositionChanged(e){this.dispatchEvent(new Lo(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:ri(this.dragState.projectedLayout),activePlaceholderId:this.dragState.nodeId,placeholdersById:e}}render(){const e=this.clientWidth>0?this.clientWidth:Z,r=this.clientHeight>0?this.clientHeight:ye,s=this.createGrid(e,r);this.layoutGrid=s;const n=this.getDisplayModel(),o=n.layout,a=this.dragController.status==="active",c=we(o),h=c.nodes.map(C=>C.width),d=To(o),p=`${e}x${r}:${h.join(",")}`;!a&&p!==this.scrollModelKey&&(this.scrollModelKey=p,this.layoutScroll.rebuild({grid:s,nodeWidths:h.map(C=>M({x:C}))}),this._scrollPosition=this.layoutScroll.scroll.x??this._scrollPosition);const m=Mo(o),y=s.unit.x??se,k=s.unit.y??se,D=a?this.dragTrackOffsetXPx:0,N=(this.layoutScroll.translate.x??0)+D,V=ai(c.nodes.length,s,r),ge=this.animateNextRender&&!a,rt=[`transform: translate(${N}px, ${V}px);`,`transition-duration: ${ge?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};L(v`
112
+ <div class="track" style=${rt}>
113
+ ${c.nodes.map((C,Ee)=>v`
114
+ <div
115
+ class="node"
116
+ layout-node=${String(Ee)}
117
+ data-layout-node-id=${C.id}
118
+ data-layout-placeholder=${String(n.activePlaceholderId===C.id)}
119
+ layout-node-cols=${String(C.width)}
120
+ style=${`grid-template-columns: repeat(${C.width}, var(--layout-unit-x)); width: ${s.toPixels(M({x:C.width})).x}px;`}
121
+ >
122
+ ${C.cards.map(I=>{const Et=n.placeholdersById.get(I.id);if(A&&Et)return v`
123
+ <div
124
+ class="card-slot card-placeholder"
125
+ data-layout-placeholder-for=${A.nodeId}
126
+ data-layout-placeholder-ghost="false"
127
+ data-layout-source-stack=${A.source.parentId??""}
128
+ style=${`grid-column: ${I.col} / span ${I.width}; grid-row: ${I.row} / span ${I.height};`}
129
+ ></div>
130
+ `;const it=m.get(I.id);if(!it)return null;const ds=(C.type==="card"&&I.id===C.id||d.has(I.id))&&(!A||C.id!==n.activePlaceholderId);return v`
131
+ <div
132
+ class="card-slot"
133
+ data-layout-card-id=${I.artifactID}
134
+ data-layout-draggable=${String(ds)}
135
+ data-layout-node-id=${I.id}
136
+ layout-cols=${String(I.width)}
137
+ layout-rows=${String(I.height)}
138
+ style=${`grid-column: ${I.col} / span ${I.width}; grid-row: ${I.row} / span ${I.height};`}
139
+ >
140
+ ${this.renderContent(it)}
141
+ </div>
142
+ `})}
143
+ </div>
144
+ `)}
145
+ </div>
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 v`
147
+ <div
148
+ class="drag-preview"
149
+ data-layout-preview-card-id=${A.nodeId}
150
+ style=${[`width: ${C.width}px;`,`height: ${C.height}px;`,`left: ${Ee-Et}px;`,`top: ${I-it}px;`].join(" ")}
151
+ >
152
+ ${this.renderDraggedPreview(A.nodeId)}
153
+ </div>
154
+ `})():null}
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 r=this.clampPointerToViewport(this.lastPointerX,this.lastPointerY,e);(r.x!==this.lastPointerX||r.y!==this.lastPointerY)&&this.syncDragTarget(r.x,r.y,e)}syncDragTarget(e,r,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:r}),viewport:{left:s.left,top:s.top,width:s.width,height:s.height},geometry:c,effectiveVelocity:Math.max(this.pointerVelocityPxPerSec,this.scrollVelocityPxPerSec)})}resetMotionTracking(e,r){this.pointerVelocityPxPerSec=0,this.scrollVelocityPxPerSec=0,this.motionSampleTime=performance.now(),this.motionSampleX=e,this.motionSampleY=r}clearMotionTracking(){this.pointerVelocityPxPerSec=0,this.scrollVelocityPxPerSec=0,this.motionSampleTime=0}updatePointerVelocity(e,r){this.samplePointerVelocityAt(performance.now(),e,r)}samplePointerVelocityAt(e,r,s){if(this.motionSampleTime===0){this.motionSampleTime=e,this.motionSampleX=r,this.motionSampleY=s,this.pointerVelocityPxPerSec=0;return}const n=e-this.motionSampleTime;if(n<100)return;const o=r-this.motionSampleX;this.pointerVelocityPxPerSec=Math.abs(o)/n*oi,this.motionSampleTime=e,this.motionSampleX=r,this.motionSampleY=s}clampPointerToViewport(e,r,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,r))}}isPointerOutsideViewport(e,r,s){return e<s.left||e>s.left+s.width||r<s.top||r>s.top+s.height}getDragEdgeScrollDeltaPixels(e,r,s){var h;const n=r.left+st,o=r.left+r.width-st,a=((h=this.layoutGrid)==null?void 0:h.unit.x)??se,c=Ms*a;if(e<n){const d=Math.max(0,Math.min(1,(n-e)/st));return-(c*d**Or)*s}if(e>o){const d=Math.max(0,Math.min(1,(e-o)/st));return c*d**Or*s}return 0}measureLayoutGeometry(e,r,s=0){const n=this.layoutGrid;if(!n)return[];const o=we(e),a=new Map(o.nodes.map(k=>[k.id,k.width])),c=n.toPixels(M({y:W})).y??ye,h=this.clientHeight>0?this.clientHeight:ye,d=(this.layoutScroll.translate.x??0)+s,p=ai(o.nodes.length,n,h),m=[];let y=d;for(const k of e){const D=a.get(k.id)??z,N=n.toPixels(M({x:D})).x??Z,V={left:y,top:p,width:N,height:c};m.push({id:k.id,rect:V}),y+=N+x}return m}getPlaceholderPixelSize(e,r,s,n){if(!r)return n;for(const o of e.nodes)for(const a of o.cards)if(a.id===r)return{width:s.toPixels(M({x:a.width})).x??n.width,height:s.toPixels(M({y:a.height})).y??n.height};return n}renderDraggedPreview(e){const r=_r(this._layout,e);return r?this.renderContent(r):v``}shouldApplyTrackOffset(e,r){if(r)return!0;for(const s of e){if(s.type!=="stack")continue;if(s.children.some(o=>o.type==="drop-target")&&r!==s.id)return!0}return!1}computeDragTrackOffset(e,r,s,n,o,a){if(!e)return a;const c=n?o??this.getStableAnchorCardId(e,r,s):this.getStableAnchorNodeId(e,r,s);if(!c)return a;const h=n?li(e,c,this.layoutGrid):hi(e,c,this.layoutGrid),d=n?li(r,c,this.layoutGrid):hi(r,c,this.layoutGrid);return h===null||d===null?a:a+(h-d)}getStableAnchorCardId(e,r,s){const n=ci(e),o=new Set(ci(r));for(const a of n)if(a!==s&&o.has(a))return a;return null}getStableAnchorNodeId(e,r,s){const n=new Set(r.map(o=>o.id));for(const o of e)if(o.id!==s&&n.has(o.id))return o.id;return null}getStackChildAnchorCardId(e,r){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!==r);return(n==null?void 0:n.id)??null}}function Mo(t){const i=new Map;for(const e of t){if(e.type==="card"){i.set(e.id,e);continue}for(const r of e.children)if(r.type==="card")i.set(r.id,r);else for(const s of r.children)i.set(s.id,s)}return i}function $o(t,i){const e=t.findIndex(r=>r.type==="card"&&r.id===i);if(e!==-1)return{topLevelIndex:e};for(let r=0;r<t.length;r+=1){const s=t[r];if(!(!s||s.type!=="stack")&&s.children.some(n=>n.type==="card"&&n.id===i))return{topLevelIndex:r,sourceStackId:s.id}}return null}function To(t){const i=new Set;for(const e of t)if(e.type==="stack")for(const r of e.children)r.type==="card"&&i.add(r.id);return i}function ci(t){const i=[];for(const e of t){if(e.type==="card"){i.push(e.id);continue}if(e.type==="stack"){const r=e.children.find(s=>s.type==="card");r&&i.push(r.id)}}return i}function li(t,i,e){if(!e)return null;const r=we(t),s=new Map(r.nodes.map(o=>[o.id,o.width]));let n=0;for(const o of t){if(o.type==="card"&&o.id===i||o.type==="stack"&&o.children.some(h=>h.type==="card"&&h.id===i))return n;const a=s.get(o.id)??z,c=e.toPixels(M({x:a})).x??Z;n+=c+x}return null}function hi(t,i,e){if(!e)return null;const r=we(t),s=new Map(r.nodes.map(o=>[o.id,o.width]));let n=0;for(const o of t){if(o.id===i)return n;const a=s.get(o.id)??z,c=e.toPixels(M({x:a})).x??Z;n+=c+x}return null}customElements.get("layout-view")||customElements.define("layout-view",Do);class Wo extends HTMLElement{constructor(){super(...arguments);l(this,"workspaceService",H.resolve("WorkspaceService"));l(this,"handleWorkspaceChange",()=>{this.render()});l(this,"handleCloseArtifact",e=>{e instanceof Ji&&this.workspaceService.removeArtifact(e.artifactID)});l(this,"handleScrollPositionChanged",e=>{const r=e;typeof r.scrollPosition=="number"&&Number.isFinite(r.scrollPosition)&&this.workspaceService.setScrollPosition(r.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,r=(e==null?void 0:e.layout)??[],s=this.buildArtifactMap();if(r.length===0){L(v`<p data-testid="empty-workspace">No artifacts yet.</p>`,this);return}L(v`
156
+ <layout-view
157
+ .layout=${r}
158
+ .renderContent=${o=>{const a=s.get(o.artifactID);return a?v`<artifact-view
159
+ .artifact=${a}
160
+ .artifactURL=${this.workspaceService.getArtifactURL(o.artifactID)}
161
+ ></artifact-view>`:v``}}
162
+ .scrollPosition=${this.workspaceService.scrollPosition}
163
+ @scroll=${this.handleScrollPositionChanged}
164
+ @layout-change=${this.handleLayoutChanged}
165
+ @close-artifact=${this.handleCloseArtifact}
166
+ ></layout-view>
167
+ `,this)}}customElements.define("workspace-view",Wo);const Ot=fe();class Ro extends HTMLElement{constructor(){super(...arguments);l(this,"workspaceService",H.resolve("WorkspaceService"));l(this,"serverManager",H.resolve("ServerManager"));l(this,"handleChange",()=>{this.render()})}connectedCallback(){this.render(),this.workspaceService.addEventListener("change",this.handleChange),this.serverManager.addEventListener("change",this.handleChange)}disconnectedCallback(){this.workspaceService.removeEventListener("change",this.handleChange),this.serverManager.removeEventListener("change",this.handleChange)}handleSelect(e){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 Ot("edit-workspace",{bubbles:!0,composed:!0})))}handleCreateWorkspace(e){this.closeDropdown(),this.dispatchEvent(new Ot("create-workspace",{serverURL:e,bubbles:!0,composed:!0}))}handleDeleteWorkspace(){this.workspaceService.activeWorkspace&&(this.closeDropdown(),this.dispatchEvent(new Ot("delete-workspace",{bubbles:!0,composed:!0})))}render(){var s;const e=((s=this.workspaceService.activeWorkspace)==null?void 0:s.name)??"No workspaces",r=[...this.serverManager.servers.values()].map(n=>({...n,sortedWorkspaces:[...n.workspaces.values()].sort((o,a)=>o.name.localeCompare(a.name,void 0,{sensitivity:"base"}))}));L(v`
168
+ <dropdown-menu
169
+ title=${e}
170
+ @select=${n=>this.handleSelect(n)}
171
+ >
172
+ <button
173
+ slot="trigger"
174
+ trigger
175
+ type="button"
176
+ aria-label="Choose workspace"
177
+ ></button>
178
+ ${r.map(n=>v`
179
+ <dropdown-group>
180
+ <dropdown-label>${n.name}</dropdown-label>
181
+ ${n.sortedWorkspaces.map(o=>this.renderWorkspaceItem(o))}
182
+ <dropdown-item
183
+ action
184
+ @click=${()=>this.handleCreateWorkspace(n.url)}
185
+ >
186
+ + New workspace
187
+ </dropdown-item>
188
+ </dropdown-group>
189
+ `)}
190
+ ${this.workspaceService.activeWorkspace?v`
191
+ <dropdown-divider></dropdown-divider>
192
+ <dropdown-group>
193
+ <dropdown-item
194
+ action
195
+ @click=${()=>this.handleEditWorkspace()}
196
+ >
197
+ Edit workspace...
198
+ </dropdown-item>
199
+ <dropdown-item
200
+ action
201
+ danger
202
+ @click=${()=>this.handleDeleteWorkspace()}
203
+ >
204
+ Delete workspace...
205
+ </dropdown-item>
206
+ </dropdown-group>
207
+ `:null}
208
+ </dropdown-menu>
209
+ `,this)}renderWorkspaceItem(e){var s;const r=e.id===this.workspaceService.activeWorkspaceID?((s=this.workspaceService.activeWorkspace)==null?void 0:s.name)??e.name:e.name;return v`
210
+ <dropdown-item
211
+ value=${e.id}
212
+ ?selected=${e.id===this.workspaceService.activeWorkspaceID}
213
+ >
214
+ ${r}
215
+ </dropdown-item>
216
+ `}}customElements.define("workspace-picker",Ro);class ns extends HTMLElement{constructor(){super(...arguments);l(this,"workspaceService",H.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 r=e.currentTarget,s=new FormData(r),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",r=this._mode==="edit"?"Save":this.createPending?"Creating...":"Create",s=this._mode==="edit"?((n=this.workspaceService.activeWorkspace)==null?void 0:n.name)??"":"";L(v`
217
+ <modal-overlay ?open=${this.open}>
218
+ <section class="workspace-modal">
219
+ <form class="workspace-form" @submit=${o=>void this.handleSubmit(o)}>
220
+ <h2 class="workspace-modal-title">${e}</h2>
221
+ <label class="settings-field">
222
+ <span>Name</span>
223
+ <input type="text" name="name" .value=${s} required />
224
+ </label>
225
+ <div class="workspace-form-actions">
226
+ <button type="submit" class="settings-submit-button" ?disabled=${this.createPending}>
227
+ ${r}
228
+ </button>
229
+ <button type="button" class="settings-cancel-button" @click=${()=>this.emitClose()}>
230
+ Cancel
231
+ </button>
232
+ </div>
233
+ </form>
234
+ </section>
235
+ </modal-overlay>
236
+ `,this)}}l(ns,"observedAttributes",["open"]);customElements.define("workspace-form-modal",ns);class os extends HTMLElement{constructor(){super(...arguments);l(this,"workspaceService",H.resolve("WorkspaceService"));l(this,"serverManager",H.resolve("ServerManager"));l(this,"handleChange",()=>{this.render()});l(this,"deletePending",!1);l(this,"deleteError",null)}get open(){return this.hasAttribute("open")}attributeChangedCallback(e,r,s){e==="open"&&(s!==null&&r===null&&(this.deletePending=!1,this.deleteError=null),this.render())}connectedCallback(){this.render(),this.workspaceService.addEventListener("change",this.handleChange),this.serverManager.addEventListener("change",this.handleChange)}disconnectedCallback(){this.workspaceService.removeEventListener("change",this.handleChange),this.serverManager.removeEventListener("change",this.handleChange)}emitClose(){this.dispatchEvent(new Event("close",{bubbles:!0}))}async handleDeleteWorkspace(){this.deletePending=!0,this.deleteError=null,this.render();try{await this.workspaceService.deleteWorkspace(),this.emitClose()}catch(e){this.deletePending=!1,this.deleteError=e instanceof Error?e.message:String(e),this.render()}}render(){var r;const e=this.workspaceService.activeWorkspaceServerURL!==null&&this.workspaceService.activeWorkspaceServerURL!==this.serverManager.localServerURL;L(v`
237
+ <modal-overlay ?open=${this.open}>
238
+ <section class="workspace-modal workspace-delete-modal">
239
+ <div class="workspace-form">
240
+ <h2 class="workspace-modal-title">Delete workspace</h2>
241
+ <p class="workspace-delete-copy">
242
+ Delete <strong>${((r=this.workspaceService.activeWorkspace)==null?void 0:r.name)??""}</strong>?
243
+ </p>
244
+ ${e?v`<p class="workspace-delete-warning">This will delete it for everyone.</p>`:null}
245
+ ${this.deleteError?v`<p class="workspace-delete-error">${this.deleteError}</p>`:null}
246
+ <div class="workspace-form-actions">
247
+ <button
248
+ type="button"
249
+ class="settings-server-remove-button"
250
+ ?disabled=${this.deletePending}
251
+ @click=${()=>void this.handleDeleteWorkspace()}
252
+ >
253
+ ${this.deletePending?"Deleting...":"Delete"}
254
+ </button>
255
+ <button
256
+ type="button"
257
+ class="settings-cancel-button"
258
+ ?disabled=${this.deletePending}
259
+ @click=${()=>this.emitClose()}
260
+ >
261
+ Cancel
262
+ </button>
263
+ </div>
264
+ </div>
265
+ </section>
266
+ </modal-overlay>
267
+ `,this)}}l(os,"observedAttributes",["open"]);customElements.define("workspace-delete-modal",os);class as extends HTMLElement{constructor(){super(...arguments);l(this,"serverManager",H.resolve("ServerManager"));l(this,"handleChange",()=>{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.addEventListener("change",this.handleChange)}disconnectedCallback(){this.serverManager.removeEventListener("change",this.handleChange)}emitClose(){this.dispatchEvent(new Event("close",{bubbles:!0}))}openAddServerForm(){this.addServerFormOpen=!0,this.render()}closeAddServerForm(){this.addServerFormOpen&&(this.addServerFormOpen=!1,this.render())}handleAddServer(e){e.preventDefault();const r=e.currentTarget,s=new FormData(r),n=String(s.get("name")??"").trim(),o=String(s.get("url")??"").trim();!n||!o||(this.serverManager.addServer(o,n),this.addServerFormOpen=!1,r.reset(),this.render())}render(){const e=[...this.serverManager.servers.values()];L(v`
268
+ <modal-overlay ?open=${this.open}>
269
+ <section class="settings-panel">
270
+ <panel-view closable @close=${r=>r instanceof Yi&&this.emitClose()}>
271
+ <panel-page id="main" title="Settings">
272
+ <div class="settings-section">
273
+ <h3 class="settings-section-title">Servers</h3>
274
+ <div class="settings-server-list">
275
+ ${e.map(r=>v`
276
+ <div class="settings-card settings-server">
277
+ <div class="settings-server-details">
278
+ <div class="settings-server-name">${r.name}</div>
279
+ <div class="settings-server-url">${r.url}</div>
280
+ </div>
281
+ ${r.url!==this.serverManager.localServerURL?v`
282
+ <button
283
+ type="button"
284
+ class="settings-server-remove-button"
285
+ aria-label=${`Remove ${r.name}`}
286
+ @click=${()=>this.serverManager.removeServer(r.url)}
287
+ >
288
+ Remove
289
+ </button>
290
+ `:null}
291
+ </div>
292
+ `)}
293
+ </div>
294
+ ${this.addServerFormOpen?v`
295
+ <form class="settings-card settings-add-server-form" @submit=${r=>this.handleAddServer(r)}>
296
+ <label class="settings-field">
297
+ <span>Name</span>
298
+ <input type="text" name="name" required />
299
+ </label>
300
+ <label class="settings-field">
301
+ <span>URL</span>
302
+ <input type="url" name="url" required />
303
+ </label>
304
+ <div class="settings-form-actions">
305
+ <button type="submit" class="settings-submit-button">Connect</button>
306
+ <button
307
+ type="button"
308
+ class="settings-cancel-button"
309
+ data-action="cancel-connect-form"
310
+ @click=${()=>this.closeAddServerForm()}
311
+ >
312
+ Cancel
313
+ </button>
314
+ </div>
315
+ </form>
316
+ `:v`
317
+ <button
318
+ type="button"
319
+ class="settings-submit-button settings-connect-button"
320
+ data-action="show-connect-form"
321
+ @click=${()=>this.openAddServerForm()}
322
+ >
323
+ + Connect to server
324
+ </button>
325
+ `}
326
+ </div>
327
+ </panel-page>
328
+ </panel-view>
329
+ </section>
330
+ </modal-overlay>
331
+ `,this)}}l(as,"observedAttributes",["open"]);customElements.define("settings-modal",as);class cs extends Event{constructor(e){super("auth-submit",{bubbles:!0,composed:!0});l(this,"token");this.token=e}}class No 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 r=e.currentTarget;this._tokenValue=r.value}handleSubmit(e){e.preventDefault();const r=this._tokenValue.trim();r&&this.dispatchEvent(new cs(r))}render(){L(v`
332
+ <modal-overlay open>
333
+ <section class="auth-modal">
334
+ <form class="auth-form" @submit=${e=>this.handleSubmit(e)}>
335
+ <h2 class="auth-modal-title">Enter access token</h2>
336
+ <p class="auth-modal-copy">This Television server requires a token.</p>
337
+ <label class="settings-field">
338
+ <span>Token</span>
339
+ <input
340
+ class=${this.invalid?"auth-token-input-invalid":""}
341
+ type="password"
342
+ name="token"
343
+ .value=${this.tokenValue}
344
+ @input=${e=>this.handleInput(e)}
345
+ required
346
+ />
347
+ </label>
348
+ <button type="submit" class="settings-submit-button">Connect</button>
349
+ </form>
350
+ </section>
351
+ </modal-overlay>
352
+ `,this)}}customElements.get("auth-modal")||customElements.define("auth-modal",No);class Oo extends HTMLElement{constructor(){super(...arguments);l(this,"runtimeServerURL",Ti());l(this,"electronMode",Wi());l(this,"serverManager",H.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 r=e instanceof cs?e.token:e instanceof CustomEvent&&typeof((s=e.detail)==null?void 0:s.token)=="string"?e.detail.token:null;r&&this.handleAuthSubmit(r)}),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 qt({url:this.runtimeServerURL,name:"Server",token:kn()});this.serverManager.add(e),this.serverManager.setActive(e);try{await e.connect(),this.connectError=null}catch(r){this.connectError=r instanceof Error&&!(r instanceof Kt)?r.message:null}this.render()}async handleAuthSubmit(e){const r=this.serverManager.activeServer;if(r){this.connectError=null,r.token=e,this.updateTokenQueryParam(e);try{await r.connect()}catch(s){s instanceof Kt||(this.connectError=s instanceof Error?s.message:String(s))}this.render()}}updateTokenQueryParam(e){const r=new URL(window.location.href);r.searchParams.set("token",e),window.history.replaceState({},"",`${r.pathname}${r.search}${r.hash}`)}render(){const e=this.serverManager.activeServer,r=(e==null?void 0:e.status)??null;if(r==="connecting"){L(v`
353
+ <main class="auth-gate"><p>Connecting...</p></main>
354
+ `,this);return}if(r==="disconnected"){const n=e;if(!n)return;L(v`
355
+ <main class="auth-gate">
356
+ <auth-modal
357
+ .invalid=${!!n.token}
358
+ .tokenValue=${n.token??""}
359
+ ></auth-modal>
360
+ </main>
361
+ `,this);return}const s=v`
362
+ <header>
363
+ <nav>
364
+ <workspace-picker
365
+ @edit-workspace=${()=>{this.modals.workspaceForm={open:!0,mode:"edit"},this.render()}}
366
+ @create-workspace=${n=>{this.modals.workspaceForm={open:!0,mode:"create",targetServerURL:n.serverURL},this.render()}}
367
+ @delete-workspace=${()=>{this.modals.deleteWorkspace={open:!0},this.render()}}
368
+ ></workspace-picker>
369
+ </nav>
370
+ <button
371
+ type="button"
372
+ variant="toolbar"
373
+ size="sm"
374
+ aria-label="Settings"
375
+ @click=${()=>{this.modals.settings={open:!this.modals.settings.open},this.render()}}
376
+ >
377
+ ${Nn({size:16,weight:"bold"})}
378
+ </button>
379
+ </header>
380
+ <main>
381
+ ${this.connectError?v`<p data-testid="auth-error">${this.connectError}</p>`:v`<workspace-view></workspace-view>`}
382
+ </main>
383
+ <workspace-form-modal
384
+ ?open=${this.modals.workspaceForm.open}
385
+ .mode=${this.modals.workspaceForm.mode}
386
+ .targetServerURL=${this.modals.workspaceForm.targetServerURL}
387
+ @close=${()=>{this.modals.workspaceForm={open:!1,mode:"edit"},this.render()}}
388
+ ></workspace-form-modal>
389
+ <workspace-delete-modal
390
+ ?open=${this.modals.deleteWorkspace.open}
391
+ @close=${()=>{this.modals.deleteWorkspace={open:!1},this.render()}}
392
+ ></workspace-delete-modal>
393
+ <settings-modal
394
+ ?open=${this.modals.settings.open}
395
+ @close=${()=>{this.modals.settings={open:!1},this.render()}}
396
+ ></settings-modal>
397
+ `;L(s,this)}}customElements.get("television-app")||customElements.define("television-app",Oo);const xr=Wi(),Er=Ti(),ls=hn(xr?"television-electron":"television-browser",Er),Ar=new gn({clientStore:ls,localServerURL:Er}),hs=new Us({clientStore:ls,serverManager:Ar});H.register("ServerManager",()=>Ar);H.register("WorkspaceService",()=>hs);Ar.addEventListener("server-message",t=>{hs.handleServerEvent(t.serverURL,t.message)});const Cr=document.createElement("television-app");Cr.runtimeServerURL=Er;Cr.electronMode=xr;xr&&document.body.classList.add("electron");document.body.appendChild(Cr);