@rtc-agent/component 0.2.7-rc.0 → 0.2.7-rc.1
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/assets/{shared-worker-BEaT-a-g.js → shared-worker-DNuUtKfr.js} +126 -126
- package/dist/{en-US-CZGit-aT.js → en-US-BGk4hy6U.js} +1 -1
- package/dist/{highlight-languages-DRPkpsxS.js → highlight-languages-CXfOsoHk.js} +1 -1
- package/dist/{index-Dt_DFLw-.js → index-D2-aTNVT.js} +43 -11
- package/dist/index.js +1 -1
- package/dist/index.umd.js +28 -4
- package/dist/stats.html +1 -1
- package/package.json +5 -5
package/dist/index.umd.js
CHANGED
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
* @license
|
|
61
61
|
* Copyright 2022 Google LLC
|
|
62
62
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
63
|
-
*/function Ar({context:t,subscribe:e}){return(r,n)=>{typeof n=="object"?n.addInitializer(function(){new zx(this,{context:t,callback:i=>{r.set.call(this,i)},subscribe:e})}):r.constructor.addInitializer(i=>{new zx(i,{context:t,callback:s=>{i[n]=s},subscribe:e})})}}const n5="0.2.
|
|
63
|
+
*/function Ar({context:t,subscribe:e}){return(r,n)=>{typeof n=="object"?n.addInitializer(function(){new zx(this,{context:t,callback:i=>{r.set.call(this,i)},subscribe:e})}):r.constructor.addInitializer(i=>{new zx(i,{context:t,callback:s=>{i[n]=s},subscribe:e})})}}const n5="0.2.7-rc.1",i5=Or`
|
|
64
64
|
:host {
|
|
65
65
|
display: block;
|
|
66
66
|
/* Position controlled by JS (left/top) for interact.js compatibility */
|
|
@@ -138,6 +138,30 @@
|
|
|
138
138
|
right: 0;
|
|
139
139
|
}
|
|
140
140
|
|
|
141
|
+
/* ── Embedded mode overrides ──
|
|
142
|
+
*
|
|
143
|
+
* When embedded, the component fills its parent container instead of the viewport.
|
|
144
|
+
* This uses position:relative so it participates in the parent's flex/grid layout,
|
|
145
|
+
* unlike the default position:fixed which fills the viewport.
|
|
146
|
+
*/
|
|
147
|
+
:host([data-embedded]) {
|
|
148
|
+
position: relative !important;
|
|
149
|
+
width: 100% !important;
|
|
150
|
+
height: 100% !important;
|
|
151
|
+
min-width: 0 !important;
|
|
152
|
+
min-height: 0 !important;
|
|
153
|
+
max-width: 100% !important;
|
|
154
|
+
max-height: 100% !important;
|
|
155
|
+
inset: auto !important;
|
|
156
|
+
left: auto !important;
|
|
157
|
+
top: auto !important;
|
|
158
|
+
right: auto !important;
|
|
159
|
+
bottom: auto !important;
|
|
160
|
+
border-radius: 0 !important;
|
|
161
|
+
box-shadow: none !important;
|
|
162
|
+
z-index: 0 !important;
|
|
163
|
+
}
|
|
164
|
+
|
|
141
165
|
/* ── Minimized ── */
|
|
142
166
|
:host([data-mode='minimized']) {
|
|
143
167
|
/* 与 logo 同构的圆角方形:圆角比例 = 290/1250 = 23.2% */
|
|
@@ -600,7 +624,7 @@
|
|
|
600
624
|
`):r=e;try{yield this._writer.write(r)}catch{this.close()}})}}const P5=[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,-1,-1,-1,-1,-1,-1,-1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,-1,-1,-1,-1,36,-1,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,-1,-1,-1,63,-1];class C5{constructor(e){this.a=e,this.pos=0}haveBytes(){return this.pos<this.a.length}getByte(){const e=this.a[this.pos];if(this.pos++,this.pos>this.a.length)throw new RangeError("out of bounds");return e}getChar(){return String.fromCharCode(this.getByte())}getInt(){let e=0,r;for(;this.haveBytes()&&(r=P5[127&this.getByte()])>=0;)e=(e<<6)+r;return this.pos--,e>>>0}}class k5{constructor(){this.a=[]}toByteArray(e){return Array.isArray(e)?this.a:new Uint8Array(this.a)}putArray(e,r,n){for(let i=r;i<n;i++)this.a.push(e[i])}}function I5(t){let e=0,r=0,n=0,i=0,s=0,a=t.length;for(;a>=16;)e=e+t[s+0]|0,r=r+t[s+1]|0,n=n+t[s+2]|0,i=i+t[s+3]|0,e=e+t[s+4]|0,r=r+t[s+5]|0,n=n+t[s+6]|0,i=i+t[s+7]|0,e=e+t[s+8]|0,r=r+t[s+9]|0,n=n+t[s+10]|0,i=i+t[s+11]|0,e=e+t[s+12]|0,r=r+t[s+13]|0,n=n+t[s+14]|0,i=i+t[s+15]|0,s+=16,a-=16;for(;a>=4;)e=e+t[s+0]|0,r=r+t[s+1]|0,n=n+t[s+2]|0,i=i+t[s+3]|0,s+=4,a-=4;switch(i=((i+(n<<8)|0)+(r<<16)|0)+(e<<24)|0,a){case 3:i=i+(t[s+2]<<8)|0;case 2:i=i+(t[s+1]<<16)|0;case 1:i=i+(t[s+0]<<24)|0}return i>>>0}function O5(t,e){let r=0;const n=new C5(e),i=t.length,s=e.length,a=n.getInt();if(n.getChar()!==`
|
|
601
625
|
`)throw new Error("size integer not terminated by '\\n'");const l=new k5;for(;n.haveBytes();){const c=n.getInt();let u;switch(n.getChar()){case"@":if(u=n.getInt(),n.haveBytes()&&n.getChar()!==",")throw new Error("copy command not terminated by ','");if(r+=c,r>a)throw new Error("copy exceeds output file size");if(u+c>i)throw new Error("copy extends past end of input");l.putArray(t,u,u+c);break;case":":if(r+=c,r>a)throw new Error("insert command gives an output larger than predicted");if(c>s)throw new Error("insert count exceeds size of delta");l.putArray(n.a,n.pos,n.pos+c),n.pos+=c;break;case";":{const d=l.toByteArray(t);if(c!==I5(d))throw new Error("bad checksum");if(r!==a)throw new Error("generated size does not match predicted size");return d}default:throw new Error("unknown delta operator")}}throw new Error("unterminated delta")}class s2{name(){return"json"}encodeCommands(e){return e.map(r=>JSON.stringify(r)).join(`
|
|
602
626
|
`)}decodeReplies(e){return e.trim().split(`
|
|
603
|
-
`).map(r=>JSON.parse(r))}applyDeltaIfNeeded(e,r){let n,i,s,a;if(e.delta){a=!0;const l=new TextEncoder().encode(e.data),c=O5(r,l);n=JSON.parse(new TextDecoder().decode(c)),i=c,s=l.length}else a=!1,n=JSON.parse(e.data),i=new TextEncoder().encode(e.data),s=i.length;return{newData:n,newPrevValue:i,isDelta:a,wireBytes:s,fullBytes:i.length}}}const N5={headers:{},token:"",getToken:null,data:null,getData:null,debug:!1,name:"js",version:"",fetch:null,readableStream:null,websocket:null,eventsource:null,sockjs:null,sockjsOptions:{},emulationEndpoint:"/emulation",minReconnectDelay:500,maxReconnectDelay:2e4,timeout:5e3,maxServerPingDelay:1e4,networkEventTarget:null};class go extends Error{constructor(e){super(e),this.name=this.constructor.name}}class Vg extends n2{constructor(e,r){super(),this._reconnectTimeout=null,this._refreshTimeout=null,this._serverPingTimeout=null,this.state=fi.Disconnected,this._transportIsOpen=!1,this._endpoint=e,this._emulation=!1,this._transports=[],this._currentTransportIndex=0,this._triedAllTransports=!1,this._transportWasOpen=!1,this._transport=null,this._transportId=0,this._deviceWentOffline=!1,this._transportClosed=!0,this._codec=new s2,this._reconnecting=!1,this._reconnectTimeout=null,this._reconnectAttempts=0,this._client=null,this._session="",this._node="",this._subs={},this._serverSubs={},this._commandId=0,this._commands=[],this._batching=!1,this._refreshRequired=!1,this._refreshTimeout=null,this._callbacks={},this._token="",this._data=null,this._dispatchPromise=Promise.resolve(),this._serverPing=0,this._serverPingTimeout=null,this._sendPong=!1,this._promises={},this._promiseId=0,this._debugEnabled=!1,this._networkEventsSet=!1,this._config=Object.assign(Object.assign({},N5),r),this._configure(),this._debugEnabled?(this.on("state",n=>{this._debug("client state",n.oldState,"->",n.newState)}),this.on("error",n=>{this._debug("client error",n)})):this.on("error",function(){Function.prototype()})}newSubscription(e,r){if(this.getSubscription(e)!==null)throw new Error("Subscription to the channel "+e+" already exists");const n=new x5(this,e,r);return this._subs[e]=n,n}newMapSubscription(e,r){if(this.getSubscription(e)!==null)throw new Error("Subscription to the channel "+e+" already exists");const n=new Ug(this,e,{token:r==null?void 0:r.token,getToken:r==null?void 0:r.getToken,data:r==null?void 0:r.data,minResubscribeDelay:r==null?void 0:r.minResubscribeDelay,maxResubscribeDelay:r==null?void 0:r.maxResubscribeDelay,delta:r==null?void 0:r.delta,tagsFilter:r==null?void 0:r.tagsFilter,map:!0,mapPageSize:r==null?void 0:r.pageSize,mapUnrecoverableStrategy:r==null?void 0:r.unrecoverableStrategy});return this._subs[e]=n,n}newMapClientsSubscription(e,r){if(this.getSubscription(e)!==null)throw new Error("Subscription to the channel "+e+" already exists");const n=new Ug(this,e,{token:r==null?void 0:r.token,getToken:r==null?void 0:r.getToken,data:r==null?void 0:r.data,minResubscribeDelay:r==null?void 0:r.minResubscribeDelay,maxResubscribeDelay:r==null?void 0:r.maxResubscribeDelay,delta:r==null?void 0:r.delta,tagsFilter:r==null?void 0:r.tagsFilter,map:!0,mapPresenceType:2,mapPageSize:r==null?void 0:r.pageSize,mapUnrecoverableStrategy:r==null?void 0:r.unrecoverableStrategy});return this._subs[e]=n,n}newMapUsersSubscription(e,r){if(this.getSubscription(e)!==null)throw new Error("Subscription to the channel "+e+" already exists");const n=new Ug(this,e,{token:r==null?void 0:r.token,getToken:r==null?void 0:r.getToken,data:r==null?void 0:r.data,minResubscribeDelay:r==null?void 0:r.minResubscribeDelay,maxResubscribeDelay:r==null?void 0:r.maxResubscribeDelay,delta:r==null?void 0:r.delta,tagsFilter:r==null?void 0:r.tagsFilter,map:!0,mapPresenceType:3,mapPageSize:r==null?void 0:r.pageSize,mapUnrecoverableStrategy:r==null?void 0:r.unrecoverableStrategy});return this._subs[e]=n,n}newSharedPollSubscription(e,r){if(this.getSubscription(e)!==null)throw new Error("Subscription to the channel "+e+" already exists");const n=new S5(this,e,{token:r==null?void 0:r.token,getToken:r==null?void 0:r.getToken,data:r==null?void 0:r.data,minResubscribeDelay:r==null?void 0:r.minResubscribeDelay,maxResubscribeDelay:r==null?void 0:r.maxResubscribeDelay,delta:r==null?void 0:r.delta,sharedPoll:!0,sharedPollGetSignature:r==null?void 0:r.getSignature});return this._subs[e]=n,n}getSubscription(e){return this._getSub(e)}getMapSubscription(e){return this._getSub(e)}getSharedPollSubscription(e){return this._getSub(e)}removeSubscription(e){e&&(e.state!==Gi.Unsubscribed&&e.unsubscribe(),this._removeSubscription(e))}removeMapSubscription(e){this.removeSubscription(e)}removeSharedPollSubscription(e){this.removeSubscription(e)}subscriptions(){return this._subs}mapSubscriptions(){const e={};for(const[r,n]of Object.entries(this._subs))n.type==="map"&&(e[r]=n);return e}sharedPollSubscriptions(){const e={};for(const[r,n]of Object.entries(this._subs))n.type==="shared_poll"&&(e[r]=n);return e}ready(e){return pi(this,void 0,void 0,function*(){switch(this.state){case fi.Disconnected:throw{code:hn.clientDisconnected,message:"client disconnected"};case fi.Connected:return;default:return new Promise((r,n)=>{const i={resolve:r,reject:n};e&&(i.timeout=setTimeout(()=>{n({code:hn.timeout,message:"timeout"})},e)),this._promises[this._nextPromiseId()]=i})}})}connect(){if(this._isConnected()){this._debug("connect called when already connected");return}if(this._isConnecting()){this._debug("connect called when already connecting");return}this._debug("connect called"),this._reconnectAttempts=0,this._startConnecting()}disconnect(){this._disconnect(Wc.disconnectCalled,"disconnect called",!1)}setToken(e){this._token=e}setData(e){this._data=e}setHeaders(e){this._config.headers=e}send(e){return pi(this,void 0,void 0,function*(){const r={send:{data:e}};if(yield this._methodCall(),!this._transportSendCommands([r]))throw this._createErrorObject(hn.transportWriteError,"transport write error")})}rpc(e,r){return pi(this,void 0,void 0,function*(){const n={rpc:{method:e,data:r}};return yield this._methodCall(),{data:(yield this._callPromise(n,s=>s.rpc)).data}})}publish(e,r){return pi(this,void 0,void 0,function*(){const n={publish:{channel:e,data:r}};return yield this._methodCall(),yield this._callPromise(n,()=>({})),{}})}mapPublish(e,r,n){return pi(this,void 0,void 0,function*(){const i={publish:{channel:e,type:1,key:r,data:n}};return yield this._methodCall(),yield this._callPromise(i,()=>({})),{}})}mapRemove(e,r){return pi(this,void 0,void 0,function*(){const n={publish:{channel:e,type:1,key:r,removed:!0}};return yield this._methodCall(),yield this._callPromise(n,()=>({})),{}})}history(e,r){return pi(this,void 0,void 0,function*(){const n={history:this._getHistoryRequest(e,r)};yield this._methodCall();const i=yield this._callPromise(n,a=>a.history),s=[];if(i.publications)for(let a=0;a<i.publications.length;a++)s.push(this._getPublicationContext(e,i.publications[a]));return{publications:s,epoch:i.epoch||"",offset:i.offset||0}})}presence(e){return pi(this,void 0,void 0,function*(){const r={presence:{channel:e}};yield this._methodCall();const i=(yield this._callPromise(r,s=>s.presence)).presence;for(const s in i)if(Object.prototype.hasOwnProperty.call(i,s)){const a=i[s],l=a.conn_info,c=a.chan_info;l&&(a.connInfo=l),c&&(a.chanInfo=c)}return{clients:i}})}presenceStats(e){return pi(this,void 0,void 0,function*(){const r={presence_stats:{channel:e}};yield this._methodCall();const n=yield this._callPromise(r,i=>i.presence_stats);return{numUsers:n.num_users,numClients:n.num_clients}})}startBatching(){this._batching=!0}stopBatching(){const e=this;Promise.resolve().then(function(){Promise.resolve().then(function(){e._batching=!1,e._flush()})})}_debug(...e){this._debugEnabled&&g5("debug",e)}_codecName(){return this._codec.name()}_formatOverride(){}_configure(){if(!("Promise"in globalThis))throw new Error("Promise polyfill required");if(!this._endpoint)throw new Error("endpoint configuration required");if(this._config.token!==null&&(this._token=this._config.token),this._config.data!==null&&(this._data=this._config.data),this._codec=new s2,this._formatOverride(),(this._config.debug===!0||_5("centrifuge.debug"))&&(this._debugEnabled=!0),this._debug("config",this._config),typeof this._endpoint!="string")if(Array.isArray(this._endpoint)){this._transports=this._endpoint,this._emulation=!0;for(const e in this._transports)if(this._transports.hasOwnProperty(e)){const r=this._transports[e];if(!r.endpoint||!r.transport)throw new Error("malformed transport configuration");const n=r.transport;if(["websocket","http_stream","sse","sockjs","webtransport"].indexOf(n)<0)throw new Error("unsupported transport name: "+n)}}else throw new Error("unsupported url configuration type: only string or array of objects are supported")}_setState(e){if(this.state!==e){this._reconnecting=!1;const r=this.state;return this.state=e,this.emit("state",{newState:e,oldState:r}),!0}return!1}_isDisconnected(){return this.state===fi.Disconnected}_isConnecting(){return this.state===fi.Connecting}_isConnected(){return this.state===fi.Connected}_nextCommandId(){return++this._commandId}_setNetworkEvents(){if(this._networkEventsSet)return;let e=null;this._config.networkEventTarget!==null?e=this._config.networkEventTarget:typeof globalThis.addEventListener<"u"&&(e=globalThis),e&&(e.addEventListener("offline",()=>{this._debug("offline event triggered"),(this.state===fi.Connected||this.state===fi.Connecting)&&(this._disconnect(yo.transportClosed,"transport closed",!0),this._deviceWentOffline=!0)}),e.addEventListener("online",()=>{this._debug("online event triggered"),this.state===fi.Connecting&&(this._deviceWentOffline&&!this._transportClosed&&(this._deviceWentOffline=!1,this._transportClosed=!0),this._clearReconnectTimeout(),this._startReconnecting())}),this._networkEventsSet=!0)}_getReconnectDelay(){const e=jl(this._reconnectAttempts,this._config.minReconnectDelay,this._config.maxReconnectDelay);return this._reconnectAttempts+=1,e}_clearOutgoingRequests(){for(const e in this._callbacks)if(this._callbacks.hasOwnProperty(e)){const r=this._callbacks[e];clearTimeout(r.timeout);const n=r.errback;if(!n)continue;n({error:this._createErrorObject(hn.connectionClosed,"connection closed")})}this._callbacks={}}_clearConnectedState(){this._client=null,this._clearServerPingTimeout(),this._clearRefreshTimeout();for(const e in this._subs){if(!this._subs.hasOwnProperty(e))continue;const r=this._subs[e];r.state===Gi.Subscribed&&r._setSubscribing(bf.transportClosed,"transport closed")}for(const e in this._serverSubs)this._serverSubs.hasOwnProperty(e)&&this.emit("subscribing",{channel:e})}_handleWriteError(e){for(const r of e){const n=r.id;if(!(n in this._callbacks))continue;const i=this._callbacks[n];clearTimeout(this._callbacks[n].timeout),delete this._callbacks[n];const s=i.errback;s({error:this._createErrorObject(hn.transportWriteError,"transport write error")})}}_transportSendCommands(e){if(!e.length)return!0;if(!this._transport)return!1;try{this._transport.send(this._codec.encodeCommands(e),this._session,this._node)}catch(r){return this._debug("error writing commands",r),this._handleWriteError(e),!1}return!0}_advanceTransportIndex(){this._currentTransportIndex++,this._currentTransportIndex>=this._transports.length&&(this._triedAllTransports=!0,this._currentTransportIndex=0)}_initializeTransport(){let e;this._config.websocket!==null?e=this._config.websocket:typeof globalThis.WebSocket!="function"&&typeof globalThis.WebSocket!="object"||(e=globalThis.WebSocket);let r=null;this._config.sockjs!==null?r=this._config.sockjs:typeof globalThis.SockJS<"u"&&(r=globalThis.SockJS);let n=null;this._config.eventsource!==null?n=this._config.eventsource:typeof globalThis.EventSource<"u"&&(n=globalThis.EventSource);let i=null;this._config.fetch!==null?i=this._config.fetch:typeof globalThis.fetch<"u"&&(i=globalThis.fetch);let s=null;if(this._config.readableStream!==null?s=this._config.readableStream:typeof globalThis.ReadableStream<"u"&&(s=globalThis.ReadableStream),this._emulation){this._currentTransportIndex>=this._transports.length&&(this._triedAllTransports=!0,this._currentTransportIndex=0);let _=0;for(;;){if(_>=this._transports.length)throw new Error("no supported transport found");const k=this._transports[this._currentTransportIndex],A=k.transport,P=k.endpoint;if(A==="websocket"){if(this._debug("trying websocket transport"),this._transport=new i2(P,{websocket:e}),!this._transport.supported()){this._debug("websocket transport not available"),this._advanceTransportIndex(),_++;continue}}else if(A==="webtransport"){if(this._debug("trying webtransport transport"),this._transport=new A5(P,{webtransport:globalThis.WebTransport,decoder:this._codec,encoder:this._codec}),!this._transport.supported()){this._debug("webtransport transport not available"),this._advanceTransportIndex(),_++;continue}}else if(A==="http_stream"){if(this._debug("trying http_stream transport"),this._transport=new T5(P,{fetch:i,readableStream:s,emulationEndpoint:this._config.emulationEndpoint,decoder:this._codec,encoder:this._codec}),!this._transport.supported()){this._debug("http_stream transport not available"),this._advanceTransportIndex(),_++;continue}}else if(A==="sse"){if(this._debug("trying sse transport"),this._transport=new E5(P,{eventsource:n,fetch:i,emulationEndpoint:this._config.emulationEndpoint}),!this._transport.supported()){this._debug("sse transport not available"),this._advanceTransportIndex(),_++;continue}}else if(A==="sockjs"){if(this._debug("trying sockjs"),this._transport=new w5(P,{sockjs:r,sockjsOptions:this._config.sockjsOptions}),!this._transport.supported()){this._debug("sockjs transport not available"),this._advanceTransportIndex(),_++;continue}}else throw new Error("unknown transport "+A);break}}else{if(y5(this._endpoint,"http"))throw new Error("Provide explicit transport endpoints configuration in case of using HTTP (i.e. using array of TransportEndpoint instead of a single string), or use ws(s):// scheme in an endpoint if you aimed using WebSocket transport");if(this._debug("client will use websocket"),this._transport=new i2(this._endpoint,{websocket:e}),!this._transport.supported())throw new Error("WebSocket constructor not found, make sure it is available globally or passed as a dependency in Centrifuge options")}const a=this,l=this._transport,c=this._nextTransportId();a._debug("id of transport",c);let u=!1;const d=[];if(this._transport.emulation()){const _=a._sendConnect(!0);d.push(_)}this._setNetworkEvents();const m=this._codec.encodeCommands(d);this._transportClosed=!1;let y;y=setTimeout(function(){l.close()},this._config.timeout),this._transport.initialize(this._codecName(),{onOpen:function(){if(y&&(clearTimeout(y),y=null),a._transportId!=c){a._debug("open callback from non-actual transport"),l.close();return}u=!0,a._debug(l.subName(),"transport open"),!l.emulation()&&(a._transportIsOpen=!0,a._transportWasOpen=!0,a.startBatching(),a._sendConnect(!1),a._sendSubscribeCommands(),a.stopBatching(),a.emit("__centrifuge_debug:connect_frame_sent",{}))},onError:function(_){if(a._transportId!=c){a._debug("error callback from non-actual transport");return}a._debug("transport level error",_)},onClose:function(_){if(y&&(clearTimeout(y),y=null),a._transportId!=c){a._debug("close callback from non-actual transport");return}a._debug(l.subName(),"transport closed"),a._transportClosed=!0,a._transportIsOpen=!1;let k="connection closed",A=!0,P=0;if(_&&"code"in _&&_.code&&(P=_.code),_&&_.reason)try{const O=JSON.parse(_.reason);k=O.reason,A=O.reconnect}catch{k=_.reason,(P>=3500&&P<4e3||P>=4500&&P<5e3)&&(A=!1)}P<3e3?(P===1009?(P=Wc.messageSizeLimit,k="message size limit exceeded",A=!1):(P=yo.transportClosed,k="transport closed"),a._emulation&&!a._transportWasOpen&&a._advanceTransportIndex()):a._transportWasOpen=!0,a._isConnecting()&&!u&&a.emit("error",{type:"transport",error:{code:hn.transportClosed,message:"transport closed"},transport:l.name()}),a._reconnecting=!1,a._disconnect(P,k,A)},onMessage:function(_){a._dataReceived(_)}},m),a.emit("__centrifuge_debug:transport_initialized",{})}_sendConnect(e){const r=this._constructConnectCommand(),n=this;return this._call(r,e).then(i=>{const s=i.reply.connect;n._connectResponse(s),i.next&&i.next()},i=>{n._connectError(i.error),i.next&&i.next()}),r}_startReconnecting(){if(this._debug("start reconnecting"),!this._isConnecting()){this._debug("stop reconnecting: client not in connecting state");return}if(this._reconnecting){this._debug("reconnect already in progress, return from reconnect routine");return}if(this._transportClosed===!1){this._debug("waiting for transport close");return}this._reconnecting=!0;const e=this._token==="";if(!(this._refreshRequired||e&&this._config.getToken!==null)){this._config.getData?this._config.getData().then(i=>{this._isConnecting()&&(this._data=i,this._initializeTransport())}).catch(i=>this._handleGetDataError(i)):this._initializeTransport();return}const n=this;this._getToken().then(function(i){if(n._isConnecting()){if(i==null||i==null){n._failUnauthorized();return}n._token=i,n._debug("connection token refreshed"),n._config.getData?n._config.getData().then(function(s){n._isConnecting()&&(n._data=s,n._initializeTransport())}).catch(s=>n._handleGetDataError(s)):n._initializeTransport()}}).catch(function(i){if(!n._isConnecting())return;if(i instanceof go){n._failUnauthorized();return}n.emit("error",{type:"connectToken",error:{code:hn.clientConnectToken,message:i!==void 0?i.toString():""}});const s=n._getReconnectDelay();n._debug("error on getting connection token, reconnect after "+s+" milliseconds",i),n._reconnecting=!1,n._reconnectTimeout=setTimeout(()=>{n._startReconnecting()},s)})}_handleGetDataError(e){if(e instanceof go){this._failUnauthorized();return}this.emit("error",{type:"connectData",error:{code:hn.badConfiguration,message:(e==null?void 0:e.toString())||""}});const r=this._getReconnectDelay();this._debug("error on getting connect data, reconnect after "+r+" milliseconds",e),this._reconnecting=!1,this._reconnectTimeout=setTimeout(()=>{this._startReconnecting()},r)}_connectError(e){this.state===fi.Connecting&&(e.code===109&&(this._refreshRequired=!0),e.code<100||e.temporary===!0||e.code===109?(this.emit("error",{type:"connect",error:e}),this._debug("closing transport due to connect error"),this._disconnect(e.code,e.message,!0)):this._disconnect(e.code,e.message,!1))}_scheduleReconnect(){if(!this._isConnecting())return;let e=!1;this._emulation&&!this._transportWasOpen&&!this._triedAllTransports&&(e=!0);let r=this._getReconnectDelay();e&&(r=0),this._debug("reconnect after "+r+" milliseconds"),this._clearReconnectTimeout(),this._reconnectTimeout=setTimeout(()=>{this._startReconnecting()},r)}_constructConnectCommand(){const e={};this._token&&(e.token=this._token),this._data&&(e.data=this._data),this._config.name&&(e.name=this._config.name),this._config.version&&(e.version=this._config.version),Object.keys(this._config.headers).length>0&&(e.headers=this._config.headers);const r={};let n=!1;for(const i in this._serverSubs)if(this._serverSubs.hasOwnProperty(i)&&this._serverSubs[i].recoverable){n=!0;const s={recover:!0};this._serverSubs[i].offset&&(s.offset=this._serverSubs[i].offset),this._serverSubs[i].epoch&&(s.epoch=this._serverSubs[i].epoch),r[i]=s}return n&&(e.subs=r),{connect:e}}_getHistoryRequest(e,r){const n={channel:e};return r!==void 0&&(r.since&&(n.since={offset:r.since.offset},r.since.epoch&&(n.since.epoch=r.since.epoch)),r.limit!==void 0&&(n.limit=r.limit),r.reverse===!0&&(n.reverse=!0)),n}_methodCall(){return this._isConnected()?Promise.resolve():new Promise((e,r)=>{const n=setTimeout(function(){r({code:hn.timeout,message:"timeout"})},this._config.timeout);this._promises[this._nextPromiseId()]={timeout:n,resolve:e,reject:r}})}_callPromise(e,r){return new Promise((n,i)=>{this._call(e,!1).then(s=>{var a;const l=r(s.reply);n(l),(a=s.next)===null||a===void 0||a.call(s)},s=>{var a;i(s.error),(a=s.next)===null||a===void 0||a.call(s)})})}_dataReceived(e){this._serverPing>0&&this._waitServerPing();const r=this._codec.decodeReplies(e);this._dispatchPromise=this._dispatchPromise.then(()=>{let n;this._dispatchPromise=new Promise(i=>{n=i}),this._dispatchSynchronized(r,n)})}_dispatchSynchronized(e,r){let n=Promise.resolve();for(const i in e)e.hasOwnProperty(i)&&(n=n.then(()=>this._dispatchReply(e[i])));n.then(()=>{r()})}_dispatchReply(e){let r;const n=new Promise(s=>{r=s});if(e==null)return this._debug("dispatch: got undefined or null reply"),r(),n;const i=e.id;return i&&i>0?this._handleReply(e,r):e.push?this._handlePush(e.push,r):this._handleServerPing(r),n}_call(e,r){return new Promise((n,i)=>{e.id=this._nextCommandId(),this._registerCall(e.id,n,i),r||this._addCommand(e)})}_startConnecting(){this._debug("start connecting"),this._setState(fi.Connecting)&&this.emit("connecting",{code:yo.connectCalled,reason:"connect called"}),this._client=null,this._startReconnecting()}_disconnect(e,r,n){if(e===Wc.stateInvalidated){this._token="",this._refreshRequired=!0;for(const l in this._subs)this._subs.hasOwnProperty(l)&&this._subs[l]._invalidateState();for(const l in this._serverSubs)this._serverSubs.hasOwnProperty(l)&&(this._serverSubs[l].offset=0,this._serverSubs[l].epoch="_")}if(this._isDisconnected())return;this._transportIsOpen=!1;const i=this.state;this._reconnecting=!1;const s={code:e,reason:r};let a;if(n?a=this._setState(fi.Connecting):(a=this._setState(fi.Disconnected),this._rejectPromises({code:hn.clientDisconnected,message:"disconnected"})),this._clearOutgoingRequests(),i===fi.Connecting&&this._clearReconnectTimeout(),i===fi.Connected&&this._clearConnectedState(),a&&(this._isConnecting()?this.emit("connecting",s):this.emit("disconnected",s)),this._transport){this._debug("closing existing transport");const l=this._transport;this._transport=null,l.close(),this._transportClosed=!0,this._nextTransportId()}else this._debug("no transport to close");this._scheduleReconnect()}_failUnauthorized(){this._disconnect(Wc.unauthorized,"unauthorized",!1)}_getToken(){return this._debug("get connection token"),this._config.getToken?this._config.getToken({}):(this.emit("error",{type:"configuration",error:{code:hn.badConfiguration,message:"token expired but no getToken function set in the configuration"}}),Promise.reject(new go("")))}_refresh(){const e=this._client,r=this;this._getToken().then(function(n){if(e!==r._client)return;if(!n){r._failUnauthorized();return}if(r._token=n,r._debug("connection token refreshed"),!r._isConnected())return;const i={refresh:{token:r._token}};r._call(i,!1).then(s=>{const a=s.reply.refresh;r._refreshResponse(a),s.next&&s.next()},s=>{r._refreshError(s.error),s.next&&s.next()})}).catch(function(n){if(r._isConnected()){if(n instanceof go){r._failUnauthorized();return}r.emit("error",{type:"refreshToken",error:{code:hn.clientRefreshToken,message:n!==void 0?n.toString():""}}),r._refreshTimeout=setTimeout(()=>r._refresh(),r._getRefreshRetryDelay())}})}_refreshError(e){e.code<100||e.temporary===!0?(this.emit("error",{type:"refresh",error:e}),this._refreshTimeout=setTimeout(()=>this._refresh(),this._getRefreshRetryDelay())):this._disconnect(e.code,e.message,!1)}_getRefreshRetryDelay(){return jl(0,5e3,1e4)}_refreshResponse(e){this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null),e.expires&&(this._client=e.client,this._refreshTimeout=setTimeout(()=>this._refresh(),Td(e.ttl)))}_removeSubscription(e){e!==null&&delete this._subs[e.channel]}_unsubscribe(e){if(!this._transportIsOpen)return Promise.resolve();const n={unsubscribe:{channel:e.channel}},i=this;return new Promise((a,l)=>{this._call(n,!1).then(c=>{a(),c.next&&c.next()},c=>{a(),c.next&&c.next(),i._disconnect(yo.unsubscribeError,"unsubscribe error",!0)})})}_getSub(e,r){if(r&&r>0){for(const i in this._subs)if(this._subs.hasOwnProperty(i)){const s=this._subs[i];if(s._id===r)return s}return null}const n=this._subs[e];return n||null}_isServerSub(e){return this._serverSubs[e]!==void 0}_sendSubscribeCommands(){const e=[];for(const r in this._subs){if(!this._subs.hasOwnProperty(r))continue;const n=this._subs[r];if(n._inflight!==!0&&n.state===Gi.Subscribing){const i=n._subscribe();i&&e.push(i)}}return e}_connectResponse(e){if(this._transportIsOpen=!0,this._transportWasOpen=!0,this._reconnectAttempts=0,this._refreshRequired=!1,this._isConnected())return;this._client=e.client,this._setState(fi.Connected),this._refreshTimeout&&clearTimeout(this._refreshTimeout),e.expires&&(this._refreshTimeout=setTimeout(()=>this._refresh(),Td(e.ttl))),this._session=e.session,this._node=e.node,this.startBatching(),this._sendSubscribeCommands(),this.stopBatching();const r={client:e.client,transport:this._transport.subName()};e.data&&(r.data=e.data),this.emit("connected",r),this._resolvePromises(),this._processServerSubs(e.subs||{}),e.ping&&e.ping>0?(this._serverPing=e.ping*1e3,this._sendPong=e.pong===!0,this._waitServerPing()):this._serverPing=0}_processServerSubs(e){for(const r in e){if(!e.hasOwnProperty(r))continue;const n=e[r];this._serverSubs[r]={offset:n.offset,epoch:n.epoch,recoverable:n.recoverable||!1};const i=this._getSubscribeContext(r,n);this.emit("subscribed",i)}for(const r in e){if(!e.hasOwnProperty(r))continue;const n=e[r];if(n.recovered){const i=n.publications;if(i&&i.length>0)for(const s in i)i.hasOwnProperty(s)&&this._handlePublication(r,i[s])}}for(const r in this._serverSubs)this._serverSubs.hasOwnProperty(r)&&(e[r]||(this.emit("unsubscribed",{channel:r}),delete this._serverSubs[r]))}_clearRefreshTimeout(){this._refreshTimeout!==null&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null)}_clearReconnectTimeout(){this._reconnectTimeout!==null&&(clearTimeout(this._reconnectTimeout),this._reconnectTimeout=null)}_clearServerPingTimeout(){this._serverPingTimeout!==null&&(clearTimeout(this._serverPingTimeout),this._serverPingTimeout=null)}_waitServerPing(){this._config.maxServerPingDelay!==0&&this._isConnected()&&(this._clearServerPingTimeout(),this._serverPingTimeout=setTimeout(()=>{this._isConnected()&&this._disconnect(yo.noPing,"no ping",!0)},this._serverPing+this._config.maxServerPingDelay))}_getSubscribeContext(e,r){const n={channel:e,positioned:!1,recoverable:!1,wasRecovering:!1,recovered:!1,hasRecoveredPublications:!1};r.recovered&&(n.recovered=!0),r.positioned&&(n.positioned=!0),r.recoverable&&(n.recoverable=!0),r.was_recovering&&(n.wasRecovering=!0);let i="";"epoch"in r&&(i=r.epoch);let s=0;return"offset"in r&&(s=r.offset),(n.positioned||n.recoverable)&&(n.streamPosition={offset:s,epoch:i}),Array.isArray(r.publications)&&r.publications.length>0&&(n.hasRecoveredPublications=!0),r.data&&(n.data=r.data),n}_handleReply(e,r){const n=e.id;if(!(n in this._callbacks)){r();return}const i=this._callbacks[n];if(clearTimeout(this._callbacks[n].timeout),delete this._callbacks[n],v5(e)){const s=i.errback;if(!s){r();return}const a={code:e.error.code,message:e.error.message||"",temporary:e.error.temporary||!1};s({error:a,next:r})}else{const s=i.callback;if(!s)return;s({reply:e,next:r})}}_handleJoin(e,r,n){const i=this._getSub(e,n);if(!i){if(e&&this._isServerSub(e)){const s={channel:e,info:this._getJoinLeaveContext(r.info)};this.emit("join",s)}return}i._handleJoin(r)}_handleLeave(e,r,n){const i=this._getSub(e,n);if(!i){if(e&&this._isServerSub(e)){const s={channel:e,info:this._getJoinLeaveContext(r.info)};this.emit("leave",s)}return}i._handleLeave(r)}_handleUnsubscribe(e,r){const n=this._getSub(e,0);if(!n&&e){this._isServerSub(e)&&(delete this._serverSubs[e],this.emit("unsubscribed",{channel:e}));return}r.code<2500?n._setUnsubscribed(r.code,r.reason,!1):(r.code===Sd.stateInvalidated&&n._invalidateState(),n._setSubscribing(r.code,r.reason))}_handleSubscribe(e,r){this._serverSubs[e]={offset:r.offset,epoch:r.epoch,recoverable:r.recoverable||!1},this.emit("subscribed",this._getSubscribeContext(e,r))}_handleDisconnect(e){const r=e.code;let n=!0;(r>=3500&&r<4e3||r>=4500&&r<5e3)&&(n=!1),this._disconnect(r,e.reason,n)}_getPublicationContext(e,r){const n={channel:e,data:r.data};return r.offset&&(n.offset=r.offset),r.info&&(n.info=this._getJoinLeaveContext(r.info)),r.tags&&(n.tags=r.tags),n}_getJoinLeaveContext(e){const r={client:e.client,user:e.user},n=e.conn_info;n&&(r.connInfo=n);const i=e.chan_info;return i&&(r.chanInfo=i),r}_handlePublication(e,r,n){const i=this._getSub(e,n);if(!i){if(e&&this._isServerSub(e)){const s=this._getPublicationContext(e,r);this.emit("publication",s),r.offset!==void 0&&(this._serverSubs[e].offset=r.offset)}return}i._handlePublication(r)}_handleMessage(e){this.emit("message",{data:e.data})}_handleServerPing(e){if(this._sendPong){const r={};this._transportSendCommands([r])}e()}_handlePush(e,r){const n=e.channel,i=e.id;e.pub?this._handlePublication(n,e.pub,i):e.message?this._handleMessage(e.message):e.join?this._handleJoin(n,e.join,i):e.leave?this._handleLeave(n,e.leave,i):e.unsubscribe?this._handleUnsubscribe(n,e.unsubscribe):e.subscribe?this._handleSubscribe(n,e.subscribe):e.disconnect&&this._handleDisconnect(e.disconnect),r()}_flush(){const e=this._commands.slice(0);this._commands=[],this._transportSendCommands(e)}_createErrorObject(e,r,n){const i={code:e,message:r};return n&&(i.temporary=!0),i}_registerCall(e,r,n){this._callbacks[e]={callback:r,errback:n,timeout:null},this._callbacks[e].timeout=setTimeout(()=>{delete this._callbacks[e],qg(n)&&n({error:this._createErrorObject(hn.timeout,"timeout")})},this._config.timeout)}_addCommand(e){this._batching?this._commands.push(e):this._transportSendCommands([e])}_nextPromiseId(){return++this._promiseId}_nextTransportId(){return++this._transportId}_resolvePromises(){for(const e in this._promises)this._promises.hasOwnProperty(e)&&(this._promises[e].timeout&&clearTimeout(this._promises[e].timeout),this._promises[e].resolve(),delete this._promises[e])}_rejectPromises(e){for(const r in this._promises)this._promises.hasOwnProperty(r)&&(this._promises[r].timeout&&clearTimeout(this._promises[r].timeout),this._promises[r].reject(e),delete this._promises[r])}}Vg.SubscriptionState=Gi,Vg.State=fi,Vg.UnauthorizedError=go;const a2={debug:0,info:1,warn:2,error:3};let D5="debug";function ar(t){const e=r=>a2[r]>=a2[D5];return{debug(...r){e("debug")&&console.debug(`[${t}]`,...r)},info(...r){e("info")&&console.info(`[${t}]`,...r)},warn(...r){e("warn")&&console.warn(`[${t}]`,...r)},error(...r){e("error")&&console.error(`[${t}]`,...r)}}}class o2{constructor(e){fr(this,"serverUrl");fr(this,"redirectUri");fr(this,"timeout");this.serverUrl=e.serverUrl.replace(/\/$/,""),this.redirectUri=e.redirectUri,this.timeout=e.timeout??1e4}async getProviders(){return(await(await this.fetchWithTimeout("/oauth2/providers")).json()).providers}async getAuthorizationUrl(e){const r=new URLSearchParams({provider:e,redirect_uri:this.redirectUri});return await(await this.fetchWithTimeout(`/oauth2/authorize?${r}`)).json()}async exchangeToken(e,r,n,i,s){const a={code:e,state:r,redirect_uri:this.redirectUri,device_id:n??"",device_name:i,user_agent:s};return await(await this.fetchWithTimeout("/oauth2/token",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)})).json()}async refreshToken(e){return await(await this.fetchWithTimeout("/oauth2/refresh",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refresh_token:e})})).json()}async fetchWithTimeout(e,r){const n=`${this.serverUrl}${e}`,i=new AbortController,s=setTimeout(()=>i.abort(),this.timeout);try{const a=await fetch(n,{...r,signal:i.signal});if(!a.ok){const l=await a.text().catch(()=>"Unknown error");throw new Error(`OAuth2 API error ${a.status}: ${l}`)}return a}finally{clearTimeout(s)}}}const M5={BASE_URL:"./",DEV:!1,MODE:"production",PROD:!0,SSR:!1},R5=ar("AuthConfig");let zg=null,Ed=null;function B5(t){zg=t&&t.length>0?t.replace(/\/+$/,""):null}function L5(t){if(!t||t.length===0){Ed=null;return}t.startsWith("/")?Ed=`${window.location.origin}${t}`:Ed=t.replace(/\/+$/,"")}function l2(){if(zg)return zg;try{const t=M5;if(t!=null&&t.VITE_SERVER_URL)return t.VITE_SERVER_URL}catch(t){R5.debug("import.meta.env not available, using default server URL:",t)}return"http://localhost:28080"}const rl={get serverUrl(){return l2()},get wsEndpoint(){return l2().replace(/^http/,"ws")+"/connection/websocket"},get redirectUri(){return Ed||`${window.location.origin}/auth/callback.html`},refreshBufferMs:5*60*1e3},wn={tokens:"rtc_auth_tokens",deviceId:"rtc_device_id",deviceName:"rtc_device_name",oauthState:"rtc_oauth_state",mode:"rtc_mode",windowState:"rtc_window_state",sessionTreeExpanded:"rtc_session_tree_expanded",activityBar:"rtc_activity_bar",editorArea:"rtc_editor_area",settings:"rtc_settings",inputAreaHeight:"rtc_input_area_height"},c2=ar("WindowStateController");class F5{constructor(e,r){this._state={...a5},this._restored=!1,this._boundOnViewportResize=()=>this._handleViewportResize(),this.host=e,this._config=r??{defaultMode:"normal",initialPosition:{x:-1,y:-1},initialSize:{width:420,height:640},minWidth:350,minHeight:520,maxWidth:1/0,maxHeight:1/0,draggable:!0,resizable:!0,showMinimize:!0,showMaximize:!0,showClose:!1,embedded:!1,bubblePosition:{corner:"bottom-right",offset:{x:-20,y:20}}},this.host.addController(this),this.actions={setMode:n=>this._setMode(n),setPosition:n=>this._updateState({position:n}),setSize:n=>this._updateState({size:n}),maximize:()=>this._setMode("maximized"),minimize:()=>this._setMode("minimized"),restore:()=>this._setMode("normal")},this._restoreState()}get value(){return{state:this._state,actions:this.actions}}get restored(){return this._restored}setConfig(e){this._config=e,this._restored||(this._state={...this._state,mode:e.defaultMode},this.host.requestUpdate())}get config(){return this._config}hostConnected(){window.addEventListener("resize",this._boundOnViewportResize)}hostDisconnected(){window.removeEventListener("resize",this._boundOnViewportResize)}_handleViewportResize(){var d;const{mode:e}=this._state;if(e==="maximized")return;if(e==="minimized"){this.host.requestUpdate();return}const r=window.innerWidth,n=window.innerHeight,{position:i,size:s}=this._state,a=20;if(r<s.width+2*a||n<s.height+2*a){(d=this.onViewportTooSmall)==null||d.call(this);return}let l=i.x,c=i.y,u=!1;l+s.width>r-a&&(l=r-s.width-a,u=!0),c+s.height>n-a&&(c=n-s.height-a,u=!0),l<a&&(l=a,u=!0),c<a&&(c=a,u=!0),u&&this._updateState({position:{x:l,y:c}})}_restoreState(){var e,r,n,i;try{const s=localStorage.getItem(wn.windowState);if(!s){this._state={...this._state,mode:this._config.defaultMode};return}const a=JSON.parse(s);a.mode&&((e=a.position)==null?void 0:e.x)!=null&&((r=a.position)==null?void 0:r.y)!=null&&((n=a.size)==null?void 0:n.width)!=null&&((i=a.size)==null?void 0:i.height)!=null?(this._state={...a,lastState:void 0},this._restored=!0,this._clampToViewport()):this._state={...this._state,mode:this._config.defaultMode}}catch(s){c2.debug("Failed to restore window state:",s),this._state={...this._state,mode:this._config.defaultMode}}}_clampToViewport(){const e=window.innerWidth,r=window.innerHeight,{position:n,size:i,mode:s}=this._state;if(s==="maximized")return;const a=Math.min(i.width,e),l=Math.min(i.height,r),c=Math.max(0,Math.min(n.x,e-a)),u=Math.max(0,Math.min(n.y,r-l));this._state={...this._state,position:{x:c,y:u},size:{width:a,height:l}}}_persistState(){try{const{mode:e,position:r,size:n}=this._state,i={mode:e,position:r,size:n};localStorage.setItem(wn.windowState,JSON.stringify(i))}catch(e){c2.debug("Failed to persist window state:",e)}}_setMode(e){const r=this._state;let n=r.lastState;e==="normal"&&!n?n=this._calculateInitialWindowState():e!=="normal"&&(n={position:{...r.position},size:{...r.size}}),this._state={...r,mode:e,lastState:n},this._persistState(),this.host.requestUpdate()}_calculateInitialWindowState(){const{corner:e,offset:r}=this._config.bubblePosition,{width:n,height:i}=this._config.initialSize,s={width:window.innerWidth,height:window.innerHeight};let a,l;switch(e){case"top-left":a=r.x,l=-r.y;break;case"top-right":a=s.width+r.x-n,l=-r.y;break;case"bottom-left":a=r.x,l=s.height-r.y-i;break;case"bottom-right":a=s.width+r.x-n,l=s.height-r.y-i;break}return{position:{x:a,y:l},size:{width:n,height:i}}}_updateState(e){this._state={...this._state,...e},this._persistState(),this.host.requestUpdate()}applyGeometry(e){var s,a,l;const{position:r,size:n,mode:i}=this._state;if(i==="normal"){e.style.left=`${r.x}px`,e.style.top=`${r.y}px`,e.style.width=`${n.width}px`,e.style.height=`${n.height}px`,e.style.bottom="",e.style.right="";const c=(s=e.shadowRoot)==null?void 0:s.querySelector(".bubble");c&&(c.style.removeProperty("position"),c.style.removeProperty("left"),c.style.removeProperty("top"),c.style.removeProperty("width"),c.style.removeProperty("height"),c.style.removeProperty("right"),c.style.removeProperty("bottom"))}else if(i==="minimized"){e.style.width="",e.style.height="",e.style.minWidth="",e.style.minHeight="";const c=parseInt(getComputedStyle(e).getPropertyValue("--rtc-bubble-size"))||40,u={width:window.innerWidth,height:window.innerHeight},{corner:d,offset:m}=this._config.bubblePosition;let y,_;switch(d){case"top-left":y=m.x,_=-m.y;break;case"top-right":y=u.width+m.x-c,_=-m.y;break;case"bottom-left":y=m.x,_=u.height-m.y-c;break;case"bottom-right":y=u.width+m.x-c,_=u.height-m.y-c;break}e.style.left=`${y}px`,e.style.top=`${_}px`,e.style.bottom="",e.style.right="";const k=(a=e.shadowRoot)==null?void 0:a.querySelector(".bubble");k&&(k.style.setProperty("position","fixed","important"),k.style.setProperty("left",`${y}px`,"important"),k.style.setProperty("top",`${_}px`,"important"),k.style.setProperty("width",`${c}px`,"important"),k.style.setProperty("height",`${c}px`,"important"),k.style.setProperty("right","auto","important"),k.style.setProperty("bottom","auto","important"))}else{e.style.width="",e.style.height="",e.style.left="",e.style.top="",e.style.bottom="",e.style.right="";const c=(l=e.shadowRoot)==null?void 0:l.querySelector(".bubble");c&&(c.style.removeProperty("position"),c.style.removeProperty("left"),c.style.removeProperty("top"),c.style.removeProperty("width"),c.style.removeProperty("height"),c.style.removeProperty("right"),c.style.removeProperty("bottom"))}}}const nl=ar("AuthController");class j5{constructor(e){this._state={...o5},this._externalTokens=!1,this.host=e,this.host.addController(this),this.actions={login:()=>this._login(),logout:()=>this._logout()},this._loadTokens()}get value(){return{state:this._state,...this.actions}}get state(){return this._state}hostConnected(){this._boundVisibilityHandler=this._onVisibilityChange.bind(this),document.addEventListener("visibilitychange",this._boundVisibilityHandler)}hostDisconnected(){this._boundVisibilityHandler&&(document.removeEventListener("visibilitychange",this._boundVisibilityHandler),this._boundVisibilityHandler=void 0),this._refreshTimer&&(clearTimeout(this._refreshTimer),this._refreshTimer=void 0)}login(){this._login()}logout(){this._logout()}setTokens(e){const r=Date.now()+e.expiresIn*1e3;this._state={isLoggedIn:!0,accessToken:e.accessToken,refreshToken:e.refreshToken,userId:e.userId,expiresAt:r},this._saveTokens({accessToken:e.accessToken,refreshToken:e.refreshToken,userId:e.userId,expiresAt:r}),this._scheduleRefresh(r),this.host.requestUpdate(),this._fireLogin()}setExternalTokens(e){this._externalTokens=!0;const r=Date.now()+e.expiresIn*1e3;this._state={isLoggedIn:!0,accessToken:e.accessToken,refreshToken:e.refreshToken,userId:e.userId,expiresAt:r},this._scheduleRefresh(r),this.host.requestUpdate(),this._fireLogin()}setDynamicTokenProvider(e){this._dynamicTokenProvider=e,this._externalTokens=!0,this._state={isLoggedIn:!0,accessToken:"",refreshToken:"",userId:e.userId,expiresAt:1/0},this.host.requestUpdate(),this._fireLogin()}setAuthProvider(e){this._authProvider=e,this._externalTokens=!0;const r=e.isLoggedIn();r?this._state={isLoggedIn:!0,accessToken:"",refreshToken:"",userId:"provider-managed",expiresAt:1/0}:this._state={isLoggedIn:!1},this.host.requestUpdate(),r&&this._fireLogin()}getAccessToken(){return this._state.accessToken}async getAccessTokenAsync(){return this._authProvider?await this._authProvider.getToken():this._dynamicTokenProvider?await this._dynamicTokenProvider.getToken():this._state.accessToken}_login(){this.host.requestUpdate(),this.host.dispatchEvent(new CustomEvent("rtc-auth-login-requested",{bubbles:!0,composed:!0}))}_logout(){var e;if((e=this._authProvider)!=null&&e.logout){this._authProvider.logout().then(()=>{this._performLogout()}).catch(r=>{nl.error("Auth provider logout failed:",r),this._performLogout()});return}this._performLogout()}_performLogout(){this._state={isLoggedIn:!1},this._externalTokens||localStorage.removeItem(wn.tokens),this._externalTokens=!1,this._dynamicTokenProvider=void 0,this._authProvider=void 0,this._refreshTimer&&(clearTimeout(this._refreshTimer),this._refreshTimer=void 0),this.host.dispatchEvent(new CustomEvent("rtc-auth-logout",{bubbles:!0,composed:!0})),this.host.requestUpdate()}_loadTokens(){try{const e=localStorage.getItem(wn.tokens);if(!e)return;const r=JSON.parse(e);r.expiresAt<Date.now()?this._executeRefresh(r.refreshToken).then(n=>{n.success?(this._state={isLoggedIn:!0,accessToken:n.accessToken,refreshToken:r.refreshToken,userId:r.userId,expiresAt:n.expiresAt},this._saveTokens({accessToken:n.accessToken,refreshToken:r.refreshToken,userId:r.userId,expiresAt:n.expiresAt}),this._scheduleRefresh(n.expiresAt),this.host.requestUpdate(),this._fireLogin()):localStorage.removeItem(wn.tokens)}).catch(n=>{nl.error("Token refresh post-processing failed:",n),localStorage.removeItem(wn.tokens)}):(this._state={isLoggedIn:!0,accessToken:r.accessToken,refreshToken:r.refreshToken,userId:r.userId,expiresAt:r.expiresAt},this._scheduleRefresh(r.expiresAt),this._fireLogin())}catch(e){nl.warn("Failed to load/parse tokens from localStorage, clearing:",e),localStorage.removeItem(wn.tokens)}}_saveTokens(e){localStorage.setItem(wn.tokens,JSON.stringify(e))}_scheduleRefresh(e){this._refreshTimer&&clearTimeout(this._refreshTimer);const r=Math.max(0,e-Date.now()-rl.refreshBufferMs);this._refreshTimer=setTimeout(()=>{this.handleTokenExpired()},r)}async _executeRefresh(e){try{const r=await fetch(`${rl.serverUrl}/oauth2/refresh`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refresh_token:e})});if(!r.ok)return{success:!1};let n;try{n=await r.json()}catch(l){return nl.warn("Token refresh response body parse failed:",l),{success:!1}}const i=typeof n.expires_in=="number"?n.expires_in:0,s=typeof n.access_token=="string"?n.access_token:void 0;if(!s||!i)return{success:!1};const a=Date.now()+i*1e3;return{success:!0,accessToken:s,expiresAt:a}}catch(r){return nl.error("Token refresh failed:",r),{success:!1}}}async handleTokenExpired(){var e;if(this._authProvider){if(this._refreshing)return await this._refreshing?"refresh":"relogin";this._refreshing=this._doRefresh();try{return await this._refreshing?"refresh":"relogin"}finally{this._refreshing=void 0}}if((e=this._dynamicTokenProvider)!=null&&e.refreshToken){if(this._refreshing)return await this._refreshing?"refresh":"relogin";this._refreshing=this._doRefresh();try{return await this._refreshing?"refresh":"relogin"}finally{this._refreshing=void 0}}if(!this._state.refreshToken)return this._logout(),"relogin";if(this._refreshing)return await this._refreshing?"refresh":"relogin";this._refreshing=this._doRefresh();try{return await this._refreshing?"refresh":"relogin"}finally{this._refreshing=void 0}}async _doRefresh(){var i;if(this._authProvider)try{const s=await this._authProvider.refreshToken(),a=s.expiresIn?Date.now()+s.expiresIn*1e3:1/0;return this._state={...this._state,accessToken:s.accessToken,refreshToken:s.refreshToken??"",expiresAt:a},a!==1/0&&this._scheduleRefresh(a),this.host.requestUpdate(),!0}catch(s){return nl.error("Auth provider refresh failed:",s),!1}if((i=this._dynamicTokenProvider)!=null&&i.refreshToken)try{const s=await this._dynamicTokenProvider.refreshToken(),a=s.expiresIn?Date.now()+s.expiresIn*1e3:1/0;return this._state={...this._state,accessToken:s.accessToken,refreshToken:s.refreshToken??"",expiresAt:a},a!==1/0&&this._scheduleRefresh(a),this.host.requestUpdate(),!0}catch(s){return nl.error("Dynamic token refresh failed:",s),!1}const e=await this._executeRefresh(this._state.refreshToken);if(!e.success)return this._logout(),this.host.dispatchEvent(new CustomEvent("rtc-auth-refresh-failed",{bubbles:!0,composed:!0})),!1;const r=e.accessToken,n=e.expiresAt;if(this._state={...this._state,accessToken:r,expiresAt:n},!this._externalTokens){let s={};try{s=JSON.parse(localStorage.getItem(wn.tokens)||"{}")}catch(a){nl.debug("Stored token data corrupted, starting fresh:",a)}s.accessToken=r,s.expiresAt=n,localStorage.setItem(wn.tokens,JSON.stringify(s))}return this._scheduleRefresh(n),this.host.requestUpdate(),!0}_onVisibilityChange(){document.visibilityState==="visible"&&this._state.isLoggedIn&&this._state.expiresAt&&Date.now()>this._state.expiresAt-rl.refreshBufferMs&&this.handleTokenExpired()}_fireLogin(){var e;this.host.dispatchEvent(new CustomEvent("rtc-auth-login",{detail:{userId:this._state.userId},bubbles:!0,composed:!0})),(e=this.onLogin)==null||e.call(this)}}const oa=ar("SessionController");class q5{constructor(e){this._state={...Kx},this.host=e,this.host.addController(this),this.actions={createSession:()=>this._createSession(),switchSession:r=>this._switchSession(r),renameSession:(r,n)=>this._renameSession(r,n),deleteSession:r=>this._deleteSession(r),closeSession:r=>this._closeSession(r),reopenSession:r=>this._reopenSession(r),reset:()=>this._reset(),clearCurrentSession:()=>this._clearCurrentSession(),setCurrentSession:r=>this._setCurrentSession(r),setSessions:r=>this._setSessions(r)}}get value(){return{state:this._state,actions:this.actions}}hostConnected(){}hostDisconnected(){}_createSession(){const e=`session-${crypto.randomUUID()}`,r={clientId:e,title:"New Session",createdAt:Date.now(),updatedAt:Date.now()},n=[...this._state.sessions,r];return this._state={sessions:n,currentSessionId:r.clientId},this.host.requestUpdate(),this.host.dispatchEvent(new CustomEvent("rtc-session-created",{bubbles:!0,composed:!0,detail:{session:r}})),e}_switchSession(e){var r;oa.debug("Switching to session:",e),this._state={...this._state,currentSessionId:e},this.host.requestUpdate(),(r=this.onSessionSwitch)==null||r.call(this),this.host.dispatchEvent(new CustomEvent("rtc-session-switched",{bubbles:!0,composed:!0,detail:{id:e}}))}async _renameSession(e,r){if(this.persistence)try{await this.persistence.updateSessionTitle(e,r)}catch(i){return oa.error("persistence rename failed:",i),{ok:!1,error:"rename-failed"}}const n=this._state.sessions.map(i=>i.clientId===e?{...i,title:r,updatedAt:Date.now()}:i);return this._state={...this._state,sessions:n},this.host.requestUpdate(),this.host.dispatchEvent(new CustomEvent("rtc-session-renamed",{bubbles:!0,composed:!0,detail:{id:e,title:r}})),{ok:!0}}async _deleteSession(e){var i;if(oa.debug("deleteSession id:",e,"persistence:",!!this.persistence),this.persistence)try{oa.debug("calling persistence.deleteSession"),await this.persistence.deleteSession(e),oa.debug("persistence.deleteSession completed")}catch(s){return oa.error("persistence delete failed:",s),{ok:!1,error:"delete-failed"}}else oa.warn("NO persistence layer, doing in-memory only delete");const r=this._state.sessions.filter(s=>s.clientId!==e),n=this._state.currentSessionId===e?r.length>0?r[r.length-1].clientId:null:this._state.currentSessionId;return this._state={sessions:r,currentSessionId:n},this.host.requestUpdate(),this._state.currentSessionId!==e&&n!==this._state.currentSessionId&&((i=this.onSessionSwitch)==null||i.call(this),this.host.dispatchEvent(new CustomEvent("rtc-session-switched",{bubbles:!0,composed:!0,detail:{id:n}}))),this.host.dispatchEvent(new CustomEvent("rtc-session-deleted",{bubbles:!0,composed:!0,detail:{id:e}})),{ok:!0}}async _closeSession(e){if(!this.persistence)return oa.warn("No persistence layer, skipping close"),{ok:!0};const r=await this.persistence.getSession(e);if(!(r!=null&&r.server_id))return{ok:!0};try{return await this.persistence.closeSession(e),{ok:!0}}catch(n){return oa.error("Failed to close session:",n),{ok:!1,error:n instanceof Error?n:new Error(String(n))}}}async _reopenSession(e){if(!this.persistence)return oa.error("No persistence layer for reopen"),{ok:!1,error:new Error("Persistence layer not available")};try{return await this.persistence.openSession(e),{ok:!0}}catch(r){return oa.error("Failed to reopen session:",r),{ok:!1,error:r instanceof Error?r:new Error(String(r))}}}_reset(){this._state={...Kx},this.host.requestUpdate()}_clearCurrentSession(){var e;this._state={...this._state,currentSessionId:null},this.host.requestUpdate(),(e=this.onSessionSwitch)==null||e.call(this)}_setCurrentSession(e){oa.debug("Setting session:",e.clientId,"title:",`"${e.title}"`);const r=this._state.sessions.findIndex(i=>i.clientId===e.clientId);let n;r>=0?n=this._state.sessions.map((i,s)=>s===r?e:i):n=[...this._state.sessions,e],this._state={sessions:n,currentSessionId:e.clientId},this.host.requestUpdate()}_setSessions(e){this._state={...this._state,sessions:e},this.host.requestUpdate()}}const bo=ar("MessageRepository"),vo=50,$5={messages:[],hasMore:!1,isLoadingMore:!1,hasMoreNewer:!1,isLoadingNewer:!1};class U5{constructor(e){this._api=e,this._sessions=new Map,this._subscribers=new Map,this._loadingSessions=new Set,this._loadingNewerSessions=new Set,this._oldestCursors=new Map,this._newestCursors=new Map}subscribe(e,r){let n=this._subscribers.get(e);n||(n=new Set,this._subscribers.set(e,n)),n.add(r);try{r(this._getState(e))}catch(i){bo.error(`subscriber callback error for session ${e}:`,i)}return()=>{const i=this._subscribers.get(e);i&&(i.delete(r),i.size===0&&this._subscribers.delete(e))}}getSessionState(e){return this._getState(e)}updateMessages(e,r){const n=this._getState(e);this._setState(e,{...n,messages:[...r]})}appendMessage(e,r){const n=this._getState(e);this._setState(e,{...n,messages:[...n.messages,r]})}patchMessage(e,r,n){const i=this._getState(e),s=i.messages.findIndex(c=>c.clientId===r);if(s===-1)return!1;let a;try{a=n(i.messages[s])}catch(c){return bo.error(`patchMessage updater threw for session=${e}, messageId=${r}:`,c),!1}const l=[...i.messages];return l[s]=a,this._setState(e,{...i,messages:l}),!0}async loadMore(e){const r=this._getState(e);if(bo.debug(`loadMore(${e}) called: hasMore=${r.hasMore}, isLoading=${this._loadingSessions.has(e)}, cachedMessages=${r.messages.length}`),!r.hasMore)return bo.debug(`loadMore(${e}): early return - hasMore=false`),r.messages;if(this._loadingSessions.has(e))return bo.debug(`loadMore(${e}): early return - already loading`),r.messages;const n=this._oldestCursors.get(e);bo.debug(`loadMore(${e}): oldestCursor=${n??"none"}`),this._loadingSessions.add(e),this._setState(e,{...r,isLoadingMore:!0});try{const i=await this._api.fetchOlderMessages(e,n),s=this._getState(e),a=[...i,...s.messages],l=i.length>=vo;return this._setState(e,{messages:a,hasMore:l,isLoadingMore:!1}),a}catch(i){bo.error(`loadMore(${e}) failed:`,i);const s=this._getState(e);return this._setState(e,{...s,isLoadingMore:!1}),this._getState(e).messages}finally{this._loadingSessions.delete(e)}}async loadNewer(e){const r=this._getState(e);if(!r.hasMoreNewer||this._loadingNewerSessions.has(e))return r.messages;const n=this._newestCursors.get(e);this._loadingNewerSessions.add(e),this._setState(e,{...r,isLoadingNewer:!0});try{const i=await this._api.fetchNewerMessages(e,n),s=this._getState(e),a=[...s.messages,...i],l=i.length>=vo;return this._setState(e,{messages:a,hasMore:s.hasMore,isLoadingMore:s.isLoadingMore,hasMoreNewer:l,isLoadingNewer:!1}),a}catch(i){bo.error(`loadNewer(${e}) failed:`,i);const s=this._getState(e);return this._setState(e,{...s,isLoadingNewer:!1}),this._getState(e).messages}finally{this._loadingNewerSessions.delete(e)}}async fetchMessages(e){const r=await this._api.fetchMessages(e),n=r.length>=vo;return this._setState(e,{messages:[...r],hasMore:n,isLoadingMore:!1}),r}evictSession(e){this._sessions.delete(e),this._subscribers.delete(e),this._loadingSessions.delete(e),this._loadingNewerSessions.delete(e),this._oldestCursors.delete(e),this._newestCursors.delete(e)}setHasMore(e,r){const n=this._getState(e);this._setState(e,{...n,hasMore:r})}setHasMoreNewer(e,r){const n=this._getState(e);this._setState(e,{...n,hasMoreNewer:r})}setOldestOffset(e,r){this._oldestCursors.set(e,r)}getOldestOffset(e){return this._oldestCursors.get(e)}setNewestOffset(e,r){this._newestCursors.set(e,r)}getNewestOffset(e){return this._newestCursors.get(e)}_getState(e){return this._sessions.get(e)??{...$5}}_setState(e,r){this._sessions.set(e,{...r}),this._notifySubscribers(e)}_notifySubscribers(e){const r=this._subscribers.get(e);if(!r||r.size===0)return;const n=this._getState(e);for(const i of r)try{i(n)}catch(s){bo.error(`subscriber callback error for session ${e}:`,s)}}}const ki=ar("MessageController");class V5{constructor(e){this._sessionUpdateChains=new Map,this.host=e,this.host.addController(this),this.actions={sendMessage:async r=>{await this._sendMessage(r)},resendMessage:async(r,n)=>{await this._resendMessage(r,n)},forkSession:async r=>{await this._forkSession(r)},appendToLastMessage:r=>this._appendToLastMessage(r),finalizeLastMessage:()=>this._finalizeLastMessage(),clearMessages:()=>this._clearMessages()}}set persistence(e){this._persistence=e,this._repository||(this._repository=new U5({fetchMessages:async r=>{var i,s;if(!this._persistence)return[];const n=await this._persistence.listMessages(r,void 0,vo,"backward");return n.length>0&&((i=this._repository)==null||i.setOldestOffset(r,this._buildCursor(n[0])),(s=this._repository)==null||s.setNewestOffset(r,this._buildCursor(n[n.length-1]))),n.map(a=>this._localMessageToUI(a))},fetchOlderMessages:async(r,n)=>{var s;if(!this._persistence)return[];const i=await this._persistence.listMessages(r,n,vo,"backward");return i.length>0&&((s=this._repository)==null||s.setOldestOffset(r,this._buildCursor(i[0]))),i.map(a=>this._localMessageToUI(a))},fetchNewerMessages:async(r,n)=>{var s;if(!this._persistence)return[];const i=await this._persistence.listMessages(r,n,vo,"forward");return i.length>0&&((s=this._repository)==null||s.setNewestOffset(r,this._buildCursor(i[i.length-1]))),i.map(a=>this._localMessageToUI(a))}}))}_buildCursor(e){return`${new Date(e.created_at).getTime()}|${e.client_id}`}_buildCursorFromUI(e){return`${e.timestamp}|${e.clientId}`}get repository(){if(!this._repository)throw new Error("[MessageController] Repository not initialized. Set persistence first.");return this._repository}set sessionController(e){this._sessionController=e}get value(){var i;const e=(i=this._sessionController)==null?void 0:i.value.state.currentSessionId,r=e&&this._repository?this._repository.getSessionState(e):{messages:[],hasMore:!1,isLoadingMore:!1};return{state:{messages:[...r.messages],hasMore:r.hasMore,isLoadingMore:r.isLoadingMore,hasMoreNewer:r.hasMoreNewer,isLoadingNewer:r.isLoadingNewer},actions:this.actions,getUserMessageHistory:(s,a)=>this.getUserMessageHistory(s,a)}}hostConnected(){}hostDisconnected(){this._sessionUpdateChains.clear()}addDemoAssistantMessage(e){var i;const r={clientId:`msg-${Date.now()}-assistant`,role:"assistant",content:{type:"text",data:e},timestamp:Date.now(),syncStatus:"synced"},n=(i=this._sessionController)==null?void 0:i.value.state.currentSessionId;this._repository&&n&&this._repository.appendMessage(n,r),this.host.requestUpdate()}async fetchInitialMessages(e){if(!this._repository)return;this._repository.getSessionState(e).messages.length===0&&await this._repository.fetchMessages(e),this.host.requestUpdate()}async loadMoreForSession(e){this._repository&&(await this._repository.loadMore(e),this.host.requestUpdate())}async loadNewerForSession(e){this._repository&&(await this._repository.loadNewer(e),this.host.requestUpdate())}evictSession(e){var r;(r=this._repository)==null||r.evictSession(e)}async updateMessageFromBus(e){if(!this._persistence||!this._repository)return;const r=await this._persistence.getMessage(e);if(!r){ki.debug(`message not found in DB: ${e}`);return}const n=r.session_client_id;if(!n){ki.debug(`message has no session_client_id: ${e}`);return}const s=(this._sessionUpdateChains.get(n)??Promise.resolve()).then(()=>{this._applyBusUpdate(n,e,r)},()=>{this._applyBusUpdate(n,e,r)});return this._sessionUpdateChains.set(n,s),s.finally(()=>{this._sessionUpdateChains.get(n)===s&&this._sessionUpdateChains.delete(n)}),s}_applyBusUpdate(e,r,n){if(!this._repository)return;const i=this._localMessageToUI(n),a=!this._repository.getSessionState(e).messages.some(l=>l.clientId===r);this._upsertMessage(e,r,i),this.host.requestUpdate(),a&&this.host.dispatchEvent(new CustomEvent("rtc-message-received",{detail:{message:i},bubbles:!0,composed:!0}))}async reload(e){var r;if(this._persistence)if(e){const n=await this._persistence.getMessage(e);if(n){const i=n.session_client_id;if(i){const s=this._localMessageToUI(n);this._upsertMessage(i,e,s),this.host.requestUpdate()}}}else{const n=(r=this._sessionController)==null?void 0:r.value.state.currentSessionId;n&&await this._reloadFromDB(n)}}_upsertMessage(e,r,n){if(!this._repository)return;const i=this._repository.getSessionState(e),s=i.messages.findIndex(l=>l.clientId===r);let a;if(s>=0)a=[...i.messages],a[s]=n;else{a=[...i.messages];const l=a.findIndex(c=>this._compareMessages(n,c)<0);l>=0?a.splice(l,0,n):a.push(n)}this._repository.updateMessages(e,a)}_compareMessages(e,r){const n=e.timestamp-r.timestamp;if(n!==0)return n;const i={system:0,user:1,assistant:2},s=i[e.role]??1,a=i[r.role]??1;return s!==a?s-a:e.clientId<r.clientId?-1:e.clientId>r.clientId?1:0}async _sendMessage(e){if(!this._persistence){ki.error("persistence not set");return}const r=crypto.randomUUID();let n;if(this._sessionController){const s=this._sessionController.value.state.currentSessionId;ki.debug("currentSessionId before:",s),n=s??crypto.randomUUID(),ki.debug("sessionClientId to use:",n,s?"(existing)":"(NEW)")}else n=crypto.randomUUID(),ki.debug("No sessionController, created new sessionClientId:",n);const i=await this._persistence.sendMessage({content:e,messageClientId:r,sessionClientId:n});if(ki.debug("persistence.sendMessage returned:",{sessionClientId:i.session.client_id,messageSessionClientId:i.message.session_client_id}),this._sessionController){const s=this._sessionController.value.state.currentSessionId;if(ki.debug("currentSessionId after persistence:",s,"result.session.client_id:",i.session.client_id),!s||s===i.session.client_id){const a={clientId:i.session.client_id,title:i.session.title||"",createdAt:new Date(i.session.created_at).getTime(),updatedAt:new Date(i.session.updated_at).getTime(),todoList:i.session.todo_list};ki.debug("setCurrentSession:",a.clientId,"title:",`"${a.title}"`),this._sessionController.actions.setCurrentSession(a),await this._reloadFromDB(i.session.client_id),ki.debug("_reloadFromDB completed")}}this.host.dispatchEvent(new CustomEvent("rtc-message-sent",{bubbles:!0,composed:!0,detail:{message:i.message}}))}async _resendMessage(e,r){var s;if(!this._persistence){ki.error("persistence not set");return}const n=(s=this._sessionController)==null?void 0:s.value.state.currentSessionId;if(!n){ki.error("cannot resend: no current session");return}const i=await this._persistence.sendMessage({content:r,messageClientId:e,sessionClientId:n});await this._reloadFromDB(n),this.host.dispatchEvent(new CustomEvent("rtc-message-sent",{bubbles:!0,composed:!0,detail:{message:i.message}}))}async _forkSession(e){if(!this._persistence){ki.error("persistence not set");return}const r=await this._persistence.forkSession({oldSessionClientId:e.oldSessionClientId,oldMessageClientId:e.oldMessageClientId,newSessionClientId:e.newSessionClientId,newMessageClientId:e.newMessageClientId,content:e.content,limit:e.limit});if(this._sessionController){const n={clientId:r.session.client_id,title:r.session.title||"",createdAt:new Date(r.session.created_at).getTime(),updatedAt:new Date(r.session.updated_at).getTime(),todoList:r.session.todo_list};this._sessionController.actions.setCurrentSession(n)}await this._reloadFromDB(r.session.client_id),this.host.dispatchEvent(new CustomEvent("rtc-message-sent",{bubbles:!0,composed:!0,detail:{message:r.message}}))}async _reloadFromDB(e){var l;if(!this._persistence)return;const r=(l=this._repository)==null?void 0:l.getSessionState(e),n=(r==null?void 0:r.messages)??[];if(n.length>0){ki.debug("_reloadFromDB skipped: repository already has messages",{sessionId:e.slice(0,8),existingCount:n.length});return}ki.debug("_reloadFromDB before:",{sessionId:e.slice(0,8),existingCount:n.length,existingIds:n.map(c=>c.clientId.slice(0,8))});const i=await this._persistence.listMessages(e,void 0,vo,"backward"),s=i.map(c=>this._localMessageToUI(c));ki.debug("_reloadFromDB loaded:",{sessionId:e.slice(0,8),freshCount:s.length,freshIds:s.map(c=>c.clientId.slice(0,8))});const a=this._mergeMessages(n,s);if(ki.debug("_reloadFromDB merged:",{sessionId:e.slice(0,8),mergedCount:a.length,mergedIds:a.map(c=>c.clientId.slice(0,8))}),a.length>0){const c=a[0],u=a[a.length-1],m=new Set(s.map(y=>y.clientId)).has(c.clientId)?i.length>=vo:(r==null?void 0:r.hasMore)??i.length>=vo;this._repository&&(this._repository.updateMessages(e,a),this._repository.setHasMore(e,m),this._repository.setOldestOffset(e,this._buildCursorFromUI(c)),this._repository.setNewestOffset(e,this._buildCursorFromUI(u)))}else this._repository&&(this._repository.updateMessages(e,[]),this._repository.setHasMore(e,!1));this.host.requestUpdate()}_mergeMessages(e,r){const n=new Map;for(const i of e)n.set(i.clientId,i);for(const i of r)n.set(i.clientId,i);return[...n.values()].sort(this._compareMessages)}async getUserMessageHistory(e,r=200){if(!this._persistence)return[];try{return(await this._persistence.listMessages(e,void 0,r,"backward")).filter(i=>i.role==="user"&&i.content).reverse().map(i=>this._extractTextFromContent(i.content))}catch(n){return ki.warn("getUserMessageHistory failed:",n),[]}}_extractTextFromContent(e){var r;if(!e)return"";try{const n=JSON.parse(e);if(n&&typeof n=="object"){if("type"in n){if(n.type==="text"||n.type==="markdown"||n.type==="thinking")return n.data??"";if(n.type==="user_message")return((r=n.data)==null?void 0:r.text)??""}else if("text"in n&&typeof n.text=="string")return n.text}}catch{}return e}_localMessageToUI(e){let r={type:"text",data:""};if(e.content)try{const n=JSON.parse(e.content);n&&typeof n=="object"&&"type"in n?r=n:r={type:"text",data:e.content}}catch{r={type:"text",data:e.content}}return{clientId:e.client_id,role:e.role,content:r,timestamp:new Date(e.created_at).getTime(),streaming:e.streaming_status==="streaming",syncStatus:e.sync_status,parentClientId:e.parent_client_id}}_appendToLastMessage(e){var a;const r=(a=this._sessionController)==null?void 0:a.value.state.currentSessionId;if(!this._repository||!r)return;const n=this._repository.getSessionState(r),i=n.messages[n.messages.length-1];if(!i)return;const s=typeof i.content.data=="string"?i.content.data+e:JSON.stringify(i.content.data)+e;this._repository.patchMessage(r,i.clientId,l=>({...l,content:{...l.content,data:s},streaming:!0})),this.host.requestUpdate()}_finalizeLastMessage(){var i;const e=(i=this._sessionController)==null?void 0:i.value.state.currentSessionId;if(!this._repository||!e)return;const r=this._repository.getSessionState(e),n=r.messages[r.messages.length-1];n&&(this._repository.patchMessage(e,n.clientId,s=>({...s,streaming:!1})),this.host.requestUpdate())}_clearMessages(){var r;const e=(r=this._sessionController)==null?void 0:r.value.state.currentSessionId;this._repository&&e&&(this._repository.updateMessages(e,[]),this._repository.setHasMore(e,!1),this._repository.setHasMoreNewer(e,!1),this._repository.setOldestOffset(e,""),this._repository.setNewestOffset(e,"")),this.host.requestUpdate()}}const u2=ar("ModeController"),z5=new Set(["manual","edit","plan","auto","bypass"]);function W5(t){return z5.has(t)}class K5{constructor(e){this._state={...c5},this.host=e,this.host.addController(this),this.actions={setMode:r=>this._setMode(r)},this._restoreMode()}get value(){return{state:this._state,actions:this.actions}}hostConnected(){}hostDisconnected(){}_restoreMode(){try{const e=localStorage.getItem(wn.mode);e&&W5(e)&&(this._state={currentMode:e})}catch(e){u2.debug("Failed to restore mode:",e)}}_setMode(e){this._state={currentMode:e},this.host.requestUpdate();try{localStorage.setItem(wn.mode,e)}catch(r){u2.debug("Failed to persist mode:",r)}}}class H5{constructor(e){this._state={...u5},this.host=e,this.host.addController(this),this.actions={approve:r=>this._approve(r),approveAll:r=>this._approveAll(r),deny:r=>this._deny(r)}}get value(){return{state:this._state,actions:this.actions}}hostConnected(){}hostDisconnected(){}addPendingCall(e){this._state={pendingCalls:[...this._state.pendingCalls,e]},this.host.requestUpdate()}_approve(e){const r=this._state.pendingCalls.find(i=>i.id===e),n=this._state.pendingCalls.filter(i=>i.id!==e);this._state={pendingCalls:n},this.host.requestUpdate(),this.host.dispatchEvent(new CustomEvent("rtc-tool-call-approved",{bubbles:!0,composed:!0,detail:{id:e,toolName:r==null?void 0:r.toolName}}))}_approveAll(e){const r=this._state.pendingCalls.filter(n=>n.toolName!==e);this._state={pendingCalls:r},this.host.requestUpdate(),this.host.dispatchEvent(new CustomEvent("rtc-tool-call-approve-all",{bubbles:!0,composed:!0,detail:{toolName:e}}))}_deny(e){const r=this._state.pendingCalls.filter(n=>n.id!==e);this._state={pendingCalls:r},this.host.requestUpdate(),this.host.dispatchEvent(new CustomEvent("rtc-tool-call-denied",{bubbles:!0,composed:!0,detail:{id:e}}))}}var la=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Wg(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var vf={exports:{}};vf.exports,function(t,e){(function(r,n){t.exports=n()})(la,function(){function r(S,x){var N=Object.keys(S);if(Object.getOwnPropertySymbols){var W=Object.getOwnPropertySymbols(S);x&&(W=W.filter(function(ie){return Object.getOwnPropertyDescriptor(S,ie).enumerable})),N.push.apply(N,W)}return N}function n(S){for(var x=1;x<arguments.length;x++){var N=arguments[x]!=null?arguments[x]:{};x%2?r(Object(N),!0).forEach(function(W){c(S,W,N[W])}):Object.getOwnPropertyDescriptors?Object.defineProperties(S,Object.getOwnPropertyDescriptors(N)):r(Object(N)).forEach(function(W){Object.defineProperty(S,W,Object.getOwnPropertyDescriptor(N,W))})}return S}function i(S){return i=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(x){return typeof x}:function(x){return x&&typeof Symbol=="function"&&x.constructor===Symbol&&x!==Symbol.prototype?"symbol":typeof x},i(S)}function s(S,x){if(!(S instanceof x))throw new TypeError("Cannot call a class as a function")}function a(S,x){for(var N=0;N<x.length;N++){var W=x[N];W.enumerable=W.enumerable||!1,W.configurable=!0,"value"in W&&(W.writable=!0),Object.defineProperty(S,A(W.key),W)}}function l(S,x,N){return x&&a(S.prototype,x),Object.defineProperty(S,"prototype",{writable:!1}),S}function c(S,x,N){return(x=A(x))in S?Object.defineProperty(S,x,{value:N,enumerable:!0,configurable:!0,writable:!0}):S[x]=N,S}function u(S,x){if(typeof x!="function"&&x!==null)throw new TypeError("Super expression must either be null or a function");S.prototype=Object.create(x&&x.prototype,{constructor:{value:S,writable:!0,configurable:!0}}),Object.defineProperty(S,"prototype",{writable:!1}),x&&m(S,x)}function d(S){return d=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(x){return x.__proto__||Object.getPrototypeOf(x)},d(S)}function m(S,x){return m=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(N,W){return N.__proto__=W,N},m(S,x)}function y(S){if(S===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return S}function _(S){var x=function(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var N,W=d(S);if(x){var ie=d(this).constructor;N=Reflect.construct(W,arguments,ie)}else N=W.apply(this,arguments);return function(me,Pe){if(Pe&&(typeof Pe=="object"||typeof Pe=="function"))return Pe;if(Pe!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return y(me)}(this,N)}}function k(){return k=typeof Reflect<"u"&&Reflect.get?Reflect.get.bind():function(S,x,N){var W=function(me,Pe){for(;!Object.prototype.hasOwnProperty.call(me,Pe)&&(me=d(me))!==null;);return me}(S,x);if(W){var ie=Object.getOwnPropertyDescriptor(W,x);return ie.get?ie.get.call(arguments.length<3?S:N):ie.value}},k.apply(this,arguments)}function A(S){var x=function(N,W){if(typeof N!="object"||N===null)return N;var ie=N[Symbol.toPrimitive];if(ie!==void 0){var me=ie.call(N,W);if(typeof me!="object")return me;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(N)}(S,"string");return typeof x=="symbol"?x:x+""}var P=function(S){return!(!S||!S.Window)&&S instanceof S.Window},O=void 0,w=void 0;function C(S){O=S;var x=S.document.createTextNode("");x.ownerDocument!==S.document&&typeof S.wrap=="function"&&S.wrap(x)===x&&(S=S.wrap(S)),w=S}function T(S){return P(S)?S:(S.ownerDocument||S).defaultView||w.window}typeof window<"u"&&window&&C(window);var L=function(S){return!!S&&i(S)==="object"},B=function(S){return typeof S=="function"},I={window:function(S){return S===w||P(S)},docFrag:function(S){return L(S)&&S.nodeType===11},object:L,func:B,number:function(S){return typeof S=="number"},bool:function(S){return typeof S=="boolean"},string:function(S){return typeof S=="string"},element:function(S){if(!S||i(S)!=="object")return!1;var x=T(S)||w;return/object|function/.test(typeof Element>"u"?"undefined":i(Element))?S instanceof Element||S instanceof x.Element:S.nodeType===1&&typeof S.nodeName=="string"},plainObject:function(S){return L(S)&&!!S.constructor&&/function Object\b/.test(S.constructor.toString())},array:function(S){return L(S)&&S.length!==void 0&&B(S.splice)}};function j(S){var x=S.interaction;if(x.prepared.name==="drag"){var N=x.prepared.axis;N==="x"?(x.coords.cur.page.y=x.coords.start.page.y,x.coords.cur.client.y=x.coords.start.client.y,x.coords.velocity.client.y=0,x.coords.velocity.page.y=0):N==="y"&&(x.coords.cur.page.x=x.coords.start.page.x,x.coords.cur.client.x=x.coords.start.client.x,x.coords.velocity.client.x=0,x.coords.velocity.page.x=0)}}function ae(S){var x=S.iEvent,N=S.interaction;if(N.prepared.name==="drag"){var W=N.prepared.axis;if(W==="x"||W==="y"){var ie=W==="x"?"y":"x";x.page[ie]=N.coords.start.page[ie],x.client[ie]=N.coords.start.client[ie],x.delta[ie]=0}}}var ne={id:"actions/drag",install:function(S){var x=S.actions,N=S.Interactable,W=S.defaults;N.prototype.draggable=ne.draggable,x.map.drag=ne,x.methodDict.drag="draggable",W.actions.drag=ne.defaults},listeners:{"interactions:before-action-move":j,"interactions:action-resume":j,"interactions:action-move":ae,"auto-start:check":function(S){var x=S.interaction,N=S.interactable,W=S.buttons,ie=N.options.drag;if(ie&&ie.enabled&&(!x.pointerIsDown||!/mouse|pointer/.test(x.pointerType)||W&N.options.drag.mouseButtons))return S.action={name:"drag",axis:ie.lockAxis==="start"?ie.startAxis:ie.lockAxis},!1}},draggable:function(S){return I.object(S)?(this.options.drag.enabled=S.enabled!==!1,this.setPerAction("drag",S),this.setOnEvents("drag",S),/^(xy|x|y|start)$/.test(S.lockAxis)&&(this.options.drag.lockAxis=S.lockAxis),/^(xy|x|y)$/.test(S.startAxis)&&(this.options.drag.startAxis=S.startAxis),this):I.bool(S)?(this.options.drag.enabled=S,this):this.options.drag},beforeMove:j,move:ae,defaults:{startAxis:"xy",lockAxis:"xy"},getCursor:function(){return"move"},filterEventType:function(S){return S.search("drag")===0}},F=ne,H={init:function(S){var x=S;H.document=x.document,H.DocumentFragment=x.DocumentFragment||he,H.SVGElement=x.SVGElement||he,H.SVGSVGElement=x.SVGSVGElement||he,H.SVGElementInstance=x.SVGElementInstance||he,H.Element=x.Element||he,H.HTMLElement=x.HTMLElement||H.Element,H.Event=x.Event,H.Touch=x.Touch||he,H.PointerEvent=x.PointerEvent||x.MSPointerEvent},document:null,DocumentFragment:null,SVGElement:null,SVGSVGElement:null,SVGElementInstance:null,Element:null,HTMLElement:null,Event:null,Touch:null,PointerEvent:null};function he(){}var Ae=H,Fe={init:function(S){var x=Ae.Element,N=S.navigator||{};Fe.supportsTouch="ontouchstart"in S||I.func(S.DocumentTouch)&&Ae.document instanceof S.DocumentTouch,Fe.supportsPointerEvent=N.pointerEnabled!==!1&&!!Ae.PointerEvent,Fe.isIOS=/iP(hone|od|ad)/.test(N.platform),Fe.isIOS7=/iP(hone|od|ad)/.test(N.platform)&&/OS 7[^\d]/.test(N.appVersion),Fe.isIe9=/MSIE 9/.test(N.userAgent),Fe.isOperaMobile=N.appName==="Opera"&&Fe.supportsTouch&&/Presto/.test(N.userAgent),Fe.prefixedMatchesSelector="matches"in x.prototype?"matches":"webkitMatchesSelector"in x.prototype?"webkitMatchesSelector":"mozMatchesSelector"in x.prototype?"mozMatchesSelector":"oMatchesSelector"in x.prototype?"oMatchesSelector":"msMatchesSelector",Fe.pEventTypes=Fe.supportsPointerEvent?Ae.PointerEvent===S.MSPointerEvent?{up:"MSPointerUp",down:"MSPointerDown",over:"mouseover",out:"mouseout",move:"MSPointerMove",cancel:"MSPointerCancel"}:{up:"pointerup",down:"pointerdown",over:"pointerover",out:"pointerout",move:"pointermove",cancel:"pointercancel"}:null,Fe.wheelEvent=Ae.document&&"onmousewheel"in Ae.document?"mousewheel":"wheel"},supportsTouch:null,supportsPointerEvent:null,isIOS7:null,isIOS:null,isIe9:null,isOperaMobile:null,prefixedMatchesSelector:null,pEventTypes:null,wheelEvent:null},xe=Fe;function fe(S,x){if(S.contains)return S.contains(x);for(;x;){if(x===S)return!0;x=x.parentNode}return!1}function pe(S,x){for(;I.element(S);){if(ee(S,x))return S;S=G(S)}return null}function G(S){var x=S.parentNode;if(I.docFrag(x)){for(;(x=x.host)&&I.docFrag(x););return x}return x}function ee(S,x){return w!==O&&(x=x.replace(/\/deep\//g," ")),S[xe.prefixedMatchesSelector](x)}var Te=function(S){return S.parentNode||S.host};function be(S,x){for(var N,W=[],ie=S;(N=Te(ie))&&ie!==x&&N!==ie.ownerDocument;)W.unshift(ie),ie=N;return W}function Z(S,x,N){for(;I.element(S);){if(ee(S,x))return!0;if((S=G(S))===N)return ee(S,x)}return!1}function $(S){return S.correspondingUseElement||S}function re(S){var x=S instanceof Ae.SVGElement?S.getBoundingClientRect():S.getClientRects()[0];return x&&{left:x.left,right:x.right,top:x.top,bottom:x.bottom,width:x.width||x.right-x.left,height:x.height||x.bottom-x.top}}function Ce(S){var x,N=re(S);if(!xe.isIOS7&&N){var W={x:(x=(x=T(S))||w).scrollX||x.document.documentElement.scrollLeft,y:x.scrollY||x.document.documentElement.scrollTop};N.left+=W.x,N.right+=W.x,N.top+=W.y,N.bottom+=W.y}return N}function ze(S){for(var x=[];S;)x.push(S),S=G(S);return x}function Le(S){return!!I.string(S)&&(Ae.document.querySelector(S),!0)}function Re(S,x){for(var N in x)S[N]=x[N];return S}function nt(S,x,N){return S==="parent"?G(N):S==="self"?x.getRect(N):pe(N,S)}function ut(S,x,N,W){var ie=S;return I.string(ie)?ie=nt(ie,x,N):I.func(ie)&&(ie=ie.apply(void 0,W)),I.element(ie)&&(ie=Ce(ie)),ie}function _t(S){return S&&{x:"x"in S?S.x:S.left,y:"y"in S?S.y:S.top}}function kt(S){return!S||"x"in S&&"y"in S||((S=Re({},S)).x=S.left||0,S.y=S.top||0,S.width=S.width||(S.right||0)-S.x,S.height=S.height||(S.bottom||0)-S.y),S}function ht(S,x,N){S.left&&(x.left+=N.x),S.right&&(x.right+=N.x),S.top&&(x.top+=N.y),S.bottom&&(x.bottom+=N.y),x.width=x.right-x.left,x.height=x.bottom-x.top}function Ot(S,x,N){var W=N&&S.options[N];return _t(ut(W&&W.origin||S.options.origin,S,x,[S&&x]))||{x:0,y:0}}function et(S,x){var N=arguments.length>2&&arguments[2]!==void 0?arguments[2]:function(Ge){return!0},W=arguments.length>3?arguments[3]:void 0;if(W=W||{},I.string(S)&&S.search(" ")!==-1&&(S=Je(S)),I.array(S))return S.forEach(function(Ge){return et(Ge,x,N,W)}),W;if(I.object(S)&&(x=S,S=""),I.func(x)&&N(S))W[S]=W[S]||[],W[S].push(x);else if(I.array(x))for(var ie=0,me=x;ie<me.length;ie++){var Pe=me[ie];et(S,Pe,N,W)}else if(I.object(x))for(var Me in x)et(Je(Me).map(function(Ge){return"".concat(S).concat(Ge)}),x[Me],N,W);return W}function Je(S){return S.trim().split(/ +/)}var We=function(S,x){return Math.sqrt(S*S+x*x)},rt=["webkit","moz"];function Nt(S,x){S.__set||(S.__set={});var N=function(ie){if(rt.some(function(me){return ie.indexOf(me)===0}))return 1;typeof S[ie]!="function"&&ie!=="__set"&&Object.defineProperty(S,ie,{get:function(){return ie in S.__set?S.__set[ie]:S.__set[ie]=x[ie]},set:function(me){S.__set[ie]=me},configurable:!0})};for(var W in x)N(W);return S}function Pt(S,x){S.page=S.page||{},S.page.x=x.page.x,S.page.y=x.page.y,S.client=S.client||{},S.client.x=x.client.x,S.client.y=x.client.y,S.timeStamp=x.timeStamp}function je(S){S.page.x=0,S.page.y=0,S.client.x=0,S.client.y=0}function Ne(S){return S instanceof Ae.Event||S instanceof Ae.Touch}function ge(S,x,N){return S=S||"page",(N=N||{}).x=x[S+"X"],N.y=x[S+"Y"],N}function le(S,x){return x=x||{x:0,y:0},xe.isOperaMobile&&Ne(S)?(ge("screen",S,x),x.x+=window.scrollX,x.y+=window.scrollY):ge("page",S,x),x}function ce(S){return I.number(S.pointerId)?S.pointerId:S.identifier}function K(S,x,N){var W=x.length>1?$e(x):x[0];le(W,S.page),function(ie,me){me=me||{},xe.isOperaMobile&&Ne(ie)?ge("screen",ie,me):ge("client",ie,me)}(W,S.client),S.timeStamp=N}function ve(S){var x=[];return I.array(S)?(x[0]=S[0],x[1]=S[1]):S.type==="touchend"?S.touches.length===1?(x[0]=S.touches[0],x[1]=S.changedTouches[0]):S.touches.length===0&&(x[0]=S.changedTouches[0],x[1]=S.changedTouches[1]):(x[0]=S.touches[0],x[1]=S.touches[1]),x}function $e(S){for(var x={pageX:0,pageY:0,clientX:0,clientY:0,screenX:0,screenY:0},N=0;N<S.length;N++){var W=S[N];for(var ie in x)x[ie]+=W[ie]}for(var me in x)x[me]/=S.length;return x}function X(S){if(!S.length)return null;var x=ve(S),N=Math.min(x[0].pageX,x[1].pageX),W=Math.min(x[0].pageY,x[1].pageY),ie=Math.max(x[0].pageX,x[1].pageX),me=Math.max(x[0].pageY,x[1].pageY);return{x:N,y:W,left:N,top:W,right:ie,bottom:me,width:ie-N,height:me-W}}function M(S,x){var N=x+"X",W=x+"Y",ie=ve(S),me=ie[0][N]-ie[1][N],Pe=ie[0][W]-ie[1][W];return We(me,Pe)}function q(S,x){var N=x+"X",W=x+"Y",ie=ve(S),me=ie[1][N]-ie[0][N],Pe=ie[1][W]-ie[0][W];return 180*Math.atan2(Pe,me)/Math.PI}function Ie(S){return I.string(S.pointerType)?S.pointerType:I.number(S.pointerType)?[void 0,void 0,"touch","pen","mouse"][S.pointerType]:/touch/.test(S.type||"")||S instanceof Ae.Touch?"touch":"mouse"}function it(S){var x=I.func(S.composedPath)?S.composedPath():S.path;return[$(x?x[0]:S.target),$(S.currentTarget)]}var Qe=function(){function S(x){s(this,S),this.immediatePropagationStopped=!1,this.propagationStopped=!1,this._interaction=x}return l(S,[{key:"preventDefault",value:function(){}},{key:"stopPropagation",value:function(){this.propagationStopped=!0}},{key:"stopImmediatePropagation",value:function(){this.immediatePropagationStopped=this.propagationStopped=!0}}]),S}();Object.defineProperty(Qe.prototype,"interaction",{get:function(){return this._interaction._proxy},set:function(){}});var pt=function(S,x){for(var N=0;N<x.length;N++){var W=x[N];S.push(W)}return S},oe=function(S){return pt([],S)},Se=function(S,x){for(var N=0;N<S.length;N++)if(x(S[N],N,S))return N;return-1},Q=function(S,x){return S[Se(S,x)]},ke=function(S){u(N,S);var x=_(N);function N(W,ie,me){var Pe;s(this,N),(Pe=x.call(this,ie._interaction)).dropzone=void 0,Pe.dragEvent=void 0,Pe.relatedTarget=void 0,Pe.draggable=void 0,Pe.propagationStopped=!1,Pe.immediatePropagationStopped=!1;var Me=me==="dragleave"?W.prev:W.cur,Ge=Me.element,ct=Me.dropzone;return Pe.type=me,Pe.target=Ge,Pe.currentTarget=Ge,Pe.dropzone=ct,Pe.dragEvent=ie,Pe.relatedTarget=ie.target,Pe.draggable=ie.interactable,Pe.timeStamp=ie.timeStamp,Pe}return l(N,[{key:"reject",value:function(){var W=this,ie=this._interaction.dropState;if(this.type==="dropactivate"||this.dropzone&&ie.cur.dropzone===this.dropzone&&ie.cur.element===this.target)if(ie.prev.dropzone=this.dropzone,ie.prev.element=this.target,ie.rejected=!0,ie.events.enter=null,this.stopImmediatePropagation(),this.type==="dropactivate"){var me=ie.activeDrops,Pe=Se(me,function(Ge){var ct=Ge.dropzone,tt=Ge.element;return ct===W.dropzone&&tt===W.target});ie.activeDrops.splice(Pe,1);var Me=new N(ie,this.dragEvent,"dropdeactivate");Me.dropzone=this.dropzone,Me.target=this.target,this.dropzone.fire(Me)}else this.dropzone.fire(new N(ie,this.dragEvent,"dragleave"))}},{key:"preventDefault",value:function(){}},{key:"stopPropagation",value:function(){this.propagationStopped=!0}},{key:"stopImmediatePropagation",value:function(){this.immediatePropagationStopped=this.propagationStopped=!0}}]),N}(Qe);function dt(S,x){for(var N=0,W=S.slice();N<W.length;N++){var ie=W[N],me=ie.dropzone,Pe=ie.element;x.dropzone=me,x.target=Pe,me.fire(x),x.propagationStopped=x.immediatePropagationStopped=!1}}function Oe(S,x){for(var N=function(me,Pe){for(var Me=[],Ge=0,ct=me.interactables.list;Ge<ct.length;Ge++){var tt=ct[Ge];if(tt.options.drop.enabled){var b=tt.options.drop.accept;if(!(I.element(b)&&b!==Pe||I.string(b)&&!ee(Pe,b)||I.func(b)&&!b({dropzone:tt,draggableElement:Pe})))for(var E=0,R=tt.getAllElements();E<R.length;E++){var V=R[E];V!==Pe&&Me.push({dropzone:tt,element:V,rect:tt.getRect(V)})}}}return Me}(S,x),W=0;W<N.length;W++){var ie=N[W];ie.rect=ie.dropzone.getRect(ie.element)}return N}function St(S,x,N){for(var W=S.dropState,ie=S.interactable,me=S.element,Pe=[],Me=0,Ge=W.activeDrops;Me<Ge.length;Me++){var ct=Ge[Me],tt=ct.dropzone,b=ct.element,E=ct.rect,R=tt.dropCheck(x,N,ie,me,b,E);Pe.push(R?b:null)}var V=function(te){for(var ye,Ee,De,st=[],yt=0;yt<te.length;yt++){var ot=te[yt],at=te[ye];if(ot&&yt!==ye)if(at){var ft=Te(ot),mt=Te(at);if(ft!==ot.ownerDocument)if(mt!==ot.ownerDocument)if(ft!==mt){st=st.length?st:be(at);var gt=void 0;if(at instanceof Ae.HTMLElement&&ot instanceof Ae.SVGElement&&!(ot instanceof Ae.SVGSVGElement)){if(ot===mt)continue;gt=ot.ownerSVGElement}else gt=ot;for(var bt=be(gt,at.ownerDocument),xt=0;bt[xt]&&bt[xt]===st[xt];)xt++;var Ct=[bt[xt-1],bt[xt],st[xt]];if(Ct[0])for(var At=Ct[0].lastChild;At;){if(At===Ct[1]){ye=yt,st=bt;break}if(At===Ct[2])break;At=At.previousSibling}}else De=at,(parseInt(T(Ee=ot).getComputedStyle(Ee).zIndex,10)||0)>=(parseInt(T(De).getComputedStyle(De).zIndex,10)||0)&&(ye=yt);else ye=yt}else ye=yt}return ye}(Pe);return W.activeDrops[V]||null}function Mt(S,x,N){var W=S.dropState,ie={enter:null,leave:null,activate:null,deactivate:null,move:null,drop:null};return N.type==="dragstart"&&(ie.activate=new ke(W,N,"dropactivate"),ie.activate.target=null,ie.activate.dropzone=null),N.type==="dragend"&&(ie.deactivate=new ke(W,N,"dropdeactivate"),ie.deactivate.target=null,ie.deactivate.dropzone=null),W.rejected||(W.cur.element!==W.prev.element&&(W.prev.dropzone&&(ie.leave=new ke(W,N,"dragleave"),N.dragLeave=ie.leave.target=W.prev.element,N.prevDropzone=ie.leave.dropzone=W.prev.dropzone),W.cur.dropzone&&(ie.enter=new ke(W,N,"dragenter"),N.dragEnter=W.cur.element,N.dropzone=W.cur.dropzone)),N.type==="dragend"&&W.cur.dropzone&&(ie.drop=new ke(W,N,"drop"),N.dropzone=W.cur.dropzone,N.relatedTarget=W.cur.element),N.type==="dragmove"&&W.cur.dropzone&&(ie.move=new ke(W,N,"dropmove"),N.dropzone=W.cur.dropzone)),ie}function Rt(S,x){var N=S.dropState,W=N.activeDrops,ie=N.cur,me=N.prev;x.leave&&me.dropzone.fire(x.leave),x.enter&&ie.dropzone.fire(x.enter),x.move&&ie.dropzone.fire(x.move),x.drop&&ie.dropzone.fire(x.drop),x.deactivate&&dt(W,x.deactivate),N.prev.dropzone=ie.dropzone,N.prev.element=ie.element}function rr(S,x){var N=S.interaction,W=S.iEvent,ie=S.event;if(W.type==="dragmove"||W.type==="dragend"){var me=N.dropState;x.dynamicDrop&&(me.activeDrops=Oe(x,N.element));var Pe=W,Me=St(N,Pe,ie);me.rejected=me.rejected&&!!Me&&Me.dropzone===me.cur.dropzone&&Me.element===me.cur.element,me.cur.dropzone=Me&&Me.dropzone,me.cur.element=Me&&Me.element,me.events=Mt(N,0,Pe)}}var hr={id:"actions/drop",install:function(S){var x=S.actions,N=S.interactStatic,W=S.Interactable,ie=S.defaults;S.usePlugin(F),W.prototype.dropzone=function(me){return function(Pe,Me){if(I.object(Me)){if(Pe.options.drop.enabled=Me.enabled!==!1,Me.listeners){var Ge=et(Me.listeners),ct=Object.keys(Ge).reduce(function(b,E){return b[/^(enter|leave)/.test(E)?"drag".concat(E):/^(activate|deactivate|move)/.test(E)?"drop".concat(E):E]=Ge[E],b},{}),tt=Pe.options.drop.listeners;tt&&Pe.off(tt),Pe.on(ct),Pe.options.drop.listeners=ct}return I.func(Me.ondrop)&&Pe.on("drop",Me.ondrop),I.func(Me.ondropactivate)&&Pe.on("dropactivate",Me.ondropactivate),I.func(Me.ondropdeactivate)&&Pe.on("dropdeactivate",Me.ondropdeactivate),I.func(Me.ondragenter)&&Pe.on("dragenter",Me.ondragenter),I.func(Me.ondragleave)&&Pe.on("dragleave",Me.ondragleave),I.func(Me.ondropmove)&&Pe.on("dropmove",Me.ondropmove),/^(pointer|center)$/.test(Me.overlap)?Pe.options.drop.overlap=Me.overlap:I.number(Me.overlap)&&(Pe.options.drop.overlap=Math.max(Math.min(1,Me.overlap),0)),"accept"in Me&&(Pe.options.drop.accept=Me.accept),"checker"in Me&&(Pe.options.drop.checker=Me.checker),Pe}return I.bool(Me)?(Pe.options.drop.enabled=Me,Pe):Pe.options.drop}(this,me)},W.prototype.dropCheck=function(me,Pe,Me,Ge,ct,tt){return function(b,E,R,V,te,ye,Ee){var De=!1;if(!(Ee=Ee||b.getRect(ye)))return!!b.options.drop.checker&&b.options.drop.checker(E,R,De,b,ye,V,te);var st=b.options.drop.overlap;if(st==="pointer"){var yt=Ot(V,te,"drag"),ot=le(E);ot.x+=yt.x,ot.y+=yt.y;var at=ot.x>Ee.left&&ot.x<Ee.right,ft=ot.y>Ee.top&&ot.y<Ee.bottom;De=at&&ft}var mt=V.getRect(te);if(mt&&st==="center"){var gt=mt.left+mt.width/2,bt=mt.top+mt.height/2;De=gt>=Ee.left&><=Ee.right&&bt>=Ee.top&&bt<=Ee.bottom}return mt&&I.number(st)&&(De=Math.max(0,Math.min(Ee.right,mt.right)-Math.max(Ee.left,mt.left))*Math.max(0,Math.min(Ee.bottom,mt.bottom)-Math.max(Ee.top,mt.top))/(mt.width*mt.height)>=st),b.options.drop.checker&&(De=b.options.drop.checker(E,R,De,b,ye,V,te)),De}(this,me,Pe,Me,Ge,ct,tt)},N.dynamicDrop=function(me){return I.bool(me)?(S.dynamicDrop=me,N):S.dynamicDrop},Re(x.phaselessTypes,{dragenter:!0,dragleave:!0,dropactivate:!0,dropdeactivate:!0,dropmove:!0,drop:!0}),x.methodDict.drop="dropzone",S.dynamicDrop=!1,ie.actions.drop=hr.defaults},listeners:{"interactions:before-action-start":function(S){var x=S.interaction;x.prepared.name==="drag"&&(x.dropState={cur:{dropzone:null,element:null},prev:{dropzone:null,element:null},rejected:null,events:null,activeDrops:[]})},"interactions:after-action-start":function(S,x){var N=S.interaction,W=(S.event,S.iEvent);if(N.prepared.name==="drag"){var ie=N.dropState;ie.activeDrops=[],ie.events={},ie.activeDrops=Oe(x,N.element),ie.events=Mt(N,0,W),ie.events.activate&&(dt(ie.activeDrops,ie.events.activate),x.fire("actions/drop:start",{interaction:N,dragEvent:W}))}},"interactions:action-move":rr,"interactions:after-action-move":function(S,x){var N=S.interaction,W=S.iEvent;if(N.prepared.name==="drag"){var ie=N.dropState;Rt(N,ie.events),x.fire("actions/drop:move",{interaction:N,dragEvent:W}),ie.events={}}},"interactions:action-end":function(S,x){if(S.interaction.prepared.name==="drag"){var N=S.interaction,W=S.iEvent;rr(S,x),Rt(N,N.dropState.events),x.fire("actions/drop:end",{interaction:N,dragEvent:W})}},"interactions:stop":function(S){var x=S.interaction;if(x.prepared.name==="drag"){var N=x.dropState;N&&(N.activeDrops=null,N.events=null,N.cur.dropzone=null,N.cur.element=null,N.prev.dropzone=null,N.prev.element=null,N.rejected=!1)}}},getActiveDrops:Oe,getDrop:St,getDropEvents:Mt,fireDropEvents:Rt,filterEventType:function(S){return S.search("drag")===0||S.search("drop")===0},defaults:{enabled:!1,accept:null,overlap:"pointer"}},br=hr;function xr(S){var x=S.interaction,N=S.iEvent,W=S.phase;if(x.prepared.name==="gesture"){var ie=x.pointers.map(function(ct){return ct.pointer}),me=W==="start",Pe=W==="end",Me=x.interactable.options.deltaSource;if(N.touches=[ie[0],ie[1]],me)N.distance=M(ie,Me),N.box=X(ie),N.scale=1,N.ds=0,N.angle=q(ie,Me),N.da=0,x.gesture.startDistance=N.distance,x.gesture.startAngle=N.angle;else if(Pe||x.pointers.length<2){var Ge=x.prevEvent;N.distance=Ge.distance,N.box=Ge.box,N.scale=Ge.scale,N.ds=0,N.angle=Ge.angle,N.da=0}else N.distance=M(ie,Me),N.box=X(ie),N.scale=N.distance/x.gesture.startDistance,N.angle=q(ie,Me),N.ds=N.scale-x.gesture.scale,N.da=N.angle-x.gesture.angle;x.gesture.distance=N.distance,x.gesture.angle=N.angle,I.number(N.scale)&&N.scale!==1/0&&!isNaN(N.scale)&&(x.gesture.scale=N.scale)}}var Cr={id:"actions/gesture",before:["actions/drag","actions/resize"],install:function(S){var x=S.actions,N=S.Interactable,W=S.defaults;N.prototype.gesturable=function(ie){return I.object(ie)?(this.options.gesture.enabled=ie.enabled!==!1,this.setPerAction("gesture",ie),this.setOnEvents("gesture",ie),this):I.bool(ie)?(this.options.gesture.enabled=ie,this):this.options.gesture},x.map.gesture=Cr,x.methodDict.gesture="gesturable",W.actions.gesture=Cr.defaults},listeners:{"interactions:action-start":xr,"interactions:action-move":xr,"interactions:action-end":xr,"interactions:new":function(S){S.interaction.gesture={angle:0,distance:0,scale:1,startAngle:0,startDistance:0}},"auto-start:check":function(S){if(!(S.interaction.pointers.length<2)){var x=S.interactable.options.gesture;if(x&&x.enabled)return S.action={name:"gesture"},!1}}},defaults:{},getCursor:function(){return""},filterEventType:function(S){return S.search("gesture")===0}},gn=Cr;function Sr(S,x,N,W,ie,me,Pe){if(!x)return!1;if(x===!0){var Me=I.number(me.width)?me.width:me.right-me.left,Ge=I.number(me.height)?me.height:me.bottom-me.top;if(Pe=Math.min(Pe,Math.abs((S==="left"||S==="right"?Me:Ge)/2)),Me<0&&(S==="left"?S="right":S==="right"&&(S="left")),Ge<0&&(S==="top"?S="bottom":S==="bottom"&&(S="top")),S==="left"){var ct=Me>=0?me.left:me.right;return N.x<ct+Pe}if(S==="top"){var tt=Ge>=0?me.top:me.bottom;return N.y<tt+Pe}if(S==="right")return N.x>(Me>=0?me.right:me.left)-Pe;if(S==="bottom")return N.y>(Ge>=0?me.bottom:me.top)-Pe}return!!I.element(W)&&(I.element(x)?x===W:Z(W,x,ie))}function Rr(S){var x=S.iEvent,N=S.interaction;if(N.prepared.name==="resize"&&N.resizeAxes){var W=x;N.interactable.options.resize.square?(N.resizeAxes==="y"?W.delta.x=W.delta.y:W.delta.y=W.delta.x,W.axes="xy"):(W.axes=N.resizeAxes,N.resizeAxes==="x"?W.delta.y=0:N.resizeAxes==="y"&&(W.delta.x=0))}}var Pn,Mn,Jr={id:"actions/resize",before:["actions/drag"],install:function(S){var x=S.actions,N=S.browser,W=S.Interactable,ie=S.defaults;Jr.cursors=function(me){return me.isIe9?{x:"e-resize",y:"s-resize",xy:"se-resize",top:"n-resize",left:"w-resize",bottom:"s-resize",right:"e-resize",topleft:"se-resize",bottomright:"se-resize",topright:"ne-resize",bottomleft:"ne-resize"}:{x:"ew-resize",y:"ns-resize",xy:"nwse-resize",top:"ns-resize",left:"ew-resize",bottom:"ns-resize",right:"ew-resize",topleft:"nwse-resize",bottomright:"nwse-resize",topright:"nesw-resize",bottomleft:"nesw-resize"}}(N),Jr.defaultMargin=N.supportsTouch||N.supportsPointerEvent?20:10,W.prototype.resizable=function(me){return function(Pe,Me,Ge){return I.object(Me)?(Pe.options.resize.enabled=Me.enabled!==!1,Pe.setPerAction("resize",Me),Pe.setOnEvents("resize",Me),I.string(Me.axis)&&/^x$|^y$|^xy$/.test(Me.axis)?Pe.options.resize.axis=Me.axis:Me.axis===null&&(Pe.options.resize.axis=Ge.defaults.actions.resize.axis),I.bool(Me.preserveAspectRatio)?Pe.options.resize.preserveAspectRatio=Me.preserveAspectRatio:I.bool(Me.square)&&(Pe.options.resize.square=Me.square),Pe):I.bool(Me)?(Pe.options.resize.enabled=Me,Pe):Pe.options.resize}(this,me,S)},x.map.resize=Jr,x.methodDict.resize="resizable",ie.actions.resize=Jr.defaults},listeners:{"interactions:new":function(S){S.interaction.resizeAxes="xy"},"interactions:action-start":function(S){(function(x){var N=x.iEvent,W=x.interaction;if(W.prepared.name==="resize"&&W.prepared.edges){var ie=N,me=W.rect;W._rects={start:Re({},me),corrected:Re({},me),previous:Re({},me),delta:{left:0,right:0,width:0,top:0,bottom:0,height:0}},ie.edges=W.prepared.edges,ie.rect=W._rects.corrected,ie.deltaRect=W._rects.delta}})(S),Rr(S)},"interactions:action-move":function(S){(function(x){var N=x.iEvent,W=x.interaction;if(W.prepared.name==="resize"&&W.prepared.edges){var ie=N,me=W.interactable.options.resize.invert,Pe=me==="reposition"||me==="negate",Me=W.rect,Ge=W._rects,ct=Ge.start,tt=Ge.corrected,b=Ge.delta,E=Ge.previous;if(Re(E,tt),Pe){if(Re(tt,Me),me==="reposition"){if(tt.top>tt.bottom){var R=tt.top;tt.top=tt.bottom,tt.bottom=R}if(tt.left>tt.right){var V=tt.left;tt.left=tt.right,tt.right=V}}}else tt.top=Math.min(Me.top,ct.bottom),tt.bottom=Math.max(Me.bottom,ct.top),tt.left=Math.min(Me.left,ct.right),tt.right=Math.max(Me.right,ct.left);for(var te in tt.width=tt.right-tt.left,tt.height=tt.bottom-tt.top,tt)b[te]=tt[te]-E[te];ie.edges=W.prepared.edges,ie.rect=tt,ie.deltaRect=b}})(S),Rr(S)},"interactions:action-end":function(S){var x=S.iEvent,N=S.interaction;if(N.prepared.name==="resize"&&N.prepared.edges){var W=x;W.edges=N.prepared.edges,W.rect=N._rects.corrected,W.deltaRect=N._rects.delta}},"auto-start:check":function(S){var x=S.interaction,N=S.interactable,W=S.element,ie=S.rect,me=S.buttons;if(ie){var Pe=Re({},x.coords.cur.page),Me=N.options.resize;if(Me&&Me.enabled&&(!x.pointerIsDown||!/mouse|pointer/.test(x.pointerType)||me&Me.mouseButtons)){if(I.object(Me.edges)){var Ge={left:!1,right:!1,top:!1,bottom:!1};for(var ct in Ge)Ge[ct]=Sr(ct,Me.edges[ct],Pe,x._latestPointer.eventTarget,W,ie,Me.margin||Jr.defaultMargin);Ge.left=Ge.left&&!Ge.right,Ge.top=Ge.top&&!Ge.bottom,(Ge.left||Ge.right||Ge.top||Ge.bottom)&&(S.action={name:"resize",edges:Ge})}else{var tt=Me.axis!=="y"&&Pe.x>ie.right-Jr.defaultMargin,b=Me.axis!=="x"&&Pe.y>ie.bottom-Jr.defaultMargin;(tt||b)&&(S.action={name:"resize",axes:(tt?"x":"")+(b?"y":"")})}return!S.action&&void 0}}}},defaults:{square:!1,preserveAspectRatio:!1,axis:"xy",margin:NaN,edges:null,invert:"none"},cursors:null,getCursor:function(S){var x=S.edges,N=S.axis,W=S.name,ie=Jr.cursors,me=null;if(N)me=ie[W+N];else if(x){for(var Pe="",Me=0,Ge=["top","bottom","left","right"];Me<Ge.length;Me++){var ct=Ge[Me];x[ct]&&(Pe+=ct)}me=ie[Pe]}return me},filterEventType:function(S){return S.search("resize")===0},defaultMargin:null},ir=Jr,Ri={id:"actions",install:function(S){S.usePlugin(gn),S.usePlugin(ir),S.usePlugin(F),S.usePlugin(br)}},qn=0,bn={request:function(S){return Pn(S)},cancel:function(S){return Mn(S)},init:function(S){if(Pn=S.requestAnimationFrame,Mn=S.cancelAnimationFrame,!Pn)for(var x=["ms","moz","webkit","o"],N=0;N<x.length;N++){var W=x[N];Pn=S["".concat(W,"RequestAnimationFrame")],Mn=S["".concat(W,"CancelAnimationFrame")]||S["".concat(W,"CancelRequestAnimationFrame")]}Pn=Pn&&Pn.bind(S),Mn=Mn&&Mn.bind(S),Pn||(Pn=function(ie){var me=Date.now(),Pe=Math.max(0,16-(me-qn)),Me=S.setTimeout(function(){ie(me+Pe)},Pe);return qn=me+Pe,Me},Mn=function(ie){return clearTimeout(ie)})}},ur={defaults:{enabled:!1,margin:60,container:null,speed:300},now:Date.now,interaction:null,i:0,x:0,y:0,isScrolling:!1,prevTime:0,margin:0,speed:0,start:function(S){ur.isScrolling=!0,bn.cancel(ur.i),S.autoScroll=ur,ur.interaction=S,ur.prevTime=ur.now(),ur.i=bn.request(ur.scroll)},stop:function(){ur.isScrolling=!1,ur.interaction&&(ur.interaction.autoScroll=null),bn.cancel(ur.i)},scroll:function(){var S=ur.interaction,x=S.interactable,N=S.element,W=S.prepared.name,ie=x.options[W].autoScroll,me=Ln(ie.container,x,N),Pe=ur.now(),Me=(Pe-ur.prevTime)/1e3,Ge=ie.speed*Me;if(Ge>=1){var ct={x:ur.x*Ge,y:ur.y*Ge};if(ct.x||ct.y){var tt=Xr(me);I.window(me)?me.scrollBy(ct.x,ct.y):me&&(me.scrollLeft+=ct.x,me.scrollTop+=ct.y);var b=Xr(me),E={x:b.x-tt.x,y:b.y-tt.y};(E.x||E.y)&&x.fire({type:"autoscroll",target:N,interactable:x,delta:E,interaction:S,container:me})}ur.prevTime=Pe}ur.isScrolling&&(bn.cancel(ur.i),ur.i=bn.request(ur.scroll))},check:function(S,x){var N;return(N=S.options[x].autoScroll)==null?void 0:N.enabled},onInteractionMove:function(S){var x=S.interaction,N=S.pointer;if(x.interacting()&&ur.check(x.interactable,x.prepared.name))if(x.simulation)ur.x=ur.y=0;else{var W,ie,me,Pe,Me=x.interactable,Ge=x.element,ct=x.prepared.name,tt=Me.options[ct].autoScroll,b=Ln(tt.container,Me,Ge);if(I.window(b))Pe=N.clientX<ur.margin,W=N.clientY<ur.margin,ie=N.clientX>b.innerWidth-ur.margin,me=N.clientY>b.innerHeight-ur.margin;else{var E=re(b);Pe=N.clientX<E.left+ur.margin,W=N.clientY<E.top+ur.margin,ie=N.clientX>E.right-ur.margin,me=N.clientY>E.bottom-ur.margin}ur.x=ie?1:Pe?-1:0,ur.y=me?1:W?-1:0,ur.isScrolling||(ur.margin=tt.margin,ur.speed=tt.speed,ur.start(x))}}};function Ln(S,x,N){return(I.string(S)?nt(S,x,N):S)||T(N)}function Xr(S){return I.window(S)&&(S=window.document.body),{x:S.scrollLeft,y:S.scrollTop}}var Cn={id:"auto-scroll",install:function(S){var x=S.defaults,N=S.actions;S.autoScroll=ur,ur.now=function(){return S.now()},N.phaselessTypes.autoscroll=!0,x.perAction.autoScroll=ur.defaults},listeners:{"interactions:new":function(S){S.interaction.autoScroll=null},"interactions:destroy":function(S){S.interaction.autoScroll=null,ur.stop(),ur.interaction&&(ur.interaction=null)},"interactions:stop":ur.stop,"interactions:action-move":function(S){return ur.onInteractionMove(S)}}},Vi=Cn;function xn(S,x){var N=!1;return function(){return N||(w.console.warn(x),N=!0),S.apply(this,arguments)}}function Wn(S,x){return S.name=x.name,S.axis=x.axis,S.edges=x.edges,S}function zi(S){return I.bool(S)?(this.options.styleCursor=S,this):S===null?(delete this.options.styleCursor,this):this.options.styleCursor}function an(S){return I.func(S)?(this.options.actionChecker=S,this):S===null?(delete this.options.actionChecker,this):this.options.actionChecker}var oi={id:"auto-start/interactableMethods",install:function(S){var x=S.Interactable;x.prototype.getAction=function(N,W,ie,me){var Pe=function(Me,Ge,ct,tt,b){var E=Me.getRect(tt),R=Ge.buttons||{0:1,1:4,3:8,4:16}[Ge.button],V={action:null,interactable:Me,interaction:ct,element:tt,rect:E,buttons:R};return b.fire("auto-start:check",V),V.action}(this,W,ie,me,S);return this.options.actionChecker?this.options.actionChecker(N,W,Pe,this,me,ie):Pe},x.prototype.ignoreFrom=xn(function(N){return this._backCompatOption("ignoreFrom",N)},"Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue})."),x.prototype.allowFrom=xn(function(N){return this._backCompatOption("allowFrom",N)},"Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue})."),x.prototype.actionChecker=an,x.prototype.styleCursor=zi}};function Zn(S,x,N,W,ie){return x.testIgnoreAllow(x.options[S.name],N,W)&&x.options[S.name].enabled&&Ti(x,N,S,ie)?S:null}function mi(S,x,N,W,ie,me,Pe){for(var Me=0,Ge=W.length;Me<Ge;Me++){var ct=W[Me],tt=ie[Me],b=ct.getAction(x,N,S,tt);if(b){var E=Zn(b,ct,tt,me,Pe);if(E)return{action:E,interactable:ct,element:tt}}}return{action:null,interactable:null,element:null}}function $n(S,x,N,W,ie){var me=[],Pe=[],Me=W;function Ge(tt){me.push(tt),Pe.push(Me)}for(;I.element(Me);){me=[],Pe=[],ie.interactables.forEachMatch(Me,Ge);var ct=mi(S,x,N,me,Pe,W,ie);if(ct.action&&!ct.interactable.options[ct.action.name].manualStart)return ct;Me=G(Me)}return{action:null,interactable:null,element:null}}function kn(S,x,N){var W=x.action,ie=x.interactable,me=x.element;W=W||{name:null},S.interactable=ie,S.element=me,Wn(S.prepared,W),S.rect=ie&&W.name?ie.getRect(me):null,Wi(S,N),N.fire("autoStart:prepared",{interaction:S})}function Ti(S,x,N,W){var ie=S.options,me=ie[N.name].max,Pe=ie[N.name].maxPerElement,Me=W.autoStart.maxInteractions,Ge=0,ct=0,tt=0;if(!(me&&Pe&&Me))return!1;for(var b=0,E=W.interactions.list;b<E.length;b++){var R=E[b],V=R.prepared.name;if(R.interacting()&&(++Ge>=Me||R.interactable===S&&((ct+=V===N.name?1:0)>=me||R.element===x&&(tt++,V===N.name&&tt>=Pe))))return!1}return Me>0}function Kn(S,x){return I.number(S)?(x.autoStart.maxInteractions=S,this):x.autoStart.maxInteractions}function Qn(S,x,N){var W=N.autoStart.cursorElement;W&&W!==S&&(W.style.cursor=""),S.ownerDocument.documentElement.style.cursor=x,S.style.cursor=x,N.autoStart.cursorElement=x?S:null}function Wi(S,x){var N=S.interactable,W=S.element,ie=S.prepared;if(S.pointerType==="mouse"&&N&&N.options.styleCursor){var me="";if(ie.name){var Pe=N.options[ie.name].cursorChecker;me=I.func(Pe)?Pe(ie,N,W,S._interacting):x.actions.map[ie.name].getCursor(ie)}Qn(S.element,me||"",x)}else x.autoStart.cursorElement&&Qn(x.autoStart.cursorElement,"",x)}var yi={id:"auto-start/base",before:["actions"],install:function(S){var x=S.interactStatic,N=S.defaults;S.usePlugin(oi),N.base.actionChecker=null,N.base.styleCursor=!0,Re(N.perAction,{manualStart:!1,max:1/0,maxPerElement:1,allowFrom:null,ignoreFrom:null,mouseButtons:1}),x.maxInteractions=function(W){return Kn(W,S)},S.autoStart={maxInteractions:1/0,withinInteractionLimit:Ti,cursorElement:null}},listeners:{"interactions:down":function(S,x){var N=S.interaction,W=S.pointer,ie=S.event,me=S.eventTarget;N.interacting()||kn(N,$n(N,W,ie,me,x),x)},"interactions:move":function(S,x){(function(N,W){var ie=N.interaction,me=N.pointer,Pe=N.event,Me=N.eventTarget;ie.pointerType!=="mouse"||ie.pointerIsDown||ie.interacting()||kn(ie,$n(ie,me,Pe,Me,W),W)})(S,x),function(N,W){var ie=N.interaction;if(ie.pointerIsDown&&!ie.interacting()&&ie.pointerWasMoved&&ie.prepared.name){W.fire("autoStart:before-start",N);var me=ie.interactable,Pe=ie.prepared.name;Pe&&me&&(me.options[Pe].manualStart||!Ti(me,ie.element,ie.prepared,W)?ie.stop():(ie.start(ie.prepared,me,ie.element),Wi(ie,W)))}}(S,x)},"interactions:stop":function(S,x){var N=S.interaction,W=N.interactable;W&&W.options.styleCursor&&Qn(N.element,"",x)}},maxInteractions:Kn,withinInteractionLimit:Ti,validateAction:Zn},Er=yi,ms={id:"auto-start/dragAxis",listeners:{"autoStart:before-start":function(S,x){var N=S.interaction,W=S.eventTarget,ie=S.dx,me=S.dy;if(N.prepared.name==="drag"){var Pe=Math.abs(ie),Me=Math.abs(me),Ge=N.interactable.options.drag,ct=Ge.startAxis,tt=Pe>Me?"x":Pe<Me?"y":"xy";if(N.prepared.axis=Ge.lockAxis==="start"?tt[0]:Ge.lockAxis,tt!=="xy"&&ct!=="xy"&&ct!==tt){N.prepared.name=null;for(var b=W,E=function(V){if(V!==N.interactable){var te=N.interactable.options.drag;if(!te.manualStart&&V.testIgnoreAllow(te,b,W)){var ye=V.getAction(N.downPointer,N.downEvent,N,b);if(ye&&ye.name==="drag"&&function(Ee,De){if(!De)return!1;var st=De.options.drag.startAxis;return Ee==="xy"||st==="xy"||st===Ee}(tt,V)&&Er.validateAction(ye,V,b,W,x))return V}}};I.element(b);){var R=x.interactables.forEachMatch(b,E);if(R){N.prepared.name="drag",N.interactable=R,N.element=b;break}b=G(b)}}}}}};function Ki(S){var x=S.prepared&&S.prepared.name;if(!x)return null;var N=S.interactable.options;return N[x].hold||N[x].delay}var li={id:"auto-start/hold",install:function(S){var x=S.defaults;S.usePlugin(Er),x.perAction.hold=0,x.perAction.delay=0},listeners:{"interactions:new":function(S){S.interaction.autoStartHoldTimer=null},"autoStart:prepared":function(S){var x=S.interaction,N=Ki(x);N>0&&(x.autoStartHoldTimer=setTimeout(function(){x.start(x.prepared,x.interactable,x.element)},N))},"interactions:move":function(S){var x=S.interaction,N=S.duplicate;x.autoStartHoldTimer&&x.pointerWasMoved&&!N&&(clearTimeout(x.autoStartHoldTimer),x.autoStartHoldTimer=null)},"autoStart:before-start":function(S){var x=S.interaction;Ki(x)>0&&(x.prepared.name=null)}},getHoldDuration:Ki},Sn=li,ts={id:"auto-start",install:function(S){S.usePlugin(Er),S.usePlugin(Sn),S.usePlugin(ms)}},Ei=function(S){return/^(always|never|auto)$/.test(S)?(this.options.preventDefault=S,this):I.bool(S)?(this.options.preventDefault=S?"always":"never",this):this.options.preventDefault};function Ai(S){var x=S.interaction,N=S.event;x.interactable&&x.interactable.checkAndPreventDefault(N)}var Br={id:"core/interactablePreventDefault",install:function(S){var x=S.Interactable;x.prototype.preventDefault=Ei,x.prototype.checkAndPreventDefault=function(N){return function(W,ie,me){var Pe=W.options.preventDefault;if(Pe!=="never")if(Pe!=="always"){if(ie.events.supportsPassive&&/^touch(start|move)$/.test(me.type)){var Me=T(me.target).document,Ge=ie.getDocOptions(Me);if(!Ge||!Ge.events||Ge.events.passive!==!1)return}/^(mouse|pointer|touch)*(down|start)/i.test(me.type)||I.element(me.target)&&ee(me.target,"input,select,textarea,[contenteditable=true],[contenteditable=true] *")||me.preventDefault()}else me.preventDefault()}(this,S,N)},S.interactions.docEvents.push({type:"dragstart",listener:function(N){for(var W=0,ie=S.interactions.list;W<ie.length;W++){var me=ie[W];if(me.element&&(me.element===N.target||fe(me.element,N.target)))return void me.interactable.checkAndPreventDefault(N)}}})},listeners:["down","move","up","cancel"].reduce(function(S,x){return S["interactions:".concat(x)]=Ai,S},{})};function vn(S,x){if(x.phaselessTypes[S])return!0;for(var N in x.map)if(S.indexOf(N)===0&&S.substr(N.length)in x.phases)return!0;return!1}function Hn(S){var x={};for(var N in S){var W=S[N];I.plainObject(W)?x[N]=Hn(W):I.array(W)?x[N]=oe(W):x[N]=W}return x}var Gn=function(){function S(x){s(this,S),this.states=[],this.startOffset={left:0,right:0,top:0,bottom:0},this.startDelta=void 0,this.result=void 0,this.endResult=void 0,this.startEdges=void 0,this.edges=void 0,this.interaction=void 0,this.interaction=x,this.result=Bi(),this.edges={left:!1,right:!1,top:!1,bottom:!1}}return l(S,[{key:"start",value:function(x,N){var W,ie,me=x.phase,Pe=this.interaction,Me=function(ct){var tt=ct.interactable.options[ct.prepared.name],b=tt.modifiers;return b&&b.length?b:["snap","snapSize","snapEdges","restrict","restrictEdges","restrictSize"].map(function(E){var R=tt[E];return R&&R.enabled&&{options:R,methods:R._methods}}).filter(function(E){return!!E})}(Pe);this.prepareStates(Me),this.startEdges=Re({},Pe.edges),this.edges=Re({},this.startEdges),this.startOffset=(W=Pe.rect,ie=N,W?{left:ie.x-W.left,top:ie.y-W.top,right:W.right-ie.x,bottom:W.bottom-ie.y}:{left:0,top:0,right:0,bottom:0}),this.startDelta={x:0,y:0};var Ge=this.fillArg({phase:me,pageCoords:N,preEnd:!1});return this.result=Bi(),this.startAll(Ge),this.result=this.setAll(Ge)}},{key:"fillArg",value:function(x){var N=this.interaction;return x.interaction=N,x.interactable=N.interactable,x.element=N.element,x.rect||(x.rect=N.rect),x.edges||(x.edges=this.startEdges),x.startOffset=this.startOffset,x}},{key:"startAll",value:function(x){for(var N=0,W=this.states;N<W.length;N++){var ie=W[N];ie.methods.start&&(x.state=ie,ie.methods.start(x))}}},{key:"setAll",value:function(x){var N=x.phase,W=x.preEnd,ie=x.skipModifiers,me=x.rect,Pe=x.edges;x.coords=Re({},x.pageCoords),x.rect=Re({},me),x.edges=Re({},Pe);for(var Me=ie?this.states.slice(ie):this.states,Ge=Bi(x.coords,x.rect),ct=0;ct<Me.length;ct++){var tt,b=Me[ct],E=b.options,R=Re({},x.coords),V=null;(tt=b.methods)!=null&&tt.set&&this.shouldDo(E,W,N)&&(x.state=b,V=b.methods.set(x),ht(x.edges,x.rect,{x:x.coords.x-R.x,y:x.coords.y-R.y})),Ge.eventProps.push(V)}Re(this.edges,x.edges),Ge.delta.x=x.coords.x-x.pageCoords.x,Ge.delta.y=x.coords.y-x.pageCoords.y,Ge.rectDelta.left=x.rect.left-me.left,Ge.rectDelta.right=x.rect.right-me.right,Ge.rectDelta.top=x.rect.top-me.top,Ge.rectDelta.bottom=x.rect.bottom-me.bottom;var te=this.result.coords,ye=this.result.rect;if(te&&ye){var Ee=Ge.rect.left!==ye.left||Ge.rect.right!==ye.right||Ge.rect.top!==ye.top||Ge.rect.bottom!==ye.bottom;Ge.changed=Ee||te.x!==Ge.coords.x||te.y!==Ge.coords.y}return Ge}},{key:"applyToInteraction",value:function(x){var N=this.interaction,W=x.phase,ie=N.coords.cur,me=N.coords.start,Pe=this.result,Me=this.startDelta,Ge=Pe.delta;W==="start"&&Re(this.startDelta,Pe.delta);for(var ct=0,tt=[[me,Me],[ie,Ge]];ct<tt.length;ct++){var b=tt[ct],E=b[0],R=b[1];E.page.x+=R.x,E.page.y+=R.y,E.client.x+=R.x,E.client.y+=R.y}var V=this.result.rectDelta,te=x.rect||N.rect;te.left+=V.left,te.right+=V.right,te.top+=V.top,te.bottom+=V.bottom,te.width=te.right-te.left,te.height=te.bottom-te.top}},{key:"setAndApply",value:function(x){var N=this.interaction,W=x.phase,ie=x.preEnd,me=x.skipModifiers,Pe=this.setAll(this.fillArg({preEnd:ie,phase:W,pageCoords:x.modifiedCoords||N.coords.cur.page}));if(this.result=Pe,!Pe.changed&&(!me||me<this.states.length)&&N.interacting())return!1;if(x.modifiedCoords){var Me=N.coords.cur.page,Ge={x:x.modifiedCoords.x-Me.x,y:x.modifiedCoords.y-Me.y};Pe.coords.x+=Ge.x,Pe.coords.y+=Ge.y,Pe.delta.x+=Ge.x,Pe.delta.y+=Ge.y}this.applyToInteraction(x)}},{key:"beforeEnd",value:function(x){var N=x.interaction,W=x.event,ie=this.states;if(ie&&ie.length){for(var me=!1,Pe=0;Pe<ie.length;Pe++){var Me=ie[Pe];x.state=Me;var Ge=Me.options,ct=Me.methods,tt=ct.beforeEnd&&ct.beforeEnd(x);if(tt)return this.endResult=tt,!1;me=me||!me&&this.shouldDo(Ge,!0,x.phase,!0)}me&&N.move({event:W,preEnd:!0})}}},{key:"stop",value:function(x){var N=x.interaction;if(this.states&&this.states.length){var W=Re({states:this.states,interactable:N.interactable,element:N.element,rect:null},x);this.fillArg(W);for(var ie=0,me=this.states;ie<me.length;ie++){var Pe=me[ie];W.state=Pe,Pe.methods.stop&&Pe.methods.stop(W)}this.states=null,this.endResult=null}}},{key:"prepareStates",value:function(x){this.states=[];for(var N=0;N<x.length;N++){var W=x[N],ie=W.options,me=W.methods,Pe=W.name;this.states.push({options:ie,methods:me,index:N,name:Pe})}return this.states}},{key:"restoreInteractionCoords",value:function(x){var N=x.interaction,W=N.coords,ie=N.rect,me=N.modification;if(me.result){for(var Pe=me.startDelta,Me=me.result,Ge=Me.delta,ct=Me.rectDelta,tt=0,b=[[W.start,Pe],[W.cur,Ge]];tt<b.length;tt++){var E=b[tt],R=E[0],V=E[1];R.page.x-=V.x,R.page.y-=V.y,R.client.x-=V.x,R.client.y-=V.y}ie.left-=ct.left,ie.right-=ct.right,ie.top-=ct.top,ie.bottom-=ct.bottom}}},{key:"shouldDo",value:function(x,N,W,ie){return!(!x||x.enabled===!1||ie&&!x.endOnly||x.endOnly&&!N||W==="start"&&!x.setStart)}},{key:"copyFrom",value:function(x){this.startOffset=x.startOffset,this.startDelta=x.startDelta,this.startEdges=x.startEdges,this.edges=x.edges,this.states=x.states.map(function(N){return Hn(N)}),this.result=Bi(Re({},x.result.coords),Re({},x.result.rect))}},{key:"destroy",value:function(){for(var x in this)this[x]=null}}]),S}();function Bi(S,x){return{rect:x,coords:S,delta:{x:0,y:0},rectDelta:{left:0,right:0,top:0,bottom:0},eventProps:[],changed:!0}}function Fn(S,x){var N=S.defaults,W={start:S.start,set:S.set,beforeEnd:S.beforeEnd,stop:S.stop},ie=function(me){var Pe=me||{};for(var Me in Pe.enabled=Pe.enabled!==!1,N)Me in Pe||(Pe[Me]=N[Me]);var Ge={options:Pe,methods:W,name:x,enable:function(){return Pe.enabled=!0,Ge},disable:function(){return Pe.enabled=!1,Ge}};return Ge};return x&&typeof x=="string"&&(ie._defaults=N,ie._methods=W),ie}function ei(S){var x=S.iEvent,N=S.interaction.modification.result;N&&(x.modifiers=N.eventProps)}var rs={id:"modifiers/base",before:["actions"],install:function(S){S.defaults.perAction.modifiers=[]},listeners:{"interactions:new":function(S){var x=S.interaction;x.modification=new Gn(x)},"interactions:before-action-start":function(S){var x=S.interaction,N=S.interaction.modification;N.start(S,x.coords.start.page),x.edges=N.edges,N.applyToInteraction(S)},"interactions:before-action-move":function(S){var x=S.interaction,N=x.modification,W=N.setAndApply(S);return x.edges=N.edges,W},"interactions:before-action-end":function(S){var x=S.interaction,N=x.modification,W=N.beforeEnd(S);return x.edges=N.startEdges,W},"interactions:action-start":ei,"interactions:action-move":ei,"interactions:action-end":ei,"interactions:after-action-start":function(S){return S.interaction.modification.restoreInteractionCoords(S)},"interactions:after-action-move":function(S){return S.interaction.modification.restoreInteractionCoords(S)},"interactions:stop":function(S){return S.interaction.modification.stop(S)}}},ti=rs,ys={base:{preventDefault:"auto",deltaSource:"page"},perAction:{enabled:!1,origin:{x:0,y:0}},actions:{}},Yn=function(S){u(N,S);var x=_(N);function N(W,ie,me,Pe,Me,Ge,ct){var tt;s(this,N),(tt=x.call(this,W)).relatedTarget=null,tt.screenX=void 0,tt.screenY=void 0,tt.button=void 0,tt.buttons=void 0,tt.ctrlKey=void 0,tt.shiftKey=void 0,tt.altKey=void 0,tt.metaKey=void 0,tt.page=void 0,tt.client=void 0,tt.delta=void 0,tt.rect=void 0,tt.x0=void 0,tt.y0=void 0,tt.t0=void 0,tt.dt=void 0,tt.duration=void 0,tt.clientX0=void 0,tt.clientY0=void 0,tt.velocity=void 0,tt.speed=void 0,tt.swipe=void 0,tt.axes=void 0,tt.preEnd=void 0,Me=Me||W.element;var b=W.interactable,E=(b&&b.options||ys).deltaSource,R=Ot(b,Me,me),V=Pe==="start",te=Pe==="end",ye=V?y(tt):W.prevEvent,Ee=V?W.coords.start:te?{page:ye.page,client:ye.client,timeStamp:W.coords.cur.timeStamp}:W.coords.cur;return tt.page=Re({},Ee.page),tt.client=Re({},Ee.client),tt.rect=Re({},W.rect),tt.timeStamp=Ee.timeStamp,te||(tt.page.x-=R.x,tt.page.y-=R.y,tt.client.x-=R.x,tt.client.y-=R.y),tt.ctrlKey=ie.ctrlKey,tt.altKey=ie.altKey,tt.shiftKey=ie.shiftKey,tt.metaKey=ie.metaKey,tt.button=ie.button,tt.buttons=ie.buttons,tt.target=Me,tt.currentTarget=Me,tt.preEnd=Ge,tt.type=ct||me+(Pe||""),tt.interactable=b,tt.t0=V?W.pointers[W.pointers.length-1].downTime:ye.t0,tt.x0=W.coords.start.page.x-R.x,tt.y0=W.coords.start.page.y-R.y,tt.clientX0=W.coords.start.client.x-R.x,tt.clientY0=W.coords.start.client.y-R.y,tt.delta=V||te?{x:0,y:0}:{x:tt[E].x-ye[E].x,y:tt[E].y-ye[E].y},tt.dt=W.coords.delta.timeStamp,tt.duration=tt.timeStamp-tt.t0,tt.velocity=Re({},W.coords.velocity[E]),tt.speed=We(tt.velocity.x,tt.velocity.y),tt.swipe=te||Pe==="inertiastart"?tt.getSwipe():null,tt}return l(N,[{key:"getSwipe",value:function(){var W=this._interaction;if(W.prevEvent.speed<600||this.timeStamp-W.prevEvent.timeStamp>150)return null;var ie=180*Math.atan2(W.prevEvent.velocityY,W.prevEvent.velocityX)/Math.PI;ie<0&&(ie+=360);var me=112.5<=ie&&ie<247.5,Pe=202.5<=ie&&ie<337.5;return{up:Pe,down:!Pe&&22.5<=ie&&ie<157.5,left:me,right:!me&&(292.5<=ie||ie<67.5),angle:ie,speed:W.prevEvent.speed,velocity:{x:W.prevEvent.velocityX,y:W.prevEvent.velocityY}}}},{key:"preventDefault",value:function(){}},{key:"stopImmediatePropagation",value:function(){this.immediatePropagationStopped=this.propagationStopped=!0}},{key:"stopPropagation",value:function(){this.propagationStopped=!0}}]),N}(Qe);Object.defineProperties(Yn.prototype,{pageX:{get:function(){return this.page.x},set:function(S){this.page.x=S}},pageY:{get:function(){return this.page.y},set:function(S){this.page.y=S}},clientX:{get:function(){return this.client.x},set:function(S){this.client.x=S}},clientY:{get:function(){return this.client.y},set:function(S){this.client.y=S}},dx:{get:function(){return this.delta.x},set:function(S){this.delta.x=S}},dy:{get:function(){return this.delta.y},set:function(S){this.delta.y=S}},velocityX:{get:function(){return this.velocity.x},set:function(S){this.velocity.x=S}},velocityY:{get:function(){return this.velocity.y},set:function(S){this.velocity.y=S}}});var Lr=l(function S(x,N,W,ie,me){s(this,S),this.id=void 0,this.pointer=void 0,this.event=void 0,this.downTime=void 0,this.downTarget=void 0,this.id=x,this.pointer=N,this.event=W,this.downTime=ie,this.downTarget=me}),Os=function(S){return S.interactable="",S.element="",S.prepared="",S.pointerIsDown="",S.pointerWasMoved="",S._proxy="",S}({}),gs=function(S){return S.start="",S.move="",S.end="",S.stop="",S.interacting="",S}({}),Pi=0,In=function(){function S(x){var N=this,W=x.pointerType,ie=x.scopeFire;s(this,S),this.interactable=null,this.element=null,this.rect=null,this._rects=void 0,this.edges=null,this._scopeFire=void 0,this.prepared={name:null,axis:null,edges:null},this.pointerType=void 0,this.pointers=[],this.downEvent=null,this.downPointer={},this._latestPointer={pointer:null,event:null,eventTarget:null},this.prevEvent=null,this.pointerIsDown=!1,this.pointerWasMoved=!1,this._interacting=!1,this._ending=!1,this._stopped=!0,this._proxy=void 0,this.simulation=null,this.doMove=xn(function(tt){this.move(tt)},"The interaction.doMove() method has been renamed to interaction.move()"),this.coords={start:{page:{x:0,y:0},client:{x:0,y:0},timeStamp:0},prev:{page:{x:0,y:0},client:{x:0,y:0},timeStamp:0},cur:{page:{x:0,y:0},client:{x:0,y:0},timeStamp:0},delta:{page:{x:0,y:0},client:{x:0,y:0},timeStamp:0},velocity:{page:{x:0,y:0},client:{x:0,y:0},timeStamp:0}},this._id=Pi++,this._scopeFire=ie,this.pointerType=W;var me=this;this._proxy={};var Pe=function(tt){Object.defineProperty(N._proxy,tt,{get:function(){return me[tt]}})};for(var Me in Os)Pe(Me);var Ge=function(tt){Object.defineProperty(N._proxy,tt,{value:function(){return me[tt].apply(me,arguments)}})};for(var ct in gs)Ge(ct);this._scopeFire("interactions:new",{interaction:this})}return l(S,[{key:"pointerMoveTolerance",get:function(){return 1}},{key:"pointerDown",value:function(x,N,W){var ie=this.updatePointer(x,N,W,!0),me=this.pointers[ie];this._scopeFire("interactions:down",{pointer:x,event:N,eventTarget:W,pointerIndex:ie,pointerInfo:me,type:"down",interaction:this})}},{key:"start",value:function(x,N,W){return!(this.interacting()||!this.pointerIsDown||this.pointers.length<(x.name==="gesture"?2:1)||!N.options[x.name].enabled)&&(Wn(this.prepared,x),this.interactable=N,this.element=W,this.rect=N.getRect(W),this.edges=this.prepared.edges?Re({},this.prepared.edges):{left:!0,right:!0,top:!0,bottom:!0},this._stopped=!1,this._interacting=this._doPhase({interaction:this,event:this.downEvent,phase:"start"})&&!this._stopped,this._interacting)}},{key:"pointerMove",value:function(x,N,W){this.simulation||this.modification&&this.modification.endResult||this.updatePointer(x,N,W,!1);var ie,me,Pe=this.coords.cur.page.x===this.coords.prev.page.x&&this.coords.cur.page.y===this.coords.prev.page.y&&this.coords.cur.client.x===this.coords.prev.client.x&&this.coords.cur.client.y===this.coords.prev.client.y;this.pointerIsDown&&!this.pointerWasMoved&&(ie=this.coords.cur.client.x-this.coords.start.client.x,me=this.coords.cur.client.y-this.coords.start.client.y,this.pointerWasMoved=We(ie,me)>this.pointerMoveTolerance);var Me,Ge,ct,tt=this.getPointerIndex(x),b={pointer:x,pointerIndex:tt,pointerInfo:this.pointers[tt],event:N,type:"move",eventTarget:W,dx:ie,dy:me,duplicate:Pe,interaction:this};Pe||(Me=this.coords.velocity,Ge=this.coords.delta,ct=Math.max(Ge.timeStamp/1e3,.001),Me.page.x=Ge.page.x/ct,Me.page.y=Ge.page.y/ct,Me.client.x=Ge.client.x/ct,Me.client.y=Ge.client.y/ct,Me.timeStamp=ct),this._scopeFire("interactions:move",b),Pe||this.simulation||(this.interacting()&&(b.type=null,this.move(b)),this.pointerWasMoved&&Pt(this.coords.prev,this.coords.cur))}},{key:"move",value:function(x){x&&x.event||je(this.coords.delta),(x=Re({pointer:this._latestPointer.pointer,event:this._latestPointer.event,eventTarget:this._latestPointer.eventTarget,interaction:this},x||{})).phase="move",this._doPhase(x)}},{key:"pointerUp",value:function(x,N,W,ie){var me=this.getPointerIndex(x);me===-1&&(me=this.updatePointer(x,N,W,!1));var Pe=/cancel$/i.test(N.type)?"cancel":"up";this._scopeFire("interactions:".concat(Pe),{pointer:x,pointerIndex:me,pointerInfo:this.pointers[me],event:N,eventTarget:W,type:Pe,curEventTarget:ie,interaction:this}),this.simulation||this.end(N),this.removePointer(x,N)}},{key:"documentBlur",value:function(x){this.end(x),this._scopeFire("interactions:blur",{event:x,type:"blur",interaction:this})}},{key:"end",value:function(x){var N;this._ending=!0,x=x||this._latestPointer.event,this.interacting()&&(N=this._doPhase({event:x,interaction:this,phase:"end"})),this._ending=!1,N===!0&&this.stop()}},{key:"currentAction",value:function(){return this._interacting?this.prepared.name:null}},{key:"interacting",value:function(){return this._interacting}},{key:"stop",value:function(){this._scopeFire("interactions:stop",{interaction:this}),this.interactable=this.element=null,this._interacting=!1,this._stopped=!0,this.prepared.name=this.prevEvent=null}},{key:"getPointerIndex",value:function(x){var N=ce(x);return this.pointerType==="mouse"||this.pointerType==="pen"?this.pointers.length-1:Se(this.pointers,function(W){return W.id===N})}},{key:"getPointerInfo",value:function(x){return this.pointers[this.getPointerIndex(x)]}},{key:"updatePointer",value:function(x,N,W,ie){var me,Pe,Me,Ge=ce(x),ct=this.getPointerIndex(x),tt=this.pointers[ct];return ie=ie!==!1&&(ie||/(down|start)$/i.test(N.type)),tt?tt.pointer=x:(tt=new Lr(Ge,x,N,null,null),ct=this.pointers.length,this.pointers.push(tt)),K(this.coords.cur,this.pointers.map(function(b){return b.pointer}),this._now()),me=this.coords.delta,Pe=this.coords.prev,Me=this.coords.cur,me.page.x=Me.page.x-Pe.page.x,me.page.y=Me.page.y-Pe.page.y,me.client.x=Me.client.x-Pe.client.x,me.client.y=Me.client.y-Pe.client.y,me.timeStamp=Me.timeStamp-Pe.timeStamp,ie&&(this.pointerIsDown=!0,tt.downTime=this.coords.cur.timeStamp,tt.downTarget=W,Nt(this.downPointer,x),this.interacting()||(Pt(this.coords.start,this.coords.cur),Pt(this.coords.prev,this.coords.cur),this.downEvent=N,this.pointerWasMoved=!1)),this._updateLatestPointer(x,N,W),this._scopeFire("interactions:update-pointer",{pointer:x,event:N,eventTarget:W,down:ie,pointerInfo:tt,pointerIndex:ct,interaction:this}),ct}},{key:"removePointer",value:function(x,N){var W=this.getPointerIndex(x);if(W!==-1){var ie=this.pointers[W];this._scopeFire("interactions:remove-pointer",{pointer:x,event:N,eventTarget:null,pointerIndex:W,pointerInfo:ie,interaction:this}),this.pointers.splice(W,1),this.pointerIsDown=!1}}},{key:"_updateLatestPointer",value:function(x,N,W){this._latestPointer.pointer=x,this._latestPointer.event=N,this._latestPointer.eventTarget=W}},{key:"destroy",value:function(){this._latestPointer.pointer=null,this._latestPointer.event=null,this._latestPointer.eventTarget=null}},{key:"_createPreparedEvent",value:function(x,N,W,ie){return new Yn(this,x,this.prepared.name,N,this.element,W,ie)}},{key:"_fireEvent",value:function(x){var N;(N=this.interactable)==null||N.fire(x),(!this.prevEvent||x.timeStamp>=this.prevEvent.timeStamp)&&(this.prevEvent=x)}},{key:"_doPhase",value:function(x){var N=x.event,W=x.phase,ie=x.preEnd,me=x.type,Pe=this.rect;if(Pe&&W==="move"&&(ht(this.edges,Pe,this.coords.delta[this.interactable.options.deltaSource]),Pe.width=Pe.right-Pe.left,Pe.height=Pe.bottom-Pe.top),this._scopeFire("interactions:before-action-".concat(W),x)===!1)return!1;var Me=x.iEvent=this._createPreparedEvent(N,W,ie,me);return this._scopeFire("interactions:action-".concat(W),x),W==="start"&&(this.prevEvent=Me),this._fireEvent(Me),this._scopeFire("interactions:after-action-".concat(W),x),!0}},{key:"_now",value:function(){return Date.now()}}]),S}();function Ft(S){Ke(S.interaction)}function Ke(S){if(!function(N){return!(!N.offset.pending.x&&!N.offset.pending.y)}(S))return!1;var x=S.offset.pending;return Lt(S.coords.cur,x),Lt(S.coords.delta,x),ht(S.edges,S.rect,x),x.x=0,x.y=0,!0}function wt(S){var x=S.x,N=S.y;this.offset.pending.x+=x,this.offset.pending.y+=N,this.offset.total.x+=x,this.offset.total.y+=N}function Lt(S,x){var N=S.page,W=S.client,ie=x.x,me=x.y;N.x+=ie,N.y+=me,W.x+=ie,W.y+=me}gs.offsetBy="";var Xt={id:"offset",before:["modifiers","pointer-events","actions","inertia"],install:function(S){S.Interaction.prototype.offsetBy=wt},listeners:{"interactions:new":function(S){S.interaction.offset={total:{x:0,y:0},pending:{x:0,y:0}}},"interactions:update-pointer":function(S){return function(x){x.pointerIsDown&&(Lt(x.coords.cur,x.offset.total),x.offset.pending.x=0,x.offset.pending.y=0)}(S.interaction)},"interactions:before-action-start":Ft,"interactions:before-action-move":Ft,"interactions:before-action-end":function(S){var x=S.interaction;if(Ke(x))return x.move({offset:!0}),x.end(),!1},"interactions:stop":function(S){var x=S.interaction;x.offset.total.x=0,x.offset.total.y=0,x.offset.pending.x=0,x.offset.pending.y=0}}},Jt=Xt,lr=function(){function S(x){s(this,S),this.active=!1,this.isModified=!1,this.smoothEnd=!1,this.allowResume=!1,this.modification=void 0,this.modifierCount=0,this.modifierArg=void 0,this.startCoords=void 0,this.t0=0,this.v0=0,this.te=0,this.targetOffset=void 0,this.modifiedOffset=void 0,this.currentOffset=void 0,this.lambda_v0=0,this.one_ve_v0=0,this.timeout=void 0,this.interaction=void 0,this.interaction=x}return l(S,[{key:"start",value:function(x){var N=this.interaction,W=kr(N);if(!W||!W.enabled)return!1;var ie=N.coords.velocity.client,me=We(ie.x,ie.y),Pe=this.modification||(this.modification=new Gn(N));if(Pe.copyFrom(N.modification),this.t0=N._now(),this.allowResume=W.allowResume,this.v0=me,this.currentOffset={x:0,y:0},this.startCoords=N.coords.cur.page,this.modifierArg=Pe.fillArg({pageCoords:this.startCoords,preEnd:!0,phase:"inertiastart"}),this.t0-N.coords.cur.timeStamp<50&&me>W.minSpeed&&me>W.endSpeed)this.startInertia();else{if(Pe.result=Pe.setAll(this.modifierArg),!Pe.result.changed)return!1;this.startSmoothEnd()}return N.modification.result.rect=null,N.offsetBy(this.targetOffset),N._doPhase({interaction:N,event:x,phase:"inertiastart"}),N.offsetBy({x:-this.targetOffset.x,y:-this.targetOffset.y}),N.modification.result.rect=null,this.active=!0,N.simulation=this,!0}},{key:"startInertia",value:function(){var x=this,N=this.interaction.coords.velocity.client,W=kr(this.interaction),ie=W.resistance,me=-Math.log(W.endSpeed/this.v0)/ie;this.targetOffset={x:(N.x-me)/ie,y:(N.y-me)/ie},this.te=me,this.lambda_v0=ie/this.v0,this.one_ve_v0=1-W.endSpeed/this.v0;var Pe=this.modification,Me=this.modifierArg;Me.pageCoords={x:this.startCoords.x+this.targetOffset.x,y:this.startCoords.y+this.targetOffset.y},Pe.result=Pe.setAll(Me),Pe.result.changed&&(this.isModified=!0,this.modifiedOffset={x:this.targetOffset.x+Pe.result.delta.x,y:this.targetOffset.y+Pe.result.delta.y}),this.onNextFrame(function(){return x.inertiaTick()})}},{key:"startSmoothEnd",value:function(){var x=this;this.smoothEnd=!0,this.isModified=!0,this.targetOffset={x:this.modification.result.delta.x,y:this.modification.result.delta.y},this.onNextFrame(function(){return x.smoothEndTick()})}},{key:"onNextFrame",value:function(x){var N=this;this.timeout=bn.request(function(){N.active&&x()})}},{key:"inertiaTick",value:function(){var x,N,W,ie,me,Pe,Me,Ge=this,ct=this.interaction,tt=kr(ct).resistance,b=(ct._now()-this.t0)/1e3;if(b<this.te){var E,R=1-(Math.exp(-tt*b)-this.lambda_v0)/this.one_ve_v0;this.isModified?(x=0,N=0,W=this.targetOffset.x,ie=this.targetOffset.y,me=this.modifiedOffset.x,Pe=this.modifiedOffset.y,E={x:En(Me=R,x,W,me),y:En(Me,N,ie,Pe)}):E={x:this.targetOffset.x*R,y:this.targetOffset.y*R};var V={x:E.x-this.currentOffset.x,y:E.y-this.currentOffset.y};this.currentOffset.x+=V.x,this.currentOffset.y+=V.y,ct.offsetBy(V),ct.move(),this.onNextFrame(function(){return Ge.inertiaTick()})}else ct.offsetBy({x:this.modifiedOffset.x-this.currentOffset.x,y:this.modifiedOffset.y-this.currentOffset.y}),this.end()}},{key:"smoothEndTick",value:function(){var x=this,N=this.interaction,W=N._now()-this.t0,ie=kr(N).smoothEndDuration;if(W<ie){var me={x:on(W,0,this.targetOffset.x,ie),y:on(W,0,this.targetOffset.y,ie)},Pe={x:me.x-this.currentOffset.x,y:me.y-this.currentOffset.y};this.currentOffset.x+=Pe.x,this.currentOffset.y+=Pe.y,N.offsetBy(Pe),N.move({skipModifiers:this.modifierCount}),this.onNextFrame(function(){return x.smoothEndTick()})}else N.offsetBy({x:this.targetOffset.x-this.currentOffset.x,y:this.targetOffset.y-this.currentOffset.y}),this.end()}},{key:"resume",value:function(x){var N=x.pointer,W=x.event,ie=x.eventTarget,me=this.interaction;me.offsetBy({x:-this.currentOffset.x,y:-this.currentOffset.y}),me.updatePointer(N,W,ie,!0),me._doPhase({interaction:me,event:W,phase:"resume"}),Pt(me.coords.prev,me.coords.cur),this.stop()}},{key:"end",value:function(){this.interaction.move(),this.interaction.end(),this.stop()}},{key:"stop",value:function(){this.active=this.smoothEnd=!1,this.interaction.simulation=null,bn.cancel(this.timeout)}}]),S}();function kr(S){var x=S.interactable,N=S.prepared;return x&&x.options&&N.name&&x.options[N.name].inertia}var Gr={id:"inertia",before:["modifiers","actions"],install:function(S){var x=S.defaults;S.usePlugin(Jt),S.usePlugin(ti),S.actions.phases.inertiastart=!0,S.actions.phases.resume=!0,x.perAction.inertia={enabled:!1,resistance:10,minSpeed:100,endSpeed:10,allowResume:!0,smoothEndDuration:300}},listeners:{"interactions:new":function(S){var x=S.interaction;x.inertia=new lr(x)},"interactions:before-action-end":function(S){var x=S.interaction,N=S.event;return(!x._interacting||x.simulation||!x.inertia.start(N))&&null},"interactions:down":function(S){var x=S.interaction,N=S.eventTarget,W=x.inertia;if(W.active)for(var ie=N;I.element(ie);){if(ie===x.element){W.resume(S);break}ie=G(ie)}},"interactions:stop":function(S){var x=S.interaction.inertia;x.active&&x.stop()},"interactions:before-action-resume":function(S){var x=S.interaction.modification;x.stop(S),x.start(S,S.interaction.coords.cur.page),x.applyToInteraction(S)},"interactions:before-action-inertiastart":function(S){return S.interaction.modification.setAndApply(S)},"interactions:action-resume":ei,"interactions:action-inertiastart":ei,"interactions:after-action-inertiastart":function(S){return S.interaction.modification.restoreInteractionCoords(S)},"interactions:after-action-resume":function(S){return S.interaction.modification.restoreInteractionCoords(S)}}};function En(S,x,N,W){var ie=1-S;return ie*ie*x+2*ie*S*N+S*S*W}function on(S,x,N,W){return-N*(S/=W)*(S-2)+x}var bs=Gr;function Zr(S,x){for(var N=0;N<x.length;N++){var W=x[N];if(S.immediatePropagationStopped)break;W(S)}}var Ns=function(){function S(x){s(this,S),this.options=void 0,this.types={},this.propagationStopped=!1,this.immediatePropagationStopped=!1,this.global=void 0,this.options=Re({},x||{})}return l(S,[{key:"fire",value:function(x){var N,W=this.global;(N=this.types[x.type])&&Zr(x,N),!x.propagationStopped&&W&&(N=W[x.type])&&Zr(x,N)}},{key:"on",value:function(x,N){var W=et(x,N);for(x in W)this.types[x]=pt(this.types[x]||[],W[x])}},{key:"off",value:function(x,N){var W=et(x,N);for(x in W){var ie=this.types[x];if(ie&&ie.length)for(var me=0,Pe=W[x];me<Pe.length;me++){var Me=Pe[me],Ge=ie.indexOf(Me);Ge!==-1&&ie.splice(Ge,1)}}}},{key:"getRect",value:function(x){return null}}]),S}(),Xs=function(){function S(x){s(this,S),this.currentTarget=void 0,this.originalEvent=void 0,this.type=void 0,this.originalEvent=x,Nt(this,x)}return l(S,[{key:"preventOriginalDefault",value:function(){this.originalEvent.preventDefault()}},{key:"stopPropagation",value:function(){this.originalEvent.stopPropagation()}},{key:"stopImmediatePropagation",value:function(){this.originalEvent.stopImmediatePropagation()}}]),S}();function Zt(S){return I.object(S)?{capture:!!S.capture,passive:!!S.passive}:{capture:!!S,passive:!1}}function Li(S,x){return S===x||(typeof S=="boolean"?!!x.capture===S&&!x.passive:!!S.capture==!!x.capture&&!!S.passive==!!x.passive)}var Ds={id:"events",install:function(S){var x,N=[],W={},ie=[],me={add:Pe,remove:Me,addDelegate:function(tt,b,E,R,V){var te=Zt(V);if(!W[E]){W[E]=[];for(var ye=0;ye<ie.length;ye++){var Ee=ie[ye];Pe(Ee,E,Ge),Pe(Ee,E,ct,!0)}}var De=W[E],st=Q(De,function(yt){return yt.selector===tt&&yt.context===b});st||(st={selector:tt,context:b,listeners:[]},De.push(st)),st.listeners.push({func:R,options:te})},removeDelegate:function(tt,b,E,R,V){var te,ye=Zt(V),Ee=W[E],De=!1;if(Ee)for(te=Ee.length-1;te>=0;te--){var st=Ee[te];if(st.selector===tt&&st.context===b){for(var yt=st.listeners,ot=yt.length-1;ot>=0;ot--){var at=yt[ot];if(at.func===R&&Li(at.options,ye)){yt.splice(ot,1),yt.length||(Ee.splice(te,1),Me(b,E,Ge),Me(b,E,ct,!0)),De=!0;break}}if(De)break}}},delegateListener:Ge,delegateUseCapture:ct,delegatedEvents:W,documents:ie,targets:N,supportsOptions:!1,supportsPassive:!1};function Pe(tt,b,E,R){if(tt.addEventListener){var V=Zt(R),te=Q(N,function(ye){return ye.eventTarget===tt});te||(te={eventTarget:tt,events:{}},N.push(te)),te.events[b]||(te.events[b]=[]),Q(te.events[b],function(ye){return ye.func===E&&Li(ye.options,V)})||(tt.addEventListener(b,E,me.supportsOptions?V:V.capture),te.events[b].push({func:E,options:V}))}}function Me(tt,b,E,R){if(tt.addEventListener&&tt.removeEventListener){var V=Se(N,function(ft){return ft.eventTarget===tt}),te=N[V];if(te&&te.events)if(b!=="all"){var ye=!1,Ee=te.events[b];if(Ee){if(E==="all"){for(var De=Ee.length-1;De>=0;De--){var st=Ee[De];Me(tt,b,st.func,st.options)}return}for(var yt=Zt(R),ot=0;ot<Ee.length;ot++){var at=Ee[ot];if(at.func===E&&Li(at.options,yt)){tt.removeEventListener(b,E,me.supportsOptions?yt:yt.capture),Ee.splice(ot,1),Ee.length===0&&(delete te.events[b],ye=!0);break}}}ye&&!Object.keys(te.events).length&&N.splice(V,1)}else for(b in te.events)te.events.hasOwnProperty(b)&&Me(tt,b,"all")}}function Ge(tt,b){for(var E=Zt(b),R=new Xs(tt),V=W[tt.type],te=it(tt)[0],ye=te;I.element(ye);){for(var Ee=0;Ee<V.length;Ee++){var De=V[Ee],st=De.selector,yt=De.context;if(ee(ye,st)&&fe(yt,te)&&fe(yt,ye)){var ot=De.listeners;R.currentTarget=ye;for(var at=0;at<ot.length;at++){var ft=ot[at];Li(ft.options,E)&&ft.func(R)}}}ye=G(ye)}}function ct(tt){return Ge(tt,!0)}return(x=S.document)==null||x.createElement("div").addEventListener("test",null,{get capture(){return me.supportsOptions=!0},get passive(){return me.supportsPassive=!0}}),S.events=me,me}},Ms={methodOrder:["simulationResume","mouseOrPen","hasPointer","idle"],search:function(S){for(var x=0,N=Ms.methodOrder;x<N.length;x++){var W=N[x],ie=Ms[W](S);if(ie)return ie}return null},simulationResume:function(S){var x=S.pointerType,N=S.eventType,W=S.eventTarget,ie=S.scope;if(!/down|start/i.test(N))return null;for(var me=0,Pe=ie.interactions.list;me<Pe.length;me++){var Me=Pe[me],Ge=W;if(Me.simulation&&Me.simulation.allowResume&&Me.pointerType===x)for(;Ge;){if(Ge===Me.element)return Me;Ge=G(Ge)}}return null},mouseOrPen:function(S){var x,N=S.pointerId,W=S.pointerType,ie=S.eventType,me=S.scope;if(W!=="mouse"&&W!=="pen")return null;for(var Pe=0,Me=me.interactions.list;Pe<Me.length;Pe++){var Ge=Me[Pe];if(Ge.pointerType===W){if(Ge.simulation&&!xa(Ge,N))continue;if(Ge.interacting())return Ge;x||(x=Ge)}}if(x)return x;for(var ct=0,tt=me.interactions.list;ct<tt.length;ct++){var b=tt[ct];if(!(b.pointerType!==W||/down/i.test(ie)&&b.simulation))return b}return null},hasPointer:function(S){for(var x=S.pointerId,N=0,W=S.scope.interactions.list;N<W.length;N++){var ie=W[N];if(xa(ie,x))return ie}return null},idle:function(S){for(var x=S.pointerType,N=0,W=S.scope.interactions.list;N<W.length;N++){var ie=W[N];if(ie.pointers.length===1){var me=ie.interactable;if(me&&(!me.options.gesture||!me.options.gesture.enabled))continue}else if(ie.pointers.length>=2)continue;if(!ie.interacting()&&x===ie.pointerType)return ie}return null}};function xa(S,x){return S.pointers.some(function(N){return N.id===x})}var vs=Ms,Zs=["pointerDown","pointerMove","pointerUp","updatePointer","removePointer","windowBlur"];function Qs(S,x){return function(N){var W=x.interactions.list,ie=Ie(N),me=it(N),Pe=me[0],Me=me[1],Ge=[];if(/^touch/.test(N.type)){x.prevTouchTime=x.now();for(var ct=0,tt=N.changedTouches;ct<tt.length;ct++){var b=tt[ct],E={pointer:b,pointerId:ce(b),pointerType:ie,eventType:N.type,eventTarget:Pe,curEventTarget:Me,scope:x},R=_s(E);Ge.push([E.pointer,E.eventTarget,E.curEventTarget,R])}}else{var V=!1;if(!xe.supportsPointerEvent&&/mouse/.test(N.type)){for(var te=0;te<W.length&&!V;te++)V=W[te].pointerType!=="mouse"&&W[te].pointerIsDown;V=V||x.now()-x.prevTouchTime<500||N.timeStamp===0}if(!V){var ye={pointer:N,pointerId:ce(N),pointerType:ie,eventType:N.type,curEventTarget:Me,eventTarget:Pe,scope:x},Ee=_s(ye);Ge.push([ye.pointer,ye.eventTarget,ye.curEventTarget,Ee])}}for(var De=0;De<Ge.length;De++){var st=Ge[De],yt=st[0],ot=st[1],at=st[2];st[3][S](yt,N,ot,at)}}}function _s(S){var x=S.pointerType,N=S.scope,W={interaction:vs.search(S),searchDetails:S};return N.fire("interactions:find",W),W.interaction||N.interactions.new({pointerType:x})}function Hi(S,x){var N=S.doc,W=S.scope,ie=S.options,me=W.interactions.docEvents,Pe=W.events,Me=Pe[x];for(var Ge in W.browser.isIOS&&!ie.events&&(ie.events={passive:!1}),Pe.delegatedEvents)Me(N,Ge,Pe.delegateListener),Me(N,Ge,Pe.delegateUseCapture,!0);for(var ct=ie&&ie.events,tt=0;tt<me.length;tt++){var b=me[tt];Me(N,b.type,b.listener,ct)}}var Rs={id:"core/interactions",install:function(S){for(var x={},N=0;N<Zs.length;N++){var W=Zs[N];x[W]=Qs(W,S)}var ie,me=xe.pEventTypes;function Pe(){for(var Me=0,Ge=S.interactions.list;Me<Ge.length;Me++){var ct=Ge[Me];if(ct.pointerIsDown&&ct.pointerType==="touch"&&!ct._interacting)for(var tt=function(){var R=E[b];S.documents.some(function(V){return fe(V.doc,R.downTarget)})||ct.removePointer(R.pointer,R.event)},b=0,E=ct.pointers;b<E.length;b++)tt()}}(ie=Ae.PointerEvent?[{type:me.down,listener:Pe},{type:me.down,listener:x.pointerDown},{type:me.move,listener:x.pointerMove},{type:me.up,listener:x.pointerUp},{type:me.cancel,listener:x.pointerUp}]:[{type:"mousedown",listener:x.pointerDown},{type:"mousemove",listener:x.pointerMove},{type:"mouseup",listener:x.pointerUp},{type:"touchstart",listener:Pe},{type:"touchstart",listener:x.pointerDown},{type:"touchmove",listener:x.pointerMove},{type:"touchend",listener:x.pointerUp},{type:"touchcancel",listener:x.pointerUp}]).push({type:"blur",listener:function(Me){for(var Ge=0,ct=S.interactions.list;Ge<ct.length;Ge++)ct[Ge].documentBlur(Me)}}),S.prevTouchTime=0,S.Interaction=function(Me){u(ct,Me);var Ge=_(ct);function ct(){return s(this,ct),Ge.apply(this,arguments)}return l(ct,[{key:"pointerMoveTolerance",get:function(){return S.interactions.pointerMoveTolerance},set:function(tt){S.interactions.pointerMoveTolerance=tt}},{key:"_now",value:function(){return S.now()}}]),ct}(In),S.interactions={list:[],new:function(Me){Me.scopeFire=function(ct,tt){return S.fire(ct,tt)};var Ge=new S.Interaction(Me);return S.interactions.list.push(Ge),Ge},listeners:x,docEvents:ie,pointerMoveTolerance:1},S.usePlugin(Br)},listeners:{"scope:add-document":function(S){return Hi(S,"add")},"scope:remove-document":function(S){return Hi(S,"remove")},"interactable:unset":function(S,x){for(var N=S.interactable,W=x.interactions.list.length-1;W>=0;W--){var ie=x.interactions.list[W];ie.interactable===N&&(ie.stop(),x.fire("interactions:destroy",{interaction:ie}),ie.destroy(),x.interactions.list.length>2&&x.interactions.list.splice(W,1))}}},onDocSignal:Hi,doOnInteractions:Qs,methodNames:Zs},Ka=Rs,Fi=function(S){return S[S.On=0]="On",S[S.Off=1]="Off",S}(Fi||{}),Sa=function(){function S(x,N,W,ie){s(this,S),this.target=void 0,this.options=void 0,this._actions=void 0,this.events=new Ns,this._context=void 0,this._win=void 0,this._doc=void 0,this._scopeEvents=void 0,this._actions=N.actions,this.target=x,this._context=N.context||W,this._win=T(Le(x)?this._context:x),this._doc=this._win.document,this._scopeEvents=ie,this.set(N)}return l(S,[{key:"_defaults",get:function(){return{base:{},perAction:{},actions:{}}}},{key:"setOnEvents",value:function(x,N){return I.func(N.onstart)&&this.on("".concat(x,"start"),N.onstart),I.func(N.onmove)&&this.on("".concat(x,"move"),N.onmove),I.func(N.onend)&&this.on("".concat(x,"end"),N.onend),I.func(N.oninertiastart)&&this.on("".concat(x,"inertiastart"),N.oninertiastart),this}},{key:"updatePerActionListeners",value:function(x,N,W){var ie,me=this,Pe=(ie=this._actions.map[x])==null?void 0:ie.filterEventType,Me=function(Ge){return(Pe==null||Pe(Ge))&&vn(Ge,me._actions)};(I.array(N)||I.object(N))&&this._onOff(Fi.Off,x,N,void 0,Me),(I.array(W)||I.object(W))&&this._onOff(Fi.On,x,W,void 0,Me)}},{key:"setPerAction",value:function(x,N){var W=this._defaults;for(var ie in N){var me=ie,Pe=this.options[x],Me=N[me];me==="listeners"&&this.updatePerActionListeners(x,Pe.listeners,Me),I.array(Me)?Pe[me]=oe(Me):I.plainObject(Me)?(Pe[me]=Re(Pe[me]||{},Hn(Me)),I.object(W.perAction[me])&&"enabled"in W.perAction[me]&&(Pe[me].enabled=Me.enabled!==!1)):I.bool(Me)&&I.object(W.perAction[me])?Pe[me].enabled=Me:Pe[me]=Me}}},{key:"getRect",value:function(x){return x=x||(I.element(this.target)?this.target:null),I.string(this.target)&&(x=x||this._context.querySelector(this.target)),Ce(x)}},{key:"rectChecker",value:function(x){var N=this;return I.func(x)?(this.getRect=function(W){var ie=Re({},x.call(N,W));return"width"in ie||(ie.width=ie.right-ie.left,ie.height=ie.bottom-ie.top),ie},this):x===null?(delete this.getRect,this):this.getRect}},{key:"_backCompatOption",value:function(x,N){if(Le(N)||I.object(N)){for(var W in this.options[x]=N,this._actions.map)this.options[W][x]=N;return this}return this.options[x]}},{key:"origin",value:function(x){return this._backCompatOption("origin",x)}},{key:"deltaSource",value:function(x){return x==="page"||x==="client"?(this.options.deltaSource=x,this):this.options.deltaSource}},{key:"getAllElements",value:function(){var x=this.target;return I.string(x)?Array.from(this._context.querySelectorAll(x)):I.func(x)&&x.getAllElements?x.getAllElements():I.element(x)?[x]:[]}},{key:"context",value:function(){return this._context}},{key:"inContext",value:function(x){return this._context===x.ownerDocument||fe(this._context,x)}},{key:"testIgnoreAllow",value:function(x,N,W){return!this.testIgnore(x.ignoreFrom,N,W)&&this.testAllow(x.allowFrom,N,W)}},{key:"testAllow",value:function(x,N,W){return!x||!!I.element(W)&&(I.string(x)?Z(W,x,N):!!I.element(x)&&fe(x,W))}},{key:"testIgnore",value:function(x,N,W){return!(!x||!I.element(W))&&(I.string(x)?Z(W,x,N):!!I.element(x)&&fe(x,W))}},{key:"fire",value:function(x){return this.events.fire(x),this}},{key:"_onOff",value:function(x,N,W,ie,me){I.object(N)&&!I.array(N)&&(ie=W,W=null);var Pe=et(N,W,me);for(var Me in Pe){Me==="wheel"&&(Me=xe.wheelEvent);for(var Ge=0,ct=Pe[Me];Ge<ct.length;Ge++){var tt=ct[Ge];vn(Me,this._actions)?this.events[x===Fi.On?"on":"off"](Me,tt):I.string(this.target)?this._scopeEvents[x===Fi.On?"addDelegate":"removeDelegate"](this.target,this._context,Me,tt,ie):this._scopeEvents[x===Fi.On?"add":"remove"](this.target,Me,tt,ie)}}return this}},{key:"on",value:function(x,N,W){return this._onOff(Fi.On,x,N,W)}},{key:"off",value:function(x,N,W){return this._onOff(Fi.Off,x,N,W)}},{key:"set",value:function(x){var N=this._defaults;for(var W in I.object(x)||(x={}),this.options=Hn(N.base),this._actions.methodDict){var ie=W,me=this._actions.methodDict[ie];this.options[ie]={},this.setPerAction(ie,Re(Re({},N.perAction),N.actions[ie])),this[me](x[ie])}for(var Pe in x)Pe!=="getRect"?I.func(this[Pe])&&this[Pe](x[Pe]):this.rectChecker(x.getRect);return this}},{key:"unset",value:function(){if(I.string(this.target))for(var x in this._scopeEvents.delegatedEvents)for(var N=this._scopeEvents.delegatedEvents[x],W=N.length-1;W>=0;W--){var ie=N[W],me=ie.selector,Pe=ie.context,Me=ie.listeners;me===this.target&&Pe===this._context&&N.splice(W,1);for(var Ge=Me.length-1;Ge>=0;Ge--)this._scopeEvents.removeDelegate(this.target,this._context,x,Me[Ge][0],Me[Ge][1])}else this._scopeEvents.remove(this.target,"all")}}]),S}(),Bs=function(){function S(x){var N=this;s(this,S),this.list=[],this.selectorMap={},this.scope=void 0,this.scope=x,x.addListeners({"interactable:unset":function(W){var ie=W.interactable,me=ie.target,Pe=I.string(me)?N.selectorMap[me]:me[N.scope.id],Me=Se(Pe,function(Ge){return Ge===ie});Pe.splice(Me,1)}})}return l(S,[{key:"new",value:function(x,N){N=Re(N||{},{actions:this.scope.actions});var W=new this.scope.Interactable(x,N,this.scope.document,this.scope.events);return this.scope.addDocument(W._doc),this.list.push(W),I.string(x)?(this.selectorMap[x]||(this.selectorMap[x]=[]),this.selectorMap[x].push(W)):(W.target[this.scope.id]||Object.defineProperty(x,this.scope.id,{value:[],configurable:!0}),x[this.scope.id].push(W)),this.scope.fire("interactable:new",{target:x,options:N,interactable:W,win:this.scope._win}),W}},{key:"getExisting",value:function(x,N){var W=N&&N.context||this.scope.document,ie=I.string(x),me=ie?this.selectorMap[x]:x[this.scope.id];if(me)return Q(me,function(Pe){return Pe._context===W&&(ie||Pe.inContext(x))})}},{key:"forEachMatch",value:function(x,N){for(var W=0,ie=this.list;W<ie.length;W++){var me=ie[W],Pe=void 0;if((I.string(me.target)?I.element(x)&&ee(x,me.target):x===me.target)&&me.inContext(x)&&(Pe=N(me)),Pe!==void 0)return Pe}}}]),S}(),ea=function(){function S(){var x=this;s(this,S),this.id="__interact_scope_".concat(Math.floor(100*Math.random())),this.isInitialized=!1,this.listenerMaps=[],this.browser=xe,this.defaults=Hn(ys),this.Eventable=Ns,this.actions={map:{},phases:{start:!0,move:!0,end:!0},methodDict:{},phaselessTypes:{}},this.interactStatic=function(W){var ie=function me(Pe,Me){var Ge=W.interactables.getExisting(Pe,Me);return Ge||((Ge=W.interactables.new(Pe,Me)).events.global=me.globalEvents),Ge};return ie.getPointerAverage=$e,ie.getTouchBBox=X,ie.getTouchDistance=M,ie.getTouchAngle=q,ie.getElementRect=Ce,ie.getElementClientRect=re,ie.matchesSelector=ee,ie.closest=pe,ie.globalEvents={},ie.version="1.10.28",ie.scope=W,ie.use=function(me,Pe){return this.scope.usePlugin(me,Pe),this},ie.isSet=function(me,Pe){return!!this.scope.interactables.get(me,Pe&&Pe.context)},ie.on=xn(function(me,Pe,Me){if(I.string(me)&&me.search(" ")!==-1&&(me=me.trim().split(/ +/)),I.array(me)){for(var Ge=0,ct=me;Ge<ct.length;Ge++){var tt=ct[Ge];this.on(tt,Pe,Me)}return this}if(I.object(me)){for(var b in me)this.on(b,me[b],Pe);return this}return vn(me,this.scope.actions)?this.globalEvents[me]?this.globalEvents[me].push(Pe):this.globalEvents[me]=[Pe]:this.scope.events.add(this.scope.document,me,Pe,{options:Me}),this},"The interact.on() method is being deprecated"),ie.off=xn(function(me,Pe,Me){if(I.string(me)&&me.search(" ")!==-1&&(me=me.trim().split(/ +/)),I.array(me)){for(var Ge=0,ct=me;Ge<ct.length;Ge++){var tt=ct[Ge];this.off(tt,Pe,Me)}return this}if(I.object(me)){for(var b in me)this.off(b,me[b],Pe);return this}var E;return vn(me,this.scope.actions)?me in this.globalEvents&&(E=this.globalEvents[me].indexOf(Pe))!==-1&&this.globalEvents[me].splice(E,1):this.scope.events.remove(this.scope.document,me,Pe,Me),this},"The interact.off() method is being deprecated"),ie.debug=function(){return this.scope},ie.supportsTouch=function(){return xe.supportsTouch},ie.supportsPointerEvent=function(){return xe.supportsPointerEvent},ie.stop=function(){for(var me=0,Pe=this.scope.interactions.list;me<Pe.length;me++)Pe[me].stop();return this},ie.pointerMoveTolerance=function(me){return I.number(me)?(this.scope.interactions.pointerMoveTolerance=me,this):this.scope.interactions.pointerMoveTolerance},ie.addDocument=function(me,Pe){this.scope.addDocument(me,Pe)},ie.removeDocument=function(me){this.scope.removeDocument(me)},ie}(this),this.InteractEvent=Yn,this.Interactable=void 0,this.interactables=new Bs(this),this._win=void 0,this.document=void 0,this.window=void 0,this.documents=[],this._plugins={list:[],map:{}},this.onWindowUnload=function(W){return x.removeDocument(W.target)};var N=this;this.Interactable=function(W){u(me,W);var ie=_(me);function me(){return s(this,me),ie.apply(this,arguments)}return l(me,[{key:"_defaults",get:function(){return N.defaults}},{key:"set",value:function(Pe){return k(d(me.prototype),"set",this).call(this,Pe),N.fire("interactable:set",{options:Pe,interactable:this}),this}},{key:"unset",value:function(){k(d(me.prototype),"unset",this).call(this);var Pe=N.interactables.list.indexOf(this);Pe<0||(N.interactables.list.splice(Pe,1),N.fire("interactable:unset",{interactable:this}))}}]),me}(Sa)}return l(S,[{key:"addListeners",value:function(x,N){this.listenerMaps.push({id:N,map:x})}},{key:"fire",value:function(x,N){for(var W=0,ie=this.listenerMaps;W<ie.length;W++){var me=ie[W].map[x];if(me&&me(N,this,x)===!1)return!1}}},{key:"init",value:function(x){return this.isInitialized?this:function(N,W){return N.isInitialized=!0,I.window(W)&&C(W),Ae.init(W),xe.init(W),bn.init(W),N.window=W,N.document=W.document,N.usePlugin(Ka),N.usePlugin(Ds),N}(this,x)}},{key:"pluginIsInstalled",value:function(x){var N=x.id;return N?!!this._plugins.map[N]:this._plugins.list.indexOf(x)!==-1}},{key:"usePlugin",value:function(x,N){if(!this.isInitialized)return this;if(this.pluginIsInstalled(x))return this;if(x.id&&(this._plugins.map[x.id]=x),this._plugins.list.push(x),x.install&&x.install(this,N),x.listeners&&x.before){for(var W=0,ie=this.listenerMaps.length,me=x.before.reduce(function(Me,Ge){return Me[Ge]=!0,Me[Ls(Ge)]=!0,Me},{});W<ie;W++){var Pe=this.listenerMaps[W].id;if(Pe&&(me[Pe]||me[Ls(Pe)]))break}this.listenerMaps.splice(W,0,{id:x.id,map:x.listeners})}else x.listeners&&this.listenerMaps.push({id:x.id,map:x.listeners});return this}},{key:"addDocument",value:function(x,N){if(this.getDocIndex(x)!==-1)return!1;var W=T(x);N=N?Re({},N):{},this.documents.push({doc:x,options:N}),this.events.documents.push(x),x!==this.document&&this.events.add(W,"unload",this.onWindowUnload),this.fire("scope:add-document",{doc:x,window:W,scope:this,options:N})}},{key:"removeDocument",value:function(x){var N=this.getDocIndex(x),W=T(x),ie=this.documents[N].options;this.events.remove(W,"unload",this.onWindowUnload),this.documents.splice(N,1),this.events.documents.splice(N,1),this.fire("scope:remove-document",{doc:x,window:W,scope:this,options:ie})}},{key:"getDocIndex",value:function(x){for(var N=0;N<this.documents.length;N++)if(this.documents[N].doc===x)return N;return-1}},{key:"getDocOptions",value:function(x){var N=this.getDocIndex(x);return N===-1?null:this.documents[N].options}},{key:"now",value:function(){return(this.window.Date||Date).now()}}]),S}();function Ls(S){return S&&S.replace(/\/.*$/,"")}var xs=new ea,On=xs.interactStatic,ns=typeof globalThis<"u"?globalThis:window;xs.init(ns);var wa=Object.freeze({__proto__:null,edgeTarget:function(){},elements:function(){},grid:function(S){var x=[["x","y"],["left","top"],["right","bottom"],["width","height"]].filter(function(W){var ie=W[0],me=W[1];return ie in S||me in S}),N=function(W,ie){for(var me=S.range,Pe=S.limits,Me=Pe===void 0?{left:-1/0,right:1/0,top:-1/0,bottom:1/0}:Pe,Ge=S.offset,ct=Ge===void 0?{x:0,y:0}:Ge,tt={range:me,grid:S,x:null,y:null},b=0;b<x.length;b++){var E=x[b],R=E[0],V=E[1],te=Math.round((W-ct.x)/S[R]),ye=Math.round((ie-ct.y)/S[V]);tt[R]=Math.max(Me.left,Math.min(Me.right,te*S[R]+ct.x)),tt[V]=Math.max(Me.top,Math.min(Me.bottom,ye*S[V]+ct.y))}return tt};return N.grid=S,N.coordFields=x,N}}),Ha={id:"snappers",install:function(S){var x=S.interactStatic;x.snappers=Re(x.snappers||{},wa),x.createSnapGrid=x.snappers.grid}},ji=Ha,Ss={start:function(S){var x=S.state,N=S.rect,W=S.edges,ie=S.pageCoords,me=x.options,Pe=me.ratio,Me=me.enabled,Ge=x.options,ct=Ge.equalDelta,tt=Ge.modifiers;Pe==="preserve"&&(Pe=N.width/N.height),x.startCoords=Re({},ie),x.startRect=Re({},N),x.ratio=Pe,x.equalDelta=ct;var b=x.linkedEdges={top:W.top||W.left&&!W.bottom,left:W.left||W.top&&!W.right,bottom:W.bottom||W.right&&!W.top,right:W.right||W.bottom&&!W.left};if(x.xIsPrimaryAxis=!(!W.left&&!W.right),x.equalDelta){var E=(b.left?1:-1)*(b.top?1:-1);x.edgeSign={x:E,y:E}}else x.edgeSign={x:b.left?-1:1,y:b.top?-1:1};if(Me!==!1&&Re(W,b),tt!=null&&tt.length){var R=new Gn(S.interaction);R.copyFrom(S.interaction.modification),R.prepareStates(tt),x.subModification=R,R.startAll(n({},S))}},set:function(S){var x=S.state,N=S.rect,W=S.coords,ie=x.linkedEdges,me=Re({},W),Pe=x.equalDelta?ta:Fs;if(Re(S.edges,ie),Pe(x,x.xIsPrimaryAxis,W,N),!x.subModification)return null;var Me=Re({},N);ht(ie,Me,{x:W.x-me.x,y:W.y-me.y});var Ge=x.subModification.setAll(n(n({},S),{},{rect:Me,edges:ie,pageCoords:W,prevCoords:W,prevRect:Me})),ct=Ge.delta;return Ge.changed&&(Pe(x,Math.abs(ct.x)>Math.abs(ct.y),Ge.coords,Ge.rect),Re(W,Ge.coords)),Ge.eventProps},defaults:{ratio:"preserve",equalDelta:!1,modifiers:[],enabled:!1}};function ta(S,x,N){var W=S.startCoords,ie=S.edgeSign;x?N.y=W.y+(N.x-W.x)*ie.y:N.x=W.x+(N.y-W.y)*ie.x}function Fs(S,x,N,W){var ie=S.startRect,me=S.startCoords,Pe=S.ratio,Me=S.edgeSign;if(x){var Ge=W.width/Pe;N.y=me.y+(Ge-ie.height)*Me.y}else{var ct=W.height*Pe;N.x=me.x+(ct-ie.width)*Me.x}}var ra=Fn(Ss,"aspectRatio"),js=function(){};js._defaults={};var An=js;function ci(S,x,N){return I.func(S)?ut(S,x.interactable,x.element,[N.x,N.y,x]):ut(S,x.interactable,x.element)}var ri={start:function(S){var x=S.rect,N=S.startOffset,W=S.state,ie=S.interaction,me=S.pageCoords,Pe=W.options,Me=Pe.elementRect,Ge=Re({left:0,top:0,right:0,bottom:0},Pe.offset||{});if(x&&Me){var ct=ci(Pe.restriction,ie,me);if(ct){var tt=ct.right-ct.left-x.width,b=ct.bottom-ct.top-x.height;tt<0&&(Ge.left+=tt,Ge.right+=tt),b<0&&(Ge.top+=b,Ge.bottom+=b)}Ge.left+=N.left-x.width*Me.left,Ge.top+=N.top-x.height*Me.top,Ge.right+=N.right-x.width*(1-Me.right),Ge.bottom+=N.bottom-x.height*(1-Me.bottom)}W.offset=Ge},set:function(S){var x=S.coords,N=S.interaction,W=S.state,ie=W.options,me=W.offset,Pe=ci(ie.restriction,N,x);if(Pe){var Me=function(Ge){return!Ge||"left"in Ge&&"top"in Ge||((Ge=Re({},Ge)).left=Ge.x||0,Ge.top=Ge.y||0,Ge.right=Ge.right||Ge.left+Ge.width,Ge.bottom=Ge.bottom||Ge.top+Ge.height),Ge}(Pe);x.x=Math.max(Math.min(Me.right-me.right,x.x),Me.left+me.left),x.y=Math.max(Math.min(Me.bottom-me.bottom,x.y),Me.top+me.top)}},defaults:{restriction:null,elementRect:null,offset:null,endOnly:!1,enabled:!1}},na=Fn(ri,"restrict"),ws={top:1/0,left:1/0,bottom:-1/0,right:-1/0},se={top:-1/0,left:-1/0,bottom:1/0,right:1/0};function p(S,x){for(var N=0,W=["top","left","bottom","right"];N<W.length;N++){var ie=W[N];ie in S||(S[ie]=x[ie])}return S}var o={noInner:ws,noOuter:se,start:function(S){var x,N=S.interaction,W=S.startOffset,ie=S.state,me=ie.options;me&&(x=_t(ci(me.offset,N,N.coords.start.page))),x=x||{x:0,y:0},ie.offset={top:x.y+W.top,left:x.x+W.left,bottom:x.y-W.bottom,right:x.x-W.right}},set:function(S){var x=S.coords,N=S.edges,W=S.interaction,ie=S.state,me=ie.offset,Pe=ie.options;if(N){var Me=Re({},x),Ge=ci(Pe.inner,W,Me)||{},ct=ci(Pe.outer,W,Me)||{};p(Ge,ws),p(ct,se),N.top?x.y=Math.min(Math.max(ct.top+me.top,Me.y),Ge.top+me.top):N.bottom&&(x.y=Math.max(Math.min(ct.bottom+me.bottom,Me.y),Ge.bottom+me.bottom)),N.left?x.x=Math.min(Math.max(ct.left+me.left,Me.x),Ge.left+me.left):N.right&&(x.x=Math.max(Math.min(ct.right+me.right,Me.x),Ge.right+me.right))}},defaults:{inner:null,outer:null,offset:null,endOnly:!1,enabled:!1}},f=Fn(o,"restrictEdges"),g=Re({get elementRect(){return{top:0,left:0,bottom:1,right:1}},set elementRect(S){}},ri.defaults),D=Fn({start:ri.start,set:ri.set,defaults:g},"restrictRect"),ue={width:-1/0,height:-1/0},we={width:1/0,height:1/0},qe=Fn({start:function(S){return o.start(S)},set:function(S){var x=S.interaction,N=S.state,W=S.rect,ie=S.edges,me=N.options;if(ie){var Pe=kt(ci(me.min,x,S.coords))||ue,Me=kt(ci(me.max,x,S.coords))||we;N.options={endOnly:me.endOnly,inner:Re({},o.noInner),outer:Re({},o.noOuter)},ie.top?(N.options.inner.top=W.bottom-Pe.height,N.options.outer.top=W.bottom-Me.height):ie.bottom&&(N.options.inner.bottom=W.top+Pe.height,N.options.outer.bottom=W.top+Me.height),ie.left?(N.options.inner.left=W.right-Pe.width,N.options.outer.left=W.right-Me.width):ie.right&&(N.options.inner.right=W.left+Pe.width,N.options.outer.right=W.left+Me.width),o.set(S),N.options=me}},defaults:{min:null,max:null,endOnly:!1,enabled:!1}},"restrictSize"),Ze={start:function(S){var x,N=S.interaction,W=S.interactable,ie=S.element,me=S.rect,Pe=S.state,Me=S.startOffset,Ge=Pe.options,ct=Ge.offsetWithOrigin?function(E){var R=E.interaction.element,V=_t(ut(E.state.options.origin,null,null,[R])),te=V||Ot(E.interactable,R,E.interaction.prepared.name);return te}(S):{x:0,y:0};if(Ge.offset==="startCoords")x={x:N.coords.start.page.x,y:N.coords.start.page.y};else{var tt=ut(Ge.offset,W,ie,[N]);(x=_t(tt)||{x:0,y:0}).x+=ct.x,x.y+=ct.y}var b=Ge.relativePoints;Pe.offsets=me&&b&&b.length?b.map(function(E,R){return{index:R,relativePoint:E,x:Me.left-me.width*E.x+x.x,y:Me.top-me.height*E.y+x.y}}):[{index:0,relativePoint:null,x:x.x,y:x.y}]},set:function(S){var x=S.interaction,N=S.coords,W=S.state,ie=W.options,me=W.offsets,Pe=Ot(x.interactable,x.element,x.prepared.name),Me=Re({},N),Ge=[];ie.offsetWithOrigin||(Me.x-=Pe.x,Me.y-=Pe.y);for(var ct=0,tt=me;ct<tt.length;ct++)for(var b=tt[ct],E=Me.x-b.x,R=Me.y-b.y,V=0,te=ie.targets.length;V<te;V++){var ye=ie.targets[V],Ee=void 0;(Ee=I.func(ye)?ye(E,R,x._proxy,b,V):ye)&&Ge.push({x:(I.number(Ee.x)?Ee.x:E)+b.x,y:(I.number(Ee.y)?Ee.y:R)+b.y,range:I.number(Ee.range)?Ee.range:ie.range,source:ye,index:V,offset:b})}for(var De={target:null,inRange:!1,distance:0,range:0,delta:{x:0,y:0}},st=0;st<Ge.length;st++){var yt=Ge[st],ot=yt.range,at=yt.x-Me.x,ft=yt.y-Me.y,mt=We(at,ft),gt=mt<=ot;ot===1/0&&De.inRange&&De.range!==1/0&&(gt=!1),De.target&&!(gt?De.inRange&&ot!==1/0?mt/ot<De.distance/De.range:ot===1/0&&De.range!==1/0||mt<De.distance:!De.inRange&&mt<De.distance)||(De.target=yt,De.distance=mt,De.range=ot,De.inRange=gt,De.delta.x=at,De.delta.y=ft)}return De.inRange&&(N.x=De.target.x,N.y=De.target.y),W.closest=De,De},defaults:{range:1/0,targets:null,offset:null,offsetWithOrigin:!0,origin:null,relativePoints:null,endOnly:!1,enabled:!1}},lt=Fn(Ze,"snap"),It={start:function(S){var x=S.state,N=S.edges,W=x.options;if(!N)return null;S.state={options:{targets:null,relativePoints:[{x:N.left?0:1,y:N.top?0:1}],offset:W.offset||"self",origin:{x:0,y:0},range:W.range}},x.targetFields=x.targetFields||[["width","height"],["x","y"]],Ze.start(S),x.offsets=S.state.offsets,S.state=x},set:function(S){var x=S.interaction,N=S.state,W=S.coords,ie=N.options,me=N.offsets,Pe={x:W.x-me[0].x,y:W.y-me[0].y};N.options=Re({},ie),N.options.targets=[];for(var Me=0,Ge=ie.targets||[];Me<Ge.length;Me++){var ct=Ge[Me],tt=void 0;if(tt=I.func(ct)?ct(Pe.x,Pe.y,x):ct){for(var b=0,E=N.targetFields;b<E.length;b++){var R=E[b],V=R[0],te=R[1];if(V in tt||te in tt){tt.x=tt[V],tt.y=tt[te];break}}N.options.targets.push(tt)}}var ye=Ze.set(S);return N.options=ie,ye},defaults:{range:1/0,targets:null,offset:null,endOnly:!1,enabled:!1}},jt=Fn(It,"snapSize"),zt={aspectRatio:ra,restrictEdges:f,restrict:na,restrictRect:D,restrictSize:qe,snapEdges:Fn({start:function(S){var x=S.edges;return x?(S.state.targetFields=S.state.targetFields||[[x.left?"left":"right",x.top?"top":"bottom"]],It.start(S)):null},set:It.set,defaults:Re(Hn(It.defaults),{targets:void 0,range:void 0,offset:{x:0,y:0}})},"snapEdges"),snap:lt,snapSize:jt,spring:An,avoid:An,transform:An,rubberband:An},Qt={id:"modifiers",install:function(S){var x=S.interactStatic;for(var N in S.usePlugin(ti),S.usePlugin(ji),x.modifiers=zt,zt){var W=zt[N],ie=W._defaults,me=W._methods;ie._methods=me,S.defaults.perAction[N]=ie}}},Dr=Qt,nn=function(S){u(N,S);var x=_(N);function N(W,ie,me,Pe,Me,Ge){var ct;if(s(this,N),Nt(y(ct=x.call(this,Me)),me),me!==ie&&Nt(y(ct),ie),ct.timeStamp=Ge,ct.originalEvent=me,ct.type=W,ct.pointerId=ce(ie),ct.pointerType=Ie(ie),ct.target=Pe,ct.currentTarget=null,W==="tap"){var tt=Me.getPointerIndex(ie);ct.dt=ct.timeStamp-Me.pointers[tt].downTime;var b=ct.timeStamp-Me.tapTime;ct.double=!!Me.prevTap&&Me.prevTap.type!=="doubletap"&&Me.prevTap.target===ct.target&&b<500}else W==="doubletap"&&(ct.dt=ie.timeStamp-Me.tapTime,ct.double=!0);return ct}return l(N,[{key:"_subtractOrigin",value:function(W){var ie=W.x,me=W.y;return this.pageX-=ie,this.pageY-=me,this.clientX-=ie,this.clientY-=me,this}},{key:"_addOrigin",value:function(W){var ie=W.x,me=W.y;return this.pageX+=ie,this.pageY+=me,this.clientX+=ie,this.clientY+=me,this}},{key:"preventDefault",value:function(){this.originalEvent.preventDefault()}}]),N}(Qe),gr={id:"pointer-events/base",before:["inertia","modifiers","auto-start","actions"],install:function(S){S.pointerEvents=gr,S.defaults.actions.pointerEvents=gr.defaults,Re(S.actions.phaselessTypes,gr.types)},listeners:{"interactions:new":function(S){var x=S.interaction;x.prevTap=null,x.tapTime=0},"interactions:update-pointer":function(S){var x=S.down,N=S.pointerInfo;!x&&N.hold||(N.hold={duration:1/0,timeout:null})},"interactions:move":function(S,x){var N=S.interaction,W=S.pointer,ie=S.event,me=S.eventTarget;S.duplicate||N.pointerIsDown&&!N.pointerWasMoved||(N.pointerIsDown&&ui(S),Fr({interaction:N,pointer:W,event:ie,eventTarget:me,type:"move"},x))},"interactions:down":function(S,x){(function(N,W){for(var ie=N.interaction,me=N.pointer,Pe=N.event,Me=N.eventTarget,Ge=N.pointerIndex,ct=ie.pointers[Ge].hold,tt=ze(Me),b={interaction:ie,pointer:me,event:Pe,eventTarget:Me,type:"hold",targets:[],path:tt,node:null},E=0;E<tt.length;E++){var R=tt[E];b.node=R,W.fire("pointerEvents:collect-targets",b)}if(b.targets.length){for(var V=1/0,te=0,ye=b.targets;te<ye.length;te++){var Ee=ye[te].eventable.options.holdDuration;Ee<V&&(V=Ee)}ct.duration=V,ct.timeout=setTimeout(function(){Fr({interaction:ie,eventTarget:Me,pointer:me,event:Pe,type:"hold"},W)},V)}})(S,x),Fr(S,x)},"interactions:up":function(S,x){ui(S),Fr(S,x),function(N,W){var ie=N.interaction,me=N.pointer,Pe=N.event,Me=N.eventTarget;ie.pointerWasMoved||Fr({interaction:ie,eventTarget:Me,pointer:me,event:Pe,type:"tap"},W)}(S,x)},"interactions:cancel":function(S,x){ui(S),Fr(S,x)}},PointerEvent:nn,fire:Fr,collectEventTargets:Ci,defaults:{holdDuration:600,ignoreFrom:null,allowFrom:null,origin:{x:0,y:0}},types:{down:!0,move:!0,up:!0,cancel:!0,tap:!0,doubletap:!0,hold:!0}};function Fr(S,x){var N=S.interaction,W=S.pointer,ie=S.event,me=S.eventTarget,Pe=S.type,Me=S.targets,Ge=Me===void 0?Ci(S,x):Me,ct=new nn(Pe,W,ie,me,N,x.now());x.fire("pointerEvents:new",{pointerEvent:ct});for(var tt={interaction:N,pointer:W,event:ie,eventTarget:me,targets:Ge,type:Pe,pointerEvent:ct},b=0;b<Ge.length;b++){var E=Ge[b];for(var R in E.props||{})ct[R]=E.props[R];var V=Ot(E.eventable,E.node);if(ct._subtractOrigin(V),ct.eventable=E.eventable,ct.currentTarget=E.node,E.eventable.fire(ct),ct._addOrigin(V),ct.immediatePropagationStopped||ct.propagationStopped&&b+1<Ge.length&&Ge[b+1].node!==ct.currentTarget)break}if(x.fire("pointerEvents:fired",tt),Pe==="tap"){var te=ct.double?Fr({interaction:N,pointer:W,event:ie,eventTarget:me,type:"doubletap"},x):ct;N.prevTap=te,N.tapTime=te.timeStamp}return ct}function Ci(S,x){var N=S.interaction,W=S.pointer,ie=S.event,me=S.eventTarget,Pe=S.type,Me=N.getPointerIndex(W),Ge=N.pointers[Me];if(Pe==="tap"&&(N.pointerWasMoved||!Ge||Ge.downTarget!==me))return[];for(var ct=ze(me),tt={interaction:N,pointer:W,event:ie,eventTarget:me,type:Pe,path:ct,targets:[],node:null},b=0;b<ct.length;b++){var E=ct[b];tt.node=E,x.fire("pointerEvents:collect-targets",tt)}return Pe==="hold"&&(tt.targets=tt.targets.filter(function(R){var V,te;return R.eventable.options.holdDuration===((V=N.pointers[Me])==null||(te=V.hold)==null?void 0:te.duration)})),tt.targets}function ui(S){var x=S.interaction,N=S.pointerIndex,W=x.pointers[N].hold;W&&W.timeout&&(clearTimeout(W.timeout),W.timeout=null)}var Ta=Object.freeze({__proto__:null,default:gr});function ia(S){var x=S.interaction;x.holdIntervalHandle&&(clearInterval(x.holdIntervalHandle),x.holdIntervalHandle=null)}var qs={id:"pointer-events/holdRepeat",install:function(S){S.usePlugin(gr);var x=S.pointerEvents;x.defaults.holdRepeatInterval=0,x.types.holdrepeat=S.actions.phaselessTypes.holdrepeat=!0},listeners:["move","up","cancel","endall"].reduce(function(S,x){return S["pointerEvents:".concat(x)]=ia,S},{"pointerEvents:new":function(S){var x=S.pointerEvent;x.type==="hold"&&(x.count=(x.count||0)+1)},"pointerEvents:fired":function(S,x){var N=S.interaction,W=S.pointerEvent,ie=S.eventTarget,me=S.targets;if(W.type==="hold"&&me.length){var Pe=me[0].eventable.options.holdRepeatInterval;Pe<=0||(N.holdIntervalHandle=setTimeout(function(){x.pointerEvents.fire({interaction:N,eventTarget:ie,type:"hold",pointer:W,event:W},x)},Pe))}}})},sa=qs,aa={id:"pointer-events/interactableTargets",install:function(S){var x=S.Interactable;x.prototype.pointerEvents=function(W){return Re(this.events.options,W),this};var N=x.prototype._backCompatOption;x.prototype._backCompatOption=function(W,ie){var me=N.call(this,W,ie);return me===this&&(this.events.options[W]=ie),me}},listeners:{"pointerEvents:collect-targets":function(S,x){var N=S.targets,W=S.node,ie=S.type,me=S.eventTarget;x.interactables.forEachMatch(W,function(Pe){var Me=Pe.events,Ge=Me.options;Me.types[ie]&&Me.types[ie].length&&Pe.testIgnoreAllow(Ge,W,me)&&N.push({node:W,eventable:Me,props:{interactable:Pe}})})},"interactable:new":function(S){var x=S.interactable;x.events.getRect=function(N){return x.getRect(N)}},"interactable:set":function(S,x){var N=S.interactable,W=S.options;Re(N.events.options,x.pointerEvents.defaults),Re(N.events.options,W.pointerEvents||{})}}},Ea=aa,Aa={id:"pointer-events",install:function(S){S.usePlugin(Ta),S.usePlugin(sa),S.usePlugin(Ea)}},Pa=Aa,Ts={id:"reflow",install:function(S){var x=S.Interactable;S.actions.phases.reflow=!0,x.prototype.reflow=function(N){return function(W,ie,me){for(var Pe=W.getAllElements(),Me=me.window.Promise,Ge=Me?[]:null,ct=function(){var b=Pe[tt],E=W.getRect(b);if(!E)return 1;var R,V=Q(me.interactions.list,function(Ee){return Ee.interacting()&&Ee.interactable===W&&Ee.element===b&&Ee.prepared.name===ie.name});if(V)V.move(),Ge&&(R=V._reflowPromise||new Me(function(Ee){V._reflowResolve=Ee}));else{var te=kt(E),ye=function(Ee){return{coords:Ee,get page(){return this.coords.page},get client(){return this.coords.client},get timeStamp(){return this.coords.timeStamp},get pageX(){return this.coords.page.x},get pageY(){return this.coords.page.y},get clientX(){return this.coords.client.x},get clientY(){return this.coords.client.y},get pointerId(){return this.coords.pointerId},get target(){return this.coords.target},get type(){return this.coords.type},get pointerType(){return this.coords.pointerType},get buttons(){return this.coords.buttons},preventDefault:function(){}}}({page:{x:te.x,y:te.y},client:{x:te.x,y:te.y},timeStamp:me.now()});R=function(Ee,De,st,yt,ot){var at=Ee.interactions.new({pointerType:"reflow"}),ft={interaction:at,event:ot,pointer:ot,eventTarget:st,phase:"reflow"};at.interactable=De,at.element=st,at.prevEvent=ot,at.updatePointer(ot,ot,st,!0),je(at.coords.delta),Wn(at.prepared,yt),at._doPhase(ft);var mt=Ee.window,gt=mt.Promise,bt=gt?new gt(function(xt){at._reflowResolve=xt}):void 0;return at._reflowPromise=bt,at.start(yt,De,st),at._interacting?(at.move(ft),at.end(ot)):(at.stop(),at._reflowResolve()),at.removePointer(ot,ot),bt}(me,W,b,ie,ye)}Ge&&Ge.push(R)},tt=0;tt<Pe.length&&!ct();tt++);return Ge&&Me.all(Ge).then(function(){return W})}(this,N,S)}},listeners:{"interactions:stop":function(S,x){var N=S.interaction;N.pointerType==="reflow"&&(N._reflowResolve&&N._reflowResolve(),function(W,ie){W.splice(W.indexOf(ie),1)}(x.interactions.list,N))}}},gi=Ts;if(On.use(Br),On.use(Jt),On.use(Pa),On.use(bs),On.use(Dr),On.use(ts),On.use(Ri),On.use(Vi),On.use(gi),On.default=On,i(t)==="object"&&t)try{t.exports=On}catch{}return On.default=On,On})}(vf,vf.exports);var G5=vf.exports;const _o=Wg(G5),Y5=ar("WindowInteractionController");class J5{constructor(e,r){this._state={isDragging:!1,isResizing:!1,interactionMode:"none"},this._isEnabled=!1,this._draggable=!0,this._resizable=!0,this._ghostDragOffset={x:0,y:0},this._cachedMargin=20,this._boundOnKeydown=n=>this._handleKeydown(n),this._host=e,this._draggable=(r==null?void 0:r.draggable)??!0,this._resizable=(r==null?void 0:r.resizable)??!0,this.value={state:this._state,actions:{enable:()=>this._enable(),disable:()=>this._disable(),enterMoveMode:()=>this._enterMoveMode(),enterResizeMode:()=>this._enterResizeMode(),exitInteractionMode:()=>this._exitInteractionMode()}}}setConfig(e){this._draggable=e.draggable??!0,this._resizable=e.resizable??!0,Y5.debug("setConfig:",{draggable:this._draggable,resizable:this._resizable}),this._windowElement&&_o(this._windowElement).unset(),this._titleBarElement&&_o(this._titleBarElement).unset(),this._isEnabled&&this._initInteractions()}get draggable(){return this._draggable}get resizable(){return this._resizable}bindElements(e,r){this._windowElement=e,this._titleBarElement=r,this._initInteractions()}hostConnected(){}hostDisconnected(){this._destroyGhostElement(),this.destroy()}destroy(){this._windowElement&&_o(this._windowElement).unset(),this._titleBarElement&&(this._titleBarElement.removeEventListener("keydown",this._boundOnKeydown),_o(this._titleBarElement).unset()),this._destroyGhostElement(),this._isEnabled=!1}_enable(){!this._windowElement||!this._titleBarElement||(this._isEnabled=!0,this._initInteractions())}_disable(){this._isEnabled=!1,this._windowElement&&_o(this._windowElement).unset(),this._titleBarElement&&(this._titleBarElement.removeEventListener("keydown",this._boundOnKeydown),_o(this._titleBarElement).unset())}_initInteractions(){!this._isEnabled||!this._windowElement||!this._titleBarElement||(this._initDrag(),this._initResize(),this._initKeyboard())}_initDrag(){!this._titleBarElement||!this._draggable||_o(this._titleBarElement).draggable({listeners:{start:()=>this._onDragStart(),move:e=>this._onDragMove(e),end:()=>this._onDragEnd()},inertia:!1})}_initResize(){if(!this._windowElement||!this._resizable)return;const e=this._getMinSize(),r=this._getMargin();_o(this._windowElement).resizable({edges:{top:!0,right:!0,bottom:!0,left:!0},listeners:{start:()=>this._onResizeStart(),move:n=>this._onResizeMove(n),end:()=>this._onResizeEnd()},modifiers:[_o.modifiers.restrictSize({min:e,max:{width:window.innerWidth-2*r,height:window.innerHeight-2*r}})],inertia:!1})}_initKeyboard(){this._titleBarElement&&(this._titleBarElement.removeEventListener("keydown",this._boundOnKeydown),this._titleBarElement.addEventListener("keydown",this._boundOnKeydown))}_handleKeydown(e){var r;if(e.key==="Enter"||e.key===" "){e.preventDefault(),this._enterMoveMode();return}if(this._state.interactionMode==="move"){const n=e.shiftKey?20:10;let i=0,s=0;switch(e.key){case"ArrowUp":s=-n;break;case"ArrowDown":s=n;break;case"ArrowLeft":i=-n;break;case"ArrowRight":i=n;break;case"Escape":e.preventDefault(),this._exitInteractionMode();return;default:return}e.preventDefault();const a=this._windowElement;if(!a)return;const l=a.getBoundingClientRect(),c=this._getMargin(),u=Math.max(c,Math.min(l.left+i,window.innerWidth-l.width-c)),d=Math.max(c,Math.min(l.top+s,window.innerHeight-l.height-c));(r=this.onPositionChange)==null||r.call(this,u,d)}}_enterMoveMode(){var e;this._state={...this._state,interactionMode:"move"},(e=this._titleBarElement)==null||e.setAttribute("aria-grabbed","true"),this._host.requestUpdate()}_enterResizeMode(){this._state={...this._state,interactionMode:"resize"},this._host.requestUpdate()}_exitInteractionMode(){var e;this._state={...this._state,interactionMode:"none"},(e=this._titleBarElement)==null||e.setAttribute("aria-grabbed","false"),this._host.requestUpdate()}_onDragStart(){var e;this._state={...this._state,isDragging:!0},(e=this._windowElement)==null||e.classList.add("dragging"),this._cachedMargin=this._getMargin(),this._createGhostElement(),this._ghostDragOffset={x:0,y:0},requestAnimationFrame(()=>this._host.requestUpdate())}_onDragMove(e){if(!this._windowElement||!this._ghostElement||!this._ghostStartRect)return;const r=this._cachedMargin,n={width:window.innerWidth,height:window.innerHeight};this._ghostDragOffset.x+=e.dx,this._ghostDragOffset.y+=e.dy;let i=this._ghostDragOffset.x,s=this._ghostDragOffset.y;const{left:a,top:l,width:c,height:u}=this._ghostStartRect,d=a+i,m=l+s,y=Math.max(r,Math.min(d,n.width-c-r)),_=Math.max(r,Math.min(m,n.height-u-r));this._ghostDragOffset.x=y-a,this._ghostDragOffset.y=_-l,this._ghostElement.style.transform=`translate3d(${this._ghostDragOffset.x}px, ${this._ghostDragOffset.y}px, 0)`}_onDragEnd(){var e,r;if(this._state={...this._state,isDragging:!1},(e=this._windowElement)==null||e.classList.remove("dragging"),this._ghostStartRect&&this._ghostElement){const n=this._ghostStartRect.left+this._ghostDragOffset.x,i=this._ghostStartRect.top+this._ghostDragOffset.y;(r=this.onPositionChange)==null||r.call(this,n,i)}this._destroyGhostElement(),this._host.requestUpdate()}_onResizeStart(){var e;this._state={...this._state,isResizing:!0},(e=this._windowElement)==null||e.classList.add("resizing"),this._cachedMargin=this._getMargin(),this._createGhostElement(),requestAnimationFrame(()=>this._host.requestUpdate())}_onResizeMove(e){if(!this._windowElement||!this._ghostElement||!this._ghostStartRect)return;const{width:r,height:n}=e.rect,i=this._cachedMargin,s=e.edges;let a=0,l=0;if(s!=null&&s.left||s!=null&&s.top){const c=s.left?e.rect.left:this._ghostStartRect.left,u=s.top?e.rect.top:this._ghostStartRect.top,d=Math.max(i,Math.min(c,window.innerWidth-r-i)),m=Math.max(i,Math.min(u,window.innerHeight-n-i));a=d-this._ghostStartRect.left,l=m-this._ghostStartRect.top}this._ghostElement.style.width=`${r}px`,this._ghostElement.style.height=`${n}px`,this._ghostElement.style.transform=`translate3d(${a}px, ${l}px, 0)`}_onResizeEnd(){var e,r,n;if(this._state={...this._state,isResizing:!1},(e=this._windowElement)==null||e.classList.remove("resizing"),this._ghostElement&&this._ghostStartRect){const i=this._ghostElement.getBoundingClientRect(),s=this._ghostElement.offsetWidth,a=this._ghostElement.offsetHeight,l=i.left,c=i.top;(l!==this._ghostStartRect.left||c!==this._ghostStartRect.top)&&((r=this.onPositionChange)==null||r.call(this,l,c)),(n=this.onSizeChange)==null||n.call(this,s,a)}this._destroyGhostElement(),this._host.requestUpdate()}_getMargin(){if(!this._windowElement)return 20;const r=getComputedStyle(this._windowElement).getPropertyValue("--rtc-window-margin");return parseInt(r)||20}_getMinSize(){if(!this._windowElement)return{width:350,height:520};const e=getComputedStyle(this._windowElement);return{width:parseInt(e.getPropertyValue("--rtc-window-min-width"))||350,height:parseInt(e.getPropertyValue("--rtc-window-min-height"))||520}}_createGhostElement(){if(!this._windowElement)return;this._destroyGhostElement();const e=this._windowElement.getBoundingClientRect(),r=getComputedStyle(this._windowElement);this._ghostStartRect={left:e.left,top:e.top,width:e.width,height:e.height};const n=document.createElement("div");n.className="rtc-window-ghost",n.style.cssText=`
|
|
627
|
+
`).map(r=>JSON.parse(r))}applyDeltaIfNeeded(e,r){let n,i,s,a;if(e.delta){a=!0;const l=new TextEncoder().encode(e.data),c=O5(r,l);n=JSON.parse(new TextDecoder().decode(c)),i=c,s=l.length}else a=!1,n=JSON.parse(e.data),i=new TextEncoder().encode(e.data),s=i.length;return{newData:n,newPrevValue:i,isDelta:a,wireBytes:s,fullBytes:i.length}}}const N5={headers:{},token:"",getToken:null,data:null,getData:null,debug:!1,name:"js",version:"",fetch:null,readableStream:null,websocket:null,eventsource:null,sockjs:null,sockjsOptions:{},emulationEndpoint:"/emulation",minReconnectDelay:500,maxReconnectDelay:2e4,timeout:5e3,maxServerPingDelay:1e4,networkEventTarget:null};class go extends Error{constructor(e){super(e),this.name=this.constructor.name}}class Vg extends n2{constructor(e,r){super(),this._reconnectTimeout=null,this._refreshTimeout=null,this._serverPingTimeout=null,this.state=fi.Disconnected,this._transportIsOpen=!1,this._endpoint=e,this._emulation=!1,this._transports=[],this._currentTransportIndex=0,this._triedAllTransports=!1,this._transportWasOpen=!1,this._transport=null,this._transportId=0,this._deviceWentOffline=!1,this._transportClosed=!0,this._codec=new s2,this._reconnecting=!1,this._reconnectTimeout=null,this._reconnectAttempts=0,this._client=null,this._session="",this._node="",this._subs={},this._serverSubs={},this._commandId=0,this._commands=[],this._batching=!1,this._refreshRequired=!1,this._refreshTimeout=null,this._callbacks={},this._token="",this._data=null,this._dispatchPromise=Promise.resolve(),this._serverPing=0,this._serverPingTimeout=null,this._sendPong=!1,this._promises={},this._promiseId=0,this._debugEnabled=!1,this._networkEventsSet=!1,this._config=Object.assign(Object.assign({},N5),r),this._configure(),this._debugEnabled?(this.on("state",n=>{this._debug("client state",n.oldState,"->",n.newState)}),this.on("error",n=>{this._debug("client error",n)})):this.on("error",function(){Function.prototype()})}newSubscription(e,r){if(this.getSubscription(e)!==null)throw new Error("Subscription to the channel "+e+" already exists");const n=new x5(this,e,r);return this._subs[e]=n,n}newMapSubscription(e,r){if(this.getSubscription(e)!==null)throw new Error("Subscription to the channel "+e+" already exists");const n=new Ug(this,e,{token:r==null?void 0:r.token,getToken:r==null?void 0:r.getToken,data:r==null?void 0:r.data,minResubscribeDelay:r==null?void 0:r.minResubscribeDelay,maxResubscribeDelay:r==null?void 0:r.maxResubscribeDelay,delta:r==null?void 0:r.delta,tagsFilter:r==null?void 0:r.tagsFilter,map:!0,mapPageSize:r==null?void 0:r.pageSize,mapUnrecoverableStrategy:r==null?void 0:r.unrecoverableStrategy});return this._subs[e]=n,n}newMapClientsSubscription(e,r){if(this.getSubscription(e)!==null)throw new Error("Subscription to the channel "+e+" already exists");const n=new Ug(this,e,{token:r==null?void 0:r.token,getToken:r==null?void 0:r.getToken,data:r==null?void 0:r.data,minResubscribeDelay:r==null?void 0:r.minResubscribeDelay,maxResubscribeDelay:r==null?void 0:r.maxResubscribeDelay,delta:r==null?void 0:r.delta,tagsFilter:r==null?void 0:r.tagsFilter,map:!0,mapPresenceType:2,mapPageSize:r==null?void 0:r.pageSize,mapUnrecoverableStrategy:r==null?void 0:r.unrecoverableStrategy});return this._subs[e]=n,n}newMapUsersSubscription(e,r){if(this.getSubscription(e)!==null)throw new Error("Subscription to the channel "+e+" already exists");const n=new Ug(this,e,{token:r==null?void 0:r.token,getToken:r==null?void 0:r.getToken,data:r==null?void 0:r.data,minResubscribeDelay:r==null?void 0:r.minResubscribeDelay,maxResubscribeDelay:r==null?void 0:r.maxResubscribeDelay,delta:r==null?void 0:r.delta,tagsFilter:r==null?void 0:r.tagsFilter,map:!0,mapPresenceType:3,mapPageSize:r==null?void 0:r.pageSize,mapUnrecoverableStrategy:r==null?void 0:r.unrecoverableStrategy});return this._subs[e]=n,n}newSharedPollSubscription(e,r){if(this.getSubscription(e)!==null)throw new Error("Subscription to the channel "+e+" already exists");const n=new S5(this,e,{token:r==null?void 0:r.token,getToken:r==null?void 0:r.getToken,data:r==null?void 0:r.data,minResubscribeDelay:r==null?void 0:r.minResubscribeDelay,maxResubscribeDelay:r==null?void 0:r.maxResubscribeDelay,delta:r==null?void 0:r.delta,sharedPoll:!0,sharedPollGetSignature:r==null?void 0:r.getSignature});return this._subs[e]=n,n}getSubscription(e){return this._getSub(e)}getMapSubscription(e){return this._getSub(e)}getSharedPollSubscription(e){return this._getSub(e)}removeSubscription(e){e&&(e.state!==Gi.Unsubscribed&&e.unsubscribe(),this._removeSubscription(e))}removeMapSubscription(e){this.removeSubscription(e)}removeSharedPollSubscription(e){this.removeSubscription(e)}subscriptions(){return this._subs}mapSubscriptions(){const e={};for(const[r,n]of Object.entries(this._subs))n.type==="map"&&(e[r]=n);return e}sharedPollSubscriptions(){const e={};for(const[r,n]of Object.entries(this._subs))n.type==="shared_poll"&&(e[r]=n);return e}ready(e){return pi(this,void 0,void 0,function*(){switch(this.state){case fi.Disconnected:throw{code:hn.clientDisconnected,message:"client disconnected"};case fi.Connected:return;default:return new Promise((r,n)=>{const i={resolve:r,reject:n};e&&(i.timeout=setTimeout(()=>{n({code:hn.timeout,message:"timeout"})},e)),this._promises[this._nextPromiseId()]=i})}})}connect(){if(this._isConnected()){this._debug("connect called when already connected");return}if(this._isConnecting()){this._debug("connect called when already connecting");return}this._debug("connect called"),this._reconnectAttempts=0,this._startConnecting()}disconnect(){this._disconnect(Wc.disconnectCalled,"disconnect called",!1)}setToken(e){this._token=e}setData(e){this._data=e}setHeaders(e){this._config.headers=e}send(e){return pi(this,void 0,void 0,function*(){const r={send:{data:e}};if(yield this._methodCall(),!this._transportSendCommands([r]))throw this._createErrorObject(hn.transportWriteError,"transport write error")})}rpc(e,r){return pi(this,void 0,void 0,function*(){const n={rpc:{method:e,data:r}};return yield this._methodCall(),{data:(yield this._callPromise(n,s=>s.rpc)).data}})}publish(e,r){return pi(this,void 0,void 0,function*(){const n={publish:{channel:e,data:r}};return yield this._methodCall(),yield this._callPromise(n,()=>({})),{}})}mapPublish(e,r,n){return pi(this,void 0,void 0,function*(){const i={publish:{channel:e,type:1,key:r,data:n}};return yield this._methodCall(),yield this._callPromise(i,()=>({})),{}})}mapRemove(e,r){return pi(this,void 0,void 0,function*(){const n={publish:{channel:e,type:1,key:r,removed:!0}};return yield this._methodCall(),yield this._callPromise(n,()=>({})),{}})}history(e,r){return pi(this,void 0,void 0,function*(){const n={history:this._getHistoryRequest(e,r)};yield this._methodCall();const i=yield this._callPromise(n,a=>a.history),s=[];if(i.publications)for(let a=0;a<i.publications.length;a++)s.push(this._getPublicationContext(e,i.publications[a]));return{publications:s,epoch:i.epoch||"",offset:i.offset||0}})}presence(e){return pi(this,void 0,void 0,function*(){const r={presence:{channel:e}};yield this._methodCall();const i=(yield this._callPromise(r,s=>s.presence)).presence;for(const s in i)if(Object.prototype.hasOwnProperty.call(i,s)){const a=i[s],l=a.conn_info,c=a.chan_info;l&&(a.connInfo=l),c&&(a.chanInfo=c)}return{clients:i}})}presenceStats(e){return pi(this,void 0,void 0,function*(){const r={presence_stats:{channel:e}};yield this._methodCall();const n=yield this._callPromise(r,i=>i.presence_stats);return{numUsers:n.num_users,numClients:n.num_clients}})}startBatching(){this._batching=!0}stopBatching(){const e=this;Promise.resolve().then(function(){Promise.resolve().then(function(){e._batching=!1,e._flush()})})}_debug(...e){this._debugEnabled&&g5("debug",e)}_codecName(){return this._codec.name()}_formatOverride(){}_configure(){if(!("Promise"in globalThis))throw new Error("Promise polyfill required");if(!this._endpoint)throw new Error("endpoint configuration required");if(this._config.token!==null&&(this._token=this._config.token),this._config.data!==null&&(this._data=this._config.data),this._codec=new s2,this._formatOverride(),(this._config.debug===!0||_5("centrifuge.debug"))&&(this._debugEnabled=!0),this._debug("config",this._config),typeof this._endpoint!="string")if(Array.isArray(this._endpoint)){this._transports=this._endpoint,this._emulation=!0;for(const e in this._transports)if(this._transports.hasOwnProperty(e)){const r=this._transports[e];if(!r.endpoint||!r.transport)throw new Error("malformed transport configuration");const n=r.transport;if(["websocket","http_stream","sse","sockjs","webtransport"].indexOf(n)<0)throw new Error("unsupported transport name: "+n)}}else throw new Error("unsupported url configuration type: only string or array of objects are supported")}_setState(e){if(this.state!==e){this._reconnecting=!1;const r=this.state;return this.state=e,this.emit("state",{newState:e,oldState:r}),!0}return!1}_isDisconnected(){return this.state===fi.Disconnected}_isConnecting(){return this.state===fi.Connecting}_isConnected(){return this.state===fi.Connected}_nextCommandId(){return++this._commandId}_setNetworkEvents(){if(this._networkEventsSet)return;let e=null;this._config.networkEventTarget!==null?e=this._config.networkEventTarget:typeof globalThis.addEventListener<"u"&&(e=globalThis),e&&(e.addEventListener("offline",()=>{this._debug("offline event triggered"),(this.state===fi.Connected||this.state===fi.Connecting)&&(this._disconnect(yo.transportClosed,"transport closed",!0),this._deviceWentOffline=!0)}),e.addEventListener("online",()=>{this._debug("online event triggered"),this.state===fi.Connecting&&(this._deviceWentOffline&&!this._transportClosed&&(this._deviceWentOffline=!1,this._transportClosed=!0),this._clearReconnectTimeout(),this._startReconnecting())}),this._networkEventsSet=!0)}_getReconnectDelay(){const e=jl(this._reconnectAttempts,this._config.minReconnectDelay,this._config.maxReconnectDelay);return this._reconnectAttempts+=1,e}_clearOutgoingRequests(){for(const e in this._callbacks)if(this._callbacks.hasOwnProperty(e)){const r=this._callbacks[e];clearTimeout(r.timeout);const n=r.errback;if(!n)continue;n({error:this._createErrorObject(hn.connectionClosed,"connection closed")})}this._callbacks={}}_clearConnectedState(){this._client=null,this._clearServerPingTimeout(),this._clearRefreshTimeout();for(const e in this._subs){if(!this._subs.hasOwnProperty(e))continue;const r=this._subs[e];r.state===Gi.Subscribed&&r._setSubscribing(bf.transportClosed,"transport closed")}for(const e in this._serverSubs)this._serverSubs.hasOwnProperty(e)&&this.emit("subscribing",{channel:e})}_handleWriteError(e){for(const r of e){const n=r.id;if(!(n in this._callbacks))continue;const i=this._callbacks[n];clearTimeout(this._callbacks[n].timeout),delete this._callbacks[n];const s=i.errback;s({error:this._createErrorObject(hn.transportWriteError,"transport write error")})}}_transportSendCommands(e){if(!e.length)return!0;if(!this._transport)return!1;try{this._transport.send(this._codec.encodeCommands(e),this._session,this._node)}catch(r){return this._debug("error writing commands",r),this._handleWriteError(e),!1}return!0}_advanceTransportIndex(){this._currentTransportIndex++,this._currentTransportIndex>=this._transports.length&&(this._triedAllTransports=!0,this._currentTransportIndex=0)}_initializeTransport(){let e;this._config.websocket!==null?e=this._config.websocket:typeof globalThis.WebSocket!="function"&&typeof globalThis.WebSocket!="object"||(e=globalThis.WebSocket);let r=null;this._config.sockjs!==null?r=this._config.sockjs:typeof globalThis.SockJS<"u"&&(r=globalThis.SockJS);let n=null;this._config.eventsource!==null?n=this._config.eventsource:typeof globalThis.EventSource<"u"&&(n=globalThis.EventSource);let i=null;this._config.fetch!==null?i=this._config.fetch:typeof globalThis.fetch<"u"&&(i=globalThis.fetch);let s=null;if(this._config.readableStream!==null?s=this._config.readableStream:typeof globalThis.ReadableStream<"u"&&(s=globalThis.ReadableStream),this._emulation){this._currentTransportIndex>=this._transports.length&&(this._triedAllTransports=!0,this._currentTransportIndex=0);let _=0;for(;;){if(_>=this._transports.length)throw new Error("no supported transport found");const k=this._transports[this._currentTransportIndex],A=k.transport,P=k.endpoint;if(A==="websocket"){if(this._debug("trying websocket transport"),this._transport=new i2(P,{websocket:e}),!this._transport.supported()){this._debug("websocket transport not available"),this._advanceTransportIndex(),_++;continue}}else if(A==="webtransport"){if(this._debug("trying webtransport transport"),this._transport=new A5(P,{webtransport:globalThis.WebTransport,decoder:this._codec,encoder:this._codec}),!this._transport.supported()){this._debug("webtransport transport not available"),this._advanceTransportIndex(),_++;continue}}else if(A==="http_stream"){if(this._debug("trying http_stream transport"),this._transport=new T5(P,{fetch:i,readableStream:s,emulationEndpoint:this._config.emulationEndpoint,decoder:this._codec,encoder:this._codec}),!this._transport.supported()){this._debug("http_stream transport not available"),this._advanceTransportIndex(),_++;continue}}else if(A==="sse"){if(this._debug("trying sse transport"),this._transport=new E5(P,{eventsource:n,fetch:i,emulationEndpoint:this._config.emulationEndpoint}),!this._transport.supported()){this._debug("sse transport not available"),this._advanceTransportIndex(),_++;continue}}else if(A==="sockjs"){if(this._debug("trying sockjs"),this._transport=new w5(P,{sockjs:r,sockjsOptions:this._config.sockjsOptions}),!this._transport.supported()){this._debug("sockjs transport not available"),this._advanceTransportIndex(),_++;continue}}else throw new Error("unknown transport "+A);break}}else{if(y5(this._endpoint,"http"))throw new Error("Provide explicit transport endpoints configuration in case of using HTTP (i.e. using array of TransportEndpoint instead of a single string), or use ws(s):// scheme in an endpoint if you aimed using WebSocket transport");if(this._debug("client will use websocket"),this._transport=new i2(this._endpoint,{websocket:e}),!this._transport.supported())throw new Error("WebSocket constructor not found, make sure it is available globally or passed as a dependency in Centrifuge options")}const a=this,l=this._transport,c=this._nextTransportId();a._debug("id of transport",c);let u=!1;const d=[];if(this._transport.emulation()){const _=a._sendConnect(!0);d.push(_)}this._setNetworkEvents();const m=this._codec.encodeCommands(d);this._transportClosed=!1;let y;y=setTimeout(function(){l.close()},this._config.timeout),this._transport.initialize(this._codecName(),{onOpen:function(){if(y&&(clearTimeout(y),y=null),a._transportId!=c){a._debug("open callback from non-actual transport"),l.close();return}u=!0,a._debug(l.subName(),"transport open"),!l.emulation()&&(a._transportIsOpen=!0,a._transportWasOpen=!0,a.startBatching(),a._sendConnect(!1),a._sendSubscribeCommands(),a.stopBatching(),a.emit("__centrifuge_debug:connect_frame_sent",{}))},onError:function(_){if(a._transportId!=c){a._debug("error callback from non-actual transport");return}a._debug("transport level error",_)},onClose:function(_){if(y&&(clearTimeout(y),y=null),a._transportId!=c){a._debug("close callback from non-actual transport");return}a._debug(l.subName(),"transport closed"),a._transportClosed=!0,a._transportIsOpen=!1;let k="connection closed",A=!0,P=0;if(_&&"code"in _&&_.code&&(P=_.code),_&&_.reason)try{const O=JSON.parse(_.reason);k=O.reason,A=O.reconnect}catch{k=_.reason,(P>=3500&&P<4e3||P>=4500&&P<5e3)&&(A=!1)}P<3e3?(P===1009?(P=Wc.messageSizeLimit,k="message size limit exceeded",A=!1):(P=yo.transportClosed,k="transport closed"),a._emulation&&!a._transportWasOpen&&a._advanceTransportIndex()):a._transportWasOpen=!0,a._isConnecting()&&!u&&a.emit("error",{type:"transport",error:{code:hn.transportClosed,message:"transport closed"},transport:l.name()}),a._reconnecting=!1,a._disconnect(P,k,A)},onMessage:function(_){a._dataReceived(_)}},m),a.emit("__centrifuge_debug:transport_initialized",{})}_sendConnect(e){const r=this._constructConnectCommand(),n=this;return this._call(r,e).then(i=>{const s=i.reply.connect;n._connectResponse(s),i.next&&i.next()},i=>{n._connectError(i.error),i.next&&i.next()}),r}_startReconnecting(){if(this._debug("start reconnecting"),!this._isConnecting()){this._debug("stop reconnecting: client not in connecting state");return}if(this._reconnecting){this._debug("reconnect already in progress, return from reconnect routine");return}if(this._transportClosed===!1){this._debug("waiting for transport close");return}this._reconnecting=!0;const e=this._token==="";if(!(this._refreshRequired||e&&this._config.getToken!==null)){this._config.getData?this._config.getData().then(i=>{this._isConnecting()&&(this._data=i,this._initializeTransport())}).catch(i=>this._handleGetDataError(i)):this._initializeTransport();return}const n=this;this._getToken().then(function(i){if(n._isConnecting()){if(i==null||i==null){n._failUnauthorized();return}n._token=i,n._debug("connection token refreshed"),n._config.getData?n._config.getData().then(function(s){n._isConnecting()&&(n._data=s,n._initializeTransport())}).catch(s=>n._handleGetDataError(s)):n._initializeTransport()}}).catch(function(i){if(!n._isConnecting())return;if(i instanceof go){n._failUnauthorized();return}n.emit("error",{type:"connectToken",error:{code:hn.clientConnectToken,message:i!==void 0?i.toString():""}});const s=n._getReconnectDelay();n._debug("error on getting connection token, reconnect after "+s+" milliseconds",i),n._reconnecting=!1,n._reconnectTimeout=setTimeout(()=>{n._startReconnecting()},s)})}_handleGetDataError(e){if(e instanceof go){this._failUnauthorized();return}this.emit("error",{type:"connectData",error:{code:hn.badConfiguration,message:(e==null?void 0:e.toString())||""}});const r=this._getReconnectDelay();this._debug("error on getting connect data, reconnect after "+r+" milliseconds",e),this._reconnecting=!1,this._reconnectTimeout=setTimeout(()=>{this._startReconnecting()},r)}_connectError(e){this.state===fi.Connecting&&(e.code===109&&(this._refreshRequired=!0),e.code<100||e.temporary===!0||e.code===109?(this.emit("error",{type:"connect",error:e}),this._debug("closing transport due to connect error"),this._disconnect(e.code,e.message,!0)):this._disconnect(e.code,e.message,!1))}_scheduleReconnect(){if(!this._isConnecting())return;let e=!1;this._emulation&&!this._transportWasOpen&&!this._triedAllTransports&&(e=!0);let r=this._getReconnectDelay();e&&(r=0),this._debug("reconnect after "+r+" milliseconds"),this._clearReconnectTimeout(),this._reconnectTimeout=setTimeout(()=>{this._startReconnecting()},r)}_constructConnectCommand(){const e={};this._token&&(e.token=this._token),this._data&&(e.data=this._data),this._config.name&&(e.name=this._config.name),this._config.version&&(e.version=this._config.version),Object.keys(this._config.headers).length>0&&(e.headers=this._config.headers);const r={};let n=!1;for(const i in this._serverSubs)if(this._serverSubs.hasOwnProperty(i)&&this._serverSubs[i].recoverable){n=!0;const s={recover:!0};this._serverSubs[i].offset&&(s.offset=this._serverSubs[i].offset),this._serverSubs[i].epoch&&(s.epoch=this._serverSubs[i].epoch),r[i]=s}return n&&(e.subs=r),{connect:e}}_getHistoryRequest(e,r){const n={channel:e};return r!==void 0&&(r.since&&(n.since={offset:r.since.offset},r.since.epoch&&(n.since.epoch=r.since.epoch)),r.limit!==void 0&&(n.limit=r.limit),r.reverse===!0&&(n.reverse=!0)),n}_methodCall(){return this._isConnected()?Promise.resolve():new Promise((e,r)=>{const n=setTimeout(function(){r({code:hn.timeout,message:"timeout"})},this._config.timeout);this._promises[this._nextPromiseId()]={timeout:n,resolve:e,reject:r}})}_callPromise(e,r){return new Promise((n,i)=>{this._call(e,!1).then(s=>{var a;const l=r(s.reply);n(l),(a=s.next)===null||a===void 0||a.call(s)},s=>{var a;i(s.error),(a=s.next)===null||a===void 0||a.call(s)})})}_dataReceived(e){this._serverPing>0&&this._waitServerPing();const r=this._codec.decodeReplies(e);this._dispatchPromise=this._dispatchPromise.then(()=>{let n;this._dispatchPromise=new Promise(i=>{n=i}),this._dispatchSynchronized(r,n)})}_dispatchSynchronized(e,r){let n=Promise.resolve();for(const i in e)e.hasOwnProperty(i)&&(n=n.then(()=>this._dispatchReply(e[i])));n.then(()=>{r()})}_dispatchReply(e){let r;const n=new Promise(s=>{r=s});if(e==null)return this._debug("dispatch: got undefined or null reply"),r(),n;const i=e.id;return i&&i>0?this._handleReply(e,r):e.push?this._handlePush(e.push,r):this._handleServerPing(r),n}_call(e,r){return new Promise((n,i)=>{e.id=this._nextCommandId(),this._registerCall(e.id,n,i),r||this._addCommand(e)})}_startConnecting(){this._debug("start connecting"),this._setState(fi.Connecting)&&this.emit("connecting",{code:yo.connectCalled,reason:"connect called"}),this._client=null,this._startReconnecting()}_disconnect(e,r,n){if(e===Wc.stateInvalidated){this._token="",this._refreshRequired=!0;for(const l in this._subs)this._subs.hasOwnProperty(l)&&this._subs[l]._invalidateState();for(const l in this._serverSubs)this._serverSubs.hasOwnProperty(l)&&(this._serverSubs[l].offset=0,this._serverSubs[l].epoch="_")}if(this._isDisconnected())return;this._transportIsOpen=!1;const i=this.state;this._reconnecting=!1;const s={code:e,reason:r};let a;if(n?a=this._setState(fi.Connecting):(a=this._setState(fi.Disconnected),this._rejectPromises({code:hn.clientDisconnected,message:"disconnected"})),this._clearOutgoingRequests(),i===fi.Connecting&&this._clearReconnectTimeout(),i===fi.Connected&&this._clearConnectedState(),a&&(this._isConnecting()?this.emit("connecting",s):this.emit("disconnected",s)),this._transport){this._debug("closing existing transport");const l=this._transport;this._transport=null,l.close(),this._transportClosed=!0,this._nextTransportId()}else this._debug("no transport to close");this._scheduleReconnect()}_failUnauthorized(){this._disconnect(Wc.unauthorized,"unauthorized",!1)}_getToken(){return this._debug("get connection token"),this._config.getToken?this._config.getToken({}):(this.emit("error",{type:"configuration",error:{code:hn.badConfiguration,message:"token expired but no getToken function set in the configuration"}}),Promise.reject(new go("")))}_refresh(){const e=this._client,r=this;this._getToken().then(function(n){if(e!==r._client)return;if(!n){r._failUnauthorized();return}if(r._token=n,r._debug("connection token refreshed"),!r._isConnected())return;const i={refresh:{token:r._token}};r._call(i,!1).then(s=>{const a=s.reply.refresh;r._refreshResponse(a),s.next&&s.next()},s=>{r._refreshError(s.error),s.next&&s.next()})}).catch(function(n){if(r._isConnected()){if(n instanceof go){r._failUnauthorized();return}r.emit("error",{type:"refreshToken",error:{code:hn.clientRefreshToken,message:n!==void 0?n.toString():""}}),r._refreshTimeout=setTimeout(()=>r._refresh(),r._getRefreshRetryDelay())}})}_refreshError(e){e.code<100||e.temporary===!0?(this.emit("error",{type:"refresh",error:e}),this._refreshTimeout=setTimeout(()=>this._refresh(),this._getRefreshRetryDelay())):this._disconnect(e.code,e.message,!1)}_getRefreshRetryDelay(){return jl(0,5e3,1e4)}_refreshResponse(e){this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null),e.expires&&(this._client=e.client,this._refreshTimeout=setTimeout(()=>this._refresh(),Td(e.ttl)))}_removeSubscription(e){e!==null&&delete this._subs[e.channel]}_unsubscribe(e){if(!this._transportIsOpen)return Promise.resolve();const n={unsubscribe:{channel:e.channel}},i=this;return new Promise((a,l)=>{this._call(n,!1).then(c=>{a(),c.next&&c.next()},c=>{a(),c.next&&c.next(),i._disconnect(yo.unsubscribeError,"unsubscribe error",!0)})})}_getSub(e,r){if(r&&r>0){for(const i in this._subs)if(this._subs.hasOwnProperty(i)){const s=this._subs[i];if(s._id===r)return s}return null}const n=this._subs[e];return n||null}_isServerSub(e){return this._serverSubs[e]!==void 0}_sendSubscribeCommands(){const e=[];for(const r in this._subs){if(!this._subs.hasOwnProperty(r))continue;const n=this._subs[r];if(n._inflight!==!0&&n.state===Gi.Subscribing){const i=n._subscribe();i&&e.push(i)}}return e}_connectResponse(e){if(this._transportIsOpen=!0,this._transportWasOpen=!0,this._reconnectAttempts=0,this._refreshRequired=!1,this._isConnected())return;this._client=e.client,this._setState(fi.Connected),this._refreshTimeout&&clearTimeout(this._refreshTimeout),e.expires&&(this._refreshTimeout=setTimeout(()=>this._refresh(),Td(e.ttl))),this._session=e.session,this._node=e.node,this.startBatching(),this._sendSubscribeCommands(),this.stopBatching();const r={client:e.client,transport:this._transport.subName()};e.data&&(r.data=e.data),this.emit("connected",r),this._resolvePromises(),this._processServerSubs(e.subs||{}),e.ping&&e.ping>0?(this._serverPing=e.ping*1e3,this._sendPong=e.pong===!0,this._waitServerPing()):this._serverPing=0}_processServerSubs(e){for(const r in e){if(!e.hasOwnProperty(r))continue;const n=e[r];this._serverSubs[r]={offset:n.offset,epoch:n.epoch,recoverable:n.recoverable||!1};const i=this._getSubscribeContext(r,n);this.emit("subscribed",i)}for(const r in e){if(!e.hasOwnProperty(r))continue;const n=e[r];if(n.recovered){const i=n.publications;if(i&&i.length>0)for(const s in i)i.hasOwnProperty(s)&&this._handlePublication(r,i[s])}}for(const r in this._serverSubs)this._serverSubs.hasOwnProperty(r)&&(e[r]||(this.emit("unsubscribed",{channel:r}),delete this._serverSubs[r]))}_clearRefreshTimeout(){this._refreshTimeout!==null&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null)}_clearReconnectTimeout(){this._reconnectTimeout!==null&&(clearTimeout(this._reconnectTimeout),this._reconnectTimeout=null)}_clearServerPingTimeout(){this._serverPingTimeout!==null&&(clearTimeout(this._serverPingTimeout),this._serverPingTimeout=null)}_waitServerPing(){this._config.maxServerPingDelay!==0&&this._isConnected()&&(this._clearServerPingTimeout(),this._serverPingTimeout=setTimeout(()=>{this._isConnected()&&this._disconnect(yo.noPing,"no ping",!0)},this._serverPing+this._config.maxServerPingDelay))}_getSubscribeContext(e,r){const n={channel:e,positioned:!1,recoverable:!1,wasRecovering:!1,recovered:!1,hasRecoveredPublications:!1};r.recovered&&(n.recovered=!0),r.positioned&&(n.positioned=!0),r.recoverable&&(n.recoverable=!0),r.was_recovering&&(n.wasRecovering=!0);let i="";"epoch"in r&&(i=r.epoch);let s=0;return"offset"in r&&(s=r.offset),(n.positioned||n.recoverable)&&(n.streamPosition={offset:s,epoch:i}),Array.isArray(r.publications)&&r.publications.length>0&&(n.hasRecoveredPublications=!0),r.data&&(n.data=r.data),n}_handleReply(e,r){const n=e.id;if(!(n in this._callbacks)){r();return}const i=this._callbacks[n];if(clearTimeout(this._callbacks[n].timeout),delete this._callbacks[n],v5(e)){const s=i.errback;if(!s){r();return}const a={code:e.error.code,message:e.error.message||"",temporary:e.error.temporary||!1};s({error:a,next:r})}else{const s=i.callback;if(!s)return;s({reply:e,next:r})}}_handleJoin(e,r,n){const i=this._getSub(e,n);if(!i){if(e&&this._isServerSub(e)){const s={channel:e,info:this._getJoinLeaveContext(r.info)};this.emit("join",s)}return}i._handleJoin(r)}_handleLeave(e,r,n){const i=this._getSub(e,n);if(!i){if(e&&this._isServerSub(e)){const s={channel:e,info:this._getJoinLeaveContext(r.info)};this.emit("leave",s)}return}i._handleLeave(r)}_handleUnsubscribe(e,r){const n=this._getSub(e,0);if(!n&&e){this._isServerSub(e)&&(delete this._serverSubs[e],this.emit("unsubscribed",{channel:e}));return}r.code<2500?n._setUnsubscribed(r.code,r.reason,!1):(r.code===Sd.stateInvalidated&&n._invalidateState(),n._setSubscribing(r.code,r.reason))}_handleSubscribe(e,r){this._serverSubs[e]={offset:r.offset,epoch:r.epoch,recoverable:r.recoverable||!1},this.emit("subscribed",this._getSubscribeContext(e,r))}_handleDisconnect(e){const r=e.code;let n=!0;(r>=3500&&r<4e3||r>=4500&&r<5e3)&&(n=!1),this._disconnect(r,e.reason,n)}_getPublicationContext(e,r){const n={channel:e,data:r.data};return r.offset&&(n.offset=r.offset),r.info&&(n.info=this._getJoinLeaveContext(r.info)),r.tags&&(n.tags=r.tags),n}_getJoinLeaveContext(e){const r={client:e.client,user:e.user},n=e.conn_info;n&&(r.connInfo=n);const i=e.chan_info;return i&&(r.chanInfo=i),r}_handlePublication(e,r,n){const i=this._getSub(e,n);if(!i){if(e&&this._isServerSub(e)){const s=this._getPublicationContext(e,r);this.emit("publication",s),r.offset!==void 0&&(this._serverSubs[e].offset=r.offset)}return}i._handlePublication(r)}_handleMessage(e){this.emit("message",{data:e.data})}_handleServerPing(e){if(this._sendPong){const r={};this._transportSendCommands([r])}e()}_handlePush(e,r){const n=e.channel,i=e.id;e.pub?this._handlePublication(n,e.pub,i):e.message?this._handleMessage(e.message):e.join?this._handleJoin(n,e.join,i):e.leave?this._handleLeave(n,e.leave,i):e.unsubscribe?this._handleUnsubscribe(n,e.unsubscribe):e.subscribe?this._handleSubscribe(n,e.subscribe):e.disconnect&&this._handleDisconnect(e.disconnect),r()}_flush(){const e=this._commands.slice(0);this._commands=[],this._transportSendCommands(e)}_createErrorObject(e,r,n){const i={code:e,message:r};return n&&(i.temporary=!0),i}_registerCall(e,r,n){this._callbacks[e]={callback:r,errback:n,timeout:null},this._callbacks[e].timeout=setTimeout(()=>{delete this._callbacks[e],qg(n)&&n({error:this._createErrorObject(hn.timeout,"timeout")})},this._config.timeout)}_addCommand(e){this._batching?this._commands.push(e):this._transportSendCommands([e])}_nextPromiseId(){return++this._promiseId}_nextTransportId(){return++this._transportId}_resolvePromises(){for(const e in this._promises)this._promises.hasOwnProperty(e)&&(this._promises[e].timeout&&clearTimeout(this._promises[e].timeout),this._promises[e].resolve(),delete this._promises[e])}_rejectPromises(e){for(const r in this._promises)this._promises.hasOwnProperty(r)&&(this._promises[r].timeout&&clearTimeout(this._promises[r].timeout),this._promises[r].reject(e),delete this._promises[r])}}Vg.SubscriptionState=Gi,Vg.State=fi,Vg.UnauthorizedError=go;const a2={debug:0,info:1,warn:2,error:3};let D5="debug";function ar(t){const e=r=>a2[r]>=a2[D5];return{debug(...r){e("debug")&&console.debug(`[${t}]`,...r)},info(...r){e("info")&&console.info(`[${t}]`,...r)},warn(...r){e("warn")&&console.warn(`[${t}]`,...r)},error(...r){e("error")&&console.error(`[${t}]`,...r)}}}class o2{constructor(e){fr(this,"serverUrl");fr(this,"redirectUri");fr(this,"timeout");this.serverUrl=e.serverUrl.replace(/\/$/,""),this.redirectUri=e.redirectUri,this.timeout=e.timeout??1e4}async getProviders(){return(await(await this.fetchWithTimeout("/oauth2/providers")).json()).providers}async getAuthorizationUrl(e){const r=new URLSearchParams({provider:e,redirect_uri:this.redirectUri});return await(await this.fetchWithTimeout(`/oauth2/authorize?${r}`)).json()}async exchangeToken(e,r,n,i,s){const a={code:e,state:r,redirect_uri:this.redirectUri,device_id:n??"",device_name:i,user_agent:s};return await(await this.fetchWithTimeout("/oauth2/token",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)})).json()}async refreshToken(e){return await(await this.fetchWithTimeout("/oauth2/refresh",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refresh_token:e})})).json()}async fetchWithTimeout(e,r){const n=`${this.serverUrl}${e}`,i=new AbortController,s=setTimeout(()=>i.abort(),this.timeout);try{const a=await fetch(n,{...r,signal:i.signal});if(!a.ok){const l=await a.text().catch(()=>"Unknown error");throw new Error(`OAuth2 API error ${a.status}: ${l}`)}return a}finally{clearTimeout(s)}}}const M5={BASE_URL:"./",DEV:!1,MODE:"production",PROD:!0,SSR:!1},R5=ar("AuthConfig");let zg=null,Ed=null;function B5(t){zg=t&&t.length>0?t.replace(/\/+$/,""):null}function L5(t){if(!t||t.length===0){Ed=null;return}t.startsWith("/")?Ed=`${window.location.origin}${t}`:Ed=t.replace(/\/+$/,"")}function l2(){if(zg)return zg;try{const t=M5;if(t!=null&&t.VITE_SERVER_URL)return t.VITE_SERVER_URL}catch(t){R5.debug("import.meta.env not available, using default server URL:",t)}return"http://localhost:28080"}const rl={get serverUrl(){return l2()},get wsEndpoint(){return l2().replace(/^http/,"ws")+"/connection/websocket"},get redirectUri(){return Ed||`${window.location.origin}/auth/callback.html`},refreshBufferMs:5*60*1e3},wn={tokens:"rtc_auth_tokens",deviceId:"rtc_device_id",deviceName:"rtc_device_name",oauthState:"rtc_oauth_state",mode:"rtc_mode",windowState:"rtc_window_state",sessionTreeExpanded:"rtc_session_tree_expanded",activityBar:"rtc_activity_bar",editorArea:"rtc_editor_area",settings:"rtc_settings",inputAreaHeight:"rtc_input_area_height"},c2=ar("WindowStateController");class F5{constructor(e,r){this._state={...a5},this._restored=!1,this._boundOnViewportResize=()=>this._handleViewportResize(),this.host=e,this._config=r??{defaultMode:"normal",initialPosition:{x:-1,y:-1},initialSize:{width:420,height:640},minWidth:350,minHeight:520,maxWidth:1/0,maxHeight:1/0,draggable:!0,resizable:!0,showMinimize:!0,showMaximize:!0,showClose:!1,embedded:!1,bubblePosition:{corner:"bottom-right",offset:{x:-20,y:20}}},this.host.addController(this),this.actions={setMode:n=>this._setMode(n),setPosition:n=>this._updateState({position:n}),setSize:n=>this._updateState({size:n}),maximize:()=>this._setMode("maximized"),minimize:()=>this._setMode("minimized"),restore:()=>this._setMode("normal")},this._restoreState()}get value(){return{state:this._state,actions:this.actions}}get restored(){return this._restored}setConfig(e){this._config=e,this._restored||(this._state={...this._state,mode:e.defaultMode},this.host.requestUpdate())}get config(){return this._config}hostConnected(){window.addEventListener("resize",this._boundOnViewportResize)}hostDisconnected(){window.removeEventListener("resize",this._boundOnViewportResize)}_handleViewportResize(){var d;const{mode:e}=this._state;if(this._config.embedded||e==="maximized")return;if(e==="minimized"){this.host.requestUpdate();return}const r=window.innerWidth,n=window.innerHeight,{position:i,size:s}=this._state,a=20;if(r<s.width+2*a||n<s.height+2*a){(d=this.onViewportTooSmall)==null||d.call(this);return}let l=i.x,c=i.y,u=!1;l+s.width>r-a&&(l=r-s.width-a,u=!0),c+s.height>n-a&&(c=n-s.height-a,u=!0),l<a&&(l=a,u=!0),c<a&&(c=a,u=!0),u&&this._updateState({position:{x:l,y:c}})}_restoreState(){var e,r,n,i;try{const s=localStorage.getItem(wn.windowState);if(!s){this._state={...this._state,mode:this._config.defaultMode};return}const a=JSON.parse(s);a.mode&&((e=a.position)==null?void 0:e.x)!=null&&((r=a.position)==null?void 0:r.y)!=null&&((n=a.size)==null?void 0:n.width)!=null&&((i=a.size)==null?void 0:i.height)!=null?(this._state={...a,lastState:void 0},this._restored=!0,this._clampToViewport()):this._state={...this._state,mode:this._config.defaultMode}}catch(s){c2.debug("Failed to restore window state:",s),this._state={...this._state,mode:this._config.defaultMode}}}_clampToViewport(){const e=window.innerWidth,r=window.innerHeight,{position:n,size:i,mode:s}=this._state;if(s==="maximized")return;const a=Math.min(i.width,e),l=Math.min(i.height,r),c=Math.max(0,Math.min(n.x,e-a)),u=Math.max(0,Math.min(n.y,r-l));this._state={...this._state,position:{x:c,y:u},size:{width:a,height:l}}}_persistState(){try{const{mode:e,position:r,size:n}=this._state,i={mode:e,position:r,size:n};localStorage.setItem(wn.windowState,JSON.stringify(i))}catch(e){c2.debug("Failed to persist window state:",e)}}_setMode(e){const r=this._state;let n=r.lastState;e==="normal"&&!n?n=this._calculateInitialWindowState():e!=="normal"&&(n={position:{...r.position},size:{...r.size}}),this._state={...r,mode:e,lastState:n},this._persistState(),this.host.requestUpdate()}_calculateInitialWindowState(){const{corner:e,offset:r}=this._config.bubblePosition,{width:n,height:i}=this._config.initialSize,s={width:window.innerWidth,height:window.innerHeight};let a,l;switch(e){case"top-left":a=r.x,l=-r.y;break;case"top-right":a=s.width+r.x-n,l=-r.y;break;case"bottom-left":a=r.x,l=s.height-r.y-i;break;case"bottom-right":a=s.width+r.x-n,l=s.height-r.y-i;break}return{position:{x:a,y:l},size:{width:n,height:i}}}_updateState(e){this._state={...this._state,...e},this._persistState(),this.host.requestUpdate()}applyGeometry(e){var s,a,l;if(e.hasAttribute("data-embedded")){e.style.width="",e.style.height="",e.style.left="",e.style.top="",e.style.bottom="",e.style.right="";return}const{position:r,size:n,mode:i}=this._state;if(i==="normal"){e.style.left=`${r.x}px`,e.style.top=`${r.y}px`,e.style.width=`${n.width}px`,e.style.height=`${n.height}px`,e.style.bottom="",e.style.right="";const c=(s=e.shadowRoot)==null?void 0:s.querySelector(".bubble");c&&(c.style.removeProperty("position"),c.style.removeProperty("left"),c.style.removeProperty("top"),c.style.removeProperty("width"),c.style.removeProperty("height"),c.style.removeProperty("right"),c.style.removeProperty("bottom"))}else if(i==="minimized"){e.style.width="",e.style.height="",e.style.minWidth="",e.style.minHeight="";const c=parseInt(getComputedStyle(e).getPropertyValue("--rtc-bubble-size"))||40,u={width:window.innerWidth,height:window.innerHeight},{corner:d,offset:m}=this._config.bubblePosition;let y,_;switch(d){case"top-left":y=m.x,_=-m.y;break;case"top-right":y=u.width+m.x-c,_=-m.y;break;case"bottom-left":y=m.x,_=u.height-m.y-c;break;case"bottom-right":y=u.width+m.x-c,_=u.height-m.y-c;break}e.style.left=`${y}px`,e.style.top=`${_}px`,e.style.bottom="",e.style.right="";const k=(a=e.shadowRoot)==null?void 0:a.querySelector(".bubble");k&&(k.style.setProperty("position","fixed","important"),k.style.setProperty("left",`${y}px`,"important"),k.style.setProperty("top",`${_}px`,"important"),k.style.setProperty("width",`${c}px`,"important"),k.style.setProperty("height",`${c}px`,"important"),k.style.setProperty("right","auto","important"),k.style.setProperty("bottom","auto","important"))}else{e.style.width="",e.style.height="",e.style.left="",e.style.top="",e.style.bottom="",e.style.right="";const c=(l=e.shadowRoot)==null?void 0:l.querySelector(".bubble");c&&(c.style.removeProperty("position"),c.style.removeProperty("left"),c.style.removeProperty("top"),c.style.removeProperty("width"),c.style.removeProperty("height"),c.style.removeProperty("right"),c.style.removeProperty("bottom"))}}}const nl=ar("AuthController");class j5{constructor(e){this._state={...o5},this._externalTokens=!1,this.host=e,this.host.addController(this),this.actions={login:()=>this._login(),logout:()=>this._logout()},this._loadTokens()}get value(){return{state:this._state,...this.actions}}get state(){return this._state}hostConnected(){this._boundVisibilityHandler=this._onVisibilityChange.bind(this),document.addEventListener("visibilitychange",this._boundVisibilityHandler)}hostDisconnected(){this._boundVisibilityHandler&&(document.removeEventListener("visibilitychange",this._boundVisibilityHandler),this._boundVisibilityHandler=void 0),this._refreshTimer&&(clearTimeout(this._refreshTimer),this._refreshTimer=void 0)}login(){this._login()}logout(){this._logout()}setTokens(e){const r=Date.now()+e.expiresIn*1e3;this._state={isLoggedIn:!0,accessToken:e.accessToken,refreshToken:e.refreshToken,userId:e.userId,expiresAt:r},this._saveTokens({accessToken:e.accessToken,refreshToken:e.refreshToken,userId:e.userId,expiresAt:r}),this._scheduleRefresh(r),this.host.requestUpdate(),this._fireLogin()}setExternalTokens(e){this._externalTokens=!0;const r=Date.now()+e.expiresIn*1e3;this._state={isLoggedIn:!0,accessToken:e.accessToken,refreshToken:e.refreshToken,userId:e.userId,expiresAt:r},this._scheduleRefresh(r),this.host.requestUpdate(),this._fireLogin()}setDynamicTokenProvider(e){this._dynamicTokenProvider=e,this._externalTokens=!0,this._state={isLoggedIn:!0,accessToken:"",refreshToken:"",userId:e.userId,expiresAt:1/0},this.host.requestUpdate(),this._fireLogin()}setAuthProvider(e){this._authProvider=e,this._externalTokens=!0;const r=e.isLoggedIn();r?this._state={isLoggedIn:!0,accessToken:"",refreshToken:"",userId:"provider-managed",expiresAt:1/0}:this._state={isLoggedIn:!1},this.host.requestUpdate(),r&&this._fireLogin()}getAccessToken(){return this._state.accessToken}async getAccessTokenAsync(){return this._authProvider?await this._authProvider.getToken():this._dynamicTokenProvider?await this._dynamicTokenProvider.getToken():this._state.accessToken}_login(){this.host.requestUpdate(),this.host.dispatchEvent(new CustomEvent("rtc-auth-login-requested",{bubbles:!0,composed:!0}))}_logout(){var e;if((e=this._authProvider)!=null&&e.logout){this._authProvider.logout().then(()=>{this._performLogout()}).catch(r=>{nl.error("Auth provider logout failed:",r),this._performLogout()});return}this._performLogout()}_performLogout(){this._state={isLoggedIn:!1},this._externalTokens||localStorage.removeItem(wn.tokens),this._externalTokens=!1,this._dynamicTokenProvider=void 0,this._authProvider=void 0,this._refreshTimer&&(clearTimeout(this._refreshTimer),this._refreshTimer=void 0),this.host.dispatchEvent(new CustomEvent("rtc-auth-logout",{bubbles:!0,composed:!0})),this.host.requestUpdate()}_loadTokens(){try{const e=localStorage.getItem(wn.tokens);if(!e)return;const r=JSON.parse(e);r.expiresAt<Date.now()?this._executeRefresh(r.refreshToken).then(n=>{n.success?(this._state={isLoggedIn:!0,accessToken:n.accessToken,refreshToken:r.refreshToken,userId:r.userId,expiresAt:n.expiresAt},this._saveTokens({accessToken:n.accessToken,refreshToken:r.refreshToken,userId:r.userId,expiresAt:n.expiresAt}),this._scheduleRefresh(n.expiresAt),this.host.requestUpdate(),this._fireLogin()):localStorage.removeItem(wn.tokens)}).catch(n=>{nl.error("Token refresh post-processing failed:",n),localStorage.removeItem(wn.tokens)}):(this._state={isLoggedIn:!0,accessToken:r.accessToken,refreshToken:r.refreshToken,userId:r.userId,expiresAt:r.expiresAt},this._scheduleRefresh(r.expiresAt),this._fireLogin())}catch(e){nl.warn("Failed to load/parse tokens from localStorage, clearing:",e),localStorage.removeItem(wn.tokens)}}_saveTokens(e){localStorage.setItem(wn.tokens,JSON.stringify(e))}_scheduleRefresh(e){this._refreshTimer&&clearTimeout(this._refreshTimer);const r=Math.max(0,e-Date.now()-rl.refreshBufferMs);this._refreshTimer=setTimeout(()=>{this.handleTokenExpired()},r)}async _executeRefresh(e){try{const r=await fetch(`${rl.serverUrl}/oauth2/refresh`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refresh_token:e})});if(!r.ok)return{success:!1};let n;try{n=await r.json()}catch(l){return nl.warn("Token refresh response body parse failed:",l),{success:!1}}const i=typeof n.expires_in=="number"?n.expires_in:0,s=typeof n.access_token=="string"?n.access_token:void 0;if(!s||!i)return{success:!1};const a=Date.now()+i*1e3;return{success:!0,accessToken:s,expiresAt:a}}catch(r){return nl.error("Token refresh failed:",r),{success:!1}}}async handleTokenExpired(){var e;if(this._authProvider){if(this._refreshing)return await this._refreshing?"refresh":"relogin";this._refreshing=this._doRefresh();try{return await this._refreshing?"refresh":"relogin"}finally{this._refreshing=void 0}}if((e=this._dynamicTokenProvider)!=null&&e.refreshToken){if(this._refreshing)return await this._refreshing?"refresh":"relogin";this._refreshing=this._doRefresh();try{return await this._refreshing?"refresh":"relogin"}finally{this._refreshing=void 0}}if(!this._state.refreshToken)return this._logout(),"relogin";if(this._refreshing)return await this._refreshing?"refresh":"relogin";this._refreshing=this._doRefresh();try{return await this._refreshing?"refresh":"relogin"}finally{this._refreshing=void 0}}async _doRefresh(){var i;if(this._authProvider)try{const s=await this._authProvider.refreshToken(),a=s.expiresIn?Date.now()+s.expiresIn*1e3:1/0;return this._state={...this._state,accessToken:s.accessToken,refreshToken:s.refreshToken??"",expiresAt:a},a!==1/0&&this._scheduleRefresh(a),this.host.requestUpdate(),!0}catch(s){return nl.error("Auth provider refresh failed:",s),!1}if((i=this._dynamicTokenProvider)!=null&&i.refreshToken)try{const s=await this._dynamicTokenProvider.refreshToken(),a=s.expiresIn?Date.now()+s.expiresIn*1e3:1/0;return this._state={...this._state,accessToken:s.accessToken,refreshToken:s.refreshToken??"",expiresAt:a},a!==1/0&&this._scheduleRefresh(a),this.host.requestUpdate(),!0}catch(s){return nl.error("Dynamic token refresh failed:",s),!1}const e=await this._executeRefresh(this._state.refreshToken);if(!e.success)return this._logout(),this.host.dispatchEvent(new CustomEvent("rtc-auth-refresh-failed",{bubbles:!0,composed:!0})),!1;const r=e.accessToken,n=e.expiresAt;if(this._state={...this._state,accessToken:r,expiresAt:n},!this._externalTokens){let s={};try{s=JSON.parse(localStorage.getItem(wn.tokens)||"{}")}catch(a){nl.debug("Stored token data corrupted, starting fresh:",a)}s.accessToken=r,s.expiresAt=n,localStorage.setItem(wn.tokens,JSON.stringify(s))}return this._scheduleRefresh(n),this.host.requestUpdate(),!0}_onVisibilityChange(){document.visibilityState==="visible"&&this._state.isLoggedIn&&this._state.expiresAt&&Date.now()>this._state.expiresAt-rl.refreshBufferMs&&this.handleTokenExpired()}_fireLogin(){var e;this.host.dispatchEvent(new CustomEvent("rtc-auth-login",{detail:{userId:this._state.userId},bubbles:!0,composed:!0})),(e=this.onLogin)==null||e.call(this)}}const oa=ar("SessionController");class q5{constructor(e){this._state={...Kx},this.host=e,this.host.addController(this),this.actions={createSession:()=>this._createSession(),switchSession:r=>this._switchSession(r),renameSession:(r,n)=>this._renameSession(r,n),deleteSession:r=>this._deleteSession(r),closeSession:r=>this._closeSession(r),reopenSession:r=>this._reopenSession(r),reset:()=>this._reset(),clearCurrentSession:()=>this._clearCurrentSession(),setCurrentSession:r=>this._setCurrentSession(r),setSessions:r=>this._setSessions(r)}}get value(){return{state:this._state,actions:this.actions}}hostConnected(){}hostDisconnected(){}_createSession(){const e=`session-${crypto.randomUUID()}`,r={clientId:e,title:"New Session",createdAt:Date.now(),updatedAt:Date.now()},n=[...this._state.sessions,r];return this._state={sessions:n,currentSessionId:r.clientId},this.host.requestUpdate(),this.host.dispatchEvent(new CustomEvent("rtc-session-created",{bubbles:!0,composed:!0,detail:{session:r}})),e}_switchSession(e){var r;oa.debug("Switching to session:",e),this._state={...this._state,currentSessionId:e},this.host.requestUpdate(),(r=this.onSessionSwitch)==null||r.call(this),this.host.dispatchEvent(new CustomEvent("rtc-session-switched",{bubbles:!0,composed:!0,detail:{id:e}}))}async _renameSession(e,r){if(this.persistence)try{await this.persistence.updateSessionTitle(e,r)}catch(i){return oa.error("persistence rename failed:",i),{ok:!1,error:"rename-failed"}}const n=this._state.sessions.map(i=>i.clientId===e?{...i,title:r,updatedAt:Date.now()}:i);return this._state={...this._state,sessions:n},this.host.requestUpdate(),this.host.dispatchEvent(new CustomEvent("rtc-session-renamed",{bubbles:!0,composed:!0,detail:{id:e,title:r}})),{ok:!0}}async _deleteSession(e){var i;if(oa.debug("deleteSession id:",e,"persistence:",!!this.persistence),this.persistence)try{oa.debug("calling persistence.deleteSession"),await this.persistence.deleteSession(e),oa.debug("persistence.deleteSession completed")}catch(s){return oa.error("persistence delete failed:",s),{ok:!1,error:"delete-failed"}}else oa.warn("NO persistence layer, doing in-memory only delete");const r=this._state.sessions.filter(s=>s.clientId!==e),n=this._state.currentSessionId===e?r.length>0?r[r.length-1].clientId:null:this._state.currentSessionId;return this._state={sessions:r,currentSessionId:n},this.host.requestUpdate(),this._state.currentSessionId!==e&&n!==this._state.currentSessionId&&((i=this.onSessionSwitch)==null||i.call(this),this.host.dispatchEvent(new CustomEvent("rtc-session-switched",{bubbles:!0,composed:!0,detail:{id:n}}))),this.host.dispatchEvent(new CustomEvent("rtc-session-deleted",{bubbles:!0,composed:!0,detail:{id:e}})),{ok:!0}}async _closeSession(e){if(!this.persistence)return oa.warn("No persistence layer, skipping close"),{ok:!0};const r=await this.persistence.getSession(e);if(!(r!=null&&r.server_id))return{ok:!0};try{return await this.persistence.closeSession(e),{ok:!0}}catch(n){return oa.error("Failed to close session:",n),{ok:!1,error:n instanceof Error?n:new Error(String(n))}}}async _reopenSession(e){if(!this.persistence)return oa.error("No persistence layer for reopen"),{ok:!1,error:new Error("Persistence layer not available")};try{return await this.persistence.openSession(e),{ok:!0}}catch(r){return oa.error("Failed to reopen session:",r),{ok:!1,error:r instanceof Error?r:new Error(String(r))}}}_reset(){this._state={...Kx},this.host.requestUpdate()}_clearCurrentSession(){var e;this._state={...this._state,currentSessionId:null},this.host.requestUpdate(),(e=this.onSessionSwitch)==null||e.call(this)}_setCurrentSession(e){oa.debug("Setting session:",e.clientId,"title:",`"${e.title}"`);const r=this._state.sessions.findIndex(i=>i.clientId===e.clientId);let n;r>=0?n=this._state.sessions.map((i,s)=>s===r?e:i):n=[...this._state.sessions,e],this._state={sessions:n,currentSessionId:e.clientId},this.host.requestUpdate()}_setSessions(e){this._state={...this._state,sessions:e},this.host.requestUpdate()}}const bo=ar("MessageRepository"),vo=50,$5={messages:[],hasMore:!1,isLoadingMore:!1,hasMoreNewer:!1,isLoadingNewer:!1};class U5{constructor(e){this._api=e,this._sessions=new Map,this._subscribers=new Map,this._loadingSessions=new Set,this._loadingNewerSessions=new Set,this._oldestCursors=new Map,this._newestCursors=new Map}subscribe(e,r){let n=this._subscribers.get(e);n||(n=new Set,this._subscribers.set(e,n)),n.add(r);try{r(this._getState(e))}catch(i){bo.error(`subscriber callback error for session ${e}:`,i)}return()=>{const i=this._subscribers.get(e);i&&(i.delete(r),i.size===0&&this._subscribers.delete(e))}}getSessionState(e){return this._getState(e)}updateMessages(e,r){const n=this._getState(e);this._setState(e,{...n,messages:[...r]})}appendMessage(e,r){const n=this._getState(e);this._setState(e,{...n,messages:[...n.messages,r]})}patchMessage(e,r,n){const i=this._getState(e),s=i.messages.findIndex(c=>c.clientId===r);if(s===-1)return!1;let a;try{a=n(i.messages[s])}catch(c){return bo.error(`patchMessage updater threw for session=${e}, messageId=${r}:`,c),!1}const l=[...i.messages];return l[s]=a,this._setState(e,{...i,messages:l}),!0}async loadMore(e){const r=this._getState(e);if(bo.debug(`loadMore(${e}) called: hasMore=${r.hasMore}, isLoading=${this._loadingSessions.has(e)}, cachedMessages=${r.messages.length}`),!r.hasMore)return bo.debug(`loadMore(${e}): early return - hasMore=false`),r.messages;if(this._loadingSessions.has(e))return bo.debug(`loadMore(${e}): early return - already loading`),r.messages;const n=this._oldestCursors.get(e);bo.debug(`loadMore(${e}): oldestCursor=${n??"none"}`),this._loadingSessions.add(e),this._setState(e,{...r,isLoadingMore:!0});try{const i=await this._api.fetchOlderMessages(e,n),s=this._getState(e),a=[...i,...s.messages],l=i.length>=vo;return this._setState(e,{messages:a,hasMore:l,isLoadingMore:!1}),a}catch(i){bo.error(`loadMore(${e}) failed:`,i);const s=this._getState(e);return this._setState(e,{...s,isLoadingMore:!1}),this._getState(e).messages}finally{this._loadingSessions.delete(e)}}async loadNewer(e){const r=this._getState(e);if(!r.hasMoreNewer||this._loadingNewerSessions.has(e))return r.messages;const n=this._newestCursors.get(e);this._loadingNewerSessions.add(e),this._setState(e,{...r,isLoadingNewer:!0});try{const i=await this._api.fetchNewerMessages(e,n),s=this._getState(e),a=[...s.messages,...i],l=i.length>=vo;return this._setState(e,{messages:a,hasMore:s.hasMore,isLoadingMore:s.isLoadingMore,hasMoreNewer:l,isLoadingNewer:!1}),a}catch(i){bo.error(`loadNewer(${e}) failed:`,i);const s=this._getState(e);return this._setState(e,{...s,isLoadingNewer:!1}),this._getState(e).messages}finally{this._loadingNewerSessions.delete(e)}}async fetchMessages(e){const r=await this._api.fetchMessages(e),n=r.length>=vo;return this._setState(e,{messages:[...r],hasMore:n,isLoadingMore:!1}),r}evictSession(e){this._sessions.delete(e),this._subscribers.delete(e),this._loadingSessions.delete(e),this._loadingNewerSessions.delete(e),this._oldestCursors.delete(e),this._newestCursors.delete(e)}setHasMore(e,r){const n=this._getState(e);this._setState(e,{...n,hasMore:r})}setHasMoreNewer(e,r){const n=this._getState(e);this._setState(e,{...n,hasMoreNewer:r})}setOldestOffset(e,r){this._oldestCursors.set(e,r)}getOldestOffset(e){return this._oldestCursors.get(e)}setNewestOffset(e,r){this._newestCursors.set(e,r)}getNewestOffset(e){return this._newestCursors.get(e)}_getState(e){return this._sessions.get(e)??{...$5}}_setState(e,r){this._sessions.set(e,{...r}),this._notifySubscribers(e)}_notifySubscribers(e){const r=this._subscribers.get(e);if(!r||r.size===0)return;const n=this._getState(e);for(const i of r)try{i(n)}catch(s){bo.error(`subscriber callback error for session ${e}:`,s)}}}const ki=ar("MessageController");class V5{constructor(e){this._sessionUpdateChains=new Map,this.host=e,this.host.addController(this),this.actions={sendMessage:async r=>{await this._sendMessage(r)},resendMessage:async(r,n)=>{await this._resendMessage(r,n)},forkSession:async r=>{await this._forkSession(r)},appendToLastMessage:r=>this._appendToLastMessage(r),finalizeLastMessage:()=>this._finalizeLastMessage(),clearMessages:()=>this._clearMessages()}}set persistence(e){this._persistence=e,this._repository||(this._repository=new U5({fetchMessages:async r=>{var i,s;if(!this._persistence)return[];const n=await this._persistence.listMessages(r,void 0,vo,"backward");return n.length>0&&((i=this._repository)==null||i.setOldestOffset(r,this._buildCursor(n[0])),(s=this._repository)==null||s.setNewestOffset(r,this._buildCursor(n[n.length-1]))),n.map(a=>this._localMessageToUI(a))},fetchOlderMessages:async(r,n)=>{var s;if(!this._persistence)return[];const i=await this._persistence.listMessages(r,n,vo,"backward");return i.length>0&&((s=this._repository)==null||s.setOldestOffset(r,this._buildCursor(i[0]))),i.map(a=>this._localMessageToUI(a))},fetchNewerMessages:async(r,n)=>{var s;if(!this._persistence)return[];const i=await this._persistence.listMessages(r,n,vo,"forward");return i.length>0&&((s=this._repository)==null||s.setNewestOffset(r,this._buildCursor(i[i.length-1]))),i.map(a=>this._localMessageToUI(a))}}))}_buildCursor(e){return`${new Date(e.created_at).getTime()}|${e.client_id}`}_buildCursorFromUI(e){return`${e.timestamp}|${e.clientId}`}get repository(){if(!this._repository)throw new Error("[MessageController] Repository not initialized. Set persistence first.");return this._repository}set sessionController(e){this._sessionController=e}get value(){var i;const e=(i=this._sessionController)==null?void 0:i.value.state.currentSessionId,r=e&&this._repository?this._repository.getSessionState(e):{messages:[],hasMore:!1,isLoadingMore:!1};return{state:{messages:[...r.messages],hasMore:r.hasMore,isLoadingMore:r.isLoadingMore,hasMoreNewer:r.hasMoreNewer,isLoadingNewer:r.isLoadingNewer},actions:this.actions,getUserMessageHistory:(s,a)=>this.getUserMessageHistory(s,a)}}hostConnected(){}hostDisconnected(){this._sessionUpdateChains.clear()}addDemoAssistantMessage(e){var i;const r={clientId:`msg-${Date.now()}-assistant`,role:"assistant",content:{type:"text",data:e},timestamp:Date.now(),syncStatus:"synced"},n=(i=this._sessionController)==null?void 0:i.value.state.currentSessionId;this._repository&&n&&this._repository.appendMessage(n,r),this.host.requestUpdate()}async fetchInitialMessages(e){if(!this._repository)return;this._repository.getSessionState(e).messages.length===0&&await this._repository.fetchMessages(e),this.host.requestUpdate()}async loadMoreForSession(e){this._repository&&(await this._repository.loadMore(e),this.host.requestUpdate())}async loadNewerForSession(e){this._repository&&(await this._repository.loadNewer(e),this.host.requestUpdate())}evictSession(e){var r;(r=this._repository)==null||r.evictSession(e)}async updateMessageFromBus(e){if(!this._persistence||!this._repository)return;const r=await this._persistence.getMessage(e);if(!r){ki.debug(`message not found in DB: ${e}`);return}const n=r.session_client_id;if(!n){ki.debug(`message has no session_client_id: ${e}`);return}const s=(this._sessionUpdateChains.get(n)??Promise.resolve()).then(()=>{this._applyBusUpdate(n,e,r)},()=>{this._applyBusUpdate(n,e,r)});return this._sessionUpdateChains.set(n,s),s.finally(()=>{this._sessionUpdateChains.get(n)===s&&this._sessionUpdateChains.delete(n)}),s}_applyBusUpdate(e,r,n){if(!this._repository)return;const i=this._localMessageToUI(n),a=!this._repository.getSessionState(e).messages.some(l=>l.clientId===r);this._upsertMessage(e,r,i),this.host.requestUpdate(),a&&this.host.dispatchEvent(new CustomEvent("rtc-message-received",{detail:{message:i},bubbles:!0,composed:!0}))}async reload(e){var r;if(this._persistence)if(e){const n=await this._persistence.getMessage(e);if(n){const i=n.session_client_id;if(i){const s=this._localMessageToUI(n);this._upsertMessage(i,e,s),this.host.requestUpdate()}}}else{const n=(r=this._sessionController)==null?void 0:r.value.state.currentSessionId;n&&await this._reloadFromDB(n)}}_upsertMessage(e,r,n){if(!this._repository)return;const i=this._repository.getSessionState(e),s=i.messages.findIndex(l=>l.clientId===r);let a;if(s>=0)a=[...i.messages],a[s]=n;else{a=[...i.messages];const l=a.findIndex(c=>this._compareMessages(n,c)<0);l>=0?a.splice(l,0,n):a.push(n)}this._repository.updateMessages(e,a)}_compareMessages(e,r){const n=e.timestamp-r.timestamp;if(n!==0)return n;const i={system:0,user:1,assistant:2},s=i[e.role]??1,a=i[r.role]??1;return s!==a?s-a:e.clientId<r.clientId?-1:e.clientId>r.clientId?1:0}async _sendMessage(e){if(!this._persistence){ki.error("persistence not set");return}const r=crypto.randomUUID();let n;if(this._sessionController){const s=this._sessionController.value.state.currentSessionId;ki.debug("currentSessionId before:",s),n=s??crypto.randomUUID(),ki.debug("sessionClientId to use:",n,s?"(existing)":"(NEW)")}else n=crypto.randomUUID(),ki.debug("No sessionController, created new sessionClientId:",n);const i=await this._persistence.sendMessage({content:e,messageClientId:r,sessionClientId:n});if(ki.debug("persistence.sendMessage returned:",{sessionClientId:i.session.client_id,messageSessionClientId:i.message.session_client_id}),this._sessionController){const s=this._sessionController.value.state.currentSessionId;if(ki.debug("currentSessionId after persistence:",s,"result.session.client_id:",i.session.client_id),!s||s===i.session.client_id){const a={clientId:i.session.client_id,title:i.session.title||"",createdAt:new Date(i.session.created_at).getTime(),updatedAt:new Date(i.session.updated_at).getTime(),todoList:i.session.todo_list};ki.debug("setCurrentSession:",a.clientId,"title:",`"${a.title}"`),this._sessionController.actions.setCurrentSession(a),await this._reloadFromDB(i.session.client_id),ki.debug("_reloadFromDB completed")}}this.host.dispatchEvent(new CustomEvent("rtc-message-sent",{bubbles:!0,composed:!0,detail:{message:i.message}}))}async _resendMessage(e,r){var s;if(!this._persistence){ki.error("persistence not set");return}const n=(s=this._sessionController)==null?void 0:s.value.state.currentSessionId;if(!n){ki.error("cannot resend: no current session");return}const i=await this._persistence.sendMessage({content:r,messageClientId:e,sessionClientId:n});await this._reloadFromDB(n),this.host.dispatchEvent(new CustomEvent("rtc-message-sent",{bubbles:!0,composed:!0,detail:{message:i.message}}))}async _forkSession(e){if(!this._persistence){ki.error("persistence not set");return}const r=await this._persistence.forkSession({oldSessionClientId:e.oldSessionClientId,oldMessageClientId:e.oldMessageClientId,newSessionClientId:e.newSessionClientId,newMessageClientId:e.newMessageClientId,content:e.content,limit:e.limit});if(this._sessionController){const n={clientId:r.session.client_id,title:r.session.title||"",createdAt:new Date(r.session.created_at).getTime(),updatedAt:new Date(r.session.updated_at).getTime(),todoList:r.session.todo_list};this._sessionController.actions.setCurrentSession(n)}await this._reloadFromDB(r.session.client_id),this.host.dispatchEvent(new CustomEvent("rtc-message-sent",{bubbles:!0,composed:!0,detail:{message:r.message}}))}async _reloadFromDB(e){var l;if(!this._persistence)return;const r=(l=this._repository)==null?void 0:l.getSessionState(e),n=(r==null?void 0:r.messages)??[];if(n.length>0){ki.debug("_reloadFromDB skipped: repository already has messages",{sessionId:e.slice(0,8),existingCount:n.length});return}ki.debug("_reloadFromDB before:",{sessionId:e.slice(0,8),existingCount:n.length,existingIds:n.map(c=>c.clientId.slice(0,8))});const i=await this._persistence.listMessages(e,void 0,vo,"backward"),s=i.map(c=>this._localMessageToUI(c));ki.debug("_reloadFromDB loaded:",{sessionId:e.slice(0,8),freshCount:s.length,freshIds:s.map(c=>c.clientId.slice(0,8))});const a=this._mergeMessages(n,s);if(ki.debug("_reloadFromDB merged:",{sessionId:e.slice(0,8),mergedCount:a.length,mergedIds:a.map(c=>c.clientId.slice(0,8))}),a.length>0){const c=a[0],u=a[a.length-1],m=new Set(s.map(y=>y.clientId)).has(c.clientId)?i.length>=vo:(r==null?void 0:r.hasMore)??i.length>=vo;this._repository&&(this._repository.updateMessages(e,a),this._repository.setHasMore(e,m),this._repository.setOldestOffset(e,this._buildCursorFromUI(c)),this._repository.setNewestOffset(e,this._buildCursorFromUI(u)))}else this._repository&&(this._repository.updateMessages(e,[]),this._repository.setHasMore(e,!1));this.host.requestUpdate()}_mergeMessages(e,r){const n=new Map;for(const i of e)n.set(i.clientId,i);for(const i of r)n.set(i.clientId,i);return[...n.values()].sort(this._compareMessages)}async getUserMessageHistory(e,r=200){if(!this._persistence)return[];try{return(await this._persistence.listMessages(e,void 0,r,"backward")).filter(i=>i.role==="user"&&i.content).reverse().map(i=>this._extractTextFromContent(i.content))}catch(n){return ki.warn("getUserMessageHistory failed:",n),[]}}_extractTextFromContent(e){var r;if(!e)return"";try{const n=JSON.parse(e);if(n&&typeof n=="object"){if("type"in n){if(n.type==="text"||n.type==="markdown"||n.type==="thinking")return n.data??"";if(n.type==="user_message")return((r=n.data)==null?void 0:r.text)??""}else if("text"in n&&typeof n.text=="string")return n.text}}catch{}return e}_localMessageToUI(e){let r={type:"text",data:""};if(e.content)try{const n=JSON.parse(e.content);n&&typeof n=="object"&&"type"in n?r=n:r={type:"text",data:e.content}}catch{r={type:"text",data:e.content}}return{clientId:e.client_id,role:e.role,content:r,timestamp:new Date(e.created_at).getTime(),streaming:e.streaming_status==="streaming",syncStatus:e.sync_status,parentClientId:e.parent_client_id}}_appendToLastMessage(e){var a;const r=(a=this._sessionController)==null?void 0:a.value.state.currentSessionId;if(!this._repository||!r)return;const n=this._repository.getSessionState(r),i=n.messages[n.messages.length-1];if(!i)return;const s=typeof i.content.data=="string"?i.content.data+e:JSON.stringify(i.content.data)+e;this._repository.patchMessage(r,i.clientId,l=>({...l,content:{...l.content,data:s},streaming:!0})),this.host.requestUpdate()}_finalizeLastMessage(){var i;const e=(i=this._sessionController)==null?void 0:i.value.state.currentSessionId;if(!this._repository||!e)return;const r=this._repository.getSessionState(e),n=r.messages[r.messages.length-1];n&&(this._repository.patchMessage(e,n.clientId,s=>({...s,streaming:!1})),this.host.requestUpdate())}_clearMessages(){var r;const e=(r=this._sessionController)==null?void 0:r.value.state.currentSessionId;this._repository&&e&&(this._repository.updateMessages(e,[]),this._repository.setHasMore(e,!1),this._repository.setHasMoreNewer(e,!1),this._repository.setOldestOffset(e,""),this._repository.setNewestOffset(e,"")),this.host.requestUpdate()}}const u2=ar("ModeController"),z5=new Set(["manual","edit","plan","auto","bypass"]);function W5(t){return z5.has(t)}class K5{constructor(e){this._state={...c5},this.host=e,this.host.addController(this),this.actions={setMode:r=>this._setMode(r)},this._restoreMode()}get value(){return{state:this._state,actions:this.actions}}hostConnected(){}hostDisconnected(){}_restoreMode(){try{const e=localStorage.getItem(wn.mode);e&&W5(e)&&(this._state={currentMode:e})}catch(e){u2.debug("Failed to restore mode:",e)}}_setMode(e){this._state={currentMode:e},this.host.requestUpdate();try{localStorage.setItem(wn.mode,e)}catch(r){u2.debug("Failed to persist mode:",r)}}}class H5{constructor(e){this._state={...u5},this.host=e,this.host.addController(this),this.actions={approve:r=>this._approve(r),approveAll:r=>this._approveAll(r),deny:r=>this._deny(r)}}get value(){return{state:this._state,actions:this.actions}}hostConnected(){}hostDisconnected(){}addPendingCall(e){this._state={pendingCalls:[...this._state.pendingCalls,e]},this.host.requestUpdate()}_approve(e){const r=this._state.pendingCalls.find(i=>i.id===e),n=this._state.pendingCalls.filter(i=>i.id!==e);this._state={pendingCalls:n},this.host.requestUpdate(),this.host.dispatchEvent(new CustomEvent("rtc-tool-call-approved",{bubbles:!0,composed:!0,detail:{id:e,toolName:r==null?void 0:r.toolName}}))}_approveAll(e){const r=this._state.pendingCalls.filter(n=>n.toolName!==e);this._state={pendingCalls:r},this.host.requestUpdate(),this.host.dispatchEvent(new CustomEvent("rtc-tool-call-approve-all",{bubbles:!0,composed:!0,detail:{toolName:e}}))}_deny(e){const r=this._state.pendingCalls.filter(n=>n.id!==e);this._state={pendingCalls:r},this.host.requestUpdate(),this.host.dispatchEvent(new CustomEvent("rtc-tool-call-denied",{bubbles:!0,composed:!0,detail:{id:e}}))}}var la=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Wg(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var vf={exports:{}};vf.exports,function(t,e){(function(r,n){t.exports=n()})(la,function(){function r(S,x){var N=Object.keys(S);if(Object.getOwnPropertySymbols){var W=Object.getOwnPropertySymbols(S);x&&(W=W.filter(function(ie){return Object.getOwnPropertyDescriptor(S,ie).enumerable})),N.push.apply(N,W)}return N}function n(S){for(var x=1;x<arguments.length;x++){var N=arguments[x]!=null?arguments[x]:{};x%2?r(Object(N),!0).forEach(function(W){c(S,W,N[W])}):Object.getOwnPropertyDescriptors?Object.defineProperties(S,Object.getOwnPropertyDescriptors(N)):r(Object(N)).forEach(function(W){Object.defineProperty(S,W,Object.getOwnPropertyDescriptor(N,W))})}return S}function i(S){return i=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(x){return typeof x}:function(x){return x&&typeof Symbol=="function"&&x.constructor===Symbol&&x!==Symbol.prototype?"symbol":typeof x},i(S)}function s(S,x){if(!(S instanceof x))throw new TypeError("Cannot call a class as a function")}function a(S,x){for(var N=0;N<x.length;N++){var W=x[N];W.enumerable=W.enumerable||!1,W.configurable=!0,"value"in W&&(W.writable=!0),Object.defineProperty(S,A(W.key),W)}}function l(S,x,N){return x&&a(S.prototype,x),Object.defineProperty(S,"prototype",{writable:!1}),S}function c(S,x,N){return(x=A(x))in S?Object.defineProperty(S,x,{value:N,enumerable:!0,configurable:!0,writable:!0}):S[x]=N,S}function u(S,x){if(typeof x!="function"&&x!==null)throw new TypeError("Super expression must either be null or a function");S.prototype=Object.create(x&&x.prototype,{constructor:{value:S,writable:!0,configurable:!0}}),Object.defineProperty(S,"prototype",{writable:!1}),x&&m(S,x)}function d(S){return d=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(x){return x.__proto__||Object.getPrototypeOf(x)},d(S)}function m(S,x){return m=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(N,W){return N.__proto__=W,N},m(S,x)}function y(S){if(S===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return S}function _(S){var x=function(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var N,W=d(S);if(x){var ie=d(this).constructor;N=Reflect.construct(W,arguments,ie)}else N=W.apply(this,arguments);return function(me,Pe){if(Pe&&(typeof Pe=="object"||typeof Pe=="function"))return Pe;if(Pe!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return y(me)}(this,N)}}function k(){return k=typeof Reflect<"u"&&Reflect.get?Reflect.get.bind():function(S,x,N){var W=function(me,Pe){for(;!Object.prototype.hasOwnProperty.call(me,Pe)&&(me=d(me))!==null;);return me}(S,x);if(W){var ie=Object.getOwnPropertyDescriptor(W,x);return ie.get?ie.get.call(arguments.length<3?S:N):ie.value}},k.apply(this,arguments)}function A(S){var x=function(N,W){if(typeof N!="object"||N===null)return N;var ie=N[Symbol.toPrimitive];if(ie!==void 0){var me=ie.call(N,W);if(typeof me!="object")return me;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(N)}(S,"string");return typeof x=="symbol"?x:x+""}var P=function(S){return!(!S||!S.Window)&&S instanceof S.Window},O=void 0,w=void 0;function C(S){O=S;var x=S.document.createTextNode("");x.ownerDocument!==S.document&&typeof S.wrap=="function"&&S.wrap(x)===x&&(S=S.wrap(S)),w=S}function T(S){return P(S)?S:(S.ownerDocument||S).defaultView||w.window}typeof window<"u"&&window&&C(window);var L=function(S){return!!S&&i(S)==="object"},B=function(S){return typeof S=="function"},I={window:function(S){return S===w||P(S)},docFrag:function(S){return L(S)&&S.nodeType===11},object:L,func:B,number:function(S){return typeof S=="number"},bool:function(S){return typeof S=="boolean"},string:function(S){return typeof S=="string"},element:function(S){if(!S||i(S)!=="object")return!1;var x=T(S)||w;return/object|function/.test(typeof Element>"u"?"undefined":i(Element))?S instanceof Element||S instanceof x.Element:S.nodeType===1&&typeof S.nodeName=="string"},plainObject:function(S){return L(S)&&!!S.constructor&&/function Object\b/.test(S.constructor.toString())},array:function(S){return L(S)&&S.length!==void 0&&B(S.splice)}};function j(S){var x=S.interaction;if(x.prepared.name==="drag"){var N=x.prepared.axis;N==="x"?(x.coords.cur.page.y=x.coords.start.page.y,x.coords.cur.client.y=x.coords.start.client.y,x.coords.velocity.client.y=0,x.coords.velocity.page.y=0):N==="y"&&(x.coords.cur.page.x=x.coords.start.page.x,x.coords.cur.client.x=x.coords.start.client.x,x.coords.velocity.client.x=0,x.coords.velocity.page.x=0)}}function ae(S){var x=S.iEvent,N=S.interaction;if(N.prepared.name==="drag"){var W=N.prepared.axis;if(W==="x"||W==="y"){var ie=W==="x"?"y":"x";x.page[ie]=N.coords.start.page[ie],x.client[ie]=N.coords.start.client[ie],x.delta[ie]=0}}}var ne={id:"actions/drag",install:function(S){var x=S.actions,N=S.Interactable,W=S.defaults;N.prototype.draggable=ne.draggable,x.map.drag=ne,x.methodDict.drag="draggable",W.actions.drag=ne.defaults},listeners:{"interactions:before-action-move":j,"interactions:action-resume":j,"interactions:action-move":ae,"auto-start:check":function(S){var x=S.interaction,N=S.interactable,W=S.buttons,ie=N.options.drag;if(ie&&ie.enabled&&(!x.pointerIsDown||!/mouse|pointer/.test(x.pointerType)||W&N.options.drag.mouseButtons))return S.action={name:"drag",axis:ie.lockAxis==="start"?ie.startAxis:ie.lockAxis},!1}},draggable:function(S){return I.object(S)?(this.options.drag.enabled=S.enabled!==!1,this.setPerAction("drag",S),this.setOnEvents("drag",S),/^(xy|x|y|start)$/.test(S.lockAxis)&&(this.options.drag.lockAxis=S.lockAxis),/^(xy|x|y)$/.test(S.startAxis)&&(this.options.drag.startAxis=S.startAxis),this):I.bool(S)?(this.options.drag.enabled=S,this):this.options.drag},beforeMove:j,move:ae,defaults:{startAxis:"xy",lockAxis:"xy"},getCursor:function(){return"move"},filterEventType:function(S){return S.search("drag")===0}},F=ne,H={init:function(S){var x=S;H.document=x.document,H.DocumentFragment=x.DocumentFragment||he,H.SVGElement=x.SVGElement||he,H.SVGSVGElement=x.SVGSVGElement||he,H.SVGElementInstance=x.SVGElementInstance||he,H.Element=x.Element||he,H.HTMLElement=x.HTMLElement||H.Element,H.Event=x.Event,H.Touch=x.Touch||he,H.PointerEvent=x.PointerEvent||x.MSPointerEvent},document:null,DocumentFragment:null,SVGElement:null,SVGSVGElement:null,SVGElementInstance:null,Element:null,HTMLElement:null,Event:null,Touch:null,PointerEvent:null};function he(){}var Ae=H,Fe={init:function(S){var x=Ae.Element,N=S.navigator||{};Fe.supportsTouch="ontouchstart"in S||I.func(S.DocumentTouch)&&Ae.document instanceof S.DocumentTouch,Fe.supportsPointerEvent=N.pointerEnabled!==!1&&!!Ae.PointerEvent,Fe.isIOS=/iP(hone|od|ad)/.test(N.platform),Fe.isIOS7=/iP(hone|od|ad)/.test(N.platform)&&/OS 7[^\d]/.test(N.appVersion),Fe.isIe9=/MSIE 9/.test(N.userAgent),Fe.isOperaMobile=N.appName==="Opera"&&Fe.supportsTouch&&/Presto/.test(N.userAgent),Fe.prefixedMatchesSelector="matches"in x.prototype?"matches":"webkitMatchesSelector"in x.prototype?"webkitMatchesSelector":"mozMatchesSelector"in x.prototype?"mozMatchesSelector":"oMatchesSelector"in x.prototype?"oMatchesSelector":"msMatchesSelector",Fe.pEventTypes=Fe.supportsPointerEvent?Ae.PointerEvent===S.MSPointerEvent?{up:"MSPointerUp",down:"MSPointerDown",over:"mouseover",out:"mouseout",move:"MSPointerMove",cancel:"MSPointerCancel"}:{up:"pointerup",down:"pointerdown",over:"pointerover",out:"pointerout",move:"pointermove",cancel:"pointercancel"}:null,Fe.wheelEvent=Ae.document&&"onmousewheel"in Ae.document?"mousewheel":"wheel"},supportsTouch:null,supportsPointerEvent:null,isIOS7:null,isIOS:null,isIe9:null,isOperaMobile:null,prefixedMatchesSelector:null,pEventTypes:null,wheelEvent:null},xe=Fe;function fe(S,x){if(S.contains)return S.contains(x);for(;x;){if(x===S)return!0;x=x.parentNode}return!1}function pe(S,x){for(;I.element(S);){if(ee(S,x))return S;S=G(S)}return null}function G(S){var x=S.parentNode;if(I.docFrag(x)){for(;(x=x.host)&&I.docFrag(x););return x}return x}function ee(S,x){return w!==O&&(x=x.replace(/\/deep\//g," ")),S[xe.prefixedMatchesSelector](x)}var Te=function(S){return S.parentNode||S.host};function be(S,x){for(var N,W=[],ie=S;(N=Te(ie))&&ie!==x&&N!==ie.ownerDocument;)W.unshift(ie),ie=N;return W}function Z(S,x,N){for(;I.element(S);){if(ee(S,x))return!0;if((S=G(S))===N)return ee(S,x)}return!1}function $(S){return S.correspondingUseElement||S}function re(S){var x=S instanceof Ae.SVGElement?S.getBoundingClientRect():S.getClientRects()[0];return x&&{left:x.left,right:x.right,top:x.top,bottom:x.bottom,width:x.width||x.right-x.left,height:x.height||x.bottom-x.top}}function Ce(S){var x,N=re(S);if(!xe.isIOS7&&N){var W={x:(x=(x=T(S))||w).scrollX||x.document.documentElement.scrollLeft,y:x.scrollY||x.document.documentElement.scrollTop};N.left+=W.x,N.right+=W.x,N.top+=W.y,N.bottom+=W.y}return N}function ze(S){for(var x=[];S;)x.push(S),S=G(S);return x}function Le(S){return!!I.string(S)&&(Ae.document.querySelector(S),!0)}function Re(S,x){for(var N in x)S[N]=x[N];return S}function nt(S,x,N){return S==="parent"?G(N):S==="self"?x.getRect(N):pe(N,S)}function ut(S,x,N,W){var ie=S;return I.string(ie)?ie=nt(ie,x,N):I.func(ie)&&(ie=ie.apply(void 0,W)),I.element(ie)&&(ie=Ce(ie)),ie}function _t(S){return S&&{x:"x"in S?S.x:S.left,y:"y"in S?S.y:S.top}}function kt(S){return!S||"x"in S&&"y"in S||((S=Re({},S)).x=S.left||0,S.y=S.top||0,S.width=S.width||(S.right||0)-S.x,S.height=S.height||(S.bottom||0)-S.y),S}function ht(S,x,N){S.left&&(x.left+=N.x),S.right&&(x.right+=N.x),S.top&&(x.top+=N.y),S.bottom&&(x.bottom+=N.y),x.width=x.right-x.left,x.height=x.bottom-x.top}function Ot(S,x,N){var W=N&&S.options[N];return _t(ut(W&&W.origin||S.options.origin,S,x,[S&&x]))||{x:0,y:0}}function et(S,x){var N=arguments.length>2&&arguments[2]!==void 0?arguments[2]:function(Ge){return!0},W=arguments.length>3?arguments[3]:void 0;if(W=W||{},I.string(S)&&S.search(" ")!==-1&&(S=Je(S)),I.array(S))return S.forEach(function(Ge){return et(Ge,x,N,W)}),W;if(I.object(S)&&(x=S,S=""),I.func(x)&&N(S))W[S]=W[S]||[],W[S].push(x);else if(I.array(x))for(var ie=0,me=x;ie<me.length;ie++){var Pe=me[ie];et(S,Pe,N,W)}else if(I.object(x))for(var Me in x)et(Je(Me).map(function(Ge){return"".concat(S).concat(Ge)}),x[Me],N,W);return W}function Je(S){return S.trim().split(/ +/)}var We=function(S,x){return Math.sqrt(S*S+x*x)},rt=["webkit","moz"];function Nt(S,x){S.__set||(S.__set={});var N=function(ie){if(rt.some(function(me){return ie.indexOf(me)===0}))return 1;typeof S[ie]!="function"&&ie!=="__set"&&Object.defineProperty(S,ie,{get:function(){return ie in S.__set?S.__set[ie]:S.__set[ie]=x[ie]},set:function(me){S.__set[ie]=me},configurable:!0})};for(var W in x)N(W);return S}function Pt(S,x){S.page=S.page||{},S.page.x=x.page.x,S.page.y=x.page.y,S.client=S.client||{},S.client.x=x.client.x,S.client.y=x.client.y,S.timeStamp=x.timeStamp}function je(S){S.page.x=0,S.page.y=0,S.client.x=0,S.client.y=0}function Ne(S){return S instanceof Ae.Event||S instanceof Ae.Touch}function ge(S,x,N){return S=S||"page",(N=N||{}).x=x[S+"X"],N.y=x[S+"Y"],N}function le(S,x){return x=x||{x:0,y:0},xe.isOperaMobile&&Ne(S)?(ge("screen",S,x),x.x+=window.scrollX,x.y+=window.scrollY):ge("page",S,x),x}function ce(S){return I.number(S.pointerId)?S.pointerId:S.identifier}function K(S,x,N){var W=x.length>1?$e(x):x[0];le(W,S.page),function(ie,me){me=me||{},xe.isOperaMobile&&Ne(ie)?ge("screen",ie,me):ge("client",ie,me)}(W,S.client),S.timeStamp=N}function ve(S){var x=[];return I.array(S)?(x[0]=S[0],x[1]=S[1]):S.type==="touchend"?S.touches.length===1?(x[0]=S.touches[0],x[1]=S.changedTouches[0]):S.touches.length===0&&(x[0]=S.changedTouches[0],x[1]=S.changedTouches[1]):(x[0]=S.touches[0],x[1]=S.touches[1]),x}function $e(S){for(var x={pageX:0,pageY:0,clientX:0,clientY:0,screenX:0,screenY:0},N=0;N<S.length;N++){var W=S[N];for(var ie in x)x[ie]+=W[ie]}for(var me in x)x[me]/=S.length;return x}function X(S){if(!S.length)return null;var x=ve(S),N=Math.min(x[0].pageX,x[1].pageX),W=Math.min(x[0].pageY,x[1].pageY),ie=Math.max(x[0].pageX,x[1].pageX),me=Math.max(x[0].pageY,x[1].pageY);return{x:N,y:W,left:N,top:W,right:ie,bottom:me,width:ie-N,height:me-W}}function M(S,x){var N=x+"X",W=x+"Y",ie=ve(S),me=ie[0][N]-ie[1][N],Pe=ie[0][W]-ie[1][W];return We(me,Pe)}function q(S,x){var N=x+"X",W=x+"Y",ie=ve(S),me=ie[1][N]-ie[0][N],Pe=ie[1][W]-ie[0][W];return 180*Math.atan2(Pe,me)/Math.PI}function Ie(S){return I.string(S.pointerType)?S.pointerType:I.number(S.pointerType)?[void 0,void 0,"touch","pen","mouse"][S.pointerType]:/touch/.test(S.type||"")||S instanceof Ae.Touch?"touch":"mouse"}function it(S){var x=I.func(S.composedPath)?S.composedPath():S.path;return[$(x?x[0]:S.target),$(S.currentTarget)]}var Qe=function(){function S(x){s(this,S),this.immediatePropagationStopped=!1,this.propagationStopped=!1,this._interaction=x}return l(S,[{key:"preventDefault",value:function(){}},{key:"stopPropagation",value:function(){this.propagationStopped=!0}},{key:"stopImmediatePropagation",value:function(){this.immediatePropagationStopped=this.propagationStopped=!0}}]),S}();Object.defineProperty(Qe.prototype,"interaction",{get:function(){return this._interaction._proxy},set:function(){}});var pt=function(S,x){for(var N=0;N<x.length;N++){var W=x[N];S.push(W)}return S},oe=function(S){return pt([],S)},Se=function(S,x){for(var N=0;N<S.length;N++)if(x(S[N],N,S))return N;return-1},Q=function(S,x){return S[Se(S,x)]},ke=function(S){u(N,S);var x=_(N);function N(W,ie,me){var Pe;s(this,N),(Pe=x.call(this,ie._interaction)).dropzone=void 0,Pe.dragEvent=void 0,Pe.relatedTarget=void 0,Pe.draggable=void 0,Pe.propagationStopped=!1,Pe.immediatePropagationStopped=!1;var Me=me==="dragleave"?W.prev:W.cur,Ge=Me.element,ct=Me.dropzone;return Pe.type=me,Pe.target=Ge,Pe.currentTarget=Ge,Pe.dropzone=ct,Pe.dragEvent=ie,Pe.relatedTarget=ie.target,Pe.draggable=ie.interactable,Pe.timeStamp=ie.timeStamp,Pe}return l(N,[{key:"reject",value:function(){var W=this,ie=this._interaction.dropState;if(this.type==="dropactivate"||this.dropzone&&ie.cur.dropzone===this.dropzone&&ie.cur.element===this.target)if(ie.prev.dropzone=this.dropzone,ie.prev.element=this.target,ie.rejected=!0,ie.events.enter=null,this.stopImmediatePropagation(),this.type==="dropactivate"){var me=ie.activeDrops,Pe=Se(me,function(Ge){var ct=Ge.dropzone,tt=Ge.element;return ct===W.dropzone&&tt===W.target});ie.activeDrops.splice(Pe,1);var Me=new N(ie,this.dragEvent,"dropdeactivate");Me.dropzone=this.dropzone,Me.target=this.target,this.dropzone.fire(Me)}else this.dropzone.fire(new N(ie,this.dragEvent,"dragleave"))}},{key:"preventDefault",value:function(){}},{key:"stopPropagation",value:function(){this.propagationStopped=!0}},{key:"stopImmediatePropagation",value:function(){this.immediatePropagationStopped=this.propagationStopped=!0}}]),N}(Qe);function dt(S,x){for(var N=0,W=S.slice();N<W.length;N++){var ie=W[N],me=ie.dropzone,Pe=ie.element;x.dropzone=me,x.target=Pe,me.fire(x),x.propagationStopped=x.immediatePropagationStopped=!1}}function Oe(S,x){for(var N=function(me,Pe){for(var Me=[],Ge=0,ct=me.interactables.list;Ge<ct.length;Ge++){var tt=ct[Ge];if(tt.options.drop.enabled){var b=tt.options.drop.accept;if(!(I.element(b)&&b!==Pe||I.string(b)&&!ee(Pe,b)||I.func(b)&&!b({dropzone:tt,draggableElement:Pe})))for(var E=0,R=tt.getAllElements();E<R.length;E++){var V=R[E];V!==Pe&&Me.push({dropzone:tt,element:V,rect:tt.getRect(V)})}}}return Me}(S,x),W=0;W<N.length;W++){var ie=N[W];ie.rect=ie.dropzone.getRect(ie.element)}return N}function St(S,x,N){for(var W=S.dropState,ie=S.interactable,me=S.element,Pe=[],Me=0,Ge=W.activeDrops;Me<Ge.length;Me++){var ct=Ge[Me],tt=ct.dropzone,b=ct.element,E=ct.rect,R=tt.dropCheck(x,N,ie,me,b,E);Pe.push(R?b:null)}var V=function(te){for(var ye,Ee,De,st=[],yt=0;yt<te.length;yt++){var ot=te[yt],at=te[ye];if(ot&&yt!==ye)if(at){var ft=Te(ot),mt=Te(at);if(ft!==ot.ownerDocument)if(mt!==ot.ownerDocument)if(ft!==mt){st=st.length?st:be(at);var gt=void 0;if(at instanceof Ae.HTMLElement&&ot instanceof Ae.SVGElement&&!(ot instanceof Ae.SVGSVGElement)){if(ot===mt)continue;gt=ot.ownerSVGElement}else gt=ot;for(var bt=be(gt,at.ownerDocument),xt=0;bt[xt]&&bt[xt]===st[xt];)xt++;var Ct=[bt[xt-1],bt[xt],st[xt]];if(Ct[0])for(var At=Ct[0].lastChild;At;){if(At===Ct[1]){ye=yt,st=bt;break}if(At===Ct[2])break;At=At.previousSibling}}else De=at,(parseInt(T(Ee=ot).getComputedStyle(Ee).zIndex,10)||0)>=(parseInt(T(De).getComputedStyle(De).zIndex,10)||0)&&(ye=yt);else ye=yt}else ye=yt}return ye}(Pe);return W.activeDrops[V]||null}function Mt(S,x,N){var W=S.dropState,ie={enter:null,leave:null,activate:null,deactivate:null,move:null,drop:null};return N.type==="dragstart"&&(ie.activate=new ke(W,N,"dropactivate"),ie.activate.target=null,ie.activate.dropzone=null),N.type==="dragend"&&(ie.deactivate=new ke(W,N,"dropdeactivate"),ie.deactivate.target=null,ie.deactivate.dropzone=null),W.rejected||(W.cur.element!==W.prev.element&&(W.prev.dropzone&&(ie.leave=new ke(W,N,"dragleave"),N.dragLeave=ie.leave.target=W.prev.element,N.prevDropzone=ie.leave.dropzone=W.prev.dropzone),W.cur.dropzone&&(ie.enter=new ke(W,N,"dragenter"),N.dragEnter=W.cur.element,N.dropzone=W.cur.dropzone)),N.type==="dragend"&&W.cur.dropzone&&(ie.drop=new ke(W,N,"drop"),N.dropzone=W.cur.dropzone,N.relatedTarget=W.cur.element),N.type==="dragmove"&&W.cur.dropzone&&(ie.move=new ke(W,N,"dropmove"),N.dropzone=W.cur.dropzone)),ie}function Rt(S,x){var N=S.dropState,W=N.activeDrops,ie=N.cur,me=N.prev;x.leave&&me.dropzone.fire(x.leave),x.enter&&ie.dropzone.fire(x.enter),x.move&&ie.dropzone.fire(x.move),x.drop&&ie.dropzone.fire(x.drop),x.deactivate&&dt(W,x.deactivate),N.prev.dropzone=ie.dropzone,N.prev.element=ie.element}function rr(S,x){var N=S.interaction,W=S.iEvent,ie=S.event;if(W.type==="dragmove"||W.type==="dragend"){var me=N.dropState;x.dynamicDrop&&(me.activeDrops=Oe(x,N.element));var Pe=W,Me=St(N,Pe,ie);me.rejected=me.rejected&&!!Me&&Me.dropzone===me.cur.dropzone&&Me.element===me.cur.element,me.cur.dropzone=Me&&Me.dropzone,me.cur.element=Me&&Me.element,me.events=Mt(N,0,Pe)}}var hr={id:"actions/drop",install:function(S){var x=S.actions,N=S.interactStatic,W=S.Interactable,ie=S.defaults;S.usePlugin(F),W.prototype.dropzone=function(me){return function(Pe,Me){if(I.object(Me)){if(Pe.options.drop.enabled=Me.enabled!==!1,Me.listeners){var Ge=et(Me.listeners),ct=Object.keys(Ge).reduce(function(b,E){return b[/^(enter|leave)/.test(E)?"drag".concat(E):/^(activate|deactivate|move)/.test(E)?"drop".concat(E):E]=Ge[E],b},{}),tt=Pe.options.drop.listeners;tt&&Pe.off(tt),Pe.on(ct),Pe.options.drop.listeners=ct}return I.func(Me.ondrop)&&Pe.on("drop",Me.ondrop),I.func(Me.ondropactivate)&&Pe.on("dropactivate",Me.ondropactivate),I.func(Me.ondropdeactivate)&&Pe.on("dropdeactivate",Me.ondropdeactivate),I.func(Me.ondragenter)&&Pe.on("dragenter",Me.ondragenter),I.func(Me.ondragleave)&&Pe.on("dragleave",Me.ondragleave),I.func(Me.ondropmove)&&Pe.on("dropmove",Me.ondropmove),/^(pointer|center)$/.test(Me.overlap)?Pe.options.drop.overlap=Me.overlap:I.number(Me.overlap)&&(Pe.options.drop.overlap=Math.max(Math.min(1,Me.overlap),0)),"accept"in Me&&(Pe.options.drop.accept=Me.accept),"checker"in Me&&(Pe.options.drop.checker=Me.checker),Pe}return I.bool(Me)?(Pe.options.drop.enabled=Me,Pe):Pe.options.drop}(this,me)},W.prototype.dropCheck=function(me,Pe,Me,Ge,ct,tt){return function(b,E,R,V,te,ye,Ee){var De=!1;if(!(Ee=Ee||b.getRect(ye)))return!!b.options.drop.checker&&b.options.drop.checker(E,R,De,b,ye,V,te);var st=b.options.drop.overlap;if(st==="pointer"){var yt=Ot(V,te,"drag"),ot=le(E);ot.x+=yt.x,ot.y+=yt.y;var at=ot.x>Ee.left&&ot.x<Ee.right,ft=ot.y>Ee.top&&ot.y<Ee.bottom;De=at&&ft}var mt=V.getRect(te);if(mt&&st==="center"){var gt=mt.left+mt.width/2,bt=mt.top+mt.height/2;De=gt>=Ee.left&><=Ee.right&&bt>=Ee.top&&bt<=Ee.bottom}return mt&&I.number(st)&&(De=Math.max(0,Math.min(Ee.right,mt.right)-Math.max(Ee.left,mt.left))*Math.max(0,Math.min(Ee.bottom,mt.bottom)-Math.max(Ee.top,mt.top))/(mt.width*mt.height)>=st),b.options.drop.checker&&(De=b.options.drop.checker(E,R,De,b,ye,V,te)),De}(this,me,Pe,Me,Ge,ct,tt)},N.dynamicDrop=function(me){return I.bool(me)?(S.dynamicDrop=me,N):S.dynamicDrop},Re(x.phaselessTypes,{dragenter:!0,dragleave:!0,dropactivate:!0,dropdeactivate:!0,dropmove:!0,drop:!0}),x.methodDict.drop="dropzone",S.dynamicDrop=!1,ie.actions.drop=hr.defaults},listeners:{"interactions:before-action-start":function(S){var x=S.interaction;x.prepared.name==="drag"&&(x.dropState={cur:{dropzone:null,element:null},prev:{dropzone:null,element:null},rejected:null,events:null,activeDrops:[]})},"interactions:after-action-start":function(S,x){var N=S.interaction,W=(S.event,S.iEvent);if(N.prepared.name==="drag"){var ie=N.dropState;ie.activeDrops=[],ie.events={},ie.activeDrops=Oe(x,N.element),ie.events=Mt(N,0,W),ie.events.activate&&(dt(ie.activeDrops,ie.events.activate),x.fire("actions/drop:start",{interaction:N,dragEvent:W}))}},"interactions:action-move":rr,"interactions:after-action-move":function(S,x){var N=S.interaction,W=S.iEvent;if(N.prepared.name==="drag"){var ie=N.dropState;Rt(N,ie.events),x.fire("actions/drop:move",{interaction:N,dragEvent:W}),ie.events={}}},"interactions:action-end":function(S,x){if(S.interaction.prepared.name==="drag"){var N=S.interaction,W=S.iEvent;rr(S,x),Rt(N,N.dropState.events),x.fire("actions/drop:end",{interaction:N,dragEvent:W})}},"interactions:stop":function(S){var x=S.interaction;if(x.prepared.name==="drag"){var N=x.dropState;N&&(N.activeDrops=null,N.events=null,N.cur.dropzone=null,N.cur.element=null,N.prev.dropzone=null,N.prev.element=null,N.rejected=!1)}}},getActiveDrops:Oe,getDrop:St,getDropEvents:Mt,fireDropEvents:Rt,filterEventType:function(S){return S.search("drag")===0||S.search("drop")===0},defaults:{enabled:!1,accept:null,overlap:"pointer"}},br=hr;function xr(S){var x=S.interaction,N=S.iEvent,W=S.phase;if(x.prepared.name==="gesture"){var ie=x.pointers.map(function(ct){return ct.pointer}),me=W==="start",Pe=W==="end",Me=x.interactable.options.deltaSource;if(N.touches=[ie[0],ie[1]],me)N.distance=M(ie,Me),N.box=X(ie),N.scale=1,N.ds=0,N.angle=q(ie,Me),N.da=0,x.gesture.startDistance=N.distance,x.gesture.startAngle=N.angle;else if(Pe||x.pointers.length<2){var Ge=x.prevEvent;N.distance=Ge.distance,N.box=Ge.box,N.scale=Ge.scale,N.ds=0,N.angle=Ge.angle,N.da=0}else N.distance=M(ie,Me),N.box=X(ie),N.scale=N.distance/x.gesture.startDistance,N.angle=q(ie,Me),N.ds=N.scale-x.gesture.scale,N.da=N.angle-x.gesture.angle;x.gesture.distance=N.distance,x.gesture.angle=N.angle,I.number(N.scale)&&N.scale!==1/0&&!isNaN(N.scale)&&(x.gesture.scale=N.scale)}}var Cr={id:"actions/gesture",before:["actions/drag","actions/resize"],install:function(S){var x=S.actions,N=S.Interactable,W=S.defaults;N.prototype.gesturable=function(ie){return I.object(ie)?(this.options.gesture.enabled=ie.enabled!==!1,this.setPerAction("gesture",ie),this.setOnEvents("gesture",ie),this):I.bool(ie)?(this.options.gesture.enabled=ie,this):this.options.gesture},x.map.gesture=Cr,x.methodDict.gesture="gesturable",W.actions.gesture=Cr.defaults},listeners:{"interactions:action-start":xr,"interactions:action-move":xr,"interactions:action-end":xr,"interactions:new":function(S){S.interaction.gesture={angle:0,distance:0,scale:1,startAngle:0,startDistance:0}},"auto-start:check":function(S){if(!(S.interaction.pointers.length<2)){var x=S.interactable.options.gesture;if(x&&x.enabled)return S.action={name:"gesture"},!1}}},defaults:{},getCursor:function(){return""},filterEventType:function(S){return S.search("gesture")===0}},gn=Cr;function Sr(S,x,N,W,ie,me,Pe){if(!x)return!1;if(x===!0){var Me=I.number(me.width)?me.width:me.right-me.left,Ge=I.number(me.height)?me.height:me.bottom-me.top;if(Pe=Math.min(Pe,Math.abs((S==="left"||S==="right"?Me:Ge)/2)),Me<0&&(S==="left"?S="right":S==="right"&&(S="left")),Ge<0&&(S==="top"?S="bottom":S==="bottom"&&(S="top")),S==="left"){var ct=Me>=0?me.left:me.right;return N.x<ct+Pe}if(S==="top"){var tt=Ge>=0?me.top:me.bottom;return N.y<tt+Pe}if(S==="right")return N.x>(Me>=0?me.right:me.left)-Pe;if(S==="bottom")return N.y>(Ge>=0?me.bottom:me.top)-Pe}return!!I.element(W)&&(I.element(x)?x===W:Z(W,x,ie))}function Rr(S){var x=S.iEvent,N=S.interaction;if(N.prepared.name==="resize"&&N.resizeAxes){var W=x;N.interactable.options.resize.square?(N.resizeAxes==="y"?W.delta.x=W.delta.y:W.delta.y=W.delta.x,W.axes="xy"):(W.axes=N.resizeAxes,N.resizeAxes==="x"?W.delta.y=0:N.resizeAxes==="y"&&(W.delta.x=0))}}var Pn,Mn,Jr={id:"actions/resize",before:["actions/drag"],install:function(S){var x=S.actions,N=S.browser,W=S.Interactable,ie=S.defaults;Jr.cursors=function(me){return me.isIe9?{x:"e-resize",y:"s-resize",xy:"se-resize",top:"n-resize",left:"w-resize",bottom:"s-resize",right:"e-resize",topleft:"se-resize",bottomright:"se-resize",topright:"ne-resize",bottomleft:"ne-resize"}:{x:"ew-resize",y:"ns-resize",xy:"nwse-resize",top:"ns-resize",left:"ew-resize",bottom:"ns-resize",right:"ew-resize",topleft:"nwse-resize",bottomright:"nwse-resize",topright:"nesw-resize",bottomleft:"nesw-resize"}}(N),Jr.defaultMargin=N.supportsTouch||N.supportsPointerEvent?20:10,W.prototype.resizable=function(me){return function(Pe,Me,Ge){return I.object(Me)?(Pe.options.resize.enabled=Me.enabled!==!1,Pe.setPerAction("resize",Me),Pe.setOnEvents("resize",Me),I.string(Me.axis)&&/^x$|^y$|^xy$/.test(Me.axis)?Pe.options.resize.axis=Me.axis:Me.axis===null&&(Pe.options.resize.axis=Ge.defaults.actions.resize.axis),I.bool(Me.preserveAspectRatio)?Pe.options.resize.preserveAspectRatio=Me.preserveAspectRatio:I.bool(Me.square)&&(Pe.options.resize.square=Me.square),Pe):I.bool(Me)?(Pe.options.resize.enabled=Me,Pe):Pe.options.resize}(this,me,S)},x.map.resize=Jr,x.methodDict.resize="resizable",ie.actions.resize=Jr.defaults},listeners:{"interactions:new":function(S){S.interaction.resizeAxes="xy"},"interactions:action-start":function(S){(function(x){var N=x.iEvent,W=x.interaction;if(W.prepared.name==="resize"&&W.prepared.edges){var ie=N,me=W.rect;W._rects={start:Re({},me),corrected:Re({},me),previous:Re({},me),delta:{left:0,right:0,width:0,top:0,bottom:0,height:0}},ie.edges=W.prepared.edges,ie.rect=W._rects.corrected,ie.deltaRect=W._rects.delta}})(S),Rr(S)},"interactions:action-move":function(S){(function(x){var N=x.iEvent,W=x.interaction;if(W.prepared.name==="resize"&&W.prepared.edges){var ie=N,me=W.interactable.options.resize.invert,Pe=me==="reposition"||me==="negate",Me=W.rect,Ge=W._rects,ct=Ge.start,tt=Ge.corrected,b=Ge.delta,E=Ge.previous;if(Re(E,tt),Pe){if(Re(tt,Me),me==="reposition"){if(tt.top>tt.bottom){var R=tt.top;tt.top=tt.bottom,tt.bottom=R}if(tt.left>tt.right){var V=tt.left;tt.left=tt.right,tt.right=V}}}else tt.top=Math.min(Me.top,ct.bottom),tt.bottom=Math.max(Me.bottom,ct.top),tt.left=Math.min(Me.left,ct.right),tt.right=Math.max(Me.right,ct.left);for(var te in tt.width=tt.right-tt.left,tt.height=tt.bottom-tt.top,tt)b[te]=tt[te]-E[te];ie.edges=W.prepared.edges,ie.rect=tt,ie.deltaRect=b}})(S),Rr(S)},"interactions:action-end":function(S){var x=S.iEvent,N=S.interaction;if(N.prepared.name==="resize"&&N.prepared.edges){var W=x;W.edges=N.prepared.edges,W.rect=N._rects.corrected,W.deltaRect=N._rects.delta}},"auto-start:check":function(S){var x=S.interaction,N=S.interactable,W=S.element,ie=S.rect,me=S.buttons;if(ie){var Pe=Re({},x.coords.cur.page),Me=N.options.resize;if(Me&&Me.enabled&&(!x.pointerIsDown||!/mouse|pointer/.test(x.pointerType)||me&Me.mouseButtons)){if(I.object(Me.edges)){var Ge={left:!1,right:!1,top:!1,bottom:!1};for(var ct in Ge)Ge[ct]=Sr(ct,Me.edges[ct],Pe,x._latestPointer.eventTarget,W,ie,Me.margin||Jr.defaultMargin);Ge.left=Ge.left&&!Ge.right,Ge.top=Ge.top&&!Ge.bottom,(Ge.left||Ge.right||Ge.top||Ge.bottom)&&(S.action={name:"resize",edges:Ge})}else{var tt=Me.axis!=="y"&&Pe.x>ie.right-Jr.defaultMargin,b=Me.axis!=="x"&&Pe.y>ie.bottom-Jr.defaultMargin;(tt||b)&&(S.action={name:"resize",axes:(tt?"x":"")+(b?"y":"")})}return!S.action&&void 0}}}},defaults:{square:!1,preserveAspectRatio:!1,axis:"xy",margin:NaN,edges:null,invert:"none"},cursors:null,getCursor:function(S){var x=S.edges,N=S.axis,W=S.name,ie=Jr.cursors,me=null;if(N)me=ie[W+N];else if(x){for(var Pe="",Me=0,Ge=["top","bottom","left","right"];Me<Ge.length;Me++){var ct=Ge[Me];x[ct]&&(Pe+=ct)}me=ie[Pe]}return me},filterEventType:function(S){return S.search("resize")===0},defaultMargin:null},ir=Jr,Ri={id:"actions",install:function(S){S.usePlugin(gn),S.usePlugin(ir),S.usePlugin(F),S.usePlugin(br)}},qn=0,bn={request:function(S){return Pn(S)},cancel:function(S){return Mn(S)},init:function(S){if(Pn=S.requestAnimationFrame,Mn=S.cancelAnimationFrame,!Pn)for(var x=["ms","moz","webkit","o"],N=0;N<x.length;N++){var W=x[N];Pn=S["".concat(W,"RequestAnimationFrame")],Mn=S["".concat(W,"CancelAnimationFrame")]||S["".concat(W,"CancelRequestAnimationFrame")]}Pn=Pn&&Pn.bind(S),Mn=Mn&&Mn.bind(S),Pn||(Pn=function(ie){var me=Date.now(),Pe=Math.max(0,16-(me-qn)),Me=S.setTimeout(function(){ie(me+Pe)},Pe);return qn=me+Pe,Me},Mn=function(ie){return clearTimeout(ie)})}},ur={defaults:{enabled:!1,margin:60,container:null,speed:300},now:Date.now,interaction:null,i:0,x:0,y:0,isScrolling:!1,prevTime:0,margin:0,speed:0,start:function(S){ur.isScrolling=!0,bn.cancel(ur.i),S.autoScroll=ur,ur.interaction=S,ur.prevTime=ur.now(),ur.i=bn.request(ur.scroll)},stop:function(){ur.isScrolling=!1,ur.interaction&&(ur.interaction.autoScroll=null),bn.cancel(ur.i)},scroll:function(){var S=ur.interaction,x=S.interactable,N=S.element,W=S.prepared.name,ie=x.options[W].autoScroll,me=Ln(ie.container,x,N),Pe=ur.now(),Me=(Pe-ur.prevTime)/1e3,Ge=ie.speed*Me;if(Ge>=1){var ct={x:ur.x*Ge,y:ur.y*Ge};if(ct.x||ct.y){var tt=Xr(me);I.window(me)?me.scrollBy(ct.x,ct.y):me&&(me.scrollLeft+=ct.x,me.scrollTop+=ct.y);var b=Xr(me),E={x:b.x-tt.x,y:b.y-tt.y};(E.x||E.y)&&x.fire({type:"autoscroll",target:N,interactable:x,delta:E,interaction:S,container:me})}ur.prevTime=Pe}ur.isScrolling&&(bn.cancel(ur.i),ur.i=bn.request(ur.scroll))},check:function(S,x){var N;return(N=S.options[x].autoScroll)==null?void 0:N.enabled},onInteractionMove:function(S){var x=S.interaction,N=S.pointer;if(x.interacting()&&ur.check(x.interactable,x.prepared.name))if(x.simulation)ur.x=ur.y=0;else{var W,ie,me,Pe,Me=x.interactable,Ge=x.element,ct=x.prepared.name,tt=Me.options[ct].autoScroll,b=Ln(tt.container,Me,Ge);if(I.window(b))Pe=N.clientX<ur.margin,W=N.clientY<ur.margin,ie=N.clientX>b.innerWidth-ur.margin,me=N.clientY>b.innerHeight-ur.margin;else{var E=re(b);Pe=N.clientX<E.left+ur.margin,W=N.clientY<E.top+ur.margin,ie=N.clientX>E.right-ur.margin,me=N.clientY>E.bottom-ur.margin}ur.x=ie?1:Pe?-1:0,ur.y=me?1:W?-1:0,ur.isScrolling||(ur.margin=tt.margin,ur.speed=tt.speed,ur.start(x))}}};function Ln(S,x,N){return(I.string(S)?nt(S,x,N):S)||T(N)}function Xr(S){return I.window(S)&&(S=window.document.body),{x:S.scrollLeft,y:S.scrollTop}}var Cn={id:"auto-scroll",install:function(S){var x=S.defaults,N=S.actions;S.autoScroll=ur,ur.now=function(){return S.now()},N.phaselessTypes.autoscroll=!0,x.perAction.autoScroll=ur.defaults},listeners:{"interactions:new":function(S){S.interaction.autoScroll=null},"interactions:destroy":function(S){S.interaction.autoScroll=null,ur.stop(),ur.interaction&&(ur.interaction=null)},"interactions:stop":ur.stop,"interactions:action-move":function(S){return ur.onInteractionMove(S)}}},Vi=Cn;function xn(S,x){var N=!1;return function(){return N||(w.console.warn(x),N=!0),S.apply(this,arguments)}}function Wn(S,x){return S.name=x.name,S.axis=x.axis,S.edges=x.edges,S}function zi(S){return I.bool(S)?(this.options.styleCursor=S,this):S===null?(delete this.options.styleCursor,this):this.options.styleCursor}function an(S){return I.func(S)?(this.options.actionChecker=S,this):S===null?(delete this.options.actionChecker,this):this.options.actionChecker}var oi={id:"auto-start/interactableMethods",install:function(S){var x=S.Interactable;x.prototype.getAction=function(N,W,ie,me){var Pe=function(Me,Ge,ct,tt,b){var E=Me.getRect(tt),R=Ge.buttons||{0:1,1:4,3:8,4:16}[Ge.button],V={action:null,interactable:Me,interaction:ct,element:tt,rect:E,buttons:R};return b.fire("auto-start:check",V),V.action}(this,W,ie,me,S);return this.options.actionChecker?this.options.actionChecker(N,W,Pe,this,me,ie):Pe},x.prototype.ignoreFrom=xn(function(N){return this._backCompatOption("ignoreFrom",N)},"Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue})."),x.prototype.allowFrom=xn(function(N){return this._backCompatOption("allowFrom",N)},"Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue})."),x.prototype.actionChecker=an,x.prototype.styleCursor=zi}};function Zn(S,x,N,W,ie){return x.testIgnoreAllow(x.options[S.name],N,W)&&x.options[S.name].enabled&&Ti(x,N,S,ie)?S:null}function mi(S,x,N,W,ie,me,Pe){for(var Me=0,Ge=W.length;Me<Ge;Me++){var ct=W[Me],tt=ie[Me],b=ct.getAction(x,N,S,tt);if(b){var E=Zn(b,ct,tt,me,Pe);if(E)return{action:E,interactable:ct,element:tt}}}return{action:null,interactable:null,element:null}}function $n(S,x,N,W,ie){var me=[],Pe=[],Me=W;function Ge(tt){me.push(tt),Pe.push(Me)}for(;I.element(Me);){me=[],Pe=[],ie.interactables.forEachMatch(Me,Ge);var ct=mi(S,x,N,me,Pe,W,ie);if(ct.action&&!ct.interactable.options[ct.action.name].manualStart)return ct;Me=G(Me)}return{action:null,interactable:null,element:null}}function kn(S,x,N){var W=x.action,ie=x.interactable,me=x.element;W=W||{name:null},S.interactable=ie,S.element=me,Wn(S.prepared,W),S.rect=ie&&W.name?ie.getRect(me):null,Wi(S,N),N.fire("autoStart:prepared",{interaction:S})}function Ti(S,x,N,W){var ie=S.options,me=ie[N.name].max,Pe=ie[N.name].maxPerElement,Me=W.autoStart.maxInteractions,Ge=0,ct=0,tt=0;if(!(me&&Pe&&Me))return!1;for(var b=0,E=W.interactions.list;b<E.length;b++){var R=E[b],V=R.prepared.name;if(R.interacting()&&(++Ge>=Me||R.interactable===S&&((ct+=V===N.name?1:0)>=me||R.element===x&&(tt++,V===N.name&&tt>=Pe))))return!1}return Me>0}function Kn(S,x){return I.number(S)?(x.autoStart.maxInteractions=S,this):x.autoStart.maxInteractions}function Qn(S,x,N){var W=N.autoStart.cursorElement;W&&W!==S&&(W.style.cursor=""),S.ownerDocument.documentElement.style.cursor=x,S.style.cursor=x,N.autoStart.cursorElement=x?S:null}function Wi(S,x){var N=S.interactable,W=S.element,ie=S.prepared;if(S.pointerType==="mouse"&&N&&N.options.styleCursor){var me="";if(ie.name){var Pe=N.options[ie.name].cursorChecker;me=I.func(Pe)?Pe(ie,N,W,S._interacting):x.actions.map[ie.name].getCursor(ie)}Qn(S.element,me||"",x)}else x.autoStart.cursorElement&&Qn(x.autoStart.cursorElement,"",x)}var yi={id:"auto-start/base",before:["actions"],install:function(S){var x=S.interactStatic,N=S.defaults;S.usePlugin(oi),N.base.actionChecker=null,N.base.styleCursor=!0,Re(N.perAction,{manualStart:!1,max:1/0,maxPerElement:1,allowFrom:null,ignoreFrom:null,mouseButtons:1}),x.maxInteractions=function(W){return Kn(W,S)},S.autoStart={maxInteractions:1/0,withinInteractionLimit:Ti,cursorElement:null}},listeners:{"interactions:down":function(S,x){var N=S.interaction,W=S.pointer,ie=S.event,me=S.eventTarget;N.interacting()||kn(N,$n(N,W,ie,me,x),x)},"interactions:move":function(S,x){(function(N,W){var ie=N.interaction,me=N.pointer,Pe=N.event,Me=N.eventTarget;ie.pointerType!=="mouse"||ie.pointerIsDown||ie.interacting()||kn(ie,$n(ie,me,Pe,Me,W),W)})(S,x),function(N,W){var ie=N.interaction;if(ie.pointerIsDown&&!ie.interacting()&&ie.pointerWasMoved&&ie.prepared.name){W.fire("autoStart:before-start",N);var me=ie.interactable,Pe=ie.prepared.name;Pe&&me&&(me.options[Pe].manualStart||!Ti(me,ie.element,ie.prepared,W)?ie.stop():(ie.start(ie.prepared,me,ie.element),Wi(ie,W)))}}(S,x)},"interactions:stop":function(S,x){var N=S.interaction,W=N.interactable;W&&W.options.styleCursor&&Qn(N.element,"",x)}},maxInteractions:Kn,withinInteractionLimit:Ti,validateAction:Zn},Er=yi,ms={id:"auto-start/dragAxis",listeners:{"autoStart:before-start":function(S,x){var N=S.interaction,W=S.eventTarget,ie=S.dx,me=S.dy;if(N.prepared.name==="drag"){var Pe=Math.abs(ie),Me=Math.abs(me),Ge=N.interactable.options.drag,ct=Ge.startAxis,tt=Pe>Me?"x":Pe<Me?"y":"xy";if(N.prepared.axis=Ge.lockAxis==="start"?tt[0]:Ge.lockAxis,tt!=="xy"&&ct!=="xy"&&ct!==tt){N.prepared.name=null;for(var b=W,E=function(V){if(V!==N.interactable){var te=N.interactable.options.drag;if(!te.manualStart&&V.testIgnoreAllow(te,b,W)){var ye=V.getAction(N.downPointer,N.downEvent,N,b);if(ye&&ye.name==="drag"&&function(Ee,De){if(!De)return!1;var st=De.options.drag.startAxis;return Ee==="xy"||st==="xy"||st===Ee}(tt,V)&&Er.validateAction(ye,V,b,W,x))return V}}};I.element(b);){var R=x.interactables.forEachMatch(b,E);if(R){N.prepared.name="drag",N.interactable=R,N.element=b;break}b=G(b)}}}}}};function Ki(S){var x=S.prepared&&S.prepared.name;if(!x)return null;var N=S.interactable.options;return N[x].hold||N[x].delay}var li={id:"auto-start/hold",install:function(S){var x=S.defaults;S.usePlugin(Er),x.perAction.hold=0,x.perAction.delay=0},listeners:{"interactions:new":function(S){S.interaction.autoStartHoldTimer=null},"autoStart:prepared":function(S){var x=S.interaction,N=Ki(x);N>0&&(x.autoStartHoldTimer=setTimeout(function(){x.start(x.prepared,x.interactable,x.element)},N))},"interactions:move":function(S){var x=S.interaction,N=S.duplicate;x.autoStartHoldTimer&&x.pointerWasMoved&&!N&&(clearTimeout(x.autoStartHoldTimer),x.autoStartHoldTimer=null)},"autoStart:before-start":function(S){var x=S.interaction;Ki(x)>0&&(x.prepared.name=null)}},getHoldDuration:Ki},Sn=li,ts={id:"auto-start",install:function(S){S.usePlugin(Er),S.usePlugin(Sn),S.usePlugin(ms)}},Ei=function(S){return/^(always|never|auto)$/.test(S)?(this.options.preventDefault=S,this):I.bool(S)?(this.options.preventDefault=S?"always":"never",this):this.options.preventDefault};function Ai(S){var x=S.interaction,N=S.event;x.interactable&&x.interactable.checkAndPreventDefault(N)}var Br={id:"core/interactablePreventDefault",install:function(S){var x=S.Interactable;x.prototype.preventDefault=Ei,x.prototype.checkAndPreventDefault=function(N){return function(W,ie,me){var Pe=W.options.preventDefault;if(Pe!=="never")if(Pe!=="always"){if(ie.events.supportsPassive&&/^touch(start|move)$/.test(me.type)){var Me=T(me.target).document,Ge=ie.getDocOptions(Me);if(!Ge||!Ge.events||Ge.events.passive!==!1)return}/^(mouse|pointer|touch)*(down|start)/i.test(me.type)||I.element(me.target)&&ee(me.target,"input,select,textarea,[contenteditable=true],[contenteditable=true] *")||me.preventDefault()}else me.preventDefault()}(this,S,N)},S.interactions.docEvents.push({type:"dragstart",listener:function(N){for(var W=0,ie=S.interactions.list;W<ie.length;W++){var me=ie[W];if(me.element&&(me.element===N.target||fe(me.element,N.target)))return void me.interactable.checkAndPreventDefault(N)}}})},listeners:["down","move","up","cancel"].reduce(function(S,x){return S["interactions:".concat(x)]=Ai,S},{})};function vn(S,x){if(x.phaselessTypes[S])return!0;for(var N in x.map)if(S.indexOf(N)===0&&S.substr(N.length)in x.phases)return!0;return!1}function Hn(S){var x={};for(var N in S){var W=S[N];I.plainObject(W)?x[N]=Hn(W):I.array(W)?x[N]=oe(W):x[N]=W}return x}var Gn=function(){function S(x){s(this,S),this.states=[],this.startOffset={left:0,right:0,top:0,bottom:0},this.startDelta=void 0,this.result=void 0,this.endResult=void 0,this.startEdges=void 0,this.edges=void 0,this.interaction=void 0,this.interaction=x,this.result=Bi(),this.edges={left:!1,right:!1,top:!1,bottom:!1}}return l(S,[{key:"start",value:function(x,N){var W,ie,me=x.phase,Pe=this.interaction,Me=function(ct){var tt=ct.interactable.options[ct.prepared.name],b=tt.modifiers;return b&&b.length?b:["snap","snapSize","snapEdges","restrict","restrictEdges","restrictSize"].map(function(E){var R=tt[E];return R&&R.enabled&&{options:R,methods:R._methods}}).filter(function(E){return!!E})}(Pe);this.prepareStates(Me),this.startEdges=Re({},Pe.edges),this.edges=Re({},this.startEdges),this.startOffset=(W=Pe.rect,ie=N,W?{left:ie.x-W.left,top:ie.y-W.top,right:W.right-ie.x,bottom:W.bottom-ie.y}:{left:0,top:0,right:0,bottom:0}),this.startDelta={x:0,y:0};var Ge=this.fillArg({phase:me,pageCoords:N,preEnd:!1});return this.result=Bi(),this.startAll(Ge),this.result=this.setAll(Ge)}},{key:"fillArg",value:function(x){var N=this.interaction;return x.interaction=N,x.interactable=N.interactable,x.element=N.element,x.rect||(x.rect=N.rect),x.edges||(x.edges=this.startEdges),x.startOffset=this.startOffset,x}},{key:"startAll",value:function(x){for(var N=0,W=this.states;N<W.length;N++){var ie=W[N];ie.methods.start&&(x.state=ie,ie.methods.start(x))}}},{key:"setAll",value:function(x){var N=x.phase,W=x.preEnd,ie=x.skipModifiers,me=x.rect,Pe=x.edges;x.coords=Re({},x.pageCoords),x.rect=Re({},me),x.edges=Re({},Pe);for(var Me=ie?this.states.slice(ie):this.states,Ge=Bi(x.coords,x.rect),ct=0;ct<Me.length;ct++){var tt,b=Me[ct],E=b.options,R=Re({},x.coords),V=null;(tt=b.methods)!=null&&tt.set&&this.shouldDo(E,W,N)&&(x.state=b,V=b.methods.set(x),ht(x.edges,x.rect,{x:x.coords.x-R.x,y:x.coords.y-R.y})),Ge.eventProps.push(V)}Re(this.edges,x.edges),Ge.delta.x=x.coords.x-x.pageCoords.x,Ge.delta.y=x.coords.y-x.pageCoords.y,Ge.rectDelta.left=x.rect.left-me.left,Ge.rectDelta.right=x.rect.right-me.right,Ge.rectDelta.top=x.rect.top-me.top,Ge.rectDelta.bottom=x.rect.bottom-me.bottom;var te=this.result.coords,ye=this.result.rect;if(te&&ye){var Ee=Ge.rect.left!==ye.left||Ge.rect.right!==ye.right||Ge.rect.top!==ye.top||Ge.rect.bottom!==ye.bottom;Ge.changed=Ee||te.x!==Ge.coords.x||te.y!==Ge.coords.y}return Ge}},{key:"applyToInteraction",value:function(x){var N=this.interaction,W=x.phase,ie=N.coords.cur,me=N.coords.start,Pe=this.result,Me=this.startDelta,Ge=Pe.delta;W==="start"&&Re(this.startDelta,Pe.delta);for(var ct=0,tt=[[me,Me],[ie,Ge]];ct<tt.length;ct++){var b=tt[ct],E=b[0],R=b[1];E.page.x+=R.x,E.page.y+=R.y,E.client.x+=R.x,E.client.y+=R.y}var V=this.result.rectDelta,te=x.rect||N.rect;te.left+=V.left,te.right+=V.right,te.top+=V.top,te.bottom+=V.bottom,te.width=te.right-te.left,te.height=te.bottom-te.top}},{key:"setAndApply",value:function(x){var N=this.interaction,W=x.phase,ie=x.preEnd,me=x.skipModifiers,Pe=this.setAll(this.fillArg({preEnd:ie,phase:W,pageCoords:x.modifiedCoords||N.coords.cur.page}));if(this.result=Pe,!Pe.changed&&(!me||me<this.states.length)&&N.interacting())return!1;if(x.modifiedCoords){var Me=N.coords.cur.page,Ge={x:x.modifiedCoords.x-Me.x,y:x.modifiedCoords.y-Me.y};Pe.coords.x+=Ge.x,Pe.coords.y+=Ge.y,Pe.delta.x+=Ge.x,Pe.delta.y+=Ge.y}this.applyToInteraction(x)}},{key:"beforeEnd",value:function(x){var N=x.interaction,W=x.event,ie=this.states;if(ie&&ie.length){for(var me=!1,Pe=0;Pe<ie.length;Pe++){var Me=ie[Pe];x.state=Me;var Ge=Me.options,ct=Me.methods,tt=ct.beforeEnd&&ct.beforeEnd(x);if(tt)return this.endResult=tt,!1;me=me||!me&&this.shouldDo(Ge,!0,x.phase,!0)}me&&N.move({event:W,preEnd:!0})}}},{key:"stop",value:function(x){var N=x.interaction;if(this.states&&this.states.length){var W=Re({states:this.states,interactable:N.interactable,element:N.element,rect:null},x);this.fillArg(W);for(var ie=0,me=this.states;ie<me.length;ie++){var Pe=me[ie];W.state=Pe,Pe.methods.stop&&Pe.methods.stop(W)}this.states=null,this.endResult=null}}},{key:"prepareStates",value:function(x){this.states=[];for(var N=0;N<x.length;N++){var W=x[N],ie=W.options,me=W.methods,Pe=W.name;this.states.push({options:ie,methods:me,index:N,name:Pe})}return this.states}},{key:"restoreInteractionCoords",value:function(x){var N=x.interaction,W=N.coords,ie=N.rect,me=N.modification;if(me.result){for(var Pe=me.startDelta,Me=me.result,Ge=Me.delta,ct=Me.rectDelta,tt=0,b=[[W.start,Pe],[W.cur,Ge]];tt<b.length;tt++){var E=b[tt],R=E[0],V=E[1];R.page.x-=V.x,R.page.y-=V.y,R.client.x-=V.x,R.client.y-=V.y}ie.left-=ct.left,ie.right-=ct.right,ie.top-=ct.top,ie.bottom-=ct.bottom}}},{key:"shouldDo",value:function(x,N,W,ie){return!(!x||x.enabled===!1||ie&&!x.endOnly||x.endOnly&&!N||W==="start"&&!x.setStart)}},{key:"copyFrom",value:function(x){this.startOffset=x.startOffset,this.startDelta=x.startDelta,this.startEdges=x.startEdges,this.edges=x.edges,this.states=x.states.map(function(N){return Hn(N)}),this.result=Bi(Re({},x.result.coords),Re({},x.result.rect))}},{key:"destroy",value:function(){for(var x in this)this[x]=null}}]),S}();function Bi(S,x){return{rect:x,coords:S,delta:{x:0,y:0},rectDelta:{left:0,right:0,top:0,bottom:0},eventProps:[],changed:!0}}function Fn(S,x){var N=S.defaults,W={start:S.start,set:S.set,beforeEnd:S.beforeEnd,stop:S.stop},ie=function(me){var Pe=me||{};for(var Me in Pe.enabled=Pe.enabled!==!1,N)Me in Pe||(Pe[Me]=N[Me]);var Ge={options:Pe,methods:W,name:x,enable:function(){return Pe.enabled=!0,Ge},disable:function(){return Pe.enabled=!1,Ge}};return Ge};return x&&typeof x=="string"&&(ie._defaults=N,ie._methods=W),ie}function ei(S){var x=S.iEvent,N=S.interaction.modification.result;N&&(x.modifiers=N.eventProps)}var rs={id:"modifiers/base",before:["actions"],install:function(S){S.defaults.perAction.modifiers=[]},listeners:{"interactions:new":function(S){var x=S.interaction;x.modification=new Gn(x)},"interactions:before-action-start":function(S){var x=S.interaction,N=S.interaction.modification;N.start(S,x.coords.start.page),x.edges=N.edges,N.applyToInteraction(S)},"interactions:before-action-move":function(S){var x=S.interaction,N=x.modification,W=N.setAndApply(S);return x.edges=N.edges,W},"interactions:before-action-end":function(S){var x=S.interaction,N=x.modification,W=N.beforeEnd(S);return x.edges=N.startEdges,W},"interactions:action-start":ei,"interactions:action-move":ei,"interactions:action-end":ei,"interactions:after-action-start":function(S){return S.interaction.modification.restoreInteractionCoords(S)},"interactions:after-action-move":function(S){return S.interaction.modification.restoreInteractionCoords(S)},"interactions:stop":function(S){return S.interaction.modification.stop(S)}}},ti=rs,ys={base:{preventDefault:"auto",deltaSource:"page"},perAction:{enabled:!1,origin:{x:0,y:0}},actions:{}},Yn=function(S){u(N,S);var x=_(N);function N(W,ie,me,Pe,Me,Ge,ct){var tt;s(this,N),(tt=x.call(this,W)).relatedTarget=null,tt.screenX=void 0,tt.screenY=void 0,tt.button=void 0,tt.buttons=void 0,tt.ctrlKey=void 0,tt.shiftKey=void 0,tt.altKey=void 0,tt.metaKey=void 0,tt.page=void 0,tt.client=void 0,tt.delta=void 0,tt.rect=void 0,tt.x0=void 0,tt.y0=void 0,tt.t0=void 0,tt.dt=void 0,tt.duration=void 0,tt.clientX0=void 0,tt.clientY0=void 0,tt.velocity=void 0,tt.speed=void 0,tt.swipe=void 0,tt.axes=void 0,tt.preEnd=void 0,Me=Me||W.element;var b=W.interactable,E=(b&&b.options||ys).deltaSource,R=Ot(b,Me,me),V=Pe==="start",te=Pe==="end",ye=V?y(tt):W.prevEvent,Ee=V?W.coords.start:te?{page:ye.page,client:ye.client,timeStamp:W.coords.cur.timeStamp}:W.coords.cur;return tt.page=Re({},Ee.page),tt.client=Re({},Ee.client),tt.rect=Re({},W.rect),tt.timeStamp=Ee.timeStamp,te||(tt.page.x-=R.x,tt.page.y-=R.y,tt.client.x-=R.x,tt.client.y-=R.y),tt.ctrlKey=ie.ctrlKey,tt.altKey=ie.altKey,tt.shiftKey=ie.shiftKey,tt.metaKey=ie.metaKey,tt.button=ie.button,tt.buttons=ie.buttons,tt.target=Me,tt.currentTarget=Me,tt.preEnd=Ge,tt.type=ct||me+(Pe||""),tt.interactable=b,tt.t0=V?W.pointers[W.pointers.length-1].downTime:ye.t0,tt.x0=W.coords.start.page.x-R.x,tt.y0=W.coords.start.page.y-R.y,tt.clientX0=W.coords.start.client.x-R.x,tt.clientY0=W.coords.start.client.y-R.y,tt.delta=V||te?{x:0,y:0}:{x:tt[E].x-ye[E].x,y:tt[E].y-ye[E].y},tt.dt=W.coords.delta.timeStamp,tt.duration=tt.timeStamp-tt.t0,tt.velocity=Re({},W.coords.velocity[E]),tt.speed=We(tt.velocity.x,tt.velocity.y),tt.swipe=te||Pe==="inertiastart"?tt.getSwipe():null,tt}return l(N,[{key:"getSwipe",value:function(){var W=this._interaction;if(W.prevEvent.speed<600||this.timeStamp-W.prevEvent.timeStamp>150)return null;var ie=180*Math.atan2(W.prevEvent.velocityY,W.prevEvent.velocityX)/Math.PI;ie<0&&(ie+=360);var me=112.5<=ie&&ie<247.5,Pe=202.5<=ie&&ie<337.5;return{up:Pe,down:!Pe&&22.5<=ie&&ie<157.5,left:me,right:!me&&(292.5<=ie||ie<67.5),angle:ie,speed:W.prevEvent.speed,velocity:{x:W.prevEvent.velocityX,y:W.prevEvent.velocityY}}}},{key:"preventDefault",value:function(){}},{key:"stopImmediatePropagation",value:function(){this.immediatePropagationStopped=this.propagationStopped=!0}},{key:"stopPropagation",value:function(){this.propagationStopped=!0}}]),N}(Qe);Object.defineProperties(Yn.prototype,{pageX:{get:function(){return this.page.x},set:function(S){this.page.x=S}},pageY:{get:function(){return this.page.y},set:function(S){this.page.y=S}},clientX:{get:function(){return this.client.x},set:function(S){this.client.x=S}},clientY:{get:function(){return this.client.y},set:function(S){this.client.y=S}},dx:{get:function(){return this.delta.x},set:function(S){this.delta.x=S}},dy:{get:function(){return this.delta.y},set:function(S){this.delta.y=S}},velocityX:{get:function(){return this.velocity.x},set:function(S){this.velocity.x=S}},velocityY:{get:function(){return this.velocity.y},set:function(S){this.velocity.y=S}}});var Lr=l(function S(x,N,W,ie,me){s(this,S),this.id=void 0,this.pointer=void 0,this.event=void 0,this.downTime=void 0,this.downTarget=void 0,this.id=x,this.pointer=N,this.event=W,this.downTime=ie,this.downTarget=me}),Os=function(S){return S.interactable="",S.element="",S.prepared="",S.pointerIsDown="",S.pointerWasMoved="",S._proxy="",S}({}),gs=function(S){return S.start="",S.move="",S.end="",S.stop="",S.interacting="",S}({}),Pi=0,In=function(){function S(x){var N=this,W=x.pointerType,ie=x.scopeFire;s(this,S),this.interactable=null,this.element=null,this.rect=null,this._rects=void 0,this.edges=null,this._scopeFire=void 0,this.prepared={name:null,axis:null,edges:null},this.pointerType=void 0,this.pointers=[],this.downEvent=null,this.downPointer={},this._latestPointer={pointer:null,event:null,eventTarget:null},this.prevEvent=null,this.pointerIsDown=!1,this.pointerWasMoved=!1,this._interacting=!1,this._ending=!1,this._stopped=!0,this._proxy=void 0,this.simulation=null,this.doMove=xn(function(tt){this.move(tt)},"The interaction.doMove() method has been renamed to interaction.move()"),this.coords={start:{page:{x:0,y:0},client:{x:0,y:0},timeStamp:0},prev:{page:{x:0,y:0},client:{x:0,y:0},timeStamp:0},cur:{page:{x:0,y:0},client:{x:0,y:0},timeStamp:0},delta:{page:{x:0,y:0},client:{x:0,y:0},timeStamp:0},velocity:{page:{x:0,y:0},client:{x:0,y:0},timeStamp:0}},this._id=Pi++,this._scopeFire=ie,this.pointerType=W;var me=this;this._proxy={};var Pe=function(tt){Object.defineProperty(N._proxy,tt,{get:function(){return me[tt]}})};for(var Me in Os)Pe(Me);var Ge=function(tt){Object.defineProperty(N._proxy,tt,{value:function(){return me[tt].apply(me,arguments)}})};for(var ct in gs)Ge(ct);this._scopeFire("interactions:new",{interaction:this})}return l(S,[{key:"pointerMoveTolerance",get:function(){return 1}},{key:"pointerDown",value:function(x,N,W){var ie=this.updatePointer(x,N,W,!0),me=this.pointers[ie];this._scopeFire("interactions:down",{pointer:x,event:N,eventTarget:W,pointerIndex:ie,pointerInfo:me,type:"down",interaction:this})}},{key:"start",value:function(x,N,W){return!(this.interacting()||!this.pointerIsDown||this.pointers.length<(x.name==="gesture"?2:1)||!N.options[x.name].enabled)&&(Wn(this.prepared,x),this.interactable=N,this.element=W,this.rect=N.getRect(W),this.edges=this.prepared.edges?Re({},this.prepared.edges):{left:!0,right:!0,top:!0,bottom:!0},this._stopped=!1,this._interacting=this._doPhase({interaction:this,event:this.downEvent,phase:"start"})&&!this._stopped,this._interacting)}},{key:"pointerMove",value:function(x,N,W){this.simulation||this.modification&&this.modification.endResult||this.updatePointer(x,N,W,!1);var ie,me,Pe=this.coords.cur.page.x===this.coords.prev.page.x&&this.coords.cur.page.y===this.coords.prev.page.y&&this.coords.cur.client.x===this.coords.prev.client.x&&this.coords.cur.client.y===this.coords.prev.client.y;this.pointerIsDown&&!this.pointerWasMoved&&(ie=this.coords.cur.client.x-this.coords.start.client.x,me=this.coords.cur.client.y-this.coords.start.client.y,this.pointerWasMoved=We(ie,me)>this.pointerMoveTolerance);var Me,Ge,ct,tt=this.getPointerIndex(x),b={pointer:x,pointerIndex:tt,pointerInfo:this.pointers[tt],event:N,type:"move",eventTarget:W,dx:ie,dy:me,duplicate:Pe,interaction:this};Pe||(Me=this.coords.velocity,Ge=this.coords.delta,ct=Math.max(Ge.timeStamp/1e3,.001),Me.page.x=Ge.page.x/ct,Me.page.y=Ge.page.y/ct,Me.client.x=Ge.client.x/ct,Me.client.y=Ge.client.y/ct,Me.timeStamp=ct),this._scopeFire("interactions:move",b),Pe||this.simulation||(this.interacting()&&(b.type=null,this.move(b)),this.pointerWasMoved&&Pt(this.coords.prev,this.coords.cur))}},{key:"move",value:function(x){x&&x.event||je(this.coords.delta),(x=Re({pointer:this._latestPointer.pointer,event:this._latestPointer.event,eventTarget:this._latestPointer.eventTarget,interaction:this},x||{})).phase="move",this._doPhase(x)}},{key:"pointerUp",value:function(x,N,W,ie){var me=this.getPointerIndex(x);me===-1&&(me=this.updatePointer(x,N,W,!1));var Pe=/cancel$/i.test(N.type)?"cancel":"up";this._scopeFire("interactions:".concat(Pe),{pointer:x,pointerIndex:me,pointerInfo:this.pointers[me],event:N,eventTarget:W,type:Pe,curEventTarget:ie,interaction:this}),this.simulation||this.end(N),this.removePointer(x,N)}},{key:"documentBlur",value:function(x){this.end(x),this._scopeFire("interactions:blur",{event:x,type:"blur",interaction:this})}},{key:"end",value:function(x){var N;this._ending=!0,x=x||this._latestPointer.event,this.interacting()&&(N=this._doPhase({event:x,interaction:this,phase:"end"})),this._ending=!1,N===!0&&this.stop()}},{key:"currentAction",value:function(){return this._interacting?this.prepared.name:null}},{key:"interacting",value:function(){return this._interacting}},{key:"stop",value:function(){this._scopeFire("interactions:stop",{interaction:this}),this.interactable=this.element=null,this._interacting=!1,this._stopped=!0,this.prepared.name=this.prevEvent=null}},{key:"getPointerIndex",value:function(x){var N=ce(x);return this.pointerType==="mouse"||this.pointerType==="pen"?this.pointers.length-1:Se(this.pointers,function(W){return W.id===N})}},{key:"getPointerInfo",value:function(x){return this.pointers[this.getPointerIndex(x)]}},{key:"updatePointer",value:function(x,N,W,ie){var me,Pe,Me,Ge=ce(x),ct=this.getPointerIndex(x),tt=this.pointers[ct];return ie=ie!==!1&&(ie||/(down|start)$/i.test(N.type)),tt?tt.pointer=x:(tt=new Lr(Ge,x,N,null,null),ct=this.pointers.length,this.pointers.push(tt)),K(this.coords.cur,this.pointers.map(function(b){return b.pointer}),this._now()),me=this.coords.delta,Pe=this.coords.prev,Me=this.coords.cur,me.page.x=Me.page.x-Pe.page.x,me.page.y=Me.page.y-Pe.page.y,me.client.x=Me.client.x-Pe.client.x,me.client.y=Me.client.y-Pe.client.y,me.timeStamp=Me.timeStamp-Pe.timeStamp,ie&&(this.pointerIsDown=!0,tt.downTime=this.coords.cur.timeStamp,tt.downTarget=W,Nt(this.downPointer,x),this.interacting()||(Pt(this.coords.start,this.coords.cur),Pt(this.coords.prev,this.coords.cur),this.downEvent=N,this.pointerWasMoved=!1)),this._updateLatestPointer(x,N,W),this._scopeFire("interactions:update-pointer",{pointer:x,event:N,eventTarget:W,down:ie,pointerInfo:tt,pointerIndex:ct,interaction:this}),ct}},{key:"removePointer",value:function(x,N){var W=this.getPointerIndex(x);if(W!==-1){var ie=this.pointers[W];this._scopeFire("interactions:remove-pointer",{pointer:x,event:N,eventTarget:null,pointerIndex:W,pointerInfo:ie,interaction:this}),this.pointers.splice(W,1),this.pointerIsDown=!1}}},{key:"_updateLatestPointer",value:function(x,N,W){this._latestPointer.pointer=x,this._latestPointer.event=N,this._latestPointer.eventTarget=W}},{key:"destroy",value:function(){this._latestPointer.pointer=null,this._latestPointer.event=null,this._latestPointer.eventTarget=null}},{key:"_createPreparedEvent",value:function(x,N,W,ie){return new Yn(this,x,this.prepared.name,N,this.element,W,ie)}},{key:"_fireEvent",value:function(x){var N;(N=this.interactable)==null||N.fire(x),(!this.prevEvent||x.timeStamp>=this.prevEvent.timeStamp)&&(this.prevEvent=x)}},{key:"_doPhase",value:function(x){var N=x.event,W=x.phase,ie=x.preEnd,me=x.type,Pe=this.rect;if(Pe&&W==="move"&&(ht(this.edges,Pe,this.coords.delta[this.interactable.options.deltaSource]),Pe.width=Pe.right-Pe.left,Pe.height=Pe.bottom-Pe.top),this._scopeFire("interactions:before-action-".concat(W),x)===!1)return!1;var Me=x.iEvent=this._createPreparedEvent(N,W,ie,me);return this._scopeFire("interactions:action-".concat(W),x),W==="start"&&(this.prevEvent=Me),this._fireEvent(Me),this._scopeFire("interactions:after-action-".concat(W),x),!0}},{key:"_now",value:function(){return Date.now()}}]),S}();function Ft(S){Ke(S.interaction)}function Ke(S){if(!function(N){return!(!N.offset.pending.x&&!N.offset.pending.y)}(S))return!1;var x=S.offset.pending;return Lt(S.coords.cur,x),Lt(S.coords.delta,x),ht(S.edges,S.rect,x),x.x=0,x.y=0,!0}function wt(S){var x=S.x,N=S.y;this.offset.pending.x+=x,this.offset.pending.y+=N,this.offset.total.x+=x,this.offset.total.y+=N}function Lt(S,x){var N=S.page,W=S.client,ie=x.x,me=x.y;N.x+=ie,N.y+=me,W.x+=ie,W.y+=me}gs.offsetBy="";var Xt={id:"offset",before:["modifiers","pointer-events","actions","inertia"],install:function(S){S.Interaction.prototype.offsetBy=wt},listeners:{"interactions:new":function(S){S.interaction.offset={total:{x:0,y:0},pending:{x:0,y:0}}},"interactions:update-pointer":function(S){return function(x){x.pointerIsDown&&(Lt(x.coords.cur,x.offset.total),x.offset.pending.x=0,x.offset.pending.y=0)}(S.interaction)},"interactions:before-action-start":Ft,"interactions:before-action-move":Ft,"interactions:before-action-end":function(S){var x=S.interaction;if(Ke(x))return x.move({offset:!0}),x.end(),!1},"interactions:stop":function(S){var x=S.interaction;x.offset.total.x=0,x.offset.total.y=0,x.offset.pending.x=0,x.offset.pending.y=0}}},Jt=Xt,lr=function(){function S(x){s(this,S),this.active=!1,this.isModified=!1,this.smoothEnd=!1,this.allowResume=!1,this.modification=void 0,this.modifierCount=0,this.modifierArg=void 0,this.startCoords=void 0,this.t0=0,this.v0=0,this.te=0,this.targetOffset=void 0,this.modifiedOffset=void 0,this.currentOffset=void 0,this.lambda_v0=0,this.one_ve_v0=0,this.timeout=void 0,this.interaction=void 0,this.interaction=x}return l(S,[{key:"start",value:function(x){var N=this.interaction,W=kr(N);if(!W||!W.enabled)return!1;var ie=N.coords.velocity.client,me=We(ie.x,ie.y),Pe=this.modification||(this.modification=new Gn(N));if(Pe.copyFrom(N.modification),this.t0=N._now(),this.allowResume=W.allowResume,this.v0=me,this.currentOffset={x:0,y:0},this.startCoords=N.coords.cur.page,this.modifierArg=Pe.fillArg({pageCoords:this.startCoords,preEnd:!0,phase:"inertiastart"}),this.t0-N.coords.cur.timeStamp<50&&me>W.minSpeed&&me>W.endSpeed)this.startInertia();else{if(Pe.result=Pe.setAll(this.modifierArg),!Pe.result.changed)return!1;this.startSmoothEnd()}return N.modification.result.rect=null,N.offsetBy(this.targetOffset),N._doPhase({interaction:N,event:x,phase:"inertiastart"}),N.offsetBy({x:-this.targetOffset.x,y:-this.targetOffset.y}),N.modification.result.rect=null,this.active=!0,N.simulation=this,!0}},{key:"startInertia",value:function(){var x=this,N=this.interaction.coords.velocity.client,W=kr(this.interaction),ie=W.resistance,me=-Math.log(W.endSpeed/this.v0)/ie;this.targetOffset={x:(N.x-me)/ie,y:(N.y-me)/ie},this.te=me,this.lambda_v0=ie/this.v0,this.one_ve_v0=1-W.endSpeed/this.v0;var Pe=this.modification,Me=this.modifierArg;Me.pageCoords={x:this.startCoords.x+this.targetOffset.x,y:this.startCoords.y+this.targetOffset.y},Pe.result=Pe.setAll(Me),Pe.result.changed&&(this.isModified=!0,this.modifiedOffset={x:this.targetOffset.x+Pe.result.delta.x,y:this.targetOffset.y+Pe.result.delta.y}),this.onNextFrame(function(){return x.inertiaTick()})}},{key:"startSmoothEnd",value:function(){var x=this;this.smoothEnd=!0,this.isModified=!0,this.targetOffset={x:this.modification.result.delta.x,y:this.modification.result.delta.y},this.onNextFrame(function(){return x.smoothEndTick()})}},{key:"onNextFrame",value:function(x){var N=this;this.timeout=bn.request(function(){N.active&&x()})}},{key:"inertiaTick",value:function(){var x,N,W,ie,me,Pe,Me,Ge=this,ct=this.interaction,tt=kr(ct).resistance,b=(ct._now()-this.t0)/1e3;if(b<this.te){var E,R=1-(Math.exp(-tt*b)-this.lambda_v0)/this.one_ve_v0;this.isModified?(x=0,N=0,W=this.targetOffset.x,ie=this.targetOffset.y,me=this.modifiedOffset.x,Pe=this.modifiedOffset.y,E={x:En(Me=R,x,W,me),y:En(Me,N,ie,Pe)}):E={x:this.targetOffset.x*R,y:this.targetOffset.y*R};var V={x:E.x-this.currentOffset.x,y:E.y-this.currentOffset.y};this.currentOffset.x+=V.x,this.currentOffset.y+=V.y,ct.offsetBy(V),ct.move(),this.onNextFrame(function(){return Ge.inertiaTick()})}else ct.offsetBy({x:this.modifiedOffset.x-this.currentOffset.x,y:this.modifiedOffset.y-this.currentOffset.y}),this.end()}},{key:"smoothEndTick",value:function(){var x=this,N=this.interaction,W=N._now()-this.t0,ie=kr(N).smoothEndDuration;if(W<ie){var me={x:on(W,0,this.targetOffset.x,ie),y:on(W,0,this.targetOffset.y,ie)},Pe={x:me.x-this.currentOffset.x,y:me.y-this.currentOffset.y};this.currentOffset.x+=Pe.x,this.currentOffset.y+=Pe.y,N.offsetBy(Pe),N.move({skipModifiers:this.modifierCount}),this.onNextFrame(function(){return x.smoothEndTick()})}else N.offsetBy({x:this.targetOffset.x-this.currentOffset.x,y:this.targetOffset.y-this.currentOffset.y}),this.end()}},{key:"resume",value:function(x){var N=x.pointer,W=x.event,ie=x.eventTarget,me=this.interaction;me.offsetBy({x:-this.currentOffset.x,y:-this.currentOffset.y}),me.updatePointer(N,W,ie,!0),me._doPhase({interaction:me,event:W,phase:"resume"}),Pt(me.coords.prev,me.coords.cur),this.stop()}},{key:"end",value:function(){this.interaction.move(),this.interaction.end(),this.stop()}},{key:"stop",value:function(){this.active=this.smoothEnd=!1,this.interaction.simulation=null,bn.cancel(this.timeout)}}]),S}();function kr(S){var x=S.interactable,N=S.prepared;return x&&x.options&&N.name&&x.options[N.name].inertia}var Gr={id:"inertia",before:["modifiers","actions"],install:function(S){var x=S.defaults;S.usePlugin(Jt),S.usePlugin(ti),S.actions.phases.inertiastart=!0,S.actions.phases.resume=!0,x.perAction.inertia={enabled:!1,resistance:10,minSpeed:100,endSpeed:10,allowResume:!0,smoothEndDuration:300}},listeners:{"interactions:new":function(S){var x=S.interaction;x.inertia=new lr(x)},"interactions:before-action-end":function(S){var x=S.interaction,N=S.event;return(!x._interacting||x.simulation||!x.inertia.start(N))&&null},"interactions:down":function(S){var x=S.interaction,N=S.eventTarget,W=x.inertia;if(W.active)for(var ie=N;I.element(ie);){if(ie===x.element){W.resume(S);break}ie=G(ie)}},"interactions:stop":function(S){var x=S.interaction.inertia;x.active&&x.stop()},"interactions:before-action-resume":function(S){var x=S.interaction.modification;x.stop(S),x.start(S,S.interaction.coords.cur.page),x.applyToInteraction(S)},"interactions:before-action-inertiastart":function(S){return S.interaction.modification.setAndApply(S)},"interactions:action-resume":ei,"interactions:action-inertiastart":ei,"interactions:after-action-inertiastart":function(S){return S.interaction.modification.restoreInteractionCoords(S)},"interactions:after-action-resume":function(S){return S.interaction.modification.restoreInteractionCoords(S)}}};function En(S,x,N,W){var ie=1-S;return ie*ie*x+2*ie*S*N+S*S*W}function on(S,x,N,W){return-N*(S/=W)*(S-2)+x}var bs=Gr;function Zr(S,x){for(var N=0;N<x.length;N++){var W=x[N];if(S.immediatePropagationStopped)break;W(S)}}var Ns=function(){function S(x){s(this,S),this.options=void 0,this.types={},this.propagationStopped=!1,this.immediatePropagationStopped=!1,this.global=void 0,this.options=Re({},x||{})}return l(S,[{key:"fire",value:function(x){var N,W=this.global;(N=this.types[x.type])&&Zr(x,N),!x.propagationStopped&&W&&(N=W[x.type])&&Zr(x,N)}},{key:"on",value:function(x,N){var W=et(x,N);for(x in W)this.types[x]=pt(this.types[x]||[],W[x])}},{key:"off",value:function(x,N){var W=et(x,N);for(x in W){var ie=this.types[x];if(ie&&ie.length)for(var me=0,Pe=W[x];me<Pe.length;me++){var Me=Pe[me],Ge=ie.indexOf(Me);Ge!==-1&&ie.splice(Ge,1)}}}},{key:"getRect",value:function(x){return null}}]),S}(),Xs=function(){function S(x){s(this,S),this.currentTarget=void 0,this.originalEvent=void 0,this.type=void 0,this.originalEvent=x,Nt(this,x)}return l(S,[{key:"preventOriginalDefault",value:function(){this.originalEvent.preventDefault()}},{key:"stopPropagation",value:function(){this.originalEvent.stopPropagation()}},{key:"stopImmediatePropagation",value:function(){this.originalEvent.stopImmediatePropagation()}}]),S}();function Zt(S){return I.object(S)?{capture:!!S.capture,passive:!!S.passive}:{capture:!!S,passive:!1}}function Li(S,x){return S===x||(typeof S=="boolean"?!!x.capture===S&&!x.passive:!!S.capture==!!x.capture&&!!S.passive==!!x.passive)}var Ds={id:"events",install:function(S){var x,N=[],W={},ie=[],me={add:Pe,remove:Me,addDelegate:function(tt,b,E,R,V){var te=Zt(V);if(!W[E]){W[E]=[];for(var ye=0;ye<ie.length;ye++){var Ee=ie[ye];Pe(Ee,E,Ge),Pe(Ee,E,ct,!0)}}var De=W[E],st=Q(De,function(yt){return yt.selector===tt&&yt.context===b});st||(st={selector:tt,context:b,listeners:[]},De.push(st)),st.listeners.push({func:R,options:te})},removeDelegate:function(tt,b,E,R,V){var te,ye=Zt(V),Ee=W[E],De=!1;if(Ee)for(te=Ee.length-1;te>=0;te--){var st=Ee[te];if(st.selector===tt&&st.context===b){for(var yt=st.listeners,ot=yt.length-1;ot>=0;ot--){var at=yt[ot];if(at.func===R&&Li(at.options,ye)){yt.splice(ot,1),yt.length||(Ee.splice(te,1),Me(b,E,Ge),Me(b,E,ct,!0)),De=!0;break}}if(De)break}}},delegateListener:Ge,delegateUseCapture:ct,delegatedEvents:W,documents:ie,targets:N,supportsOptions:!1,supportsPassive:!1};function Pe(tt,b,E,R){if(tt.addEventListener){var V=Zt(R),te=Q(N,function(ye){return ye.eventTarget===tt});te||(te={eventTarget:tt,events:{}},N.push(te)),te.events[b]||(te.events[b]=[]),Q(te.events[b],function(ye){return ye.func===E&&Li(ye.options,V)})||(tt.addEventListener(b,E,me.supportsOptions?V:V.capture),te.events[b].push({func:E,options:V}))}}function Me(tt,b,E,R){if(tt.addEventListener&&tt.removeEventListener){var V=Se(N,function(ft){return ft.eventTarget===tt}),te=N[V];if(te&&te.events)if(b!=="all"){var ye=!1,Ee=te.events[b];if(Ee){if(E==="all"){for(var De=Ee.length-1;De>=0;De--){var st=Ee[De];Me(tt,b,st.func,st.options)}return}for(var yt=Zt(R),ot=0;ot<Ee.length;ot++){var at=Ee[ot];if(at.func===E&&Li(at.options,yt)){tt.removeEventListener(b,E,me.supportsOptions?yt:yt.capture),Ee.splice(ot,1),Ee.length===0&&(delete te.events[b],ye=!0);break}}}ye&&!Object.keys(te.events).length&&N.splice(V,1)}else for(b in te.events)te.events.hasOwnProperty(b)&&Me(tt,b,"all")}}function Ge(tt,b){for(var E=Zt(b),R=new Xs(tt),V=W[tt.type],te=it(tt)[0],ye=te;I.element(ye);){for(var Ee=0;Ee<V.length;Ee++){var De=V[Ee],st=De.selector,yt=De.context;if(ee(ye,st)&&fe(yt,te)&&fe(yt,ye)){var ot=De.listeners;R.currentTarget=ye;for(var at=0;at<ot.length;at++){var ft=ot[at];Li(ft.options,E)&&ft.func(R)}}}ye=G(ye)}}function ct(tt){return Ge(tt,!0)}return(x=S.document)==null||x.createElement("div").addEventListener("test",null,{get capture(){return me.supportsOptions=!0},get passive(){return me.supportsPassive=!0}}),S.events=me,me}},Ms={methodOrder:["simulationResume","mouseOrPen","hasPointer","idle"],search:function(S){for(var x=0,N=Ms.methodOrder;x<N.length;x++){var W=N[x],ie=Ms[W](S);if(ie)return ie}return null},simulationResume:function(S){var x=S.pointerType,N=S.eventType,W=S.eventTarget,ie=S.scope;if(!/down|start/i.test(N))return null;for(var me=0,Pe=ie.interactions.list;me<Pe.length;me++){var Me=Pe[me],Ge=W;if(Me.simulation&&Me.simulation.allowResume&&Me.pointerType===x)for(;Ge;){if(Ge===Me.element)return Me;Ge=G(Ge)}}return null},mouseOrPen:function(S){var x,N=S.pointerId,W=S.pointerType,ie=S.eventType,me=S.scope;if(W!=="mouse"&&W!=="pen")return null;for(var Pe=0,Me=me.interactions.list;Pe<Me.length;Pe++){var Ge=Me[Pe];if(Ge.pointerType===W){if(Ge.simulation&&!xa(Ge,N))continue;if(Ge.interacting())return Ge;x||(x=Ge)}}if(x)return x;for(var ct=0,tt=me.interactions.list;ct<tt.length;ct++){var b=tt[ct];if(!(b.pointerType!==W||/down/i.test(ie)&&b.simulation))return b}return null},hasPointer:function(S){for(var x=S.pointerId,N=0,W=S.scope.interactions.list;N<W.length;N++){var ie=W[N];if(xa(ie,x))return ie}return null},idle:function(S){for(var x=S.pointerType,N=0,W=S.scope.interactions.list;N<W.length;N++){var ie=W[N];if(ie.pointers.length===1){var me=ie.interactable;if(me&&(!me.options.gesture||!me.options.gesture.enabled))continue}else if(ie.pointers.length>=2)continue;if(!ie.interacting()&&x===ie.pointerType)return ie}return null}};function xa(S,x){return S.pointers.some(function(N){return N.id===x})}var vs=Ms,Zs=["pointerDown","pointerMove","pointerUp","updatePointer","removePointer","windowBlur"];function Qs(S,x){return function(N){var W=x.interactions.list,ie=Ie(N),me=it(N),Pe=me[0],Me=me[1],Ge=[];if(/^touch/.test(N.type)){x.prevTouchTime=x.now();for(var ct=0,tt=N.changedTouches;ct<tt.length;ct++){var b=tt[ct],E={pointer:b,pointerId:ce(b),pointerType:ie,eventType:N.type,eventTarget:Pe,curEventTarget:Me,scope:x},R=_s(E);Ge.push([E.pointer,E.eventTarget,E.curEventTarget,R])}}else{var V=!1;if(!xe.supportsPointerEvent&&/mouse/.test(N.type)){for(var te=0;te<W.length&&!V;te++)V=W[te].pointerType!=="mouse"&&W[te].pointerIsDown;V=V||x.now()-x.prevTouchTime<500||N.timeStamp===0}if(!V){var ye={pointer:N,pointerId:ce(N),pointerType:ie,eventType:N.type,curEventTarget:Me,eventTarget:Pe,scope:x},Ee=_s(ye);Ge.push([ye.pointer,ye.eventTarget,ye.curEventTarget,Ee])}}for(var De=0;De<Ge.length;De++){var st=Ge[De],yt=st[0],ot=st[1],at=st[2];st[3][S](yt,N,ot,at)}}}function _s(S){var x=S.pointerType,N=S.scope,W={interaction:vs.search(S),searchDetails:S};return N.fire("interactions:find",W),W.interaction||N.interactions.new({pointerType:x})}function Hi(S,x){var N=S.doc,W=S.scope,ie=S.options,me=W.interactions.docEvents,Pe=W.events,Me=Pe[x];for(var Ge in W.browser.isIOS&&!ie.events&&(ie.events={passive:!1}),Pe.delegatedEvents)Me(N,Ge,Pe.delegateListener),Me(N,Ge,Pe.delegateUseCapture,!0);for(var ct=ie&&ie.events,tt=0;tt<me.length;tt++){var b=me[tt];Me(N,b.type,b.listener,ct)}}var Rs={id:"core/interactions",install:function(S){for(var x={},N=0;N<Zs.length;N++){var W=Zs[N];x[W]=Qs(W,S)}var ie,me=xe.pEventTypes;function Pe(){for(var Me=0,Ge=S.interactions.list;Me<Ge.length;Me++){var ct=Ge[Me];if(ct.pointerIsDown&&ct.pointerType==="touch"&&!ct._interacting)for(var tt=function(){var R=E[b];S.documents.some(function(V){return fe(V.doc,R.downTarget)})||ct.removePointer(R.pointer,R.event)},b=0,E=ct.pointers;b<E.length;b++)tt()}}(ie=Ae.PointerEvent?[{type:me.down,listener:Pe},{type:me.down,listener:x.pointerDown},{type:me.move,listener:x.pointerMove},{type:me.up,listener:x.pointerUp},{type:me.cancel,listener:x.pointerUp}]:[{type:"mousedown",listener:x.pointerDown},{type:"mousemove",listener:x.pointerMove},{type:"mouseup",listener:x.pointerUp},{type:"touchstart",listener:Pe},{type:"touchstart",listener:x.pointerDown},{type:"touchmove",listener:x.pointerMove},{type:"touchend",listener:x.pointerUp},{type:"touchcancel",listener:x.pointerUp}]).push({type:"blur",listener:function(Me){for(var Ge=0,ct=S.interactions.list;Ge<ct.length;Ge++)ct[Ge].documentBlur(Me)}}),S.prevTouchTime=0,S.Interaction=function(Me){u(ct,Me);var Ge=_(ct);function ct(){return s(this,ct),Ge.apply(this,arguments)}return l(ct,[{key:"pointerMoveTolerance",get:function(){return S.interactions.pointerMoveTolerance},set:function(tt){S.interactions.pointerMoveTolerance=tt}},{key:"_now",value:function(){return S.now()}}]),ct}(In),S.interactions={list:[],new:function(Me){Me.scopeFire=function(ct,tt){return S.fire(ct,tt)};var Ge=new S.Interaction(Me);return S.interactions.list.push(Ge),Ge},listeners:x,docEvents:ie,pointerMoveTolerance:1},S.usePlugin(Br)},listeners:{"scope:add-document":function(S){return Hi(S,"add")},"scope:remove-document":function(S){return Hi(S,"remove")},"interactable:unset":function(S,x){for(var N=S.interactable,W=x.interactions.list.length-1;W>=0;W--){var ie=x.interactions.list[W];ie.interactable===N&&(ie.stop(),x.fire("interactions:destroy",{interaction:ie}),ie.destroy(),x.interactions.list.length>2&&x.interactions.list.splice(W,1))}}},onDocSignal:Hi,doOnInteractions:Qs,methodNames:Zs},Ka=Rs,Fi=function(S){return S[S.On=0]="On",S[S.Off=1]="Off",S}(Fi||{}),Sa=function(){function S(x,N,W,ie){s(this,S),this.target=void 0,this.options=void 0,this._actions=void 0,this.events=new Ns,this._context=void 0,this._win=void 0,this._doc=void 0,this._scopeEvents=void 0,this._actions=N.actions,this.target=x,this._context=N.context||W,this._win=T(Le(x)?this._context:x),this._doc=this._win.document,this._scopeEvents=ie,this.set(N)}return l(S,[{key:"_defaults",get:function(){return{base:{},perAction:{},actions:{}}}},{key:"setOnEvents",value:function(x,N){return I.func(N.onstart)&&this.on("".concat(x,"start"),N.onstart),I.func(N.onmove)&&this.on("".concat(x,"move"),N.onmove),I.func(N.onend)&&this.on("".concat(x,"end"),N.onend),I.func(N.oninertiastart)&&this.on("".concat(x,"inertiastart"),N.oninertiastart),this}},{key:"updatePerActionListeners",value:function(x,N,W){var ie,me=this,Pe=(ie=this._actions.map[x])==null?void 0:ie.filterEventType,Me=function(Ge){return(Pe==null||Pe(Ge))&&vn(Ge,me._actions)};(I.array(N)||I.object(N))&&this._onOff(Fi.Off,x,N,void 0,Me),(I.array(W)||I.object(W))&&this._onOff(Fi.On,x,W,void 0,Me)}},{key:"setPerAction",value:function(x,N){var W=this._defaults;for(var ie in N){var me=ie,Pe=this.options[x],Me=N[me];me==="listeners"&&this.updatePerActionListeners(x,Pe.listeners,Me),I.array(Me)?Pe[me]=oe(Me):I.plainObject(Me)?(Pe[me]=Re(Pe[me]||{},Hn(Me)),I.object(W.perAction[me])&&"enabled"in W.perAction[me]&&(Pe[me].enabled=Me.enabled!==!1)):I.bool(Me)&&I.object(W.perAction[me])?Pe[me].enabled=Me:Pe[me]=Me}}},{key:"getRect",value:function(x){return x=x||(I.element(this.target)?this.target:null),I.string(this.target)&&(x=x||this._context.querySelector(this.target)),Ce(x)}},{key:"rectChecker",value:function(x){var N=this;return I.func(x)?(this.getRect=function(W){var ie=Re({},x.call(N,W));return"width"in ie||(ie.width=ie.right-ie.left,ie.height=ie.bottom-ie.top),ie},this):x===null?(delete this.getRect,this):this.getRect}},{key:"_backCompatOption",value:function(x,N){if(Le(N)||I.object(N)){for(var W in this.options[x]=N,this._actions.map)this.options[W][x]=N;return this}return this.options[x]}},{key:"origin",value:function(x){return this._backCompatOption("origin",x)}},{key:"deltaSource",value:function(x){return x==="page"||x==="client"?(this.options.deltaSource=x,this):this.options.deltaSource}},{key:"getAllElements",value:function(){var x=this.target;return I.string(x)?Array.from(this._context.querySelectorAll(x)):I.func(x)&&x.getAllElements?x.getAllElements():I.element(x)?[x]:[]}},{key:"context",value:function(){return this._context}},{key:"inContext",value:function(x){return this._context===x.ownerDocument||fe(this._context,x)}},{key:"testIgnoreAllow",value:function(x,N,W){return!this.testIgnore(x.ignoreFrom,N,W)&&this.testAllow(x.allowFrom,N,W)}},{key:"testAllow",value:function(x,N,W){return!x||!!I.element(W)&&(I.string(x)?Z(W,x,N):!!I.element(x)&&fe(x,W))}},{key:"testIgnore",value:function(x,N,W){return!(!x||!I.element(W))&&(I.string(x)?Z(W,x,N):!!I.element(x)&&fe(x,W))}},{key:"fire",value:function(x){return this.events.fire(x),this}},{key:"_onOff",value:function(x,N,W,ie,me){I.object(N)&&!I.array(N)&&(ie=W,W=null);var Pe=et(N,W,me);for(var Me in Pe){Me==="wheel"&&(Me=xe.wheelEvent);for(var Ge=0,ct=Pe[Me];Ge<ct.length;Ge++){var tt=ct[Ge];vn(Me,this._actions)?this.events[x===Fi.On?"on":"off"](Me,tt):I.string(this.target)?this._scopeEvents[x===Fi.On?"addDelegate":"removeDelegate"](this.target,this._context,Me,tt,ie):this._scopeEvents[x===Fi.On?"add":"remove"](this.target,Me,tt,ie)}}return this}},{key:"on",value:function(x,N,W){return this._onOff(Fi.On,x,N,W)}},{key:"off",value:function(x,N,W){return this._onOff(Fi.Off,x,N,W)}},{key:"set",value:function(x){var N=this._defaults;for(var W in I.object(x)||(x={}),this.options=Hn(N.base),this._actions.methodDict){var ie=W,me=this._actions.methodDict[ie];this.options[ie]={},this.setPerAction(ie,Re(Re({},N.perAction),N.actions[ie])),this[me](x[ie])}for(var Pe in x)Pe!=="getRect"?I.func(this[Pe])&&this[Pe](x[Pe]):this.rectChecker(x.getRect);return this}},{key:"unset",value:function(){if(I.string(this.target))for(var x in this._scopeEvents.delegatedEvents)for(var N=this._scopeEvents.delegatedEvents[x],W=N.length-1;W>=0;W--){var ie=N[W],me=ie.selector,Pe=ie.context,Me=ie.listeners;me===this.target&&Pe===this._context&&N.splice(W,1);for(var Ge=Me.length-1;Ge>=0;Ge--)this._scopeEvents.removeDelegate(this.target,this._context,x,Me[Ge][0],Me[Ge][1])}else this._scopeEvents.remove(this.target,"all")}}]),S}(),Bs=function(){function S(x){var N=this;s(this,S),this.list=[],this.selectorMap={},this.scope=void 0,this.scope=x,x.addListeners({"interactable:unset":function(W){var ie=W.interactable,me=ie.target,Pe=I.string(me)?N.selectorMap[me]:me[N.scope.id],Me=Se(Pe,function(Ge){return Ge===ie});Pe.splice(Me,1)}})}return l(S,[{key:"new",value:function(x,N){N=Re(N||{},{actions:this.scope.actions});var W=new this.scope.Interactable(x,N,this.scope.document,this.scope.events);return this.scope.addDocument(W._doc),this.list.push(W),I.string(x)?(this.selectorMap[x]||(this.selectorMap[x]=[]),this.selectorMap[x].push(W)):(W.target[this.scope.id]||Object.defineProperty(x,this.scope.id,{value:[],configurable:!0}),x[this.scope.id].push(W)),this.scope.fire("interactable:new",{target:x,options:N,interactable:W,win:this.scope._win}),W}},{key:"getExisting",value:function(x,N){var W=N&&N.context||this.scope.document,ie=I.string(x),me=ie?this.selectorMap[x]:x[this.scope.id];if(me)return Q(me,function(Pe){return Pe._context===W&&(ie||Pe.inContext(x))})}},{key:"forEachMatch",value:function(x,N){for(var W=0,ie=this.list;W<ie.length;W++){var me=ie[W],Pe=void 0;if((I.string(me.target)?I.element(x)&&ee(x,me.target):x===me.target)&&me.inContext(x)&&(Pe=N(me)),Pe!==void 0)return Pe}}}]),S}(),ea=function(){function S(){var x=this;s(this,S),this.id="__interact_scope_".concat(Math.floor(100*Math.random())),this.isInitialized=!1,this.listenerMaps=[],this.browser=xe,this.defaults=Hn(ys),this.Eventable=Ns,this.actions={map:{},phases:{start:!0,move:!0,end:!0},methodDict:{},phaselessTypes:{}},this.interactStatic=function(W){var ie=function me(Pe,Me){var Ge=W.interactables.getExisting(Pe,Me);return Ge||((Ge=W.interactables.new(Pe,Me)).events.global=me.globalEvents),Ge};return ie.getPointerAverage=$e,ie.getTouchBBox=X,ie.getTouchDistance=M,ie.getTouchAngle=q,ie.getElementRect=Ce,ie.getElementClientRect=re,ie.matchesSelector=ee,ie.closest=pe,ie.globalEvents={},ie.version="1.10.28",ie.scope=W,ie.use=function(me,Pe){return this.scope.usePlugin(me,Pe),this},ie.isSet=function(me,Pe){return!!this.scope.interactables.get(me,Pe&&Pe.context)},ie.on=xn(function(me,Pe,Me){if(I.string(me)&&me.search(" ")!==-1&&(me=me.trim().split(/ +/)),I.array(me)){for(var Ge=0,ct=me;Ge<ct.length;Ge++){var tt=ct[Ge];this.on(tt,Pe,Me)}return this}if(I.object(me)){for(var b in me)this.on(b,me[b],Pe);return this}return vn(me,this.scope.actions)?this.globalEvents[me]?this.globalEvents[me].push(Pe):this.globalEvents[me]=[Pe]:this.scope.events.add(this.scope.document,me,Pe,{options:Me}),this},"The interact.on() method is being deprecated"),ie.off=xn(function(me,Pe,Me){if(I.string(me)&&me.search(" ")!==-1&&(me=me.trim().split(/ +/)),I.array(me)){for(var Ge=0,ct=me;Ge<ct.length;Ge++){var tt=ct[Ge];this.off(tt,Pe,Me)}return this}if(I.object(me)){for(var b in me)this.off(b,me[b],Pe);return this}var E;return vn(me,this.scope.actions)?me in this.globalEvents&&(E=this.globalEvents[me].indexOf(Pe))!==-1&&this.globalEvents[me].splice(E,1):this.scope.events.remove(this.scope.document,me,Pe,Me),this},"The interact.off() method is being deprecated"),ie.debug=function(){return this.scope},ie.supportsTouch=function(){return xe.supportsTouch},ie.supportsPointerEvent=function(){return xe.supportsPointerEvent},ie.stop=function(){for(var me=0,Pe=this.scope.interactions.list;me<Pe.length;me++)Pe[me].stop();return this},ie.pointerMoveTolerance=function(me){return I.number(me)?(this.scope.interactions.pointerMoveTolerance=me,this):this.scope.interactions.pointerMoveTolerance},ie.addDocument=function(me,Pe){this.scope.addDocument(me,Pe)},ie.removeDocument=function(me){this.scope.removeDocument(me)},ie}(this),this.InteractEvent=Yn,this.Interactable=void 0,this.interactables=new Bs(this),this._win=void 0,this.document=void 0,this.window=void 0,this.documents=[],this._plugins={list:[],map:{}},this.onWindowUnload=function(W){return x.removeDocument(W.target)};var N=this;this.Interactable=function(W){u(me,W);var ie=_(me);function me(){return s(this,me),ie.apply(this,arguments)}return l(me,[{key:"_defaults",get:function(){return N.defaults}},{key:"set",value:function(Pe){return k(d(me.prototype),"set",this).call(this,Pe),N.fire("interactable:set",{options:Pe,interactable:this}),this}},{key:"unset",value:function(){k(d(me.prototype),"unset",this).call(this);var Pe=N.interactables.list.indexOf(this);Pe<0||(N.interactables.list.splice(Pe,1),N.fire("interactable:unset",{interactable:this}))}}]),me}(Sa)}return l(S,[{key:"addListeners",value:function(x,N){this.listenerMaps.push({id:N,map:x})}},{key:"fire",value:function(x,N){for(var W=0,ie=this.listenerMaps;W<ie.length;W++){var me=ie[W].map[x];if(me&&me(N,this,x)===!1)return!1}}},{key:"init",value:function(x){return this.isInitialized?this:function(N,W){return N.isInitialized=!0,I.window(W)&&C(W),Ae.init(W),xe.init(W),bn.init(W),N.window=W,N.document=W.document,N.usePlugin(Ka),N.usePlugin(Ds),N}(this,x)}},{key:"pluginIsInstalled",value:function(x){var N=x.id;return N?!!this._plugins.map[N]:this._plugins.list.indexOf(x)!==-1}},{key:"usePlugin",value:function(x,N){if(!this.isInitialized)return this;if(this.pluginIsInstalled(x))return this;if(x.id&&(this._plugins.map[x.id]=x),this._plugins.list.push(x),x.install&&x.install(this,N),x.listeners&&x.before){for(var W=0,ie=this.listenerMaps.length,me=x.before.reduce(function(Me,Ge){return Me[Ge]=!0,Me[Ls(Ge)]=!0,Me},{});W<ie;W++){var Pe=this.listenerMaps[W].id;if(Pe&&(me[Pe]||me[Ls(Pe)]))break}this.listenerMaps.splice(W,0,{id:x.id,map:x.listeners})}else x.listeners&&this.listenerMaps.push({id:x.id,map:x.listeners});return this}},{key:"addDocument",value:function(x,N){if(this.getDocIndex(x)!==-1)return!1;var W=T(x);N=N?Re({},N):{},this.documents.push({doc:x,options:N}),this.events.documents.push(x),x!==this.document&&this.events.add(W,"unload",this.onWindowUnload),this.fire("scope:add-document",{doc:x,window:W,scope:this,options:N})}},{key:"removeDocument",value:function(x){var N=this.getDocIndex(x),W=T(x),ie=this.documents[N].options;this.events.remove(W,"unload",this.onWindowUnload),this.documents.splice(N,1),this.events.documents.splice(N,1),this.fire("scope:remove-document",{doc:x,window:W,scope:this,options:ie})}},{key:"getDocIndex",value:function(x){for(var N=0;N<this.documents.length;N++)if(this.documents[N].doc===x)return N;return-1}},{key:"getDocOptions",value:function(x){var N=this.getDocIndex(x);return N===-1?null:this.documents[N].options}},{key:"now",value:function(){return(this.window.Date||Date).now()}}]),S}();function Ls(S){return S&&S.replace(/\/.*$/,"")}var xs=new ea,On=xs.interactStatic,ns=typeof globalThis<"u"?globalThis:window;xs.init(ns);var wa=Object.freeze({__proto__:null,edgeTarget:function(){},elements:function(){},grid:function(S){var x=[["x","y"],["left","top"],["right","bottom"],["width","height"]].filter(function(W){var ie=W[0],me=W[1];return ie in S||me in S}),N=function(W,ie){for(var me=S.range,Pe=S.limits,Me=Pe===void 0?{left:-1/0,right:1/0,top:-1/0,bottom:1/0}:Pe,Ge=S.offset,ct=Ge===void 0?{x:0,y:0}:Ge,tt={range:me,grid:S,x:null,y:null},b=0;b<x.length;b++){var E=x[b],R=E[0],V=E[1],te=Math.round((W-ct.x)/S[R]),ye=Math.round((ie-ct.y)/S[V]);tt[R]=Math.max(Me.left,Math.min(Me.right,te*S[R]+ct.x)),tt[V]=Math.max(Me.top,Math.min(Me.bottom,ye*S[V]+ct.y))}return tt};return N.grid=S,N.coordFields=x,N}}),Ha={id:"snappers",install:function(S){var x=S.interactStatic;x.snappers=Re(x.snappers||{},wa),x.createSnapGrid=x.snappers.grid}},ji=Ha,Ss={start:function(S){var x=S.state,N=S.rect,W=S.edges,ie=S.pageCoords,me=x.options,Pe=me.ratio,Me=me.enabled,Ge=x.options,ct=Ge.equalDelta,tt=Ge.modifiers;Pe==="preserve"&&(Pe=N.width/N.height),x.startCoords=Re({},ie),x.startRect=Re({},N),x.ratio=Pe,x.equalDelta=ct;var b=x.linkedEdges={top:W.top||W.left&&!W.bottom,left:W.left||W.top&&!W.right,bottom:W.bottom||W.right&&!W.top,right:W.right||W.bottom&&!W.left};if(x.xIsPrimaryAxis=!(!W.left&&!W.right),x.equalDelta){var E=(b.left?1:-1)*(b.top?1:-1);x.edgeSign={x:E,y:E}}else x.edgeSign={x:b.left?-1:1,y:b.top?-1:1};if(Me!==!1&&Re(W,b),tt!=null&&tt.length){var R=new Gn(S.interaction);R.copyFrom(S.interaction.modification),R.prepareStates(tt),x.subModification=R,R.startAll(n({},S))}},set:function(S){var x=S.state,N=S.rect,W=S.coords,ie=x.linkedEdges,me=Re({},W),Pe=x.equalDelta?ta:Fs;if(Re(S.edges,ie),Pe(x,x.xIsPrimaryAxis,W,N),!x.subModification)return null;var Me=Re({},N);ht(ie,Me,{x:W.x-me.x,y:W.y-me.y});var Ge=x.subModification.setAll(n(n({},S),{},{rect:Me,edges:ie,pageCoords:W,prevCoords:W,prevRect:Me})),ct=Ge.delta;return Ge.changed&&(Pe(x,Math.abs(ct.x)>Math.abs(ct.y),Ge.coords,Ge.rect),Re(W,Ge.coords)),Ge.eventProps},defaults:{ratio:"preserve",equalDelta:!1,modifiers:[],enabled:!1}};function ta(S,x,N){var W=S.startCoords,ie=S.edgeSign;x?N.y=W.y+(N.x-W.x)*ie.y:N.x=W.x+(N.y-W.y)*ie.x}function Fs(S,x,N,W){var ie=S.startRect,me=S.startCoords,Pe=S.ratio,Me=S.edgeSign;if(x){var Ge=W.width/Pe;N.y=me.y+(Ge-ie.height)*Me.y}else{var ct=W.height*Pe;N.x=me.x+(ct-ie.width)*Me.x}}var ra=Fn(Ss,"aspectRatio"),js=function(){};js._defaults={};var An=js;function ci(S,x,N){return I.func(S)?ut(S,x.interactable,x.element,[N.x,N.y,x]):ut(S,x.interactable,x.element)}var ri={start:function(S){var x=S.rect,N=S.startOffset,W=S.state,ie=S.interaction,me=S.pageCoords,Pe=W.options,Me=Pe.elementRect,Ge=Re({left:0,top:0,right:0,bottom:0},Pe.offset||{});if(x&&Me){var ct=ci(Pe.restriction,ie,me);if(ct){var tt=ct.right-ct.left-x.width,b=ct.bottom-ct.top-x.height;tt<0&&(Ge.left+=tt,Ge.right+=tt),b<0&&(Ge.top+=b,Ge.bottom+=b)}Ge.left+=N.left-x.width*Me.left,Ge.top+=N.top-x.height*Me.top,Ge.right+=N.right-x.width*(1-Me.right),Ge.bottom+=N.bottom-x.height*(1-Me.bottom)}W.offset=Ge},set:function(S){var x=S.coords,N=S.interaction,W=S.state,ie=W.options,me=W.offset,Pe=ci(ie.restriction,N,x);if(Pe){var Me=function(Ge){return!Ge||"left"in Ge&&"top"in Ge||((Ge=Re({},Ge)).left=Ge.x||0,Ge.top=Ge.y||0,Ge.right=Ge.right||Ge.left+Ge.width,Ge.bottom=Ge.bottom||Ge.top+Ge.height),Ge}(Pe);x.x=Math.max(Math.min(Me.right-me.right,x.x),Me.left+me.left),x.y=Math.max(Math.min(Me.bottom-me.bottom,x.y),Me.top+me.top)}},defaults:{restriction:null,elementRect:null,offset:null,endOnly:!1,enabled:!1}},na=Fn(ri,"restrict"),ws={top:1/0,left:1/0,bottom:-1/0,right:-1/0},se={top:-1/0,left:-1/0,bottom:1/0,right:1/0};function p(S,x){for(var N=0,W=["top","left","bottom","right"];N<W.length;N++){var ie=W[N];ie in S||(S[ie]=x[ie])}return S}var o={noInner:ws,noOuter:se,start:function(S){var x,N=S.interaction,W=S.startOffset,ie=S.state,me=ie.options;me&&(x=_t(ci(me.offset,N,N.coords.start.page))),x=x||{x:0,y:0},ie.offset={top:x.y+W.top,left:x.x+W.left,bottom:x.y-W.bottom,right:x.x-W.right}},set:function(S){var x=S.coords,N=S.edges,W=S.interaction,ie=S.state,me=ie.offset,Pe=ie.options;if(N){var Me=Re({},x),Ge=ci(Pe.inner,W,Me)||{},ct=ci(Pe.outer,W,Me)||{};p(Ge,ws),p(ct,se),N.top?x.y=Math.min(Math.max(ct.top+me.top,Me.y),Ge.top+me.top):N.bottom&&(x.y=Math.max(Math.min(ct.bottom+me.bottom,Me.y),Ge.bottom+me.bottom)),N.left?x.x=Math.min(Math.max(ct.left+me.left,Me.x),Ge.left+me.left):N.right&&(x.x=Math.max(Math.min(ct.right+me.right,Me.x),Ge.right+me.right))}},defaults:{inner:null,outer:null,offset:null,endOnly:!1,enabled:!1}},f=Fn(o,"restrictEdges"),g=Re({get elementRect(){return{top:0,left:0,bottom:1,right:1}},set elementRect(S){}},ri.defaults),D=Fn({start:ri.start,set:ri.set,defaults:g},"restrictRect"),ue={width:-1/0,height:-1/0},we={width:1/0,height:1/0},qe=Fn({start:function(S){return o.start(S)},set:function(S){var x=S.interaction,N=S.state,W=S.rect,ie=S.edges,me=N.options;if(ie){var Pe=kt(ci(me.min,x,S.coords))||ue,Me=kt(ci(me.max,x,S.coords))||we;N.options={endOnly:me.endOnly,inner:Re({},o.noInner),outer:Re({},o.noOuter)},ie.top?(N.options.inner.top=W.bottom-Pe.height,N.options.outer.top=W.bottom-Me.height):ie.bottom&&(N.options.inner.bottom=W.top+Pe.height,N.options.outer.bottom=W.top+Me.height),ie.left?(N.options.inner.left=W.right-Pe.width,N.options.outer.left=W.right-Me.width):ie.right&&(N.options.inner.right=W.left+Pe.width,N.options.outer.right=W.left+Me.width),o.set(S),N.options=me}},defaults:{min:null,max:null,endOnly:!1,enabled:!1}},"restrictSize"),Ze={start:function(S){var x,N=S.interaction,W=S.interactable,ie=S.element,me=S.rect,Pe=S.state,Me=S.startOffset,Ge=Pe.options,ct=Ge.offsetWithOrigin?function(E){var R=E.interaction.element,V=_t(ut(E.state.options.origin,null,null,[R])),te=V||Ot(E.interactable,R,E.interaction.prepared.name);return te}(S):{x:0,y:0};if(Ge.offset==="startCoords")x={x:N.coords.start.page.x,y:N.coords.start.page.y};else{var tt=ut(Ge.offset,W,ie,[N]);(x=_t(tt)||{x:0,y:0}).x+=ct.x,x.y+=ct.y}var b=Ge.relativePoints;Pe.offsets=me&&b&&b.length?b.map(function(E,R){return{index:R,relativePoint:E,x:Me.left-me.width*E.x+x.x,y:Me.top-me.height*E.y+x.y}}):[{index:0,relativePoint:null,x:x.x,y:x.y}]},set:function(S){var x=S.interaction,N=S.coords,W=S.state,ie=W.options,me=W.offsets,Pe=Ot(x.interactable,x.element,x.prepared.name),Me=Re({},N),Ge=[];ie.offsetWithOrigin||(Me.x-=Pe.x,Me.y-=Pe.y);for(var ct=0,tt=me;ct<tt.length;ct++)for(var b=tt[ct],E=Me.x-b.x,R=Me.y-b.y,V=0,te=ie.targets.length;V<te;V++){var ye=ie.targets[V],Ee=void 0;(Ee=I.func(ye)?ye(E,R,x._proxy,b,V):ye)&&Ge.push({x:(I.number(Ee.x)?Ee.x:E)+b.x,y:(I.number(Ee.y)?Ee.y:R)+b.y,range:I.number(Ee.range)?Ee.range:ie.range,source:ye,index:V,offset:b})}for(var De={target:null,inRange:!1,distance:0,range:0,delta:{x:0,y:0}},st=0;st<Ge.length;st++){var yt=Ge[st],ot=yt.range,at=yt.x-Me.x,ft=yt.y-Me.y,mt=We(at,ft),gt=mt<=ot;ot===1/0&&De.inRange&&De.range!==1/0&&(gt=!1),De.target&&!(gt?De.inRange&&ot!==1/0?mt/ot<De.distance/De.range:ot===1/0&&De.range!==1/0||mt<De.distance:!De.inRange&&mt<De.distance)||(De.target=yt,De.distance=mt,De.range=ot,De.inRange=gt,De.delta.x=at,De.delta.y=ft)}return De.inRange&&(N.x=De.target.x,N.y=De.target.y),W.closest=De,De},defaults:{range:1/0,targets:null,offset:null,offsetWithOrigin:!0,origin:null,relativePoints:null,endOnly:!1,enabled:!1}},lt=Fn(Ze,"snap"),It={start:function(S){var x=S.state,N=S.edges,W=x.options;if(!N)return null;S.state={options:{targets:null,relativePoints:[{x:N.left?0:1,y:N.top?0:1}],offset:W.offset||"self",origin:{x:0,y:0},range:W.range}},x.targetFields=x.targetFields||[["width","height"],["x","y"]],Ze.start(S),x.offsets=S.state.offsets,S.state=x},set:function(S){var x=S.interaction,N=S.state,W=S.coords,ie=N.options,me=N.offsets,Pe={x:W.x-me[0].x,y:W.y-me[0].y};N.options=Re({},ie),N.options.targets=[];for(var Me=0,Ge=ie.targets||[];Me<Ge.length;Me++){var ct=Ge[Me],tt=void 0;if(tt=I.func(ct)?ct(Pe.x,Pe.y,x):ct){for(var b=0,E=N.targetFields;b<E.length;b++){var R=E[b],V=R[0],te=R[1];if(V in tt||te in tt){tt.x=tt[V],tt.y=tt[te];break}}N.options.targets.push(tt)}}var ye=Ze.set(S);return N.options=ie,ye},defaults:{range:1/0,targets:null,offset:null,endOnly:!1,enabled:!1}},jt=Fn(It,"snapSize"),zt={aspectRatio:ra,restrictEdges:f,restrict:na,restrictRect:D,restrictSize:qe,snapEdges:Fn({start:function(S){var x=S.edges;return x?(S.state.targetFields=S.state.targetFields||[[x.left?"left":"right",x.top?"top":"bottom"]],It.start(S)):null},set:It.set,defaults:Re(Hn(It.defaults),{targets:void 0,range:void 0,offset:{x:0,y:0}})},"snapEdges"),snap:lt,snapSize:jt,spring:An,avoid:An,transform:An,rubberband:An},Qt={id:"modifiers",install:function(S){var x=S.interactStatic;for(var N in S.usePlugin(ti),S.usePlugin(ji),x.modifiers=zt,zt){var W=zt[N],ie=W._defaults,me=W._methods;ie._methods=me,S.defaults.perAction[N]=ie}}},Dr=Qt,nn=function(S){u(N,S);var x=_(N);function N(W,ie,me,Pe,Me,Ge){var ct;if(s(this,N),Nt(y(ct=x.call(this,Me)),me),me!==ie&&Nt(y(ct),ie),ct.timeStamp=Ge,ct.originalEvent=me,ct.type=W,ct.pointerId=ce(ie),ct.pointerType=Ie(ie),ct.target=Pe,ct.currentTarget=null,W==="tap"){var tt=Me.getPointerIndex(ie);ct.dt=ct.timeStamp-Me.pointers[tt].downTime;var b=ct.timeStamp-Me.tapTime;ct.double=!!Me.prevTap&&Me.prevTap.type!=="doubletap"&&Me.prevTap.target===ct.target&&b<500}else W==="doubletap"&&(ct.dt=ie.timeStamp-Me.tapTime,ct.double=!0);return ct}return l(N,[{key:"_subtractOrigin",value:function(W){var ie=W.x,me=W.y;return this.pageX-=ie,this.pageY-=me,this.clientX-=ie,this.clientY-=me,this}},{key:"_addOrigin",value:function(W){var ie=W.x,me=W.y;return this.pageX+=ie,this.pageY+=me,this.clientX+=ie,this.clientY+=me,this}},{key:"preventDefault",value:function(){this.originalEvent.preventDefault()}}]),N}(Qe),gr={id:"pointer-events/base",before:["inertia","modifiers","auto-start","actions"],install:function(S){S.pointerEvents=gr,S.defaults.actions.pointerEvents=gr.defaults,Re(S.actions.phaselessTypes,gr.types)},listeners:{"interactions:new":function(S){var x=S.interaction;x.prevTap=null,x.tapTime=0},"interactions:update-pointer":function(S){var x=S.down,N=S.pointerInfo;!x&&N.hold||(N.hold={duration:1/0,timeout:null})},"interactions:move":function(S,x){var N=S.interaction,W=S.pointer,ie=S.event,me=S.eventTarget;S.duplicate||N.pointerIsDown&&!N.pointerWasMoved||(N.pointerIsDown&&ui(S),Fr({interaction:N,pointer:W,event:ie,eventTarget:me,type:"move"},x))},"interactions:down":function(S,x){(function(N,W){for(var ie=N.interaction,me=N.pointer,Pe=N.event,Me=N.eventTarget,Ge=N.pointerIndex,ct=ie.pointers[Ge].hold,tt=ze(Me),b={interaction:ie,pointer:me,event:Pe,eventTarget:Me,type:"hold",targets:[],path:tt,node:null},E=0;E<tt.length;E++){var R=tt[E];b.node=R,W.fire("pointerEvents:collect-targets",b)}if(b.targets.length){for(var V=1/0,te=0,ye=b.targets;te<ye.length;te++){var Ee=ye[te].eventable.options.holdDuration;Ee<V&&(V=Ee)}ct.duration=V,ct.timeout=setTimeout(function(){Fr({interaction:ie,eventTarget:Me,pointer:me,event:Pe,type:"hold"},W)},V)}})(S,x),Fr(S,x)},"interactions:up":function(S,x){ui(S),Fr(S,x),function(N,W){var ie=N.interaction,me=N.pointer,Pe=N.event,Me=N.eventTarget;ie.pointerWasMoved||Fr({interaction:ie,eventTarget:Me,pointer:me,event:Pe,type:"tap"},W)}(S,x)},"interactions:cancel":function(S,x){ui(S),Fr(S,x)}},PointerEvent:nn,fire:Fr,collectEventTargets:Ci,defaults:{holdDuration:600,ignoreFrom:null,allowFrom:null,origin:{x:0,y:0}},types:{down:!0,move:!0,up:!0,cancel:!0,tap:!0,doubletap:!0,hold:!0}};function Fr(S,x){var N=S.interaction,W=S.pointer,ie=S.event,me=S.eventTarget,Pe=S.type,Me=S.targets,Ge=Me===void 0?Ci(S,x):Me,ct=new nn(Pe,W,ie,me,N,x.now());x.fire("pointerEvents:new",{pointerEvent:ct});for(var tt={interaction:N,pointer:W,event:ie,eventTarget:me,targets:Ge,type:Pe,pointerEvent:ct},b=0;b<Ge.length;b++){var E=Ge[b];for(var R in E.props||{})ct[R]=E.props[R];var V=Ot(E.eventable,E.node);if(ct._subtractOrigin(V),ct.eventable=E.eventable,ct.currentTarget=E.node,E.eventable.fire(ct),ct._addOrigin(V),ct.immediatePropagationStopped||ct.propagationStopped&&b+1<Ge.length&&Ge[b+1].node!==ct.currentTarget)break}if(x.fire("pointerEvents:fired",tt),Pe==="tap"){var te=ct.double?Fr({interaction:N,pointer:W,event:ie,eventTarget:me,type:"doubletap"},x):ct;N.prevTap=te,N.tapTime=te.timeStamp}return ct}function Ci(S,x){var N=S.interaction,W=S.pointer,ie=S.event,me=S.eventTarget,Pe=S.type,Me=N.getPointerIndex(W),Ge=N.pointers[Me];if(Pe==="tap"&&(N.pointerWasMoved||!Ge||Ge.downTarget!==me))return[];for(var ct=ze(me),tt={interaction:N,pointer:W,event:ie,eventTarget:me,type:Pe,path:ct,targets:[],node:null},b=0;b<ct.length;b++){var E=ct[b];tt.node=E,x.fire("pointerEvents:collect-targets",tt)}return Pe==="hold"&&(tt.targets=tt.targets.filter(function(R){var V,te;return R.eventable.options.holdDuration===((V=N.pointers[Me])==null||(te=V.hold)==null?void 0:te.duration)})),tt.targets}function ui(S){var x=S.interaction,N=S.pointerIndex,W=x.pointers[N].hold;W&&W.timeout&&(clearTimeout(W.timeout),W.timeout=null)}var Ta=Object.freeze({__proto__:null,default:gr});function ia(S){var x=S.interaction;x.holdIntervalHandle&&(clearInterval(x.holdIntervalHandle),x.holdIntervalHandle=null)}var qs={id:"pointer-events/holdRepeat",install:function(S){S.usePlugin(gr);var x=S.pointerEvents;x.defaults.holdRepeatInterval=0,x.types.holdrepeat=S.actions.phaselessTypes.holdrepeat=!0},listeners:["move","up","cancel","endall"].reduce(function(S,x){return S["pointerEvents:".concat(x)]=ia,S},{"pointerEvents:new":function(S){var x=S.pointerEvent;x.type==="hold"&&(x.count=(x.count||0)+1)},"pointerEvents:fired":function(S,x){var N=S.interaction,W=S.pointerEvent,ie=S.eventTarget,me=S.targets;if(W.type==="hold"&&me.length){var Pe=me[0].eventable.options.holdRepeatInterval;Pe<=0||(N.holdIntervalHandle=setTimeout(function(){x.pointerEvents.fire({interaction:N,eventTarget:ie,type:"hold",pointer:W,event:W},x)},Pe))}}})},sa=qs,aa={id:"pointer-events/interactableTargets",install:function(S){var x=S.Interactable;x.prototype.pointerEvents=function(W){return Re(this.events.options,W),this};var N=x.prototype._backCompatOption;x.prototype._backCompatOption=function(W,ie){var me=N.call(this,W,ie);return me===this&&(this.events.options[W]=ie),me}},listeners:{"pointerEvents:collect-targets":function(S,x){var N=S.targets,W=S.node,ie=S.type,me=S.eventTarget;x.interactables.forEachMatch(W,function(Pe){var Me=Pe.events,Ge=Me.options;Me.types[ie]&&Me.types[ie].length&&Pe.testIgnoreAllow(Ge,W,me)&&N.push({node:W,eventable:Me,props:{interactable:Pe}})})},"interactable:new":function(S){var x=S.interactable;x.events.getRect=function(N){return x.getRect(N)}},"interactable:set":function(S,x){var N=S.interactable,W=S.options;Re(N.events.options,x.pointerEvents.defaults),Re(N.events.options,W.pointerEvents||{})}}},Ea=aa,Aa={id:"pointer-events",install:function(S){S.usePlugin(Ta),S.usePlugin(sa),S.usePlugin(Ea)}},Pa=Aa,Ts={id:"reflow",install:function(S){var x=S.Interactable;S.actions.phases.reflow=!0,x.prototype.reflow=function(N){return function(W,ie,me){for(var Pe=W.getAllElements(),Me=me.window.Promise,Ge=Me?[]:null,ct=function(){var b=Pe[tt],E=W.getRect(b);if(!E)return 1;var R,V=Q(me.interactions.list,function(Ee){return Ee.interacting()&&Ee.interactable===W&&Ee.element===b&&Ee.prepared.name===ie.name});if(V)V.move(),Ge&&(R=V._reflowPromise||new Me(function(Ee){V._reflowResolve=Ee}));else{var te=kt(E),ye=function(Ee){return{coords:Ee,get page(){return this.coords.page},get client(){return this.coords.client},get timeStamp(){return this.coords.timeStamp},get pageX(){return this.coords.page.x},get pageY(){return this.coords.page.y},get clientX(){return this.coords.client.x},get clientY(){return this.coords.client.y},get pointerId(){return this.coords.pointerId},get target(){return this.coords.target},get type(){return this.coords.type},get pointerType(){return this.coords.pointerType},get buttons(){return this.coords.buttons},preventDefault:function(){}}}({page:{x:te.x,y:te.y},client:{x:te.x,y:te.y},timeStamp:me.now()});R=function(Ee,De,st,yt,ot){var at=Ee.interactions.new({pointerType:"reflow"}),ft={interaction:at,event:ot,pointer:ot,eventTarget:st,phase:"reflow"};at.interactable=De,at.element=st,at.prevEvent=ot,at.updatePointer(ot,ot,st,!0),je(at.coords.delta),Wn(at.prepared,yt),at._doPhase(ft);var mt=Ee.window,gt=mt.Promise,bt=gt?new gt(function(xt){at._reflowResolve=xt}):void 0;return at._reflowPromise=bt,at.start(yt,De,st),at._interacting?(at.move(ft),at.end(ot)):(at.stop(),at._reflowResolve()),at.removePointer(ot,ot),bt}(me,W,b,ie,ye)}Ge&&Ge.push(R)},tt=0;tt<Pe.length&&!ct();tt++);return Ge&&Me.all(Ge).then(function(){return W})}(this,N,S)}},listeners:{"interactions:stop":function(S,x){var N=S.interaction;N.pointerType==="reflow"&&(N._reflowResolve&&N._reflowResolve(),function(W,ie){W.splice(W.indexOf(ie),1)}(x.interactions.list,N))}}},gi=Ts;if(On.use(Br),On.use(Jt),On.use(Pa),On.use(bs),On.use(Dr),On.use(ts),On.use(Ri),On.use(Vi),On.use(gi),On.default=On,i(t)==="object"&&t)try{t.exports=On}catch{}return On.default=On,On})}(vf,vf.exports);var G5=vf.exports;const _o=Wg(G5),Y5=ar("WindowInteractionController");class J5{constructor(e,r){this._state={isDragging:!1,isResizing:!1,interactionMode:"none"},this._isEnabled=!1,this._draggable=!0,this._resizable=!0,this._ghostDragOffset={x:0,y:0},this._cachedMargin=20,this._boundOnKeydown=n=>this._handleKeydown(n),this._host=e,this._draggable=(r==null?void 0:r.draggable)??!0,this._resizable=(r==null?void 0:r.resizable)??!0,this.value={state:this._state,actions:{enable:()=>this._enable(),disable:()=>this._disable(),enterMoveMode:()=>this._enterMoveMode(),enterResizeMode:()=>this._enterResizeMode(),exitInteractionMode:()=>this._exitInteractionMode()}}}setConfig(e){this._draggable=e.draggable??!0,this._resizable=e.resizable??!0,Y5.debug("setConfig:",{draggable:this._draggable,resizable:this._resizable}),this._windowElement&&_o(this._windowElement).unset(),this._titleBarElement&&_o(this._titleBarElement).unset(),this._isEnabled&&this._initInteractions()}get draggable(){return this._draggable}get resizable(){return this._resizable}bindElements(e,r){this._windowElement=e,this._titleBarElement=r,this._initInteractions()}hostConnected(){}hostDisconnected(){this._destroyGhostElement(),this.destroy()}destroy(){this._windowElement&&_o(this._windowElement).unset(),this._titleBarElement&&(this._titleBarElement.removeEventListener("keydown",this._boundOnKeydown),_o(this._titleBarElement).unset()),this._destroyGhostElement(),this._isEnabled=!1}_enable(){!this._windowElement||!this._titleBarElement||(this._isEnabled=!0,this._initInteractions())}_disable(){this._isEnabled=!1,this._windowElement&&_o(this._windowElement).unset(),this._titleBarElement&&(this._titleBarElement.removeEventListener("keydown",this._boundOnKeydown),_o(this._titleBarElement).unset())}_initInteractions(){!this._isEnabled||!this._windowElement||!this._titleBarElement||(this._initDrag(),this._initResize(),this._initKeyboard())}_initDrag(){!this._titleBarElement||!this._draggable||_o(this._titleBarElement).draggable({listeners:{start:()=>this._onDragStart(),move:e=>this._onDragMove(e),end:()=>this._onDragEnd()},inertia:!1})}_initResize(){if(!this._windowElement||!this._resizable)return;const e=this._getMinSize(),r=this._getMargin();_o(this._windowElement).resizable({edges:{top:!0,right:!0,bottom:!0,left:!0},listeners:{start:()=>this._onResizeStart(),move:n=>this._onResizeMove(n),end:()=>this._onResizeEnd()},modifiers:[_o.modifiers.restrictSize({min:e,max:{width:window.innerWidth-2*r,height:window.innerHeight-2*r}})],inertia:!1})}_initKeyboard(){this._titleBarElement&&(this._titleBarElement.removeEventListener("keydown",this._boundOnKeydown),this._titleBarElement.addEventListener("keydown",this._boundOnKeydown))}_handleKeydown(e){var r;if(e.key==="Enter"||e.key===" "){e.preventDefault(),this._enterMoveMode();return}if(this._state.interactionMode==="move"){const n=e.shiftKey?20:10;let i=0,s=0;switch(e.key){case"ArrowUp":s=-n;break;case"ArrowDown":s=n;break;case"ArrowLeft":i=-n;break;case"ArrowRight":i=n;break;case"Escape":e.preventDefault(),this._exitInteractionMode();return;default:return}e.preventDefault();const a=this._windowElement;if(!a)return;const l=a.getBoundingClientRect(),c=this._getMargin(),u=Math.max(c,Math.min(l.left+i,window.innerWidth-l.width-c)),d=Math.max(c,Math.min(l.top+s,window.innerHeight-l.height-c));(r=this.onPositionChange)==null||r.call(this,u,d)}}_enterMoveMode(){var e;this._state={...this._state,interactionMode:"move"},(e=this._titleBarElement)==null||e.setAttribute("aria-grabbed","true"),this._host.requestUpdate()}_enterResizeMode(){this._state={...this._state,interactionMode:"resize"},this._host.requestUpdate()}_exitInteractionMode(){var e;this._state={...this._state,interactionMode:"none"},(e=this._titleBarElement)==null||e.setAttribute("aria-grabbed","false"),this._host.requestUpdate()}_onDragStart(){var e;this._state={...this._state,isDragging:!0},(e=this._windowElement)==null||e.classList.add("dragging"),this._cachedMargin=this._getMargin(),this._createGhostElement(),this._ghostDragOffset={x:0,y:0},requestAnimationFrame(()=>this._host.requestUpdate())}_onDragMove(e){if(!this._windowElement||!this._ghostElement||!this._ghostStartRect)return;const r=this._cachedMargin,n={width:window.innerWidth,height:window.innerHeight};this._ghostDragOffset.x+=e.dx,this._ghostDragOffset.y+=e.dy;let i=this._ghostDragOffset.x,s=this._ghostDragOffset.y;const{left:a,top:l,width:c,height:u}=this._ghostStartRect,d=a+i,m=l+s,y=Math.max(r,Math.min(d,n.width-c-r)),_=Math.max(r,Math.min(m,n.height-u-r));this._ghostDragOffset.x=y-a,this._ghostDragOffset.y=_-l,this._ghostElement.style.transform=`translate3d(${this._ghostDragOffset.x}px, ${this._ghostDragOffset.y}px, 0)`}_onDragEnd(){var e,r;if(this._state={...this._state,isDragging:!1},(e=this._windowElement)==null||e.classList.remove("dragging"),this._ghostStartRect&&this._ghostElement){const n=this._ghostStartRect.left+this._ghostDragOffset.x,i=this._ghostStartRect.top+this._ghostDragOffset.y;(r=this.onPositionChange)==null||r.call(this,n,i)}this._destroyGhostElement(),this._host.requestUpdate()}_onResizeStart(){var e;this._state={...this._state,isResizing:!0},(e=this._windowElement)==null||e.classList.add("resizing"),this._cachedMargin=this._getMargin(),this._createGhostElement(),requestAnimationFrame(()=>this._host.requestUpdate())}_onResizeMove(e){if(!this._windowElement||!this._ghostElement||!this._ghostStartRect)return;const{width:r,height:n}=e.rect,i=this._cachedMargin,s=e.edges;let a=0,l=0;if(s!=null&&s.left||s!=null&&s.top){const c=s.left?e.rect.left:this._ghostStartRect.left,u=s.top?e.rect.top:this._ghostStartRect.top,d=Math.max(i,Math.min(c,window.innerWidth-r-i)),m=Math.max(i,Math.min(u,window.innerHeight-n-i));a=d-this._ghostStartRect.left,l=m-this._ghostStartRect.top}this._ghostElement.style.width=`${r}px`,this._ghostElement.style.height=`${n}px`,this._ghostElement.style.transform=`translate3d(${a}px, ${l}px, 0)`}_onResizeEnd(){var e,r,n;if(this._state={...this._state,isResizing:!1},(e=this._windowElement)==null||e.classList.remove("resizing"),this._ghostElement&&this._ghostStartRect){const i=this._ghostElement.getBoundingClientRect(),s=this._ghostElement.offsetWidth,a=this._ghostElement.offsetHeight,l=i.left,c=i.top;(l!==this._ghostStartRect.left||c!==this._ghostStartRect.top)&&((r=this.onPositionChange)==null||r.call(this,l,c)),(n=this.onSizeChange)==null||n.call(this,s,a)}this._destroyGhostElement(),this._host.requestUpdate()}_getMargin(){if(!this._windowElement)return 20;const r=getComputedStyle(this._windowElement).getPropertyValue("--rtc-window-margin");return parseInt(r)||20}_getMinSize(){if(!this._windowElement)return{width:350,height:520};const e=getComputedStyle(this._windowElement);return{width:parseInt(e.getPropertyValue("--rtc-window-min-width"))||350,height:parseInt(e.getPropertyValue("--rtc-window-min-height"))||520}}_createGhostElement(){if(!this._windowElement)return;this._destroyGhostElement();const e=this._windowElement.getBoundingClientRect(),r=getComputedStyle(this._windowElement);this._ghostStartRect={left:e.left,top:e.top,width:e.width,height:e.height};const n=document.createElement("div");n.className="rtc-window-ghost",n.style.cssText=`
|
|
604
628
|
position: fixed;
|
|
605
629
|
left: ${e.left}px;
|
|
606
630
|
top: ${e.top}px;
|
|
@@ -3241,7 +3265,7 @@ Name: ${r}
|
|
|
3241
3265
|
|
|
3242
3266
|
You can now run this script using:
|
|
3243
3267
|
- action: "run", name: "${r}"
|
|
3244
|
-
- Or reference it by path: ${s}`}}catch(s){return{success:!1,error:`Failed to save script: ${s instanceof Error?s.message:String(s)}`}}}async _runScript(e){const r=ai(e,"name");if(!r)return{success:!1,error:"name is required for run action"};const n=e.params||{},i=eo(e,"timeout")??3e4,s=ai(e,"title")??void 0;return this._executeCode(r,n,i,void 0,s)}async _evalScript(e){const r=ai(e,"code");if(!r)return{success:!1,error:"code is required for eval action"};const n=e.params||{},i=eo(e,"timeout")??3e4,s=ai(e,"title")??void 0;return this._executeCode(void 0,n,i,r,s)}async _executeCode(e,r,n,i,s){if(!this.rtcAgent)return{success:!1,error:"rtcAgent not initialized. Pass rtcAgent to ScriptTool constructor."};try{let a;if(i!==void 0)a=i;else{const k=`/scripts/${e}.ts`,A=await Wr.read(k);a=dj(A).code}const l={logs:[],warns:[],errors:[]},c=aj(this.rtcAgent,r,l,s||void 0),u=performance.now(),d=await fj(a,c,n,e),m=Math.round(performance.now()-u),y={};e&&(y.name=e),d!==void 0&&(y.result=d);const _=100;return l.logs.length>0&&(y.logs=l.logs.slice(0,_)),l.warns.length>0&&(y.warnings=l.warns.slice(0,_)),l.errors.length>0&&(y.errors=l.errors.slice(0,_)),y.duration_ms=m,{success:!0,data:y}}catch(a){return a instanceof Error&&"isScriptTimeout"in a?{success:!1,error:a.message}:a instanceof Error&&"isScriptCompileError"in a?{success:!1,error:`Script compile error: ${a.message}`}:{success:!1,error:`Script execution failed: ${a instanceof Error?a.message:String(a)}`}}}}function Sj(t){return[new yj,new gj,new bj,new vj,new _j,new xj,new aI(t)]}class wj{constructor(e){fr(this,"tools",new Map);const r=Sj(e);for(const n of r)this.register(n)}setRtcAgent(e){this.register(new aI(e))}register(e){this.tools.set(e.name,e)}get(e){return this.tools.get(e)}has(e){return this.tools.has(e)}getToolNames(){return Array.from(this.tools.keys())}async execute(e,r){const n=this.tools.get(e);if(!n)throw new Error(`Tool not found: ${e}`);return n.execute(r)}}const oI=new wj,Si=ar("RtcProcessor"),Tj=1e3,lI=10;class Ej{constructor(e){fr(this,"persistence");fr(this,"processing",!1);fr(this,"pendingCheck",!1);fr(this,"retryCountMap",new Map);fr(this,"mode","edit");fr(this,"confirmDialog");fr(this,"askUserDialog");fr(this,"master");fr(this,"_lastSilentlySkippedRtcId");this.persistence=e}setMode(e){this.mode=e}getMode(){return this.mode}setConfirmDialog(e){this.confirmDialog=e}setAskUserDialog(e){this.askUserDialog=e}setMaster(e){this.master=e}_isMasterAllowed(){return this.master===void 0||this.master.isMaster}async onRtcUpdate(){if(Si.debug("onRtcUpdate called, processing:",this.processing),this.processing){this.pendingCheck=!0;return}await this.processLoop()}async processLoop(){if(!this._isMasterAllowed()){Si.debug("processLoop: not master, skipping");return}this.processing=!0,Si.debug("processLoop started"),this._lastSilentlySkippedRtcId=void 0;try{for(;;){this.pendingCheck=!1;const e=await this.persistence.getNextRtcToProcess(void 0);if(!e){if(Si.debug("processLoop: no more RTC to process, exiting"),this.pendingCheck)continue;break}if(e.client_id===this._lastSilentlySkippedRtcId){Si.warn(`processLoop: RTC ${e.client_id} returned again after silent skip, exiting loop to prevent infinite retry`);break}Si.debug("processing RTC:",e.client_id,"tool:",e.tool_name,"sync_status:",e.sync_status);try{await this.processOne(e),Si.debug("processOne completed successfully")}catch(r){Si.error("processOne failed:",r);const n=r instanceof Error?r.message:String(r);if(n.includes("connection")||n.includes("disconnected")){Si.warn("connection error detected, exiting processLoop");break}await this.sleep(Tj)}}}finally{this.processing=!1,Si.debug("processLoop finished")}}async processOne(e){if(e.sync_status==="failed"){const r=this.retryCountMap.get(e.client_id)||0;if(r>=lI){Si.error(`RTC ${e.client_id} exceeded max submit retry count (${lI}), abandoning. The RTC remains in sync_status='failed' and will be retried on the next onRtcUpdate cycle.`),this.retryCountMap.delete(e.client_id),this._lastSilentlySkippedRtcId=e.client_id;return}const n=this.calculateBackoff(r);await this.sleep(n);try{await this.persistence.submitRtcResult({rtcClientId:e.client_id,success:e.status==="completed",result:e.result,error:e.error_message}),this.retryCountMap.delete(e.client_id)}catch(i){throw this.retryCountMap.set(e.client_id,r+1),i}}else{const r=e.tool_name;if(r==="askUser"){await this.processAskUser(e);return}const n=gN.needsConfirm(r,this.mode);let i=!0;if(n&&(i=await this.showConfirmDialog(e)),!i){try{await this.persistence.submitRtcResult({rtcClientId:e.client_id,success:!1,error:"User denied"})}catch(c){Si.error("submitRtcResult (denied) failed:",c)}return}let s,a=!0,l;try{const c=e.parameters||{},u=await oI.execute(r,c);s=u.data,u.success||(a=!1,l=u.error)}catch(c){a=!1,l=c instanceof Error?c.message:String(c)}try{await this.persistence.submitRtcResult({rtcClientId:e.client_id,success:a,result:s,error:l})}catch(c){Si.error("submitRtcResult failed:",c)}}}async processAskUser(e){if(!this.askUserDialog){Si.warn("askUserDialog not set, defaulting to reject");try{await this.persistence.submitRtcResult({rtcClientId:e.client_id,success:!1,error:"User declined to answer questions"})}catch(n){Si.error("submitRtcResult (ask_user no dialog) failed:",n)}return}let r;try{r=await this.askUserDialog(e)}catch(n){Si.error("askUserDialog threw:",n);try{await this.persistence.submitRtcResult({rtcClientId:e.client_id,success:!1,error:n instanceof Error?n.message:String(n)})}catch(i){Si.error("submitRtcResult (ask_user error) failed:",i)}return}try{r===null?await this.persistence.submitRtcResult({rtcClientId:e.client_id,success:!1,error:"User declined to answer questions"}):await this.persistence.submitRtcResult({rtcClientId:e.client_id,success:!0,result:r})}catch(n){Si.error("submitRtcResult (ask_user) failed:",n)}}calculateBackoff(e){return Math.min(1e3*Math.pow(2,e),3e4)}sleep(e){return new Promise(r=>setTimeout(r,e))}async showConfirmDialog(e){return this.confirmDialog?this.confirmDialog(e):(Si.warn("confirmDialog not set, defaulting to reject"),!1)}}function cI(t){return new SharedWorker(""+(typeof document>"u"&&typeof location>"u"?require("url").pathToFileURL(__dirname+"/assets/shared-worker-BEaT-a-g.js").href:new URL("assets/shared-worker-BEaT-a-g.js",typeof document>"u"?location.href:document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"&&document.currentScript.src||document.baseURI).href),{name:t==null?void 0:t.name})}const Ra=ar("WorkerBridge");function Aj(t){const e=t.toString(),r=e.match(/new URL\(\s*(["'`])([^"'`]+)\1/);if(r)return r[2];const n=e.match(/new SharedWorker\(\s*(["'`])([^"'`]+)\1/);if(n)return n[2];throw new Error("[WorkerBridge] Cannot extract worker URL from factory. Source: "+e.slice(0,300))}const po=class po{constructor(e,r={}){this._auth=e,this._worker=null,this._core=null,this._initialized=!1,this._connectionListeners=new Set,this._config=r,this._callbacks={onUIUpdate:n=>{Ad().publish(n)},requestToken:async()=>{const n=await this._auth.getAccessTokenAsync();if(!n)throw new Error("[WorkerBridge] no access token available");return n},requestTokenRefresh:()=>this._auth.handleTokenExpired(),onConnectionStateChange:n=>{for(const i of this._connectionListeners)try{i(n)}catch(s){Ra.error("connection listener error:",s)}},onGapFillState:n=>{console.log("[BulkUpdate] WorkerBridge.onGapFillState called, isSyncing:",n);const i=Ad();n?i.emitGapFillStart():i.emitGapFillEnd()}},this._proxiedCallbacks=S2(this._callbacks)}async initWorker(){let e=null;for(let r=0;r<=po.MAX_INIT_RETRIES;r++)try{r>0&&(Ra.warn(`Retrying worker initialization (attempt ${r+1}/${po.MAX_INIT_RETRIES+1})...`),await this._delay(po.INIT_RETRY_DELAY_MS*r)),await this._initWorkerOnce(),await this._verifyWorkerAlive();return}catch(n){e=n instanceof Error?n:new Error(String(n)),Ra.error(`Worker initialization attempt ${r+1} failed:`,e.message),this._cleanupFailedWorker()}throw new Error(`[WorkerBridge] Failed to initialize SharedWorker after ${po.MAX_INIT_RETRIES+1} attempts: ${e==null?void 0:e.message}`)}async _initWorkerOnce(){if(this._config.workerUrl)Ra.info("Using custom workerUrl:",this._config.workerUrl),this._worker=new SharedWorker(this._config.workerUrl,{name:"rtc-agent-worker",type:"module"});else{const e=Aj(cI),r=typeof document>"u"&&typeof location>"u"?require("url").pathToFileURL(__filename).href:typeof document>"u"?location.href:is&&is.tagName.toUpperCase()==="SCRIPT"&&is.src||new URL("index.umd.js",document.baseURI).href,n=new URL(e,r).href,i=window.location.origin;let s;try{s=new URL(n).origin}catch(l){Ra.debug("Failed to parse worker URL origin, assuming same-origin:",l),s=i}const a=s!==i;if(Ra.info("worker init:",{workerUrl:n,pageOrigin:i,workerOrigin:s,isCrossOrigin:a}),!a)this._worker=cI();else{let l;try{const d=await fetch(n,{cache:"no-store"});if(!d.ok)throw new Error(`HTTP ${d.status} ${d.statusText}`);l=await d.text()}catch(d){throw new Error(`[WorkerBridge] failed to fetch worker script from ${n}: ${d instanceof Error?d.message:d}`)}const c=new Blob([l],{type:"application/javascript"}),u=URL.createObjectURL(c);try{this._worker=new SharedWorker(u,{name:"rtc-agent-worker",type:"module"})}finally{URL.revokeObjectURL(u)}}}this._core=b2(this._worker.port),this._worker.onerror=e=>{Ra.error("SharedWorker error:",{message:e.message,filename:e.filename,lineno:e.lineno,colno:e.colno,error:e.error})},this._worker.port.onmessageerror=e=>{Ra.error("port message error:",e)}}async _verifyWorkerAlive(){if(!this._core)throw new Error("[WorkerBridge] No core available for verification");let e;const r=new Promise((n,i)=>{e=setTimeout(()=>i(new Error("Worker verification timed out")),po.VERIFICATION_TIMEOUT_MS)});try{const n=await Promise.race([this._core.ping(),r]);if(n!=="pong")throw new Error(`Unexpected ping response: ${n}`);Ra.info("Worker verification successful")}catch(n){throw new Error(`[WorkerBridge] Worker verification failed: ${n instanceof Error?n.message:"unknown error"}`)}finally{e!==void 0&&clearTimeout(e)}}_cleanupFailedWorker(){if(this._worker){try{this._worker.port.close()}catch{}this._worker=null}this._core=null}_delay(e){return new Promise(r=>setTimeout(r,e))}get core(){return this._core}async init(e){if(this._initialized){Ra.warn("already initialized");return}if(!this._worker||!this._core)throw new Error("[WorkerBridge] init() called before initWorker()");this._worker.port.start(),await this._core.init(e),await this._core.registerCallback(this._proxiedCallbacks),this._initialized=!0}async destroy(){if(this._initialized&&!(!this._worker||!this._core)){try{await this._core.unregisterCallback(this._proxiedCallbacks)}catch(e){Ra.warn("unregisterCallback failed:",e)}this._connectionListeners.clear(),this._worker.port.close(),this._initialized=!1}}async getConnectionState(){return this._core.getConnectionState()}onConnectionStateChange(e){return this._connectionListeners.add(e),()=>{this._connectionListeners.delete(e)}}installVirtualFSProxy(){const e=this._core;Wr.read=(r,n,i)=>e.virtualFSRead(r,n,i),Wr.write=(r,n,i="overwrite",s)=>e.virtualFSWrite(r,n,i,s),Wr.ls=r=>e.virtualFSLs(r),Wr.find=(r,n)=>e.virtualFSFind(r,n),Wr.grep=(r,n,i,s)=>e.virtualFSGrep(r,n,i,s),Wr.queryByType=r=>e.virtualFSQueryByType(r),Wr.exists=r=>e.virtualFSExists(r),Wr.remove=r=>e.virtualFSRemove(r)}};po.MAX_INIT_RETRIES=3,po.INIT_RETRY_DELAY_MS=1e3,po.VERIFICATION_TIMEOUT_MS=5e3;let u1=po;const xp=ar("MasterLock");class Pj{constructor(e){this._isMaster=!1,this._controlled=!1,this._lockName=`rtc-agent-master-${e}`}get isMaster(){return this._isMaster}get isControlled(){return this._controlled}async acquire(){var e;if(this._controlled){xp.warn("already acquiring/acquired, ignoring");return}if(!this._isWebLocksAvailable()){xp.warn("Web Locks API not available, acting as always-master"),this._isMaster=!0,this._controlled=!0,(e=this.onAcquire)==null||e.call(this);return}this._controlled=!0,this._abortController=new AbortController,navigator.locks.request(this._lockName,{signal:this._abortController.signal},async()=>{var r,n;this._isMaster=!0,xp.info("acquired lock → became Master"),(r=this.onAcquire)==null||r.call(this),await new Promise(i=>{this._releaseResolve=i}),this._isMaster=!1,xp.info("released lock → lost Master"),(n=this.onRelease)==null||n.call(this)}).catch(r=>{r instanceof DOMException&&r.name==="AbortError"||xp.error("lock request error:",r)})}release(){this._controlled&&(this._releaseResolve&&(this._releaseResolve(),this._releaseResolve=void 0),!this._isMaster&&this._abortController&&this._abortController.abort(),this._controlled=!1)}_isWebLocksAvailable(){return typeof navigator<"u"&&"locks"in navigator}}const Ba=ar("PersistenceController");function LJ(t){return t}class Cj{constructor(e){this._core=e}async connect(){Ba.info("connect() called"),await this._core.connect(),Ba.info("connect() completed, worker state:",await this._core.getConnectionState())}disconnect(){this._core.disconnect()}async reconnect(){await this._core.reconnect()}async listSessions(e,r){return this._core.listSessions(e,r)}async getSession(e){return this._core.getSession(e)}async listMessages(e,r,n,i){return this._core.listMessages(e,r,n,i)}async getMessage(e){return this._core.getMessage(e)}async listRtc(e,r,n){return this._core.listRtc(e,r,n)}async getNextRtcToProcess(e){return this._core.getNextRtcToProcess(e)}async sendMessage(e){return this._core.sendMessage(e)}async insertLocalMessage(e){return this._core.insertLocalMessage(e)}async stopTurn(e){return this._core.stopTurn(e)}async closeSession(e){return this._core.closeSession(e)}async openSession(e){return this._core.openSession(e)}async compactSession(e,r){return this._core.compactSession(e,r)}async submitRtcResult(e){return this._core.submitRtcResult(e)}async forkSession(e){return this._core.forkSession(e)}async deleteSession(e){return this._core.deleteSession(e)}async updateSessionTitle(e,r){return this._core.updateSessionTitle(e,r)}async close(){await this._core.close()}async flushAll(){return this._core.flushAll()}async initializeVirtualFS(e){await this._core.initializeVirtualFS(e??{})}getClient(){throw new Error("[WorkerPersistenceAdapter] getClient() is not available. Use PersistenceController.onConnectionStateChange() instead.")}getOffsetManager(){return{reset:()=>this._core.resetOffset()}}getEntityRepository(){throw new Error("[WorkerPersistenceAdapter] getEntityRepository() is not available.")}}const Dl=class Dl{constructor(e,r){this._auth=r,e.addController(this)}set databaseName(e){this._databaseNameOverride=e}set workerUrl(e){this._workerUrl=e}get layer(){return this._layer}get isConnected(){return this._layer!==void 0}get workerBridge(){return this._workerBridge}get masterLock(){return this._masterLock}hostConnected(){}hostDisconnected(){this.disconnect()}async connect(){if(this._layer)return;if(this._connecting)return Ba.debug("connect() called while already connecting, awaiting existing attempt"),this._connecting;const e=p2(),r=this._auth.state.userId;if(!r)throw new Error("[PersistenceController] connect() called without userId; refusing to open a shared database");const n={databaseName:this._databaseNameOverride?`${this._databaseNameOverride}-${r}`:`rtc-agent-${r}`,deviceId:e,client:{endpoint:rl.wsEndpoint,getToken:async()=>{const i=await this._auth.getAccessTokenAsync();if(!i)throw Ba.warn("getToken: no access token available"),new Error("No access token available");return i},onTokenExpired:()=>this._auth.handleTokenExpired(),deviceId:e,userId:r}};return this._connecting=this._connectWorker(n).finally(()=>{this._connecting=void 0}),this._connecting}async _connectWorker(e){let r=null;for(let n=0;n<=Dl.MAX_CONNECT_RETRIES;n++)try{n>0&&(Ba.warn(`Retrying connection (attempt ${n+1}/${Dl.MAX_CONNECT_RETRIES+1})...`),await this._delay(Dl.CONNECT_RETRY_DELAY_MS*n)),await this._connectWorkerOnce(e);return}catch(i){r=i instanceof Error?i:new Error(String(i)),Ba.error(`Connection attempt ${n+1} failed:`,r.message),await this._cleanupFailedConnection()}throw new Error(`[PersistenceController] Failed to connect after ${Dl.MAX_CONNECT_RETRIES+1} attempts: ${r==null?void 0:r.message}`)}async _connectWorkerOnce(e){this._workerBridge=new u1(this._auth,{workerUrl:this._workerUrl}),await this._workerBridge.initWorker();const{getToken:r,onTokenExpired:n,...i}=e.client,s={...e,client:i};await this._workerBridge.init(s),this._workerBridge.installVirtualFSProxy(),this._layer=new Cj(this._workerBridge.core),await this._workerBridge.core.connect();const a=this._auth.state.userId;a&&(this._masterLock=new Pj(a),this._masterLock.onAcquire=()=>{Ba.info("this Tab became Master")},this._masterLock.onRelease=()=>{Ba.info("this Tab lost Master")},this._masterLock.acquire())}async _cleanupFailedConnection(){if(this._workerBridge){try{await this._workerBridge.destroy()}catch(e){Ba.debug("Cleanup after failed connection (non-critical):",e)}this._workerBridge=void 0}this._layer=void 0}_delay(e){return new Promise(r=>setTimeout(r,e))}async disconnect(){var e;if(this._layer){try{await this._layer.getOffsetManager().reset(),await this._layer.close()}catch(r){Ba.error("disconnect error:",r)}this._layer=void 0}if(this._workerBridge){(e=this._masterLock)==null||e.release(),this._masterLock=void 0;try{await this._workerBridge.destroy()}catch(r){Ba.error("WorkerBridge disconnect error:",r)}this._workerBridge=void 0}}async getConnectionState(){return this._workerBridge?this._workerBridge.getConnectionState():"disconnected"}onConnectionStateChange(e){return this._workerBridge?this._workerBridge.onConnectionStateChange(e):()=>{}}};Dl.MAX_CONNECT_RETRIES=2,Dl.CONNECT_RETRY_DELAY_MS=2e3;let d1=Dl;const uI=ar("EventBus");class dI{constructor(){this.handlers=new Map}on(e,r){return this.handlers.has(e)||this.handlers.set(e,new Set),this.handlers.get(e).add(r),()=>{var n;(n=this.handlers.get(e))==null||n.delete(r)}}once(e,r){const n=i=>(this.off(e,n),r(i));return this.on(e,n)}off(e,r){var n;(n=this.handlers.get(e))==null||n.delete(r)}emit(e,r){const n=this.handlers.get(e);if(!n)return;const i=Array.from(n);for(const s of i)try{s(r)}catch(a){uI.error(`Handler error for event '${e}':`,a)}}async emitAsync(e,r){const n=this.handlers.get(e);if(!n)return;const i=Array.from(n),s=[];for(const a of i)s.push(Promise.resolve(a(r)).catch(l=>{uI.error(`Async handler error for event '${e}':`,l)}));await Promise.all(s)}async emitAsyncStrict(e,r){const n=this.handlers.get(e);if(!n)return;const i=Array.from(n),s=[];for(const a of i)s.push(Promise.resolve(a(r)));await Promise.all(s)}clearAll(){this.handlers.clear()}clearEvent(e){this.handlers.delete(e)}}function pI(){return new dI}const ma=pI(),kj=ar("SkillController");class fI{constructor(e,r){this._registry=null,this._config={},this._unsubscribes=[],this._host=e,this._config=r||{},e.addController(this)}get value(){return{registry:this._registry}}get actions(){return{getRegistry:()=>this._registry,setRegistry:e=>{this._registry=e,this._host.requestUpdate(),this._bridgeToolRegistry(e)}}}_bridgeToolRegistry(e){const r=new Proxy({callFunction:(n,i)=>e.execute(n,i),readFile:n=>Wr.read(n),writeFile:(n,i)=>Wr.write(n,i).then(()=>{}),listDir:n=>Wr.ls(n)},{get(n,i){return i in n?n[i]:e[i]}});oI.setRtcAgent(r),kj.info("rtcAgent API bridged to ToolRegistry")}setConfig(e){this._config=e}hostConnected(){this._subscribeEvents()}hostDisconnected(){for(const e of this._unsubscribes)e();this._unsubscribes=[]}_subscribeEvents(){for(const n of this._unsubscribes)n();this._unsubscribes=[];const e=ma.on("ui:toast",n=>{this._config.onToast&&this._config.onToast(n.message,n.type)});this._unsubscribes.push(e);const r=ma.on("ui:confirm-request",n=>{this._config.onConfirmRequest&&this._config.onConfirmRequest(n.requestId,n.path,n.message)});this._unsubscribes.push(r)}respondToConfirm(e,r){ma.emit("ui:confirm-response",{requestId:e,confirmed:r})}}class Ij{constructor(e){this._toasts=[],this._timers=new Map,this._host=e,this._host.addController(this),this.actions={show:(r,n="info",i)=>this._show(r,n,i),remove:r=>this._remove(r)}}get toasts(){return this._toasts}hostConnected(){}hostDisconnected(){for(const e of this._timers.values())clearTimeout(e);this._timers.clear()}_show(e,r,n){const i=Date.now()+Math.random();this._toasts=[...this._toasts,{id:i,message:e,type:r,action:n}],this._host.requestUpdate();const s=r==="error"?0:r==="success"?2e3:2500;if(s>0){const a=setTimeout(()=>this._remove(i),s);this._timers.set(i,a)}}_remove(e){const r=this._timers.get(e);r!==void 0&&(clearTimeout(r),this._timers.delete(e)),this._toasts=this._toasts.filter(n=>n.id!==e),this._host.requestUpdate()}}/**
|
|
3268
|
+
- Or reference it by path: ${s}`}}catch(s){return{success:!1,error:`Failed to save script: ${s instanceof Error?s.message:String(s)}`}}}async _runScript(e){const r=ai(e,"name");if(!r)return{success:!1,error:"name is required for run action"};const n=e.params||{},i=eo(e,"timeout")??3e4,s=ai(e,"title")??void 0;return this._executeCode(r,n,i,void 0,s)}async _evalScript(e){const r=ai(e,"code");if(!r)return{success:!1,error:"code is required for eval action"};const n=e.params||{},i=eo(e,"timeout")??3e4,s=ai(e,"title")??void 0;return this._executeCode(void 0,n,i,r,s)}async _executeCode(e,r,n,i,s){if(!this.rtcAgent)return{success:!1,error:"rtcAgent not initialized. Pass rtcAgent to ScriptTool constructor."};try{let a;if(i!==void 0)a=i;else{const k=`/scripts/${e}.ts`,A=await Wr.read(k);a=dj(A).code}const l={logs:[],warns:[],errors:[]},c=aj(this.rtcAgent,r,l,s||void 0),u=performance.now(),d=await fj(a,c,n,e),m=Math.round(performance.now()-u),y={};e&&(y.name=e),d!==void 0&&(y.result=d);const _=100;return l.logs.length>0&&(y.logs=l.logs.slice(0,_)),l.warns.length>0&&(y.warnings=l.warns.slice(0,_)),l.errors.length>0&&(y.errors=l.errors.slice(0,_)),y.duration_ms=m,{success:!0,data:y}}catch(a){return a instanceof Error&&"isScriptTimeout"in a?{success:!1,error:a.message}:a instanceof Error&&"isScriptCompileError"in a?{success:!1,error:`Script compile error: ${a.message}`}:{success:!1,error:`Script execution failed: ${a instanceof Error?a.message:String(a)}`}}}}function Sj(t){return[new yj,new gj,new bj,new vj,new _j,new xj,new aI(t)]}class wj{constructor(e){fr(this,"tools",new Map);const r=Sj(e);for(const n of r)this.register(n)}setRtcAgent(e){this.register(new aI(e))}register(e){this.tools.set(e.name,e)}get(e){return this.tools.get(e)}has(e){return this.tools.has(e)}getToolNames(){return Array.from(this.tools.keys())}async execute(e,r){const n=this.tools.get(e);if(!n)throw new Error(`Tool not found: ${e}`);return n.execute(r)}}const oI=new wj,Si=ar("RtcProcessor"),Tj=1e3,lI=10;class Ej{constructor(e){fr(this,"persistence");fr(this,"processing",!1);fr(this,"pendingCheck",!1);fr(this,"retryCountMap",new Map);fr(this,"mode","edit");fr(this,"confirmDialog");fr(this,"askUserDialog");fr(this,"master");fr(this,"_lastSilentlySkippedRtcId");this.persistence=e}setMode(e){this.mode=e}getMode(){return this.mode}setConfirmDialog(e){this.confirmDialog=e}setAskUserDialog(e){this.askUserDialog=e}setMaster(e){this.master=e}_isMasterAllowed(){return this.master===void 0||this.master.isMaster}async onRtcUpdate(){if(Si.debug("onRtcUpdate called, processing:",this.processing),this.processing){this.pendingCheck=!0;return}await this.processLoop()}async processLoop(){if(!this._isMasterAllowed()){Si.debug("processLoop: not master, skipping");return}this.processing=!0,Si.debug("processLoop started"),this._lastSilentlySkippedRtcId=void 0;try{for(;;){this.pendingCheck=!1;const e=await this.persistence.getNextRtcToProcess(void 0);if(!e){if(Si.debug("processLoop: no more RTC to process, exiting"),this.pendingCheck)continue;break}if(e.client_id===this._lastSilentlySkippedRtcId){Si.warn(`processLoop: RTC ${e.client_id} returned again after silent skip, exiting loop to prevent infinite retry`);break}Si.debug("processing RTC:",e.client_id,"tool:",e.tool_name,"sync_status:",e.sync_status);try{await this.processOne(e),Si.debug("processOne completed successfully")}catch(r){Si.error("processOne failed:",r);const n=r instanceof Error?r.message:String(r);if(n.includes("connection")||n.includes("disconnected")){Si.warn("connection error detected, exiting processLoop");break}await this.sleep(Tj)}}}finally{this.processing=!1,Si.debug("processLoop finished")}}async processOne(e){if(e.sync_status==="failed"){const r=this.retryCountMap.get(e.client_id)||0;if(r>=lI){Si.error(`RTC ${e.client_id} exceeded max submit retry count (${lI}), abandoning. The RTC remains in sync_status='failed' and will be retried on the next onRtcUpdate cycle.`),this.retryCountMap.delete(e.client_id),this._lastSilentlySkippedRtcId=e.client_id;return}const n=this.calculateBackoff(r);await this.sleep(n);try{await this.persistence.submitRtcResult({rtcClientId:e.client_id,success:e.status==="completed",result:e.result,error:e.error_message}),this.retryCountMap.delete(e.client_id)}catch(i){throw this.retryCountMap.set(e.client_id,r+1),i}}else{const r=e.tool_name;if(r==="askUser"){await this.processAskUser(e);return}const n=gN.needsConfirm(r,this.mode);let i=!0;if(n&&(i=await this.showConfirmDialog(e)),!i){try{await this.persistence.submitRtcResult({rtcClientId:e.client_id,success:!1,error:"User denied"})}catch(c){Si.error("submitRtcResult (denied) failed:",c)}return}let s,a=!0,l;try{const c=e.parameters||{},u=await oI.execute(r,c);s=u.data,u.success||(a=!1,l=u.error)}catch(c){a=!1,l=c instanceof Error?c.message:String(c)}try{await this.persistence.submitRtcResult({rtcClientId:e.client_id,success:a,result:s,error:l})}catch(c){Si.error("submitRtcResult failed:",c)}}}async processAskUser(e){if(!this.askUserDialog){Si.warn("askUserDialog not set, defaulting to reject");try{await this.persistence.submitRtcResult({rtcClientId:e.client_id,success:!1,error:"User declined to answer questions"})}catch(n){Si.error("submitRtcResult (ask_user no dialog) failed:",n)}return}let r;try{r=await this.askUserDialog(e)}catch(n){Si.error("askUserDialog threw:",n);try{await this.persistence.submitRtcResult({rtcClientId:e.client_id,success:!1,error:n instanceof Error?n.message:String(n)})}catch(i){Si.error("submitRtcResult (ask_user error) failed:",i)}return}try{r===null?await this.persistence.submitRtcResult({rtcClientId:e.client_id,success:!1,error:"User declined to answer questions"}):await this.persistence.submitRtcResult({rtcClientId:e.client_id,success:!0,result:r})}catch(n){Si.error("submitRtcResult (ask_user) failed:",n)}}calculateBackoff(e){return Math.min(1e3*Math.pow(2,e),3e4)}sleep(e){return new Promise(r=>setTimeout(r,e))}async showConfirmDialog(e){return this.confirmDialog?this.confirmDialog(e):(Si.warn("confirmDialog not set, defaulting to reject"),!1)}}function cI(t){return new SharedWorker(""+(typeof document>"u"&&typeof location>"u"?require("url").pathToFileURL(__dirname+"/assets/shared-worker-DNuUtKfr.js").href:new URL("assets/shared-worker-DNuUtKfr.js",typeof document>"u"?location.href:document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"&&document.currentScript.src||document.baseURI).href),{name:t==null?void 0:t.name})}const Ra=ar("WorkerBridge");function Aj(t){const e=t.toString(),r=e.match(/new URL\(\s*(["'`])([^"'`]+)\1/);if(r)return r[2];const n=e.match(/new SharedWorker\(\s*(["'`])([^"'`]+)\1/);if(n)return n[2];throw new Error("[WorkerBridge] Cannot extract worker URL from factory. Source: "+e.slice(0,300))}const po=class po{constructor(e,r={}){this._auth=e,this._worker=null,this._core=null,this._initialized=!1,this._connectionListeners=new Set,this._config=r,this._callbacks={onUIUpdate:n=>{Ad().publish(n)},requestToken:async()=>{const n=await this._auth.getAccessTokenAsync();if(!n)throw new Error("[WorkerBridge] no access token available");return n},requestTokenRefresh:()=>this._auth.handleTokenExpired(),onConnectionStateChange:n=>{for(const i of this._connectionListeners)try{i(n)}catch(s){Ra.error("connection listener error:",s)}},onGapFillState:n=>{console.log("[BulkUpdate] WorkerBridge.onGapFillState called, isSyncing:",n);const i=Ad();n?i.emitGapFillStart():i.emitGapFillEnd()}},this._proxiedCallbacks=S2(this._callbacks)}async initWorker(){let e=null;for(let r=0;r<=po.MAX_INIT_RETRIES;r++)try{r>0&&(Ra.warn(`Retrying worker initialization (attempt ${r+1}/${po.MAX_INIT_RETRIES+1})...`),await this._delay(po.INIT_RETRY_DELAY_MS*r)),await this._initWorkerOnce(),await this._verifyWorkerAlive();return}catch(n){e=n instanceof Error?n:new Error(String(n)),Ra.error(`Worker initialization attempt ${r+1} failed:`,e.message),this._cleanupFailedWorker()}throw new Error(`[WorkerBridge] Failed to initialize SharedWorker after ${po.MAX_INIT_RETRIES+1} attempts: ${e==null?void 0:e.message}`)}async _initWorkerOnce(){if(this._config.workerUrl)Ra.info("Using custom workerUrl:",this._config.workerUrl),this._worker=new SharedWorker(this._config.workerUrl,{name:"rtc-agent-worker",type:"module"});else{const e=Aj(cI),r=typeof document>"u"&&typeof location>"u"?require("url").pathToFileURL(__filename).href:typeof document>"u"?location.href:is&&is.tagName.toUpperCase()==="SCRIPT"&&is.src||new URL("index.umd.js",document.baseURI).href,n=new URL(e,r).href,i=window.location.origin;let s;try{s=new URL(n).origin}catch(l){Ra.debug("Failed to parse worker URL origin, assuming same-origin:",l),s=i}const a=s!==i;if(Ra.info("worker init:",{workerUrl:n,pageOrigin:i,workerOrigin:s,isCrossOrigin:a}),!a)this._worker=cI();else{let l;try{const d=await fetch(n,{cache:"no-store"});if(!d.ok)throw new Error(`HTTP ${d.status} ${d.statusText}`);l=await d.text()}catch(d){throw new Error(`[WorkerBridge] failed to fetch worker script from ${n}: ${d instanceof Error?d.message:d}`)}const c=new Blob([l],{type:"application/javascript"}),u=URL.createObjectURL(c);try{this._worker=new SharedWorker(u,{name:"rtc-agent-worker",type:"module"})}finally{URL.revokeObjectURL(u)}}}this._core=b2(this._worker.port),this._worker.onerror=e=>{Ra.error("SharedWorker error:",{message:e.message,filename:e.filename,lineno:e.lineno,colno:e.colno,error:e.error})},this._worker.port.onmessageerror=e=>{Ra.error("port message error:",e)}}async _verifyWorkerAlive(){if(!this._core)throw new Error("[WorkerBridge] No core available for verification");let e;const r=new Promise((n,i)=>{e=setTimeout(()=>i(new Error("Worker verification timed out")),po.VERIFICATION_TIMEOUT_MS)});try{const n=await Promise.race([this._core.ping(),r]);if(n!=="pong")throw new Error(`Unexpected ping response: ${n}`);Ra.info("Worker verification successful")}catch(n){throw new Error(`[WorkerBridge] Worker verification failed: ${n instanceof Error?n.message:"unknown error"}`)}finally{e!==void 0&&clearTimeout(e)}}_cleanupFailedWorker(){if(this._worker){try{this._worker.port.close()}catch{}this._worker=null}this._core=null}_delay(e){return new Promise(r=>setTimeout(r,e))}get core(){return this._core}async init(e){if(this._initialized){Ra.warn("already initialized");return}if(!this._worker||!this._core)throw new Error("[WorkerBridge] init() called before initWorker()");this._worker.port.start(),await this._core.init(e),await this._core.registerCallback(this._proxiedCallbacks),this._initialized=!0}async destroy(){if(this._initialized&&!(!this._worker||!this._core)){try{await this._core.unregisterCallback(this._proxiedCallbacks)}catch(e){Ra.warn("unregisterCallback failed:",e)}this._connectionListeners.clear(),this._worker.port.close(),this._initialized=!1}}async getConnectionState(){return this._core.getConnectionState()}onConnectionStateChange(e){return this._connectionListeners.add(e),()=>{this._connectionListeners.delete(e)}}installVirtualFSProxy(){const e=this._core;Wr.read=(r,n,i)=>e.virtualFSRead(r,n,i),Wr.write=(r,n,i="overwrite",s)=>e.virtualFSWrite(r,n,i,s),Wr.ls=r=>e.virtualFSLs(r),Wr.find=(r,n)=>e.virtualFSFind(r,n),Wr.grep=(r,n,i,s)=>e.virtualFSGrep(r,n,i,s),Wr.queryByType=r=>e.virtualFSQueryByType(r),Wr.exists=r=>e.virtualFSExists(r),Wr.remove=r=>e.virtualFSRemove(r)}};po.MAX_INIT_RETRIES=3,po.INIT_RETRY_DELAY_MS=1e3,po.VERIFICATION_TIMEOUT_MS=5e3;let u1=po;const xp=ar("MasterLock");class Pj{constructor(e){this._isMaster=!1,this._controlled=!1,this._lockName=`rtc-agent-master-${e}`}get isMaster(){return this._isMaster}get isControlled(){return this._controlled}async acquire(){var e;if(this._controlled){xp.warn("already acquiring/acquired, ignoring");return}if(!this._isWebLocksAvailable()){xp.warn("Web Locks API not available, acting as always-master"),this._isMaster=!0,this._controlled=!0,(e=this.onAcquire)==null||e.call(this);return}this._controlled=!0,this._abortController=new AbortController,navigator.locks.request(this._lockName,{signal:this._abortController.signal},async()=>{var r,n;this._isMaster=!0,xp.info("acquired lock → became Master"),(r=this.onAcquire)==null||r.call(this),await new Promise(i=>{this._releaseResolve=i}),this._isMaster=!1,xp.info("released lock → lost Master"),(n=this.onRelease)==null||n.call(this)}).catch(r=>{r instanceof DOMException&&r.name==="AbortError"||xp.error("lock request error:",r)})}release(){this._controlled&&(this._releaseResolve&&(this._releaseResolve(),this._releaseResolve=void 0),!this._isMaster&&this._abortController&&this._abortController.abort(),this._controlled=!1)}_isWebLocksAvailable(){return typeof navigator<"u"&&"locks"in navigator}}const Ba=ar("PersistenceController");function LJ(t){return t}class Cj{constructor(e){this._core=e}async connect(){Ba.info("connect() called"),await this._core.connect(),Ba.info("connect() completed, worker state:",await this._core.getConnectionState())}disconnect(){this._core.disconnect()}async reconnect(){await this._core.reconnect()}async listSessions(e,r){return this._core.listSessions(e,r)}async getSession(e){return this._core.getSession(e)}async listMessages(e,r,n,i){return this._core.listMessages(e,r,n,i)}async getMessage(e){return this._core.getMessage(e)}async listRtc(e,r,n){return this._core.listRtc(e,r,n)}async getNextRtcToProcess(e){return this._core.getNextRtcToProcess(e)}async sendMessage(e){return this._core.sendMessage(e)}async insertLocalMessage(e){return this._core.insertLocalMessage(e)}async stopTurn(e){return this._core.stopTurn(e)}async closeSession(e){return this._core.closeSession(e)}async openSession(e){return this._core.openSession(e)}async compactSession(e,r){return this._core.compactSession(e,r)}async submitRtcResult(e){return this._core.submitRtcResult(e)}async forkSession(e){return this._core.forkSession(e)}async deleteSession(e){return this._core.deleteSession(e)}async updateSessionTitle(e,r){return this._core.updateSessionTitle(e,r)}async close(){await this._core.close()}async flushAll(){return this._core.flushAll()}async initializeVirtualFS(e){await this._core.initializeVirtualFS(e??{})}getClient(){throw new Error("[WorkerPersistenceAdapter] getClient() is not available. Use PersistenceController.onConnectionStateChange() instead.")}getOffsetManager(){return{reset:()=>this._core.resetOffset()}}getEntityRepository(){throw new Error("[WorkerPersistenceAdapter] getEntityRepository() is not available.")}}const Dl=class Dl{constructor(e,r){this._auth=r,e.addController(this)}set databaseName(e){this._databaseNameOverride=e}set workerUrl(e){this._workerUrl=e}get layer(){return this._layer}get isConnected(){return this._layer!==void 0}get workerBridge(){return this._workerBridge}get masterLock(){return this._masterLock}hostConnected(){}hostDisconnected(){this.disconnect()}async connect(){if(this._layer)return;if(this._connecting)return Ba.debug("connect() called while already connecting, awaiting existing attempt"),this._connecting;const e=p2(),r=this._auth.state.userId;if(!r)throw new Error("[PersistenceController] connect() called without userId; refusing to open a shared database");const n={databaseName:this._databaseNameOverride?`${this._databaseNameOverride}-${r}`:`rtc-agent-${r}`,deviceId:e,client:{endpoint:rl.wsEndpoint,getToken:async()=>{const i=await this._auth.getAccessTokenAsync();if(!i)throw Ba.warn("getToken: no access token available"),new Error("No access token available");return i},onTokenExpired:()=>this._auth.handleTokenExpired(),deviceId:e,userId:r}};return this._connecting=this._connectWorker(n).finally(()=>{this._connecting=void 0}),this._connecting}async _connectWorker(e){let r=null;for(let n=0;n<=Dl.MAX_CONNECT_RETRIES;n++)try{n>0&&(Ba.warn(`Retrying connection (attempt ${n+1}/${Dl.MAX_CONNECT_RETRIES+1})...`),await this._delay(Dl.CONNECT_RETRY_DELAY_MS*n)),await this._connectWorkerOnce(e);return}catch(i){r=i instanceof Error?i:new Error(String(i)),Ba.error(`Connection attempt ${n+1} failed:`,r.message),await this._cleanupFailedConnection()}throw new Error(`[PersistenceController] Failed to connect after ${Dl.MAX_CONNECT_RETRIES+1} attempts: ${r==null?void 0:r.message}`)}async _connectWorkerOnce(e){this._workerBridge=new u1(this._auth,{workerUrl:this._workerUrl}),await this._workerBridge.initWorker();const{getToken:r,onTokenExpired:n,...i}=e.client,s={...e,client:i};await this._workerBridge.init(s),this._workerBridge.installVirtualFSProxy(),this._layer=new Cj(this._workerBridge.core),await this._workerBridge.core.connect();const a=this._auth.state.userId;a&&(this._masterLock=new Pj(a),this._masterLock.onAcquire=()=>{Ba.info("this Tab became Master")},this._masterLock.onRelease=()=>{Ba.info("this Tab lost Master")},this._masterLock.acquire())}async _cleanupFailedConnection(){if(this._workerBridge){try{await this._workerBridge.destroy()}catch(e){Ba.debug("Cleanup after failed connection (non-critical):",e)}this._workerBridge=void 0}this._layer=void 0}_delay(e){return new Promise(r=>setTimeout(r,e))}async disconnect(){var e;if(this._layer){try{await this._layer.getOffsetManager().reset(),await this._layer.close()}catch(r){Ba.error("disconnect error:",r)}this._layer=void 0}if(this._workerBridge){(e=this._masterLock)==null||e.release(),this._masterLock=void 0;try{await this._workerBridge.destroy()}catch(r){Ba.error("WorkerBridge disconnect error:",r)}this._workerBridge=void 0}}async getConnectionState(){return this._workerBridge?this._workerBridge.getConnectionState():"disconnected"}onConnectionStateChange(e){return this._workerBridge?this._workerBridge.onConnectionStateChange(e):()=>{}}};Dl.MAX_CONNECT_RETRIES=2,Dl.CONNECT_RETRY_DELAY_MS=2e3;let d1=Dl;const uI=ar("EventBus");class dI{constructor(){this.handlers=new Map}on(e,r){return this.handlers.has(e)||this.handlers.set(e,new Set),this.handlers.get(e).add(r),()=>{var n;(n=this.handlers.get(e))==null||n.delete(r)}}once(e,r){const n=i=>(this.off(e,n),r(i));return this.on(e,n)}off(e,r){var n;(n=this.handlers.get(e))==null||n.delete(r)}emit(e,r){const n=this.handlers.get(e);if(!n)return;const i=Array.from(n);for(const s of i)try{s(r)}catch(a){uI.error(`Handler error for event '${e}':`,a)}}async emitAsync(e,r){const n=this.handlers.get(e);if(!n)return;const i=Array.from(n),s=[];for(const a of i)s.push(Promise.resolve(a(r)).catch(l=>{uI.error(`Async handler error for event '${e}':`,l)}));await Promise.all(s)}async emitAsyncStrict(e,r){const n=this.handlers.get(e);if(!n)return;const i=Array.from(n),s=[];for(const a of i)s.push(Promise.resolve(a(r)));await Promise.all(s)}clearAll(){this.handlers.clear()}clearEvent(e){this.handlers.delete(e)}}function pI(){return new dI}const ma=pI(),kj=ar("SkillController");class fI{constructor(e,r){this._registry=null,this._config={},this._unsubscribes=[],this._host=e,this._config=r||{},e.addController(this)}get value(){return{registry:this._registry}}get actions(){return{getRegistry:()=>this._registry,setRegistry:e=>{this._registry=e,this._host.requestUpdate(),this._bridgeToolRegistry(e)}}}_bridgeToolRegistry(e){const r=new Proxy({callFunction:(n,i)=>e.execute(n,i),readFile:n=>Wr.read(n),writeFile:(n,i)=>Wr.write(n,i).then(()=>{}),listDir:n=>Wr.ls(n)},{get(n,i){return i in n?n[i]:e[i]}});oI.setRtcAgent(r),kj.info("rtcAgent API bridged to ToolRegistry")}setConfig(e){this._config=e}hostConnected(){this._subscribeEvents()}hostDisconnected(){for(const e of this._unsubscribes)e();this._unsubscribes=[]}_subscribeEvents(){for(const n of this._unsubscribes)n();this._unsubscribes=[];const e=ma.on("ui:toast",n=>{this._config.onToast&&this._config.onToast(n.message,n.type)});this._unsubscribes.push(e);const r=ma.on("ui:confirm-request",n=>{this._config.onConfirmRequest&&this._config.onConfirmRequest(n.requestId,n.path,n.message)});this._unsubscribes.push(r)}respondToConfirm(e,r){ma.emit("ui:confirm-response",{requestId:e,confirmed:r})}}class Ij{constructor(e){this._toasts=[],this._timers=new Map,this._host=e,this._host.addController(this),this.actions={show:(r,n="info",i)=>this._show(r,n,i),remove:r=>this._remove(r)}}get toasts(){return this._toasts}hostConnected(){}hostDisconnected(){for(const e of this._timers.values())clearTimeout(e);this._timers.clear()}_show(e,r,n){const i=Date.now()+Math.random();this._toasts=[...this._toasts,{id:i,message:e,type:r,action:n}],this._host.requestUpdate();const s=r==="error"?0:r==="success"?2e3:2500;if(s>0){const a=setTimeout(()=>this._remove(i),s);this._timers.set(i,a)}}_remove(e){const r=this._timers.get(e);r!==void 0&&(clearTimeout(r),this._timers.delete(e)),this._toasts=this._toasts.filter(n=>n.id!==e),this._host.requestUpdate()}}/**
|
|
3245
3269
|
* @license
|
|
3246
3270
|
* Copyright 2021 Google LLC
|
|
3247
3271
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
@@ -11299,7 +11323,7 @@ ${n}
|
|
|
11299
11323
|
<div class="sr-only" aria-live="polite" aria-atomic="true">
|
|
11300
11324
|
${this._liveMessage}
|
|
11301
11325
|
</div>
|
|
11302
|
-
`}};ba.styles=[as,os,ls,cs,xK],ba.shadowRootOptions={...Nr.shadowRootOptions,delegatesFocus:!0},Zo([Bt({type:String,reflect:!0})],ba.prototype,"theme",2),Zo([Bt({type:String,attribute:"version"})],ba.prototype,"version",2),Zo([Bt({type:Boolean,attribute:!1})],ba.prototype,"sidebarVisible",2),Zo([Ar({context:yf,subscribe:!0}),Bt({attribute:!1})],ba.prototype,"_settingsCtx",2),Zo([Ar({context:Wx,subscribe:!0}),Bt({attribute:!1})],ba.prototype,"_authCtx",2),Zo([Ar({context:sn,subscribe:!0}),Kt()],ba.prototype,"_localeCtx",2),Zo([Kt()],ba.prototype,"_activeCategory",2),Zo([Kt()],ba.prototype,"_liveMessage",2),ba=Zo([ln(),$r("rtc-settings-layout")],ba);async function IK(t,e,r){switch(t){case"compact":await OK(e,r);break;default:r.toast.show(Xe(Vr`未知命令: /${t}`),"error");break}}async function OK(t,e){const{persistenceLayer:r,currentSessionId:n,toast:i,logger:s}=e;if(!n){i.show(Xe("没有活动的会话"),"error");return}if(!r){i.show(Xe("服务未连接"),"error");return}i.show(Xe("正在压缩上下文..."),"info");try{await r.compactSession(n,t)}catch(a){s.error("/compact failed:",a);const l=a instanceof Error?a.message:Xe("压缩上下文失败");i.show(l,"error")}}function NK(t,e){return new Promise(r=>{const n=document.createElement("rtc-tool-confirm");n.toolCall={id:t.client_id,toolName:t.tool_name,parameters:t.parameters,status:"pending"};const i=()=>{n.removeEventListener("rtc-tool-call-approved",s),n.removeEventListener("rtc-tool-call-denied",a),n.remove()},s=()=>{i(),r(!0)},a=()=>{i(),r(!1)};n.addEventListener("rtc-tool-call-approved",s),n.addEventListener("rtc-tool-call-denied",a),e.appendChild(n)})}function DK(t,e){return new Promise(r=>{const n=document.createElement("rtc-ask-user");n.rtc=t;const i=()=>{n.removeEventListener("rtc-ask-user-submit",s),n.removeEventListener("rtc-ask-user-dismiss",a),n.remove()},s=l=>{const c=l.detail;i(),r(c.payload)},a=()=>{i(),r(null)};n.addEventListener("rtc-ask-user-submit",s),n.addEventListener("rtc-ask-user-dismiss",a),e.appendChild(n)})}function MK(t,e){return new Promise(r=>{const n=document.createElement("rtc-restore-confirm");n.filePath=t;const i=()=>{n.removeEventListener("rtc-restore-confirmed",s),n.removeEventListener("rtc-restore-cancelled",a),n.remove()},s=()=>{i(),r(!0)},a=()=>{i(),r(!1)};n.addEventListener("rtc-restore-confirmed",s),n.addEventListener("rtc-restore-cancelled",a),e.appendChild(n)})}async function RK(t){if(!t.persistenceIsConnected)return!1;try{const e=await BK("/");return t.fileExplorer.actions.setRoot(e),!0}catch(e){return t.logger.error("Failed to load file tree:",e),!1}}async function BK(t){const e=t==="/"?"/":t.split("/").pop(),r=t==="/",n=[];try{const i=await Wr.ls(t);for(const s of i){const a=r?`/${s}`:`${t}/${s}`;await Wr.exists(a)?n.push({path:a,name:s,type:"file"}):n.push({path:a,name:s,type:"folder"})}}catch{}return{path:t,name:e,type:"folder",children:n}}async function LK(t,e){if(e.persistenceIsConnected){e.logger.debug("loadFolderChildren called for:",t),e.fileExplorer.actions.setLoading(t,!0);try{const r=await Wr.ls(t),n=[];for(const i of r){const s=t==="/"?`/${i}`:`${t}/${i}`;await Wr.exists(s)?n.push({path:s,name:i,type:"file"}):n.push({path:s,name:i,type:"folder"})}e.fileExplorer.actions.updateChildren(t,n)}catch(r){e.logger.error("Failed to load folder children:",t,r)}finally{e.fileExplorer.actions.setLoading(t,!1)}}}async function FK(t,e){try{const r=await Wr.read(t);e.editorArea.actions.openFile(t,r,e.settingsDefaultViewMode),e.fileExplorer.actions.selectNode(t)}catch(r){e.logger.error("Failed to open file:",t,r),e.toast.show(Xe("打开文件失败"),"error")}}async function jK(t,e){const r=[...e.editorArea.tabs];if(r.length===0)return;const n=e.editorArea.activeFilePath;e.logger.debug("Restoring editor area content for",r.length,"tabs");for(const i of r)try{const s=await Wr.read(i.filePath);e.editorArea.actions.loadContent(i.filePath,s)}catch{e.logger.warn("Restored tab file not found in VFS, closing:",i.filePath),e.editorArea.actions.closeFile(i.filePath)}n&&t&&e.fileExplorer.actions.selectNode(n)}async function qK(t,e){const r=e.editorArea.tabs.find(n=>n.filePath===t);if(r)try{await Wr.write(t,r.content,"overwrite",{editedByUser:!0}),e.editorArea.actions.saveFile(t),e.toast.show(Xe("已保存"),"success")}catch(n){e.logger.error("Failed to save file:",t,n),e.toast.show(Xe("保存文件失败"),"error")}}async function $K(t,e,r,n,i,s){if(e==="batch"){r&&i();return}const a=t.lastIndexOf("/"),l=a<=0?"/":t.substring(0,a);if(r&&(l==="/"?i():s(l)),e==="write"||e==="create"){const c=n.editorArea.tabs.find(u=>u.filePath===t);if(c&&!c.isDirty)try{const u=await Wr.read(t);n.editorArea.actions.openFile(t,u)}catch{}else c!=null&&c.isDirty&&n.toast.show(Xe(Vr`文件 ${t} 被其他标签页修改`),"info")}else e==="delete"&&n.editorArea.tabs.find(u=>u.filePath===t)&&(n.editorArea.actions.closeFile(t),n.toast.show(Xe(Vr`文件 ${t} 已被删除`),"info"))}async function UK(t,e){const r=e.persistence.workerBridge;if(!r)return{success:!1,error:"Persistence not connected"};try{let n=null;if(t==="/AGENT.md"||t.startsWith("/functions/")){const i=e.skill.actions.getRegistry();if(!i)return{success:!1,error:"Registry not available"};const a=i.generateAllDocsContent(0).find(l=>l.path===t);a&&(n=a.content)}else if(t.startsWith("/scenarios/")){if(!e.scenariosURL)return{success:!1,error:"Scenarios URL not configured"};const{loadScenariosContent:i}=await Promise.resolve().then(()=>mq),a=(await i(e.scenariosURL)).find(l=>l.path===t);a&&(n=a.content)}return n===null?{success:!1,error:"Cannot determine default content for this file"}:(await r.core.virtualFSWrite(t,n,"overwrite",{editedByUser:!1}),e.editorArea.actions.loadContent(t,n),e.logger.info("Restored file to default:",t),{success:!0})}catch(n){return e.logger.error("Failed to restore default:",t,n),{success:!1,error:n instanceof Error?n.message:String(n)}}}async function VK(t,e){if(!e.persistenceLayer)return t;const r=await e.persistenceLayer.listSessions();e.logger.debug("Loaded sessions from DB:",r.length);const n=r.map(y=>({clientId:y.client_id,deviceId:y.device_id,title:y.title||"",createdAt:new Date(y.created_at).getTime(),updatedAt:new Date(y.updated_at).getTime(),todoList:y.todo_list,rootClientSessionId:y.root_client_session_id,status:y.status,totalInputTokens:y.total_input_tokens,totalOutputTokens:y.total_output_tokens,totalTokens:y.total_tokens,currentContextTokens:y.current_context_tokens,totalCachedReadTokens:y.total_cached_read_tokens,totalCachedWriteTokens:y.total_cached_write_tokens,totalReasoningTokens:y.total_reasoning_tokens,totalCostUsd:y.total_cost_usd,lastTokenUpdateAt:y.last_token_update_at,compressionThreshold:y.compression_threshold,compressionProgress:y.compression_progress,roundsUntilCompression:y.rounds_until_compression,estimatedNextRoundTokens:y.estimated_next_round_tokens}));e.session.actions.setSessions(n),e.sessionTree.actions.rebuildTree(n);let i=t;if(!i){const y=n.filter(k=>k.status!=="closed").sort((k,A)=>(A.updatedAt??0)-(k.updatedAt??0)),_=e.sessionTab.actions.getStoredActiveSessionId();for(const k of y){const A=k.title||Xe("未命名"),P=k.clientId===_;e.sessionTab.actions.openOrActivate(k.clientId,A,{activate:P,skipPersist:!0})}if(e.logger.debug("Restored tabs from DB:",y.length,"storedActiveId:",_),e.sessionTab.value.state.activeSessionId===null&&y.length>0){const k=y[0].clientId;e.logger.debug("Active tab is null, falling back to first tab:",k),e.sessionTab.actions.setActiveTab(k)}}const s=new Set(n.map(y=>y.clientId)),a=e.sessionTab.filterInvalidTabs(s);e.logger.debug("filterInvalidTabs:",a?"removed some":"none removed"),e.logger.debug("Tabs after filter:",e.sessionTab.value.state.tabs.map(y=>`${y.sessionId}="${y.title}"`)),e.logger.debug("activeSessionId:",e.sessionTab.value.state.activeSessionId);const l=e.sessionTab.value.state.activeSessionId,c=e.session.value.state.currentSessionId;c!==l&&(e.logger.debug("Syncing currentSessionId:",c,"->",l),l?e.session.actions.switchSession(l):e.session.actions.clearCurrentSession());const u=new Map(n.map(y=>[y.clientId,y.title])),d=e.sessionTab.updateTabTitles(u);e.logger.debug("updateTabTitles:",d?"updated":"no change"),e.logger.debug("Tabs after title sync:",e.sessionTab.value.state.tabs.map(y=>`${y.sessionId}="${y.title}"`));const m=new Map(n.filter(y=>y.status).map(y=>[y.clientId,y.status]));if(m.size>0&&e.sessionTab.syncTabStatuses(m),!i){i=!0;const y=e.sessionTab.value.state.tabs.length>0;if(e.logger.debug("Initial load: hasOpenTabs=",y,"currentSessionId=",e.session.value.state.currentSessionId),y&&!e.session.value.state.currentSessionId){const _=e.sessionTab.value.state.activeSessionId,k=_??(n.length>0?n.reduce((A,P)=>A.updatedAt>P.updatedAt?A:P).clientId:null);k&&(e.logger.debug("Auto-selecting session:",k,"(from activeTabId:",_,")"),e.session.actions.switchSession(k))}}return i}async function zK(t){try{if(await t.persistence.connect(),t.persistence.layer){t.message.persistence=t.persistence.layer,t.session.persistence=t.persistence.layer,t.notification.persistence=t.persistence.layer,t.activity.active==="files"&&await t.loadFileTree(),await t.restoreEditorAreaContent();const e=t.skill.actions.getRegistry();if(t.logger.debug("After connect, registry:",e?"set":"null"),e!=null&&e.generateAllDocsContent){const s=e.generateAllDocsContent(0);s.length>0&&t.persistence.workerBridge&&(await t.persistence.workerBridge.core.batchWriteFiles(s),t.logger.debug("batchWriteFiles completed"))}if(t.scenariosURL)try{const s=await Iy(t.scenariosURL);t.persistence.workerBridge&&await t.persistence.workerBridge.core.batchWriteFiles(s),t.logger.info(`Re-loaded ${s.length} scenarios from ${t.scenariosURL}`)}catch(s){t.logger.warn(`Failed to re-load scenarios from ${t.scenariosURL}:`,s)}const r=await WK(t.persistence.layer,t),{unsubConnection:n,connectionState:i}=await KK(t);return t.loadSessions(),{connectionFailed:!1,connectionError:"",rtcProcessor:r,unsubConnection:n,connectionState:i}}return{connectionFailed:!1,connectionError:"",connectionState:"disconnected"}}catch(e){const r=e instanceof Error?e.message:String(e);return t.logger.error("Connection failed:",r),t.toast.show(Xe(Vr`连接失败: ${r}`),"error"),{connectionFailed:!0,connectionError:r,connectionState:"disconnected"}}}async function WK(t,e){const r=new Ej(t);r.setConfirmDialog(i=>e.showToolConfirm(i)),r.setAskUserDialog(i=>e.showAskUser(i)),r.setMode(e.mode.value.state.currentMode);const n=e.persistence.masterLock;if(n){r.setMaster(n);const i=n.onAcquire;n.onAcquire=()=>{i==null||i(),r.onRtcUpdate().catch(s=>{e.logger.error("onRtcUpdate on master acquire failed:",s)})}}return await r.onRtcUpdate(),r}async function KK(t){let r=await t.persistence.getConnectionState();return{unsubConnection:t.persistence.onConnectionStateChange(i=>{var s;r=i.state,(s=t.onConnectionStateChange)==null||s.call(t,i.state)}),connectionState:r}}const HK=new Set(["title","status","deleted_at","root_client_session_id","created_at","updated_at"]);function GK(t,e){var m,y;const{message:r,session:n,sessionTab:i,persistence:s,getRtcProcessor:a,loadSessions:l,refreshTurnCounts:c,handleFileChange:u,log:d}=e;if(t.entity==="message")return r.updateMessageFromBus(t.entityId);if(t.entity==="session"){YK(t,n,i,l,c,d);return}if(t.entity==="rtc"){if(((m=s.masterLock)==null?void 0:m.isMaster)===!1)return;(y=a())==null||y.onRtcUpdate();return}if(t.entity==="file"){u(t.entityId,t.field??"");return}}function YK(t,e,r,n,i,s){(t.action==="created"||!t.field||HK.has(t.field))&&n(),t.field==="status"&&JK(t,e,r,s),(t.field==="pending_turn_count"||t.field==="running_turn_count")&&i()}function JK(t,e,r,n){const i=t.oldValue,s=t.newValue,a=t.entityId;if(s){if(s==="closed"){n.debug("Session closed, closing tab:",a),r.actions.closeTab(a);return}if(i==="closed"&&(s==="idle"||s==="active")){n.debug("Session reopened, creating tab:",a);const l=e.value.state.sessions.find(u=>u.clientId===a),c=(l==null?void 0:l.title)||Xe("未命名");r.actions.openOrActivate(a,c,{activate:!1});return}r.actions.updateTabStatus(a,s)}}var XK=Object.defineProperty,ZK=Object.getOwnPropertyDescriptor,zn=(t,e,r,n)=>{for(var i=n>1?void 0:n?ZK(e,r):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(i=(n?a(e,r,i):a(i))||i);return n&&i&&XK(e,r,i),i};const un=ar("RtcAgent"),QK={normal:"Window restored",maximized:"Window maximized",minimized:"Window minimized"},eH=1e3,rO=20;er.RtcAgent=class extends Nr{constructor(){super(...arguments),this.theme="system",this._lang="",this.appLabel="RTC Agent",this.bubbleIcon="",this._agentConfig=null,this._serverURL="",this._redirectURI="",this._scenariosURL="",this._databaseName="",this._workerUrl="",this._windowConfig=null,this._activityBarConfig=null,this._resolvedActivityBarConfig=r3(),this._resolvedWindowConfig=t3(),this._windowState=new F5(this,this._resolvedWindowConfig),this._auth=new j5(this),this._persistence=new d1(this,this._auth),this._session=new q5(this),this._message=new V5(this),this._mode=new K5(this),this._toolCall=new H5(this),this._interaction=new J5(this,{draggable:this._resolvedWindowConfig.draggable,resizable:this._resolvedWindowConfig.resizable}),this._skill=new fI(this,{onToast:(e,r)=>this._toast.actions.show(e,r),onConfirmRequest:(e,r,n)=>{const i=window.confirm(n);this._skill.respondToConfirm(e,i)}}),this._toast=new Ij(this),this._fork=new Wj(this),this._activity=new Kj(this),this._fileExplorer=new Hj(this),this._editorArea=new Gj(this),this._statusBar=new Jj(this,this._editorArea),this._sessionTree=new Xj(this),this._sessionTab=new Zj(this),this._settings=new Qj(this),this._notification=new g1(this),this._fileTreeLoaded=!1,this._modeAnnouncement="",this._showLoginDialog=!1,this._selectedProvider="mock",this._connectionState="disconnected",this._connectionFailed=!1,this._connectionError="",this._connectGeneration=0,this._appliedMode="normal",this._creatingUnsavedTab=!1,this._initialSessionLoadDone=!1,this._localeInitialized=!1,this._autoSaveTimers=new Map,this._boundOnMinimize=()=>this._windowState.actions.minimize(),this._boundOnMaximize=()=>this._windowState.actions.maximize(),this._boundOnRestore=()=>this._windowState.actions.restore(),this._boundOnLoginRequested=e=>this._handleLoginRequested(e),this._boundOnNewSession=()=>{this._fork.actions.clearFork(),this._session.value.state.currentSessionId||this._message.actions.clearMessages()},this._boundOnLogout=()=>{var e;for(const r of this._autoSaveTimers.values())clearTimeout(r);this._autoSaveTimers.clear(),this._fileTreeLoaded=!1,this._initialSessionLoadDone=!1,this._editorArea.actions.closeAll(),this._sessionTab.actions.clearAll(),this._activity.actions.setActivity("chat"),this._fork.actions.clearFork(),this._rtcProcessor=void 0,(e=this._unsubConnection)==null||e.call(this),this._unsubConnection=void 0,this._connectGeneration++,this._connecting=void 0,this._persistence.disconnect(),this._session.actions.reset(),this._message.actions.clearMessages()},this._boundOnInputSubmit=async e=>{const n=e.detail.contentData,s=(c=>typeof c=="string"?c:"")(n.data),a={message:{content:s,metadata:void 0}};if(await this._beforeMessageSend(a)){a.message.content!==s&&(n.data=a.message.content);try{this._fork.isActive?await this._fork.actions.submitFork(n):await this._message.actions.sendMessage(n);const c=this._session.value.state.currentSessionId;c&&this._sessionTab.actions.markSaved(c)}catch(c){un.error("message submit failed:",c)}}},this._boundOnForkInitiated=e=>{const{oldSessionClientId:r,oldMessageClientId:n,newSessionClientId:i,content:s}=e.detail;this._fork.actions.requestFork(r,n,i,s)},this._boundOnKeydown=e=>{if(e.key==="Escape"&&this._fork.isActive){this._fork.actions.clearFork(),this.dispatchEvent(new CustomEvent("rtc-clear-active-input"));return}if(!(this._activity.active!=="files"||!(e.metaKey||e.ctrlKey))){if(e.key==="s"||e.key==="S"){const n=this._editorArea.state.activeFilePath;n&&(e.preventDefault(),this._handleEditorSave(n))}else if(e.key==="w"||e.key==="W"){const n=this._editorArea.state.activeFilePath;n&&(e.preventDefault(),this._editorArea.actions.closeFile(n))}}},this._boundOnStopRequested=e=>{const r=e.detail;this._persistence.layer&&this._persistence.layer.stopTurn(r.sessionClientId)},this._boundOnResendMessage=e=>{const n=e.detail.message;n!=null&&n.clientId&&(n!=null&&n.content)&&this._message.actions.resendMessage(n.clientId,n.content)},this._boundOnSessionDeleteRequested=async e=>{const{sessionId:r}=e.detail;un.debug("session delete requested:",r);const n=await this._session.actions.deleteSession(r);if(n.ok)this._toast.actions.show(Xe("会话已删除"),"success");else{const i={"delete-failed":Xe("删除失败,请稍后重试")};this._toast.actions.show(i[n.error??""]??n.error??Xe("删除失败"),"error")}},this._boundOnSessionRenameConfirmed=async e=>{const{sessionId:r,title:n}=e.detail;if(!n.trim())return;const i=await this._session.actions.renameSession(r,n.trim());if(!i.ok){const s={"rename-failed":Xe("重命名失败,请稍后重试")};this._toast.actions.show(s[i.error??""]??i.error??Xe("重命名失败"),"error")}},this._boundOnToastRequested=e=>{const r=e.detail;this._toast.actions.show(r.message,r.type)},this._boundOnToastClose=e=>{const r=e.detail;this._toast.actions.remove(r.id)},this._boundOnCommandRequested=e=>{const r=e.detail;this._handleCommand(r.name,r.args)},this._boundOnActivityChange=e=>{const{activity:r,toggleSidebar:n}=e.detail;n?this._activity.actions.toggleSidebar():(this._activity.actions.setActivity(r),r==="settings"&&this._activity.actions.showSidebar(),r==="files"&&!this._fileTreeLoaded&&this._persistence.isConnected&&this._loadFileTree())},this._boundOnFileSelect=e=>{const{path:r}=e.detail;this._handleFileOpen(r)},this._boundOnFolderToggle=e=>{const{path:r}=e.detail;this._fileExplorer.value.isExpanded(r)&&(un.debug("_boundOnFolderToggle: loading children for",r),this._loadFolderChildren(r))},this._boundOnEditorAreaSave=e=>{const{filePath:r}=e.detail;this._handleEditorSave(r)},this._boundOnEditorAreaTabClose=e=>{const{filePath:r}=e.detail,n=this._autoSaveTimers.get(r);n&&(clearTimeout(n),this._autoSaveTimers.delete(r)),this._editorArea.actions.closeFile(r)},this._boundOnEditorAreaTabSelect=e=>{const{filePath:r}=e.detail;this._editorArea.actions.switchTab(r)},this._boundOnEditorAreaContentChange=e=>{const{filePath:r,content:n}=e.detail;this._editorArea.actions.updateContent(r,n),this._settings.value.state.files.autoSave&&this._scheduleAutoSave(r)},this._boundOnEditorAreaViewModeChange=e=>{const{filePath:r,viewMode:n}=e.detail;this._editorArea.actions.setViewMode(r,n)},this._boundOnEditorAreaCursorMove=e=>{const r=e.detail,n=this._editorArea.activeFilePath;n&&this._editorArea.actions.setCursorPosition(n,r)},this._boundOnEditorAreaRestoreDefault=async e=>{const{filePath:r}=e.detail;if(!await MK(r,this.shadowRoot))return;const i=await UK(r,{persistence:this._persistence,editorArea:this._editorArea,skill:this._skill,scenariosURL:this._scenariosURL,toast:this._toast.actions,logger:un});i.success?this._toast.actions.show(Xe("已恢复默认内容"),"success"):this._toast.actions.show(i.error??Xe("恢复失败"),"error")},this._boundOnFileExplorerRefresh=()=>{this._loadFileTree()},this._boundOnChatLayoutSessionSelect=e=>{const{sessionId:r}=e.detail;un.debug("chat-layout session selected:",r)},this._boundOnChatLayoutTabActivate=e=>{const{sessionId:r}=e.detail;un.debug("chat-layout tab activated:",r)},this._boundOnChatLayoutTabClose=e=>{const{sessionId:r}=e.detail;un.debug("chat-layout tab closed:",r)},this._boundOnDrawerClose=()=>{this._activity.actions.hideSidebar()},this._boundOnWheel=e=>{const r=e.composedPath()[0],n=r instanceof Element?r:null,i=n?this._findScrollableParent(n):null;if(!i){e.preventDefault(),e.stopPropagation();return}const{scrollTop:s,scrollHeight:a,clientHeight:l,scrollLeft:c,scrollWidth:u,clientWidth:d}=i,m=s<=0,y=Math.ceil(s+l)>=a,_=e.deltaY<0,k=e.deltaY>0,A=a>l,P=c<=0,O=Math.ceil(c+d)>=u,w=e.deltaX<0||e.shiftKey&&e.deltaY<0,C=e.deltaX>0||e.shiftKey&&e.deltaY>0,T=u>d;(A&&(m&&_||y&&k)||T&&(P&&w||O&&C))&&(e.preventDefault(),e.stopPropagation())},this._isSyncing=!1,this._sessionProvider=new ss(this,{context:Lg,initialValue:this._session.value}),this._messageProvider=new ss(this,{context:Gx,initialValue:this._message.value}),this._toolCallProvider=new ss(this,{context:Jx,initialValue:this._toolCall.value}),this._authProvider=new ss(this,{context:Wx,initialValue:this._auth.value}),this._modeProvider=new ss(this,{context:Yx,initialValue:this._mode.value}),this._windowStateProvider=new ss(this,{context:s5,initialValue:this._windowState.value}),this._turnCountProvider=new ss(this,{context:Xx,initialValue:hf}),this._skillProvider=new ss(this,{context:Qx,initialValue:Zx}),this._activityProvider=new ss(this,{context:d5,initialValue:this._activity.value}),this._fileExplorerProvider=new ss(this,{context:jg,initialValue:this._fileExplorer.value}),this._sessionTreeProvider=new ss(this,{context:Hx,initialValue:this._sessionTree.value}),this._sessionTabProvider=new ss(this,{context:Fg,initialValue:this._sessionTab.value}),this._settingsProvider=new ss(this,{context:yf,initialValue:this._settings.value}),this._notificationProvider=new ss(this,{context:p5,initialValue:this._notification.value}),this._localeProvider=new ss(this,{context:sn,initialValue:{locale:tr,setLocale:Ru,locales:[tr,...Kr]}}),this._sanitizedBubbleIcon=""}set lang(e){const r=this._lang;e&&Sp(e)&&e!==r&&(this._lang=e,Ru(e),this._localeProvider.setValue({locale:e,setLocale:Ru,locales:[tr,...Kr]}))}get lang(){return this._lang||wy()}set registry(e){e&&(un.info("registry setter called, isConnected:",this._persistence.isConnected),this._skill.actions.setRegistry(e),this._persistence.isConnected&&this._persistence.layer&&this._regenerateDocsAfterRegistrySet())}get registry(){return this._skill.actions.getRegistry()}async _regenerateDocsAfterRegistrySet(){const e=this._skill.actions.getRegistry();if(e)try{const r=e.generateAllDocsContent(0);await this._persistence.workerBridge.core.batchWriteFiles(r),this._scenariosURL&&await this._loadScenarios(this._scenariosURL)}catch(r){un.warn("Failed to regenerate docs after registry set:",r)}}set agentConfig(e){this._agentConfig=e,e&&(this.registry=this._buildRegistryFromConfig(e))}get agentConfig(){return this._agentConfig}set serverURL(e){this._serverURL=e,B5(e)}get serverURL(){return this._serverURL}set redirectURI(e){this._redirectURI=e,L5(e)}get redirectURI(){return this._redirectURI}set scenariosURL(e){this._scenariosURL=e,e&&this._persistence.isConnected&&this._persistence.layer&&this._loadScenarios(e)}get scenariosURL(){return this._scenariosURL}set databaseName(e){this._databaseName=e,this._persistence.databaseName=e||void 0}get databaseName(){return this._databaseName}set workerUrl(e){this._workerUrl=e,this._persistence.workerUrl=e||void 0}get workerUrl(){return this._workerUrl}set windowConfig(e){this._windowConfig=e;const r=t3(e??void 0);this._resolvedWindowConfig=r,this._windowState.setConfig(r),this._interaction.setConfig({draggable:r.draggable,resizable:r.resizable}),this.requestUpdate()}get windowConfig(){return this._windowConfig}set activityBarConfig(e){this._activityBarConfig=e,this._resolvedActivityBarConfig=r3(e??void 0),this._resolvedActivityBarConfig.disabledActivities.includes(this._activity.active)&&this._activity.actions.setActivity(this._resolvedActivityBarConfig.defaultActivity),this.requestUpdate()}get activityBarConfig(){return this._activityBarConfig}async _loadScenarios(e){try{const r=await Iy(e);await this._persistence.workerBridge.core.batchWriteFiles(r),un.info(`Loaded ${r.length} scenarios from ${e}`)}catch(r){throw un.error("Failed to load scenarios:",r),r}}_buildRegistryFromConfig(e){const r=JI({name:e.name??this.appLabel,description:e.description??"",persona:e.persona??"",onError:e.onError});for(const n of e.groups??[]){const i=r.createGroup({name:n.name,description:n.description??""});for(const s of n.functions)i.register(s)}if(e.functions&&e.functions.length>0){const n=r.createGroup({name:"default",description:"Default functions"});for(const i of e.functions)n.register(i)}return r}get windowStateController(){return this._windowState}get authController(){return this._auth}get persistenceController(){return this._persistence}get sessionController(){return this._session}get messageController(){return this._message}get modeController(){return this._mode}get toolCallController(){return this._toolCall}get skillController(){return this._skill}get toastController(){return this._toast}get forkController(){return this._fork}get activityController(){return this._activity}get fileExplorerController(){return this._fileExplorer}get editorAreaController(){return this._editorArea}get statusBarController(){return this._statusBar}get sessionTreeController(){return this._sessionTree}get sessionTabController(){return this._sessionTab}get settingsController(){return this._settings}get notificationController(){return this._notification}async reconnect(){if(this._persistence.isConnected){un.warn("Already connected");return}await this._connectWithRetry()}get connectionFailed(){return this._connectionFailed}get connectionError(){return this._connectionError}connectedCallback(){super.connectedCallback(),this._localeInitialized||(this._localeInitialized=!0,II(this._lang||void 0)),this._fork.setDeps({clearMessages:()=>this._message.actions.clearMessages(),clearTransientParams:n=>this._sessionTab.actions.clearTransientParams(n),executeFork:n=>this._message.actions.forkSession(n)}),this._session.onSessionSwitch=()=>{un.debug("onSessionSwitch currentSessionId:",this._session.value.state.currentSessionId),this._fork.actions.clearFork();const n=this._session.value.state.currentSessionId;if(n){const i=this._message.repository.getSessionState(n);i.messages.length===0?(un.debug("onSessionSwitch calling message.reload() (empty repository)"),this._message.reload()):un.debug(`onSessionSwitch skipping reload (repo has ${i.messages.length} messages)`)}else un.debug("onSessionSwitch clearing messages (no current session)"),this._message.actions.clearMessages();this._refreshTurnCounts()},this._persistence.layer&&(this._message.persistence=this._persistence.layer,this._session.persistence=this._persistence.layer),this._message.sessionController=this._session,this._notification.sessionController=this._session,this._notification.messageController=this._message,this._notification.toastController=this._toast,this._notification.windowStateController=this._windowState,this._notification.settingsController=this._settings,this._persistence.layer&&(this._notification.persistence=this._persistence.layer),this.addEventListener("rtc-window-minimize",this._boundOnMinimize),this.addEventListener("rtc-window-maximize",this._boundOnMaximize),this.addEventListener("rtc-window-restore",this._boundOnRestore),this.addEventListener("rtc-login-requested",this._boundOnLoginRequested),this.addEventListener("rtc-new-session",this._boundOnNewSession),this.addEventListener("rtc-auth-logout",this._boundOnLogout),this.addEventListener("rtc-input-submit",this._boundOnInputSubmit),this.addEventListener("rtc-stop-requested",this._boundOnStopRequested),this.addEventListener("rtc-user-message-resend",this._boundOnResendMessage),this.addEventListener("rtc-session-delete-requested",this._boundOnSessionDeleteRequested),this.addEventListener("rtc-session-rename-confirmed",this._boundOnSessionRenameConfirmed),this.addEventListener("rtc-fork-initiated",this._boundOnForkInitiated),this.addEventListener("rtc-toast-requested",this._boundOnToastRequested),this.addEventListener("rtc-toast-close",this._boundOnToastClose),this.addEventListener("rtc-command-requested",this._boundOnCommandRequested),this.addEventListener("activity-change",this._boundOnActivityChange),this.addEventListener("file-select",this._boundOnFileSelect),this.addEventListener("folder-toggle",this._boundOnFolderToggle),this.addEventListener("editor-area-save",this._boundOnEditorAreaSave),this.addEventListener("editor-area-tab-close",this._boundOnEditorAreaTabClose),this.addEventListener("editor-area-tab-select",this._boundOnEditorAreaTabSelect),this.addEventListener("editor-area-content-change",this._boundOnEditorAreaContentChange),this.addEventListener("editor-area-view-mode-change",this._boundOnEditorAreaViewModeChange),this.addEventListener("editor-area-cursor-move",this._boundOnEditorAreaCursorMove),this.addEventListener("editor-area-restore-default",this._boundOnEditorAreaRestoreDefault),this.addEventListener("refresh-requested",this._boundOnFileExplorerRefresh),this.addEventListener("rtc-chat-layout-session-select",this._boundOnChatLayoutSessionSelect),this.addEventListener("rtc-chat-layout-tab-activate",this._boundOnChatLayoutTabActivate),this.addEventListener("rtc-chat-layout-tab-close",this._boundOnChatLayoutTabClose),this.addEventListener("rtc-drawer-close",this._boundOnDrawerClose),this.addEventListener("keydown",this._boundOnKeydown),this.addEventListener("wheel",this._boundOnWheel,{passive:!1});const e=Ad(),r={message:this._message,session:this._session,sessionTab:this._sessionTab,sessionTree:this._sessionTree,persistence:this._persistence,getRtcProcessor:()=>this._rtcProcessor,loadSessions:()=>this._loadSessions(),refreshTurnCounts:()=>this._refreshTurnCounts(),handleFileChange:(n,i)=>this._handleFileChange(n,i),log:un};if(this._busUnsubMessage=e.subscribe(n=>GK(n,r)),this._busUnsubBulkUpdate=e.onBulkUpdate(n=>{var i;un.debug("[BulkUpdate] rtc-agent received bulk-update, entities:",Array.from(n.entities)),n.entities.has("session")&&this._loadSessions(),n.entities.has("message")&&this._session.value.state.currentSessionId&&this._message.reload(),n.entities.has("turn")&&this._refreshTurnCounts(),n.entities.has("file")&&this._loadFileTree(),n.entities.has("rtc")&&((i=this._rtcProcessor)==null||i.onRtcUpdate())}),this._busUnsubGapFill=e.onGapFillState(n=>{var i;un.debug("[BulkUpdate] rtc-agent gap fill state:",n),this._isSyncing=n,this.requestUpdate(),n||(un.debug("[BulkUpdate] gap fill ended, reloading all data"),this._loadSessions(),this._session.value.state.currentSessionId&&this._message.reload(),this._refreshTurnCounts(),this._loadFileTree(),(i=this._rtcProcessor)==null||i.onRtcUpdate())}),this._interaction.onPositionChange=(n,i)=>{this._windowState.actions.setPosition({x:n,y:i})},this._interaction.onSizeChange=(n,i)=>{this._windowState.actions.setSize({width:n,height:i})},this._windowState.onViewportTooSmall=()=>{this._windowState.actions.minimize()},this.setAttribute("data-mode",this._windowState.value.state.mode),this._pendingAuthConfig){const n=this._pendingAuthConfig;this._pendingAuthConfig=void 0,this._auth.setExternalTokens({accessToken:n.accessToken,refreshToken:n.refreshToken??"",userId:n.userId,expiresIn:n.expiresIn??3600})}else this._pendingDynamicAuth?(this._auth.setDynamicTokenProvider({getToken:this._pendingDynamicAuth.getToken,refreshToken:this._pendingDynamicAuth.refreshToken,userId:this._pendingDynamicAuth.userId}),this._pendingDynamicAuth=void 0):this._pendingAuthProvider&&(this._auth.setAuthProvider({getToken:this._pendingAuthProvider.getToken,refreshToken:this._pendingAuthProvider.refreshToken,isLoggedIn:this._pendingAuthProvider.isLoggedIn,logout:this._pendingAuthProvider.logout}),this._pendingAuthProvider=void 0);this._auth.onLogin=()=>{this._connectWithRetry()},this._auth.state.isLoggedIn&&this._connectWithRetry()}_connectWithRetry(){return this._connecting?(un.debug("_connectWithRetry already in-flight, reusing existing promise"),this._connecting):(this._connecting=this._doConnectWithRetry(),this._connecting)}async _doConnectWithRetry(){var r;const e=this._connectGeneration;try{this._connectionFailed=!1,this._connectionError="";const n=await zK({persistence:this._persistence,message:this._message,session:this._session,notification:this._notification,activity:this._activity,fileExplorer:this._fileExplorer,toast:this._toast.actions,skill:this._skill,mode:this._mode,scenariosURL:this._scenariosURL,loadFileTree:()=>this._loadFileTree(),restoreEditorAreaContent:()=>this._restoreEditorAreaContent(),showToolConfirm:i=>this._showToolConfirm(i),showAskUser:i=>this._showAskUser(i),loadSessions:()=>{this._loadSessions()},onConnectionStateChange:i=>{this._connectionState=i,this.dispatchEvent(new CustomEvent("rtc-connection-state-change",{detail:{state:i},bubbles:!0,composed:!0}))},logger:un});this._connectionFailed=n.connectionFailed,this._connectionError=n.connectionError,n.rtcProcessor&&(this._rtcProcessor=n.rtcProcessor),n.unsubConnection&&((r=this._unsubConnection)==null||r.call(this),this._unsubConnection=n.unsubConnection),this._connectionState=n.connectionState}finally{this._connectGeneration===e?this._connecting=void 0:un.debug("Stale connection attempt resolved, skipping _connecting cleanup")}}_showToolConfirm(e){return NK(e,this.shadowRoot)}_showAskUser(e){return DK(e,this.shadowRoot)}disconnectedCallback(){var e,r,n,i;this.dispatchEvent(new CustomEvent("rtc-before-destroy",{bubbles:!0,composed:!0})),this._beforeMessageSendHook=void 0,super.disconnectedCallback(),this.removeEventListener("rtc-window-minimize",this._boundOnMinimize),this.removeEventListener("rtc-window-maximize",this._boundOnMaximize),this.removeEventListener("rtc-window-restore",this._boundOnRestore),this.removeEventListener("rtc-login-requested",this._boundOnLoginRequested),this.removeEventListener("rtc-new-session",this._boundOnNewSession),this.removeEventListener("rtc-auth-logout",this._boundOnLogout),this.removeEventListener("rtc-input-submit",this._boundOnInputSubmit),this.removeEventListener("rtc-stop-requested",this._boundOnStopRequested),this.removeEventListener("rtc-user-message-resend",this._boundOnResendMessage),this.removeEventListener("rtc-fork-initiated",this._boundOnForkInitiated),this.removeEventListener("rtc-session-delete-requested",this._boundOnSessionDeleteRequested),this.removeEventListener("rtc-session-rename-confirmed",this._boundOnSessionRenameConfirmed),this.removeEventListener("rtc-toast-requested",this._boundOnToastRequested),this.removeEventListener("rtc-toast-close",this._boundOnToastClose),this.removeEventListener("rtc-command-requested",this._boundOnCommandRequested),this.removeEventListener("activity-change",this._boundOnActivityChange),this.removeEventListener("file-select",this._boundOnFileSelect),this.removeEventListener("folder-toggle",this._boundOnFolderToggle),this.removeEventListener("editor-area-save",this._boundOnEditorAreaSave),this.removeEventListener("editor-area-tab-close",this._boundOnEditorAreaTabClose),this.removeEventListener("editor-area-tab-select",this._boundOnEditorAreaTabSelect),this.removeEventListener("editor-area-content-change",this._boundOnEditorAreaContentChange),this.removeEventListener("editor-area-view-mode-change",this._boundOnEditorAreaViewModeChange),this.removeEventListener("editor-area-cursor-move",this._boundOnEditorAreaCursorMove),this.removeEventListener("editor-area-restore-default",this._boundOnEditorAreaRestoreDefault),this.removeEventListener("refresh-requested",this._boundOnFileExplorerRefresh),this.removeEventListener("rtc-chat-layout-session-select",this._boundOnChatLayoutSessionSelect),this.removeEventListener("rtc-chat-layout-tab-activate",this._boundOnChatLayoutTabActivate),this.removeEventListener("rtc-chat-layout-tab-close",this._boundOnChatLayoutTabClose),this.removeEventListener("rtc-drawer-close",this._boundOnDrawerClose),this.removeEventListener("keydown",this._boundOnKeydown),this.removeEventListener("wheel",this._boundOnWheel),(e=this._busUnsubMessage)==null||e.call(this),(r=this._busUnsubBulkUpdate)==null||r.call(this),(n=this._busUnsubGapFill)==null||n.call(this),this._rtcProcessor=void 0,(i=this._unsubConnection)==null||i.call(this),this._auth.onLogin=void 0,this._connectGeneration++,this._connecting=void 0;for(const s of this._autoSaveTimers.values())clearTimeout(s);this._autoSaveTimers.clear()}updated(){this.updateComplete.then(()=>{this._sessionProvider.setValue(this._session.value),this._messageProvider.setValue(this._message.value),this._toolCallProvider.setValue(this._toolCall.value),this._authProvider.setValue(this._auth.value),this._modeProvider.setValue(this._mode.value),this._windowStateProvider.setValue(this._windowState.value),this._skillProvider.setValue(this._skill.value),this._activityProvider.setValue(this._activity.value),this._fileExplorerProvider.setValue(this._fileExplorer.value),this._sessionTreeProvider.setValue(this._sessionTree.value),this._sessionTabProvider.setValue(this._sessionTab.value),this._settingsProvider.setValue(this._settings.value),this._notificationProvider.setValue(this._notification.value),this._localeProvider.setValue({locale:wy(),setLocale:Ru,locales:[tr,...Kr]})}).catch(n=>{un.error("Context provider sync failed:",n)}),this._sessionTab.value.state.tabs.length===0&&!this._creatingUnsavedTab&&this._initialSessionLoadDone&&(un.debug("No tabs left, auto-creating unsaved tab"),this._creatingUnsavedTab=!0,queueMicrotask(()=>{try{const n=this._session.actions.createSession();this._session.actions.switchSession(n),this._sessionTab.actions.openOrActivate(n,Xe("未命名"),{isUnsaved:!0})}finally{this._creatingUnsavedTab=!1}})),this._rtcProcessor&&this._rtcProcessor.setMode(this._mode.value.state.currentMode);const r=this._windowState.value.state.mode;r!==this._appliedMode&&(this._appliedMode=r,this.setAttribute("data-mode",r),this._handleModeTransition(r)),r!=="normal"?this._interaction.value.actions.disable():this._interaction.value.actions.enable(),this._windowState.applyGeometry(this)}firstUpdated(){var r;if(!this._windowState.restored){const n=parseInt(getComputedStyle(this).getPropertyValue("--rtc-window-default-width"))||420,i=parseInt(getComputedStyle(this).getPropertyValue("--rtc-window-default-height"))||640,s=window.innerWidth-n-rO,a=window.innerHeight-i-rO;this._windowState.actions.setPosition({x:s,y:a})}const e=(r=this.shadowRoot)==null?void 0:r.querySelector("rtc-title-bar");e&&(this._interaction.bindElements(this,e),this._windowState.value.state.mode==="normal"&&this._interaction.value.actions.enable()),E$(),this.dispatchEvent(new CustomEvent("rtc-agent-ready",{bubbles:!0,composed:!0}))}async _beforeMessageSend(e){if(this._beforeMessageSendHook)try{if(await this._beforeMessageSendHook(e)===!1)return!1}catch(i){un.error("beforeMessageSend hook failed:",i)}const r=new CustomEvent("rtc-before-message-send",{detail:e,bubbles:!0,composed:!0,cancelable:!0});return!!this.dispatchEvent(r)}_handleConnectionRetry(){un.info("Connection retry requested by user"),this.reconnect()}_handleModeTransition(e){this.updateComplete.then(()=>{var r,n;if(e==="minimized"){const i=(r=this.shadowRoot)==null?void 0:r.querySelector(".bubble");i==null||i.focus()}else{const i=(n=this.shadowRoot)==null?void 0:n.querySelector("rtc-title-bar");i==null||i.focus()}}).catch(r=>{un.error("Mode transition focus failed:",r)}),this._appliedMode==="minimized"&&e!=="minimized"&&this._notification.actions.markAsRead(),this._modeAnnouncement=QK[e]}_handleBubbleClick(){this._windowState.actions.restore(),this._notification.actions.markAsRead()}_handleBubbleKeydown(e){(e.key==="Enter"||e.key===" ")&&(e.preventDefault(),this._windowState.actions.restore(),this._notification.actions.markAsRead())}_findScrollableParent(e){let r=e;for(;r&&r!==this;){const n=getComputedStyle(r),i=n.overflowY,s=n.overflowX,a=(i==="auto"||i==="scroll")&&r.scrollHeight>r.clientHeight,l=(s==="auto"||s==="scroll")&&r.scrollWidth>r.clientWidth;if(a||l)return r;if(r.parentElement)r=r.parentElement;else{const c=r.getRootNode();if(c instanceof ShadowRoot&&c.host!==this)r=c.host;else break}}return null}_handleLoginRequested(e){var i;const r=e,n=((i=r==null?void 0:r.detail)==null?void 0:i.provider)??"mock";this._selectedProvider=n,this._showLoginDialog=!0}_handleLoginComplete(e){const{accessToken:r,refreshToken:n,userId:i,expiresIn:s}=e.detail;this._auth.setTokens({accessToken:r,refreshToken:n,userId:i,expiresIn:s}),this._showLoginDialog=!1}_handleLoginDialogClose(){this._showLoginDialog=!1}async _refreshTurnCounts(){const e=this._session.value.state.currentSessionId;if(!e||!this._persistence.layer){this._turnCountProvider.setValue(hf);return}try{const r=await this._persistence.layer.getSession(e);if(!r){this._turnCountProvider.setValue(hf);return}this._turnCountProvider.setValue({pendingTurnCount:r.pending_turn_count,runningTurnCount:r.running_turn_count})}catch(r){un.warn("Failed to refresh turn counts:",r),this._turnCountProvider.setValue(hf)}}async _loadSessions(){try{const e=await VK(this._initialSessionLoadDone,{persistenceLayer:this._persistence.layer,session:this._session,sessionTree:this._sessionTree,sessionTab:this._sessionTab,logger:un});this._initialSessionLoadDone=e}catch(e){un.warn("Failed to load sessions:",e)}}async _handleCommand(e,r){await IK(e,r,{persistenceLayer:this._persistence.layer,currentSessionId:this._session.value.state.currentSessionId,toast:this._toast.actions,logger:un})}get _vfsDeps(){return{persistenceIsConnected:this._persistence.isConnected,fileExplorer:this._fileExplorer,editorArea:this._editorArea,toast:this._toast.actions,settingsDefaultViewMode:this._settings.value.state.files.defaultViewMode,logger:un}}async _loadFileTree(){await RK(this._vfsDeps)&&(this._fileTreeLoaded=!0)}async _loadFolderChildren(e){await LK(e,this._vfsDeps)}async _handleFileOpen(e){await FK(e,this._vfsDeps)}async _restoreEditorAreaContent(){await jK(this._fileTreeLoaded,this._vfsDeps)}async _handleEditorSave(e){const r=this._autoSaveTimers.get(e);r&&(clearTimeout(r),this._autoSaveTimers.delete(e)),await qK(e,this._vfsDeps)}_scheduleAutoSave(e){const r=this._autoSaveTimers.get(e);r&&clearTimeout(r);const n=setTimeout(()=>{this._autoSaveTimers.delete(e),this._handleEditorSave(e)},eH);this._autoSaveTimers.set(e,n)}async _handleFileChange(e,r){await $K(e,r,this._fileTreeLoaded,this._vfsDeps,()=>this._loadFileTree(),n=>this._loadFolderChildren(n))}async _sanitizeBubbleIcon(e){try{const{default:r}=await Promise.resolve().then(()=>D_);return r.sanitize(e,{ALLOWED_TAGS:["svg","path","g","circle","rect","line","polyline","polygon","text","use"],ALLOWED_ATTR:["viewBox","d","xmlns","fill","stroke","stroke-width","class","width","height","transform","cx","cy","r","x","y","x1","y1","x2","y2","points","dx","dy","text-anchor","font-size","href"]})}catch{const r=document.createElement("div");return r.textContent=e,r.innerHTML}}_renderBubbleContent(){return this.bubbleIcon?Tt`<span class="bubble-icon" .innerHTML=${this._sanitizedBubbleIcon}></span>`:Tt`<span class="bubble-logo">${A$(this.theme==="dark")}</span>`}willUpdate(e){e.has("bubbleIcon")&&this.bubbleIcon&&this._sanitizeBubbleIcon(this.bubbleIcon).then(r=>{this._sanitizedBubbleIcon=r,this.requestUpdate()}).catch(r=>{un.error("Bubble icon sanitization failed:",r),this._sanitizedBubbleIcon=""}),e.has("theme")&&this.dispatchEvent(new CustomEvent("rtc-theme-change",{detail:{theme:this.theme},bubbles:!0,composed:!0}))}render(){const e=this._auth.value.state.isLoggedIn,r=this._windowState.value.state.mode,n=this._activity.active,i=this._activity.sidebarVisible;return Tt`
|
|
11326
|
+
`}};ba.styles=[as,os,ls,cs,xK],ba.shadowRootOptions={...Nr.shadowRootOptions,delegatesFocus:!0},Zo([Bt({type:String,reflect:!0})],ba.prototype,"theme",2),Zo([Bt({type:String,attribute:"version"})],ba.prototype,"version",2),Zo([Bt({type:Boolean,attribute:!1})],ba.prototype,"sidebarVisible",2),Zo([Ar({context:yf,subscribe:!0}),Bt({attribute:!1})],ba.prototype,"_settingsCtx",2),Zo([Ar({context:Wx,subscribe:!0}),Bt({attribute:!1})],ba.prototype,"_authCtx",2),Zo([Ar({context:sn,subscribe:!0}),Kt()],ba.prototype,"_localeCtx",2),Zo([Kt()],ba.prototype,"_activeCategory",2),Zo([Kt()],ba.prototype,"_liveMessage",2),ba=Zo([ln(),$r("rtc-settings-layout")],ba);async function IK(t,e,r){switch(t){case"compact":await OK(e,r);break;default:r.toast.show(Xe(Vr`未知命令: /${t}`),"error");break}}async function OK(t,e){const{persistenceLayer:r,currentSessionId:n,toast:i,logger:s}=e;if(!n){i.show(Xe("没有活动的会话"),"error");return}if(!r){i.show(Xe("服务未连接"),"error");return}i.show(Xe("正在压缩上下文..."),"info");try{await r.compactSession(n,t)}catch(a){s.error("/compact failed:",a);const l=a instanceof Error?a.message:Xe("压缩上下文失败");i.show(l,"error")}}function NK(t,e){return new Promise(r=>{const n=document.createElement("rtc-tool-confirm");n.toolCall={id:t.client_id,toolName:t.tool_name,parameters:t.parameters,status:"pending"};const i=()=>{n.removeEventListener("rtc-tool-call-approved",s),n.removeEventListener("rtc-tool-call-denied",a),n.remove()},s=()=>{i(),r(!0)},a=()=>{i(),r(!1)};n.addEventListener("rtc-tool-call-approved",s),n.addEventListener("rtc-tool-call-denied",a),e.appendChild(n)})}function DK(t,e){return new Promise(r=>{const n=document.createElement("rtc-ask-user");n.rtc=t;const i=()=>{n.removeEventListener("rtc-ask-user-submit",s),n.removeEventListener("rtc-ask-user-dismiss",a),n.remove()},s=l=>{const c=l.detail;i(),r(c.payload)},a=()=>{i(),r(null)};n.addEventListener("rtc-ask-user-submit",s),n.addEventListener("rtc-ask-user-dismiss",a),e.appendChild(n)})}function MK(t,e){return new Promise(r=>{const n=document.createElement("rtc-restore-confirm");n.filePath=t;const i=()=>{n.removeEventListener("rtc-restore-confirmed",s),n.removeEventListener("rtc-restore-cancelled",a),n.remove()},s=()=>{i(),r(!0)},a=()=>{i(),r(!1)};n.addEventListener("rtc-restore-confirmed",s),n.addEventListener("rtc-restore-cancelled",a),e.appendChild(n)})}async function RK(t){if(!t.persistenceIsConnected)return!1;try{const e=await BK("/");return t.fileExplorer.actions.setRoot(e),!0}catch(e){return t.logger.error("Failed to load file tree:",e),!1}}async function BK(t){const e=t==="/"?"/":t.split("/").pop(),r=t==="/",n=[];try{const i=await Wr.ls(t);for(const s of i){const a=r?`/${s}`:`${t}/${s}`;await Wr.exists(a)?n.push({path:a,name:s,type:"file"}):n.push({path:a,name:s,type:"folder"})}}catch{}return{path:t,name:e,type:"folder",children:n}}async function LK(t,e){if(e.persistenceIsConnected){e.logger.debug("loadFolderChildren called for:",t),e.fileExplorer.actions.setLoading(t,!0);try{const r=await Wr.ls(t),n=[];for(const i of r){const s=t==="/"?`/${i}`:`${t}/${i}`;await Wr.exists(s)?n.push({path:s,name:i,type:"file"}):n.push({path:s,name:i,type:"folder"})}e.fileExplorer.actions.updateChildren(t,n)}catch(r){e.logger.error("Failed to load folder children:",t,r)}finally{e.fileExplorer.actions.setLoading(t,!1)}}}async function FK(t,e){try{const r=await Wr.read(t);e.editorArea.actions.openFile(t,r,e.settingsDefaultViewMode),e.fileExplorer.actions.selectNode(t)}catch(r){e.logger.error("Failed to open file:",t,r),e.toast.show(Xe("打开文件失败"),"error")}}async function jK(t,e){const r=[...e.editorArea.tabs];if(r.length===0)return;const n=e.editorArea.activeFilePath;e.logger.debug("Restoring editor area content for",r.length,"tabs");for(const i of r)try{const s=await Wr.read(i.filePath);e.editorArea.actions.loadContent(i.filePath,s)}catch{e.logger.warn("Restored tab file not found in VFS, closing:",i.filePath),e.editorArea.actions.closeFile(i.filePath)}n&&t&&e.fileExplorer.actions.selectNode(n)}async function qK(t,e){const r=e.editorArea.tabs.find(n=>n.filePath===t);if(r)try{await Wr.write(t,r.content,"overwrite",{editedByUser:!0}),e.editorArea.actions.saveFile(t),e.toast.show(Xe("已保存"),"success")}catch(n){e.logger.error("Failed to save file:",t,n),e.toast.show(Xe("保存文件失败"),"error")}}async function $K(t,e,r,n,i,s){if(e==="batch"){r&&i();return}const a=t.lastIndexOf("/"),l=a<=0?"/":t.substring(0,a);if(r&&(l==="/"?i():s(l)),e==="write"||e==="create"){const c=n.editorArea.tabs.find(u=>u.filePath===t);if(c&&!c.isDirty)try{const u=await Wr.read(t);n.editorArea.actions.openFile(t,u)}catch{}else c!=null&&c.isDirty&&n.toast.show(Xe(Vr`文件 ${t} 被其他标签页修改`),"info")}else e==="delete"&&n.editorArea.tabs.find(u=>u.filePath===t)&&(n.editorArea.actions.closeFile(t),n.toast.show(Xe(Vr`文件 ${t} 已被删除`),"info"))}async function UK(t,e){const r=e.persistence.workerBridge;if(!r)return{success:!1,error:"Persistence not connected"};try{let n=null;if(t==="/AGENT.md"||t.startsWith("/functions/")){const i=e.skill.actions.getRegistry();if(!i)return{success:!1,error:"Registry not available"};const a=i.generateAllDocsContent(0).find(l=>l.path===t);a&&(n=a.content)}else if(t.startsWith("/scenarios/")){if(!e.scenariosURL)return{success:!1,error:"Scenarios URL not configured"};const{loadScenariosContent:i}=await Promise.resolve().then(()=>mq),a=(await i(e.scenariosURL)).find(l=>l.path===t);a&&(n=a.content)}return n===null?{success:!1,error:"Cannot determine default content for this file"}:(await r.core.virtualFSWrite(t,n,"overwrite",{editedByUser:!1}),e.editorArea.actions.loadContent(t,n),e.logger.info("Restored file to default:",t),{success:!0})}catch(n){return e.logger.error("Failed to restore default:",t,n),{success:!1,error:n instanceof Error?n.message:String(n)}}}async function VK(t,e){if(!e.persistenceLayer)return t;const r=await e.persistenceLayer.listSessions();e.logger.debug("Loaded sessions from DB:",r.length);const n=r.map(y=>({clientId:y.client_id,deviceId:y.device_id,title:y.title||"",createdAt:new Date(y.created_at).getTime(),updatedAt:new Date(y.updated_at).getTime(),todoList:y.todo_list,rootClientSessionId:y.root_client_session_id,status:y.status,totalInputTokens:y.total_input_tokens,totalOutputTokens:y.total_output_tokens,totalTokens:y.total_tokens,currentContextTokens:y.current_context_tokens,totalCachedReadTokens:y.total_cached_read_tokens,totalCachedWriteTokens:y.total_cached_write_tokens,totalReasoningTokens:y.total_reasoning_tokens,totalCostUsd:y.total_cost_usd,lastTokenUpdateAt:y.last_token_update_at,compressionThreshold:y.compression_threshold,compressionProgress:y.compression_progress,roundsUntilCompression:y.rounds_until_compression,estimatedNextRoundTokens:y.estimated_next_round_tokens}));e.session.actions.setSessions(n),e.sessionTree.actions.rebuildTree(n);let i=t;if(!i){const y=n.filter(k=>k.status!=="closed").sort((k,A)=>(A.updatedAt??0)-(k.updatedAt??0)),_=e.sessionTab.actions.getStoredActiveSessionId();for(const k of y){const A=k.title||Xe("未命名"),P=k.clientId===_;e.sessionTab.actions.openOrActivate(k.clientId,A,{activate:P,skipPersist:!0})}if(e.logger.debug("Restored tabs from DB:",y.length,"storedActiveId:",_),e.sessionTab.value.state.activeSessionId===null&&y.length>0){const k=y[0].clientId;e.logger.debug("Active tab is null, falling back to first tab:",k),e.sessionTab.actions.setActiveTab(k)}}const s=new Set(n.map(y=>y.clientId)),a=e.sessionTab.filterInvalidTabs(s);e.logger.debug("filterInvalidTabs:",a?"removed some":"none removed"),e.logger.debug("Tabs after filter:",e.sessionTab.value.state.tabs.map(y=>`${y.sessionId}="${y.title}"`)),e.logger.debug("activeSessionId:",e.sessionTab.value.state.activeSessionId);const l=e.sessionTab.value.state.activeSessionId,c=e.session.value.state.currentSessionId;c!==l&&(e.logger.debug("Syncing currentSessionId:",c,"->",l),l?e.session.actions.switchSession(l):e.session.actions.clearCurrentSession());const u=new Map(n.map(y=>[y.clientId,y.title])),d=e.sessionTab.updateTabTitles(u);e.logger.debug("updateTabTitles:",d?"updated":"no change"),e.logger.debug("Tabs after title sync:",e.sessionTab.value.state.tabs.map(y=>`${y.sessionId}="${y.title}"`));const m=new Map(n.filter(y=>y.status).map(y=>[y.clientId,y.status]));if(m.size>0&&e.sessionTab.syncTabStatuses(m),!i){i=!0;const y=e.sessionTab.value.state.tabs.length>0;if(e.logger.debug("Initial load: hasOpenTabs=",y,"currentSessionId=",e.session.value.state.currentSessionId),y&&!e.session.value.state.currentSessionId){const _=e.sessionTab.value.state.activeSessionId,k=_??(n.length>0?n.reduce((A,P)=>A.updatedAt>P.updatedAt?A:P).clientId:null);k&&(e.logger.debug("Auto-selecting session:",k,"(from activeTabId:",_,")"),e.session.actions.switchSession(k))}}return i}async function zK(t){try{if(await t.persistence.connect(),t.persistence.layer){t.message.persistence=t.persistence.layer,t.session.persistence=t.persistence.layer,t.notification.persistence=t.persistence.layer,t.activity.active==="files"&&await t.loadFileTree(),await t.restoreEditorAreaContent();const e=t.skill.actions.getRegistry();if(t.logger.debug("After connect, registry:",e?"set":"null"),e!=null&&e.generateAllDocsContent){const s=e.generateAllDocsContent(0);s.length>0&&t.persistence.workerBridge&&(await t.persistence.workerBridge.core.batchWriteFiles(s),t.logger.debug("batchWriteFiles completed"))}if(t.scenariosURL)try{const s=await Iy(t.scenariosURL);t.persistence.workerBridge&&await t.persistence.workerBridge.core.batchWriteFiles(s),t.logger.info(`Re-loaded ${s.length} scenarios from ${t.scenariosURL}`)}catch(s){t.logger.warn(`Failed to re-load scenarios from ${t.scenariosURL}:`,s)}const r=await WK(t.persistence.layer,t),{unsubConnection:n,connectionState:i}=await KK(t);return t.loadSessions(),{connectionFailed:!1,connectionError:"",rtcProcessor:r,unsubConnection:n,connectionState:i}}return{connectionFailed:!1,connectionError:"",connectionState:"disconnected"}}catch(e){const r=e instanceof Error?e.message:String(e);return t.logger.error("Connection failed:",r),t.toast.show(Xe(Vr`连接失败: ${r}`),"error"),{connectionFailed:!0,connectionError:r,connectionState:"disconnected"}}}async function WK(t,e){const r=new Ej(t);r.setConfirmDialog(i=>e.showToolConfirm(i)),r.setAskUserDialog(i=>e.showAskUser(i)),r.setMode(e.mode.value.state.currentMode);const n=e.persistence.masterLock;if(n){r.setMaster(n);const i=n.onAcquire;n.onAcquire=()=>{i==null||i(),r.onRtcUpdate().catch(s=>{e.logger.error("onRtcUpdate on master acquire failed:",s)})}}return await r.onRtcUpdate(),r}async function KK(t){let r=await t.persistence.getConnectionState();return{unsubConnection:t.persistence.onConnectionStateChange(i=>{var s;r=i.state,(s=t.onConnectionStateChange)==null||s.call(t,i.state)}),connectionState:r}}const HK=new Set(["title","status","deleted_at","root_client_session_id","created_at","updated_at"]);function GK(t,e){var m,y;const{message:r,session:n,sessionTab:i,persistence:s,getRtcProcessor:a,loadSessions:l,refreshTurnCounts:c,handleFileChange:u,log:d}=e;if(t.entity==="message")return r.updateMessageFromBus(t.entityId);if(t.entity==="session"){YK(t,n,i,l,c,d);return}if(t.entity==="rtc"){if(((m=s.masterLock)==null?void 0:m.isMaster)===!1)return;(y=a())==null||y.onRtcUpdate();return}if(t.entity==="file"){u(t.entityId,t.field??"");return}}function YK(t,e,r,n,i,s){(t.action==="created"||!t.field||HK.has(t.field))&&n(),t.field==="status"&&JK(t,e,r,s),(t.field==="pending_turn_count"||t.field==="running_turn_count")&&i()}function JK(t,e,r,n){const i=t.oldValue,s=t.newValue,a=t.entityId;if(s){if(s==="closed"){n.debug("Session closed, closing tab:",a),r.actions.closeTab(a);return}if(i==="closed"&&(s==="idle"||s==="active")){n.debug("Session reopened, creating tab:",a);const l=e.value.state.sessions.find(u=>u.clientId===a),c=(l==null?void 0:l.title)||Xe("未命名");r.actions.openOrActivate(a,c,{activate:!1});return}r.actions.updateTabStatus(a,s)}}var XK=Object.defineProperty,ZK=Object.getOwnPropertyDescriptor,zn=(t,e,r,n)=>{for(var i=n>1?void 0:n?ZK(e,r):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(i=(n?a(e,r,i):a(i))||i);return n&&i&&XK(e,r,i),i};const un=ar("RtcAgent"),QK={normal:"Window restored",maximized:"Window maximized",minimized:"Window minimized"},eH=1e3,rO=20;er.RtcAgent=class extends Nr{constructor(){super(...arguments),this.theme="system",this._lang="",this.appLabel="RTC Agent",this.bubbleIcon="",this._agentConfig=null,this._serverURL="",this._redirectURI="",this._scenariosURL="",this._databaseName="",this._workerUrl="",this._windowConfig=null,this._activityBarConfig=null,this._resolvedActivityBarConfig=r3(),this._resolvedWindowConfig=t3(),this._windowState=new F5(this,this._resolvedWindowConfig),this._auth=new j5(this),this._persistence=new d1(this,this._auth),this._session=new q5(this),this._message=new V5(this),this._mode=new K5(this),this._toolCall=new H5(this),this._interaction=new J5(this,{draggable:this._resolvedWindowConfig.draggable,resizable:this._resolvedWindowConfig.resizable}),this._skill=new fI(this,{onToast:(e,r)=>this._toast.actions.show(e,r),onConfirmRequest:(e,r,n)=>{const i=window.confirm(n);this._skill.respondToConfirm(e,i)}}),this._toast=new Ij(this),this._fork=new Wj(this),this._activity=new Kj(this),this._fileExplorer=new Hj(this),this._editorArea=new Gj(this),this._statusBar=new Jj(this,this._editorArea),this._sessionTree=new Xj(this),this._sessionTab=new Zj(this),this._settings=new Qj(this),this._notification=new g1(this),this._fileTreeLoaded=!1,this._modeAnnouncement="",this._showLoginDialog=!1,this._selectedProvider="mock",this._connectionState="disconnected",this._connectionFailed=!1,this._connectionError="",this._connectGeneration=0,this._appliedMode="normal",this._creatingUnsavedTab=!1,this._initialSessionLoadDone=!1,this._localeInitialized=!1,this._autoSaveTimers=new Map,this._boundOnMinimize=()=>this._windowState.actions.minimize(),this._boundOnMaximize=()=>this._windowState.actions.maximize(),this._boundOnRestore=()=>this._windowState.actions.restore(),this._boundOnLoginRequested=e=>this._handleLoginRequested(e),this._boundOnNewSession=()=>{this._fork.actions.clearFork(),this._session.value.state.currentSessionId||this._message.actions.clearMessages()},this._boundOnLogout=()=>{var e;for(const r of this._autoSaveTimers.values())clearTimeout(r);this._autoSaveTimers.clear(),this._fileTreeLoaded=!1,this._initialSessionLoadDone=!1,this._editorArea.actions.closeAll(),this._sessionTab.actions.clearAll(),this._activity.actions.setActivity("chat"),this._fork.actions.clearFork(),this._rtcProcessor=void 0,(e=this._unsubConnection)==null||e.call(this),this._unsubConnection=void 0,this._connectGeneration++,this._connecting=void 0,this._persistence.disconnect(),this._session.actions.reset(),this._message.actions.clearMessages()},this._boundOnInputSubmit=async e=>{const n=e.detail.contentData,s=(c=>typeof c=="string"?c:"")(n.data),a={message:{content:s,metadata:void 0}};if(await this._beforeMessageSend(a)){a.message.content!==s&&(n.data=a.message.content);try{this._fork.isActive?await this._fork.actions.submitFork(n):await this._message.actions.sendMessage(n);const c=this._session.value.state.currentSessionId;c&&this._sessionTab.actions.markSaved(c)}catch(c){un.error("message submit failed:",c)}}},this._boundOnForkInitiated=e=>{const{oldSessionClientId:r,oldMessageClientId:n,newSessionClientId:i,content:s}=e.detail;this._fork.actions.requestFork(r,n,i,s)},this._boundOnKeydown=e=>{if(e.key==="Escape"&&this._fork.isActive){this._fork.actions.clearFork(),this.dispatchEvent(new CustomEvent("rtc-clear-active-input"));return}if(!(this._activity.active!=="files"||!(e.metaKey||e.ctrlKey))){if(e.key==="s"||e.key==="S"){const n=this._editorArea.state.activeFilePath;n&&(e.preventDefault(),this._handleEditorSave(n))}else if(e.key==="w"||e.key==="W"){const n=this._editorArea.state.activeFilePath;n&&(e.preventDefault(),this._editorArea.actions.closeFile(n))}}},this._boundOnStopRequested=e=>{const r=e.detail;this._persistence.layer&&this._persistence.layer.stopTurn(r.sessionClientId)},this._boundOnResendMessage=e=>{const n=e.detail.message;n!=null&&n.clientId&&(n!=null&&n.content)&&this._message.actions.resendMessage(n.clientId,n.content)},this._boundOnSessionDeleteRequested=async e=>{const{sessionId:r}=e.detail;un.debug("session delete requested:",r);const n=await this._session.actions.deleteSession(r);if(n.ok)this._toast.actions.show(Xe("会话已删除"),"success");else{const i={"delete-failed":Xe("删除失败,请稍后重试")};this._toast.actions.show(i[n.error??""]??n.error??Xe("删除失败"),"error")}},this._boundOnSessionRenameConfirmed=async e=>{const{sessionId:r,title:n}=e.detail;if(!n.trim())return;const i=await this._session.actions.renameSession(r,n.trim());if(!i.ok){const s={"rename-failed":Xe("重命名失败,请稍后重试")};this._toast.actions.show(s[i.error??""]??i.error??Xe("重命名失败"),"error")}},this._boundOnToastRequested=e=>{const r=e.detail;this._toast.actions.show(r.message,r.type)},this._boundOnToastClose=e=>{const r=e.detail;this._toast.actions.remove(r.id)},this._boundOnCommandRequested=e=>{const r=e.detail;this._handleCommand(r.name,r.args)},this._boundOnActivityChange=e=>{const{activity:r,toggleSidebar:n}=e.detail;n?this._activity.actions.toggleSidebar():(this._activity.actions.setActivity(r),r==="settings"&&this._activity.actions.showSidebar(),r==="files"&&!this._fileTreeLoaded&&this._persistence.isConnected&&this._loadFileTree())},this._boundOnFileSelect=e=>{const{path:r}=e.detail;this._handleFileOpen(r)},this._boundOnFolderToggle=e=>{const{path:r}=e.detail;this._fileExplorer.value.isExpanded(r)&&(un.debug("_boundOnFolderToggle: loading children for",r),this._loadFolderChildren(r))},this._boundOnEditorAreaSave=e=>{const{filePath:r}=e.detail;this._handleEditorSave(r)},this._boundOnEditorAreaTabClose=e=>{const{filePath:r}=e.detail,n=this._autoSaveTimers.get(r);n&&(clearTimeout(n),this._autoSaveTimers.delete(r)),this._editorArea.actions.closeFile(r)},this._boundOnEditorAreaTabSelect=e=>{const{filePath:r}=e.detail;this._editorArea.actions.switchTab(r)},this._boundOnEditorAreaContentChange=e=>{const{filePath:r,content:n}=e.detail;this._editorArea.actions.updateContent(r,n),this._settings.value.state.files.autoSave&&this._scheduleAutoSave(r)},this._boundOnEditorAreaViewModeChange=e=>{const{filePath:r,viewMode:n}=e.detail;this._editorArea.actions.setViewMode(r,n)},this._boundOnEditorAreaCursorMove=e=>{const r=e.detail,n=this._editorArea.activeFilePath;n&&this._editorArea.actions.setCursorPosition(n,r)},this._boundOnEditorAreaRestoreDefault=async e=>{const{filePath:r}=e.detail;if(!await MK(r,this.shadowRoot))return;const i=await UK(r,{persistence:this._persistence,editorArea:this._editorArea,skill:this._skill,scenariosURL:this._scenariosURL,toast:this._toast.actions,logger:un});i.success?this._toast.actions.show(Xe("已恢复默认内容"),"success"):this._toast.actions.show(i.error??Xe("恢复失败"),"error")},this._boundOnFileExplorerRefresh=()=>{this._loadFileTree()},this._boundOnChatLayoutSessionSelect=e=>{const{sessionId:r}=e.detail;un.debug("chat-layout session selected:",r)},this._boundOnChatLayoutTabActivate=e=>{const{sessionId:r}=e.detail;un.debug("chat-layout tab activated:",r)},this._boundOnChatLayoutTabClose=e=>{const{sessionId:r}=e.detail;un.debug("chat-layout tab closed:",r)},this._boundOnDrawerClose=()=>{this._activity.actions.hideSidebar()},this._boundOnWheel=e=>{const r=e.composedPath()[0],n=r instanceof Element?r:null,i=n?this._findScrollableParent(n):null;if(!i){e.preventDefault(),e.stopPropagation();return}const{scrollTop:s,scrollHeight:a,clientHeight:l,scrollLeft:c,scrollWidth:u,clientWidth:d}=i,m=s<=0,y=Math.ceil(s+l)>=a,_=e.deltaY<0,k=e.deltaY>0,A=a>l,P=c<=0,O=Math.ceil(c+d)>=u,w=e.deltaX<0||e.shiftKey&&e.deltaY<0,C=e.deltaX>0||e.shiftKey&&e.deltaY>0,T=u>d;(A&&(m&&_||y&&k)||T&&(P&&w||O&&C))&&(e.preventDefault(),e.stopPropagation())},this._isSyncing=!1,this._sessionProvider=new ss(this,{context:Lg,initialValue:this._session.value}),this._messageProvider=new ss(this,{context:Gx,initialValue:this._message.value}),this._toolCallProvider=new ss(this,{context:Jx,initialValue:this._toolCall.value}),this._authProvider=new ss(this,{context:Wx,initialValue:this._auth.value}),this._modeProvider=new ss(this,{context:Yx,initialValue:this._mode.value}),this._windowStateProvider=new ss(this,{context:s5,initialValue:this._windowState.value}),this._turnCountProvider=new ss(this,{context:Xx,initialValue:hf}),this._skillProvider=new ss(this,{context:Qx,initialValue:Zx}),this._activityProvider=new ss(this,{context:d5,initialValue:this._activity.value}),this._fileExplorerProvider=new ss(this,{context:jg,initialValue:this._fileExplorer.value}),this._sessionTreeProvider=new ss(this,{context:Hx,initialValue:this._sessionTree.value}),this._sessionTabProvider=new ss(this,{context:Fg,initialValue:this._sessionTab.value}),this._settingsProvider=new ss(this,{context:yf,initialValue:this._settings.value}),this._notificationProvider=new ss(this,{context:p5,initialValue:this._notification.value}),this._localeProvider=new ss(this,{context:sn,initialValue:{locale:tr,setLocale:Ru,locales:[tr,...Kr]}}),this._sanitizedBubbleIcon=""}set lang(e){const r=this._lang;e&&Sp(e)&&e!==r&&(this._lang=e,Ru(e),this._localeProvider.setValue({locale:e,setLocale:Ru,locales:[tr,...Kr]}))}get lang(){return this._lang||wy()}set registry(e){e&&(un.info("registry setter called, isConnected:",this._persistence.isConnected),this._skill.actions.setRegistry(e),this._persistence.isConnected&&this._persistence.layer&&this._regenerateDocsAfterRegistrySet())}get registry(){return this._skill.actions.getRegistry()}async _regenerateDocsAfterRegistrySet(){const e=this._skill.actions.getRegistry();if(e)try{const r=e.generateAllDocsContent(0);await this._persistence.workerBridge.core.batchWriteFiles(r),this._scenariosURL&&await this._loadScenarios(this._scenariosURL)}catch(r){un.warn("Failed to regenerate docs after registry set:",r)}}set agentConfig(e){this._agentConfig=e,e&&(this.registry=this._buildRegistryFromConfig(e))}get agentConfig(){return this._agentConfig}set serverURL(e){this._serverURL=e,B5(e)}get serverURL(){return this._serverURL}set redirectURI(e){this._redirectURI=e,L5(e)}get redirectURI(){return this._redirectURI}set scenariosURL(e){this._scenariosURL=e,e&&this._persistence.isConnected&&this._persistence.layer&&this._loadScenarios(e)}get scenariosURL(){return this._scenariosURL}set databaseName(e){this._databaseName=e,this._persistence.databaseName=e||void 0}get databaseName(){return this._databaseName}set workerUrl(e){this._workerUrl=e,this._persistence.workerUrl=e||void 0}get workerUrl(){return this._workerUrl}set windowConfig(e){this._windowConfig=e;const r=t3(e??void 0);this._resolvedWindowConfig=r,this._windowState.setConfig(r),this._interaction.setConfig({draggable:r.draggable,resizable:r.resizable}),this.requestUpdate()}get windowConfig(){return this._windowConfig}set activityBarConfig(e){this._activityBarConfig=e,this._resolvedActivityBarConfig=r3(e??void 0),this._resolvedActivityBarConfig.disabledActivities.includes(this._activity.active)&&this._activity.actions.setActivity(this._resolvedActivityBarConfig.defaultActivity),this.requestUpdate()}get activityBarConfig(){return this._activityBarConfig}async _loadScenarios(e){try{const r=await Iy(e);await this._persistence.workerBridge.core.batchWriteFiles(r),un.info(`Loaded ${r.length} scenarios from ${e}`)}catch(r){throw un.error("Failed to load scenarios:",r),r}}_buildRegistryFromConfig(e){const r=JI({name:e.name??this.appLabel,description:e.description??"",persona:e.persona??"",onError:e.onError});for(const n of e.groups??[]){const i=r.createGroup({name:n.name,description:n.description??""});for(const s of n.functions)i.register(s)}if(e.functions&&e.functions.length>0){const n=r.createGroup({name:"default",description:"Default functions"});for(const i of e.functions)n.register(i)}return r}get windowStateController(){return this._windowState}get authController(){return this._auth}get persistenceController(){return this._persistence}get sessionController(){return this._session}get messageController(){return this._message}get modeController(){return this._mode}get toolCallController(){return this._toolCall}get skillController(){return this._skill}get toastController(){return this._toast}get forkController(){return this._fork}get activityController(){return this._activity}get fileExplorerController(){return this._fileExplorer}get editorAreaController(){return this._editorArea}get statusBarController(){return this._statusBar}get sessionTreeController(){return this._sessionTree}get sessionTabController(){return this._sessionTab}get settingsController(){return this._settings}get notificationController(){return this._notification}async reconnect(){if(this._persistence.isConnected){un.warn("Already connected");return}await this._connectWithRetry()}get connectionFailed(){return this._connectionFailed}get connectionError(){return this._connectionError}connectedCallback(){super.connectedCallback(),this._localeInitialized||(this._localeInitialized=!0,II(this._lang||void 0)),this._fork.setDeps({clearMessages:()=>this._message.actions.clearMessages(),clearTransientParams:n=>this._sessionTab.actions.clearTransientParams(n),executeFork:n=>this._message.actions.forkSession(n)}),this._session.onSessionSwitch=()=>{un.debug("onSessionSwitch currentSessionId:",this._session.value.state.currentSessionId),this._fork.actions.clearFork();const n=this._session.value.state.currentSessionId;if(n){const i=this._message.repository.getSessionState(n);i.messages.length===0?(un.debug("onSessionSwitch calling message.reload() (empty repository)"),this._message.reload()):un.debug(`onSessionSwitch skipping reload (repo has ${i.messages.length} messages)`)}else un.debug("onSessionSwitch clearing messages (no current session)"),this._message.actions.clearMessages();this._refreshTurnCounts()},this._persistence.layer&&(this._message.persistence=this._persistence.layer,this._session.persistence=this._persistence.layer),this._message.sessionController=this._session,this._notification.sessionController=this._session,this._notification.messageController=this._message,this._notification.toastController=this._toast,this._notification.windowStateController=this._windowState,this._notification.settingsController=this._settings,this._persistence.layer&&(this._notification.persistence=this._persistence.layer),this.addEventListener("rtc-window-minimize",this._boundOnMinimize),this.addEventListener("rtc-window-maximize",this._boundOnMaximize),this.addEventListener("rtc-window-restore",this._boundOnRestore),this.addEventListener("rtc-login-requested",this._boundOnLoginRequested),this.addEventListener("rtc-new-session",this._boundOnNewSession),this.addEventListener("rtc-auth-logout",this._boundOnLogout),this.addEventListener("rtc-input-submit",this._boundOnInputSubmit),this.addEventListener("rtc-stop-requested",this._boundOnStopRequested),this.addEventListener("rtc-user-message-resend",this._boundOnResendMessage),this.addEventListener("rtc-session-delete-requested",this._boundOnSessionDeleteRequested),this.addEventListener("rtc-session-rename-confirmed",this._boundOnSessionRenameConfirmed),this.addEventListener("rtc-fork-initiated",this._boundOnForkInitiated),this.addEventListener("rtc-toast-requested",this._boundOnToastRequested),this.addEventListener("rtc-toast-close",this._boundOnToastClose),this.addEventListener("rtc-command-requested",this._boundOnCommandRequested),this.addEventListener("activity-change",this._boundOnActivityChange),this.addEventListener("file-select",this._boundOnFileSelect),this.addEventListener("folder-toggle",this._boundOnFolderToggle),this.addEventListener("editor-area-save",this._boundOnEditorAreaSave),this.addEventListener("editor-area-tab-close",this._boundOnEditorAreaTabClose),this.addEventListener("editor-area-tab-select",this._boundOnEditorAreaTabSelect),this.addEventListener("editor-area-content-change",this._boundOnEditorAreaContentChange),this.addEventListener("editor-area-view-mode-change",this._boundOnEditorAreaViewModeChange),this.addEventListener("editor-area-cursor-move",this._boundOnEditorAreaCursorMove),this.addEventListener("editor-area-restore-default",this._boundOnEditorAreaRestoreDefault),this.addEventListener("refresh-requested",this._boundOnFileExplorerRefresh),this.addEventListener("rtc-chat-layout-session-select",this._boundOnChatLayoutSessionSelect),this.addEventListener("rtc-chat-layout-tab-activate",this._boundOnChatLayoutTabActivate),this.addEventListener("rtc-chat-layout-tab-close",this._boundOnChatLayoutTabClose),this.addEventListener("rtc-drawer-close",this._boundOnDrawerClose),this.addEventListener("keydown",this._boundOnKeydown),this.addEventListener("wheel",this._boundOnWheel,{passive:!1});const e=Ad(),r={message:this._message,session:this._session,sessionTab:this._sessionTab,sessionTree:this._sessionTree,persistence:this._persistence,getRtcProcessor:()=>this._rtcProcessor,loadSessions:()=>this._loadSessions(),refreshTurnCounts:()=>this._refreshTurnCounts(),handleFileChange:(n,i)=>this._handleFileChange(n,i),log:un};if(this._busUnsubMessage=e.subscribe(n=>GK(n,r)),this._busUnsubBulkUpdate=e.onBulkUpdate(n=>{var i;un.debug("[BulkUpdate] rtc-agent received bulk-update, entities:",Array.from(n.entities)),n.entities.has("session")&&this._loadSessions(),n.entities.has("message")&&this._session.value.state.currentSessionId&&this._message.reload(),n.entities.has("turn")&&this._refreshTurnCounts(),n.entities.has("file")&&this._loadFileTree(),n.entities.has("rtc")&&((i=this._rtcProcessor)==null||i.onRtcUpdate())}),this._busUnsubGapFill=e.onGapFillState(n=>{var i;un.debug("[BulkUpdate] rtc-agent gap fill state:",n),this._isSyncing=n,this.requestUpdate(),n||(un.debug("[BulkUpdate] gap fill ended, reloading all data"),this._loadSessions(),this._session.value.state.currentSessionId&&this._message.reload(),this._refreshTurnCounts(),this._loadFileTree(),(i=this._rtcProcessor)==null||i.onRtcUpdate())}),this._interaction.onPositionChange=(n,i)=>{this._windowState.actions.setPosition({x:n,y:i})},this._interaction.onSizeChange=(n,i)=>{this._windowState.actions.setSize({width:n,height:i})},this._windowState.onViewportTooSmall=()=>{this._windowState.actions.minimize()},this.setAttribute("data-mode",this._windowState.value.state.mode),this._pendingAuthConfig){const n=this._pendingAuthConfig;this._pendingAuthConfig=void 0,this._auth.setExternalTokens({accessToken:n.accessToken,refreshToken:n.refreshToken??"",userId:n.userId,expiresIn:n.expiresIn??3600})}else this._pendingDynamicAuth?(this._auth.setDynamicTokenProvider({getToken:this._pendingDynamicAuth.getToken,refreshToken:this._pendingDynamicAuth.refreshToken,userId:this._pendingDynamicAuth.userId}),this._pendingDynamicAuth=void 0):this._pendingAuthProvider&&(this._auth.setAuthProvider({getToken:this._pendingAuthProvider.getToken,refreshToken:this._pendingAuthProvider.refreshToken,isLoggedIn:this._pendingAuthProvider.isLoggedIn,logout:this._pendingAuthProvider.logout}),this._pendingAuthProvider=void 0);this._auth.onLogin=()=>{this._connectWithRetry()},this._auth.state.isLoggedIn&&this._connectWithRetry()}_connectWithRetry(){return this._connecting?(un.debug("_connectWithRetry already in-flight, reusing existing promise"),this._connecting):(this._connecting=this._doConnectWithRetry(),this._connecting)}async _doConnectWithRetry(){var r;const e=this._connectGeneration;try{this._connectionFailed=!1,this._connectionError="";const n=await zK({persistence:this._persistence,message:this._message,session:this._session,notification:this._notification,activity:this._activity,fileExplorer:this._fileExplorer,toast:this._toast.actions,skill:this._skill,mode:this._mode,scenariosURL:this._scenariosURL,loadFileTree:()=>this._loadFileTree(),restoreEditorAreaContent:()=>this._restoreEditorAreaContent(),showToolConfirm:i=>this._showToolConfirm(i),showAskUser:i=>this._showAskUser(i),loadSessions:()=>{this._loadSessions()},onConnectionStateChange:i=>{this._connectionState=i,this.dispatchEvent(new CustomEvent("rtc-connection-state-change",{detail:{state:i},bubbles:!0,composed:!0}))},logger:un});this._connectionFailed=n.connectionFailed,this._connectionError=n.connectionError,n.rtcProcessor&&(this._rtcProcessor=n.rtcProcessor),n.unsubConnection&&((r=this._unsubConnection)==null||r.call(this),this._unsubConnection=n.unsubConnection),this._connectionState=n.connectionState}finally{this._connectGeneration===e?this._connecting=void 0:un.debug("Stale connection attempt resolved, skipping _connecting cleanup")}}_showToolConfirm(e){return NK(e,this.shadowRoot)}_showAskUser(e){return DK(e,this.shadowRoot)}disconnectedCallback(){var e,r,n,i;this.dispatchEvent(new CustomEvent("rtc-before-destroy",{bubbles:!0,composed:!0})),this._beforeMessageSendHook=void 0,super.disconnectedCallback(),this.removeEventListener("rtc-window-minimize",this._boundOnMinimize),this.removeEventListener("rtc-window-maximize",this._boundOnMaximize),this.removeEventListener("rtc-window-restore",this._boundOnRestore),this.removeEventListener("rtc-login-requested",this._boundOnLoginRequested),this.removeEventListener("rtc-new-session",this._boundOnNewSession),this.removeEventListener("rtc-auth-logout",this._boundOnLogout),this.removeEventListener("rtc-input-submit",this._boundOnInputSubmit),this.removeEventListener("rtc-stop-requested",this._boundOnStopRequested),this.removeEventListener("rtc-user-message-resend",this._boundOnResendMessage),this.removeEventListener("rtc-fork-initiated",this._boundOnForkInitiated),this.removeEventListener("rtc-session-delete-requested",this._boundOnSessionDeleteRequested),this.removeEventListener("rtc-session-rename-confirmed",this._boundOnSessionRenameConfirmed),this.removeEventListener("rtc-toast-requested",this._boundOnToastRequested),this.removeEventListener("rtc-toast-close",this._boundOnToastClose),this.removeEventListener("rtc-command-requested",this._boundOnCommandRequested),this.removeEventListener("activity-change",this._boundOnActivityChange),this.removeEventListener("file-select",this._boundOnFileSelect),this.removeEventListener("folder-toggle",this._boundOnFolderToggle),this.removeEventListener("editor-area-save",this._boundOnEditorAreaSave),this.removeEventListener("editor-area-tab-close",this._boundOnEditorAreaTabClose),this.removeEventListener("editor-area-tab-select",this._boundOnEditorAreaTabSelect),this.removeEventListener("editor-area-content-change",this._boundOnEditorAreaContentChange),this.removeEventListener("editor-area-view-mode-change",this._boundOnEditorAreaViewModeChange),this.removeEventListener("editor-area-cursor-move",this._boundOnEditorAreaCursorMove),this.removeEventListener("editor-area-restore-default",this._boundOnEditorAreaRestoreDefault),this.removeEventListener("refresh-requested",this._boundOnFileExplorerRefresh),this.removeEventListener("rtc-chat-layout-session-select",this._boundOnChatLayoutSessionSelect),this.removeEventListener("rtc-chat-layout-tab-activate",this._boundOnChatLayoutTabActivate),this.removeEventListener("rtc-chat-layout-tab-close",this._boundOnChatLayoutTabClose),this.removeEventListener("rtc-drawer-close",this._boundOnDrawerClose),this.removeEventListener("keydown",this._boundOnKeydown),this.removeEventListener("wheel",this._boundOnWheel),(e=this._busUnsubMessage)==null||e.call(this),(r=this._busUnsubBulkUpdate)==null||r.call(this),(n=this._busUnsubGapFill)==null||n.call(this),this._rtcProcessor=void 0,(i=this._unsubConnection)==null||i.call(this),this._auth.onLogin=void 0,this._connectGeneration++,this._connecting=void 0;for(const s of this._autoSaveTimers.values())clearTimeout(s);this._autoSaveTimers.clear()}updated(){this.updateComplete.then(()=>{this._sessionProvider.setValue(this._session.value),this._messageProvider.setValue(this._message.value),this._toolCallProvider.setValue(this._toolCall.value),this._authProvider.setValue(this._auth.value),this._modeProvider.setValue(this._mode.value),this._windowStateProvider.setValue(this._windowState.value),this._skillProvider.setValue(this._skill.value),this._activityProvider.setValue(this._activity.value),this._fileExplorerProvider.setValue(this._fileExplorer.value),this._sessionTreeProvider.setValue(this._sessionTree.value),this._sessionTabProvider.setValue(this._sessionTab.value),this._settingsProvider.setValue(this._settings.value),this._notificationProvider.setValue(this._notification.value),this._localeProvider.setValue({locale:wy(),setLocale:Ru,locales:[tr,...Kr]})}).catch(i=>{un.error("Context provider sync failed:",i)}),this._sessionTab.value.state.tabs.length===0&&!this._creatingUnsavedTab&&this._initialSessionLoadDone&&(un.debug("No tabs left, auto-creating unsaved tab"),this._creatingUnsavedTab=!0,queueMicrotask(()=>{try{const i=this._session.actions.createSession();this._session.actions.switchSession(i),this._sessionTab.actions.openOrActivate(i,Xe("未命名"),{isUnsaved:!0})}finally{this._creatingUnsavedTab=!1}})),this._rtcProcessor&&this._rtcProcessor.setMode(this._mode.value.state.currentMode);const r=this._windowState.value.state.mode;r!==this._appliedMode&&(this._appliedMode=r,this.setAttribute("data-mode",r),this._handleModeTransition(r)),this._resolvedWindowConfig.embedded?this.setAttribute("data-embedded",""):this.removeAttribute("data-embedded"),r!=="normal"?this._interaction.value.actions.disable():this._interaction.value.actions.enable(),this._windowState.applyGeometry(this)}firstUpdated(){var r;if(!this._windowState.restored){const n=parseInt(getComputedStyle(this).getPropertyValue("--rtc-window-default-width"))||420,i=parseInt(getComputedStyle(this).getPropertyValue("--rtc-window-default-height"))||640,s=window.innerWidth-n-rO,a=window.innerHeight-i-rO;this._windowState.actions.setPosition({x:s,y:a})}const e=(r=this.shadowRoot)==null?void 0:r.querySelector("rtc-title-bar");e&&(this._interaction.bindElements(this,e),this._windowState.value.state.mode==="normal"&&this._interaction.value.actions.enable()),E$(),this.dispatchEvent(new CustomEvent("rtc-agent-ready",{bubbles:!0,composed:!0}))}async _beforeMessageSend(e){if(this._beforeMessageSendHook)try{if(await this._beforeMessageSendHook(e)===!1)return!1}catch(i){un.error("beforeMessageSend hook failed:",i)}const r=new CustomEvent("rtc-before-message-send",{detail:e,bubbles:!0,composed:!0,cancelable:!0});return!!this.dispatchEvent(r)}_handleConnectionRetry(){un.info("Connection retry requested by user"),this.reconnect()}_handleModeTransition(e){this.updateComplete.then(()=>{var r,n;if(e==="minimized"){const i=(r=this.shadowRoot)==null?void 0:r.querySelector(".bubble");i==null||i.focus()}else{const i=(n=this.shadowRoot)==null?void 0:n.querySelector("rtc-title-bar");i==null||i.focus()}}).catch(r=>{un.error("Mode transition focus failed:",r)}),this._appliedMode==="minimized"&&e!=="minimized"&&this._notification.actions.markAsRead(),this._modeAnnouncement=QK[e]}_handleBubbleClick(){this._windowState.actions.restore(),this._notification.actions.markAsRead()}_handleBubbleKeydown(e){(e.key==="Enter"||e.key===" ")&&(e.preventDefault(),this._windowState.actions.restore(),this._notification.actions.markAsRead())}_findScrollableParent(e){let r=e;for(;r&&r!==this;){const n=getComputedStyle(r),i=n.overflowY,s=n.overflowX,a=(i==="auto"||i==="scroll")&&r.scrollHeight>r.clientHeight,l=(s==="auto"||s==="scroll")&&r.scrollWidth>r.clientWidth;if(a||l)return r;if(r.parentElement)r=r.parentElement;else{const c=r.getRootNode();if(c instanceof ShadowRoot&&c.host!==this)r=c.host;else break}}return null}_handleLoginRequested(e){var i;const r=e,n=((i=r==null?void 0:r.detail)==null?void 0:i.provider)??"mock";this._selectedProvider=n,this._showLoginDialog=!0}_handleLoginComplete(e){const{accessToken:r,refreshToken:n,userId:i,expiresIn:s}=e.detail;this._auth.setTokens({accessToken:r,refreshToken:n,userId:i,expiresIn:s}),this._showLoginDialog=!1}_handleLoginDialogClose(){this._showLoginDialog=!1}async _refreshTurnCounts(){const e=this._session.value.state.currentSessionId;if(!e||!this._persistence.layer){this._turnCountProvider.setValue(hf);return}try{const r=await this._persistence.layer.getSession(e);if(!r){this._turnCountProvider.setValue(hf);return}this._turnCountProvider.setValue({pendingTurnCount:r.pending_turn_count,runningTurnCount:r.running_turn_count})}catch(r){un.warn("Failed to refresh turn counts:",r),this._turnCountProvider.setValue(hf)}}async _loadSessions(){try{const e=await VK(this._initialSessionLoadDone,{persistenceLayer:this._persistence.layer,session:this._session,sessionTree:this._sessionTree,sessionTab:this._sessionTab,logger:un});this._initialSessionLoadDone=e}catch(e){un.warn("Failed to load sessions:",e)}}async _handleCommand(e,r){await IK(e,r,{persistenceLayer:this._persistence.layer,currentSessionId:this._session.value.state.currentSessionId,toast:this._toast.actions,logger:un})}get _vfsDeps(){return{persistenceIsConnected:this._persistence.isConnected,fileExplorer:this._fileExplorer,editorArea:this._editorArea,toast:this._toast.actions,settingsDefaultViewMode:this._settings.value.state.files.defaultViewMode,logger:un}}async _loadFileTree(){await RK(this._vfsDeps)&&(this._fileTreeLoaded=!0)}async _loadFolderChildren(e){await LK(e,this._vfsDeps)}async _handleFileOpen(e){await FK(e,this._vfsDeps)}async _restoreEditorAreaContent(){await jK(this._fileTreeLoaded,this._vfsDeps)}async _handleEditorSave(e){const r=this._autoSaveTimers.get(e);r&&(clearTimeout(r),this._autoSaveTimers.delete(e)),await qK(e,this._vfsDeps)}_scheduleAutoSave(e){const r=this._autoSaveTimers.get(e);r&&clearTimeout(r);const n=setTimeout(()=>{this._autoSaveTimers.delete(e),this._handleEditorSave(e)},eH);this._autoSaveTimers.set(e,n)}async _handleFileChange(e,r){await $K(e,r,this._fileTreeLoaded,this._vfsDeps,()=>this._loadFileTree(),n=>this._loadFolderChildren(n))}async _sanitizeBubbleIcon(e){try{const{default:r}=await Promise.resolve().then(()=>D_);return r.sanitize(e,{ALLOWED_TAGS:["svg","path","g","circle","rect","line","polyline","polygon","text","use"],ALLOWED_ATTR:["viewBox","d","xmlns","fill","stroke","stroke-width","class","width","height","transform","cx","cy","r","x","y","x1","y1","x2","y2","points","dx","dy","text-anchor","font-size","href"]})}catch{const r=document.createElement("div");return r.textContent=e,r.innerHTML}}_renderBubbleContent(){return this.bubbleIcon?Tt`<span class="bubble-icon" .innerHTML=${this._sanitizedBubbleIcon}></span>`:Tt`<span class="bubble-logo">${A$(this.theme==="dark")}</span>`}willUpdate(e){e.has("bubbleIcon")&&this.bubbleIcon&&this._sanitizeBubbleIcon(this.bubbleIcon).then(r=>{this._sanitizedBubbleIcon=r,this.requestUpdate()}).catch(r=>{un.error("Bubble icon sanitization failed:",r),this._sanitizedBubbleIcon=""}),e.has("theme")&&this.dispatchEvent(new CustomEvent("rtc-theme-change",{detail:{theme:this.theme},bubbles:!0,composed:!0}))}render(){const e=this._auth.value.state.isLoggedIn,r=this._windowState.value.state.mode,n=this._activity.active,i=this._activity.sidebarVisible;return Tt`
|
|
11303
11327
|
<div class="window-container">
|
|
11304
11328
|
<rtc-title-bar
|
|
11305
11329
|
app-label=${this.appLabel}
|