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