{"version":3,"file":"index.mjs","names":["Z","l","h","N","_","x","D","S","z","w","t","e","s","o","n","r","i","S","c","i","e","h","r","o","n","a","c","l","p","d","u","f","b","y","t","s","t","i","s","o","n","r","t","e","r","o","t","e","t","r","t"],"sources":["../../native/dist/index.mjs","../../../node_modules/.bun/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/css-tag.js","../../../node_modules/.bun/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/reactive-element.js","../../../node_modules/.bun/lit-html@3.3.2/node_modules/lit-html/lit-html.js","../../../node_modules/.bun/lit-element@4.2.2/node_modules/lit-element/lit-element.js","../../../node_modules/.bun/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/custom-element.js","../../../node_modules/.bun/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/property.js","../../../node_modules/.bun/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/state.js","../src/styles/icons.ts","../src/eventViewer/styles.ts","../src/listenerViewer/styles.ts","../src/listenerViewer/listenerCardStyles.ts","../src/utils/removeItem.ts","../src/utils/renderTag.ts","../src/utils/renderButton.ts","../src/utils/renderIcon.ts","../src/utils/renderRetainMessage.ts","../src/utils/languages.ts","../src/utils/t.ts","../src/listenerViewer/listenerCard.ts","../src/listenerViewer/index.ts","../src/eventViewer/eventLog.ts","../src/eventViewer/index.ts"],"sourcesContent":["var Z=Object.defineProperty;var ee=(n,e,t)=>e in n?Z(n,e,{enumerable:true,configurable:true,writable:true,value:t}):n[e]=t;var l=(n,e,t)=>ee(n,typeof e!=\"symbol\"?e+\"\":e,t);var ne=Symbol.for(\"__FastEvent__\"),re=Symbol.for(\"__FastEventScope__\"),h=class extends Error{constructor(e){super(e);}},N=class extends h{},_=class extends h{},F=class extends h{},x=class extends h{},D=class extends h{};var te=(e=>(e[e.Transformed=1]=\"Transformed\",e))(te||{});function L(n,e,t,s){let r,a,i;if(typeof n[0]==\"string\"){r={type:n[0],payload:n[1]};let o=n[2];a=o===void 0?{}:typeof o==\"boolean\"?{retain:o}:o,i=void 0;}else {r=Object.assign({},n[0]);let o=n[1];a=o===void 0?{}:typeof o==\"boolean\"?{retain:o}:o,i=n[0].meta;}let p=Object.assign({},e,t,a.meta,i);return Object.keys(p).length===0?delete r.meta:r.meta=p,a.executor===void 0&&(a.executor=s),[r,a]}function G(n){return n?typeof n==\"object\"&&\"__FastEventScope__\"in n:false}function A(n,e,t){let s=n[0],r=G(n[1])?n[1]:void 0,a=(r?n[2]:n[1])||{};return a.meta=Object.assign({},e,a?.meta),a.context=a.context!==void 0?a.context:t,[s,r,a]}function T(n,e){return Object.defineProperty(n,\"name\",{value:e||\"anonymous\",configurable:true}),n}function E(n){return n&&typeof n==\"function\"}var P=class n{constructor(e){l(this,\"__FastEventScope__\",true);l(this,\"__events__\");l(this,\"__meta__\");l(this,\"__context__\");l(this,\"_options\",{});l(this,\"prefix\",\"\");l(this,\"emitter\");this._options=Object.assign({},this._initOptions(e));}get context(){return this.options.context||this}get options(){return this._options}get listeners(){return this.emitter.getListeners(this.prefix)}bind(e,t,s){this.emitter=e,this._options=Object.assign(this._options,{scope:t},s),t.length>0&&!t.endsWith(e.options.delimiter)&&(this.prefix=t+e.options.delimiter);}_initOptions(e){return e}_getScopeListener(e){let t=this.prefix;if(t.length===0)return e;if(!e)throw new Error;let s=this;return T(function(a,i){let p=i.rawEventType||a.type;if(p.startsWith(t)){let c=((i.flags||0)&1)>0?a:Object.assign({},a,{type:p.substring(t.length)});return e.call(s.context,c,i)}},e.name)}_getScopeType(e){return e===void 0?void 0:this.prefix+e}_fixScopeType(e){return e.startsWith(this.prefix)?e.substring(this.prefix.length):e}on(){if(!this.emitter)throw new _;let e=[...arguments];return e[0]=this._getScopeType(e[0]),e[1]=this._getScopeListener(e[1]),this.emitter.on(...e)}once(){return this.on(arguments[0],arguments[1],Object.assign({},arguments[2],{count:1}))}onAny(){return this.on(\"**\",...arguments)}off(){let e=arguments;typeof e[0]==\"string\"&&(e[0]=this._getScopeType(e[0])),this.emitter.off(...e);}offAll(){this.emitter.offAll(this.prefix.substring(0,this.prefix.length-1));}clear(){this.emitter.clear(this.prefix.substring(0,this.prefix.length-1));}emit(){let[e,t]=L(arguments,this.emitter.options.meta,this.options.meta,this.options.executor);return this._transformMessage(e,t),e.type=this._getScopeType(e.type),this.emitter.emit(e,t)}_transformMessage(e,t){E(this._options.transform)&&(t.rawEventType=this._getScopeType(e.type),t.flags=(t.flags||0)|1,e.payload=this._options.transform.call(this,e));}async emitAsync(){return (await Promise.allSettled(this.emit.apply(this,arguments))).map(t=>t.status===\"fulfilled\"?t.value:t.reason)}async waitFor(){let e=arguments[0],t=arguments[1],s=await this.emitter.waitFor(this._getScopeType(e),t);return Object.assign({},s,{type:this._fixScopeType(s.type)})}scope(){let[e,t,s]=A(arguments,this.options.meta,this.options.context),r;return t?r=t:r=new n,r.bind(this.emitter,this.prefix+e,s),r}};function S(n,e){let t=n.length,s=e.length;if(t!==s&&(s===0||e[s-1]!==\"**\"))return  false;if(s>0&&e[s-1]===\"**\"){for(let r=0;r<s-1;r++)if(e[r]!==\"*\"&&e[r]!==n[r])return  false;return  true}for(let r=0;r<t;r++)if(e[r]!==\"*\"&&e[r]!==n[r])return  false;return  true}function j(n,e){let t=[];for(let s=n.length-1;s>=0;s--)e(n[s])&&(t.push(s),n.splice(s,1));return t.reverse()}function W(n,e){let t=n;for(let s of e)if(t&&s in t)t=t[s];else return;return t}function O(n,e,t){for(let[s,r]of Object.entries(n)){if(s.startsWith(\"__\")||!r)continue;let a=[...e,s];t(a,r),O(r,a,t);}}function U(n,e,t){let s=W(n,e);if(!s)return [];let r=[];return O(s,e,(a,i)=>{r.push({node:i,type:a.join(t)});}),r}function Ae(n){return n?typeof n==\"object\"&&\"type\"in n:false}function Re(n){return n&&typeof n==\"string\"}var z=Symbol.for(\"__expandable__\");function Oe(n){return n[z]=true,n}function K(n){return n&&n[z]}function H(n){return n&&typeof n==\"object\"&&\"off\"in n&&\"listener\"in n}function Ce(n){return typeof n==\"function\"&&(n.toString().startsWith(\"class \")||n.prototype?.constructor===n)}function Ne(n){return n?typeof n==\"object\"&&\"__FastEvent__\"in n:false}function I(n){if(n===null||typeof n!=\"object\")return  false;let e=n;return typeof e[Symbol.asyncIterator]==\"function\"||typeof e[\"@@asyncIterator\"]==\"function\"}function B(n,e){let t=n,s=[],r=e.split(t._delimiter);t._traverseToPath(n.listeners,r,i=>{s.push(i);});let a=[];return s.map(i=>{a.push(...i.__listeners);}),a}var V=()=>(n,e,t,s)=>n.map((r,a)=>s.call(n[a],r,e,t,true));function q(n){for(let e=0;e<n.length;e++){let t=n[e];Array.isArray(t)&&K(t)&&(n.splice(e,1,...t),e+=t.length-1);}return n}function $(n,e){return n.catch(t=>(e&&e(t),Promise.resolve(t)))}var w=class{constructor(e,t,s={}){this.eventEmitter=e;this.eventName=t;l(this,\"resolvers\",[]);l(this,\"errorResolvers\",[]);l(this,\"isStopped\",false);l(this,\"options\");l(this,\"currentSize\");l(this,\"hasNewMessage\",false);l(this,\"_listener\");l(this,\"_ready\",false);l(this,\"_listenOptions\");l(this,\"_cleanups\",[]);l(this,\"error\",null);l(this,\"buffer\",[]);this.options={size:s.size??20,maxExpandSize:s.maxExpandSize??100,expandOverflow:s.expandOverflow??\"slide\",overflow:s.overflow??\"slide\",lifetime:s.lifetime??0,onPush:s.onPush,onPop:s.onPop,onDrop:s.onDrop,onError:s.onError??(()=>true),signal:s.signal},this.currentSize=this.options.size,this._listener=this.onMessage.bind(this);}get listener(){return this._listener}get ready(){return this._ready}create(e){if(!this._ready){this._listenOptions=e;try{let t=this.eventEmitter.on(this.eventName,this._listener,e);if(this._cleanups.push(()=>t.off()),this.options.signal&&!this.options.signal.aborted){let s=()=>{this.off(!0);};this.options.signal.addEventListener(\"abort\",s),this._cleanups.push(()=>{this.options.signal.removeEventListener(\"abort\",s);});}}finally{this._ready=true;}}}push(e){this.options.onPush?this.options.onPush(e,this.buffer):this.buffer.push(this.options.lifetime>0?[e,Date.now()]:[e,0]);}handleOverflow(e){switch(this.buffer.length>=this.options.maxExpandSize&&this.options.overflow===\"expand\"?this.options.expandOverflow:this.options.overflow){case \"drop\":return this.options.onDrop&&this.options.onDrop(e),false;case \"expand\":return this.currentSize=Math.min(this.currentSize+this.options.size,this.options.maxExpandSize),this.push(e),true;case \"slide\":let s=this.buffer.shift();return this.options.onDrop&&s&&this.options.onDrop(s[0]),this.push(e),true;case \"throw\":throw this.options.onDrop&&this.options.onDrop(e),new Error(`EventIterator queue overflow: buffer size (${this.currentSize}) exceeded`);default:return  false}}onMessage(e,t){if(this.isStopped)return;let s=e;if(this.resolvers.length>0){this.resolvers.shift()({value:s,done:false});return}this.hasNewMessage=true,this.buffer.length<this.currentSize?this.push(s):this.handleOverflow(s);}off(e){this._ready&&(this.isStopped||(this.isStopped=true,this._cleanups.forEach(t=>t()),this._cleanups=[],this.buffer=[],this._ready=false,e?(this.errorResolvers.forEach(t=>{t(new F);}),this.errorResolvers=[]):(this.resolvers.forEach(t=>{t({value:void 0,done:true});}),this.resolvers=[]),this._ready=false));}async next(){if(this.error)return Promise.reject(this.error);if(this.isStopped&&this.buffer.length===0)return {value:void 0,done:true};if(this.buffer.length>0){let e,t;if(this.options.onPop){let s=this.options.onPop(this.buffer,this.hasNewMessage);s?[e,t]=s:[e,t]=this.buffer.shift()||[void 0,0];}else [e,t]=this.buffer.shift()||[void 0,0];if(this.hasNewMessage=false,e!==void 0)return this.options.lifetime>0&&Date.now()-t>this.options.lifetime?(this.options.onDrop&&this.options.onDrop(e),this.next()):{value:e,done:false}}return new Promise((e,t)=>{this.resolvers.push(e),this.errorResolvers.push(t);})}[Symbol.asyncIterator](){return this}async done(){return this.off(),{value:void 0,done:true}}async throw(e){return this.error=e,this.off(),Promise.reject(e)}async return(){return this.off(),{value:void 0,done:true}}[Symbol.dispose](){this.off();}on(){this.create(this._listenOptions),this.isStopped=false;}};function C(n,e,t={}){return new w(n,e,t)}function Q(n,e){return Array.isArray(e)&&e.forEach(t=>{n=T(t(n),n.name);}),n}function R(n){return n!==null&&(typeof n==\"object\"||typeof n==\"function\")?new WeakRef(n):n}function k(n){return n.map(e=>e.status===\"fulfilled\"?e.value:e.reason)}function J(n){if(n==null)return  false;let e=typeof n;return e!==\"object\"&&e!==\"function\"?false:typeof n.then==\"function\"}async function X(n){try{return n instanceof Promise?await n:n}catch(e){return e instanceof Error?e:new Error(String(e))}}var Y=class{constructor(e){l(this,\"__FastEvent__\",true);l(this,\"listeners\",{__listeners:[]});l(this,\"_options\");l(this,\"_delimiter\",\"/\");l(this,\"_transform\");l(this,\"_expandResults\",true);l(this,\"_context\");l(this,\"_hooks\");l(this,\"retainedMessages\",new Map);l(this,\"listenerCount\",0);l(this,\"types\",null);this._options=Object.assign({debug:false,id:Math.random().toString(36).substring(2),delimiter:\"/\",context:null,ignoreErrors:true,meta:void 0,expandEmitResults:true,executor:V()},this._initOptions(e)),this._delimiter=this._options.delimiter,this._context=this._options.context;let t=this._options.transform;this._transform=typeof t==\"function\"?t:void 0,this._expandResults=this._options.expandEmitResults!==false;}get options(){return this._options}get context(){return this.options.context||this}get meta(){return this.options.meta}get id(){return this._options.id}get title(){return this._options.title||this.id||\"FastEvent\"}get hooks(){return this._hooks||(this._hooks={AddBeforeListener:[],AddAfterListener:[],RemoveListener:[],ClearListeners:[],ListenerError:[],BeforeExecuteListener:[],AfterExecuteListener:[]}),this._hooks}_execAfterExecuteListener(e,t){Promise.allSettled(t[1]).then(s=>{t[1]=k(s),e.apply(this,t);});}_executeHooks(e,t,s=false){if(this._hooks&&setTimeout(()=>{let r=this.hooks[e];Array.isArray(r)&&r.length>0&&Promise.allSettled(r.map(a=>{if(e===\"AfterExecuteListener\")this._execAfterExecuteListener(a,t);else return a.apply(this,t)}));}),!s){let r=this.options[`on${e}`];if(E(r))if(e===\"AfterExecuteListener\")this._execAfterExecuteListener(r,t);else return r.apply(this,t)}}_initOptions(e){return e}_addListener(e,t,s){let{count:r,prepend:a}=s,i=0;return [this._forEachNodes(e,o=>{let c=[t,r,0,s.tag,s.flags];a?(o.__listeners.splice(0,0,c),i=0):(o.__listeners.push(c),i=o.__listeners.length-1),this.listenerCount++;}),i]}_forEachNodes(e,t){if(e.length===0)return;let s=this.listeners;for(let r=0;r<e.length;r++){let a=e[r];if(a in s||(s[a]={__listeners:[]}),r===e.length-1){let i=s[a];return t(i,s),i}else s=s[a];}}_removeListener(e,t,s){s&&j(e.__listeners,r=>{r=Array.isArray(r)?r[0]:r;let a=r===s;return a&&(this.listenerCount--,this._executeHooks(\"RemoveListener\",[t.join(this._delimiter),s,e])),a});}_createAyncIteratorListener(e,t){let s=Object.assign({overflow:\"expand\",size:10,maxExpandSize:100},t.iterable),r=C(this,e,s);r.create(t);let a=this._executeHooks(\"AddBeforeListener\",[e,r.listener,t]);if(a===false)throw new x;return I(a)?a:r}on(){let e=arguments[0];if(e.length===0)throw new Error(\"event cannot be empty\");let t=null,s,r=!E(arguments[1]);r?s=arguments[1]||{}:(t=arguments[1],s=arguments[2]||{});let a=Object.assign({count:0,flags:0,prepend:false},s);if(r||t===null)return this._createAyncIteratorListener(e,a);let i=this._executeHooks(\"AddBeforeListener\",[e,t,a]);if(i===false)throw new x;if(H(i))return i;let p=e.split(this._delimiter);if(a.pipes&&a.pipes.length>0&&(t=Q(t,a.pipes)),E(a.filter)||E(a.off)){let u=t,d=()=>o&&this._removeListener(o,p,t);t=T(function(v,f){if(E(a.off)&&a.off.call(this,v,f)){d();return}if(E(a.filter)){if(a.filter.call(this,v,f))return u.call(this,v,f)}else return u.call(this,v,f)},t.name);}let[o,c]=this._addListener(p,t,a),y=()=>o&&this._removeListener(o,p,t);return this._executeHooks(\"AddAfterListener\",[e,o]),this._emitRetainMessage(e,o,c),{off:y,listener:t,[Symbol.dispose](){y();}}}once(){return E(arguments[1])?this.on(arguments[0],arguments[1],Object.assign({},arguments[2],{count:1})):this.on(arguments[0],Object.assign({},arguments[2],{count:1}))}onAny(){return this.on(\"**\",...arguments)}off(){let e=arguments,t=E(e[0])?void 0:e[0],s=E(e[0])?e[0]:e[1],r=t?t.split(this._delimiter):[],a=t?t.includes(\"*\"):false;if(t&&!a)this._traverseToPath(this.listeners,r,i=>{s?this._removeListener(i,r,s):t&&(i.__listeners=[]);});else {let i=a?[]:r;this._traverseListeners(this.listeners,i,(p,o)=>{(s!==void 0||a&&S(p,r))&&(s?this._removeListener(o,r,s):o.__listeners=[]);});}}offAll(e){if(e){let t=e.split(this._delimiter),s=0;this._traverseListeners(this.listeners,t,(r,a)=>{s+=a.__listeners.length;try{a.__listeners.forEach(i=>{this._executeHooks(\"RemoveListener\",[r.join(this.options.delimiter),i[0],a]);});}finally{a.__listeners=[];}}),this.listenerCount-=s,this._removeRetainedEvents(e);}else try{let t=0;this._traverseListeners(this.listeners,[],(s,r)=>{t+=r.__listeners.length;}),this.listenerCount-=t,this.retainedMessages.clear(),this.listeners={__listeners:[]};}finally{this._executeHooks(\"ClearListeners\",[]);}}_removeRetainedEvents(e){e||this.retainedMessages.clear(),e?.endsWith(this._delimiter)&&(e+=this._delimiter),this.retainedMessages.delete(e);for(let t of this.retainedMessages.keys())t.startsWith(e)&&this.retainedMessages.delete(t);}clear(e){this.offAll(e),this._removeRetainedEvents(e);}_emitRetainMessage(e,t,s){let r=[];if(e.includes(\"*\")){let a=e.split(this._delimiter);this.retainedMessages.forEach((i,p)=>{let o=p.split(this._delimiter);S(o,a)&&r.push(i);});}else this.retainedMessages.has(e)&&r.push(this.retainedMessages.get(e));t&&r.forEach(a=>{this._executeListeners([t],a,{},i=>i[0]===t.__listeners[s][0]);});}_traverseToPath(e,t,s,r=0,a){if(r>=t.length){s(e);return}let i=t[r];if(a===true){this._traverseToPath(e,t,s,r+1,true);return}\"*\"in e&&this._traverseToPath(e[\"*\"],t,s,r+1),\"**\"in e&&this._traverseToPath(e[\"**\"],t,s,r+1,true),i in e&&this._traverseToPath(e[i],t,s,r+1);}_traverseListeners(e,t,s){let r=e;t&&t.length>0&&this._traverseToPath(e,t,i=>{r=i;});let a=(i,p,o)=>{p(o,i);for(let[c,y]of Object.entries(i))c.startsWith(\"__\")||y&&a(y,p,[...o,c]);};a(r,s,[]);}_onListenerError(e,t,s,r){if(r instanceof Error&&(r._emitter=`${e.name||\"anonymous\"}:${t.type}`),this._executeHooks(\"ListenerError\",[r,e,t,s]),this._options.ignoreErrors)return r;throw r}_executeListener(e,t,s,r=false){let a=e[0];try{if(this.options.debug&&(e.length=5),s&&s.abortSignal&&s.abortSignal.aborted)return this._onListenerError(a,t,s,new F(e[0].name));let i=((s?.flags||0)&1)>0,p=a.call(this.context,i?t.payload:t,s);return r&&p&&p instanceof Promise&&(p=$(p,o=>this._onListenerError(a,t,s,o))),this.options.debug&&(Promise.resolve(p),J(p)?X(p).then(o=>{e[5]=R(o);}):e[5]=R(p)),p}catch(i){let p=this._onListenerError(a,t,s,i);return p instanceof Error&&(e[5]=R(p)),p}}_getListenerExecutor(e){if(!e)return;let t=e.executor||this._options.executor;if(E(t))return t}_executeListeners(e,t,s,r){if(!e||e.length===0)return [];let a=[],i=[];for(let c of e){let y=c.__listeners,u=0;for(let d of y)(!r||r(d,c))&&(d[2]++,a.push(d),d[1]>0&&d[1]<=d[2]&&(i.push([y,u]),this.listenerCount--)),u++;}for(let c=i.length-1;c>=0;c--)i[c][0].splice(i[c][1],1);let p=this._getListenerExecutor(s);if(p){let c=p(a,t,s,this._executeListener.bind(this));return Array.isArray(c)?c:[c]}let o=[];for(let c=0;c<a.length;c++)o.push(this._executeListener(a[c],t,s,true));return o}getListeners(e){return B(this,e)}clearRetainMessages(e){e?this.retainedMessages.delete(e):this.retainedMessages.clear();}emit(){let[e,t]=L(arguments,this.options.meta);E(t.parseArgs)&&t.parseArgs(e,t);let s=e.type,r=this._delimiter,a=this.listeners,i=s.indexOf(r)===-1,p=i?null:s.split(r);t.retain&&this.retainedMessages.set(s,e);let o=this._transform,c=[];i?(\"*\"in a&&c.push(a[\"*\"]),\"**\"in a&&c.push(a[\"**\"]),s in a&&c.push(a[s])):this._traverseToPath(a,p,v=>{c.push(v);});let y=this._executeHooks(\"BeforeExecuteListener\",[e,t]);if(Array.isArray(y))return y;if(y===false)throw new F(e.type);let u=[];if(t.broadcast){let v=U(a,i?[s]:p,r);for(let{node:f,type:m}of v){if(!f.__listeners||f.__listeners.length===0)continue;let g,b;if(t.broadcast===true)g={...e,type:m},b={...t};else {let M=t.broadcast.call(this,m,e,t);if(!M)continue;Array.isArray(M)?[g,b]=M:(g=M,b={...t});}u.push({node:f,descMsg:g,descArgs:b});}}let d=[];if(o){let v=o.call(this,e);v!==e&&(e.payload=v,t.rawEventType=e.type,t.flags=(t.flags||0)|1);}d.push(...this._executeListeners(c,e,t));for(let{node:v,descMsg:f,descArgs:m}of u){if(o){let g=o.call(this,f);g!==f&&(f.payload=g,m.rawEventType=f.type,m.flags=(m.flags||0)|1);}d.push(...this._executeListeners([v],f,m));}return this._expandResults&&q(d),this._executeHooks(\"AfterExecuteListener\",[e,d,c]),d}broadcast(e,t,s,r){let a=r?{broadcast:s??true,retain:true}:{broadcast:s??true};return this.emit(e,t,a)}async emitAsync(){let e=await Promise.allSettled(this.emit.apply(this,arguments));return k(e)}waitFor(){let e=arguments[0],t=arguments[1];return new Promise((s,r)=>{let a,i,p=o=>{clearTimeout(a),i?.off(),s(o);};t&&t>0&&(a=setTimeout(()=>{i?.off(),r(new Error(\"wait for event<\"+e+\"> is timeout\"));},t)),i=this.on(e,p);})}scope(){let[e,t,s]=A(arguments,this.options.meta,this.options.context),r;return t?r=t:r=new P,r.bind(this,e,s),r}};export{F as AbortError,x as CancelError,Y as FastEvent,h as FastEventError,w as FastEventIterator,te as FastEventListenerFlags,P as FastEventScope,D as QueueOverflowError,N as TimeoutError,_ as UnboundError,re as __FastEventScope__,ne as __FastEvent__,z as __expandable__,C as createAsyncEventIterator,Oe as expandable,B as getListeners,I as isAsyncIterable,Ce as isClass,K as isExpandable,Ne as isFastEvent,Ae as isFastEventMessage,G as isFastEventScope,E as isFunction,S as isPathMatched,Re as isString,H as isSubsctiber};//# sourceMappingURL=index.mjs.map\n//# sourceMappingURL=index.mjs.map","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1],t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e;const r=h.fromAttribute(s,t.type);this[e]=r??this._$Ej?.get(e)??r,this._$Em=null}}requestUpdate(t,s,i,e=!1,h){if(void 0!==t){const r=this.constructor;if(!1===e&&(h=this[t]),i??=r.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(r._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.2\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t=>t,s=t.trustedTypes,e=s?s.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,h=\"$lit$\",o=`lit$${Math.random().toFixed(9).slice(2)}$`,n=\"?\"+o,r=`<${n}>`,l=document,c=()=>l.createComment(\"\"),a=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,u=Array.isArray,d=t=>u(t)||\"function\"==typeof t?.[Symbol.iterator],f=\"[ \\t\\n\\f\\r]\",v=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,_=/-->/g,m=/>/g,p=RegExp(`>|${f}(?:([^\\\\s\"'>=/]+)(${f}*=${f}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),g=/'/g,$=/\"/g,y=/^(?:script|style|textarea|title)$/i,x=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),b=x(1),w=x(2),T=x(3),E=Symbol.for(\"lit-noChange\"),A=Symbol.for(\"lit-nothing\"),C=new WeakMap,P=l.createTreeWalker(l,129);function V(t,i){if(!u(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==e?e.createHTML(i):i}const N=(t,i)=>{const s=t.length-1,e=[];let n,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=v;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,f=0;for(;f<s.length&&(c.lastIndex=f,u=c.exec(s),null!==u);)f=c.lastIndex,c===v?\"!--\"===u[1]?c=_:void 0!==u[1]?c=m:void 0!==u[2]?(y.test(u[2])&&(n=RegExp(\"</\"+u[2],\"g\")),c=p):void 0!==u[3]&&(c=p):c===p?\">\"===u[0]?(c=n??v,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?p:'\"'===u[3]?$:g):c===$||c===g?c=p:c===_||c===m?c=v:(c=p,n=void 0);const x=c===p&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===v?s+r:d>=0?(e.push(a),s.slice(0,d)+h+s.slice(d)+o+x):s+o+(-2===d?i:x)}return[V(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),e]};class S{constructor({strings:t,_$litType$:i},e){let r;this.parts=[];let l=0,a=0;const u=t.length-1,d=this.parts,[f,v]=N(t,i);if(this.el=S.createElement(f,e),P.currentNode=this.el.content,2===i||3===i){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=P.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(h)){const i=v[a++],s=r.getAttribute(t).split(o),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:l,name:e[2],strings:s,ctor:\".\"===e[1]?I:\"?\"===e[1]?L:\"@\"===e[1]?z:H}),r.removeAttribute(t)}else t.startsWith(o)&&(d.push({type:6,index:l}),r.removeAttribute(t));if(y.test(r.tagName)){const t=r.textContent.split(o),i=t.length-1;if(i>0){r.textContent=s?s.emptyScript:\"\";for(let s=0;s<i;s++)r.append(t[s],c()),P.nextNode(),d.push({type:2,index:++l});r.append(t[i],c())}}}else if(8===r.nodeType)if(r.data===n)d.push({type:2,index:l});else{let t=-1;for(;-1!==(t=r.data.indexOf(o,t+1));)d.push({type:7,index:l}),t+=o.length-1}l++}}static createElement(t,i){const s=l.createElement(\"template\");return s.innerHTML=t,s}}function M(t,i,s=t,e){if(i===E)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=a(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=M(t,h._$AS(t,i.values),h,e)),i}class R{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??l).importNode(i,!0);P.currentNode=e;let h=P.nextNode(),o=0,n=0,r=s[0];for(;void 0!==r;){if(o===r.index){let i;2===r.type?i=new k(h,h.nextSibling,this,t):1===r.type?i=new r.ctor(h,r.name,r.strings,this,t):6===r.type&&(i=new Z(h,this,t)),this._$AV.push(i),r=s[++n]}o!==r?.index&&(h=P.nextNode(),o++)}return P.currentNode=l,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class k{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=A,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=M(this,t,i),a(t)?t===A||null==t||\"\"===t?(this._$AH!==A&&this._$AR(),this._$AH=A):t!==this._$AH&&t!==E&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):d(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==A&&a(this._$AH)?this._$AA.nextSibling.data=t:this.T(l.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=S.createElement(V(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new R(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=C.get(t.strings);return void 0===i&&C.set(t.strings,i=new S(t)),i}k(t){u(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new k(this.O(c()),this.O(c()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,s){for(this._$AP?.(!1,!0,s);t!==this._$AB;){const s=i(t).nextSibling;i(t).remove(),t=s}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class H{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=A,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=M(this,t,i,0),o=!a(t)||t!==this._$AH&&t!==E,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=M(this,e[s+n],i,n),r===E&&(r=this._$AH[n]),o||=!a(r)||r!==this._$AH[n],r===A?t=A:t!==A&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===A?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class I extends H{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===A?void 0:t}}class L extends H{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==A)}}class z extends H{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=M(this,t,i,0)??A)===E)return;const s=this._$AH,e=t===A&&s!==A||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==A&&(s===A||e);e&&this.element.removeEventListener(this.name,this,s),h&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){\"function\"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class Z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){M(this,t)}}const j={M:h,P:o,A:n,C:1,L:N,R,D:d,V:M,I:k,H,N:L,U:z,B:I,F:Z},B=t.litHtmlPolyfillSupport;B?.(S,k),(t.litHtmlVersions??=[]).push(\"3.3.2\");const D=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new k(i.insertBefore(c(),t),t,void 0,s??{})}return h._$AI(t),h};export{j as _$LH,b as html,T as mathml,E as noChange,A as nothing,D as render,w as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as r}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=globalThis;class i extends t{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=e(r,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return r}}i._$litElement$=!0,i[\"finalized\"]=!0,s.litElementHydrateSupport?.({LitElement:i});const o=s.litElementPolyfillSupport;o?.({LitElement:i});const n={_$AK:(t,e,r)=>{t._$AK(e,r)},_$AL:t=>t._$AL};(s.litElementVersions??=[]).push(\"4.2.2\");export{i as LitElement,n as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=t=>(e,o)=>{void 0!==o?o.addInitializer(()=>{customElements.define(t,e)}):customElements.define(t,e)};export{t as customElement};\n//# sourceMappingURL=custom-element.js.map\n","import{notEqual as t,defaultConverter as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:e,reflect:!1,hasChanged:t},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),\"setter\"===n&&((t=Object.create(t)).wrapped=!0),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t,!0,r)},init(e){return void 0!==e&&this.C(o,void 0,t,e),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t,!0,r)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","import{property as t}from\"./property.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function r(r){return t({...r,state:!0,attribute:!1})}export{r as state};\n//# sourceMappingURL=state.js.map\n","import { css } from \"lit\";\n// --icon-size: 16px;\n// display: inline-block;\n// background-color: currentColor;\n// mask-size: cover;\n// -webkit-mask-size: cover;\n// vertical-align: text-bottom;\n// position: relative;\n// width: var(--icon-size);\n// height: var(--icon-size);\n\nexport const icons = css`\n    :host,\n    :root {\n        --icon-size: 16px;\n        --icon-tags: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z\"/><circle cx=\"7.5\" cy=\"7.5\" r=\".5\"/></svg>');\n        --icon-yes: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"  stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 6 9 17l-5-5\" /></svg>');\n        --icon-file: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"m213.66 82.34l-56-56A8 8 0 0 0 152 24H56a16 16 0 0 0-16 16v176a16 16 0 0 0 16 16h144a16 16 0 0 0 16-16V88a8 8 0 0 0-2.34-5.66M160 51.31L188.69 80H160ZM200 216H56V40h88v48a8 8 0 0 0 8 8h48z\"/></svg>');\n        --icon-loading: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 32 32\" width=\"32\" height=\"32\" fill=\"currentColor\"><path opacity=\".25\" d=\"M16 0 A16 16 0 0 0 16 32 A16 16 0 0 0 16 0 M16 4 A12 12 0 0 1 16 28 A12 12 0 0 1 16 4\" /><path d=\"M16 0 A16 16 0 0 1 32 16 L28 16 A12 12 0 0 0 16 4z\"><animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 16 16\" to=\"360 16 16\" dur=\"0.8s\" repeatCount=\"indefinite\" /></path></svg>');\n        --icon-arrow: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m9 18 6-6-6-6\" /></svg>');\n        --icon-error: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\" /><path d=\"m15 9-6 6\" /><path d=\"m9 9 6 6\" /></svg>');\n        --icon-success: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21.801 10A10 10 0 1 1 17 3.335\" /><path d=\"m9 11 3 3L22 4\" /></svg>');\n        --icon-refresh: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\" /><path d=\"M3 3v5h5\" /></svg>');\n        --icon-clear: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\" /><path d=\"M3 6h18\" /><path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" /></svg>');\n        --icon-copy: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\" ><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\" /><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" /></svg>');\n        --icon-listeners: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\" ><path d=\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\"/><path d=\"M14 2v5a1 1 0 0 0 1 1h5\"/><path d=\"M10 12.5 8 15l2 2.5\"/><path d=\"m14 12.5 2 2.5-2 2.5\"/></svg>');\n        --icon-listener: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\" ><rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\"/><path d=\"M9 17c2 0 2.8-1 2.8-2.8V10c0-2 1-3.3 3.2-3\"/><path d=\"M9 11.2h5.7\"/></svg>');\n        --icon-count: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/><path d=\"M16 8.9V7H8l4 5-4 5h8v-1.9\"/></svg>');\n        --icon-flags: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528\"/></svg>');\n        --icon-transform: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m16 14 4 4-4 4\"/><path d=\"M20 10a8 8 0 1 0-8 8h8\"/></svg>');\n        --icon-dark: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\"/></svg>');\n        --icon-delete: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/></svg>');\n        --icon-inspect: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"2\" x2=\"5\" y1=\"12\" y2=\"12\"/><line x1=\"19\" x2=\"22\" y1=\"12\" y2=\"12\"/><line x1=\"12\" x2=\"12\" y1=\"2\" y2=\"5\"/><line x1=\"12\" x2=\"12\" y1=\"19\" y2=\"22\"/><circle cx=\"12\" cy=\"12\" r=\"7\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/></svg>');\n    }\n    .icon {\n        display: inline-block;\n        background-color: currentColor !important;\n        mask-size: cover;\n        -webkit-mask-size: cover;\n        vertical-align: text-bottom;\n        position: relative;\n        stroke-width: 1;\n        width: var(--icon-size);\n        height: var(--icon-size);\n        box-sizing: border-box;\n    }\n\n    /** 图标 */\n    .icon.close {\n        mask-image: var(--icon-close);\n    }\n    .icon.tags {\n        mask-image: var(--icon-tags);\n    }\n\n    .icon.yes {\n        mask-image: var(--icon-yes);\n    }\n\n    .icon.file {\n        mask-image: var(--icon-file);\n    }\n\n    .icon.loading {\n        mask-image: var(--icon-loading);\n    }\n\n    .icon.arrow {\n        mask-image: var(--icon-arrow);\n    }\n\n    .icon.error {\n        mask-image: var(--icon-error);\n    }\n\n    .icon.refresh {\n        mask-image: var(--icon-refresh);\n    }\n\n    .icon.clear {\n        mask-image: var(--icon-clear);\n    }\n\n    .icon.copy {\n        mask-image: var(--icon-copy);\n    }\n    .icon.listeners {\n        mask-image: var(--icon-listeners);\n    }\n    .icon.listener {\n        mask-image: var(--icon-listener);\n    }\n    .icon.count {\n        mask-image: var(--icon-count);\n    }\n    .icon.flags {\n        mask-image: var(--icon-flags);\n    }\n    .icon.transform {\n        mask-image: var(--icon-transform);\n    }\n    .icon.dark {\n        mask-image: var(--icon-dark);\n    }\n    .icon.delete {\n        mask-image: var(--icon-delete);\n    }\n    .icon.inspect {\n        mask-image: var(--icon-inspect);\n    }\n`;\n","import { css } from \"lit\";\nimport { icons } from \"../styles/icons\";\n\nexport const styles = css`\n    ${icons}\n    :host {\n        display: flex;\n        flex-direction: column;\n        font-family:\n            -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial,\n            sans-serif;\n        font-size: 14px;\n        line-height: 1.5;\n        color: var(--fe-color-text, #333);\n        background: var(--fe-color-bg, #fff);\n        border: 1px solid var(--fe-color-border, #e8e8e8);\n        border-radius: 6px;\n        overflow: hidden;\n    }\n\n    :host([dark]) {\n        --fe-color-text: rgba(255, 255, 255, 0.85);\n        --fe-color-bg: #1f1f1f;\n        --fe-color-border: #303030;\n        --fe-color-header-bg: #141414;\n        --fe-color-hover: rgba(255, 255, 255, 0.08);\n        --fe-color-text-secondary: rgba(255, 255, 255, 0.45);\n        --fe-color-input-bg: rgba(255, 255, 255, 0.08);\n        --fe-color-tag-bg: rgba(255, 255, 255, 0.08);\n        --fe-color-tag-text: rgba(255, 255, 255, 0.85);\n        --fe-color-listener-bg: rgba(255, 255, 255, 0.04);\n        --fe-color-listener-border: rgba(255, 255, 255, 0.12);\n        --fe-color-listener-hover: rgba(255, 255, 255, 0.08);\n    }\n\n    .header {\n        display: flex;\n        align-items: center;\n        padding: 1em;\n        background: var(--fe-color-header-bg, #fafafa);\n        border-bottom: 1px solid var(--fe-color-border, #e8e8e8);\n        gap: 8px;\n    }\n\n    .header-title {\n        flex: 1;\n        font-size: 16px;\n        font-weight: 600;\n        color: var(--fe-color-text, #333);\n    }\n\n    .toolbar {\n        display: flex;\n        align-items: center;\n        padding: 0.75em 1em;\n        border-bottom: 1px solid var(--fe-color-border, #e8e8e8);\n        gap: 12px;\n    }\n\n    .filter-input {\n        width: 20%;\n        min-width: 150px;\n        padding: 0.4em 0.8em;\n        border: 1px solid var(--fe-color-border, #d9d9d9);\n        border-radius: 6px;\n        background: var(--fe-color-input-bg, #fff);\n        color: var(--fe-color-text, #333);\n        font-size: 13px;\n        transition: all 0.3s;\n    }\n\n    .filter-input:focus {\n        outline: none;\n        border-color: #1890ff;\n        box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n    }\n\n    .filter-input::placeholder {\n        color: var(--fe-color-text-secondary, #bfbfbf);\n    }\n\n    .toolbar-spacer {\n        flex: 1;\n        color: var(--fe-color-text-secondary, #999);\n        font-size: 12px;\n    }\n\n    .btn {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        gap: 6px;\n        padding: 0.4em 0.8em;\n        border: none;\n        border-radius: 4px;\n        background: transparent;\n        color: var(--fe-color-text, #555);\n        font-size: 13px;\n        cursor: pointer;\n        transition: all 0.3s;\n        user-select: none;\n    }\n\n    .btn:hover {\n        color: #1890ff;\n        background: rgba(24, 144, 255, 0.06);\n    }\n\n    .btn-pressed {\n        color: #1890ff;\n        background: rgba(24, 144, 255, 0.1);\n    }\n\n    .btn-icon {\n        padding: 0.2em;\n        width: 24px;\n        height: 24px;\n    }\n\n    .btn-pressed {\n        color: #1890ff;\n        background: rgba(24, 144, 255, 0.1);\n    }\n\n    .logs {\n        flex: 1;\n        display: flex;\n        flex-direction: column;\n        overflow-y: auto;\n        overflow-x: hidden;\n        padding: 0;\n    }\n\n    .log-item {\n        display: flex;\n        align-items: flex-start;\n        padding: 0.5em;\n        border-radius: 4px;\n        transition: background 0.2s;\n        border-bottom: 1px solid var(--fe-color-border, #fafafa);\n    }\n\n    .log-item:hover {\n        background: var(--fe-color-hover, #fcfcfc);\n    }\n\n    .log-content {\n        flex: 1;\n        display: flex;\n        flex-direction: column;\n        gap: 4px;\n        min-width: 0;\n    }\n\n    .log-header {\n        display: flex;\n        align-items: center;\n        gap: 4px;\n        flex-wrap: wrap;\n        padding: 0;\n    }\n\n    .log-header .icon {\n        --icon-size: 16px;\n        color: #818181;\n        flex-shrink: 0;\n    }\n\n    .log-type {\n        flex: 1;\n        font-weight: 500;\n        color: var(--fe-color-text, #333);\n        font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n    }\n\n    .log-time {\n        font-size: 12px;\n        color: var(--fe-color-text-secondary, #999);\n    }\n\n    .tag {\n        display: inline-flex;\n        align-items: center;\n        padding: 0.1em 0.4em;\n        border-radius: 5px;\n        font-size: 11px;\n        white-space: nowrap;\n        background: var(--fe-color-tag-bg, #f0f0f0);\n        color: var(--fe-color-tag-text, #666);\n    }\n\n    .tag-blue {\n        background: #e6f7ff;\n        color: #1890ff;\n        border: 1px solid #91d5ff;\n    }\n\n    .tag-green {\n        background: #f6ffed;\n        color: #52c41a;\n        border: 1px solid #b7eb8f;\n    }\n\n    .tag-orange {\n        background: #fff7e6;\n        color: #fa8c16;\n        border: 1px solid #ffd591;\n    }\n\n    .tag-red {\n        background: #fff1f0;\n        color: #ff4d4f;\n        border: 1px solid #ffa39e;\n    }\n\n    .tag-purple {\n        background: #f9f0ff;\n        color: #722ed1;\n        border: 1px solid #d3adf7;\n    }\n\n    .tag-gray {\n        background: #f5f5f5;\n        color: #8c8c8c;\n        border: 1px solid #d9d9d9;\n    }\n\n    /* 暗黑模式下的 tag 颜色样式 */\n    :host([dark]) .tag-blue {\n        background: rgba(24, 144, 255, 0.15);\n        color: #40a9ff;\n        border: 1px solid rgba(24, 144, 255, 0.3);\n    }\n\n    :host([dark]) .tag-green {\n        background: rgba(82, 196, 26, 0.15);\n        color: #73d13d;\n        border: 1px solid rgba(82, 196, 26, 0.3);\n    }\n\n    :host([dark]) .tag-orange {\n        background: rgba(250, 140, 22, 0.15);\n        color: #ffa940;\n        border: 1px solid rgba(250, 140, 22, 0.3);\n    }\n\n    :host([dark]) .tag-red {\n        background: rgba(255, 77, 79, 0.15);\n        color: #ff7875;\n        border: 1px solid rgba(255, 77, 79, 0.3);\n    }\n\n    :host([dark]) .tag-purple {\n        background: rgba(114, 46, 209, 0.15);\n        color: #b37feb;\n        border: 1px solid rgba(114, 46, 209, 0.3);\n    }\n\n    :host([dark]) .tag-gray {\n        background: rgba(140, 140, 140, 0.15);\n        color: #bfbfbf;\n        border: 1px solid rgba(140, 140, 140, 0.3);\n    }\n\n    .log-payload {\n        font-size: 12px;\n        color: var(--fe-color-text-secondary, #999);\n        overflow: hidden;\n        text-overflow: ellipsis;\n        display: -webkit-box;\n        -webkit-line-clamp: 2;\n        -webkit-box-orient: vertical;\n        line-height: 1.4;\n        padding: 0em 20px;\n        padding-top: 0px;\n    }\n\n    .log-listeners {\n        padding: 0em 20px;\n        display: flex;\n        flex-wrap: wrap;\n        gap: 4px;\n    }\n\n    .log-listeners-visible {\n        display: flex;\n    }\n\n    .log-listeners-hidden {\n        display: none;\n    }\n\n    .listener {\n        display: inline-flex;\n        align-items: center;\n        gap: 4px;\n        padding: 0.25em 0.5em;\n        border-radius: 8px;\n        font-size: 12px;\n        background: rgba(0, 0, 0, 0.03);\n        border: 1px solid rgba(0, 0, 0, 0.06);\n        transition: all 0.2s;\n        box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);\n        cursor: pointer;\n    }\n\n    .listener:hover {\n        background: rgba(0, 0, 0, 0.05);\n        box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n    }\n\n    /* 暗黑模式下的 listener 样式 */\n    :host([dark]) .listener {\n        background: var(--fe-color-listener-bg, rgba(255, 255, 255, 0.04));\n        border: 1px solid var(--fe-color-listener-border, rgba(255, 255, 255, 0.12));\n        box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\n    }\n\n    :host([dark]) .listener:hover {\n        background: var(--fe-color-listener-hover, rgba(255, 255, 255, 0.08));\n        box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5);\n    }\n\n    .listener-status {\n        width: 14px;\n        height: 14px;\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        flex-shrink: 0;\n    }\n\n    .listener-status .icon {\n        --icon-size: 12px;\n    }\n\n    .listener-status.running .icon {\n        color: #1890ff;\n    }\n\n    .listener-status.yes .icon {\n        color: #52c41a;\n    }\n\n    .listener-status.error .icon {\n        color: #ff4d4f;\n    }\n\n    .listener-name {\n        font-weight: 500;\n        color: var(--fe-color-text, #333);\n        font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n        font-size: 11px;\n    }\n\n    .empty-state {\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        justify-content: center;\n        padding: 2em;\n        color: var(--fe-color-text-secondary, #999);\n        text-align: center;\n    }\n\n    .empty-state .icon {\n        --icon-size: 48px;\n        opacity: 0.3;\n    }\n\n    /* Emitter 下拉容器 */\n    .emitter-dropdown-container {\n        position: relative;\n        flex-shrink: 0;\n    }\n\n    /* Emitter 下拉占位符 */\n    .emitter-dropdown-spacer {\n        flex: 1;\n    }\n\n    /* 下拉触发按钮 */\n    .emitter-dropdown-trigger {\n        display: flex;\n        align-items: center;\n        gap: 6px;\n        width: 100%;\n        padding: 0;\n        border: none;\n        background: transparent;\n        cursor: pointer;\n        transition: all 0.3s;\n    }\n\n    .emitter-dropdown-trigger:hover .header-title {\n        color: #1890ff;\n    }\n\n    /* 下拉箭头 */\n    .dropdown-arrow {\n        display: inline-block;\n        width: 0;\n        height: 0;\n        border-left: 4px solid transparent;\n        border-right: 4px solid transparent;\n        border-top: 5px solid var(--fe-color-text, #333);\n        transition: transform 0.3s;\n        opacity: 0.6;\n    }\n\n    .dropdown-arrow.open {\n        transform: rotate(180deg);\n    }\n\n    /* 暗黑模式下的下拉箭头 */\n    :host([dark]) .dropdown-arrow {\n        border-top-color: rgba(255, 255, 255, 0.85);\n    }\n\n    /* 下拉菜单容器 */\n    .emitter-dropdown-menu {\n        position: absolute;\n        top: 100%;\n        left: 0;\n        margin-top: 4px;\n        min-width: 180px;\n        background: #ffffff;\n        border: 1px solid #e8e8e8;\n        border-radius: 6px;\n        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n        z-index: 1000;\n        overflow: hidden;\n        animation: dropdownFadeIn 0.2s ease-out;\n    }\n\n    @keyframes dropdownFadeIn {\n        from {\n            opacity: 0;\n            transform: translateY(-8px);\n        }\n        to {\n            opacity: 1;\n            transform: translateY(0);\n        }\n    }\n\n    /* 菜单项 */\n    .emitter-menu-item {\n        display: flex;\n        align-items: center;\n        gap: 8px;\n        padding: 10px 16px;\n        cursor: pointer;\n        transition: background 0.2s;\n        font-size: 14px;\n        color: #333;\n        text-align: left;\n    }\n\n    .emitter-menu-item:hover {\n        background: #f5f5f5;\n    }\n\n    .emitter-menu-item.active {\n        background: #e6f7ff;\n        color: #1890ff;\n        font-weight: 500;\n    }\n\n    /* 菜单项图标占位区域 */\n    .menu-item-icon {\n        width: 16px;\n        height: 16px;\n        flex-shrink: 0;\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n    }\n\n    .menu-item-icon .icon {\n        --icon-size: 14px;\n        color: #52c41a;\n    }\n\n    /* 菜单项标签 */\n    .menu-item-label {\n        flex: 1;\n        text-align: left;\n    }\n\n    /* 通用下拉菜单样式（供 renderMenu 使用） */\n    .dropdown-menu {\n        padding: 4px 0;\n        min-width: 150px;\n        background: var(--fe-color-bg, #fff);\n        border: 1px solid var(--fe-color-border, #e8e8e8);\n        border-radius: 6px;\n        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n    }\n\n    .dropdown-menu-item {\n        display: flex;\n        align-items: center;\n        gap: 8px;\n        padding: 8px 16px;\n        cursor: pointer;\n        transition: background 0.2s;\n        font-size: 14px;\n        color: var(--fe-color-text, #333);\n    }\n\n    .dropdown-menu-item:hover {\n        background: var(--fe-color-hover, #f5f5f5);\n    }\n\n    .dropdown-menu-item.active {\n        background: #e6f7ff;\n        color: #1890ff;\n    }\n\n    :host([dark]) .emitter-dropdown-menu {\n        background: #2a2a2a;\n        border-color: #404040;\n        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);\n    }\n\n    :host([dark]) .emitter-menu-item {\n        color: rgba(255, 255, 255, 0.85);\n    }\n\n    :host([dark]) .emitter-menu-item:hover {\n        background: rgba(255, 255, 255, 0.06);\n    }\n\n    :host([dark]) .emitter-menu-item.active {\n        background: rgba(24, 144, 255, 0.15);\n        color: #40a9ff;\n    }\n\n    :host([dark]) .dropdown-menu {\n        background: var(--fe-color-bg, #2a2a2a);\n        border-color: var(--fe-color-border, #404040);\n    }\n\n    :host([dark]) .dropdown-menu-item.active {\n        background: rgba(24, 144, 255, 0.15);\n        color: #40a9ff;\n    }\n`;\n","// packages/viewer/src/listenerViewer/styles.ts\nimport { css } from \"lit\";\nimport { icons } from \"../styles/icons\";\n\nexport const styles = css`\n    ${icons}\n    :host {\n        display: flex;\n        flex-direction: column;\n        font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n        font-size: 14px;\n        line-height: 1.5;\n        color: var(--fe-color-text, #333);\n        background: var(--fe-color-bg, #fff);\n        overflow: hidden;\n        position: relative;\n    }\n\n    :host([dark]) {\n        --fe-color-text: rgba(255, 255, 255, 0.85);\n        --fe-color-bg: #1f1f1f;\n        --fe-color-border: #303030;\n        --fe-color-header-bg: #141414;\n        --fe-color-hover: rgba(255, 255, 255, 0.08);\n        --fe-color-text-secondary: rgba(255, 255, 255, 0.45);\n        --fe-color-bg-secondary: rgba(255, 255, 255, 0.05);\n        --fe-color-tag-bg: rgba(255, 255, 255, 0.08);\n        --fe-color-tag-text: rgba(255, 255, 255, 0.85);\n        --fe-left-width: 33.33%;\n    }\n\n    :host {\n        --fe-left-width: 30%;\n    }\n\n    .toolbar {\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        padding: 0.75em 1em;\n        border-bottom: 1px solid var(--fe-color-border, #e8e8e8);\n        background: var(--fe-color-header-bg, #fff);\n    }\n\n    .toolbar-title {\n        font-size: 14px;\n        /* font-weight: 600;\n        color: var(--fe-color-text, #333); */\n    }\n\n    .main-container {\n        display: flex;\n        flex: 1;\n        overflow: hidden;\n        position: relative;\n    }\n\n    .tree-panel {\n        flex: 0 0 var(--fe-left-width, 33.33%);\n        overflow-y: auto;\n        overflow-x: hidden;\n        border-right: 1px solid var(--fe-color-border, #e8e8e8);\n        padding: 8px;\n    }\n\n    .tree-panel::-webkit-scrollbar {\n        width: 2px;\n    }\n    .tree-panel::-webkit-scrollbar-thumb {\n        background: transparent;\n    }\n    .tree-panel:hover::-webkit-scrollbar-thumb {\n        background: rgba(0, 0, 0, 0.2);\n    }\n\n    .listeners-panel {\n        flex: 1;\n        overflow-y: auto;\n        overflow-x: hidden;\n        padding: 8px;\n        padding-left: 0px;\n    }\n\n    .listeners-panel::-webkit-scrollbar {\n        width: 2px;\n    }\n    .listeners-panel::-webkit-scrollbar-thumb {\n        background: transparent;\n    }\n    .listeners-panel:hover::-webkit-scrollbar-thumb {\n        background: rgba(0, 0, 0, 0.2);\n    }\n\n    .resizer {\n        width: 8px;\n        cursor: col-resize;\n        background: transparent;\n        position: relative;\n        z-index: 10;\n        flex-shrink: 0;\n        user-select: none;\n    }\n\n    .resizer::after {\n        content: \"\";\n        position: absolute;\n        left: 50%;\n        top: 50%;\n        transform: translate(-50%, -50%);\n        width: 4px;\n        height: 40px;\n        background: var(--fe-color-border, #e8e8e8);\n        border-radius: 2px;\n        opacity: 0;\n        transition:\n            opacity 0.2s,\n            height 0.2s;\n    }\n\n    .resizer:hover::after {\n        opacity: 1;\n        background: #1890ff;\n    }\n\n    .resizer.dragging::after {\n        opacity: 1;\n        background: #1890ff;\n        height: 60px;\n    }\n\n    .empty-state {\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        justify-content: center;\n        padding: 3em;\n        padding-left: 0;\n        color: var(--fe-color-text-secondary, #999);\n        text-align: center;\n    }\n\n    .btn {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        gap: 6px;\n        padding: 0.4em 0.8em;\n        border: none;\n        border-radius: 4px;\n        background: transparent;\n        color: var(--fe-color-text, #333);\n        font-size: 13px;\n        cursor: pointer;\n        transition: all 0.3s;\n        user-select: none;\n    }\n\n    .btn:hover {\n        color: #1890ff;\n        background: rgba(24, 144, 255, 0.06);\n    }\n\n    .btn-icon {\n        padding: 0.2em;\n        width: 24px;\n        height: 24px;\n    }\n\n    .tag {\n        display: inline-flex;\n        align-items: center;\n        padding: 0.1em 0.4em;\n        border-radius: 5px;\n        font-size: 11px;\n        white-space: nowrap;\n        background: var(--fe-color-tag-bg, #f0f0f0);\n        color: var(--fe-color-tag-text, #666);\n    }\n\n    .tree-node {\n        display: flex;\n        align-items: center;\n        padding: 4px 8px;\n        cursor: pointer;\n        border-radius: 4px;\n        transition: background 0.2s;\n        user-select: none;\n    }\n\n    .tree-node:hover {\n        background: var(--fe-color-hover, #fafafa);\n    }\n\n    .tree-node.selected {\n        background: rgba(24, 144, 255, 0.1);\n    }\n\n    .tree-node-toggle {\n        width: 16px;\n        height: 16px;\n        margin-right: 4px;\n        cursor: pointer;\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        transition: transform 0.2s;\n    }\n\n    .tree-node-toggle.expanded {\n        transform: rotate(90deg);\n    }\n\n    .tree-node-toggle.hidden {\n        visibility: hidden;\n    }\n\n    .tree-node-content {\n        display: flex;\n        align-items: center;\n        gap: 6px;\n        flex: 1;\n    }\n\n    .tree-node-label {\n        font-family: \"SFMono-Regular\", Consolas, monospace;\n        font-size: 13px;\n        flex-grow: 1;\n    }\n\n    .tree-node-badge {\n        background: var(--fe-color-tag-bg, #f0f0f0);\n        color: var(--fe-color-tag-text, #666);\n        padding: 2px 6px;\n        border-radius: 8px;\n        font-size: 11px;\n    }\n\n    .tree-children {\n        padding-left: 16px;\n    }\n\n    .tag {\n        display: inline-flex;\n        align-items: center;\n        padding: 0.1em 0.4em;\n        border-radius: 5px;\n        font-size: 11px;\n        white-space: nowrap;\n        background: var(--fe-color-tag-bg, #f0f0f0);\n        color: var(--fe-color-tag-text, #666);\n    }\n\n    /* 保留消息卡片样式 */\n    .retained-message-card {\n        margin-bottom: 12px;\n        border-radius: 6px;\n        border: 1px solid #ffa39e;\n        background: #fff1f0;\n        overflow: hidden;\n        transition: all 0.2s;\n    }\n\n    .retained-message-card:hover {\n        box-shadow: 0 2px 8px rgba(255, 77, 79, 0.15);\n    }\n\n    .retained-message-header {\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        padding: 8px 12px;\n        background: rgba(255, 77, 79, 0.1);\n        border-bottom: 1px solid #ffa39e;\n    }\n\n    .retained-message-title {\n        flex: 1;\n        font-size: 13px;\n        font-weight: 500;\n        color: #ff4d4f;\n    }\n\n    .retained-message-actions {\n        display: flex;\n        gap: 4px;\n    }\n\n    .retained-message-content {\n        padding: 4px;\n    }\n\n    .retained-message-text {\n        margin: 0;\n        padding: 8px;\n        background: rgba(255, 255, 255, 0.6);\n        border-radius: 4px;\n        font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n        font-size: 12px;\n        line-height: 1.5;\n        color: #262626;\n        overflow-x: auto;\n        white-space: pre-wrap;\n        word-break: break-all;\n    }\n\n    /* 暗黑模式下的保留消息卡片 */\n    .retained-message-card.dark,\n    :host([dark]) .retained-message-card {\n        border: 1px solid rgba(255, 77, 79, 0.4);\n        background: rgba(255, 77, 79, 0.08);\n    }\n\n    .retained-message-card.dark:hover,\n    :host([dark]) .retained-message-card:hover {\n        box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\n    }\n\n    .retained-message-card.dark .retained-message-header,\n    :host([dark]) .retained-message-header {\n        background: rgba(255, 77, 79, 0.15);\n        border-bottom: 1px solid rgba(255, 77, 79, 0.3);\n    }\n\n    .retained-message-card.dark .retained-message-title,\n    :host([dark]) .retained-message-title {\n        color: #ff7875;\n    }\n\n    .retained-message-card.dark .retained-message-text,\n    :host([dark]) .retained-message-text {\n        background: rgba(0, 0, 0, 0.2);\n        color: rgba(255, 255, 255, 0.85);\n    }\n\n    @media (max-width: 568px) {\n        .main-container {\n            flex-direction: column;\n        }\n\n        .tree-panel {\n            flex: 0 0 40%;\n            border-right: none;\n            border-bottom: 1px solid var(--fe-color-border, #e8e8e8);\n        }\n\n        .resizer {\n            display: none;\n        }\n    }\n`;\n","// packages/viewer/src/listenerViewer/listenerCardStyles.ts\nimport { css } from \"lit\";\n\nexport const styles = css`\n    :host {\n        display: block;\n    }\n\n    :host([dark]) {\n        --fe-color-card-bg: rgba(255, 255, 255, 0.04);\n        --fe-color-card-border: rgba(255, 255, 255, 0.12);\n        --fe-color-card-hover: rgba(255, 255, 255, 0.08);\n    }\n\n    .listener-card {\n        display: table;\n        width: 100%;\n        padding: 0px;\n        margin-bottom: 8px;\n        border-radius: 6px;\n        border: 1px solid var(--fe-color-border, #e8e8e8);\n        transition: all 0.2s;\n        box-sizing: border-box;\n        background-color: #f9f9f9;\n    }\n\n    .listener-card:hover {\n        /* border-color: #1890ff; */\n        box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n    }\n\n    :host([dark]) .listener-card {\n        background-color: var(--fe-color-card-bg, rgba(255, 255, 255, 0.04));\n        border: 1px solid var(--fe-color-card-border, rgba(255, 255, 255, 0.12));\n    }\n\n    :host([dark]) .listener-card:hover {\n        background-color: var(--fe-color-card-hover, rgba(255, 255, 255, 0.08));\n        box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\n    }\n\n    .listener-row {\n        display: table-row;\n        border-bottom: 1px solid var(--fe-color-border, #e8e8e8);\n    }\n\n    .listener-row:last-child {\n        border-bottom: none;\n    }\n\n    .listener-cell {\n        display: table-cell;\n        padding: 4px 8px;\n        vertical-align: middle;\n        border-right: 1px solid var(--fe-color-border, #e8e8e8);\n    }\n\n    .listener-cell:first-child {\n        width: 80px;\n        min-width: 80px;\n    }\n\n    .listener-cell:last-child {\n        border-right: none;\n    }\n\n    .listener-label {\n        color: var(--fe-color-text-secondary, #999);\n        font-size: 12px;\n        font-weight: 500;\n    }\n\n    .listener-value {\n        color: var(--fe-color-text, #333);\n        font-size: 13px;\n    }\n\n    .listener-function {\n        font-family: \"SFMono-Regular\", Consolas, monospace;\n        color: #1890ff;\n        cursor: pointer;\n        text-decoration: underline;\n    }\n\n    .listener-function:hover {\n        color: #40a9ff;\n    }\n\n    :host([dark]) .listener-function {\n        color: #40a9ff;\n    }\n\n    :host([dark]) .listener-function:hover {\n        color: #69c0ff;\n    }\n\n    .tag {\n        display: inline-flex;\n        align-items: center;\n        padding: 0.1em 0.4em;\n        border-radius: 5px;\n        font-size: 11px;\n        white-space: nowrap;\n        background: var(--fe-color-tag-bg, #f0f0f0);\n        color: var(--fe-color-tag-text, #666);\n    }\n\n    .empty-state {\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        padding: 1em;\n        color: var(--fe-color-text-secondary, #999);\n        text-align: center;\n    }\n`;\n","export function removeItem(arr: any[], value: any) {\n    for (let i = arr.length - 1; i >= 0; i--) {\n        if (arr[i] === value) {\n            arr.splice(i, 1);\n        }\n    }\n}\n","import { html } from \"lit\";\n\nexport interface TagColors {\n    bg: string;\n    color: string;\n    border?: string;\n}\n\n// 默认颜色方案\nconst defaultColors: TagColors = {\n    bg: \"#f0f0f0\",\n    color: \"#666\",\n    border: \"#d9d9d9\",\n};\n\n// 预定义颜色方案（亮色模式）\nconst colorSchemes: Record<string, TagColors> = {\n    blue: { bg: \"#e6f7ff\", color: \"#1890ff\", border: \"#91d5ff\" },\n    green: { bg: \"#f6ffed\", color: \"#52c41a\", border: \"#b7eb8f\" },\n    orange: { bg: \"#fff7e6\", color: \"#fa8c16\", border: \"#ffd591\" },\n    red: { bg: \"#fff1f0\", color: \"#ff4d4f\", border: \"#ffa39e\" },\n    purple: { bg: \"#f9f0ff\", color: \"#722ed1\", border: \"#d3adf7\" },\n    gray: { bg: \"#f5f5f5\", color: \"#8c8c8c\", border: \"#d9d9d9\" },\n};\n\n// 预定义颜色方案（暗黑模式）\nconst darkColorSchemes: Record<string, TagColors> = {\n    blue: { bg: \"rgba(24, 144, 255, 0.15)\", color: \"#40a9ff\", border: \"rgba(24, 144, 255, 0.3)\" },\n    green: { bg: \"rgba(82, 196, 26, 0.15)\", color: \"#73d13d\", border: \"rgba(82, 196, 26, 0.3)\" },\n    orange: { bg: \"rgba(250, 140, 22, 0.15)\", color: \"#ffa940\", border: \"rgba(250, 140, 22, 0.3)\" },\n    red: { bg: \"rgba(255, 77, 79, 0.15)\", color: \"#ff7875\", border: \"rgba(255, 77, 79, 0.3)\" },\n    purple: { bg: \"rgba(114, 46, 209, 0.15)\", color: \"#b37feb\", border: \"rgba(114, 46, 209, 0.3)\" },\n    gray: { bg: \"rgba(140, 140, 140, 0.15)\", color: \"#bfbfbf\", border: \"rgba(140, 140, 140, 0.3)\" },\n};\n\n/**\n * 根据文本生成颜色\n */\nfunction getTagColor(text: string): string {\n    const colors = [\"blue\", \"green\", \"orange\", \"red\", \"purple\"];\n    let hash = 0;\n    for (let i = 0; i < text.length; i++) {\n        hash = text.charCodeAt(i) + ((hash << 5) - hash);\n    }\n    return colors[Math.abs(hash) % colors.length];\n}\n\nexport type TagOptions = {\n    tooltip?: string;\n    onClick?: () => void;\n    className?: string;\n    styles: string;\n    dark?: boolean;\n};\n\n/**\n * 渲染标签组件\n * @param text - 标签文本\n * @param color - 颜色名称 (blue, green, orange, red, purple, gray)\n * @param tooltip - 提示文本\n * @param className - 额外的CSS类名\n * @param dark - 是否使用暗黑模式\n * @returns TemplateResult\n */\nexport function renderTag(\n    text: string,\n    color?: keyof typeof colorSchemes,\n    tooltip?: string,\n    className?: string,\n    dark?: boolean,\n): ReturnType<typeof html>;\n\n/**\n * 渲染标签组件（选项模式）\n * @param text - 标签文本\n * @param options - 标签选项\n * @returns TemplateResult\n */\nexport function renderTag(\n    text: string,\n    options?: TagOptions,\n): ReturnType<typeof html>;\n\nexport function renderTag(\n    text: string,\n    colorOrOptions?: keyof typeof colorSchemes | TagOptions,\n    tooltip?: string,\n    className?: string,\n    dark?: boolean,\n) {\n    // 判断是选项模式还是颜色模式\n    const isOptionsMode =\n        typeof colorOrOptions === \"object\" && colorOrOptions !== null && \"styles\" in colorOrOptions;\n\n    if (isOptionsMode) {\n        // 选项模式\n        const options = colorOrOptions as TagOptions;\n        const isDark = options.dark ?? dark ?? false;\n        const classes = [\"tag\", isDark ? \"dark\" : \"\", options.className].filter(Boolean).join(\" \");\n\n        return html`<span\n            class=\"${classes}\"\n            title=\"${options.tooltip || text}\"\n            style=\"${options.styles}\"\n            @click=\"${options.onClick}\"\n        >\n            ${text}\n        </span>`;\n    } else {\n        // 颜色模式\n        const color = colorOrOptions as keyof typeof colorSchemes | undefined;\n        const colorKey = color || getTagColor(text);\n        const isDark = dark ?? false;\n        const schemes = isDark ? darkColorSchemes : colorSchemes;\n        const colors = schemes[colorKey] || defaultColors;\n\n        const classes = [\"tag\", className].filter(Boolean).join(\" \");\n\n        return html`<span\n            class=\"${classes}\"\n            title=\"${tooltip || text}\"\n            style=\"display: inline-flex; align-items: center; padding: 0.1em 0.4em; border-radius: 5px; font-size: 11px; white-space: nowrap; background: ${colors.bg}; color: ${colors.color}; ${\n            colors.border ? `border: 1px solid ${colors.border};` : \"\"\n        }\"\n        >\n            ${text}\n        </span>`;\n    }\n}\n","import { html } from \"lit\";\n\nexport interface ButtonOptions {\n    icon?: string;\n    pressed?: boolean;\n    className?: string;\n    title?: string;\n}\n\n/**\n * 渲染按钮组件\n * @param content - 按钮内容\n * @param onClick - 点击事件处理函数\n * @param options - 按钮选项\n * @returns TemplateResult\n */\nexport function renderButton(\n    content: unknown,\n    onClick: () => void,\n    options: ButtonOptions = {},\n) {\n    const { icon, pressed, className = \"\", title } = options;\n    const classes = [\"btn\", className];\n    if (pressed) classes.push(\"btn-pressed\");\n    if (icon) classes.push(\"btn-icon\");\n\n    return html`<button\n        class=\"${classes.join(\" \")}\"\n        title=\"${title || \"\"}\"\n        @click=\"${onClick}\"\n        style=\"display: inline-flex; align-items: center; justify-content: center; gap: 6px; padding: 0.4em 0.8em; border: none; border-radius: 4px; background: transparent; cursor: pointer; transition: all 0.3s; user-select: none; ${\n        icon ? \"padding: 0.2em; width: 24px; height: 24px;\" : \"\"\n    }\"\n    >\n        ${icon ? html`<span class=\"icon ${icon}\"></span>` : \"\"}\n        ${content}\n    </button>`;\n}\n","import { html } from \"lit\";\n\n/**\n * 渲染图标组件\n * @param name - 图标名称（CSS类名）\n * @param tooltip - 提示文本\n * @returns TemplateResult\n */\nexport function renderIcon(name: string, tooltip?: string) {\n    if (tooltip) {\n        return html`<span class=\"icon ${name}\" title=\"${tooltip}\"></span>`;\n    } else {\n        return html`<span class=\"icon ${name}\"></span>`;\n    }\n}\n","import { html } from \"lit\";\nimport { renderButton } from \"./index\";\n\nexport interface RetainMessageOptions {\n    message: any;\n    pathKey: string;\n    dark?: boolean;\n    onDelete?: (pathKey: string) => void;\n    onPrint?: (message: any) => void;\n    onCopy?: (message: any) => void;\n}\n\n/**\n * 渲染保留消息卡片\n * @param options - 保留消息选项\n * @returns TemplateResult\n */\nexport function renderRetainMessage(options: RetainMessageOptions) {\n    const { message, pathKey, dark = false, onDelete, onPrint, onCopy } = options;\n\n    const messageStr = JSON.stringify(message, null, 2);\n    const hasMore = messageStr.split(\"\\n\").length > 15;\n    const displayStr = hasMore\n        ? messageStr.split(\"\\n\").slice(0, 5).join(\"\\n\") + \"\\n...\"\n        : messageStr;\n\n    return html`\n        <div class=\"retained-message-card${dark ? \" dark\" : \"\"}\">\n            <div class=\"retained-message-header\">\n                <span class=\"retained-message-title\">保留消息</span>\n                <div class=\"retained-message-actions\">\n                    ${renderButton(\"\", () => onDelete?.(pathKey), {\n                        icon: \"delete\",\n                        className: \"btn-icon\",\n                        title: \"删除保留消息\",\n                    })}\n                    ${renderButton(\"\", () => onPrint?.(message), {\n                        icon: \"listeners\",\n                        className: \"btn-icon\",\n                        title: \"打印到控制台\",\n                    })}\n                    ${renderButton(\"\", () => onCopy?.(message), {\n                        icon: \"copy\",\n                        className: \"btn-icon\",\n                        title: \"复制消息内容\",\n                    })}\n                </div>\n            </div>\n            <div class=\"retained-message-content\">\n                <pre class=\"retained-message-text\">${displayStr}</pre>\n            </div>\n        </div>\n    `;\n}\n","export const languages = {\n    cn: {\n        // eventViewer\n        \"eventViewer.filterPlaceholder\": \"事件类型过滤\",\n        \"eventViewer.normalMode\": \"正常模式\",\n        \"eventViewer.darkMode\": \"暗黑模式\",\n        \"eventViewer.showEvent\": \"显示事件\",\n        \"eventViewer.showListeners\": \"显示注册的监听器\",\n        \"eventViewer.totalLogs\": \"共{0}条\",\n        \"eventViewer.hideListenerDetails\": \"隐藏监听器详情\",\n        \"eventViewer.showListenerDetails\": \"显示监听器详情\",\n        \"eventViewer.clear\": \"清空\",\n        \"eventViewer.extendedFlags\": \"扩展标识\",\n        \"eventViewer.transformed\": \"经过转换\",\n        \"eventViewer.serialNumber\": \"序号\",\n        \"eventViewer.totalListeners\": \"共{0}个监听器\",\n        \"eventViewer.retainLastEvent\": \"保留最后一次事件数据\",\n        \"eventViewer.rawEventType\": \"原始事件类型: {0}\",\n        \"eventViewer.executionTime\": \"执行耗时\",\n        \"eventViewer.copyMessage\": \"复制事件消息\",\n        \"eventViewer.triggerTime\": \"触发时间\",\n        \"eventViewer.eventType\": \"事件类型\",\n        \"eventViewer.listenerTag\": \"监听器标签: {0}\",\n        \"eventViewer.executionCount\": \"执行次数计数（当前/总数）\",\n        \"eventViewer.listenerFlags\": \"监听器标识flags\",\n        \"eventViewer.executing\": \"执行中...\",\n        \"eventViewer.error\": \"错误: {0}\",\n        \"eventViewer.noEventLogs\": \"暂无事件日志\",\n        \"eventViewer.listener\": \"监听器: {0}\",\n        \"eventViewer.executionResult\": \"执行结果：\",\n        \"eventViewer.switchEmitter\": \"切换 Emitter\",\n        \"eventViewer.inspect\": \"注册实例到控制台：{}\",\n        // listenerViewer\n        \"listenerViewer.registeredListeners\": \"已注册监听器\",\n        \"listenerViewer.refresh\": \"刷新\",\n        \"listenerViewer.noRegisteredListeners\": \"暂无注册的监听器\",\n        \"listenerViewer.nodeHasNoListeners\": \"该节点暂无监听器\",\n        \"listenerViewer.listener\": \"监听器: {0}\",\n        \"listenerViewer.executionCount\": \"执行次数: {0}/{1}\",\n        \"listenerViewer.tag\": \"标签: {0}\",\n        \"listenerViewer.flags\": \"标识: {0}\",\n        \"listenerViewer.retainedMessage\": \"保留消息\",\n        // listenerCard\n        \"listenerCard.invalidData\": \"监听器数据无效\",\n        \"listenerCard.listenerFunction\": \"监听函数\",\n        \"listenerCard.executionCount\": \"执行次数\",\n        \"listenerCard.tag\": \"标签\",\n        \"listenerCard.flags\": \"标识\",\n        \"listenerCard.returnValue\": \"返回值\",\n        \"listenerCard.clickToConsole\": \"点击在控制台输出监听器信息\",\n        \"listenerCard.clickToConsoleResult\": \"单击显示在控制台\",\n        \"listenerCard.anonymous\": \"anonymous\",\n    },\n    en: {\n        // eventViewer\n        \"eventViewer.filterPlaceholder\": \"Filter by event type\",\n        \"eventViewer.normalMode\": \"Normal mode\",\n        \"eventViewer.darkMode\": \"Dark mode\",\n        \"eventViewer.showEvent\": \"Show events\",\n        \"eventViewer.showListeners\": \"Show registered listeners\",\n        \"eventViewer.totalLogs\": \"Total {0}\",\n        \"eventViewer.hideListenerDetails\": \"Hide listener details\",\n        \"eventViewer.showListenerDetails\": \"Show listener details\",\n        \"eventViewer.clear\": \"Clear\",\n        \"eventViewer.extendedFlags\": \"Extended flags\",\n        \"eventViewer.transformed\": \"Transformed\",\n        \"eventViewer.serialNumber\": \"Serial number\",\n        \"eventViewer.totalListeners\": \"{0} listeners\",\n        \"eventViewer.retainLastEvent\": \"Retain last event data\",\n        \"eventViewer.rawEventType\": \"Raw event type: {0}\",\n        \"eventViewer.executionTime\": \"Execution time\",\n        \"eventViewer.copyMessage\": \"Copy event message\",\n        \"eventViewer.triggerTime\": \"Trigger time\",\n        \"eventViewer.eventType\": \"Event type\",\n        \"eventViewer.listenerTag\": \"Listener tag: {0}\",\n        \"eventViewer.executionCount\": \"Execution count (current/total)\",\n        \"eventViewer.listenerFlags\": \"Listener flags\",\n        \"eventViewer.executing\": \"Executing...\",\n        \"eventViewer.error\": \"Error: {0}\",\n        \"eventViewer.noEventLogs\": \"No event logs\",\n        \"eventViewer.listener\": \"Listener: {0}\",\n        \"eventViewer.executionResult\": \"Execution result:\",\n        \"eventViewer.switchEmitter\": \"Switch Emitter\",\n        \"eventViewer.inspect\": \"Inject to console: {}\",\n        // listenerViewer\n        \"listenerViewer.registeredListeners\": \"Registered Listeners\",\n        \"listenerViewer.refresh\": \"Refresh\",\n        \"listenerViewer.noRegisteredListeners\": \"No registered listeners\",\n        \"listenerViewer.nodeHasNoListeners\": \"This node has no listeners\",\n        \"listenerViewer.listener\": \"Listener: {0}\",\n        \"listenerViewer.executionCount\": \"Execution count: {0}/{1}\",\n        \"listenerViewer.tag\": \"Tag: {0}\",\n        \"listenerViewer.flags\": \"Flags: {0}\",\n        \"listenerViewer.retainedMessage\": \"Retained Message\",\n        // listenerCard\n        \"listenerCard.invalidData\": \"Invalid listener data\",\n        \"listenerCard.listenerFunction\": \"Listener function\",\n        \"listenerCard.executionCount\": \"Execution count\",\n        \"listenerCard.tag\": \"Tag\",\n        \"listenerCard.flags\": \"Flags\",\n        \"listenerCard.returnValue\": \"Return value\",\n        \"listenerCard.clickToConsole\": \"Click to output listener info to console\",\n        \"listenerCard.clickToConsoleResult\": \"Click to show in console\",\n        \"listenerCard.anonymous\": \"anonymous\",\n    },\n};\n","import { languages } from \"./languages\";\n\nlet language: string = \"cn\";\n\nexport function setLanguage(lang: string = language) {\n    if (lang in languages) language = lang;\n}\n\n/**\n *  翻译内容\n *\n * @param key\n */\nexport function t(key: string, ...args: any[]) {\n    const words = (languages as any)[language] || languages.cn;\n    const word = key in words ? words[key] : key;\n    // 定义正则匹配 {任意内容} 格式的占位符（非贪婪匹配）\n    const placeholderRegex = /\\{[^}]*\\}/g;\n    let argIndex = 0;\n\n    return word.replace(placeholderRegex, () => {\n        // 如果有剩余参数，使用参数替换；否则保留原占位符\n        if (argIndex < args.length) {\n            return String(args[argIndex++]);\n        }\n        // 无参数时返回原占位符（保持 {xxx} 格式）\n        return placeholderRegex.exec(word)?.[0] || \"\";\n    });\n}\n","// packages/viewer/src/listenerViewer/listenerCard.ts\nimport { LitElement, html } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport { styles } from \"./listenerCardStyles\";\nimport type { FastEventListenerMeta } from \"fastevent\";\nimport type { ItemOf } from \"../types\";\nimport { removeItem, renderTag } from \"../utils\";\nimport { t, setLanguage } from \"../utils/t\";\nimport {\n    isPathMatched,\n    type FastEvent,\n    type FastEventHooks,\n    type FastEventListenerNode,\n    type TypedFastEventMessage,\n} from \"fastevent\";\n\n/**\n * fastevent-listener-card 组件 - 显示单个监听器的详细信息\n */\n@customElement(\"fastevent-listener-card\")\nexport class FastEventListenerCard extends LitElement {\n    static styles = styles;\n\n    @property({ attribute: false })\n    emitter?: FastEvent<any, any, any>;\n\n    @property({ attribute: false })\n    listener?: FastEventListenerMeta;\n    @property({ type: Boolean, reflect: true })\n    dark = false;\n    @property({ type: String })\n    type?: string;\n\n    @property({ type: String, reflect: true })\n    lang = \"cn\";\n\n    connectedCallback(): void {\n        super.connectedCallback();\n        this._addListenerHook();\n        setLanguage(this.lang);\n    }\n    disconnectedCallback(): void {\n        super.disconnectedCallback();\n        this._removeListenerHook();\n    }\n\n    override willUpdate(changedProperties: Map<PropertyKey, unknown>): void {\n        super.willUpdate(changedProperties);\n        if (changedProperties.has(\"lang\")) {\n            setLanguage(this.lang);\n        }\n    }\n\n    private _onAfterExecuteListener: ItemOf<FastEventHooks[\"AfterExecuteListener\"]> = (\n        message: TypedFastEventMessage,\n        _returns: any[],\n        _listeners: FastEventListenerNode[],\n    ) => {\n        //\n        if (isPathMatched(message.type.split(\"/\"), this.type!.split(\"/\"))) {\n            this.requestUpdate();\n        }\n    };\n\n    private _addListenerHook() {\n        if (this.emitter) {\n            this.emitter.hooks.AfterExecuteListener.push(this._onAfterExecuteListener!);\n        }\n    }\n    private _removeListenerHook() {\n        if (this.emitter) {\n            removeItem(this.emitter.hooks.AfterExecuteListener, this._onAfterExecuteListener!);\n        }\n    }\n\n    private _formatListenerCount(listener: FastEventListenerMeta): string {\n        const [, total, executed] = listener;\n        return total === 0 ? `${executed}/∞` : `${executed}/${total}`;\n    }\n\n    getFunctionPosition(fn: Function) {\n        // 将函数转换为字符串并尝试定位\n        const fnStr = fn.toString();\n\n        // 使用 Error.stack 来获取当前位置\n        const stack = new Error().stack;\n\n        // 输出函数字符串和堆栈\n        console.group(\"函数定位\");\n        console.log(\"函数代码:\", fnStr.substring(0, 200));\n        console.log(\"当前调用栈:\", stack);\n        console.groupEnd();\n\n        // 在 DevTools 中，直接打印函数对象会显示可点击的链接\n        console.log(fn);\n    }\n    private _printListenerToConsole(listener: FastEventListenerMeta): void {\n        const [fn] = listener;\n        if (typeof fn !== \"function\") {\n            console.warn(t(\"listenerCard.invalidData\"));\n            console.log(\"元数据:\", {\n                executed: `${listener[2]}/${listener[1]}`,\n                tag: listener[3],\n                flags: listener[4],\n            });\n            return;\n        }\n        console.group(`FastEvent Listener`);\n        console.log(t(\"listenerViewer.listener\", fn.name || t(\"listenerCard.anonymous\")));\n        console.log(fn);\n        console.log(t(\"listenerViewer.executionCount\", listener[2], listener[1]));\n        console.log(t(\"listenerViewer.tag\", listener[3]));\n        if (listener[4] !== undefined) {\n            console.log(t(\"listenerViewer.flags\", listener[4]));\n        }\n        console.groupEnd();\n    }\n    private _printListenerResultToConsole(listener: FastEventListenerMeta): void {\n        if (listener.length === 6) {\n            console.group(`FastEvent Listener returns`);\n            const result = listener[5] instanceof WeakRef ? listener[5].deref() : listener[5];\n            console.log(result);\n            console.groupEnd();\n        }\n    }\n\n    private _renderReturns(listener: FastEventListenerMeta) {\n        if (listener.length === 6 && listener[5]) {\n            const result = listener[5] instanceof WeakRef ? listener[5].deref() : listener[5];\n            return html`\n                    <div class=\"listener-row\">\n                        <div class=\"listener-cell listener-label\">${t(\"listenerCard.returnValue\")}</div>\n                        <div class=\"listener-cell listener-value\" title=\"${t(\"listenerCard.clickToConsoleResult\")}\" style=\"cursor:pointer\"\n                        @click=\"${() => this._printListenerResultToConsole(this.listener!)}\"\n>${result instanceof Error ? result.stack : JSON.stringify(result)}</div>\n                    </div>\n                `;\n        }\n    }\n    override render() {\n        if (!this.listener) {\n            return html`\n                <div class=\"empty-state\">${t(\"listenerCard.invalidData\")}</div>\n            `;\n        }\n\n        const [fn, , , tag, flags] = this.listener;\n        const functionName = fn.name || t(\"listenerCard.anonymous\");\n\n        return html`\n            <div class=\"listener-card\">\n                <div class=\"listener-row\">\n                    <div class=\"listener-cell listener-label\">${t(\"listenerCard.listenerFunction\")}</div>\n                    <div class=\"listener-cell\">\n                        <span\n                            class=\"listener-function\"\n                            @click=\"${() => this._printListenerToConsole(this.listener!)}\"\n                            title=\"${t(\"listenerCard.clickToConsole\")}\"\n                        >\n                            ${functionName}\n                        </span>\n                    </div>\n                </div>\n                <div class=\"listener-row\">\n                    <div class=\"listener-cell listener-label\">${t(\"listenerCard.executionCount\")}</div>\n                    <div class=\"listener-cell listener-value\">${this._formatListenerCount(this.listener)}</div>\n                </div>\n                ${\n                    tag\n                        ? html`\n                    <div class=\"listener-row\">\n                        <div class=\"listener-cell listener-label\">${t(\"listenerCard.tag\")}</div>\n                        <div class=\"listener-cell\">${renderTag(tag)}</div>\n                    </div>\n                `\n                        : \"\"\n                }\n                ${\n                    flags !== undefined\n                        ? html`\n                    <div class=\"listener-row\">\n                        <div class=\"listener-cell listener-label\">${t(\"listenerCard.flags\")}</div>\n                        <div class=\"listener-cell listener-value\">${flags}</div>\n                    </div>\n                `\n                        : \"\"\n                }\n                ${this._renderReturns(this.listener)}\n            </div>\n        `;\n    }\n}\n\ndeclare global {\n    interface HTMLElementTagNameMap {\n        \"fastevent-listener-card\": FastEventListenerCard;\n    }\n}\n","// oxlint-disable typescript/unbound-method\n// packages/viewer/src/listenerViewer/index.ts\nimport { LitElement, html } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { styles } from \"./styles\";\nimport type {\n    AddAfterListenerHook,\n    ClearListenersHook,\n    FastEvent,\n    FastEventListenerNode,\n    RemoveListenerHook,\n} from \"fastevent\";\nimport type { FastEventListenerMeta } from \"fastevent\";\nimport \"./listenerCard\";\nimport { removeItem, renderTag, renderRetainMessage } from \"../utils\";\nimport { t, setLanguage } from \"../utils/t\";\n\n/**\n * FastEventListeners 组件 - 显示 FastEvent 实例的监听器树\n */\n@customElement(\"fastevent-listeners\")\nexport class FastEventListeners extends LitElement {\n    static styles = styles;\n\n    @property({ type: Object })\n    emitter?: FastEvent;\n\n    @property({ type: Boolean, reflect: true })\n    dark = false;\n\n    @state()\n    private _selectedPath: string[] = [];\n\n    @state()\n    private _listeners: FastEventListenerMeta[] = [];\n\n    @state()\n    private _expandedNodes = new Set<string>();\n\n    @property({ type: String, reflect: true })\n    lang = \"cn\";\n\n    private _leftWidth = \"30%\";\n    private _isResizing = false;\n    private _resizeStartX = 0;\n    private _resizeStartWidth = 0;\n\n    /**\n     * 根据路径从 emitter.listeners 中查找节点\n     */\n    private _getListenerNode(path: string[]): FastEventListenerNode | null {\n        if (!this.emitter?.listeners || path.length === 0) return null;\n\n        let currentNode: any = this.emitter.listeners;\n\n        for (const key of path) {\n            if (currentNode[key]) {\n                currentNode = currentNode[key];\n            } else {\n                return null;\n            }\n        }\n\n        return currentNode as FastEventListenerNode;\n    }\n\n    /**\n     * 查找第一个有监听器的节点路径\n     */\n    private _findFirstNodeWithListeners(): string[] | null {\n        if (!this.emitter?.listeners) return null;\n\n        const find = (node: any, path: string[]): string[] | null => {\n            // 检查当前节点是否有监听器\n            if (node.__listeners && node.__listeners.length > 0) {\n                return path;\n            }\n\n            // 递归查找子节点\n            for (const key in node) {\n                if (key === \"__listeners\") continue;\n                const found = find(node[key], [...path, key]);\n                if (found) return found;\n            }\n\n            return null;\n        };\n\n        return find(this.emitter.listeners, []);\n    }\n\n    /**\n     * 初始化展开状态\n     */\n    private _initializeExpandedNodes(): void {\n        if (!this.emitter?.listeners) return;\n\n        this._expandedNodes = new Set();\n\n        const collectPaths = (node: any, path: string[]) => {\n            this._expandedNodes.add(path.join(\"/\"));\n\n            for (const key in node) {\n                if (key === \"__listeners\") continue;\n                collectPaths(node[key], [...path, key]);\n            }\n        };\n\n        collectPaths(this.emitter.listeners, []);\n    }\n\n    /**\n     * 刷新所有数据\n     */\n    private _refreshData(): void {\n        // 如果是首次加载数据，初始化展开状态和选中状态\n        if (this.emitter && this._expandedNodes.size === 0) {\n            this._initializeExpandedNodes();\n\n            const firstPath = this._findFirstNodeWithListeners();\n            if (firstPath) {\n                this._selectedPath = firstPath;\n                const node = this._getListenerNode(firstPath);\n                this._listeners = node?.__listeners || [];\n            }\n        } else {\n            // 如果当前选中的路径仍有监听器，更新监听器列表\n            if (this._selectedPath.length > 0) {\n                const node = this._getListenerNode(this._selectedPath);\n                this._listeners = node?.__listeners || [];\n            }\n        }\n    }\n\n    /**\n     * 处理节点选择\n     */\n    private _handleNodeSelect(event: Event): void {\n        const target = event.currentTarget as HTMLElement;\n        const pathStr = target.dataset.path;\n\n        if (!pathStr) return;\n\n        const path = pathStr.split(\"/\");\n        this._selectedPath = path;\n\n        const node = this._getListenerNode(path);\n        this._listeners = node?.__listeners || [];\n\n        this.requestUpdate();\n    }\n    _onAddAfterListener: AddAfterListenerHook = (_type, _node) => {\n        // 触发重新渲染以更新监听器数量显示\n        this.requestUpdate();\n    };\n    _onRemoveListener: RemoveListenerHook = (_type, _listener, _node) => {\n        // 触发重新渲染以更新监听器数量显示\n        this.requestUpdate();\n    };\n    _onClearListeners: ClearListenersHook = () => {\n        this._handleRefresh();\n    };\n    private _setupHooks() {\n        if (this.emitter) {\n            this.emitter.hooks.AddAfterListener.push(this._onAddAfterListener);\n            this.emitter.hooks.RemoveListener.push(this._onRemoveListener);\n            this.emitter.hooks.ClearListeners.push(this._onClearListeners);\n        }\n    }\n    private _clearHooks() {\n        if (this.emitter) {\n            removeItem(this.emitter.hooks.AddAfterListener, this._onAddAfterListener);\n            removeItem(this.emitter.hooks.RemoveListener, this._onRemoveListener);\n            removeItem(this.emitter.hooks.ClearListeners, this._onClearListeners);\n        }\n    }\n    /**\n     * 处理节点展开/收起\n     */\n    private _handleNodeToggle(event: Event): void {\n        const target = (event.currentTarget as HTMLElement).closest(\"[data-path]\") as HTMLElement;\n        const pathStr = target?.dataset.path;\n\n        if (!pathStr) return;\n\n        const pathKey = pathStr;\n\n        if (this._expandedNodes.has(pathKey)) {\n            this._expandedNodes.delete(pathKey);\n        } else {\n            this._expandedNodes.add(pathKey);\n        }\n\n        this.requestUpdate();\n    }\n\n    /**\n     * 手动刷新\n     */\n    private _handleRefresh(): void {\n        this._refreshData();\n        this.requestUpdate();\n    }\n\n    private _handleResizeStart(event: MouseEvent): void {\n        this._isResizing = true;\n        this._resizeStartX = event.clientX;\n        this._resizeStartWidth =\n            (this.shadowRoot?.querySelector(\".tree-panel\") as HTMLElement)?.offsetWidth || 0;\n\n        document.addEventListener(\"mousemove\", this._handleResizeMove);\n        document.addEventListener(\"mouseup\", this._handleResizeEnd);\n\n        const resizer = this.shadowRoot?.querySelector(\".resizer\") as HTMLElement;\n        resizer?.classList.add(\"dragging\");\n    }\n\n    private _handleResizeMove = (event: MouseEvent): void => {\n        if (!this._isResizing) return;\n\n        const offsetX = event.clientX - this._resizeStartX;\n        const containerWidth =\n            (this.shadowRoot?.querySelector(\".main-container\") as HTMLElement)?.offsetWidth || 0;\n        const newWidthPercent = ((this._resizeStartWidth + offsetX) / containerWidth) * 100;\n        const clampedWidth = Math.max(20, Math.min(80, newWidthPercent));\n\n        this._leftWidth = `${clampedWidth}%`;\n        this.style.setProperty(\"--fe-left-width\", this._leftWidth);\n    };\n\n    private _handleResizeEnd = (): void => {\n        this._isResizing = false;\n        document.removeEventListener(\"mousemove\", this._handleResizeMove);\n        document.removeEventListener(\"mouseup\", this._handleResizeEnd);\n\n        const resizer = this.shadowRoot?.querySelector(\".resizer\") as HTMLElement;\n        resizer?.classList.remove(\"dragging\");\n    };\n\n    private _handleKeyDown(event: KeyboardEvent): void {\n        const target = event.currentTarget as HTMLElement;\n        const pathStr = target.dataset.path;\n\n        if (!pathStr) return;\n\n        const pathKey = pathStr;\n\n        switch (event.key) {\n            case \"Enter\":\n            case \" \":\n                event.preventDefault();\n                this._handleNodeSelect(event);\n                break;\n            case \"ArrowRight\":\n                event.preventDefault();\n                if (!this._expandedNodes.has(pathKey)) {\n                    this._handleNodeToggle(event);\n                }\n                break;\n            case \"ArrowLeft\":\n                event.preventDefault();\n                if (this._expandedNodes.has(pathKey)) {\n                    this._handleNodeToggle(event);\n                }\n                break;\n        }\n    }\n\n    /**\n     * 判断节点是否为空\n     */\n    private _isEmptyNode(node: any): boolean {\n        const keys = Object.keys(node);\n        return keys.length === 1 && node.__listeners && node.__listeners.length === 0;\n    }\n\n    /**\n     * 渲染树节点\n     */\n    private renderTreeNode(\n        node: FastEventListenerNode,\n        path: string[],\n        depth: number,\n    ): ReturnType<typeof html> {\n        const pathKey = path.join(\"/\");\n        const isExpanded = this._expandedNodes.has(pathKey);\n        const isSelected = JSON.stringify(this._selectedPath) === JSON.stringify(path);\n\n        // 获取子节点（排除 __listeners）\n        const childKeys = Object.keys(node).filter((key) => key !== \"__listeners\");\n        const hasChildren = childKeys.length > 0;\n\n        // 获取监听器数量\n        const listenerCount = node.__listeners?.length || 0;\n\n        return html`\n            <div>\n                <div\n                    class=\"tree-node ${isSelected ? \"selected\" : \"\"}\"\n                    style=\"padding-left: ${depth * 8 + 8}px\"\n                    role=\"treeitem\"\n                    data-path=\"${pathKey}\"\n                    aria-expanded=\"${hasChildren ? isExpanded : false}\"\n                    aria-selected=\"${isSelected}\"\n                    tabindex=\"${isSelected ? \"0\" : \"-1\"}\"\n                    @keydown=\"${this._handleKeyDown}\"\n                >\n                    <span\n                        class=\"tree-node-toggle ${isExpanded ? \"expanded\" : \"\"} ${hasChildren ? \"\" : \"hidden\"}\"\n                        data-path=\"${pathKey}\"\n                        @click=\"${this._handleNodeToggle}\"\n                    >\n                        <span class=\"icon arrow\"></span>\n                    </span>\n                    <span class=\"tree-node-content\" data-path=\"${pathKey}\" @click=\"${this._handleNodeSelect}\">\n                        <span class=\"icon listeners\"></span>\n                        <span class=\"tree-node-label\">${path[path.length - 1]}</span>\n                        ${\n                            this.emitter?.retainedMessages.has(pathKey)\n                                ? renderTag(\"retain\", \"red\", t(\"listenerViewer.retainedMessage\"))\n                                : \"\"\n                        }\n                        ${\n                            listenerCount > 0\n                                ? html`\n                            <span class=\"tree-node-badge\">${listenerCount}</span>\n                        `\n                                : \"\"\n                        }\n                    </span>\n                </div>\n                ${\n                    hasChildren && isExpanded\n                        ? html`\n                    <div class=\"tree-children\">\n                        ${childKeys.map((key) => {\n                            const childPath = [...path, key];\n                            return this.renderTreeNode(\n                                node[key] as FastEventListenerNode,\n                                childPath,\n                                depth + 1,\n                            );\n                        })}\n                    </div>\n                `\n                        : \"\"\n                }\n            </div>\n        `;\n    }\n\n    /**\n     * 渲染树\n     */\n    private renderTree(): ReturnType<typeof html> {\n        const listeners = this.emitter?.listeners;\n        if (!listeners || this._isEmptyNode(listeners)) {\n            return html`\n                <div class=\"empty-state\">\n                    <span class=\"icon listeners\"></span>\n                    <p>${t(\"listenerViewer.noRegisteredListeners\")}</p>\n                </div>\n            `;\n        }\n\n        return html`\n            <div>\n                ${Object.keys(listeners)\n                    .filter((key) => key !== \"__listeners\")\n                    .map((key) => {\n                        return this.renderTreeNode(\n                            listeners[key] as FastEventListenerNode,\n                            [key],\n                            0,\n                        );\n                    })}\n            </div>\n        `;\n    }\n\n    private renderListener(listener: FastEventListenerMeta, type: string): ReturnType<typeof html> {\n        return html`<fastevent-listener-card .listener=\"${listener}\" .emitter=\"${this.emitter!}\" .type=\"${type}\" .dark=\"${this.dark}\" .lang=\"${this.lang}\"></fastevent-listener-card>`;\n    }\n\n    private renderListeners(): ReturnType<typeof html> {\n        const pathKey = this._selectedPath.join(\"/\");\n        const message = this.emitter?.retainedMessages.get(pathKey);\n\n        return html`\n            <div>\n                ${\n                    message\n                        ? renderRetainMessage({\n                              message,\n                              pathKey,\n                              dark: this.dark,\n                              onDelete: (key) => {\n                                  this.emitter?.retainedMessages.delete(key);\n                                  this.requestUpdate();\n                              },\n                              onPrint: (msg) => {\n                                  console.group(t(\"listenerViewer.retainedMessage\"));\n                                  console.log(msg);\n                                  console.groupEnd();\n                              },\n                              onCopy: (msg) => {\n                                  const jsonStr = JSON.stringify(msg, null, 2);\n                                  navigator.clipboard.writeText(jsonStr);\n                              },\n                          })\n                        : \"\"\n                }\n                ${\n                    this._listeners.length === 0\n                        ? html`\n                              <div class=\"empty-state\">\n                                  <span class=\"icon listeners\" style=\"--icon-size: 3em\"></span>\n                                  <p>${t(\"listenerViewer.nodeHasNoListeners\")}</p>\n                              </div>\n                          `\n                        : html`\n                        <div class=\"listeners-list\">\n                            ${this._listeners.map((listener) => this.renderListener(listener, pathKey))}\n                        </div>\n                    `\n                }\n            </div>\n        `;\n    }\n\n    override willUpdate(changedProperties: Map<PropertyKey, unknown>): void {\n        super.willUpdate(changedProperties);\n\n        // 当 emitter 变化时，加载数据\n        if (changedProperties.has(\"emitter\")) {\n            if (this.emitter) {\n                this._refreshData();\n            } else {\n                // 清空数据\n                this._listeners = [];\n                this._selectedPath = [];\n                this._expandedNodes = new Set();\n            }\n        }\n        if (changedProperties.has(\"lang\")) {\n            setLanguage(this.lang);\n        }\n    }\n\n    override connectedCallback(): void {\n        super.connectedCallback();\n\n        // 组件连接时加载初始数据\n        if (this.emitter) {\n            this._refreshData();\n            this._setupHooks();\n        }\n    }\n\n    override disconnectedCallback(): void {\n        super.disconnectedCallback();\n\n        // 清理 resize 事件监听\n        if (this._isResizing) {\n            document.removeEventListener(\"mousemove\", this._handleResizeMove);\n            document.removeEventListener(\"mouseup\", this._handleResizeEnd);\n        }\n        this._clearHooks();\n    }\n\n    override render() {\n        return html`\n            <div class=\"toolbar\">\n                <span class=\"toolbar-title\">${t(\"listenerViewer.registeredListeners\")}</span>\n                <button class=\"btn btn-icon\" title=\"${t(\"listenerViewer.refresh\")}\" @click=\"${this._handleRefresh}\">\n                    <span class=\"icon refresh\"></span>\n                </button>\n            </div>\n            <div class=\"main-container\">\n                <div class=\"tree-panel\" role=\"tree\">\n                    ${this.renderTree()}\n                </div>\n                <div class=\"resizer\" @mousedown=\"${this._handleResizeStart}\"></div>\n                <div class=\"listeners-panel\">\n                    ${this.renderListeners()}\n                </div>\n            </div>\n        `;\n    }\n}\n\ndeclare global {\n    interface HTMLElementTagNameMap {\n        \"fastevent-listeners\": FastEventListeners;\n    }\n}\n","import { LitElement, html } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport type { EventLog } from \"./types\";\nimport type { ItemOf } from \"../types\";\nimport { renderTag, renderButton, renderIcon } from \"../utils\";\nimport { t } from \"../utils/t\";\n\n/**\n * 事件日志组件，用于显示单条事件日志\n */\n@customElement(\"fastevent-event-log\")\nexport class FastEventEventLog extends LitElement {\n    // 不使用 shadow DOM 以便样式能够继承\n    createRenderRoot() {\n        return this;\n    }\n\n    @property({ type: Object })\n    log!: EventLog;\n\n    @property({ type: Boolean })\n    dark = false;\n\n    @property({ type: Boolean })\n    showListeners = false;\n\n    @property({ type: Number, attribute: false })\n    updateVersion?: number;\n\n    @property({ attribute: false })\n    onPrintListener?: (listener: ItemOf<EventLog[\"listeners\"]>) => void;\n\n    /**\n     * 单个日志项的本地监听器显示状态\n     * 用于点击监听器数量标签时切换显示\n     */\n    @state()\n    private _localShowListeners = false;\n\n    /**\n     * 切换监听器列表的显示状态\n     */\n    private _toggleListeners() {\n        this._localShowListeners = !this._localShowListeners;\n    }\n\n    /**\n     * 格式化时间戳\n     */\n    private _formatTime(timestamp: number): string {\n        const date = new Date(timestamp);\n        const hours = date.getHours().toString().padStart(2, \"0\");\n        const minutes = date.getMinutes().toString().padStart(2, \"0\");\n        const seconds = date.getSeconds().toString().padStart(2, \"0\");\n        const ms = date.getMilliseconds().toString().padStart(3, \"0\");\n        return `${hours}:${minutes}:${seconds}.${ms}`;\n    }\n\n    /**\n     * 渲染日志标志\n     */\n    private _renderLogFlags(args: any) {\n        if (args && (args.flags || 0) > 0) {\n            const flags = args.flags || 0;\n            if (flags > 1) {\n                return renderTag(\n                    `${args.flags}`,\n                    \"orange\",\n                    t(\"eventViewer.extendedFlags\"),\n                    undefined,\n                    this.dark,\n                );\n            }\n            return html`${(flags | 1) == 0 ? \"\" : renderTag(`T`, \"orange\", t(\"eventViewer.transformed\"), undefined, this.dark)}`;\n        }\n    }\n\n    /**\n     * 格式化监听器执行结果\n     */\n    private _formatResult(result: any): string {\n        if (result === undefined) return t(\"eventViewer.executing\");\n        if (result === null) return \"null\";\n\n        // 处理 Error 对象\n        if (result instanceof Error) {\n            return t(\"eventViewer.error\", result.message);\n        }\n\n        // 处理对象和数组\n        if (typeof result === \"object\") {\n            try {\n                const str = JSON.stringify(result);\n                if (str.length > 100) {\n                    return str.substring(0, 100) + \"...\";\n                }\n                return str;\n            } catch {\n                return result.toString();\n            }\n        }\n\n        // 处理其他类型\n        return String(result);\n    }\n\n    /**\n     * 渲染单个监听器\n     */\n    private _renderListener(listener: ItemOf<EventLog[\"listeners\"]>) {\n        const statusClass = listener.status === \"ok\" ? \"yes\" : listener.status;\n        const resultText = this._formatResult(listener.result);\n        return html`\n            <div class=\"listener\">\n                ${renderIcon(\"listener\", t(\"eventViewer.listener\"))}\n                <span class=\"listener-name\" title=\"${t(\"eventViewer.listener\")}\" @click=\"${() => this.onPrintListener?.(listener)}\">${listener.name}</span>\n                ${listener.tag ? renderTag(listener.tag, undefined, t(\"eventViewer.listenerTag\", listener.tag), undefined, this.dark) : \"\"}\n                ${renderTag(listener.count, undefined, t(\"eventViewer.executionCount\"), undefined, this.dark)}\n                ${listener.flags !== undefined ? renderTag(`${listener.flags}`, \"orange\", t(\"eventViewer.listenerFlags\"), undefined, this.dark) : \"\"}\n                <span class=\"listener-status ${statusClass}\" title=\"${resultText}\">\n                    ${renderIcon(listener.status === \"running\" ? \"loading\" : listener.status === \"ok\" ? \"yes\" : listener.status)}\n                </span>\n            </div>\n        `;\n    }\n\n    /**\n     * 渲染监听器列表\n     */\n    private _renderListeners(listeners: EventLog[\"listeners\"]) {\n        return html`${listeners.map((listener) => this._renderListener(listener))}`;\n    }\n\n    render() {\n        const message = this.log.message.deref();\n        const args = this.log.args.deref();\n        if (!message) return html``;\n\n        const payload = JSON.stringify(message.payload ?? \"\");\n        const timeStr = this._formatTime(this.log.triggerTime);\n\n        return html`\n            <div class=\"log-item\">\n                <div class=\"log-content\">\n                    <div class=\"log-header\">\n                        ${this.log.done ? \"✨\" : renderIcon(\"loading\")}\n                        <span class=\"log-type\" title=\"${t(\"eventViewer.eventType\")}\">${message.type}</span>\n                        <span class=\"log-time\" title=\"${t(\"eventViewer.triggerTime\")}\">${timeStr}</span>\n                        ${renderTag(`#${this.log.id}`, \"gray\", t(\"eventViewer.serialNumber\"), undefined, this.dark)}\n                        ${\n                            !this.showListeners\n                                ? html`<span\n                                  class=\"tag-clickable\"\n                                  style=\"cursor: pointer;\"\n                                  @click=\"${() => this._toggleListeners()}\">${renderTag(`ƒ(${this.log.listeners.length})`, \"purple\", t(\"eventViewer.totalListeners\", this.log.listeners.length), undefined, this.dark)}</span>`\n                                : \"\"\n                        }\n                        ${args?.retain ? renderTag(\"retain\", \"red\", t(\"eventViewer.retainLastEvent\"), undefined, this.dark) : \"\"}\n                        ${this._renderLogFlags(args!)}\n                        ${args?.rawEventType && args?.rawEventType !== message.type ? renderTag(args.rawEventType, \"blue\", t(\"eventViewer.rawEventType\", args.rawEventType), undefined, this.dark) : \"\"}\n                        ${this.log.duration[1] > 0 ? renderTag(`${Number((this.log.duration[1] - this.log.duration[0]).toFixed(3))}ms`, \"green\", t(\"eventViewer.executionTime\"), undefined, this.dark) : \"\"}\n                        ${renderButton(\n                            \"\",\n                            () => {\n                                const jsonStr = JSON.stringify(message, null, 2);\n                                navigator.clipboard.writeText(jsonStr);\n                            },\n                            {\n                                icon: \"copy\",\n                                className: \"btn-icon\",\n                                title: t(\"eventViewer.copyMessage\"),\n                            },\n                        )}\n                    </div>\n                    ${payload ? html`<div class=\"log-payload\">${payload}</div>` : \"\"}\n                    ${\n                        this.log.listeners.length > 0\n                            ? html`\n                        <div class=\"log-listeners ${this.showListeners || this._localShowListeners ? \"log-listeners-visible\" : \"log-listeners-hidden\"}\">\n                            ${this._renderListeners(this.log.listeners)}\n                        </div>\n                    `\n                            : \"\"\n                    }\n                </div>\n            </div>\n        `;\n    }\n}\n\ndeclare global {\n    interface HTMLElementTagNameMap {\n        \"fastevent-event-log\": FastEventEventLog;\n    }\n}\n","// oxlint-disable typescript/unbound-method\nimport {\n    FastEvent,\n    type FastEventListenerArgs,\n    type FastEventListenerMeta,\n    type FastEventListenerNode,\n    type FastEventMessage,\n    type FastEventSubscriber,\n    type FastEventListenerFlags,\n} from \"fastevent\";\nimport { LitElement, html } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport type { ItemOf } from \"../types\";\nimport { styles } from \"./styles\";\nimport type { EventLog } from \"./types\";\nimport \"../listenerViewer/index.js\";\nimport \"./eventLog.js\";\nimport { removeItem } from \"../utils/removeItem\";\nimport { renderButton, renderIcon } from \"../utils\";\nimport { t, setLanguage } from \"../utils/t\";\n\n@customElement(\"fastevent-viewer\")\nexport class FastEventViewer extends LitElement {\n    static styles = styles;\n\n    @state()\n    private _emitters: FastEvent[] = [];\n\n    @state()\n    private _currentEmitterIndex = 0;\n\n    @state()\n    private _isDropdownOpen = false;\n\n    private _emitterLogs = new Map<number, EventLog[]>();\n    private _emitterLogIndexes = new Map<number, number[]>();\n\n    @property({ type: Object })\n    get emitter(): FastEvent | FastEvent[] | undefined {\n        return this._emitters.length === 1 ? this._emitters[0] : this._emitters;\n    }\n\n    set emitter(value: FastEvent | FastEvent[] | undefined) {\n        const newValue = Array.isArray(value) ? value : value ? [value] : [];\n        const oldValue = this._emitters;\n\n        this._emitters = newValue;\n\n        if (this._currentEmitterIndex >= this._emitters.length) {\n            this._currentEmitterIndex = 0;\n        }\n\n        // 只在 emitter 实际变化时才重新附加\n        if (oldValue.length !== newValue.length || oldValue.some((e, i) => e !== newValue[i])) {\n            this._reattach();\n        }\n\n        this.requestUpdate(\"emitter\", oldValue.length === 1 ? oldValue[0] : oldValue);\n    }\n\n    @property({ type: Boolean, reflect: true })\n    dark = false;\n\n    @property({ type: Boolean, reflect: true })\n    enable = true;\n\n    /**\n     * 允许显示的日志最大数量,超过此数量时自动删除旧的\n     */\n    @property({ type: Number })\n    maxSize: number = 500;\n\n    @property({ type: String })\n    title: string = \"\";\n\n    @property({ type: String, reflect: true })\n    lang = \"cn\";\n\n    /**\n     * 是否在日志中显示监听器详情\n     */\n    @property({ type: Boolean })\n    showListeners = true;\n\n    @state()\n    private _filterText = \"\";\n\n    @state()\n    private _showListeners = false;\n\n    @state()\n    private _isShowListeners = false;\n\n    subscriber?: FastEventSubscriber;\n    messages: FastEventMessage[] = [];\n    logs: EventLog[] = [];\n    // 用于渲染的logs数组的索引\n    private _logIndexs: number[] = [];\n\n    connectedCallback(): void {\n        super.connectedCallback();\n        setLanguage(this.lang);\n        this._attach();\n        document.addEventListener(\"click\", this._handleDocumentClick);\n    }\n\n    disconnectedCallback(): void {\n        this._detach();\n        document.removeEventListener(\"click\", this._handleDocumentClick);\n    }\n\n    willUpdate(changedProperties: Map<string, any>): void {\n        // 移除了 emitter 的 _reattach() 调用，因为 setter 已经处理了\n        if (changedProperties.has(\"_filterText\")) {\n            this._updateFilteredLogs();\n        }\n        if (changedProperties.has(\"showListenersInLog\")) {\n            this._isShowListeners = this.showListeners;\n        }\n        if (changedProperties.has(\"lang\")) {\n            setLanguage(this.lang);\n        }\n    }\n\n    private _getCurrentEmitter(): FastEvent | undefined {\n        return this._emitters[this._currentEmitterIndex];\n    }\n\n    private _switchEmitter(index: number) {\n        if (index === this._currentEmitterIndex) return;\n\n        // 保存当前 emitter 的日志\n        this._emitterLogs.set(this._currentEmitterIndex, [...this.logs]);\n        this._emitterLogIndexes.set(this._currentEmitterIndex, [...this._logIndexs]);\n\n        // 切换到新 emitter\n        this._currentEmitterIndex = index;\n\n        // 恢复新 emitter 的日志\n        this.logs = this._emitterLogs.get(index) || [];\n        this._logIndexs = this._emitterLogIndexes.get(index) || [];\n\n        // 重新附加钩子\n        this._reattach();\n\n        // 关闭下拉菜单\n        this._isDropdownOpen = false;\n\n        this.requestUpdate();\n    }\n\n    private _handleDocumentClick = (e: MouseEvent) => {\n        const target = e.target as HTMLElement;\n        const dropdown = this.renderRoot?.querySelector(\".emitter-dropdown-container\");\n        if (dropdown && !dropdown.contains(target)) {\n            this._isDropdownOpen = false;\n            this.requestUpdate();\n        }\n    };\n\n    private _reattach() {\n        this._detach();\n        this.clear();\n        this._attach();\n    }\n\n    private _updateFilteredLogs() {\n        const filter = this._filterText.toLowerCase().trim();\n        if (!filter) {\n            // 倒序：最新的在前\n            this._logIndexs = this.logs.map((_, i) => i).reverse();\n            return;\n        }\n\n        this._logIndexs = this.logs\n            .map((log, i) => ({ log, index: i }))\n            .filter(({ log }) => {\n                const message = log.message.deref();\n                if (!message) return false;\n                return message.type.toLowerCase().includes(filter);\n            })\n            .map(({ index }) => index)\n            .reverse(); // 倒序：最新的在前\n    }\n\n    _onBeforeExecuteListener = (message: FastEventMessage, args: FastEventListenerArgs) => {\n        const currentEmitter = this._getCurrentEmitter();\n        if (!currentEmitter || !this.enable) return;\n\n        const listeners = (currentEmitter.getListeners(message.type) || []).map((meta) => {\n            return this._getListenerMeta(meta, \"running\");\n        });\n        const log = {\n            message: new WeakRef(message),\n            done: false,\n            args: new WeakRef(args),\n            triggerTime: Date.now(),\n            duration: [performance.now(), 0],\n            listeners,\n            updateVersion: 0,\n        } as EventLog;\n        log.id = this.logs.length + 1;\n        // 重点：用于跟踪\n        (message as any).__index = log.id - 1;\n        this.logs.push(log as any);\n        // 倒序：将新日志索引添加到开头\n        this._logIndexs.unshift(this.logs.length - 1);\n\n        // 限制日志数量\n        if (this.maxSize > 0 && this.logs.length > this.maxSize) {\n            this.logs.shift();\n            this._updateFilteredLogs();\n        }\n\n        this.requestUpdate();\n    };\n\n    _getListenerMeta(meta: FastEventListenerMeta, status?: any): ItemOf<EventLog[\"listeners\"]> {\n        if (status === undefined) {\n            if (meta.length === 6) {\n                let returns: any;\n                const m = meta[5];\n                if (m instanceof WeakRef) {\n                    returns = m.deref();\n                } else {\n                    returns = m;\n                }\n                if (returns instanceof Error) {\n                    status = \"error\";\n                } else {\n                    status = \"ok\";\n                }\n            } else {\n                status = \"ok\";\n            }\n        }\n        return {\n            status: status,\n            fn: new WeakRef(meta[0]),\n            name: meta[0].name || \"anonymous\",\n            count: `${meta[2]}/${meta[1] === 0 ? \"∞\" : meta[1]}`,\n            tag: meta[3],\n            flags: meta[4] as FastEventListenerFlags | undefined,\n            result: meta[5],\n        };\n    }\n\n    _onAfterExecuteListener = (\n        message: FastEventMessage,\n        returns: any[],\n        _listeners: FastEventListenerNode[],\n    ) => {\n        if (!this.enable) return;\n\n        const index = (message as any).__index;\n        if (typeof index === \"number\") {\n            const log = this.logs[index];\n            if (log) {\n                log.done = true;\n                log.duration[1] = performance.now();\n            }\n            const newListeners = _listeners.reduce<EventLog[\"listeners\"]>((result, current) => {\n                current.__listeners.forEach((meta) => {\n                    result.push(this._getListenerMeta(meta));\n                });\n                return result;\n            }, []);\n\n            // 找到对应的 log 并更新 listeners\n            const logIndex = index; //this.logs.findIndex((l) => l.id === index);\n            if (logIndex !== -1) {\n                this.logs[logIndex].listeners = newListeners;\n                this.logs[logIndex].updateVersion++; // 递增版本号以触发组件重新渲染\n                returns.map((r, i) => {\n                    const listener = this.logs[logIndex].listeners[i];\n                    if (listener) {\n                        try {\n                            listener.result = structuredClone(r);\n                        } catch {\n                            listener.result = r;\n                        }\n                        if (r instanceof Error) {\n                            listener.status = \"error\";\n                        } else {\n                            listener.status = \"ok\";\n                        }\n                    }\n                });\n            }\n            delete (message as any).__index;\n        }\n\n        this.requestUpdate();\n    };\n\n    private _attach() {\n        const currentEmitter = this._getCurrentEmitter();\n        if (currentEmitter) {\n            const options = currentEmitter.options;\n            currentEmitter.hooks.BeforeExecuteListener.push(this._onBeforeExecuteListener);\n            currentEmitter.hooks.AfterExecuteListener.push(this._onAfterExecuteListener);\n            options.debug = true;\n        }\n    }\n\n    private _detach() {\n        const currentEmitter = this._getCurrentEmitter();\n        if (currentEmitter) {\n            removeItem(currentEmitter.hooks.BeforeExecuteListener, this._onBeforeExecuteListener);\n            removeItem(currentEmitter.hooks.AfterExecuteListener, this._onAfterExecuteListener);\n            const options = currentEmitter.options;\n            options.debug = false;\n        }\n    }\n\n    clear() {\n        this.logs = [];\n        this._logIndexs = [];\n        this.messages = [];\n        this.requestUpdate();\n    }\n\n    /**\n     * 在控制台显示监听器函数\n     * @param listener\n     */\n    private _printListenerInfo(listener: ItemOf<EventLog[\"listeners\"]>) {\n        const fn = listener.fn.deref();\n        if (typeof fn === \"function\") {\n            console.group(\"FastEvent Listener\");\n            console.log(t(\"eventViewer.listener\", fn.name || \"anonymous\"));\n            console.log(fn);\n            console.log(t(\"eventViewer.executionResult\"), listener.result);\n            console.groupEnd();\n        }\n    }\n\n    renderFilter() {\n        return html`<input\n            type=\"text\"\n            class=\"filter-input\"\n            placeholder=\"${t(\"eventViewer.filterPlaceholder\")}\"\n            .value=\"${this._filterText}\"\n            @input=\"${(e: InputEvent) => {\n                this._filterText = (e.target as HTMLInputElement).value;\n            }}\"\n        />`;\n    }\n\n    private _renderEmitterMenu() {\n        return html`\n            <div class=\"emitter-dropdown-menu\">\n                ${this._emitters.map((emitter, index) => {\n                    const isActive = index === this._currentEmitterIndex;\n                    const menuTitle =\n                        this.title.length > 0\n                            ? this.title\n                            : emitter?.title || `Emitter ${index + 1}`;\n                    return html`\n                        <div\n                            class=\"emitter-menu-item ${isActive ? \"active\" : \"\"}\"\n                            @click=\"${() => this._switchEmitter(index)}\"\n                        >\n                            <span class=\"menu-item-icon\">${isActive ? renderIcon(\"yes\") : \"\"}</span>\n                            <span class=\"menu-item-label\">${menuTitle}</span>\n                        </div>\n                    `;\n                })}\n            </div>\n        `;\n    }\n    private _getEmitterVarName() {\n        return `$emitter`;\n    }\n    private _injectEmitterToConsole() {\n        const varname = this._getEmitterVarName();\n        const emitter = this._getCurrentEmitter();\n        if (emitter) {\n            (window as any)[varname] = emitter;\n            console.log(\"FastEvent instance: \", `${varname}=`, emitter);\n        }\n    }\n    renderHeader() {\n        const hasMultipleEmitters = this._emitters.length > 1;\n        const currentEmitter = this._getCurrentEmitter();\n        const displayTitle = this.title.length > 0 ? this.title : currentEmitter?.title || \"\";\n\n        return html`\n            <div class=\"header\">\n                ${\n                    hasMultipleEmitters\n                        ? html`\n                        <div class=\"emitter-dropdown-container\">\n                            <button\n                                class=\"emitter-dropdown-trigger\"\n                                @click=\"${(e: Event) => {\n                                    this._isDropdownOpen = !this._isDropdownOpen;\n                                    e.stopPropagation();\n                                    this.requestUpdate();\n                                }}\"\n                                title=\"${t(\"eventViewer.switchEmitter\")}\"\n                            >\n                                <span class=\"header-title\">${displayTitle}                                    \n                                </span>\n                                <span class=\"dropdown-arrow ${this._isDropdownOpen ? \"open\" : \"\"}\"></span>\n                            </button>\n                            ${this._isDropdownOpen ? this._renderEmitterMenu() : \"\"}\n                        </div>\n                        <span class=\"emitter-dropdown-spacer\"></span>\n                      `\n                        : html`<span class=\"header-title\">${displayTitle}</span>`\n                }\n                ${renderButton(\"\", () => this._injectEmitterToConsole(), {\n                    icon: \"inspect\",\n                    className: \"btn-icon\",\n                    title: t(\"eventViewer.inspect\", this._getEmitterVarName()),\n                })}\n                ${renderButton(\n                    \"\",\n                    () => {\n                        this.dark = !this.dark;\n                    },\n                    {\n                        icon: \"dark\",\n                        className: \"btn-icon\" + (this._showListeners ? \" btn-pressed\" : \"\"),\n                        title: this.dark ? t(\"eventViewer.normalMode\") : t(\"eventViewer.darkMode\"),\n                    },\n                )}\n                ${renderButton(\n                    \"\",\n                    () => {\n                        this._showListeners = !this._showListeners;\n                    },\n                    {\n                        icon: \"listeners\",\n                        className: \"btn-icon\" + (this._showListeners ? \" btn-pressed\" : \"\"),\n                        title: this._showListeners\n                            ? t(\"eventViewer.showEvent\")\n                            : t(\"eventViewer.showListeners\"),\n                    },\n                )}\n            </div>\n        `;\n    }\n\n    renderToolbar() {\n        return html`\n            <div class=\"toolbar\">\n                ${this.renderFilter()}\n                <span class=\"toolbar-spacer\">${t(\"eventViewer.totalLogs\", this._logIndexs.length)}</span>\n                ${renderButton(\n                    \"\",\n                    () => {\n                        this._isShowListeners = !this._isShowListeners;\n                        this.requestUpdate();\n                    },\n                    {\n                        icon: \"listener\",\n                        className: \"btn-icon\" + (this._isShowListeners ? \" btn-pressed\" : \"\"),\n                        title: this._isShowListeners\n                            ? t(\"eventViewer.hideListenerDetails\")\n                            : t(\"eventViewer.showListenerDetails\"),\n                    },\n                )}\n                <button class=\"btn btn-icon\" title=\"${t(\"eventViewer.clear\")}\" @click=\"${() => this.clear()}\">\n                    <span class=\"icon clear\"></span>\n                </button>\n            </div>\n        `;\n    }\n\n    renderLogs() {\n        if (this._logIndexs.length === 0) {\n            return html`\n                <div class=\"empty-state\">\n                    ${renderIcon(\"file\")}\n                    <p>${t(\"eventViewer.noEventLogs\")}</p>\n                </div>\n            `;\n        }\n\n        return html`\n            <div class=\"logs\">\n                ${this._logIndexs.map((index) => {\n                    const log = this.logs[index];\n                    return html`\n                        <fastevent-event-log\n                            .log=\"${log}\"\n                            .dark=\"${this.dark}\"\n                            .showListeners=\"${this._isShowListeners}\"\n                            .updateVersion=\"${log.updateVersion}\"\n                            .onPrintListener=\"${this._printListenerInfo}\">\n                        </fastevent-event-log>\n                    `;\n                })}\n            </div>\n        `;\n    }\n\n    render() {\n        return html`\n            ${this.renderHeader()}\n            ${\n                this._showListeners\n                    ? html`<fastevent-listeners\n                        .emitter=\"${this._getCurrentEmitter()}\"\n                        .dark=\"${this.dark}\"\n                        .lang=\"${this.lang}\"\n                        style=\"flex-grow:1\">\n                    </fastevent-listeners>`\n                    : html`${this.renderToolbar()}${this.renderLogs()}`\n            }\n        `;\n    }\n}\n\ndeclare global {\n    interface HTMLElementTagNameMap {\n        \"fastevent-viewer\": FastEventViewer;\n    }\n}\n"],"x_google_ignoreList":[1,2,3,4,5,6,7],"mappings":"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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GCRR,KAAS;AAAA,MAChB,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GCAO,KAAS;AAAA,MAChB,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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"}