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